package com.zcloud.controller.integratedmanagement.access;


import com.zcloud.controller.base.BaseController;
import com.zcloud.entity.Page;
import com.zcloud.entity.PageData;
import com.zcloud.logs.LogAnno;
import com.zcloud.service.integratedmanagement.access.GateMachineAreaGateService;
import com.zcloud.util.Jurisdiction;
import com.zcloud.util.ReturnMap;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>GateMachineAreaGateController 类是系统中的一个控制器类，它继承自 BaseController。</p>
 * <p>主要职责：处理与门禁机器区域相关的业务逻辑操作，提供API接口给前端或其他服务调用。</p>
 *
 * @author [王轩]
 * @since [24-05-28]
 */
@Controller
@RequestMapping("/gateMachineAreaGate")
public class GateMachineAreaGateController extends BaseController {


    @Resource
    private GateMachineAreaGateService gateMachineAreaGateService;

    /**
     * 处理门禁管理闸机的新增操作。
     *
     * @return 返回一个表示操作结果的对象，通常是一个包含成功标志和消息的映射。
     * @throws Exception 如果处理过程中发生异常，则抛出。
     * @RequestMapping 注解指定了该方法处理的HTTP请求路径为/add。
     * @ResponseBody 注解表明该方法的返回值将直接作为HTTP响应的主体返回。
     * @LogAnno 注解用于记录操作日志，注解中的字段指定了日志的相关信息，如操作的菜单类型、服务器、操作说明等。
     */
    @RequestMapping(value = "/initGateMachine")
    @ResponseBody
    @LogAnno(menuType = "综合管理", menuServer = "门禁管理", instructionsOperate = "门禁管理", instructionsType = "初始化闸机")
    public Object initGateMachine() {
        gateMachineAreaGateService.initGateMachine(this.getPageData());
        return ReturnMap.ok();
    }


    /**
     * 处理门禁管理闸机的新增操作。
     *
     * @return 返回一个表示操作结果的对象，通常是一个包含成功标志和消息的映射。
     * @throws Exception 如果处理过程中发生异常，则抛出。
     * @RequestMapping 注解指定了该方法处理的HTTP请求路径为/add。
     * @ResponseBody 注解表明该方法的返回值将直接作为HTTP响应的主体返回。
     * @LogAnno 注解用于记录操作日志，注解中的字段指定了日志的相关信息，如操作的菜单类型、服务器、操作说明等。
     */
    @RequestMapping(value = "/add")
    @ResponseBody
    @LogAnno(menuType = "综合管理", menuServer = "门禁管理", instructionsOperate = "门禁管理", instructionsType = "新增")
    public Object add() throws Exception {
        gateMachineAreaGateService.save(this.getPageData());
        return ReturnMap.ok();
    }

    /**
     * 删除门禁管理闸机数据的接口。
     *
     * <p>该接口对应请求路径为"/delete"，通过@RequestMapping注解进行映射。
     * 通过@ResponseBody注解将返回结果直接作为HTTP响应体返回。
     * 请求方法类型未显式指定，理论上支持GET、POST等方法。
     *
     * <p>该操作在系统中被记录为综合管理菜单下的门禁管理操作，具体操作类型为删除。
     * 通过@LogAnno注解进行日志记录相关的设置。
     *
     * @return 返回一个表示操作结果的Map对象，通常包含操作状态和消息。
     * @throws Exception 抛出异常的情况未具体说明，泛化处理。
     */
    @RequestMapping(value = "/delete")
    @ResponseBody
    @LogAnno(menuType = "综合管理", menuServer = "门禁管理", instructionsOperate = "门禁管理", instructionsType = "删除")
    public Object delete() throws Exception {
        // 返回一个表示操作成功的Map对象
        PageData pageData = this.getPageData();
        pageData.put("ArrayDATA_IDS", pageData.getString("DATA_IDS").split(","));
        gateMachineAreaGateService.removeByIds(pageData);
        return ReturnMap.ok();
    }


    /**
     * 修改门禁管理闸机信息的方法
     *
     * @return Object 返回一个表示操作结果的对象，此处为操作成功的标志。
     * @throws Exception 如果发生异常，则抛出Exception。
     */
    @RequestMapping(value = "/edit")
    @ResponseBody
    @LogAnno(menuType = "综合管理", menuServer = "门禁管理", instructionsOperate = "门禁管理", instructionsType = "修改")
    public Object edit() throws Exception {
        // 返回操作成功的标志
        gateMachineAreaGateService.edit(this.getPageData());
        return ReturnMap.ok();

    }


    /**
     * 获取门禁管理的闸机列表信息
     * <p>
     * 该接口用于查询门禁管理的相关列表数据，实现了分页查询功能。
     *
     * @param page 分页参数，包含当前页码和每页显示数量。
     * @return 返回一个包含列表信息的Map对象，具体结构取决于实现逻辑。
     */
    @RequestMapping(value = "/list")
    @ResponseBody
    @LogAnno(menuType = "综合管理", menuServer = "门禁管理", instructionsOperate = "门禁管理", instructionsType = "列表")
    public Object list(Page page) throws Exception {
        // 返回一个表示操作成功的Map对象，具体结构需根据实际情况定义
        PageData pageData = this.getPageData();
        pageData.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
        page.setPd(pageData);
        List<PageData> resData = gateMachineAreaGateService.list(page);
        return ReturnMap.ok().put("page", page).put("varList", resData);
    }


    /**
     * 跳转至门禁管理闸机的编辑页面并获取相关数据。
     * 该方法不接受任何参数。
     *
     * @return 返回一个包含操作结果的Map对象。这里始终返回操作成功的状态。
     */
    @RequestMapping(value = "/goEdit")
    @ResponseBody
    @LogAnno(menuType = "综合管理", menuServer = "门禁管理", instructionsOperate = "门禁管理", instructionsType = "去修改页面获取数据")
    public Object goEdit() {
        // 返回操作成功的默认结果
        PageData data = gateMachineAreaGateService.findById(this.getPageData());
        return ReturnMap.ok().put("pd", data);
    }

}
