181 changed files with 1985 additions and 7836 deletions
			
			
		@ -1,71 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 提交审批、驳回修改 | 
					 | 
				
			||||
 * body { | 
					 | 
				
			||||
 * action:1驳回修改 2审批通过 | 
					 | 
				
			||||
 * userRegionType:提交用户所属区域级别:3乡镇级,2区县级 | 
					 | 
				
			||||
 * userId:提交用户id | 
					 | 
				
			||||
 * rejectReasons:驳回意见 | 
					 | 
				
			||||
 * correctiveAction:采取措施。区县复核时提交内容 | 
					 | 
				
			||||
 * punishment:实施处罚,强制措施情况。区县复核时提交内容 | 
					 | 
				
			||||
 * }  | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
const moment = require('moment'); | 
					 | 
				
			||||
async function submitApproval (ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const data = ctx.request.body; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let oldData = await models.UserPlaceSecurityRecord.findOne({ where: { id: data.id } }) | 
					 | 
				
			||||
        if (oldData == null) { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { name: `message`, message: `该条填报数据不存在` }; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            if ((data.action == 1 || data.action == 2) && (data.userRegionType == 3 || data.userRegionType == 2)) { | 
					 | 
				
			||||
                let dataSave = {} | 
					 | 
				
			||||
                if (data.action == 1) {//驳回
 | 
					 | 
				
			||||
                    dataSave = { | 
					 | 
				
			||||
                        rejectManId: data.userId, | 
					 | 
				
			||||
                        rejectReasons: data.rejectReasons, | 
					 | 
				
			||||
                        type: false,//是否重新发起true默认false可以重新发起
 | 
					 | 
				
			||||
                        rejectTime: moment() | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                    if (data.userRegionType == 2) {//区县复核,14、15项可修改
 | 
					 | 
				
			||||
                        dataSave.correctiveAction = data.correctiveAction; | 
					 | 
				
			||||
                        dataSave.punishment = data.punishment; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } else {//通过
 | 
					 | 
				
			||||
                    if (data.userRegionType == 3) { | 
					 | 
				
			||||
                        dataSave = { | 
					 | 
				
			||||
                            audit1ManId: data.userId, | 
					 | 
				
			||||
                            audit1ManIdTime: moment().format() | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        dataSave = {//区县复核,14、15项可修改
 | 
					 | 
				
			||||
                            correctiveAction: data.correctiveAction, | 
					 | 
				
			||||
                            punishment: data.punishment, | 
					 | 
				
			||||
                            audit2ManId: data.userId, | 
					 | 
				
			||||
                            audit2ManIdTime: moment().format() | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                await models.UserPlaceSecurityRecord.update(dataSave, { where: { id: data.id } }); | 
					 | 
				
			||||
                ctx.status = 200; | 
					 | 
				
			||||
                ctx.body = { name: `message`, message: `提交成功` }; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { name: `message`, message: `提交数据有误` }; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": { name: `message`, message: `提交审批、驳回修改数据失败` } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    submitApproval | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,116 +0,0 @@ | 
				
			|||||
 | 
					 | 
				
			||||
function deepCompare(x, y) { | 
					 | 
				
			||||
    var i, l, leftChain, rightChain; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    function compare2Objects(x, y) { | 
					 | 
				
			||||
        var p; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // remember that NaN === NaN returns false
 | 
					 | 
				
			||||
        // and isNaN(undefined) returns true
 | 
					 | 
				
			||||
        if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') { | 
					 | 
				
			||||
            return true; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // Compare primitives and functions.     
 | 
					 | 
				
			||||
        // Check if both arguments link to the same object.
 | 
					 | 
				
			||||
        // Especially useful on the step where we compare prototypes
 | 
					 | 
				
			||||
        if (x === y) { | 
					 | 
				
			||||
            return true; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // Works in case when functions are created in constructor.
 | 
					 | 
				
			||||
        // Comparing dates is a common scenario. Another built-ins?
 | 
					 | 
				
			||||
        // We can even handle functions passed across iframes
 | 
					 | 
				
			||||
        if ((typeof x === 'function' && typeof y === 'function') || | 
					 | 
				
			||||
            (x instanceof Date && y instanceof Date) || | 
					 | 
				
			||||
            (x instanceof RegExp && y instanceof RegExp) || | 
					 | 
				
			||||
            (x instanceof String && y instanceof String) || | 
					 | 
				
			||||
            (x instanceof Number && y instanceof Number)) { | 
					 | 
				
			||||
            return x.toString() === y.toString(); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // At last checking prototypes as good as we can
 | 
					 | 
				
			||||
        if (!(x instanceof Object && y instanceof Object)) { | 
					 | 
				
			||||
            return false; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) { | 
					 | 
				
			||||
            return false; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (x.constructor !== y.constructor) { | 
					 | 
				
			||||
            return false; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (x.prototype !== y.prototype) { | 
					 | 
				
			||||
            return false; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // Check for infinitive linking loops
 | 
					 | 
				
			||||
        if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) { | 
					 | 
				
			||||
            return false; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // Quick checking of one object being a subset of another.
 | 
					 | 
				
			||||
        // todo: cache the structure of arguments[0] for performance
 | 
					 | 
				
			||||
        for (p in y) { | 
					 | 
				
			||||
            if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) { | 
					 | 
				
			||||
                return false; | 
					 | 
				
			||||
            } else if (typeof y[p] !== typeof x[p]) { | 
					 | 
				
			||||
                return false; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        for (p in x) { | 
					 | 
				
			||||
            if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) { | 
					 | 
				
			||||
                return false; | 
					 | 
				
			||||
            } else if (typeof y[p] !== typeof x[p]) { | 
					 | 
				
			||||
                return false; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            switch (typeof (x[p])) { | 
					 | 
				
			||||
                case 'object': | 
					 | 
				
			||||
                case 'function': | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                    leftChain.push(x); | 
					 | 
				
			||||
                    rightChain.push(y); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                    if (!compare2Objects(x[p], y[p])) { | 
					 | 
				
			||||
                        return false; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                    leftChain.pop(); | 
					 | 
				
			||||
                    rightChain.pop(); | 
					 | 
				
			||||
                    break; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                default: | 
					 | 
				
			||||
                    if (x[p] !== y[p]) { | 
					 | 
				
			||||
                        return false; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                    break; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        return true; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    if (arguments.length < 1) { | 
					 | 
				
			||||
        return true; //Die silently? Don't know how to handle such case, please help...
 | 
					 | 
				
			||||
        // throw "Need two or more arguments to compare";
 | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    for (i = 1, l = arguments.length; i < l; i++) { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        leftChain = []; //Todo: this can be cached
 | 
					 | 
				
			||||
        rightChain = []; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (!compare2Objects(arguments[0], arguments[i])) { | 
					 | 
				
			||||
            return false; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    return true; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    deepCompare | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -1,63 +0,0 @@ | 
				
			|||||
//获取固化数据接口
 | 
					 | 
				
			||||
async function getDataDictionary(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { model } = ctx.params; | 
					 | 
				
			||||
        const { where, attributes, order } = ctx.query; | 
					 | 
				
			||||
        let findObj = {}; | 
					 | 
				
			||||
        if (where) { | 
					 | 
				
			||||
            let whereJson = JSON.parse(where); | 
					 | 
				
			||||
            findObj.where = whereJson; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (order) { | 
					 | 
				
			||||
            findObj.order = [JSON.parse(order)]; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (attributes) { | 
					 | 
				
			||||
            attributes = attributes.split(','); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        let rslt = await models[model].findAll(findObj); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取数据字典失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
//基础修改接口
 | 
					 | 
				
			||||
async function putDataDictionary(ctx) { | 
					 | 
				
			||||
    const transaction = await ctx.fs.dc.orm.transaction(); | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let errMsg = "修改失败"; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const { model } = ctx.params; | 
					 | 
				
			||||
        const { where, dataToSave } = ctx.request.body; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const oldData = await models[model].findOne({ where: where }); | 
					 | 
				
			||||
        if (oldData) { | 
					 | 
				
			||||
            await models[model].update(dataToSave, { where: where, transaction }); | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            errMsg = "未找到需要修改的数据"; | 
					 | 
				
			||||
            ctx.throw(400) | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        ctx.status = 204; | 
					 | 
				
			||||
        await transaction.commit(); | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        await transaction.rollback(); | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": errMsg | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getDataDictionary, | 
					 | 
				
			||||
    putDataDictionary | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -0,0 +1,36 @@ | 
				
			|||||
 | 
					'use strict'; | 
				
			||||
 | 
					const roadKeyMap = require('./road.json') | 
				
			||||
 | 
					console.log(roadKeyMap); | 
				
			||||
 | 
					async function importIn (ctx) { | 
				
			||||
 | 
					    try { | 
				
			||||
 | 
					        const models = ctx.fs.dc.models; | 
				
			||||
 | 
					        const { level } = ctx.query; | 
				
			||||
 | 
					        const data = ctx.request.body; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        const roadRes = await models.Road.findAll({ | 
				
			||||
 | 
					            where: { | 
				
			||||
 | 
					                level | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        }) | 
				
			||||
 | 
					        let preCreateArr = [] | 
				
			||||
 | 
					        for (let d of data) { | 
				
			||||
 | 
					            if (roadRes.some(r => r.routeCode + r.sectionNo == d['路线代码'] + d['路段序号'])) { | 
				
			||||
 | 
					                //repeat
 | 
				
			||||
 | 
					            } else { | 
				
			||||
 | 
					                // await models.Road.create(d);
 | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        ctx.status = 204 | 
				
			||||
 | 
					    } catch (error) { | 
				
			||||
 | 
					        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
				
			||||
 | 
					        ctx.status = 400; | 
				
			||||
 | 
					        ctx.body = { | 
				
			||||
 | 
					            message: typeof error == 'string' ? error : undefined | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					module.exports = { | 
				
			||||
 | 
					    importIn | 
				
			||||
 | 
					}; | 
				
			||||
@ -0,0 +1,50 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					    "路线名称": "routeName", | 
				
			||||
 | 
					    "路线代码": "routeCode", | 
				
			||||
 | 
					    "路段序号": "sectionNo", | 
				
			||||
 | 
					    "乡镇编码": "townshipCode", | 
				
			||||
 | 
					    "起点地名": "startingPlaceName", | 
				
			||||
 | 
					    "起点桩号": "startStation", | 
				
			||||
 | 
					    "起点分界点类别": "categoryOfStartingPointAndDividingPoint", | 
				
			||||
 | 
					    "止点地名": "stopPlaceName", | 
				
			||||
 | 
					    "止点分界点类别": "categoryOfDeadCenterAndDividingPoint", | 
				
			||||
 | 
					    "止点桩号": "stopStation", | 
				
			||||
 | 
					    "路段类型": "sectionType", | 
				
			||||
 | 
					    "路段性质": "natureOfRoadSection", | 
				
			||||
 | 
					    "建成时间": "completionTime", | 
				
			||||
 | 
					    "GBM及文明样板路": "gBMAndCivilizedModelRoad", | 
				
			||||
 | 
					    "地貌": "landforms", | 
				
			||||
 | 
					    "收费性质": "natureOfCharges", | 
				
			||||
 | 
					    "涵洞数量": "numberOfCulverts", | 
				
			||||
 | 
					    "技术等级": "technicalLevel", | 
				
			||||
 | 
					    "路面类型": "pavementType", | 
				
			||||
 | 
					    "路面宽度": "pavementWidth", | 
				
			||||
 | 
					    "路基宽度": "subgradeWidth", | 
				
			||||
 | 
					    "车道特征": "laneCharacteristics", | 
				
			||||
 | 
					    "是否晴雨通车": "whetherItIsOpenToTrafficInSunnyOrRainyDays", | 
				
			||||
 | 
					    "设计时速": "designSpeedPerHour", | 
				
			||||
 | 
					    "是否城管路段": "urbanManagementSectionOrNot", | 
				
			||||
 | 
					    "管养单位": "managementAndMaintenanceUnit", | 
				
			||||
 | 
					    "路政管理单位": "roadAdministrationUnit", | 
				
			||||
 | 
					    "列养情况": "alimentation", | 
				
			||||
 | 
					    "列养资金来源": "sourceOfListedMaintenanceFunds", | 
				
			||||
 | 
					    "养护时间": "curingTime", | 
				
			||||
 | 
					    "可绿化里程": "greeningMileage", | 
				
			||||
 | 
					    "已绿化里程": "greeningMileaged", | 
				
			||||
 | 
					    "重复道路路段类型": "typeOfRepeatedRoadSection", | 
				
			||||
 | 
					    "重复路段序号": "serialNumberOfRepeatedSection", | 
				
			||||
 | 
					    "重复路段路线编码": "repeatedSectionRouteCode", | 
				
			||||
 | 
					    "填报单位": "reportingUnit", | 
				
			||||
 | 
					    "变更原因": "reasonForChange", | 
				
			||||
 | 
					    "变更时间": "changeTime", | 
				
			||||
 | 
					    "是否按干线公路管理接养": "whetherMaintenanceManagedHighway", | 
				
			||||
 | 
					    "备注": "remarks", | 
				
			||||
 | 
					    "上年路线编码": "routeCodeOfLastYear", | 
				
			||||
 | 
					    "上年路线名称": "routeNameOfLastYear", | 
				
			||||
 | 
					    "上年起点桩号": "startingStationOfLastYear", | 
				
			||||
 | 
					    "上年止点桩号": "lastYearsEndingPointStakeNumber", | 
				
			||||
 | 
					    "图形里程": "graphicMileage", | 
				
			||||
 | 
					    "桩号里程": "chainageMileage", | 
				
			||||
 | 
					    "所在区县": "districtcounty", | 
				
			||||
 | 
					    "所在地市": "locationCity" | 
				
			||||
 | 
					} | 
				
			||||
@ -1,25 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//获取南昌市下所有区县
 | 
					 | 
				
			||||
async function getCountiesList(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let rslt = await models.Department.findAll({ | 
					 | 
				
			||||
            where: { type: 2 }, | 
					 | 
				
			||||
            order: [['id', 'asc']], | 
					 | 
				
			||||
        }); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取南昌市下所有区县失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getCountiesList, | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,87 +0,0 @@ | 
				
			|||||
async function getResource(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
         | 
					 | 
				
			||||
        const res = await models.Resource.findAll({ | 
					 | 
				
			||||
            where: { parentResource: null }, | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                model: models.Resource, | 
					 | 
				
			||||
            }] | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = res; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "查询所有权限数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
async function getUserResource(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { userId } = ctx.query; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const res = await models.UserResource.findAll({ | 
					 | 
				
			||||
            where: { userId: userId }, | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                model: models.Resource, | 
					 | 
				
			||||
            }] | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = res; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "查询用户权限数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function updateUserRes(ctx, next) { | 
					 | 
				
			||||
    const transaction = await ctx.fs.dc.orm.transaction(); | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { userId, resCode } = ctx.request.body; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const res = await models.UserResource.findAll({ | 
					 | 
				
			||||
            attributes: ["resourceId"], | 
					 | 
				
			||||
            raw: true, | 
					 | 
				
			||||
            where: { userId: userId } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const addRes = resCode.filter(r => !res.some(rr => rr.resourceId == r)).map(r => { return { userId: userId, resourceId: r } }); | 
					 | 
				
			||||
        const delRes = res.filter(r => !resCode.includes(r.resourceId)).map(r => r.resourceId); | 
					 | 
				
			||||
        addRes.length && await models.UserResource.bulkCreate(addRes, { transaction: transaction }); | 
					 | 
				
			||||
        delRes.length && await models.UserResource.destroy({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                resourceId: { $in: delRes }, | 
					 | 
				
			||||
                userId: userId | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
            transaction: transaction | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.status = 204; | 
					 | 
				
			||||
        await transaction.commit(); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        await transaction.rollback(); | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "更新用户权限数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getResource, | 
					 | 
				
			||||
    getUserResource, | 
					 | 
				
			||||
    updateUserRes | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,612 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
const moment = require('moment'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 提交填报信息/保存填报草稿 | 
					 | 
				
			||||
 * @requires.body { | 
					 | 
				
			||||
 * isDraft-是否草稿 | 
					 | 
				
			||||
 * userId-用户id,填报人 | 
					 | 
				
			||||
 * placeName-场所id | 
					 | 
				
			||||
 * placeType-场所性质 | 
					 | 
				
			||||
 * regionId-所属县/区 | 
					 | 
				
			||||
 * address-场所地址 | 
					 | 
				
			||||
 * placeOwner-场所负责人 | 
					 | 
				
			||||
 * phone-负责人手机号 | 
					 | 
				
			||||
 * dimension-面积 | 
					 | 
				
			||||
 * floors-多少层 | 
					 | 
				
			||||
 * numberOfPeople-常住人数 | 
					 | 
				
			||||
 * location-经纬度 | 
					 | 
				
			||||
 * isEnable-是否为合用场所 | 
					 | 
				
			||||
 * localtionDescribe-经纬度定位描述 | 
					 | 
				
			||||
 * hiddenDangerItem12-12项隐患信息,格式:[{ | 
					 | 
				
			||||
 *      itemIndex-隐患项序号, | 
					 | 
				
			||||
 *      value-是否存在隐患, | 
					 | 
				
			||||
 *      description-隐患具体信息描述, | 
					 | 
				
			||||
 *      photos-隐患图片(多张图片以 , 隔开)" | 
					 | 
				
			||||
 *  }], | 
					 | 
				
			||||
 * description-存在具体问题描述 | 
					 | 
				
			||||
 * correctiveAction-采取整改措施 | 
					 | 
				
			||||
 * punishment-实施处罚,强制措施情况 | 
					 | 
				
			||||
 * } ctx  | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function addPlaceSecurityRecord (ctx, next) { | 
					 | 
				
			||||
    const transaction = await ctx.fs.dc.orm.transaction(); | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const body = ctx.request.body; | 
					 | 
				
			||||
        let ifRightRegion = true; | 
					 | 
				
			||||
        if (body.regionId) { | 
					 | 
				
			||||
            //判断填报信息所属乡镇/区县是否存在
 | 
					 | 
				
			||||
            let region = await models.Department.findOne({ where: { id: body.regionId } }); | 
					 | 
				
			||||
            if (!region) { | 
					 | 
				
			||||
                ifRightRegion = false; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (ifRightRegion) { | 
					 | 
				
			||||
            let placeId = null; | 
					 | 
				
			||||
            if (body.placeName) { | 
					 | 
				
			||||
                //判断“场所名称”是否存在,不存在则“新建场所”
 | 
					 | 
				
			||||
                let place = await models.Places.findOne({ where: { name: body.placeName, userId: ctx.fs.api.userId } }); | 
					 | 
				
			||||
                if (place) { | 
					 | 
				
			||||
                    placeId = place.id | 
					 | 
				
			||||
                } else { | 
					 | 
				
			||||
                    const newPlace = await models.Places.create({ | 
					 | 
				
			||||
                        name: body.placeName, | 
					 | 
				
			||||
                        userId: ctx.fs.api.userId | 
					 | 
				
			||||
                    }, { transaction: transaction }); | 
					 | 
				
			||||
                    placeId = newPlace.id; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
            //创建填报信息/填报草稿
 | 
					 | 
				
			||||
            const userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.create({ | 
					 | 
				
			||||
                isDraft: body.isDraft,//是否草稿
 | 
					 | 
				
			||||
                userId: ctx.fs.api.userId,//用户id,填报人
 | 
					 | 
				
			||||
                time: moment(),//录入时间
 | 
					 | 
				
			||||
                placeId: placeId,//场所id
 | 
					 | 
				
			||||
                placeType: body.placeType,//场所性质
 | 
					 | 
				
			||||
                regionId: body.regionId,//所属县/区
 | 
					 | 
				
			||||
                address: body.address,//场所地址
 | 
					 | 
				
			||||
                placeOwner: body.placeOwner,//场所负责人
 | 
					 | 
				
			||||
                phone: body.phone,//负责人手机号
 | 
					 | 
				
			||||
                dimension: body.dimension,//面积
 | 
					 | 
				
			||||
                floors: body.floors,//多少层
 | 
					 | 
				
			||||
                numberOfPeople: body.numberOfPeople,//常住人数
 | 
					 | 
				
			||||
                location: body.location,//经纬度
 | 
					 | 
				
			||||
                isEnable: body.isEnable,//是否为合用场所
 | 
					 | 
				
			||||
                localtionDescribe: body.localtionDescribe,//经纬度定位描述
 | 
					 | 
				
			||||
                hiddenDangerItem12: body.hiddenDangerItem12,//12项隐患信息
 | 
					 | 
				
			||||
                description: body.description,//存在具体问题描述
 | 
					 | 
				
			||||
                correctiveAction: body.correctiveAction,//采取措施
 | 
					 | 
				
			||||
                type: true,//是否重新发起true默认false可以重新发起
 | 
					 | 
				
			||||
                punishment: body.punishment,//实施处罚,强制措施情况
 | 
					 | 
				
			||||
                departmentId: body.departmentId | 
					 | 
				
			||||
            }, { transaction: transaction }); | 
					 | 
				
			||||
            ctx.body = { | 
					 | 
				
			||||
                id: userPlaceSecurityRecord.id, | 
					 | 
				
			||||
                "message": "新增填报信息成功" | 
					 | 
				
			||||
            }; | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { | 
					 | 
				
			||||
                "message": "所选地址不存在!" | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        await transaction.commit(); | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        await transaction.rollback(); | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "新增填报信息失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 编辑填报信息 | 
					 | 
				
			||||
 * @param {id-填报信息ID} ctx | 
					 | 
				
			||||
 * @requires.body { | 
					 | 
				
			||||
 * isDraft-是否草稿 | 
					 | 
				
			||||
 * userId-用户id,填报人 | 
					 | 
				
			||||
 * placeName-场所id | 
					 | 
				
			||||
 * placeType-场所性质 | 
					 | 
				
			||||
 * regionId-所属县/区 | 
					 | 
				
			||||
 * address-场所地址 | 
					 | 
				
			||||
 * placeOwner-场所负责人 | 
					 | 
				
			||||
 * phone-负责人手机号 | 
					 | 
				
			||||
 * dimension-面积 | 
					 | 
				
			||||
 * floors-多少层 | 
					 | 
				
			||||
 * numberOfPeople-常住人数 | 
					 | 
				
			||||
 * location-经纬度 | 
					 | 
				
			||||
 * isEnable-是否为合用场所 | 
					 | 
				
			||||
 * localtionDescribe-经纬度定位描述 | 
					 | 
				
			||||
 * hiddenDangerItem12-12项隐患信息,格式:[{ | 
					 | 
				
			||||
 *      itemIndex-隐患项序号, | 
					 | 
				
			||||
 *      value-是否存在隐患, | 
					 | 
				
			||||
 *      description-隐患具体信息描述, | 
					 | 
				
			||||
 *      photos-隐患图片(多张图片以 , 隔开)" | 
					 | 
				
			||||
 *  }], | 
					 | 
				
			||||
 * description-存在具体问题描述 | 
					 | 
				
			||||
 * correctiveAction-采取整改措施 | 
					 | 
				
			||||
 * punishment-实施处罚,强制措施情况 | 
					 | 
				
			||||
 * } ctx  | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function editPlaceSecurityRecord (ctx, next) { | 
					 | 
				
			||||
    const transaction = await ctx.fs.dc.orm.transaction(); | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { id } = ctx.params; | 
					 | 
				
			||||
        //判断该填报信息是否存在
 | 
					 | 
				
			||||
        let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ where: { id: id } }); | 
					 | 
				
			||||
        if (userPlaceSecurityRecord) { | 
					 | 
				
			||||
            const body = ctx.request.body; | 
					 | 
				
			||||
            let ifRightRegion = true; | 
					 | 
				
			||||
            if (body.regionId) { | 
					 | 
				
			||||
                //判断填报信息所属乡镇/区县是否存在
 | 
					 | 
				
			||||
                let region = await models.Department.findOne({ where: { id: body.regionId } }); | 
					 | 
				
			||||
                if (!region) { | 
					 | 
				
			||||
                    ifRightRegion = false; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
            if (ifRightRegion) { | 
					 | 
				
			||||
                let placeId = null; | 
					 | 
				
			||||
                if (body.placeName) { | 
					 | 
				
			||||
                    //判断“场所名称”是否存在,不存在则“新建场所”
 | 
					 | 
				
			||||
                    let place = await models.Places.findOne({ where: { name: body.placeName, userId: ctx.fs.api.userId } }); | 
					 | 
				
			||||
                    if (place) { | 
					 | 
				
			||||
                        placeId = place.id | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        const newPlace = await models.Places.create({ | 
					 | 
				
			||||
                            name: body.placeName, | 
					 | 
				
			||||
                            userId: ctx.fs.api.userId | 
					 | 
				
			||||
                        }, { transaction: transaction }); | 
					 | 
				
			||||
                        placeId = newPlace.id; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                //修改填报信息
 | 
					 | 
				
			||||
                await models.UserPlaceSecurityRecord.update({ | 
					 | 
				
			||||
                    isDraft: body.isDraft,//是否草稿
 | 
					 | 
				
			||||
                    userId: ctx.fs.api.userId,//用户id,填报人
 | 
					 | 
				
			||||
                    time: moment(),//录入时间
 | 
					 | 
				
			||||
                    placeId: placeId,//场所id
 | 
					 | 
				
			||||
                    placeType: body.placeType,//场所性质
 | 
					 | 
				
			||||
                    regionId: body.regionId,//所属县/区
 | 
					 | 
				
			||||
                    address: body.address,//场所地址
 | 
					 | 
				
			||||
                    placeOwner: body.placeOwner,//场所负责人
 | 
					 | 
				
			||||
                    phone: body.phone,//负责人手机号
 | 
					 | 
				
			||||
                    dimension: body.dimension,//面积
 | 
					 | 
				
			||||
                    floors: body.floors,//多少层
 | 
					 | 
				
			||||
                    numberOfPeople: body.numberOfPeople,//常住人数
 | 
					 | 
				
			||||
                    location: body.location,//经纬度
 | 
					 | 
				
			||||
                    isEnable: body.isEnable,//是否为合用场所
 | 
					 | 
				
			||||
                    localtionDescribe: body.localtionDescribe,//经纬度定位描述
 | 
					 | 
				
			||||
                    hiddenDangerItem12: body.hiddenDangerItem12,//12项隐患信息
 | 
					 | 
				
			||||
                    description: body.description,//存在具体问题描述
 | 
					 | 
				
			||||
                    correctiveAction: body.correctiveAction,//采取措施
 | 
					 | 
				
			||||
                    punishment: body.punishment,//实施处罚,强制措施情况
 | 
					 | 
				
			||||
                    departmentId: body.departmentId | 
					 | 
				
			||||
                }, { where: { id: id, }, transaction: transaction }); | 
					 | 
				
			||||
                ctx.body = { "message": "修改填报信息成功" }; | 
					 | 
				
			||||
                ctx.status = 200; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { "message": "所选地址不存在!" } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "该填报信息不存在!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        await transaction.commit(); | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        await transaction.rollback(); | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "修改填报信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 修改type字段 | 
					 | 
				
			||||
 * @param {*} ctx  | 
					 | 
				
			||||
 * @param {*} next  | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function updateType (ctx, next) { | 
					 | 
				
			||||
    const models = ctx.fs.dc.models; | 
					 | 
				
			||||
    const { id } = ctx.params; | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        await models.UserPlaceSecurityRecord.update({ | 
					 | 
				
			||||
            type: true,//是否重新发起true默认false可以重新发起
 | 
					 | 
				
			||||
        }, { where: { id: id, } }) | 
					 | 
				
			||||
        ctx.body = { "message": "修改信息成功" }; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "修改信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 删除填报信息 | 
					 | 
				
			||||
 * @param {id-填报信息ID} ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function deletePlaceSecurityRecord (ctx, next) { | 
					 | 
				
			||||
    const transaction = await ctx.fs.dc.orm.transaction(); | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { id } = ctx.params; | 
					 | 
				
			||||
        //判断该填报信息是否存在
 | 
					 | 
				
			||||
        let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ where: { id: id } }); | 
					 | 
				
			||||
        if (userPlaceSecurityRecord) { | 
					 | 
				
			||||
            await models.UserPlaceSecurityRecord.destroy({ where: { id: id }, transaction: transaction }); | 
					 | 
				
			||||
            ctx.body = { "message": "删除填报信息成功" }; | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "该填报信息不存在!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        await transaction.commit(); | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        await transaction.rollback(); | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "删除填报信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据填报信息ID查询填报信息 | 
					 | 
				
			||||
 * @param {id-填报信息ID} ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getPlaceSecurityRecordById (ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { id } = ctx.params; | 
					 | 
				
			||||
        //判断该填报信息是否存在
 | 
					 | 
				
			||||
        let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ where: { id: id } }); | 
					 | 
				
			||||
        if (userPlaceSecurityRecord) { | 
					 | 
				
			||||
            let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ | 
					 | 
				
			||||
                where: { id: id }, | 
					 | 
				
			||||
                include: [{ | 
					 | 
				
			||||
                    model: models.Places, | 
					 | 
				
			||||
                }, { | 
					 | 
				
			||||
                    model: models.User, | 
					 | 
				
			||||
                    as: 'user', | 
					 | 
				
			||||
                    attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                }, { | 
					 | 
				
			||||
                    model: models.User, | 
					 | 
				
			||||
                    as: 'audit1ManUser', | 
					 | 
				
			||||
                    attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                }, { | 
					 | 
				
			||||
                    model: models.User, | 
					 | 
				
			||||
                    as: 'audit2ManUser', | 
					 | 
				
			||||
                    attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                }, { | 
					 | 
				
			||||
                    model: models.User, | 
					 | 
				
			||||
                    as: 'rejectManUser', | 
					 | 
				
			||||
                    attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                }] | 
					 | 
				
			||||
            }); | 
					 | 
				
			||||
            ctx.body = userPlaceSecurityRecord; | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "该填报信息不存在!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "查询填报信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据场所ID获取该场所最近用户填报信息 | 
					 | 
				
			||||
 * @param {placeId-场所信息ID} ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getRecentlyPlaceSecurityRecordByPlaceId (ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { placeId } = ctx.params; | 
					 | 
				
			||||
        //判断该场所信息是否存在
 | 
					 | 
				
			||||
        let place = await models.Places.findOne({ where: { id: placeId } }); | 
					 | 
				
			||||
        if (place) { | 
					 | 
				
			||||
            let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findAll({ | 
					 | 
				
			||||
                where: { placeId: placeId, userId: place.userId }, | 
					 | 
				
			||||
                include: [{ | 
					 | 
				
			||||
                    model: models.Places, | 
					 | 
				
			||||
                }], | 
					 | 
				
			||||
                limit: 1, | 
					 | 
				
			||||
                order: [["id", "desc"]], | 
					 | 
				
			||||
            }); | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
            ctx.body = userPlaceSecurityRecord.length ? userPlaceSecurityRecord[0] : null; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "该场所不存在!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "获取场所最近用户填报信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据筛选条件获取用户填报信息 | 
					 | 
				
			||||
 * @query { | 
					 | 
				
			||||
 *  isDraft-是否草稿 | 
					 | 
				
			||||
 *  userId-用户ID | 
					 | 
				
			||||
 *  timeRange-录入时间范围 | 
					 | 
				
			||||
 *  regionId-区域ID | 
					 | 
				
			||||
 *  placeId-场所ID | 
					 | 
				
			||||
 *  state-审批状态 | 
					 | 
				
			||||
 *  pageIndex-页码 | 
					 | 
				
			||||
 *  pageSize-页宽 | 
					 | 
				
			||||
 * } ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getPlaceSecurityRecords (ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { isDraft, userId, timeRange, regionId, placeId, state, pageIndex, pageSize } = ctx.query; | 
					 | 
				
			||||
        let whereCondition = {}; | 
					 | 
				
			||||
        if (userId) { | 
					 | 
				
			||||
            let user = await models.User.findOne({ where: { id: userId } }); | 
					 | 
				
			||||
            if (user) { | 
					 | 
				
			||||
                whereCondition.userId = userId; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { "message": "用户不存在!" } | 
					 | 
				
			||||
                return; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (regionId) { | 
					 | 
				
			||||
            let region = await models.Department.findOne({ where: { id: regionId } }); | 
					 | 
				
			||||
            if (region) { | 
					 | 
				
			||||
                whereCondition.regionId = regionId; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { "message": "区域不存在!" } | 
					 | 
				
			||||
                return; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (placeId) { | 
					 | 
				
			||||
            let place = await models.Places.findOne({ where: { id: placeId } }); | 
					 | 
				
			||||
            if (place) { | 
					 | 
				
			||||
                whereCondition.placeId = placeId; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { "message": "场所不存在!" }; | 
					 | 
				
			||||
                return; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (isDraft) { whereCondition.isDraft = isDraft; } | 
					 | 
				
			||||
        let times = timeRange; | 
					 | 
				
			||||
        if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') } | 
					 | 
				
			||||
        if (times && times.length > 0) { | 
					 | 
				
			||||
            const len = times.length; | 
					 | 
				
			||||
            whereCondition.time = { | 
					 | 
				
			||||
                $between: [ | 
					 | 
				
			||||
                    moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                    moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                ] | 
					 | 
				
			||||
            }; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        switch (Number(state)) { | 
					 | 
				
			||||
            case 1: //待审批:未审核 或者 已审核+未复核
 | 
					 | 
				
			||||
                whereCondition.$or = [ | 
					 | 
				
			||||
                    { '$audit1ManId$': null }, | 
					 | 
				
			||||
                    { '$audit2ManId$': null } | 
					 | 
				
			||||
                ]; | 
					 | 
				
			||||
                whereCondition.rejectManId = null; | 
					 | 
				
			||||
                break; | 
					 | 
				
			||||
            case 2://已审批:已审批+已复核
 | 
					 | 
				
			||||
                whereCondition.audit1ManId = { $not: null }; | 
					 | 
				
			||||
                whereCondition.audit2ManId = { $not: null }; | 
					 | 
				
			||||
                break; | 
					 | 
				
			||||
            case 3: //驳回
 | 
					 | 
				
			||||
                whereCondition.rejectManId = { $not: null }; | 
					 | 
				
			||||
                break; | 
					 | 
				
			||||
            default: break; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        let findObj = { | 
					 | 
				
			||||
            where: whereCondition, | 
					 | 
				
			||||
            order: [["id", "desc"]], | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                model: models.Places, | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                as: 'user', | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                as: 'audit1ManUser', | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                as: 'audit2ManUser', | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                as: 'rejectManUser', | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }] | 
					 | 
				
			||||
        }; | 
					 | 
				
			||||
        if (Number(pageSize) > 0 && Number(pageIndex) >= 0) { | 
					 | 
				
			||||
            findObj.limit = Number(pageSize); | 
					 | 
				
			||||
            findObj.offset = Number(pageIndex) * Number(pageSize); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        let userPlaceSecurityRecords = await models.UserPlaceSecurityRecord.findAndCountAll(findObj); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = userPlaceSecurityRecords; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "获取用户填报信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据筛选条件获取用户审批填报信息 | 
					 | 
				
			||||
 * @query { | 
					 | 
				
			||||
 *  approveUserId-审批人ID | 
					 | 
				
			||||
 *  timeRange-录入时间范围 | 
					 | 
				
			||||
 *  regionId-区域ID | 
					 | 
				
			||||
 *  placeId-场所ID | 
					 | 
				
			||||
 *  state-审批状态 | 
					 | 
				
			||||
 *  pageIndex-页码 | 
					 | 
				
			||||
 *  pageSize-页宽 | 
					 | 
				
			||||
 * } ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getApprovePlaceSecurityRecords (ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { approveUserId, timeRange, regionId, placeId, state, pageIndex, pageSize } = ctx.query; | 
					 | 
				
			||||
        let whereCondition = { isDraft: false }; | 
					 | 
				
			||||
        if (approveUserId) { | 
					 | 
				
			||||
            let approveUser = await models.User.findOne({ where: { id: approveUserId } }); | 
					 | 
				
			||||
            if (approveUser) { | 
					 | 
				
			||||
                //获取审批人管辖区域内所有用户ID(注:市级人员查看所有用户数据)
 | 
					 | 
				
			||||
                const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } }); | 
					 | 
				
			||||
                if (departmentRes.dependence) { | 
					 | 
				
			||||
                    let attentionRegionIds = [departmentRes.id]; | 
					 | 
				
			||||
                    let regionType = departmentRes.type; | 
					 | 
				
			||||
                    while (attentionRegionIds.length && regionType && regionType < 4) { | 
					 | 
				
			||||
                        const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } }); | 
					 | 
				
			||||
                        regionType = departmentChilds.length ? departmentChilds[0].type : null; | 
					 | 
				
			||||
                        attentionRegionIds = departmentChilds.map(d => d.id); | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                    let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] }); | 
					 | 
				
			||||
                    if (users.length) { | 
					 | 
				
			||||
                        let userIds = users.map(u => u.id); | 
					 | 
				
			||||
                        whereCondition.userId = { $in: userIds }; | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        ctx.status = 200; | 
					 | 
				
			||||
                        ctx.body = { | 
					 | 
				
			||||
                            "count": 0, | 
					 | 
				
			||||
                            "rows": [] | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                        return; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                if (regionId) { | 
					 | 
				
			||||
                    let region = await models.Department.findOne({ where: { id: regionId } }); | 
					 | 
				
			||||
                    if (region) { | 
					 | 
				
			||||
                        whereCondition.regionId = regionId; | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        ctx.status = 400; | 
					 | 
				
			||||
                        ctx.body = { "message": "区域不存在!" } | 
					 | 
				
			||||
                        return; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                if (placeId) { | 
					 | 
				
			||||
                    let place = await models.Places.findOne({ where: { id: placeId } }); | 
					 | 
				
			||||
                    if (place) { | 
					 | 
				
			||||
                        whereCondition.placeId = placeId; | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        ctx.status = 400; | 
					 | 
				
			||||
                        ctx.body = { "message": "场所不存在!" }; | 
					 | 
				
			||||
                        return; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                let times = timeRange; | 
					 | 
				
			||||
                if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') } | 
					 | 
				
			||||
                if (times && times.length > 0) { | 
					 | 
				
			||||
                    const len = times.length; | 
					 | 
				
			||||
                    whereCondition.time = { | 
					 | 
				
			||||
                        $between: [ | 
					 | 
				
			||||
                            moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                            moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                        ] | 
					 | 
				
			||||
                    }; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                switch (Number(state)) { | 
					 | 
				
			||||
                    case 1: //待审批
 | 
					 | 
				
			||||
                        if (departmentRes.type == 2) { | 
					 | 
				
			||||
                            //区县待审:已审核+未复核
 | 
					 | 
				
			||||
                            whereCondition.audit1ManId = { $not: null }; | 
					 | 
				
			||||
                            whereCondition.audit2ManId = null; | 
					 | 
				
			||||
                        } else { | 
					 | 
				
			||||
                            //乡镇待审:未审核+未复核
 | 
					 | 
				
			||||
                            whereCondition.audit1ManId = null; | 
					 | 
				
			||||
                            whereCondition.audit2ManId = null; | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                        whereCondition.rejectManId = null; | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    case 2://已审批:
 | 
					 | 
				
			||||
                        if (departmentRes.type == 3) { | 
					 | 
				
			||||
                            //乡镇已审:已审核
 | 
					 | 
				
			||||
                            whereCondition.audit1ManId = { $not: null }; | 
					 | 
				
			||||
                        } else { | 
					 | 
				
			||||
                            //区域已审:已审批+已复核
 | 
					 | 
				
			||||
                            whereCondition.audit1ManId = { $not: null }; | 
					 | 
				
			||||
                            whereCondition.audit2ManId = { $not: null }; | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                        whereCondition.rejectManId = null; | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    case 3: //驳回
 | 
					 | 
				
			||||
                        whereCondition.rejectManId = { $not: null }; | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    default: | 
					 | 
				
			||||
                        if (departmentRes.type == 2) { | 
					 | 
				
			||||
                            //区县查看数据:去除未审核
 | 
					 | 
				
			||||
                            whereCondition.audit1ManId = { $not: null }; | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                let findObj = { | 
					 | 
				
			||||
                    where: whereCondition, | 
					 | 
				
			||||
                    include: [{ | 
					 | 
				
			||||
                        model: models.Places, | 
					 | 
				
			||||
                    }, { | 
					 | 
				
			||||
                        model: models.User, | 
					 | 
				
			||||
                        as: 'user', | 
					 | 
				
			||||
                        attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                    }, { | 
					 | 
				
			||||
                        model: models.User, | 
					 | 
				
			||||
                        as: 'audit1ManUser', | 
					 | 
				
			||||
                        attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                    }, { | 
					 | 
				
			||||
                        model: models.User, | 
					 | 
				
			||||
                        as: 'audit2ManUser', | 
					 | 
				
			||||
                        attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                    }, { | 
					 | 
				
			||||
                        model: models.User, | 
					 | 
				
			||||
                        as: 'rejectManUser', | 
					 | 
				
			||||
                        attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
                    }], | 
					 | 
				
			||||
                    order: [["id", "desc"]] | 
					 | 
				
			||||
                }; | 
					 | 
				
			||||
                if (Number(pageSize) > 0 && Number(pageIndex) >= 0) { | 
					 | 
				
			||||
                    findObj.limit = Number(pageSize); | 
					 | 
				
			||||
                    findObj.offset = Number(pageIndex) * Number(pageSize); | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                let userPlaceSecurityRecords = await models.UserPlaceSecurityRecord.findAndCountAll(findObj); | 
					 | 
				
			||||
                ctx.status = 200; | 
					 | 
				
			||||
                ctx.body = userPlaceSecurityRecords; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { "message": "用户不存在!" } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "请传用户参数!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "获取用户填报信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    addPlaceSecurityRecord, | 
					 | 
				
			||||
    editPlaceSecurityRecord, | 
					 | 
				
			||||
    deletePlaceSecurityRecord, | 
					 | 
				
			||||
    getPlaceSecurityRecordById, | 
					 | 
				
			||||
    getRecentlyPlaceSecurityRecordByPlaceId, | 
					 | 
				
			||||
    getPlaceSecurityRecords, | 
					 | 
				
			||||
    getApprovePlaceSecurityRecords, | 
					 | 
				
			||||
    updateType | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,91 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据用户ID获取该用户创建的所有场所信息 | 
					 | 
				
			||||
 * @param {userId-用户ID} ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getPlacesByUserId(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { userId } = ctx.params; | 
					 | 
				
			||||
        let places = await models.Places.findAll({ where: { userId: userId }, attributes: ['id', 'name'] }); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = places; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "查询用户场所信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据审批用户ID获取该审批用户范围内填报人创建的场所信息 | 
					 | 
				
			||||
 * @param {approveUserId-审批用户ID} ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getPlacesByApproveUserId(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { approveUserId } = ctx.params; | 
					 | 
				
			||||
        let approveUser = await models.User.findOne({ where: { id: approveUserId } }); | 
					 | 
				
			||||
        if (approveUser) { | 
					 | 
				
			||||
            let whereCondition = {}; | 
					 | 
				
			||||
            //获取审批人管辖区域内所有用户ID
 | 
					 | 
				
			||||
            const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } }); | 
					 | 
				
			||||
            if (departmentRes.dependence) { | 
					 | 
				
			||||
                let regionType = departmentRes.type; | 
					 | 
				
			||||
                if (regionType == 4) { | 
					 | 
				
			||||
                    whereCondition.userId = approveUserId; | 
					 | 
				
			||||
                } else { | 
					 | 
				
			||||
                    let attentionRegionIds = [departmentRes.id]; | 
					 | 
				
			||||
                    while (attentionRegionIds.length && regionType && regionType < 4) { | 
					 | 
				
			||||
                        const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } }); | 
					 | 
				
			||||
                        regionType = departmentChilds.length ? departmentChilds[0].type : null; | 
					 | 
				
			||||
                        attentionRegionIds = departmentChilds.map(d => d.id); | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                    let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] }); | 
					 | 
				
			||||
                    if (users.length) { | 
					 | 
				
			||||
                        let userIds = users.map(u => u.id); | 
					 | 
				
			||||
                        whereCondition.userId = { $in: userIds }; | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        ctx.status = 200; | 
					 | 
				
			||||
                        ctx.body = []; | 
					 | 
				
			||||
                        return; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
            let places = await models.Places.findAll({ where: whereCondition, attributes: ['id', 'name'] }); | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
            ctx.body = places; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "用户不存在!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "查询用户区域内场所信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 获取所有场所信息 | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getAllPlaces(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let places = await models.Places.findAll(); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = places; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "获取场所信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getPlacesByUserId, | 
					 | 
				
			||||
    getPlacesByApproveUserId, | 
					 | 
				
			||||
    getAllPlaces | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,140 +0,0 @@ | 
				
			|||||
const moment = require('moment') | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function getReportRectify(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { fs: { api: { userInfo } } } = ctx | 
					 | 
				
			||||
        const { startTime, endTime } = ctx.query | 
					 | 
				
			||||
        // 查找自己所属的区县数据 type == 2
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let userDepRes = await models.Department.findOne({ | 
					 | 
				
			||||
            order: [['id', 'asc']], | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                id: userInfo.departmentId | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
        let depRes = [] | 
					 | 
				
			||||
        if (userDepRes.dataValues.type == 1) { | 
					 | 
				
			||||
            depRes = await models.Department.findAll({ | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    type: 2, | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
        } else if (userDepRes.dataValues.type == 2) { | 
					 | 
				
			||||
            depRes = [userDepRes] | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let rectifyReportList = [] | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let calDay = moment(startTime).startOf('day') | 
					 | 
				
			||||
        let endDay = moment(endTime).endOf('day') | 
					 | 
				
			||||
        let today = moment().endOf('day') | 
					 | 
				
			||||
        while (calDay.isBefore(endDay) && calDay.isBefore(today)) { | 
					 | 
				
			||||
            let curDay_ = calDay.clone(); | 
					 | 
				
			||||
            for (let d of depRes) { | 
					 | 
				
			||||
                let reportCount = await models.ReportRectify.count({ | 
					 | 
				
			||||
                    where: { | 
					 | 
				
			||||
                        regionId: d.dataValues.id, | 
					 | 
				
			||||
                        userId:{$not:null}, | 
					 | 
				
			||||
                        dateTime: { | 
					 | 
				
			||||
                            $between: [ | 
					 | 
				
			||||
                                curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                                curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                            ] | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
                let detailCount = await models.ReportRectify.count({ | 
					 | 
				
			||||
                    where: { | 
					 | 
				
			||||
                        regionId: d.dataValues.id, | 
					 | 
				
			||||
                        dateTime: { | 
					 | 
				
			||||
                            $between: [ | 
					 | 
				
			||||
                                curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                                curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                            ] | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
                if (detailCount > 0) | 
					 | 
				
			||||
                    rectifyReportList.push({ | 
					 | 
				
			||||
                        day: calDay.format('YYYY-MM-DD'), | 
					 | 
				
			||||
                        region: d.dataValues.name, | 
					 | 
				
			||||
                        name: d.dataValues.name + '合用场所安全隐患排查整治汇总表', | 
					 | 
				
			||||
                        reportBool: reportCount > 0, | 
					 | 
				
			||||
                        depId: d.id, | 
					 | 
				
			||||
                    }) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            calDay.add(1, 'day') | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = rectifyReportList; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取合用场所安全隐患排查整治汇总表列表失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function getReportRectifyDetail(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { day, depId } = ctx.query | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let searchDay = moment(day) | 
					 | 
				
			||||
        let reportRes = await models.ReportRectify.findAll({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                regionId: depId, | 
					 | 
				
			||||
                dateTime: { | 
					 | 
				
			||||
                    $between: [ | 
					 | 
				
			||||
                        searchDay.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                        searchDay.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                    ] | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = reportRes; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取合用场所安全隐患排查整治汇总表详情失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function compileReportRectifyDetail(ctx, next) { | 
					 | 
				
			||||
    const t = await ctx.fs.dc.orm.transaction(); | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const data = ctx.request.body | 
					 | 
				
			||||
        for (let d of data) { | 
					 | 
				
			||||
            await models.ReportRectify.update(d, { | 
					 | 
				
			||||
                transaction: t, | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    id: d.id | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        await t.commit(); | 
					 | 
				
			||||
        ctx.status = 204; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        await t.rollback(); | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "保存合用场所安全隐患排查整治汇总表详情失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getReportRectify, | 
					 | 
				
			||||
    getReportRectifyDetail, | 
					 | 
				
			||||
    compileReportRectifyDetail, | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,173 +0,0 @@ | 
				
			|||||
async function getAreas (ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { fs: { api: { userInfo } } } = ctx | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let userDepRes = await models.Department.findOne({ | 
					 | 
				
			||||
            order: [['id', 'asc']], | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                id: userInfo.departmentId | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let rslt = [] | 
					 | 
				
			||||
        if (userDepRes) { | 
					 | 
				
			||||
            if (userDepRes.dataValues.type == 1) { | 
					 | 
				
			||||
                rslt = await models.Department.findAll({ | 
					 | 
				
			||||
                    order: [['id', 'asc']], | 
					 | 
				
			||||
                    where: { | 
					 | 
				
			||||
                        type: 2 | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
            } else if (userDepRes.dataValues.type == 2) { | 
					 | 
				
			||||
                rslt = [userDepRes.dataValues] | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "查询区域数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function addReportConfig (ctx) { | 
					 | 
				
			||||
    let errMsg = "添加报表配置失败" | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const data = ctx.request.body | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const repeatRes = await models.ReportConfigition.find({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                regionId: data.regionId, | 
					 | 
				
			||||
                reportTypeId: data.reportTypeId, | 
					 | 
				
			||||
                excuteTime: data.excuteTime, | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (repeatRes) { | 
					 | 
				
			||||
            errMsg = '已有相同配置信息'; | 
					 | 
				
			||||
            throw errMsg | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const res = await models.ReportConfigition.create(data) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = res; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": errMsg | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function getReportConfig (ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { fs: { api: { userInfo } } } = ctx | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // 查找自己所属的区县数据 type == 2
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let userDepRes = await models.Department.findOne({ | 
					 | 
				
			||||
            order: [['id', 'asc']], | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                id: userInfo.departmentId | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
        let depRes = [] | 
					 | 
				
			||||
        if (userDepRes.dataValues.type == 1) { | 
					 | 
				
			||||
            depRes = await models.Department.findAll({ | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    type: 2, | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
        } else if (userDepRes.dataValues.type == 2) { | 
					 | 
				
			||||
            depRes = [userDepRes] | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const res = await models.ReportConfigition.findAll({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                regionId: { $in: depRes.map(d => d.dataValues.id) } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = res; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取报表配置失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function editReportConfig (ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const data = ctx.request.body | 
					 | 
				
			||||
        const { reportId } = ctx.params | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const repeatRes = await models.ReportConfigition.find({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                id: { $ne: parseInt(reportId) }, | 
					 | 
				
			||||
                regionId: data.regionId, | 
					 | 
				
			||||
                reportTypeId: data.reportTypeId, | 
					 | 
				
			||||
                excuteTime: data.excuteTime, | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (repeatRes) { | 
					 | 
				
			||||
            errMsg = '已有相同配置信息'; | 
					 | 
				
			||||
            throw errMsg | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        await models.ReportConfigition.update(data, { | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                id: parseInt(reportId) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.status = 204; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "编辑报表配置失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function delReportConfig (ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { reportId } = ctx.params | 
					 | 
				
			||||
        await models.ReportConfigition.destroy({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                id: parseInt(reportId) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.status = 204; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "删除报表配置失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getAreas, | 
					 | 
				
			||||
    addReportConfig, | 
					 | 
				
			||||
    getReportConfig, | 
					 | 
				
			||||
    editReportConfig, | 
					 | 
				
			||||
    delReportConfig, | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,87 +0,0 @@ | 
				
			|||||
const moment = require('moment'); | 
					 | 
				
			||||
async function getReportList (ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { fs: { api: { userInfo } } } = ctx | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { creatTime, reportName, regionName, limit, offset } = ctx.query; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let where = { | 
					 | 
				
			||||
            $and: { | 
					 | 
				
			||||
                reportName: { $notLike: '%填报信息导出%' } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }; | 
					 | 
				
			||||
        if (creatTime) { | 
					 | 
				
			||||
            where.creatTime = { | 
					 | 
				
			||||
                $gte: moment(creatTime[0]).format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                $lte: moment(creatTime[1]).format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (reportName) { | 
					 | 
				
			||||
            where.reportName = { | 
					 | 
				
			||||
                $iLike: `%${reportName}%` | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (regionName && regionName != -1) { | 
					 | 
				
			||||
            where.regionId = regionName | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            let userDepRes = await models.Department.findOne({ | 
					 | 
				
			||||
                order: [['id', 'asc']], | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    id: userInfo.departmentId | 
					 | 
				
			||||
                }, | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            let userDep = [] | 
					 | 
				
			||||
            if (userDepRes) { | 
					 | 
				
			||||
                if (userDepRes.dataValues.type == 1) { | 
					 | 
				
			||||
                    userDep = await models.Department.findAll({ | 
					 | 
				
			||||
                        order: [['id', 'asc']], | 
					 | 
				
			||||
                        where: { | 
					 | 
				
			||||
                            type: 2 | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    }) | 
					 | 
				
			||||
                } else if (userDepRes.dataValues.type == 2) { | 
					 | 
				
			||||
                    userDep = [userDepRes] | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
            where.regionId = { $in: userDep.map(u => u.dataValues.id) } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let findObj = { | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                model: models.ReportType, | 
					 | 
				
			||||
                attributes: ['name'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                model: models.Department, | 
					 | 
				
			||||
                attributes: ['name'] | 
					 | 
				
			||||
            }], | 
					 | 
				
			||||
            where: where, | 
					 | 
				
			||||
            order: [['creatTime', 'desc']], | 
					 | 
				
			||||
        }; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (Number(limit) > 0 && Number(offset) >= 0) { | 
					 | 
				
			||||
            findObj.limit = Number(limit); | 
					 | 
				
			||||
            findObj.offset = Number(offset); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const res = await models.ReportDownManage.findAndCountAll(findObj) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = res; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "查询报表数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getReportList, | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,342 +0,0 @@ | 
				
			|||||
const moment = require('moment'); | 
					 | 
				
			||||
const { QueryTypes } = require('sequelize'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function reportDailyStatistic (ctx, next) { | 
					 | 
				
			||||
    const rslt = { | 
					 | 
				
			||||
        added: 0, //今日新增
 | 
					 | 
				
			||||
        checked: 0, //今日已审填报
 | 
					 | 
				
			||||
        unChecked: 0, //未审填报
 | 
					 | 
				
			||||
        danger_place: 0, //隐患场所总数
 | 
					 | 
				
			||||
        history: 0, //历史填报
 | 
					 | 
				
			||||
        date: {} | 
					 | 
				
			||||
    }; | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const curDay_ = moment(); | 
					 | 
				
			||||
        const sequelize = ctx.fs.dc.orm; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        rslt.added = await models.UserPlaceSecurityRecord.count({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                time: { | 
					 | 
				
			||||
                    $between: [ | 
					 | 
				
			||||
                        curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                        curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                    ] | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
        rslt.unChecked = await models.UserPlaceSecurityRecord.count({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                $or: [ | 
					 | 
				
			||||
                    { | 
					 | 
				
			||||
                        audit2ManId: { $eq: null }, | 
					 | 
				
			||||
                        rejectManId: { $eq: null }, | 
					 | 
				
			||||
                    }, | 
					 | 
				
			||||
                    // {
 | 
					 | 
				
			||||
                    //     audit2ManId: { $ne: null },
 | 
					 | 
				
			||||
                    //     rejectManId: { $eq: null },
 | 
					 | 
				
			||||
                    // },
 | 
					 | 
				
			||||
                    { | 
					 | 
				
			||||
                        audit1ManId: { $eq: null }, | 
					 | 
				
			||||
                        rejectManId: { $eq: null }, | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                ] | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        rslt.checked = await models.UserPlaceSecurityRecord.count({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                $or: [ | 
					 | 
				
			||||
                    { | 
					 | 
				
			||||
                        audit2ManId: { $ne: null }, | 
					 | 
				
			||||
                        audit2ManIdTime: { | 
					 | 
				
			||||
                            $between: [ | 
					 | 
				
			||||
                                curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                                curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                            ] | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    }, | 
					 | 
				
			||||
                    { | 
					 | 
				
			||||
                        rejectManId: { $ne: null }, | 
					 | 
				
			||||
                        rejectTime: { | 
					 | 
				
			||||
                            $between: [ | 
					 | 
				
			||||
                                curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                                curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                            ] | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                ] | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const list = await sequelize.query(`SELECT count(*) AS "count" FROM "user_placeSecurityRecord" AS "userPlaceSecurityRecord" 
 | 
					 | 
				
			||||
        WHERE ("userPlaceSecurityRecord"."correctiveAction" IS NOT NULL AND "userPlaceSecurityRecord"."punishment" IS NOT NULL) AND "audit2ManId" IS NOT NULL GROUP BY "placeId";`, { type: QueryTypes.SELECT })
 | 
					 | 
				
			||||
        rslt.danger_place = list.length; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        rslt.history = await models.UserPlaceSecurityRecord.count(); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // seven days data
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const startDay = moment().startOf('day'); | 
					 | 
				
			||||
        for (let d = 1; d <= 7; d++) { | 
					 | 
				
			||||
            const START_DAY = moment(startDay).add(-d, 'day'); | 
					 | 
				
			||||
            const date = START_DAY.format('YYYY-MM-DD'); | 
					 | 
				
			||||
            const num = await models.UserPlaceSecurityRecord.count({ | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    time: { | 
					 | 
				
			||||
                        $between: [ | 
					 | 
				
			||||
                            START_DAY.startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                            START_DAY.endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                        ] | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            rslt.date[date] = num; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取数据中台数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function reportAreaStatistic (ctx, next) { | 
					 | 
				
			||||
    let rslt = [], relationRegion = {}; | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { startDate, endDate } = ctx.query; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const sequelize = ctx.fs.dc.orm; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const list = await sequelize.query(`select "regionId", count("regionId")  from "user_placeSecurityRecord" WHERE "time" BETWEEN '${moment(startDate).startOf('day').format('YYYY-MM-DD HH:mm:ss')}' AND '${moment(endDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')}' AND "hiddenDangerItem12" IS NOT NULL GROUP BY "regionId" `, { type: QueryTypes.SELECT }) | 
					 | 
				
			||||
        // let regionIds = []
 | 
					 | 
				
			||||
        // list.map(item => {
 | 
					 | 
				
			||||
        //     if (item.regionId && item.regionId != '') {
 | 
					 | 
				
			||||
        //         regionIds.push(item.regionId);
 | 
					 | 
				
			||||
        //     }
 | 
					 | 
				
			||||
        // });
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        // const depts = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" AS "department" WHERE "department"."id" IN (${regionIds.toString()});`, { type: QueryTypes.SELECT });
 | 
					 | 
				
			||||
        const deptRelation = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" AS "department";`, { type: QueryTypes.SELECT }); | 
					 | 
				
			||||
        const quArea = deptRelation.filter(f => f.type == 2); | 
					 | 
				
			||||
        quArea.map(item => { | 
					 | 
				
			||||
            relationRegion[item.id] = {}; | 
					 | 
				
			||||
            const xiang = deptRelation.filter(f => f.type == 3 && f.dependence == item.id).map(item => item.id); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            const cun = deptRelation.filter(f => f.type == 4 && xiang.some(ss => ss == f.dependence)).map(item => item.id); | 
					 | 
				
			||||
            relationRegion[item.id]['regionIds'] = [item.id, ...xiang, ...cun]; | 
					 | 
				
			||||
            relationRegion[item.id]['name'] = item.name; | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
        Object.keys(relationRegion).map(key => { | 
					 | 
				
			||||
            const { regionIds, name } = relationRegion[key]; | 
					 | 
				
			||||
            let data = list.filter(item => regionIds.some(id => id == item.regionId)) | 
					 | 
				
			||||
            let obj = {}; | 
					 | 
				
			||||
            obj['name'] = name; | 
					 | 
				
			||||
            obj['count'] = 0; | 
					 | 
				
			||||
            obj['regionId'] = key; | 
					 | 
				
			||||
            data.map(item => { | 
					 | 
				
			||||
                obj['count'] += Number(item.count) | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
            rslt.push(obj) | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取数据中台数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
async function dangerAreaQuery (ctx, next) { | 
					 | 
				
			||||
    const { userId } = ctx.fs.api | 
					 | 
				
			||||
    let rslt = { rows: [], count: 0, ids: [] }, relationRegion = {}; | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { startDate, endDate, placeType, regionId, placeName, offset = 0, limit = 20 } = ctx.query; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const sequelize = ctx.fs.dc.orm; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let options = { | 
					 | 
				
			||||
            audit2ManId: { $ne: null }, | 
					 | 
				
			||||
        }, places = [], dep4Ids = []; | 
					 | 
				
			||||
        if (startDate && endDate) { | 
					 | 
				
			||||
            options.time = { | 
					 | 
				
			||||
                $between: [ | 
					 | 
				
			||||
                    moment(startDate).startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                    moment(endDate).endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                ] | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (placeName) { | 
					 | 
				
			||||
            places = await models.Places.findAll({ | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    name: { $like: `%${placeName}%` } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            }) | 
					 | 
				
			||||
            options.placeId = { | 
					 | 
				
			||||
                $in: places.map(item => item.id) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            places = await models.Places.findAll() | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (regionId && regionId != -1) { | 
					 | 
				
			||||
            let idList = []; | 
					 | 
				
			||||
            const curDeptRelation = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" WHERE "id" in (${regionId});`, { type: QueryTypes.SELECT }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            const type = curDeptRelation[0].type | 
					 | 
				
			||||
            if (type != 1) { | 
					 | 
				
			||||
                const deptRelation = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" AS "department";`, { type: QueryTypes.SELECT }); | 
					 | 
				
			||||
                const quArea = deptRelation.filter(f => f.type == 2); | 
					 | 
				
			||||
                quArea.map(item => { | 
					 | 
				
			||||
                    relationRegion[item.id] = {}; | 
					 | 
				
			||||
                    deptRelation.filter(f => f.type == 3 && f.dependence == item.id).map(x => { | 
					 | 
				
			||||
                        relationRegion[item.id][x.id] = deptRelation.filter(f => f.type == 4 && x.id == f.dependence).map(cun => cun.id); | 
					 | 
				
			||||
                    }); | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
                if (type == 2) { | 
					 | 
				
			||||
                    const quList = [regionId]; | 
					 | 
				
			||||
                    const xiangList = Object.keys(relationRegion[regionId]) | 
					 | 
				
			||||
                    let cunList = xiangList.map(key => { | 
					 | 
				
			||||
                        return relationRegion[regionId][key] | 
					 | 
				
			||||
                    }) | 
					 | 
				
			||||
                    idList = quList.concat(xiangList).concat(cunList.flat(Infinity)) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                    options.regionId = { $in: idList }; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                if (type == 3) { | 
					 | 
				
			||||
                    Object.keys(relationRegion).map(quKey => { | 
					 | 
				
			||||
                        Object.keys(relationRegion[quKey]).map(xiangKey => { | 
					 | 
				
			||||
                            if (xiangKey == regionId) { | 
					 | 
				
			||||
                                const xiangList = [xiangKey]; | 
					 | 
				
			||||
                                const cunList = relationRegion[quKey][xiangKey] | 
					 | 
				
			||||
                                idList = xiangList.concat(cunList); | 
					 | 
				
			||||
                            } | 
					 | 
				
			||||
                        }) | 
					 | 
				
			||||
                    }) | 
					 | 
				
			||||
                    dep4Ids = idList | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                if (type == 4) { | 
					 | 
				
			||||
                    const curUser = await models.User.findOne({ where: { id: userId } }) | 
					 | 
				
			||||
                    const corUserDepId = curUser.departmentId | 
					 | 
				
			||||
                    const corUseUserDepRes = await models.Department.findOne({ where: { id: corUserDepId } }) | 
					 | 
				
			||||
                    if(corUseUserDepRes.type < 4){ | 
					 | 
				
			||||
                        dep4Ids = [regionId] | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        options.userId = userId | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                    // idList = [regionId]
 | 
					 | 
				
			||||
                    // options.userId = userId
 | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                // options.departmentId = { $in: idList };
 | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (placeType != null && placeType != -1) { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            if (placeType == 0) { | 
					 | 
				
			||||
                options = Object.assign({}, options, { | 
					 | 
				
			||||
                    $or: [ | 
					 | 
				
			||||
                        { | 
					 | 
				
			||||
                            correctiveAction: { $ne: null }, | 
					 | 
				
			||||
                        }, | 
					 | 
				
			||||
                        { | 
					 | 
				
			||||
                            punishment: { $ne: null }, | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    ] | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            if (placeType == 1) | 
					 | 
				
			||||
                options = Object.assign({}, options, { | 
					 | 
				
			||||
                    $or: [ | 
					 | 
				
			||||
                        { | 
					 | 
				
			||||
                            correctiveAction: { $eq: null }, | 
					 | 
				
			||||
                        }, | 
					 | 
				
			||||
                        { | 
					 | 
				
			||||
                            punishment: { $eq: null }, | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    ], | 
					 | 
				
			||||
                    hiddenDangerItem12: { | 
					 | 
				
			||||
                        $ne: null | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            if (placeType == 2) | 
					 | 
				
			||||
                options.hiddenDangerItem12 = { | 
					 | 
				
			||||
                    $eq: null | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let findOption = { | 
					 | 
				
			||||
            where: options, | 
					 | 
				
			||||
            offset: offset, | 
					 | 
				
			||||
            limit: limit, | 
					 | 
				
			||||
            order: [['time', 'DESC']], | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (dep4Ids.length) { | 
					 | 
				
			||||
            findOption.include = [{ | 
					 | 
				
			||||
                required: true, | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                as: 'user', | 
					 | 
				
			||||
                where: { | 
					 | 
				
			||||
                    departmentId: { $in: dep4Ids } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            }] | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const list = await models.UserPlaceSecurityRecord.findAll(findOption) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        for (let item of list) { | 
					 | 
				
			||||
            const { name } = places.filter(p => p.id == item.placeId)[0] || {}; | 
					 | 
				
			||||
            const checkAreaName = await sequelize.query(`SELECT "dpt"."name" FROM "department" as "dpt" WHERE "dpt"."id" in (SELECT "department_id" FROM  "user" WHERE "id" = ${item.userId} );`, { type: QueryTypes.SELECT }) | 
					 | 
				
			||||
            const checkUser = await sequelize.query(`SELECT "name", "phone" FROM  "user" WHERE "id" = ${item.userId}`, { type: QueryTypes.SELECT }) | 
					 | 
				
			||||
            rslt.rows.push(Object.assign({}, item.dataValues, { placeName: name, checkAreaName: (checkAreaName[0] || {}).name || '', checkUserName: (checkUser[0] || {}).name || '', checkUserPhone: (checkUser[0] || {}).phone })) | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        delete findOption.offset | 
					 | 
				
			||||
        delete findOption.limit | 
					 | 
				
			||||
        delete findOption.order | 
					 | 
				
			||||
        findOption.attributes = ['id'] | 
					 | 
				
			||||
        const dataAll = await models.UserPlaceSecurityRecord.findAll( | 
					 | 
				
			||||
            findOption | 
					 | 
				
			||||
            // {
 | 
					 | 
				
			||||
            //     attributes: ['id'],
 | 
					 | 
				
			||||
            //     where: options,
 | 
					 | 
				
			||||
            // }
 | 
					 | 
				
			||||
        ); | 
					 | 
				
			||||
        rslt.count = dataAll.length; | 
					 | 
				
			||||
        rslt.ids = dataAll.map(item => item.dataValues.id); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取数据中台数据失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    reportDailyStatistic, | 
					 | 
				
			||||
    reportAreaStatistic, | 
					 | 
				
			||||
    dangerAreaQuery, | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -1,483 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
const moment = require('moment'); | 
					 | 
				
			||||
//获取每日汇总
 | 
					 | 
				
			||||
async function getDayReport(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { date, areaId } = ctx.query; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")] | 
					 | 
				
			||||
        let rslt = await models.ReportCollection.findAll({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                dateTime: { | 
					 | 
				
			||||
                    $between: range | 
					 | 
				
			||||
                }, | 
					 | 
				
			||||
                regionId: areaId | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                required: true, | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                attributes: ['name', 'username', 'phone'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                required: false, | 
					 | 
				
			||||
                model: models.Department, | 
					 | 
				
			||||
                attributes: ['name'] | 
					 | 
				
			||||
            }] | 
					 | 
				
			||||
        }); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取全市每日汇总表失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//获取排查整治汇总表
 | 
					 | 
				
			||||
async function getGovern(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { date, areaId } = ctx.query; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")] | 
					 | 
				
			||||
        let rslt = await models.ReportRectify.findAndCountAll({ | 
					 | 
				
			||||
            where: { | 
					 | 
				
			||||
                dateTime: { | 
					 | 
				
			||||
                    $between: range | 
					 | 
				
			||||
                }, | 
					 | 
				
			||||
                regionId: areaId | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                required: true, | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                required: false, | 
					 | 
				
			||||
                model: models.Department, | 
					 | 
				
			||||
                attributes: ['id', 'name'] | 
					 | 
				
			||||
            }], | 
					 | 
				
			||||
            limit: 1 | 
					 | 
				
			||||
        }); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        let obj = { count: 0 } | 
					 | 
				
			||||
        if (rslt.count > 0) { | 
					 | 
				
			||||
            obj.area = rslt.rows[0].department; | 
					 | 
				
			||||
            obj.dateTime = rslt.rows[0].dateTime; | 
					 | 
				
			||||
            obj.count = rslt.count; | 
					 | 
				
			||||
            obj.user = rslt.rows[0].user; | 
					 | 
				
			||||
            obj.isAudit = rslt.rows[0].isAudit | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        ctx.body = obj; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取排查整治汇总表失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//获取排查整治汇总详情
 | 
					 | 
				
			||||
async function getGovernDetail(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { name, date, areaId, pageSize, pageIndex } = ctx.query; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")] | 
					 | 
				
			||||
        let whereObj = { | 
					 | 
				
			||||
            dateTime: { | 
					 | 
				
			||||
                $between: range | 
					 | 
				
			||||
            }, | 
					 | 
				
			||||
            regionId: areaId | 
					 | 
				
			||||
        }; | 
					 | 
				
			||||
        if (name) { | 
					 | 
				
			||||
            whereObj.name = { $like: `%${name}%` } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        let findObj = { | 
					 | 
				
			||||
            where: whereObj, | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                required: true, | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                required: false, | 
					 | 
				
			||||
                model: models.Department, | 
					 | 
				
			||||
                attributes: ['id', 'name'] | 
					 | 
				
			||||
            }], | 
					 | 
				
			||||
            order: [['dateTime', 'desc']] | 
					 | 
				
			||||
        }; | 
					 | 
				
			||||
        if (Number(pageSize) > 0 && Number(pageIndex) >= 0) { | 
					 | 
				
			||||
            findObj.limit = Number(pageSize); | 
					 | 
				
			||||
            findObj.offset = Number(pageIndex) * Number(pageSize); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        let rslt = await models.ReportRectify.findAndCountAll(findObj); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取排查整治汇总详情失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 确认整治汇总场所数据 | 
					 | 
				
			||||
 * body { | 
					 | 
				
			||||
 * governDetailIds:'1,2' | 
					 | 
				
			||||
 * }  | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function operateGovern(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const data = ctx.request.body; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        if (data.governDetailIds && data.governDetailIds.length > 0) { | 
					 | 
				
			||||
            await models.ReportRectify.update({ | 
					 | 
				
			||||
                isAudit: true | 
					 | 
				
			||||
            }, { where: { id: { $in: data.governDetailIds.split(',') } } }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            ctx.body = { "message": "确认整治汇总下场所数据成功" }; | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.body = { "message": "确认参数有误" }; | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "确认整治汇总下场所数据失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//获取安全隐患排查详细数据列表
 | 
					 | 
				
			||||
async function getSecurityRiskList(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const { name, date, areaId, pageSize, pageIndex } = ctx.query; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        let whereObj = {}; | 
					 | 
				
			||||
        let wheres = { | 
					 | 
				
			||||
            audit1ManId: { $not: null }, | 
					 | 
				
			||||
            audit2ManId: { $not: null } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (areaId) { | 
					 | 
				
			||||
            wheres.regionId = areaId; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (name) | 
					 | 
				
			||||
            whereObj = { name: { $like: `%${name}%` } } | 
					 | 
				
			||||
        let findObj = { | 
					 | 
				
			||||
            attributes: ['id', 'time', 'placeId', 'userId'], | 
					 | 
				
			||||
            where: | 
					 | 
				
			||||
                // time: {
 | 
					 | 
				
			||||
                //     $between: range
 | 
					 | 
				
			||||
                // },
 | 
					 | 
				
			||||
                // regionId: areaId,
 | 
					 | 
				
			||||
                // audit1ManId: { $not: null },
 | 
					 | 
				
			||||
                // audit2ManId: { $not: null }
 | 
					 | 
				
			||||
                wheres | 
					 | 
				
			||||
            , | 
					 | 
				
			||||
            include: [{ | 
					 | 
				
			||||
                required: true, | 
					 | 
				
			||||
                model: models.Places, | 
					 | 
				
			||||
                attributes: ['id', 'name'], | 
					 | 
				
			||||
                where: whereObj | 
					 | 
				
			||||
            }, { | 
					 | 
				
			||||
                required: true, | 
					 | 
				
			||||
                model: models.User, | 
					 | 
				
			||||
                as: 'user', | 
					 | 
				
			||||
                attributes: ['id', 'name', 'username', 'phone'] | 
					 | 
				
			||||
            }], | 
					 | 
				
			||||
            order: [['time', 'desc']] | 
					 | 
				
			||||
        }; | 
					 | 
				
			||||
        if (date) { | 
					 | 
				
			||||
            let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")] | 
					 | 
				
			||||
            findObj.where.time = { | 
					 | 
				
			||||
                $between: range | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        if (areaId) { | 
					 | 
				
			||||
            findObj.where.regionId = areaId | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (Number(pageSize) > 0 && Number(pageIndex) >= 0) { | 
					 | 
				
			||||
            findObj.limit = Number(pageSize); | 
					 | 
				
			||||
            findObj.offset = Number(pageIndex) * Number(pageSize); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        let rslt = await models.UserPlaceSecurityRecord.findAndCountAll(findObj); | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
        ctx.body = rslt; | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取安全隐患排查详细数据列表失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//获取待处理数量
 | 
					 | 
				
			||||
async function getHomeCount(ctx) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        let { userId, departmentId, userRegionType } = ctx.params; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const departmentRes = await models.Department.findOne({ where: { id: departmentId } }); | 
					 | 
				
			||||
        if (userRegionType != 2 && userRegionType != 3 && !departmentRes) { | 
					 | 
				
			||||
            ctx.body = { "message": "请求参数有误" }; | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            //获取当前用户数据范围管辖区域内所有用户ID
 | 
					 | 
				
			||||
            let attentionRegionIds = [departmentRes.id]; | 
					 | 
				
			||||
            let regionType = departmentRes.type; | 
					 | 
				
			||||
            while (attentionRegionIds.length && regionType && regionType < 4) { | 
					 | 
				
			||||
                const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } }); | 
					 | 
				
			||||
                regionType = departmentChilds.length ? departmentChilds[0].type : null; | 
					 | 
				
			||||
                attentionRegionIds = departmentChilds.map(d => d.id); | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
            let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] }); | 
					 | 
				
			||||
            let userIds = users.map(u => u.id); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            let rslt = { recordCount: 0, reportCount: null } | 
					 | 
				
			||||
            if (userIds.length) { | 
					 | 
				
			||||
                let whereObj = { | 
					 | 
				
			||||
                    userId: { $in: userIds }, | 
					 | 
				
			||||
                    rejectManId: null, | 
					 | 
				
			||||
                    isDraft: false | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                if (userRegionType == 3) { | 
					 | 
				
			||||
                    whereObj.audit1ManId = null; | 
					 | 
				
			||||
                } else { | 
					 | 
				
			||||
                    whereObj.audit1ManId = { $not: null }; | 
					 | 
				
			||||
                    whereObj.audit2ManId = null; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                let recordCount = await models.UserPlaceSecurityRecord.count({ | 
					 | 
				
			||||
                    where: whereObj | 
					 | 
				
			||||
                }); | 
					 | 
				
			||||
                rslt.recordCount = recordCount; | 
					 | 
				
			||||
                if (userRegionType == 2) { | 
					 | 
				
			||||
                    let reportCount = await models.ReportCollection.count({ | 
					 | 
				
			||||
                        where: { | 
					 | 
				
			||||
                            userId: null, | 
					 | 
				
			||||
                            regionId: departmentId | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    }); | 
					 | 
				
			||||
                    let reportRectify = await models.ReportRectify.findAll({ | 
					 | 
				
			||||
                        where: { | 
					 | 
				
			||||
                            userId: null, | 
					 | 
				
			||||
                            regionId: departmentId | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    }); | 
					 | 
				
			||||
                    let dateArr = []; | 
					 | 
				
			||||
                    reportRectify.map(r => { | 
					 | 
				
			||||
                        let date = moment(r.dateTime).format("YYYY-MM-DD"); | 
					 | 
				
			||||
                        if (!dateArr.includes(date)) { | 
					 | 
				
			||||
                            dateArr.push(date) | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    }) | 
					 | 
				
			||||
                    rslt.reportCount = reportCount + dateArr.length; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
            ctx.body = rslt; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        console.log(error) | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { | 
					 | 
				
			||||
            "message": "获取待处理数量失败" | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//每日汇总表上报
 | 
					 | 
				
			||||
async function operateReport(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        let { id, userId } = ctx.params; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        await models.ReportCollection.update({ | 
					 | 
				
			||||
            userId: userId | 
					 | 
				
			||||
        }, { where: { id: id } }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        ctx.body = { "message": "每日汇总表上报成功" }; | 
					 | 
				
			||||
        ctx.status = 200; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "每日汇总表上报失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 根据筛选条件获取用户审核报表信息 | 
					 | 
				
			||||
 * @query { | 
					 | 
				
			||||
 *  approveUserId-审批人ID | 
					 | 
				
			||||
 *  reportType-报表类型(1-整治汇总表,2-每日汇总表,null-整治汇总表+每日汇总表) | 
					 | 
				
			||||
 *  timeRange-时间范围 | 
					 | 
				
			||||
 *  regionId-区域ID | 
					 | 
				
			||||
 *  state-审批状态 | 
					 | 
				
			||||
 *  pageIndex-页码 | 
					 | 
				
			||||
 *  pageSize-页宽 | 
					 | 
				
			||||
 * } ctx | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function getApproveReportCollections(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        const { approveUserId, reportType, timeRange, regionId, state, pageIndex, pageSize } = ctx.query; | 
					 | 
				
			||||
        let whereCondition = {}; | 
					 | 
				
			||||
        if (approveUserId) { | 
					 | 
				
			||||
            let approveUser = await models.User.findOne({ where: { id: approveUserId } }); | 
					 | 
				
			||||
            if (approveUser) { | 
					 | 
				
			||||
                //市级用户可以看到所有报表数据
 | 
					 | 
				
			||||
                const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } }); | 
					 | 
				
			||||
                if (departmentRes.dependence) { | 
					 | 
				
			||||
                    if (departmentRes.type = 2) { | 
					 | 
				
			||||
                        //区县人员只能看见自己区县下的报表信息
 | 
					 | 
				
			||||
                        whereCondition.regionId = departmentRes.id; | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        //其它层级无报表信息
 | 
					 | 
				
			||||
                        ctx.status = 200; | 
					 | 
				
			||||
                        ctx.body = { | 
					 | 
				
			||||
                            "count": 0, | 
					 | 
				
			||||
                            "rows": [] | 
					 | 
				
			||||
                        }; | 
					 | 
				
			||||
                        return; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                if (regionId) { | 
					 | 
				
			||||
                    let region = await models.Department.findOne({ where: { id: regionId } }); | 
					 | 
				
			||||
                    if (region) { | 
					 | 
				
			||||
                        if (whereCondition.regionId && whereCondition.regionId != regionId) { | 
					 | 
				
			||||
                            //区县人员只能看见自己区县下的报表信息
 | 
					 | 
				
			||||
                            ctx.status = 200; | 
					 | 
				
			||||
                            ctx.body = { | 
					 | 
				
			||||
                                "count": 0, | 
					 | 
				
			||||
                                "rows": [] | 
					 | 
				
			||||
                            }; | 
					 | 
				
			||||
                            return; | 
					 | 
				
			||||
                        } else { | 
					 | 
				
			||||
                            whereCondition.regionId = regionId; | 
					 | 
				
			||||
                        } | 
					 | 
				
			||||
                    } else { | 
					 | 
				
			||||
                        ctx.status = 400; | 
					 | 
				
			||||
                        ctx.body = { "message": "区域不存在!" } | 
					 | 
				
			||||
                        return; | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                let times = timeRange; | 
					 | 
				
			||||
                if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') } | 
					 | 
				
			||||
                if (times && times.length > 0) { | 
					 | 
				
			||||
                    const len = times.length; | 
					 | 
				
			||||
                    whereCondition.dateTime = { | 
					 | 
				
			||||
                        $between: [ | 
					 | 
				
			||||
                            moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'), | 
					 | 
				
			||||
                            moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss') | 
					 | 
				
			||||
                        ] | 
					 | 
				
			||||
                    }; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                switch (Number(state)) { | 
					 | 
				
			||||
                    case 1: //待审批:无审核人员
 | 
					 | 
				
			||||
                        whereCondition.userId = null; | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    case 2://已审批:有审核人员
 | 
					 | 
				
			||||
                        whereCondition.userId = { $not: null }; | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    default: break; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                let findObj = { | 
					 | 
				
			||||
                    where: whereCondition, | 
					 | 
				
			||||
                    order: [["id", "desc"]], | 
					 | 
				
			||||
                    include: [{ | 
					 | 
				
			||||
                        model: models.User, | 
					 | 
				
			||||
                        attributes: ['name', 'username', 'phone'] | 
					 | 
				
			||||
                    }, { | 
					 | 
				
			||||
                        model: models.Department, | 
					 | 
				
			||||
                        attributes: ['id', 'name'] | 
					 | 
				
			||||
                    }] | 
					 | 
				
			||||
                }; | 
					 | 
				
			||||
                if (Number(pageSize) > 0 && Number(pageIndex) >= 0) { | 
					 | 
				
			||||
                    findObj.limit = Number(pageSize); | 
					 | 
				
			||||
                    findObj.offset = Number(pageIndex) * Number(pageSize); | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                switch (Number(reportType)) { | 
					 | 
				
			||||
                    case 1: //整治汇总表
 | 
					 | 
				
			||||
                        ctx.body = await models.ReportRectify.findAndCountAll(findObj); | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    case 2://每日汇总表
 | 
					 | 
				
			||||
                        ctx.body = await models.ReportCollection.findAndCountAll(findObj); | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                    default: //整治汇总表+每日汇总表
 | 
					 | 
				
			||||
                        const rectifies = await models.ReportRectify.findAndCountAll(findObj); | 
					 | 
				
			||||
                        const collections = await models.ReportCollection.findAndCountAll(findObj); | 
					 | 
				
			||||
                        ctx.body = { | 
					 | 
				
			||||
                            "totalCount": rectifies.count + collections.count, | 
					 | 
				
			||||
                            "totalRows": { | 
					 | 
				
			||||
                                "rectify": rectifies, | 
					 | 
				
			||||
                                "collection": collections | 
					 | 
				
			||||
                            } | 
					 | 
				
			||||
                        }; | 
					 | 
				
			||||
                        break; | 
					 | 
				
			||||
                } | 
					 | 
				
			||||
                ctx.status = 200; | 
					 | 
				
			||||
            } else { | 
					 | 
				
			||||
                ctx.status = 400; | 
					 | 
				
			||||
                ctx.body = { "message": "用户不存在!" } | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
            ctx.body = { "message": "请传用户参数!" } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "获取审批报表信息失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
/** | 
					 | 
				
			||||
 * 上报排查整治汇总表 | 
					 | 
				
			||||
 * query{ | 
					 | 
				
			||||
 * userId:1,//上报用户
 | 
					 | 
				
			||||
 * } | 
					 | 
				
			||||
 * body { | 
					 | 
				
			||||
 * governDetailIds:'1,2' //排查整治汇总返回数据id字符串
 | 
					 | 
				
			||||
 * }  | 
					 | 
				
			||||
 */ | 
					 | 
				
			||||
async function operateGovernReport(ctx, next) { | 
					 | 
				
			||||
    try { | 
					 | 
				
			||||
        let { userId } = ctx.params; | 
					 | 
				
			||||
        const data = ctx.request.body; | 
					 | 
				
			||||
        const models = ctx.fs.dc.models; | 
					 | 
				
			||||
        if (data.governDetailIds && data.governDetailIds.length > 0) { | 
					 | 
				
			||||
            await models.ReportRectify.update({ | 
					 | 
				
			||||
                userId: userId | 
					 | 
				
			||||
            }, { where: { id: { $in: data.governDetailIds.split(',') } } }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            ctx.body = { "message": "上报排查整治汇总表成功" }; | 
					 | 
				
			||||
            ctx.status = 200; | 
					 | 
				
			||||
        } else { | 
					 | 
				
			||||
            ctx.body = { "message": "上报排查整治汇总表参数有误" }; | 
					 | 
				
			||||
            ctx.status = 400; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } catch (error) { | 
					 | 
				
			||||
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); | 
					 | 
				
			||||
        ctx.status = 400; | 
					 | 
				
			||||
        ctx.body = { "message": "上报排查整治汇总表失败" } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
module.exports = { | 
					 | 
				
			||||
    getDayReport, | 
					 | 
				
			||||
    getGovern, | 
					 | 
				
			||||
    getGovernDetail, | 
					 | 
				
			||||
    operateGovern, | 
					 | 
				
			||||
    getSecurityRiskList, | 
					 | 
				
			||||
    getHomeCount, | 
					 | 
				
			||||
    operateReport, | 
					 | 
				
			||||
    getApproveReportCollections, | 
					 | 
				
			||||
    operateGovernReport | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,61 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const Places = sequelize.define("places", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: true, | 
					 | 
				
			||||
      unique: "places_id_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    name: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "场所名称", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "name", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    describe: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "描述", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "describe", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    userId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "userId", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "user" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "places", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.Places = Places; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
  const User = dc.models.User; | 
					 | 
				
			||||
  Places.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); | 
					 | 
				
			||||
  User.hasMany(Places, { foreignKey: 'userId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
  return Places; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,47 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const Post = sequelize.define("post", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: true, | 
					 | 
				
			||||
      unique: "post_id_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    name: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "name", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    departmentId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "department_id", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "department" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "post", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.Post = Post; | 
					 | 
				
			||||
  return Post; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,51 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const PostResource = sequelize.define("postResource", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: true, | 
					 | 
				
			||||
      unique: "post_resource_id_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    postId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "post_id", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "post" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    resource: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "resource", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "code", | 
					 | 
				
			||||
        model: "resource" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "post_resource", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.PostResource = PostResource; | 
					 | 
				
			||||
  return PostResource; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,34 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const RegionType = sequelize.define("regionType", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: true, | 
					 | 
				
			||||
      unique: "region_type_id_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    type: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "type", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "region_type", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.RegionType = RegionType; | 
					 | 
				
			||||
  return RegionType; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,88 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
    const DataTypes = dc.ORM; | 
					 | 
				
			||||
    const sequelize = dc.orm; | 
					 | 
				
			||||
    const ReportCollection = sequelize.define("reportCollection", { | 
					 | 
				
			||||
        id: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: false, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: null, | 
					 | 
				
			||||
            primaryKey: true, | 
					 | 
				
			||||
            field: "id", | 
					 | 
				
			||||
            autoIncrement: true, | 
					 | 
				
			||||
            unique: "report_collection_id_uindex" | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        regionId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "县区(id)", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "regionId", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        dateTime: { | 
					 | 
				
			||||
            type: DataTypes.DATE, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: null, | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "dateTime", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        placeCount: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "场所总数", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "placeCount", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        hiddenDangerCount: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "排查隐患总数", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "hiddenDangerCount", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        hiddenDangerItem12Count: { | 
					 | 
				
			||||
            type: DataTypes.JSON, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "排查隐患详细类目  1-12 项  总数", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "hiddenDangerItem12Count", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        userId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "填报人(县区联络员)", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "userId", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    }, { | 
					 | 
				
			||||
        tableName: "report_collection", | 
					 | 
				
			||||
        comment: "", | 
					 | 
				
			||||
        indexes: [] | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
    dc.models.ReportCollection = ReportCollection; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    const User = dc.models.User; | 
					 | 
				
			||||
    ReportCollection.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); | 
					 | 
				
			||||
    User.hasMany(ReportCollection, { foreignKey: 'userId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    const Department = dc.models.Department; | 
					 | 
				
			||||
    ReportCollection.belongsTo(Department, { foreignKey: 'regionId', targetKey: 'id' }); | 
					 | 
				
			||||
    Department.hasMany(ReportCollection, { foreignKey: 'regionId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    return ReportCollection; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,74 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const ReportConfigition = sequelize.define("reportConfigition", { | 
					 | 
				
			||||
    reportName: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "报表名称", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "reportName", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    regionId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "区域id", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "regionId", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    reportTypeId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "报表类型", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "reportTypeId", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "reportType" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    excuteTime: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "生成时间 cron表达式", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "excuteTime", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    isEnable: { | 
					 | 
				
			||||
      type: DataTypes.BOOLEAN, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "启用状态", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "isEnable", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "序号", | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: true, | 
					 | 
				
			||||
      unique: "report_configition_id_uindex" | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "report_configition", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.ReportConfigition = ReportConfigition; | 
					 | 
				
			||||
  return ReportConfigition; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,69 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const ReportCountyCollect = sequelize.define("reportCountyCollect", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.BIGINT, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "序号", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    name: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "名称", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "name", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    address: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "地址", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "address", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    hiddenDanger: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "排查发现隐患", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "hiddenDanger", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    correctiveAction: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "采取措施", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "correctiveAction", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    punishment: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "实施处罚,强制措施情况", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "punishment", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "report_countyCollect", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.ReportCountyCollect = ReportCountyCollect; | 
					 | 
				
			||||
  return ReportCountyCollect; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,82 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const ReportDownManage = sequelize.define("reportDownManage", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: "nextval(\"report_downManage_id_seq\"::regclass)", | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      unique: "report_downmanage_id_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    reportName: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "报表名称", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "reportName", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    regionId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "区域id", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "regionId", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "department" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    reportTypeId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "报表类型id\n1.整治表\n2.汇总表", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "reportTypeId", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "reportType" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    filePath: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: "文件路径", | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "filePath", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    creatTime: { | 
					 | 
				
			||||
      type: DataTypes.DATE, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "creatTime", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "report_downManage", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.ReportDownManage = ReportDownManage; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
  const { ReportType, Department } = dc.models; | 
					 | 
				
			||||
  ReportDownManage.belongsTo(ReportType, { foreignKey: 'reportTypeId', targetKey: 'id' }); | 
					 | 
				
			||||
  ReportDownManage.belongsTo(Department, { foreignKey: 'regionId', targetKey: 'id' }); | 
					 | 
				
			||||
  return ReportDownManage; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,115 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
    const DataTypes = dc.ORM; | 
					 | 
				
			||||
    const sequelize = dc.orm; | 
					 | 
				
			||||
    const ReportRectify = sequelize.define("reportRectify", { | 
					 | 
				
			||||
        id: { | 
					 | 
				
			||||
            type: DataTypes.BIGINT, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: "nextval(\"report_countyCollect_id_seq\"::regclass)", | 
					 | 
				
			||||
            comment: "序号", | 
					 | 
				
			||||
            primaryKey: true, | 
					 | 
				
			||||
            field: "id", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
            unique: "report_countycollect_id_uindex" | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        regionId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "县区(id)", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "regionId", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        dateTime: { | 
					 | 
				
			||||
            type: DataTypes.DATE, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: null, | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "dateTime", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        name: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "名称", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "name", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        address: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "地址", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "address", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        hiddenDanger: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "排查发现隐患", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "hiddenDanger", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        correctiveAction: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "采取措施", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "correctiveAction", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        punishment: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "实施处罚,强制措施情况", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "punishment", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        userId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "web端上报", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "userId", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        isAudit: { | 
					 | 
				
			||||
            type: DataTypes.BOOLEAN, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "市级 确认审核", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "isAudit", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
    }, { | 
					 | 
				
			||||
        tableName: "report_rectify", | 
					 | 
				
			||||
        comment: "", | 
					 | 
				
			||||
        indexes: [] | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
    dc.models.ReportRectify = ReportRectify; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    const User = dc.models.User; | 
					 | 
				
			||||
    ReportRectify.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); | 
					 | 
				
			||||
    User.hasMany(ReportRectify, { foreignKey: 'userId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    const Department = dc.models.Department; | 
					 | 
				
			||||
    ReportRectify.belongsTo(Department, { foreignKey: 'regionId', targetKey: 'id' }); | 
					 | 
				
			||||
    Department.hasMany(ReportRectify, { foreignKey: 'regionId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    return ReportRectify; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,33 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const ReportType = sequelize.define("reportType", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    name: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "name", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "report_type", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.ReportType = ReportType; | 
					 | 
				
			||||
  return ReportType; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,44 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const Resource = sequelize.define("resource", { | 
					 | 
				
			||||
    code: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "code", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      unique: "resource_code_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    name: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "name", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      unique: "resource_name_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    parentResource: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: true, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "parent_resource", | 
					 | 
				
			||||
      autoIncrement: false | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "resource", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.Resource = Resource; | 
					 | 
				
			||||
  return Resource; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -0,0 +1,466 @@ | 
				
			|||||
 | 
					/* eslint-disable*/ | 
				
			||||
 | 
					'use strict'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					module.exports = dc => { | 
				
			||||
 | 
					    const DataTypes = dc.ORM; | 
				
			||||
 | 
					    const sequelize = dc.orm; | 
				
			||||
 | 
					    const Road = sequelize.define("road", { | 
				
			||||
 | 
					        id: { | 
				
			||||
 | 
					            type: DataTypes.INTEGER, | 
				
			||||
 | 
					            allowNull: false, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: null, | 
				
			||||
 | 
					            primaryKey: true, | 
				
			||||
 | 
					            field: "id", | 
				
			||||
 | 
					            autoIncrement: true, | 
				
			||||
 | 
					            unique: "road_id_uindex" | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        routeName: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路线名称", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "route_name", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        routeCode: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路线代码", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "route_code", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        sectionNo: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路段序号", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "section_no", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        townshipCode: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "乡镇编码", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "township_code", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        startingPlaceName: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "起点地名", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "starting_place_name", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        startStation: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "起点桩号", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "start_station", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        categoryOfStartingPointAndDividingPoint: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "起点分界点类别", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "category_of_starting_point_and_dividing_point", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        stopPlaceName: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "止点地名", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "stop_place_name", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        categoryOfDeadCenterAndDividingPoint: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "止点分界点类别", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "category_of_dead_center_and_dividing_point", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        stopStation: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "止点桩号", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "stop_station", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        sectionType: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路段类型", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "section_type", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        natureOfRoadSection: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路段性质", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "nature_of_road_section", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        completionTime: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "建成时间", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "completion_time", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        gbmAndCivilizedModelRoad: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "GBM及文明样板路", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "gbm_and_civilized_model_road", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        landforms: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "地貌", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "landforms", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        natureOfCharges: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "收费性质", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "nature_of_charges", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        numberOfCulverts: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "涵洞数量", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "number_of_culverts", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        technicalLevel: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "技术等级", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "technical_level", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        pavementType: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路面类型", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "pavement_type", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        pavementWidth: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路面宽度", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "pavement_width", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        subgradeWidth: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路基宽度", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "subgrade_width", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        laneCharacteristics: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "车道特征", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "lane_characteristics", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        whetherItIsOpenToTrafficInSunnyOrRainyDays: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "是否晴雨通车", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "whether_it_is_open_to_traffic_in_sunny_or_rainy_days", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        designSpeedPerHour: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "设计时速", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "design_speed_per_hour", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        urbanManagementSectionOrNot: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "是否城管路段", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "urban_management_section_or_not", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        managementAndMaintenanceUnit: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "管养单位", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "management_and_maintenance_unit", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        roadAdministrationUnit: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "路政管理单位", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "road_administration_unit", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        alimentation: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "列养情况", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "alimentation", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        sourceOfListedMaintenanceFunds: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "列养资金来源", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "source_of_listed_maintenance_funds", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        curingTime: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "养护时间", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "curing_time_", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        greeningMileage: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "可绿化里程", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "greening_mileage", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        greeningMileaged: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "已绿化里程", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "greening_mileaged", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        typeOfRepeatedRoadSection: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "重复道路路段类型", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "type_of_repeated_road_section", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        serialNumberOfRepeatedSection: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "重复路段序号", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "serial_number_of_repeated_section", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        repeatedSectionRouteCode: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "重复路段路线编码", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "repeated_section_route_code", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        reportingUnit: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "填报单位", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "reporting_unit", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        reasonForChange: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "变更原因", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "reason_for_change", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        changeTime: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "变更时间", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "change_time", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        whetherMaintenanceManagedHighway: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "是否按干线公路管理接养", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "whether_maintenance_managed_highway", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        remarks: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "备注", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "remarks", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        routeCodeOfLastYear: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "上年路线编码", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "route_code_of_last_year", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        routeNameOfLastYear: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "上年路线名称", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "route_name_of_last_year", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        startingStationOfLastYear: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "上年起点桩号", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "starting_station_of_last_year", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        lastYearsEndingPointStakeNumber: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "上年止点桩号", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "last_years_ending_point_stake_number", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        graphicMileage: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "图形里程", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "graphic_mileage", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        chainageMileage: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "桩号里程", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "chainage_mileage", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        districtcounty: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "所在区县", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "districtcounty", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        locationCity: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "所在地市", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "location_city", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        level: { | 
				
			||||
 | 
					            type: DataTypes.STRING, | 
				
			||||
 | 
					            allowNull: true, | 
				
			||||
 | 
					            defaultValue: null, | 
				
			||||
 | 
					            comment: "县 / 乡 / 村", | 
				
			||||
 | 
					            primaryKey: false, | 
				
			||||
 | 
					            field: "level", | 
				
			||||
 | 
					            autoIncrement: false | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    }, { | 
				
			||||
 | 
					        tableName: "road", | 
				
			||||
 | 
					        comment: "", | 
				
			||||
 | 
					        indexes: [] | 
				
			||||
 | 
					    }); | 
				
			||||
 | 
					    dc.models.Road = Road; | 
				
			||||
 | 
					    return Road; | 
				
			||||
 | 
					}; | 
				
			||||
@ -1,311 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
    const DataTypes = dc.ORM; | 
					 | 
				
			||||
    const sequelize = dc.orm; | 
					 | 
				
			||||
    const UserPlaceSecurityRecord = sequelize.define("userPlaceSecurityRecord", { | 
					 | 
				
			||||
        id: { | 
					 | 
				
			||||
            type: DataTypes.BIGINT, | 
					 | 
				
			||||
            allowNull: false, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "id", | 
					 | 
				
			||||
            primaryKey: true, | 
					 | 
				
			||||
            field: "id", | 
					 | 
				
			||||
            autoIncrement: true, | 
					 | 
				
			||||
            unique: "user_placesecurityrecord_id_uindex" | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        time: { | 
					 | 
				
			||||
            type: DataTypes.DATE, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "录入时间", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "time", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        placeId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "场所id", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "placeId", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
            references: { | 
					 | 
				
			||||
                key: "id", | 
					 | 
				
			||||
                model: "places" | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        hiddenDangerItem12: { | 
					 | 
				
			||||
            type: DataTypes.JSON, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "12项隐患信息", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "hiddenDangerItem12", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        description: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "存在具体问题描述", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "description", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        audit1ManId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "乡镇人审核", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "audit1ManId", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
            references: { | 
					 | 
				
			||||
                key: "id", | 
					 | 
				
			||||
                model: "user" | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        audit2ManId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "区县人复核", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "audit2ManId", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
            references: { | 
					 | 
				
			||||
                key: "id", | 
					 | 
				
			||||
                model: "user" | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        regionId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "所属县/区", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "regionId", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
            references: { | 
					 | 
				
			||||
                key: "id", | 
					 | 
				
			||||
                model: "department" | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        userId: { | 
					 | 
				
			||||
            type: DataTypes.BIGINT, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "用户id,填报人", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "userId", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        placeType: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "场所性质", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "placeType", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        address: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "场所地址", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "address", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        phone: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: false, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "负责人手机号", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "phone", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        dimension: { | 
					 | 
				
			||||
            type: DataTypes.REAL, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "面积", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "dimension", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        floors: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "多少层", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "floors", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        numberOfPeople: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "常住人数", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "numberOfPeople", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        location: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "经纬度", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "location", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        isEnable: { | 
					 | 
				
			||||
            type: DataTypes.BOOLEAN, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "是否为合用场所", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "isEnable", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        rejectManId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "驳回人", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "rejectManId", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
            references: { | 
					 | 
				
			||||
                key: "id", | 
					 | 
				
			||||
                model: "user" | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        rejectReasons: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "驳回意见", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "rejectReasons", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        isDraft: { | 
					 | 
				
			||||
            type: DataTypes.BOOLEAN, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "是否草稿", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "isDraft", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        placeOwner: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "场所负责人", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "placeOwner", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        localtionDescribe: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "经纬度定位描述", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "localtionDescribe", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        correctiveAction: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "采取措施", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "correctiveAction", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        type: { | 
					 | 
				
			||||
            type: DataTypes.BOOLEAN, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "是否重新发起", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "type", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        punishment: { | 
					 | 
				
			||||
            type: DataTypes.STRING, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "实施处罚,强制措施情况", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "punishment", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        audit1ManIdTime: { | 
					 | 
				
			||||
            type: DataTypes.DATE, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "乡镇人审核时间", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "audit1ManIdTime", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        audit2ManIdTime: { | 
					 | 
				
			||||
            type: DataTypes.DATE, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "区县人复核时间", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "audit2ManIdTime", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        rejectTime: { | 
					 | 
				
			||||
            type: DataTypes.DATE, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            comment: "驳回日期", | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "rejectTime", | 
					 | 
				
			||||
            autoIncrement: false | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
        departmentId: { | 
					 | 
				
			||||
            type: DataTypes.INTEGER, | 
					 | 
				
			||||
            allowNull: true, | 
					 | 
				
			||||
            defaultValue: null, | 
					 | 
				
			||||
            primaryKey: false, | 
					 | 
				
			||||
            field: "department_id", | 
					 | 
				
			||||
            autoIncrement: false, | 
					 | 
				
			||||
        }, | 
					 | 
				
			||||
    }, { | 
					 | 
				
			||||
        tableName: "user_placeSecurityRecord", | 
					 | 
				
			||||
        comment: "", | 
					 | 
				
			||||
        indexes: [] | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
    dc.models.UserPlaceSecurityRecord = UserPlaceSecurityRecord; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    const Places = dc.models.Places; | 
					 | 
				
			||||
    UserPlaceSecurityRecord.belongsTo(Places, { foreignKey: 'placeId', targetKey: 'id' }); | 
					 | 
				
			||||
    Places.hasMany(UserPlaceSecurityRecord, { foreignKey: 'placeId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    const User = dc.models.User; | 
					 | 
				
			||||
    UserPlaceSecurityRecord.belongsTo(User, { as: 'user', foreignKey: 'userId', targetKey: 'id' }); | 
					 | 
				
			||||
    User.hasMany(UserPlaceSecurityRecord, { foreignKey: 'userId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    UserPlaceSecurityRecord.belongsTo(User, { as: 'audit1ManUser', foreignKey: 'audit1ManId', targetKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    UserPlaceSecurityRecord.belongsTo(User, { as: 'audit2ManUser', foreignKey: 'audit2ManId', targetKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    UserPlaceSecurityRecord.belongsTo(User, { as: 'rejectManUser', foreignKey: 'rejectManId', targetKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    return UserPlaceSecurityRecord; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,61 +0,0 @@ | 
				
			|||||
/* eslint-disable*/ | 
					 | 
				
			||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = dc => { | 
					 | 
				
			||||
  const DataTypes = dc.ORM; | 
					 | 
				
			||||
  const sequelize = dc.orm; | 
					 | 
				
			||||
  const UserResource = sequelize.define("userResource", { | 
					 | 
				
			||||
    id: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: true, | 
					 | 
				
			||||
      field: "id", | 
					 | 
				
			||||
      autoIncrement: true, | 
					 | 
				
			||||
      unique: "post_resource_id_uindex" | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    userId: { | 
					 | 
				
			||||
      type: DataTypes.INTEGER, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "user_id", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "id", | 
					 | 
				
			||||
        model: "post" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    }, | 
					 | 
				
			||||
    resourceId: { | 
					 | 
				
			||||
      type: DataTypes.STRING, | 
					 | 
				
			||||
      allowNull: false, | 
					 | 
				
			||||
      defaultValue: null, | 
					 | 
				
			||||
      comment: null, | 
					 | 
				
			||||
      primaryKey: false, | 
					 | 
				
			||||
      field: "resource", | 
					 | 
				
			||||
      autoIncrement: false, | 
					 | 
				
			||||
      references: { | 
					 | 
				
			||||
        key: "code", | 
					 | 
				
			||||
        model: "resource" | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
  }, { | 
					 | 
				
			||||
    tableName: "user_resource", | 
					 | 
				
			||||
    comment: "", | 
					 | 
				
			||||
    indexes: [] | 
					 | 
				
			||||
  }); | 
					 | 
				
			||||
  dc.models.UserResource = UserResource; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
  const User = dc.models.User; | 
					 | 
				
			||||
  UserResource.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); | 
					 | 
				
			||||
  User.hasMany(UserResource, { foreignKey: 'userId', sourceKey: 'id' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
  const Resource = dc.models.Resource; | 
					 | 
				
			||||
  UserResource.belongsTo(Resource, { foreignKey: 'resourceId', targetKey: 'code' }); | 
					 | 
				
			||||
  Resource.hasMany(UserResource, { foreignKey: 'resourceId', sourceKey: 'code' }); | 
					 | 
				
			||||
  Resource.hasMany(Resource, { foreignKey: 'parentResource', sourceKey: 'code' }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
  return UserResource; | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,13 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const Approval = require('../../controllers/approval/index'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {POST} approval/submit 提交审批、驳回修改. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup Approval | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/approval/submit'] = { content: '提交审批、驳回修改', visible: true }; | 
					 | 
				
			||||
    router.post('/approval/submit', Approval.submitApproval); | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,9 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const common = require('../../controllers/common'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    router.get('/data-dictionary/:model', common.getDataDictionary); | 
					 | 
				
			||||
    router.put('/data-dictionary/:model', common.putDataDictionary); | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,13 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const Department = require('../../controllers/department/index'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} counties/list 获取南昌市下所有区县. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup Department | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/counties/list'] = { content: '获取南昌市下所有区县', visible: true }; | 
					 | 
				
			||||
    router.get('/counties/list', Department.getCountiesList); | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,28 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const Authority = require('../../controllers/organization/authority'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
    * @api {GET} resource 查询所有权限码. | 
					 | 
				
			||||
    * @apiVersion 1.0.0 | 
					 | 
				
			||||
    * @apiGroup Org | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/resource'] = { content: '查询所有权限码', visible: true }; | 
					 | 
				
			||||
    router.get('resource', Authority.getResource); | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} user/resource 查询用户权限. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup Org | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/user/resource'] = { content: '查询用户权限', visible: true }; | 
					 | 
				
			||||
    router.get('user/resource', Authority.getUserResource); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {POST} user/resource 更新用户权限. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup Org | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['POST/user/resource'] = { content: '更新用户权限', visible: true }; | 
					 | 
				
			||||
    router.post('user/resource', Authority.updateUserRes); | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,32 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const user = require('../../controllers/organization/user'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/organization/department'] = { content: '获取部门信息', visible: false }; | 
					 | 
				
			||||
    router.get('/organization/department', user.getDepMessage); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/organization/department/:depId/user'] = { content: '获取部门下用户信息', visible: false }; | 
					 | 
				
			||||
    router.get('/organization/department/:depId/user', user.getUser); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['POST/organization/department/user'] = { content: '创建部门下用户信息', visible: false }; | 
					 | 
				
			||||
    router.post('/organization/department/user', user.creatUser); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/organization/department/user/:id'] = { content: '修改部门下用户信息', visible: false }; | 
					 | 
				
			||||
    router.put('/organization/department/user/:id', user.updateUser); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['DEL/organization/department/user/:ids'] = { content: '删除部门下用户信息', visible: false }; | 
					 | 
				
			||||
    router.del('/organization/department/user/:ids', user.deleteUser); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/organization/department/user/resetPwd/:id'] = { content: '重置用户密码', visible: false }; | 
					 | 
				
			||||
    router.put('/organization/department/user/resetPwd/:id', user.resetPwd); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {PUT} user/password/:id 修改用户密码 | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup Organization | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/user/password/:userId'] = { content: '修改用户密码', visible: false }; | 
					 | 
				
			||||
    router.put('/user/password/:userId', user.updateUserPassword); | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,70 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const placeSecurityRecord = require('../../controllers/placeSecurityRecord'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {POST} /add/placeSecurityRecord 提交填报信息/保存填报草稿. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['POST/add/placeSecurityRecord'] = { content: '提交填报信息/保存填报草稿', visible: true }; | 
					 | 
				
			||||
    router.post('/add/placeSecurityRecord', placeSecurityRecord.addPlaceSecurityRecord); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {PUT} /placeSecurityRecord/:id 编辑填报信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/placeSecurityRecord/:id'] = { content: '编辑填报信息', visible: true }; | 
					 | 
				
			||||
    router.put('/placeSecurityRecord/:id', placeSecurityRecord.editPlaceSecurityRecord); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
     /** | 
					 | 
				
			||||
     * @api {PUT} /placeSecurityRecord/:id 修改type字段 | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
      app.fs.api.logAttr['PUT/updateType/:id'] = { content: '修改type字段', visible: true }; | 
					 | 
				
			||||
      router.put('/updateType/:id', placeSecurityRecord.updateType); | 
					 | 
				
			||||
     | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {DELETE} /placeSecurityRecord/:id 删除填报信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['DELETE/placeSecurityRecord/:id'] = { content: '删除填报信息', visible: true }; | 
					 | 
				
			||||
    router.del('/placeSecurityRecord/:id', placeSecurityRecord.deletePlaceSecurityRecord); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /placeSecurityRecord/:id 根据填报信息ID查询填报信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/placeSecurityRecord/:id'] = { content: '根据填报信息ID查询填报信息', visible: true }; | 
					 | 
				
			||||
    router.get('/placeSecurityRecord/:id', placeSecurityRecord.getPlaceSecurityRecordById); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /recently/placeSecurityRecord/:placeId 根据场所ID获取该场所最近用户填报信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/recently/placeSecurityRecord/:placeId'] = { content: '根据场所ID获取该场所最近用户填报信息', visible: true }; | 
					 | 
				
			||||
    router.get('/recently/placeSecurityRecord/:placeId', placeSecurityRecord.getRecentlyPlaceSecurityRecordByPlaceId); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /placeSecurityRecords 根据筛选条件获取用户填报信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/placeSecurityRecords'] = { content: '根据筛选条件获取用户填报信息', visible: true }; | 
					 | 
				
			||||
    router.get('/placeSecurityRecords', placeSecurityRecord.getPlaceSecurityRecords); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /approve/placeSecurityRecords 根据筛选条件获取用户审批填报信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup placeSecurityRecord | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/approve/placeSecurityRecords'] = { content: '根据筛选条件获取用户审批填报信息', visible: true }; | 
					 | 
				
			||||
    router.get('/approve/placeSecurityRecords', placeSecurityRecord.getApprovePlaceSecurityRecords); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,30 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const places = require('../../controllers/places'); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /user/places/:userId 根据用户ID获取该用户创建的所有场所信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup places | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/user/places/:userId'] = { content: '根据用户ID获取该用户创建的所有场所信息', visible: true }; | 
					 | 
				
			||||
    router.get('/user/places/:userId', places.getPlacesByUserId); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /approveUser/places/:approveUserId 根据审批用户ID获取该审批用户范围内填报人创建的场所信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup places | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/approveUser/places/:approveUserId'] = { content: '根据审批用户ID获取该审批用户范围内填报人创建的场所信息', visible: true }; | 
					 | 
				
			||||
    router.get('/approveUser/places/:approveUserId', places.getPlacesByApproveUserId); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /all/places 获取所有场所信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup places | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/all/places'] = { content: '获取所有场所信息', visible: true }; | 
					 | 
				
			||||
    router.get('/all/places', places.getAllPlaces); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,41 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const report = require('../../controllers/report'); | 
					 | 
				
			||||
const reportConfig = require('../../controllers/report/config') | 
					 | 
				
			||||
const reportRectify = require('../../controllers/report/compile') | 
					 | 
				
			||||
 | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} report 报表. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup report | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/report/list'] = { content: '报表下载列表', visible: true }; | 
					 | 
				
			||||
    router.get('/report/list', report.getReportList); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    // 报表配置
 | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/allAreas'] = { content: '获取全部区域', visible: true }; | 
					 | 
				
			||||
    router.get('/allAreas', reportConfig.getAreas); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['POST/report/config'] = { content: '添加报表配置', visible: true }; | 
					 | 
				
			||||
    router.post('/report/config', reportConfig.addReportConfig); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/report/config'] = { content: '获取报表配置', visible: true }; | 
					 | 
				
			||||
    router.get('/report/config', reportConfig.getReportConfig); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/report/:reportId/config'] = { content: '编辑报表配置', visible: true }; | 
					 | 
				
			||||
    router.put('/report/:reportId/config', reportConfig.editReportConfig); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['DEL/report/:reportId/config'] = { content: '删除报表配置', visible: true }; | 
					 | 
				
			||||
    router.del('/report/:reportId/config', reportConfig.delReportConfig); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    // 报表编辑
 | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/report/rectify'] = { content: '获取合用场所安全隐患排查整治汇总表', visible: true }; | 
					 | 
				
			||||
    router.get('/report/rectify', reportRectify.getReportRectify); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/report/rectify/detail'] = { content: '获取合用场所安全隐患排查整治汇总表详情', visible: true }; | 
					 | 
				
			||||
    router.get('/report/rectify/detail', reportRectify.getReportRectifyDetail); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    app.fs.api.logAttr['POST/report/rectify/detail'] = { content: '保存合用场所安全隐患排查整治汇总表编辑信息', visible: true }; | 
					 | 
				
			||||
    router.post('/report/rectify/detail', reportRectify.compileReportRectifyDetail); | 
					 | 
				
			||||
}; | 
					 | 
				
			||||
@ -1,28 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const statistic = require('../../controllers/statistic') | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
    * @api {GET} getGovern 获取数据中台. | 
					 | 
				
			||||
    * @apiVersion 1.0.0 | 
					 | 
				
			||||
    * @apiGroup wxReport | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/daily/report/data/statistic'] = { content: '获取数据中台', visible: true }; | 
					 | 
				
			||||
    router.get('/daily/report/data/statistic', statistic.reportDailyStatistic); | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
* @api {GET} getGovern 获取数据中台地区填报数量. | 
					 | 
				
			||||
* @apiVersion 1.0.0 | 
					 | 
				
			||||
* @apiGroup wxReport | 
					 | 
				
			||||
*/ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/daily/report/area/statistic'] = { content: '获取数据中台地区填报数量', visible: true }; | 
					 | 
				
			||||
    router.get('/daily/report/area/statistic', statistic.reportAreaStatistic); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
    * @api {GET} getGovern 获取填报管理数据. | 
					 | 
				
			||||
    * @apiVersion 1.0.0 | 
					 | 
				
			||||
    * @apiGroup wxReport | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/report/management/statistic'] = { content: '获取填报管理数据', visible: true }; | 
					 | 
				
			||||
    router.get('/report/management/statistic', statistic.dangerAreaQuery); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -1,78 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
const wxReport = require('../../controllers/wxReport/index'); | 
					 | 
				
			||||
module.exports = function (app, router, opts) { | 
					 | 
				
			||||
    /*******************首页-市级***************************/ | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} getDayReport 获取每日汇总. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup wxReport | 
					 | 
				
			||||
     */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/getDayReport'] = { content: '获取每日汇总', visible: true }; | 
					 | 
				
			||||
    router.get('/getDayReport', wxReport.getDayReport); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
    * @api {GET} getGovern 获取排查整治汇总. | 
					 | 
				
			||||
    * @apiVersion 1.0.0 | 
					 | 
				
			||||
    * @apiGroup wxReport | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/getGovern'] = { content: '获取排查整治汇总', visible: true }; | 
					 | 
				
			||||
    router.get('/getGovern', wxReport.getGovern); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
    * @api {GET} getGovernDetail 获取排查整治汇总详情. | 
					 | 
				
			||||
    * @apiVersion 1.0.0 | 
					 | 
				
			||||
    * @apiGroup wxReport | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/getGovernDetail'] = { content: '获取排查整治汇总详情', visible: true }; | 
					 | 
				
			||||
    router.get('/getGovernDetail', wxReport.getGovernDetail); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
   * @api {PUT} /operateGovern 确认整治汇总场所数据. | 
					 | 
				
			||||
   * @apiVersion 1.0.0 | 
					 | 
				
			||||
   * @apiGroup wxReport | 
					 | 
				
			||||
   */ | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/operateGovern'] = { content: '确认整治汇总场所数据', visible: true }; | 
					 | 
				
			||||
    router.put('/operateGovern', wxReport.operateGovern); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
    * @api {GET} getSecurityRiskList 获取安全隐患排查详细数据列表. | 
					 | 
				
			||||
    * @apiVersion 1.0.0 | 
					 | 
				
			||||
    * @apiGroup wxReport | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/getSecurityRiskList'] = { content: '获取安全隐患排查详细数据列表', visible: true }; | 
					 | 
				
			||||
    router.get('/getSecurityRiskList', wxReport.getSecurityRiskList); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
   * @api {GET} /getHomeCount/:userId/:departmentId/:userRegionType 获取待处理数量. | 
					 | 
				
			||||
   * @apiVersion 1.0.0 | 
					 | 
				
			||||
   * @apiGroup wxReport | 
					 | 
				
			||||
   */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/getHomeCount/:userId/:departmentId/:userRegionType'] = { content: '获取待处理数量', visible: true }; | 
					 | 
				
			||||
    router.get('/getHomeCount/:userId/:departmentId/:userRegionType', wxReport.getHomeCount); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
   * @api {PUT} /operateReport/:id/:userId 每日汇总表上报. | 
					 | 
				
			||||
   * @apiVersion 1.0.0 | 
					 | 
				
			||||
   * @apiGroup wxReport | 
					 | 
				
			||||
   */ | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/operateReport/:id/:userId'] = { content: '每日汇总表上报', visible: true }; | 
					 | 
				
			||||
    router.put('/operateReport/:id/:userId', wxReport.operateReport); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
     * @api {GET} /approve/reportCollections 根据筛选条件获取用户审核报表信息. | 
					 | 
				
			||||
     * @apiVersion 1.0.0 | 
					 | 
				
			||||
     * @apiGroup wxReport | 
					 | 
				
			||||
    */ | 
					 | 
				
			||||
    app.fs.api.logAttr['GET/approve/reportCollections'] = { content: '根据筛选条件获取用户审核报表信息', visible: true }; | 
					 | 
				
			||||
    router.get('/approve/reportCollections', wxReport.getApproveReportCollections); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    /** | 
					 | 
				
			||||
   * @api {PUT} /operateGovernReport/:userId 上报排查整治汇总表. | 
					 | 
				
			||||
   * @apiVersion 1.0.0 | 
					 | 
				
			||||
   * @apiGroup wxReport | 
					 | 
				
			||||
   */ | 
					 | 
				
			||||
    app.fs.api.logAttr['PUT/operateGovernReport/:userId'] = { content: '上报排查整治汇总表', visible: true }; | 
					 | 
				
			||||
    router.put('/operateGovernReport/:userId', wxReport.operateGovernReport); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -0,0 +1,17 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					    // 使用 IntelliSense 了解相关属性。  | 
				
			||||
 | 
					    // 悬停以查看现有属性的描述。 | 
				
			||||
 | 
					    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 | 
				
			||||
 | 
					    "version": "0.2.0", | 
				
			||||
 | 
					    "configurations": [ | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            "type": "node", | 
				
			||||
 | 
					            "request": "launch", | 
				
			||||
 | 
					            "name": "启动程序", | 
				
			||||
 | 
					            "skipFiles": [ | 
				
			||||
 | 
					                "<node_internals>/**" | 
				
			||||
 | 
					            ], | 
				
			||||
 | 
					            "program": "${workspaceFolder}\\index.js" | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    ] | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,53 @@ | 
				
			|||||
 | 
					import React, { useEffect, useState } from 'react'; | 
				
			||||
 | 
					import { connect } from 'react-redux'; | 
				
			||||
 | 
					import { Spin, Card } from 'antd'; | 
				
			||||
 | 
					import Build from './footer/build' | 
				
			||||
 | 
					import '../style.less'; | 
				
			||||
 | 
					import Header from './heand'; | 
				
			||||
 | 
					import Footer from './footer'; | 
				
			||||
 | 
					import ProTable, { TableDropdown } from '@ant-design/pro-table'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Example = (props) => { | 
				
			||||
 | 
					    const { dispatch, actions, user, loading } = props | 
				
			||||
 | 
					    const [tabKey, setTabKey] = useState('leadership') | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    useEffect(() => { | 
				
			||||
 | 
					        dispatch(actions.example.getMembers(user.orgId)) | 
				
			||||
 | 
					    }, []) | 
				
			||||
 | 
					    const tabChange = (tab) => { | 
				
			||||
 | 
					        //leader 领导驾驶舱 site 工地 toilet 公厕 light 照明  water水质  encomic经济 environment 生态环境  security 智慧安监
 | 
				
			||||
 | 
					        // setCurrentTab(tab);
 | 
				
			||||
 | 
					        setTabKey(tab) | 
				
			||||
 | 
					        // dispatch({ type: 'TAB-CHANGE', data: tab })
 | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <Spin tip="biubiubiu~" spinning={loading}> | 
				
			||||
 | 
					            <div id='example2' style={{ | 
				
			||||
 | 
					                backgroundColor: "#031839", width: "100vw", height: "100vh", /* transform: `scale(${Math.min( | 
				
			||||
 | 
					                    document.body.clientWidth / 1920, | 
				
			||||
 | 
					                    document.body.clientHeight / 1080 | 
				
			||||
 | 
					                )})`, */
 | 
				
			||||
 | 
					            }}> | 
				
			||||
 | 
					                <div style={{ width: "100%", height: "10%" }}> | 
				
			||||
 | 
					                    <Header tabChange={tabChange} tabKey={tabKey} dispatch={dispatch} /> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <div style={{ width: "100%", height: "90%" }}> | 
				
			||||
 | 
					                    <Footer tabKey={tabKey} /> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </Spin> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					function mapStateToProps(state) { | 
				
			||||
 | 
					    const { auth, global, members } = state; | 
				
			||||
 | 
					    return { | 
				
			||||
 | 
					        loading: members.isRequesting, | 
				
			||||
 | 
					        user: auth.user, | 
				
			||||
 | 
					        actions: global.actions, | 
				
			||||
 | 
					        members: members.data | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					export default connect(mapStateToProps)(Example); | 
				
			||||
@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Build = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <>Build</> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Build | 
				
			||||
@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Conserve = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <>1212121</> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Conserve | 
				
			||||
@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Guanli = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <>管理</> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Guanli | 
				
			||||
@ -0,0 +1,29 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Build from './build' | 
				
			||||
 | 
					import Conserve from './conserve' | 
				
			||||
 | 
					import Guanli from './guanli' | 
				
			||||
 | 
					import Leadership from './leadership' | 
				
			||||
 | 
					import Operation from './operation' | 
				
			||||
 | 
					const Footer = ({ tabKey }) => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            { | 
				
			||||
 | 
					                (() => { | 
				
			||||
 | 
					                    switch (tabKey) { | 
				
			||||
 | 
					                        case 'build': | 
				
			||||
 | 
					                            return <Build /> | 
				
			||||
 | 
					                        case 'conserve': | 
				
			||||
 | 
					                            return <Conserve /> | 
				
			||||
 | 
					                        case "leadership": | 
				
			||||
 | 
					                            return <Leadership /> | 
				
			||||
 | 
					                        case "guanli": | 
				
			||||
 | 
					                            return <Guanli /> | 
				
			||||
 | 
					                        case "operation": | 
				
			||||
 | 
					                            return <Operation /> | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					                })() | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Footer | 
				
			||||
@ -0,0 +1,17 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Centerlefttop from "./centerleft/center-left-top" | 
				
			||||
 | 
					import Centerleftcenter from "./centerleft/center-left-center" | 
				
			||||
 | 
					import Centerleftcentertop from "./centerleft/center-left-centertop" | 
				
			||||
 | 
					import Centerleftbottom from "./centerleft/center-left-bottom" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const CenterLeft = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <div style={{ width: "23%", height: "100%", float: "left", marginLeft: "1%" }}> | 
				
			||||
 | 
					                <Centerlefttop /> | 
				
			||||
 | 
					                <Centerleftbottom /> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default CenterLeft | 
				
			||||
@ -0,0 +1,19 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Centerrighttop from "./centerRight/center-right-top" | 
				
			||||
 | 
					import Centerrightcenter from "./centerRight/center-right-center" | 
				
			||||
 | 
					import CenterRightcentertop from "./centerRight/center-right-centertop" | 
				
			||||
 | 
					import Centerrightbottom from "./centerRight/center-right-bottom" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const CenterLeft = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <div style={{ width: "23%", height: "100%", float: "right", marginRight: "1%" }}> | 
				
			||||
 | 
					                <Centerrighttop /> | 
				
			||||
 | 
					                <CenterRightcentertop /> | 
				
			||||
 | 
					                <Centerrightcenter /> | 
				
			||||
 | 
					                <Centerrightbottom /> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default CenterLeft | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Rightbottom = () => { | 
				
			||||
 | 
					    const style = { height: "33%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Rightbottom | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Rightcenter = () => { | 
				
			||||
 | 
					    const style = { height: "17%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Rightcenter | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Rightcentertop = () => { | 
				
			||||
 | 
					    const style = { height: "23%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Rightcentertop | 
				
			||||
@ -0,0 +1,15 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Righttop = (props) => { | 
				
			||||
 | 
					    const { } = props | 
				
			||||
 | 
					    const style = { height: "17%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Righttop | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Leftbottom = () => { | 
				
			||||
 | 
					    const style = { height: "23%", marginTop: "5%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Leftbottom | 
				
			||||
@ -0,0 +1,16 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Leftcenter = () => { | 
				
			||||
 | 
					    const style = { | 
				
			||||
 | 
					        height: "23%" | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Leftcenter | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Leftcentertop = () => { | 
				
			||||
 | 
					    const style = { height: "23%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Leftcentertop | 
				
			||||
@ -0,0 +1,15 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Lefttop = (props) => { | 
				
			||||
 | 
					    const { } = props | 
				
			||||
 | 
					    const style = { height: "23%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Lefttop | 
				
			||||
@ -0,0 +1,18 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Left from './left' | 
				
			||||
 | 
					import Right from './right' | 
				
			||||
 | 
					import CenterLeft from "./centerLeft" | 
				
			||||
 | 
					import Centerright from "./centerRight" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Leadership = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Left /> | 
				
			||||
 | 
					            <CenterLeft /> | 
				
			||||
 | 
					            <Right /> | 
				
			||||
 | 
					            {/* <Centerright /> */} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Leadership | 
				
			||||
@ -0,0 +1,17 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Lefttop from './left/left-top' | 
				
			||||
 | 
					import Leftcenter from "./left/left-center" | 
				
			||||
 | 
					import Leftbottom from './left/left-bottom' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Left = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <div style={{ width: "23%", height: "100%", float: "left" }}> | 
				
			||||
 | 
					                <Lefttop /> | 
				
			||||
 | 
					                <Leftcenter /> | 
				
			||||
 | 
					                <Leftbottom /> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Left | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Leftbottom = () => { | 
				
			||||
 | 
					    const style = { height: "25%", marginTop: "5%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style} title={""}> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Leftbottom | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Leftcenter = () => { | 
				
			||||
 | 
					    const style = { height: "30%", marginTop: "5%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Leftcenter | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Lefttop = () => { | 
				
			||||
 | 
					    const style = { height: "25%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style} title={"道路拥堵指数"} > | 
				
			||||
 | 
					                {/* <div style={{ width: "40%", height: "40%", background: "red" }}></div> */} | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Lefttop | 
				
			||||
@ -0,0 +1,16 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Righttop from './right/right-top' | 
				
			||||
 | 
					import Rightcenter from './right/right-center' | 
				
			||||
 | 
					import Rightbottom from './right/right-bottom' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Right = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <div style={{ width: "25%", height: "100%", float: "right" }}> | 
				
			||||
 | 
					                <Righttop /> | 
				
			||||
 | 
					                <Rightbottom /> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Right | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Rightbottom = () => { | 
				
			||||
 | 
					    const style = { height: "45%", marginTop: "5%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					                <div style={{ width: "40%", height: "40%", background: "red" }}></div> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Rightbottom | 
				
			||||
@ -0,0 +1,9 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Rightcenter = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <><div style={{ width: /* width || */ "100%", height: /* height || */ "30%" }}> | 
				
			||||
 | 
					        </div></> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Rightcenter | 
				
			||||
@ -0,0 +1,13 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import Module from '../../../public/module' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Righttop = () => { | 
				
			||||
 | 
					    const style = { height: "45%" } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <Module style={style}> | 
				
			||||
 | 
					            </Module> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Righttop | 
				
			||||
@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Operation = () => { | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <>运营</> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Operation | 
				
			||||
@ -0,0 +1,40 @@ | 
				
			|||||
 | 
					import React, { useState, uesEffect } from 'react' | 
				
			||||
 | 
					import { push } from 'react-router-redux'; | 
				
			||||
 | 
					import "./style.less" | 
				
			||||
 | 
					import { Tabs } from 'antd'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const { TabPane } = Tabs; | 
				
			||||
 | 
					const Header = (props) => { | 
				
			||||
 | 
					    const { dispatch, tabChange, tabKey } = props | 
				
			||||
 | 
					    // const [tab, setTad] = useState("base")
 | 
				
			||||
 | 
					    const onClick = (tab) => { | 
				
			||||
 | 
					        // setTad({ tab })
 | 
				
			||||
 | 
					        tabChange(tab) | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    const dianji = () => { | 
				
			||||
 | 
					        dispatch(push('/fillion/infor')) | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <div style={{ position: "relative" }}> | 
				
			||||
 | 
					            <img style={{ width: "100%", position: "absolute" }} src='/assets/images/quanju/beijingtou.png' /> | 
				
			||||
 | 
					            <div className={tabKey == "build" ? "tabKey-map" : "notabKey"} style={{ backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => { | 
				
			||||
 | 
					                onClick("build") | 
				
			||||
 | 
					            }}><a>建设</a></div> | 
				
			||||
 | 
					            <div className={tabKey == "conserve" ? "tabKey-map" : "notabKey"} style={{ left: "11.5%", backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => { | 
				
			||||
 | 
					                onClick("conserve") | 
				
			||||
 | 
					            }}><a>养护</a></div> | 
				
			||||
 | 
					            <div className={tabKey == "leadership" ? "tabKey-map" : "notabKey"} style={{ left: "23%", backgroundImage: "url(/assets/images/quanju/zuobeijing.png)", backgroundSize: "100% 100%" }} onClick={() => { | 
				
			||||
 | 
					                onClick("leadership") | 
				
			||||
 | 
					            }}><a>领导驾驶舱</a></div> | 
				
			||||
 | 
					            <div className={tabKey == "guanli" ? "tabKey-map" : "notabKey"} style={{ left: "65%", backgroundImage: "url(/assets/images/quanju/youbeijing.png)", backgroundSize: "100% 100%" }} onClick={() => { | 
				
			||||
 | 
					                onClick("guanli") | 
				
			||||
 | 
					            }}><a>管理</a></div> | 
				
			||||
 | 
					            <div className={tabKey == "operation" ? "tabKey-map" : "notabKey"} style={{ left: "76%", backgroundImage: "url(/assets/images/quanju/youbeijing.png)", backgroundSize: "100% 100%" }} onClick={() => { | 
				
			||||
 | 
					                onClick("operation") | 
				
			||||
 | 
					            }}><a>运营</a></div> | 
				
			||||
 | 
					            <div style={{ color: "red", position: "absolute", left: "92%", top: "15px" }} onClick={() => dianji()}>南昌县运输交通总局</div> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Header | 
				
			||||
@ -0,0 +1,23 @@ | 
				
			|||||
 | 
					.tabKey-map{ | 
				
			||||
 | 
					    width: 12%; | 
				
			||||
 | 
					    height: 45px; | 
				
			||||
 | 
					    text-align: center; | 
				
			||||
 | 
					    position: absolute; | 
				
			||||
 | 
					    top: 30px; | 
				
			||||
 | 
					    a{ | 
				
			||||
 | 
					        color: #c3d4f5; | 
				
			||||
 | 
					        line-height: 45px; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.notabKey{ | 
				
			||||
 | 
					    width:12%; | 
				
			||||
 | 
					    height: 45px; | 
				
			||||
 | 
					    position: absolute; | 
				
			||||
 | 
					    top: 30px; | 
				
			||||
 | 
					    text-align: center; | 
				
			||||
 | 
					    a{ | 
				
			||||
 | 
					        color: #6593c6; | 
				
			||||
 | 
					        line-height: 45px; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					     | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,6 @@ | 
				
			|||||
 | 
					'use strict'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import Example from './example'; | 
				
			||||
 | 
					import Build from './footer/build' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					export { Example, Build }; | 
				
			||||
@ -0,0 +1,4 @@ | 
				
			|||||
 | 
					@font-face { | 
				
			||||
 | 
					    font-family: "YouSheBiaoTiHei"; | 
				
			||||
 | 
					    src: url("/assets/fontziti/YouSheBiaoTiHei-2.ttf") format("truetype"); | 
				
			||||
 | 
					  } | 
				
			||||
@ -0,0 +1,22 @@ | 
				
			|||||
 | 
					import React from 'react' | 
				
			||||
 | 
					import "./font.css" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					const Module = (props) => { | 
				
			||||
 | 
					    const { style, children, title } = props | 
				
			||||
 | 
					    return ( | 
				
			||||
 | 
					        <> | 
				
			||||
 | 
					            <div style={{ width: style?.width || "100%", height: style?.height || "30%", backgroundColor: "#042263", marginTop: style?.marginTop || "0" }}> | 
				
			||||
 | 
					                <div style={{ width: "100%", height: "40px"/* , backgroundColor: "#fff" */, position: "relative" }}> | 
				
			||||
 | 
					                    {/* <p>{title || []}</p> */} | 
				
			||||
 | 
					                    <img src='/assets/images/quanju/icon.png' style={{ width: "4%", position: "absolute", left: "3%", top: "20%" }} /> | 
				
			||||
 | 
					                    <span style={{ position: "absolute", color: "#FFFFFF", fontSize: "24px", fontFamily: "YouSheBiaoTiHei", left: "8%" }}>{title || []}</span> | 
				
			||||
 | 
					                    <img src='/assets/images/quanju/mokuaitou.png' style={{ width: "100%", height: "28px", position: "absolute", top: "12px" }} /> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <div style={{ width: "100%", height: "70%" }}> | 
				
			||||
 | 
					                    {children} | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </> | 
				
			||||
 | 
					    ) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default Module | 
				
			||||
@ -0,0 +1,21 @@ | 
				
			|||||
 | 
					'use strict'; | 
				
			||||
 | 
					import { Example, Build } from './containers'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					export default [{ | 
				
			||||
 | 
					    type: 'outer', | 
				
			||||
 | 
					    route: { | 
				
			||||
 | 
					        path: '/quanju', | 
				
			||||
 | 
					        key: 'quanju', | 
				
			||||
 | 
					        breadcrumb: '栗子222', | 
				
			||||
 | 
					        exact: false, | 
				
			||||
 | 
					        component: Example, | 
				
			||||
 | 
					        // 不设置 component 则面包屑禁止跳转
 | 
				
			||||
 | 
					        // childRoutes: [{
 | 
				
			||||
 | 
					        //     path: '/e2',
 | 
				
			||||
 | 
					        //     key: 'e2',
 | 
				
			||||
 | 
					        //     exact: false,
 | 
				
			||||
 | 
					        //     component: Build,
 | 
				
			||||
 | 
					        //     breadcrumb: '棒子',
 | 
				
			||||
 | 
					        // }]
 | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					}]; | 
				
			||||
								
									Binary file not shown.
								
							
						
					
								
									Binary file not shown.
								
							
						
					
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,126 @@ | 
				
			|||||
 | 
					try { | 
				
			||||
 | 
					    const { Pool, Client } = require('pg') | 
				
			||||
 | 
					    const request = require('superagent'); | 
				
			||||
 | 
					    const Hex = require('crypto-js/enc-hex'); | 
				
			||||
 | 
					    const MD5 = require('crypto-js/md5'); | 
				
			||||
 | 
					    const XLSX = require('xlsx') | 
				
			||||
 | 
					    const path = require('path') | 
				
			||||
 | 
					    const fs = require("fs"); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    // 连接数据库
 | 
				
			||||
 | 
					    const pool = new Pool({ | 
				
			||||
 | 
					        user: 'FashionAdmin', | 
				
			||||
 | 
					        host: '10.8.30.156', | 
				
			||||
 | 
					        database: 'SmartEmergency', | 
				
			||||
 | 
					        password: '123456', | 
				
			||||
 | 
					        port: 5432, | 
				
			||||
 | 
					    }) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    let appid = '20200917000567738'; | 
				
			||||
 | 
					    let key = 'xXm4jsuuD38JIkkhEcK6'; | 
				
			||||
 | 
					    const getAnswer = async (query) => { | 
				
			||||
 | 
					        let start = (new Date()).getTime(); | 
				
			||||
 | 
					        let salt = start; | 
				
			||||
 | 
					        let str1 = appid + query + salt + key; | 
				
			||||
 | 
					        let sign = Hex.stringify(MD5(str1)); | 
				
			||||
 | 
					        console.log(`翻译:${query}`); | 
				
			||||
 | 
					        let answer = await request.get('http://api.fanyi.baidu.com/api/trans/vip/translate').timeout(1000 * 30).query({ | 
				
			||||
 | 
					            q: query, | 
				
			||||
 | 
					            appid: appid, | 
				
			||||
 | 
					            salt: salt, | 
				
			||||
 | 
					            from: 'zh', | 
				
			||||
 | 
					            to: 'en', | 
				
			||||
 | 
					            sign: sign | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        if (answer.body.error_code) { | 
				
			||||
 | 
					            console.warn(answer.body); | 
				
			||||
 | 
					            throw '百度不给力,快快debug' | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        let rslt = answer.body.trans_result; | 
				
			||||
 | 
					        // let upperCaseRslt = rslt[0].dst.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()).replace(/ /g, '');
 | 
				
			||||
 | 
					        // let upperCaseRslt = rslt[0].dst.toUpperCase().replace(/ /g, '_');
 | 
				
			||||
 | 
					        // let upperCaseRslt = rslt[0].dst.toLowerCase().replace(/ /g, '_');
 | 
				
			||||
 | 
					        let upperCaseRslt = rslt[0].dst.replace(/\//g, ' ').replace(/'/g, '').replace(/\s{2,}/g, ''); | 
				
			||||
 | 
					        console.log(`翻译结果:${upperCaseRslt}`); | 
				
			||||
 | 
					        while (((new Date()).getTime() - start) < (1000 / 8)) {//每s只能调用10次
 | 
				
			||||
 | 
					            continue; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return upperCaseRslt | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    const fun = async () => { | 
				
			||||
 | 
					        // note: we don't try/catch this because if connecting throws an exception
 | 
				
			||||
 | 
					        // we don't need to dispose of the client (it will be undefined)
 | 
				
			||||
 | 
					        const client = await pool.connect() | 
				
			||||
 | 
					        try { | 
				
			||||
 | 
					            await client.query('BEGIN') | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            const fileList = [ | 
				
			||||
 | 
					                // {
 | 
				
			||||
 | 
					                //     path: './data/道路/乡道第三方.xls',
 | 
				
			||||
 | 
					                //     n: '道路',
 | 
				
			||||
 | 
					                //     tableName: 'road'
 | 
				
			||||
 | 
					                // },
 | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            for (let f of fileList) { | 
				
			||||
 | 
					                console.log(`读取 ${f.path}`); | 
				
			||||
 | 
					                // 读取数据文件
 | 
				
			||||
 | 
					                let workbook = XLSX.readFile(path.join(__dirname, f.path)) | 
				
			||||
 | 
					                let firstSheetName = workbook.SheetNames[0]; | 
				
			||||
 | 
					                let worksheet = workbook.Sheets[firstSheetName]; | 
				
			||||
 | 
					                let res = XLSX.utils.sheet_to_json(worksheet); | 
				
			||||
 | 
					                console.log(res[0]); | 
				
			||||
 | 
					                let dataEx = res[0]; | 
				
			||||
 | 
					                transResult = '' | 
				
			||||
 | 
					                sql = ` 
 | 
				
			||||
 | 
					                    -- ${f.n} | 
				
			||||
 | 
					                    create table if not exists "${f.tableName}" | 
				
			||||
 | 
					                    ( | 
				
			||||
 | 
					                        id serial not null | 
				
			||||
 | 
					                    ); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    create unique index if not exists ${f.tableName}_id_uindex | 
				
			||||
 | 
					                        on ${f.tableName} (id); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    alter table ${f.tableName} | 
				
			||||
 | 
					                        add constraint ${f.tableName}_pk | 
				
			||||
 | 
					                            primary key (id); | 
				
			||||
 | 
					                ` | 
				
			||||
 | 
					                let upperEngTArr = [] | 
				
			||||
 | 
					                for (let t in dataEx) { | 
				
			||||
 | 
					                    const engT = await getAnswer(t); | 
				
			||||
 | 
					                    let upperEngT = engT | 
				
			||||
 | 
					                        .replace(/( |^)[a-z]/g, (L) => L.toUpperCase()) | 
				
			||||
 | 
					                        .replace(/ /g, '_') | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    transResult += `"${t}" : "${upperEngT | 
				
			||||
 | 
					                        .replace(/_/g, '') | 
				
			||||
 | 
					                        .replace(/( |^)[A-Z]/g, (L) => L.toLowerCase()) | 
				
			||||
 | 
					                        }", \n | 
				
			||||
 | 
					                    ` | 
				
			||||
 | 
					                    sql += ` | 
				
			||||
 | 
					                        alter table ${f.tableName} add ${upperEngT} varchar(1024); | 
				
			||||
 | 
					                        comment on column ${f.tableName}.${upperEngT} is '${t}'; | 
				
			||||
 | 
					                    ` | 
				
			||||
 | 
					                } | 
				
			||||
 | 
					                fs.writeFileSync(`${f.n}_字段对应.json`, `{${transResult}}`, 'utf-8'); | 
				
			||||
 | 
					                // fs.writeFileSync(`${f.n}_数据脚本对应.sql`, sql, 'utf-8');
 | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            // await client.query('ROLLBACK')
 | 
				
			||||
 | 
					            await client.query('COMMIT') | 
				
			||||
 | 
					            console.log('执行完毕~') | 
				
			||||
 | 
					        } catch (e) { | 
				
			||||
 | 
					            await client.query('ROLLBACK') | 
				
			||||
 | 
					            console.log('执行错误~') | 
				
			||||
 | 
					            throw e | 
				
			||||
 | 
					        } finally { | 
				
			||||
 | 
					            client.release(); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    fun() | 
				
			||||
 | 
					} catch (error) { | 
				
			||||
 | 
					    console.error(error) | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,18 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					  "name": "appkey-generator", | 
				
			||||
 | 
					  "version": "1.0.0", | 
				
			||||
 | 
					  "description": "tool", | 
				
			||||
 | 
					  "main": "index.js", | 
				
			||||
 | 
					  "scripts": { | 
				
			||||
 | 
					    "test": "mocha", | 
				
			||||
 | 
					    "start": "set NODE_ENV=development&&node index" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "author": "liu", | 
				
			||||
 | 
					  "license": "ISC", | 
				
			||||
 | 
					  "dependencies": { | 
				
			||||
 | 
					    "crypto-js": "^4.1.1", | 
				
			||||
 | 
					    "pg": "^7.18.2", | 
				
			||||
 | 
					    "superagent": "^8.0.0", | 
				
			||||
 | 
					    "xlsx": "^0.17.1" | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,50 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					    "路线名称": "routeName", | 
				
			||||
 | 
					    "路线代码": "routeCode", | 
				
			||||
 | 
					    "路段序号": "sectionNo", | 
				
			||||
 | 
					    "乡镇编码": "townshipCode", | 
				
			||||
 | 
					    "起点地名": "startingPlaceName", | 
				
			||||
 | 
					    "起点桩号": "startStation", | 
				
			||||
 | 
					    "起点分界点类别": "categoryOfStartingPointAndDividingPoint", | 
				
			||||
 | 
					    "止点地名": "stopPlaceName", | 
				
			||||
 | 
					    "止点分界点类别": "categoryOfDeadCenterAndDividingPoint", | 
				
			||||
 | 
					    "止点桩号": "stopStation", | 
				
			||||
 | 
					    "路段类型": "sectionType", | 
				
			||||
 | 
					    "路段性质": "natureOfRoadSection", | 
				
			||||
 | 
					    "建成时间": "completionTime", | 
				
			||||
 | 
					    "GBM及文明样板路": "gBMAndCivilizedModelRoad", | 
				
			||||
 | 
					    "地貌": "landforms", | 
				
			||||
 | 
					    "收费性质": "natureOfCharges", | 
				
			||||
 | 
					    "涵洞数量": "numberOfCulverts", | 
				
			||||
 | 
					    "技术等级": "technicalLevel", | 
				
			||||
 | 
					    "路面类型": "pavementType", | 
				
			||||
 | 
					    "路面宽度": "pavementWidth", | 
				
			||||
 | 
					    "路基宽度": "subgradeWidth", | 
				
			||||
 | 
					    "车道特征": "laneCharacteristics", | 
				
			||||
 | 
					    "是否晴雨通车": "whetherItIsOpenToTrafficInSunnyOrRainyDays", | 
				
			||||
 | 
					    "设计时速": "designSpeedPerHour", | 
				
			||||
 | 
					    "是否城管路段": "urbanManagementSectionOrNot", | 
				
			||||
 | 
					    "管养单位": "managementAndMaintenanceUnit", | 
				
			||||
 | 
					    "路政管理单位": "roadAdministrationUnit", | 
				
			||||
 | 
					    "列养情况": "alimentation", | 
				
			||||
 | 
					    "列养资金来源": "sourceOfListedMaintenanceFunds", | 
				
			||||
 | 
					    "养护时间": "curingTime", | 
				
			||||
 | 
					    "可绿化里程": "greeningMileage", | 
				
			||||
 | 
					    "已绿化里程": "greeningMileaged", | 
				
			||||
 | 
					    "重复道路路段类型": "typeOfRepeatedRoadSection", | 
				
			||||
 | 
					    "重复路段序号": "serialNumberOfRepeatedSection", | 
				
			||||
 | 
					    "重复路段路线编码": "repeatedSectionRouteCode", | 
				
			||||
 | 
					    "填报单位": "reportingUnit", | 
				
			||||
 | 
					    "变更原因": "reasonForChange", | 
				
			||||
 | 
					    "变更时间": "changeTime", | 
				
			||||
 | 
					    "是否按干线公路管理接养": "whetherMaintenanceManagedHighway", | 
				
			||||
 | 
					    "备注": "remarks", | 
				
			||||
 | 
					    "上年路线编码": "routeCodeOfLastYear", | 
				
			||||
 | 
					    "上年路线名称": "routeNameOfLastYear", | 
				
			||||
 | 
					    "上年起点桩号": "startingStationOfLastYear", | 
				
			||||
 | 
					    "上年止点桩号": "lastYearsEndingPointStakeNumber", | 
				
			||||
 | 
					    "图形里程": "graphicMileage", | 
				
			||||
 | 
					    "桩号里程": "chainageMileage", | 
				
			||||
 | 
					    "所在区县": "districtcounty", | 
				
			||||
 | 
					    "所在地市": "locationCity" | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,54 @@ | 
				
			|||||
 | 
					-- 道路 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE if not exists "road" ( id serial not null ); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE unique index if not exists road_id_uindex | 
				
			||||
 | 
					ON road (id); alter TABLE road add constraint road_pk primary key (id); alter TABLE road add Route_Name varchar(1024); comment | 
				
			||||
 | 
					ON column road.Route_Name is '路线名称'; alter TABLE road add Route_Code varchar(1024); comment | 
				
			||||
 | 
					ON column road.Route_Code is '路线代码'; alter TABLE road add Section_No varchar(1024); comment | 
				
			||||
 | 
					ON column road.Section_No is '路段序号'; alter TABLE road add Township_Code varchar(1024); comment | 
				
			||||
 | 
					ON column road.Township_Code is '乡镇编码'; alter TABLE road add Starting_Place_Name varchar(1024); comment | 
				
			||||
 | 
					ON column road.Starting_Place_Name is '起点地名'; alter TABLE road add Start_Station varchar(1024); comment | 
				
			||||
 | 
					ON column road.Start_Station is '起点桩号'; alter TABLE road add Category_Of_Starting_Point_And_Dividing_Point varchar(1024); comment | 
				
			||||
 | 
					ON column road.Category_Of_Starting_Point_And_Dividing_Point is '起点分界点类别'; alter TABLE road add Stop_Place_Name varchar(1024); comment | 
				
			||||
 | 
					ON column road.Stop_Place_Name is '止点地名'; alter TABLE road add Category_Of_Dead_Center_And_Dividing_Point varchar(1024); comment | 
				
			||||
 | 
					ON column road.Category_Of_Dead_Center_And_Dividing_Point is '止点分界点类别'; alter TABLE road add Stop_Station varchar(1024); comment | 
				
			||||
 | 
					ON column road.Stop_Station is '止点桩号'; alter TABLE road add Section_Type varchar(1024); comment | 
				
			||||
 | 
					ON column road.Section_Type is '路段类型'; alter TABLE road add Nature_Of_Road_Section varchar(1024); comment | 
				
			||||
 | 
					ON column road.Nature_Of_Road_Section is '路段性质'; alter TABLE road add Completion_Time varchar(1024); comment | 
				
			||||
 | 
					ON column road.Completion_Time is '建成时间'; alter TABLE road add GBM_And_Civilized_Model_Road varchar(1024); comment | 
				
			||||
 | 
					ON column road.GBM_And_Civilized_Model_Road is 'GBM及文明样板路'; alter TABLE road add Landforms varchar(1024); comment | 
				
			||||
 | 
					ON column road.Landforms is '地貌'; alter TABLE road add Nature_Of_Charges varchar(1024); comment | 
				
			||||
 | 
					ON column road.Nature_Of_Charges is '收费性质'; alter TABLE road add Number_Of_Culverts varchar(1024); comment | 
				
			||||
 | 
					ON column road.Number_Of_Culverts is '涵洞数量'; alter TABLE road add Technical_Level varchar(1024); comment | 
				
			||||
 | 
					ON column road.Technical_Level is '技术等级'; alter TABLE road add Pavement_Type varchar(1024); comment | 
				
			||||
 | 
					ON column road.Pavement_Type is '路面类型'; alter TABLE road add Pavement_Width varchar(1024); comment | 
				
			||||
 | 
					ON column road.Pavement_Width is '路面宽度'; alter TABLE road add Subgrade_Width varchar(1024); comment | 
				
			||||
 | 
					ON column road.Subgrade_Width is '路基宽度'; alter TABLE road add Lane_Characteristics varchar(1024); comment | 
				
			||||
 | 
					ON column road.Lane_Characteristics is '车道特征'; alter TABLE road add Whether_It_Is_Open_To_Traffic_In_Sunny_Or_Rainy_Days varchar(1024); comment | 
				
			||||
 | 
					ON column road.Whether_It_Is_Open_To_Traffic_In_Sunny_Or_Rainy_Days is '是否晴雨通车'; alter TABLE road add Design_Speed_Per_Hour varchar(1024); comment | 
				
			||||
 | 
					ON column road.Design_Speed_Per_Hour is '设计时速'; alter TABLE road add Urban_Management_Section_Or_Not varchar(1024); comment | 
				
			||||
 | 
					ON column road.Urban_Management_Section_Or_Not is '是否城管路段'; alter TABLE road add Management_And_Maintenance_Unit varchar(1024); comment | 
				
			||||
 | 
					ON column road.Management_And_Maintenance_Unit is '管养单位'; alter TABLE road add Road_Administration_Unit varchar(1024); comment | 
				
			||||
 | 
					ON column road.Road_Administration_Unit is '路政管理单位'; alter TABLE road add Alimentation varchar(1024); comment | 
				
			||||
 | 
					ON column road.Alimentation is '列养情况'; alter TABLE road add Source_Of_Listed_Maintenance_Funds varchar(1024); comment | 
				
			||||
 | 
					ON column road.Source_Of_Listed_Maintenance_Funds is '列养资金来源'; alter TABLE road add Curing_Time_ varchar(1024); comment | 
				
			||||
 | 
					ON column road.Curing_Time_ is '养护时间'; alter TABLE road add Greening_Mileage varchar(1024); comment | 
				
			||||
 | 
					ON column road.Greening_Mileage is '可绿化里程'; alter TABLE road add Greening_Mileaged varchar(1024); comment | 
				
			||||
 | 
					ON column road.Greening_Mileaged is '已绿化里程'; alter TABLE road add Type_Of_Repeated_Road_Section varchar(1024); comment | 
				
			||||
 | 
					ON column road.Type_Of_Repeated_Road_Section is '重复道路路段类型'; alter TABLE road add Serial_Number_Of_Repeated_Section varchar(1024); comment | 
				
			||||
 | 
					ON column road.Serial_Number_Of_Repeated_Section is '重复路段序号'; alter TABLE road add Repeated_Section_Route_Code varchar(1024); comment | 
				
			||||
 | 
					ON column road.Repeated_Section_Route_Code is '重复路段路线编码'; alter TABLE road add Reporting_Unit varchar(1024); comment | 
				
			||||
 | 
					ON column road.Reporting_Unit is '填报单位'; alter TABLE road add Reason_For_Change varchar(1024); comment | 
				
			||||
 | 
					ON column road.Reason_For_Change is '变更原因'; alter TABLE road add Change_Time varchar(1024); comment | 
				
			||||
 | 
					ON column road.Change_Time is '变更时间'; alter TABLE road add Whether_Maintenance_Managed_Highway varchar(1024); comment | 
				
			||||
 | 
					ON column road.Whether_Maintenance_Managed_Highway is '是否按干线公路管理接养'; alter TABLE road add Remarks varchar(1024); comment | 
				
			||||
 | 
					ON column road.Remarks is '备注'; alter TABLE road add Route_Code_Of_Last_Year varchar(1024); comment | 
				
			||||
 | 
					ON column road.Route_Code_Of_Last_Year is '上年路线编码'; alter TABLE road add Route_Name_Of_Last_Year varchar(1024); comment | 
				
			||||
 | 
					ON column road.Route_Name_Of_Last_Year is '上年路线名称'; alter TABLE road add Starting_Station_Of_Last_Year varchar(1024); comment | 
				
			||||
 | 
					ON column road.Starting_Station_Of_Last_Year is '上年起点桩号'; alter TABLE road add Last_Years_Ending_Point_Stake_Number varchar(1024); comment | 
				
			||||
 | 
					ON column road.Last_Years_Ending_Point_Stake_Number is '上年止点桩号'; alter TABLE road add Graphic_Mileage varchar(1024); comment | 
				
			||||
 | 
					ON column road.Graphic_Mileage is '图形里程'; alter TABLE road add Chainage_Mileage varchar(1024); comment | 
				
			||||
 | 
					ON column road.Chainage_Mileage is '桩号里程'; alter TABLE road add Districtcounty varchar(1024); comment | 
				
			||||
 | 
					ON column road.Districtcounty is '所在区县'; alter TABLE road add Location_City varchar(1024); comment | 
				
			||||
 | 
					ON column road.Location_City is '所在地市'; | 
				
			||||
@ -1,69 +0,0 @@ | 
				
			|||||
'use strict'; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
import { ApiTable } from '$utils' | 
					 | 
				
			||||
import { Request } from '@peace/utils' | 
					 | 
				
			||||
 | 
					 | 
				
			||||
export const INIT_AUTH = 'INIT_AUTH'; | 
					 | 
				
			||||
export function initAuth() { | 
					 | 
				
			||||
    const user = JSON.parse(sessionStorage.getItem('user')) || {}; | 
					 | 
				
			||||
    return { | 
					 | 
				
			||||
        type: INIT_AUTH, | 
					 | 
				
			||||
        payload: { | 
					 | 
				
			||||
            user: user | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    }; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
export const REQUEST_LOGIN = 'REQUEST_LOGIN'; | 
					 | 
				
			||||
export const LOGIN_SUCCESS = 'LOGIN_SUCCESS'; | 
					 | 
				
			||||
export const LOGIN_ERROR = 'LOGIN_ERROR'; | 
					 | 
				
			||||
export function login(username, password) { | 
					 | 
				
			||||
    return dispatch => { | 
					 | 
				
			||||
        dispatch({ type: REQUEST_LOGIN }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        if (!username || !password) { | 
					 | 
				
			||||
            dispatch({ | 
					 | 
				
			||||
                type: LOGIN_ERROR, | 
					 | 
				
			||||
                payload: { error: '请输入账号名和密码' } | 
					 | 
				
			||||
            }); | 
					 | 
				
			||||
            return Promise.resolve(); | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        const url = ApiTable.login; | 
					 | 
				
			||||
        return Request.post(url, { username, password, p: '456' }) | 
					 | 
				
			||||
            .then(user => { | 
					 | 
				
			||||
                sessionStorage.setItem('user', JSON.stringify(user)); | 
					 | 
				
			||||
                dispatch({ | 
					 | 
				
			||||
                    type: LOGIN_SUCCESS, | 
					 | 
				
			||||
                    payload: { user: user }, | 
					 | 
				
			||||
                }); | 
					 | 
				
			||||
            }, error => { | 
					 | 
				
			||||
                let { body } = error.response; | 
					 | 
				
			||||
                dispatch({ | 
					 | 
				
			||||
                    type: LOGIN_ERROR, | 
					 | 
				
			||||
                    payload: { | 
					 | 
				
			||||
                        error: body && body.message ? body.message : '登录失败' | 
					 | 
				
			||||
                    } | 
					 | 
				
			||||
                }) | 
					 | 
				
			||||
            }); | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
export const LOGOUT = 'LOGOUT'; | 
					 | 
				
			||||
export function logout(user) { | 
					 | 
				
			||||
    const token = user.token; | 
					 | 
				
			||||
    const url = ApiTable.logout; | 
					 | 
				
			||||
    sessionStorage.removeItem('user'); | 
					 | 
				
			||||
    Request.put(url, { | 
					 | 
				
			||||
        token: token | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
    return { | 
					 | 
				
			||||
        type: LOGOUT | 
					 | 
				
			||||
    }; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
export default { | 
					 | 
				
			||||
    initAuth, | 
					 | 
				
			||||
    login, | 
					 | 
				
			||||
    logout | 
					 | 
				
			||||
} | 
					 | 
				
			||||
Some files were not shown because too many files changed in this diff
					Loading…
					
					
				
		Reference in new issue