You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							163 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							163 lines
						
					
					
						
							4.7 KiB
						
					
					
				
								'use strict';
							 | 
						|
								
							 | 
						|
								async function getPatrolPlan (ctx, next) {
							 | 
						|
								    try {
							 | 
						|
								        const models = ctx.fs.dc.models;
							 | 
						|
								        const { limit, page, userId } = ctx.query;
							 | 
						|
								        let userWhere = {};
							 | 
						|
								        let options = {
							 | 
						|
								            order: [['id', 'desc']],
							 | 
						|
								            include: [{
							 | 
						|
								                required: userId ? true : false,
							 | 
						|
								                model: models.User,
							 | 
						|
								                attributes: ['id', 'name'],
							 | 
						|
								                where: userWhere,
							 | 
						|
								                include: [{
							 | 
						|
								                    model: models.Department,
							 | 
						|
								                    attributes: ['id', 'name'],
							 | 
						|
								                }]
							 | 
						|
								            }, {
							 | 
						|
								                model: models.Project,
							 | 
						|
								                attributes: ['id', 'name'],
							 | 
						|
								            }],
							 | 
						|
								            distinct: true,
							 | 
						|
								        };
							 | 
						|
								        if (limit) {
							 | 
						|
								            options.limit = Number(limit);
							 | 
						|
								        }
							 | 
						|
								        if (page && limit) {
							 | 
						|
								            options.offset = Number(page) * Number(limit);
							 | 
						|
								        }
							 | 
						|
								        if (userId) {
							 | 
						|
								            userWhere.id = userId;
							 | 
						|
								        }
							 | 
						|
								        let res = await models.PatrolPlan.findAndCountAll(options);
							 | 
						|
								        ctx.status = 200;
							 | 
						|
								        ctx.body = res;
							 | 
						|
								    } catch (error) {
							 | 
						|
								        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
							 | 
						|
								        ctx.status = 400;
							 | 
						|
								        ctx.body = {
							 | 
						|
								            "message": "获取巡检计划失败"
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								async function createPatrolPlan(ctx, next) {
							 | 
						|
								    const transaction = await ctx.fs.dc.orm.transaction();
							 | 
						|
								    try {
							 | 
						|
								        const models = ctx.fs.dc.models;
							 | 
						|
								        const data = ctx.request.body;
							 | 
						|
								        const { name, way, structureId, startTime, endTime, frequency, points, userIds, templateId } = data;
							 | 
						|
								
							 | 
						|
								        let plan = { name, way, structureId, startTime, endTime, frequency, points, templateId };
							 | 
						|
								
							 | 
						|
								        const patrolPlanRes = await models.PatrolPlan.create(plan, { transaction });
							 | 
						|
								        await models.PatrolPlanUser.bulkCreate(
							 | 
						|
								            userIds.map(uid => {
							 | 
						|
								                return {
							 | 
						|
								                    patrolPlanId: patrolPlanRes.id,
							 | 
						|
								                    userId: uid
							 | 
						|
								                }
							 | 
						|
								            }), { transaction }
							 | 
						|
								        )
							 | 
						|
								        
							 | 
						|
								        await transaction.commit();
							 | 
						|
								        ctx.status = 204;
							 | 
						|
								    } catch (error) {
							 | 
						|
								        await transaction.rollback();
							 | 
						|
								        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
							 | 
						|
								        ctx.status = 400;
							 | 
						|
								        ctx.body = {
							 | 
						|
								            "message": '新增巡检计划失败'
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								async function updatePatrolPlan (ctx, next) {
							 | 
						|
								    const transaction = await ctx.fs.dc.orm.transaction();
							 | 
						|
								    try {
							 | 
						|
								        let errMsg = '修改巡检计划失败';
							 | 
						|
								        const models = ctx.fs.dc.models;
							 | 
						|
								        const data = ctx.request.body;
							 | 
						|
								        const { name, way, structureId, startTime, endTime, frequency, points, userIds, templateId } = data;
							 | 
						|
								
							 | 
						|
								        let plan = { name, way, structureId, startTime, endTime, frequency, points, templateId };
							 | 
						|
								
							 | 
						|
								        if (data && data.id) {
							 | 
						|
								            await models.PatrolPlan.update(plan, {
							 | 
						|
								                where: { id: data.id },
							 | 
						|
								                transaction
							 | 
						|
								            })
							 | 
						|
								            await models.PatrolPlanUser.destroy({
							 | 
						|
								                where: { patrolPlanId: data.id },
							 | 
						|
								                transaction
							 | 
						|
								            })
							 | 
						|
								            await models.PatrolPlanUser.bulkCreate(
							 | 
						|
								                userIds.map(uid => {
							 | 
						|
								                    return {
							 | 
						|
								                        patrolPlanId: data.id,
							 | 
						|
								                        userId: uid
							 | 
						|
								                    }
							 | 
						|
								                }), { transaction }
							 | 
						|
								            )
							 | 
						|
								        } else {
							 | 
						|
								            errMsg = '请传入巡检计划id';
							 | 
						|
								            throw errMsg;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        await transaction.commit();
							 | 
						|
								        ctx.status = 204;
							 | 
						|
								    } catch (error) {
							 | 
						|
								        await transaction.rollback();
							 | 
						|
								        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
							 | 
						|
								        ctx.status = 400;
							 | 
						|
								        ctx.body = {
							 | 
						|
								            "message": errMsg
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								async function delPatrolPlan (ctx, next) {
							 | 
						|
								    const transaction = await ctx.fs.dc.orm.transaction();
							 | 
						|
								    try {
							 | 
						|
								        let errMsg = '删除巡检计划失败';
							 | 
						|
								
							 | 
						|
								        const models = ctx.fs.dc.models;
							 | 
						|
								        const { id } = ctx.params;
							 | 
						|
								
							 | 
						|
								        const record = await models.PatrolRecord.findOne({
							 | 
						|
								            where: { patrolPlanId: id }
							 | 
						|
								        });
							 | 
						|
								
							 | 
						|
								        if (record) {
							 | 
						|
								            errMsg = '不能删除有巡检记录的计划';
							 | 
						|
								            throw errMsg;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        await models.PatrolPlanUser.destroy({
							 | 
						|
								            where: { patrolPlanId: id },
							 | 
						|
								            transaction
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								        await models.PatrolPlan.destroy({
							 | 
						|
								            where: { id },
							 | 
						|
								            transaction
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								        await transaction.commit();
							 | 
						|
								        ctx.status = 204;
							 | 
						|
								    } catch (error) {
							 | 
						|
								        await transaction.rollback();
							 | 
						|
								        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
							 | 
						|
								        ctx.status = 400;
							 | 
						|
								        ctx.body = { message: error }
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								module.exports = {
							 | 
						|
								    getPatrolPlan,
							 | 
						|
								    createPatrolPlan,
							 | 
						|
								    updatePatrolPlan,
							 | 
						|
								    delPatrolPlan,
							 | 
						|
								}
							 |