package com.philisense.www.controller.web;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.philisense.www.common.config.CommonConst;
import com.philisense.www.core.text.Convert;
import com.philisense.www.service.ProMenuAuthService;
import com.philisense.www.annotation.log.OperateLog;
import com.philisense.www.service.ProMenuService;
import com.philisense.www.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.philisense.www.controller.BaseUtilController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping(CommonConst.WEB_REST_SERVICE_PREFICX + "promenuauth")
@Api(tags = "ProMenuAuthControllerForWeb|一个用来操作-{菜单角色表}-业务模块的控制器")
public class ProMenuAuthControllerForWeb extends BaseUtilController {

    @Autowired
    private ProMenuAuthService proMenuAuthService;

    @Autowired
    private ProMenuService proMenuService;


    @GetMapping("/delete")
    @ApiOperation(value = "根据-{菜单角色表}-主键删除记录", notes = "成功返回:{\"success\":true,\"message\",\"数据删除成功\"},失败返回:{\"success\":false,\"message\",\"数据删除失败\"}")
    @ApiImplicitParam(paramType = "query", name = "recordid", value = "记录主键", required = true, dataTypeClass = String.class)
    @OperateLog(name = "根据-{菜单角色表}-主键删除记录", value = "delete", type = "PC")
    public Map<String, Object> deleteByPrimaryKeyForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestParam String recordid) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            int flag = proMenuAuthService.deleteByPrimaryKey(recordid);
            if (1 <= flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, DELETE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, DELETE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, DELETE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @GetMapping("/get")
    @ApiOperation(value = "根据-{菜单角色表}-主键查询记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"datarecord\":\"{}\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParam(paramType = "query", name = "recordid", value = "记录主键", required = true, dataTypeClass = String.class)
    @OperateLog(name = "根据-{菜单角色表}-主键查询记录", value = "query", type = "PC")
    public Map<String, Object> selectByPrimaryKeyForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestParam String recordid) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATARECORD, proMenuAuthService.selectByPrimaryKey(recordid));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/insert")
    @ApiOperation(value = "根据-{菜单角色表}-对象插入记录", notes = "成功返回:{\"success\":true,\"message\",\"数据插入成功\"},失败返回:{\"success\":false,\"message\",\"数据插入失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象插入记录", value = "insert", type = "PC")
    public Map<String, Object> insertForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            map.put("menu_id", UUID.randomUUID().toString().replaceAll("-", ""));
            map.put("auth_id", UUID.randomUUID().toString().replaceAll("-", ""));
            proMenuAuthService.insert(map);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, INSERT_SUCCESS_MSG);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, INSERT_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/update")
    @ApiOperation(value = "根据-{菜单角色表}-对象更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象更新记录", value = "update", type = "PC")
    public Map<String, Object> updateForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            int flag = proMenuAuthService.update(map);
            if (1 <= flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, UPDATE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/deleteByMap")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map删除记录", notes = "成功返回:{\"success\":true,\"message\",\"数据删除成功\"},失败返回:{\"success\":false,\"message\",\"数据删除失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map删除记录", value = "delete", type = "PC")
    public Map<String, Object> deleteByMapForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            int flag = proMenuAuthService.deleteByMap(map);
            if (1 <= flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, DELETE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, DELETE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, DELETE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/updateByMap")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map更新记录", value = "update", type = "PC")
    public Map<String, Object> updateByMapForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            int flag = proMenuAuthService.updateByMap(map);
            if (1 <= flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, UPDATE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getOne")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map查询记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"datarecord\":\"{}\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map查询记录", value = "query", type = "PC")
    public Map<String, Object> getOneForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATARECORD, proMenuAuthService.getOne(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getAll")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map查询所有记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map查询所有记录", value = "query", type = "PC")
    public Map<String, Object> getAllForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST, proMenuAuthService.getAll(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getAllVue")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map查询所有记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map查询所有记录", value = "query", type = "PC")
    public Map<String, Object> getAllForProMenuAuthForWebVue(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST_VUE, proMenuAuthService.getAll(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/queryPage")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map分页记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map分页记录", value = "query", type = "PC")
    public Map<String, Object> queryPageForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            int currentPage = map.get(DATACURRENT) != null ? Integer.parseInt(map.get(DATACURRENT) + "") - 1 : 0;
            int pageSize = map.get(PAGESIZE) != null ? Integer.parseInt(map.get(PAGESIZE) + "") : 10;
            int pageStart = currentPage * pageSize;


            map.put(PAGESIZE, pageSize);
            map.put(PAGESTART, pageStart);

            int total = proMenuAuthService.count(map);
            List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
            if (total > 0) {
                datalist = proMenuAuthService.queryPage(map);
            }
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST, datalist);
            Map<String, Object> pagemode = new HashMap<String, Object>();
            pagemode.put(DATATOTAL, total);
            pagemode.put(PAGESIZE, map.get(PAGESIZE) != null ? map.get(PAGESIZE) : 10);
            pagemode.put(DATACURRENT, map.get(DATACURRENT) != null ? map.get(DATACURRENT) : 0);
            result.put(PAGINATION, pagemode);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }


    @PostMapping("/queryPageVue")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map分页记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map分页记录", value = "query", type = "PC")
    public Map<String, Object> queryPageVueForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            int currentPage = map.get(DATACURRENT_VUE) != null ? Integer.parseInt(map.get(DATACURRENT_VUE) + "") - 1 : 0;
            int pageSize = map.get(PAGESIZE_VUE) != null ? Integer.parseInt(map.get(PAGESIZE_VUE) + "") : 10;
            int pageStart = currentPage * pageSize;


            map.put(PAGESIZE_VUE, pageSize);
            map.put(PAGESTART, pageStart);

            int total = proMenuAuthService.count(map);
            List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
            if (total > 0) {
                datalist = proMenuAuthService.queryPage(map);
            }
            Map<String, Object> tempresult = new HashMap<String, Object>();
            tempresult.put(DATASUCCESS, SUCCESSFLAG);
            tempresult.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            tempresult.put(DATALIST_VUE, datalist);
            tempresult.put(DATATOTAL_VUE, total);
            tempresult.put(PAGESIZE_VUE, map.get(PAGESIZE_VUE) != null ? map.get(PAGESIZE_VUE) : 10);
            tempresult.put(DATACURRENT_VUE, map.get(DATACURRENT_VUE) != null ? map.get(DATACURRENT_VUE) : 0);
            result.put(DATARESULT, tempresult);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }


    @PostMapping("/queryPageOracle")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map分页记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map分页记录", value = "query", type = "PC")
    public Map<String, Object> queryPageOracleForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            int currentPage = map.get(DATACURRENT) != null ? Integer.parseInt(map.get(DATACURRENT) + "") : 1;
            int pageSize = map.get(PAGESIZE) != null ? Integer.parseInt(map.get(PAGESIZE) + "") : 10;
            int pageStart = currentPage * pageSize;


            map.put(PAGESTART, (currentPage - 1) * pageSize);
            map.put(PAGEEND, currentPage * pageSize);

            int total = proMenuAuthService.count(map);
            List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
            if (total > 0) {
                datalist = proMenuAuthService.queryPage(map);
            }
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST, datalist);
            Map<String, Object> pagemode = new HashMap<String, Object>();
            pagemode.put(DATATOTAL, total);
            pagemode.put(PAGESIZE, map.get(PAGESIZE) != null ? map.get(PAGESIZE) : 10);
            pagemode.put(DATACURRENT, map.get(DATACURRENT) != null ? map.get(DATACURRENT) : 0);
            result.put(PAGINATION, pagemode);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/count")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map统计查询总数记录", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map统计查询总数记录", value = "query", type = "PC")
    public Map<String, Object> countForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATATOTAL_VUE, proMenuAuthService.count(map));
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/insertBatch")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map批量插入记录", notes = "成功返回:{\"success\":true,\"message\",\"数据插入成功\"},失败返回:{\"success\":false,\"message\",\"数据插入失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map批量插入记录", value = "insert", type = "PC")
    public Map<String, Object> insertBatchForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            Map<String, Object> vars = new HashMap<>();
            List<Map<String, Object>> list = (List) map.get("authids");
            vars.put("list", list);
            vars.put("systemid", map.get("systemid"));
            if (null != list && list.size() > 0) {
                proMenuAuthService.deleteBatchByAuthID(vars);//先把角色与菜单资源删除
            }
            List<Map<String, Object>> list1 = (List) map.get("authids_menuids");
            if (null != list1 && list1.size() > 0) {
                proMenuAuthService.insertBatch(list1);//再重新插入角色和菜单资源
            }
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, INSERT_SUCCESS_MSG);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, INSERT_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/deleteBatch")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map批量删除记录", notes = "成功返回:{\"success\":true,\"message\",\"数据删除成功\"},失败返回:{\"success\":false,\"message\",\"数据删除失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map批量删除记录", value = "delete", type = "PC")
    public Map<String, Object> deleteBatchForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Map<String, Object>> list) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            proMenuAuthService.deleteBatch(list);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, DELETE_SUCCESS_MSG);

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, DELETE_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/updateBatch")
    @ApiOperation(value = "根据-{菜单角色表}-对象Map批量更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "menu_id", value = "菜单id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "auth_id", value = "角色id", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据-{菜单角色表}-对象Map批量更新记录", value = "update", type = "PC")
    public Map<String, Object> updateBatchForProMenuAuthForWeb(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Map<String, Object>> list) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            proMenuAuthService.updateBatch(list);
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }


    @PostMapping("/getAllMenuTreeByAuthID")
    @ApiOperation(value = "根据角色ID查询所有被授权的菜单树节点", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "parentid", value = "父菜单ID", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据角色ID查询所有被授权的菜单树节点", value = "query", type = "PC")
    public Map<String, Object> getAllMenuTreeByAuthID(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            Map<String, Object> mapauthids = new HashMap<String, Object>();
            StringBuilder sb = new StringBuilder();
            List<String> list = (List<String>) map.get("auth_id");
            if (null != list && list.size() > 0) {
                for (String s : list) {
                    sb.append("'").append(s).append("'").append(",");
                }
                mapauthids.put("auth_id", sb.append("''").toString());
            }
            mapauthids.put("systemid", map.get("systemid"));
            mapauthids.put("menuCheckStrictly", Convert.toBool(map.get("menuCheckStrictly"), true));

            List<String> memuids = new ArrayList<String>();
            List<Map<String, Object>> treedata = proMenuAuthService.getAllMenuTreeByAuthID(mapauthids);
            for (Map<String, Object> tree : treedata) {
                memuids.add(tree.get("id") + "");
            }

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST, memuids);


        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getAllMenuTreeByAuthIDVue")
    @ApiOperation(value = "根据角色ID查询所有被授权的菜单树节点", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "parentid", value = "父菜单ID", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据角色ID查询所有被授权的菜单树节点", value = "query", type = "PC")
    public Map<String, Object> getAllMenuTreeByAuthIDVue(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            Map<String, Object> mapauthids = new HashMap<String, Object>();
            StringBuilder sb = new StringBuilder();
            List<String> list = (List<String>) map.get("auth_id");
            if (null != list && list.size() > 0) {
                for (String s : list) {
                    sb.append("'").append(s).append("'").append(",");
                }
                mapauthids.put("auth_id", sb.append("''").toString());
            }
            mapauthids.put("systemid", map.get("systemid"));

            List<String> memuids = new ArrayList<String>();
            List<Map<String, Object>> treedata = proMenuAuthService.getAllMenuTreeByAuthID(mapauthids);
            for (Map<String, Object> tree : treedata) {
                memuids.add(tree.get("id") + "");
            }

            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST_VUE, memuids);


        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }


    @PostMapping("/getPageAuthByMenuTreeId")
    @ApiOperation(value = "根据树节点ID查询拥有的角色列表", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "recordid", value = "菜单ID", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据树节点ID查询拥有的角色列表", value = "query", type = "PC")
    public Map<String, Object> getPageAuthByMenuTreeId(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            int currentPage = map.get(DATACURRENT) != null ? Integer.parseInt(map.get(DATACURRENT) + "") - 1 : 0;
            int pageSize = map.get(PAGESIZE) != null ? Integer.parseInt(map.get(PAGESIZE) + "") : 10;
            int pageStart = currentPage * pageSize;


            map.put(PAGESIZE, pageSize);
            map.put(PAGESTART, pageStart);

            int total = proMenuAuthService.getCountAuthByMenuTreeId(map);
            List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
            if (total > 0) {
                datalist = proMenuAuthService.getPageAuthByMenuTreeId(map);
            }
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST, datalist);
            Map<String, Object> pagemode = new HashMap<String, Object>();
            pagemode.put(DATATOTAL, total);
            pagemode.put(PAGESIZE, map.get(PAGESIZE) != null ? map.get(PAGESIZE) : 10);
            pagemode.put(DATACURRENT, map.get(DATACURRENT) != null ? map.get(DATACURRENT) : 0);
            result.put(PAGINATION, pagemode);
        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/getPageAuthByMenuTreeIdVue")
    @ApiOperation(value = "根据树节点ID查询拥有的角色列表", notes = "成功返回:{\"success\":true,\"message\",\"数据查询成功\",\"data\":\"[]\"},失败返回:{\"success\":false,\"message\",\"数据查询失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "recordid", value = "菜单ID", required = true, dataTypeClass = String.class)
    })
    @OperateLog(name = "根据树节点ID查询拥有的角色列表", value = "query", type = "PC")
    public Map<String, Object> getPageAuthByMenuTreeIdVue(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {


            int currentPage = map.get(DATACURRENT_VUE) != null ? Integer.parseInt(map.get(DATACURRENT_VUE) + "") - 1 : 0;
            int pageSize = map.get(PAGESIZE_VUE) != null ? Integer.parseInt(map.get(PAGESIZE_VUE) + "") : 10;
            int pageStart = currentPage * pageSize;

            map.put(PAGESIZE_VUE, pageSize);
            map.put(PAGESTART, pageStart);

            int total = proMenuAuthService.getCountAuthByMenuTreeId(map);
            List<Map<String, Object>> datalist = new ArrayList<Map<String, Object>>();
            if (total > 0) {
                datalist = proMenuAuthService.getPageAuthByMenuTreeId(map);
            }
            result.put(DATASUCCESS, SUCCESSFLAG);
            result.put(DATAMESSAGE, QUERY_SUCCESS_MSG);
            result.put(DATALIST_VUE, datalist);
            Map<String, Object> pagemode = new HashMap<String, Object>();
            pagemode.put(DATATOTAL_VUE, total);
            pagemode.put(PAGESIZE_VUE, map.get(PAGESIZE_VUE) != null ? map.get(PAGESIZE_VUE) : 10);
            pagemode.put(DATACURRENT_VUE, map.get(DATACURRENT_VUE) != null ? map.get(DATACURRENT_VUE) : 0);
            result.put(PAGINATION, pagemode);

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, QUERY_FAIL_MSG + e.getMessage());
        }
        return result;
    }

    @PostMapping("/updateDropNode")
    @ApiOperation(value = "根据-{来源节点与目标节点}-对象更新记录", notes = "成功返回:{\"success\":true,\"message\",\"数据更新成功\"},失败返回:{\"success\":false,\"message\",\"数据更新失败\"}")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", name = "dragId", value = "拖拽的id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "newParentid", value = "新的父id", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "newLevelcode", value = "新的层次码", required = true, dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "body", name = "sortArray", value = "排序", required = true, dataTypeClass = List.class),
    })
    @OperateLog(name = "根据-{来源节点与目标节点}-对象更新记录", value = "update", type = "PC")
    public Map<String, Object> updateChangeTargetNodeWithSourceNodeForProMenu(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> map) {
        Map<String, Object> result = new HashMap<String, Object>();
        try {

            String dragId = Convert.toStr(map.get("dragId"), "");
            String newParentid = Convert.toStr(map.get("newParentid"), "");
            String newLevelcode = Convert.toStr(map.get("newLevelcode"), "");
            List<Map<String, String>> sortList = new ArrayList<>();
            if (StringUtils.isNotEmpty(Convert.toStr(map.get("sortArray")))) {
                sortList = JSONArray.parseObject(JSONObject.toJSONString(map.get("sortArray")), List.class);
            }

            Map<String, Object> paramsmap = proMenuService.selectByPrimaryKey(dragId);

            int flag = 0;
            if (StringUtils.isNotEmpty(paramsmap)) {
                Map<String, Object> temp = new HashMap<>();
                temp.put("old_levelcode", paramsmap.get("levelcode"));
                temp.put("old_parentid", paramsmap.get("parentid"));
                temp.put("parentid", newParentid);
                temp.put("levelcode", newLevelcode);
                temp.put("sort_array", sortList);
                paramsmap.putAll(temp);
                flag = proMenuAuthService.updateDropNode(paramsmap);
            }

            if (1 <= flag) {
                result.put(DATASUCCESS, SUCCESSFLAG);
                result.put(DATAMESSAGE, UPDATE_SUCCESS_MSG);
                result.put(DATARECORD, paramsmap);
            } else {
                result.put(DATASUCCESS, ERRORFLAG);
                result.put(DATAMESSAGE, UPDATE_FAIL_MSG);
            }

        } catch (Exception e) {
            result.put(DATASUCCESS, ERRORFLAG);
            result.put(DATAMESSAGE, UPDATE_FAIL_MSG + e.getMessage());
        }
        return result;
    }


}
