lyh
2025-01-13 76e6eaff3a5be5f73ddb90b9169381dc46503ccd
DNC平移航宇救生
已添加8个文件
已修改1个文件
628 ■■■■■ 文件已修改
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ButtonController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DepartmentController.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ObjectController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ObjectBase.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/DncObjectMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/ObjectBaseRequest.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IButtonService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IObjectService.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ObjectServiceImpl.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ButtonController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,131 @@
package org.jeecg.modules.dnc.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.modules.dnc.entity.Button;
import org.jeecg.modules.dnc.request.ButtonRequest;
import org.jeecg.modules.dnc.response.CommonCode;
import org.jeecg.modules.dnc.response.QueryListResponseResult;
import org.jeecg.modules.dnc.response.QueryPageResponseResult;
import org.jeecg.modules.dnc.response.ResponseResult;
import org.jeecg.modules.dnc.service.IButtonService;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.List;
@Slf4j
@Api(tags = "按钮管理")
@RestController
@RequestMapping("/ucenter/btn")
public class ButtonController  {
    @Autowired
    private IButtonService buttonService;
    @AutoLog(value = "按钮管理-新增按钮对象")
    @ApiOperation(value = "按钮管理-新增按钮对象", notes = "按钮管理-新增按钮对象")
    @PostMapping("/add")
    public ResponseResult addButton(@RequestBody Button button) {
        boolean b = buttonService.addButton(button);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "按钮管理-根据按钮类型查询按钮列表")
    @ApiOperation(value = "按钮管理-根据按钮类型查询按钮列表", notes = "按钮管理-根据按钮类型查询按钮列表")
    @GetMapping("/find/list")
    public QueryListResponseResult<Button> findByButtonType(@RequestParam("buttonType") Integer buttonType) {
        List<Button> list = buttonService.findByButtonType(buttonType);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "按钮管理-分页列表查询")
    @ApiOperation(value = "按钮管理-分页列表查询", notes = "按钮管理-分页列表查询")
    @GetMapping("/find/page/{page}/{size}")
    public QueryPageResponseResult<Button> findByPageList(@PathVariable("page") int page, @PathVariable("size") int size, ButtonRequest buttonRequest) {
        return buttonService.findByPageList(page, size, buttonRequest);
    }
    @AutoLog(value = "按钮管理-编辑按钮")
    @ApiOperation(value = "按钮管理-编辑按钮", notes = "按钮管理-编辑按钮")
    @PutMapping("/edit/{id}")
    public ResponseResult editButton(@PathVariable("id") String id,@RequestBody Button button) {
        boolean b = buttonService.editButton(id,button);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "按钮管理-删除按钮")
    @ApiOperation(value = "按钮管理-删除按钮", notes = "按钮管理-删除按钮")
    @DeleteMapping("/delete")
    public ResponseResult deleteButton(@RequestParam("id") String id) {
        boolean b = buttonService.deleteButtonById(id);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "按钮管理-查询角色分配和未分配的系统按钮")
    @ApiOperation(value = "按钮管理-查询角色分配和未分配的系统按钮", notes = "按钮管理-查询角色分配和未分配的系统按钮")
    @GetMapping("/get/role")
    public QueryListResponseResult<Button> findPermsByRoleId(@RequestParam("roleId") String roleId) {
        List<Button> list = buttonService.findPermsByRoleId(roleId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "按钮管理-获取菜单分配的按钮列表 åŒ…含未分配按钮")
    @ApiOperation(value = "按钮管理-获取菜单分配的按钮列表 åŒ…含未分配按钮", notes = "按钮管理-获取菜单分配的按钮列表 åŒ…含未分配按钮")
    @GetMapping("/get/menu")
    public QueryListResponseResult<Button> findByMenuId(@RequestParam("menuId") String menuId) {
        List<Button> list = buttonService.findByMenuId(menuId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "按钮管理-获取对象分配的按钮列表 åŒ…含未分配按钮")
    @ApiOperation(value = "按钮管理-获取对象分配的按钮列表 åŒ…含未分配按钮", notes = "按钮管理-获取对象分配的按钮列表 åŒ…含未分配按钮")
    @GetMapping("/get/object")
    public QueryListResponseResult<Button> findByObjectId(@RequestParam("objectId") String objectId) {
        List<Button> list = buttonService.findByObjectId(objectId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "按钮管理-导出自定义")
    @ApiOperation(value = "按钮管理-导出自定义", notes = "按钮管理-导出自定义")
    @GetMapping("/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        List<Button> list = buttonService.list();
        //mv.addObject(NormalExcelConstants.FILE_NAME,"导出Excel文件名字");
        //注解对象Class
        mv.addObject(NormalExcelConstants.CLASS,Button.class);
        //自定义导出字段
        //mv.addObject(NormalExcelConstants.EXPORT_FIELDS,"name,keyWord,punchTime");
        //自定义表格参数
        mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("自定义导出Excel模板内容标题", "自定义Sheet名字"));
        //导出数据列表
        mv.addObject(NormalExcelConstants.DATA_LIST,list);
        return mv;
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DepartmentController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
package org.jeecg.modules.dnc.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.modules.dnc.request.DepartmentRequest;
import org.jeecg.modules.dnc.response.*;
import org.jeecg.modules.dnc.service.IDepartmentService;
import org.jeecg.modules.dnc.ucenter.Department;
import org.jeecg.modules.system.entity.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.List;
@Slf4j
@Api(tags = "DNC部门管理")
@RestController
@RequestMapping("/ucenter/depart")
public class DepartmentController  {
    @Autowired
    private IDepartmentService departmentService;
    @AutoLog(value = "DNC部门管理-添加部门信息")
    @ApiOperation(value = "DNC部门管理-添加部门信息", notes = "DNC部门管理-添加部门信息")
    @PostMapping("/add")
    public ResponseResult addDepartment(@RequestBody Department department) {
        boolean b = departmentService.addDepartment(department);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "DNC部门管理-修改部门")
    @ApiOperation(value = "DNC部门管理-修改部门", notes = "DNC部门管理-修改部门")
    @PutMapping("/edit/{id}")
    public ResponseResult editDepartment(@PathVariable("id") String id,@RequestBody Department department) {
        boolean b = departmentService.editDepartment(id,department);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "DNC部门管理-分页查询")
    @ApiOperation(value = "DNC部门管理-分页查询", notes = "DNC部门管理-分页查询")
    @GetMapping("/find/page/{page}/{size}")
    public QueryPageResponseResult<Department> findPageList(@PathVariable("page") int page, @PathVariable("size") int size, DepartmentRequest departmentRequest) {
        return departmentService.findPageList(page,size,departmentRequest);
    }
    @AutoLog(value = "DNC部门管理-获取所有列表,按层级")
    @ApiOperation(value = "DNC部门管理-获取所有列表,按层级", notes = "DNC部门管理-获取所有列表,按层级")
    @GetMapping("/load/tree")
    public QueryListResponseResult<CommonJsonTree> loadTree() {
        List<CommonJsonTree> tree = departmentService.loadTree();
        if(tree == null)
            tree = Collections.emptyList();
        return new QueryListResponseResult(CommonCode.SUCCESS, tree);
    }
    @AutoLog(value = "DNC部门管理-删除 éƒ¨é—¨")
    @ApiOperation(value = "DNC部门管理-删除 éƒ¨é—¨", notes = "DNC部门管理-删除 éƒ¨é—¨")
    @DeleteMapping("/delete")
    public ResponseResult deleteDepartment(@RequestParam("id") String id) {
        boolean b = departmentService.deleteDepartmentById(id);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "DNC部门管理-获取用户未分配的部门列表")
    @ApiOperation(value = "DNC部门管理-获取用户未分配的部门列表", notes = "DNC部门管理-获取用户未分配的部门列表")
    @GetMapping("/perm/select/non/{userId}")
    public QueryListResponseResult<Department> getUserNonPermDepart(@PathVariable("userId") String userId) {
        List<Department> list = departmentService.getUserNonPermDepart(userId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "DNC部门管理-获取用户已分配的部门列表")
    @ApiOperation(value = "DNC部门管理-获取用户已分配的部门列表", notes = "DNC部门管理-获取用户已分配的部门列表")
    @GetMapping("/perm/select/{userId}")
    public QueryListResponseResult<Department> getUserPermDepart(@PathVariable("userId") String userId) {
        List<Department> list = departmentService.getUserPermDepart(userId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "DNC部门管理-获取部门未指定的审批人")
    @ApiOperation(value = "DNC部门管理-获取部门未指定的审批人", notes = "DNC部门管理-获取部门未指定的审批人")
    @GetMapping("/approve/select/non/{departId}")
    public QueryListResponseResult<SysUser> getUserNonApproveDepart(@PathVariable("departId") String departId) {
        List<SysUser> list = departmentService.getUserNonApproveDepart(departId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "DNC部门管理-获取部门已指定的审批人")
    @ApiOperation(value = "DNC部门管理-获取部门已指定的审批人", notes = "DNC部门管理-获取部门已指定的审批人")
    @GetMapping("/approve/select/{departId}")
    public QueryListResponseResult<SysUser> getUserApproveDepart(@PathVariable("departId") String departId) {
        List<SysUser> list = departmentService.getUserApproveDepart(departId);
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
    @AutoLog(value = "DNC部门管理-增加部门审批人")
    @ApiOperation(value = "DNC部门管理-增加部门审批人", notes = "DNC部门管理-增加部门审批人")
    @PostMapping("/assign/add/approve/user/{departId}/{relativeFlag}")
    public ResponseResult assignAddApproveUser(@PathVariable("departId") String departId, @PathVariable("relativeFlag") Integer relativeFlag, @RequestBody String[] userIds) {
        boolean b = departmentService.assignAddApproveUser(departId, relativeFlag, userIds);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "DNC部门管理-移除部门审批人")
    @ApiOperation(value = "DNC部门管理-移除部门审批人", notes = "DNC部门管理-移除部门审批人")
    @PostMapping("/assign/remove/approve/user/{departId}/{relativeFlag}")
    public ResponseResult assignRemoveApproveUser(@PathVariable("departId") String departId, @PathVariable("relativeFlag") Integer relativeFlag, @RequestBody String[] userIds) {
        boolean b = departmentService.assignRemoveApproveUser(departId, relativeFlag, userIds);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "DNC部门管理-获取部门List")
    @ApiOperation(value = "DNC部门管理-获取部门List", notes = "DNC部门管理-获取部门List")
    @GetMapping("/list/all")
    public QueryListResponseResult<Department> getDepartList() {
        List<Department> list = departmentService.list();
        if(list == null)
            list = Collections.emptyList();
        return new QueryListResponseResult<>(CommonCode.SUCCESS, list);
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ObjectController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package org.jeecg.modules.dnc.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.modules.dnc.entity.Button;
import org.jeecg.modules.dnc.entity.ObjectBase;
import org.jeecg.modules.dnc.request.ObjectBaseRequest;
import org.jeecg.modules.dnc.response.CommonCode;
import org.jeecg.modules.dnc.response.QueryPageResponseResult;
import org.jeecg.modules.dnc.response.ResponseResult;
import org.jeecg.modules.dnc.service.IObjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@Api(tags = "Dnc对象管理")
@RestController
@RequestMapping("/ucenter/obj")
public class ObjectController  {
    @Autowired
    private IObjectService objectService;
    @AutoLog(value = "Dnc对象管理-新增管理对象信息")
    @ApiOperation(value = "Dnc对象管理-新增管理对象信息", notes = "Dnc对象管理-新增管理对象信息")
    @PostMapping("/add")
    public ResponseResult addObject(@RequestBody ObjectBase objectBase) {
        boolean b = objectService.addObject(objectBase);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "Dnc对象管理-编辑对象")
    @ApiOperation(value = "Dnc对象管理-编辑对象", notes = "Dnc对象管理-编辑对象")
    @PutMapping("/edit/{id}")
    public ResponseResult editObject(@PathVariable("id") String id,@RequestBody ObjectBase objectBase) {
        boolean b = objectService.editObject(id,objectBase);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "Dnc对象管理-分页查询对象")
    @ApiOperation(value = "Dnc对象管理-分页查询对象", notes = "Dnc对象管理-分页查询对象")
    @GetMapping("/find/page/{page}/{size}")
    public QueryPageResponseResult<ObjectBase> findByPageList(@PathVariable("page") int page, @PathVariable("size") int size, ObjectBaseRequest objectRequest) {
        return objectService.findPageList(page,size,objectRequest);
    }
    @AutoLog(value = "Dnc对象管理-删除对象")
    @ApiOperation(value = "Dnc对象管理-删除对象", notes = "Dnc对象管理-删除对象")
    @DeleteMapping("/delete")
    public ResponseResult deleteObjectById(@RequestParam("id") String id) {
        boolean b = objectService.deleteObjectById(id);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
    @AutoLog(value = "Dnc对象管理-指派对象的操作按钮")
    @ApiOperation(value = "Dnc对象管理-指派对象的操作按钮", notes = "Dnc对象管理-指派对象的操作按钮")
    @PostMapping("/assign/button/{objectId}")
    public ResponseResult assignButton(@PathVariable("objectId") String objectId, @RequestBody List<Button> buttonList) {
        boolean b = objectService.assignButton(objectId, buttonList);
        if(b) {
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ObjectBase.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package org.jeecg.modules.dnc.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
@TableName(value = "sys_object")
public class ObjectBase {
    @TableId
    private String objectId;
    private String objectPerm;
    private String objectName;
    private String objectIcon;
    private Integer priority;
    @JsonIgnore
    @TableField(value = "create_time", select = false, fill = FieldFill.INSERT)
    private Date createTime;
    @JsonIgnore
    @TableField(value = "update_time", select = false, fill = FieldFill.UPDATE)
    private Date updateTime;
    @JsonIgnore
    @TableField(value = "create_user", select = false, fill = FieldFill.INSERT)
    private String createUser;
    @JsonIgnore
    @TableField(value = "update_user", select = false, fill = FieldFill.UPDATE)
    private String updateUser;
    @JsonIgnore
    @TableLogic
    @TableField(value = "delete_flag", select = false)
    private Integer deleteFlag = 0;
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/DncObjectMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package org.jeecg.modules.dnc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.dnc.entity.ObjectBase;
public interface DncObjectMapper extends BaseMapper<ObjectBase> {
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/ObjectBaseRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.dnc.request;
import lombok.Data;
@Data
public class ObjectBaseRequest {
    private String objectPerm;
    private String objectName;
    //排序字段
    private String descStr;
    private String ascStr;
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IButtonService.java
@@ -58,7 +58,7 @@
    List<Button> getObjectButtonPerms(String userId, String objectPerm);
    /**
     * ç¼–辑 æŒ‰é’®
     * ç¼–辑按钮
     * @param id
     * @param button
     * @return
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IObjectService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package org.jeecg.modules.dnc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.dnc.entity.Button;
import org.jeecg.modules.dnc.entity.ObjectBase;
import org.jeecg.modules.dnc.request.ObjectBaseRequest;
import org.jeecg.modules.dnc.response.QueryPageResponseResult;
import java.util.List;
public interface IObjectService extends IService<ObjectBase> {
    /**
     * æ–°å¢žç®¡ç†å¯¹è±¡ä¿¡æ¯
     * @param objectBase
     * @return
     */
    boolean addObject(ObjectBase objectBase);
    /**
     * æ ¹æ®æƒé™ç æŸ¥æ‰¾å¯¹è±¡
     * @param permCode
     * @return
     */
    ObjectBase getByPermCode(String permCode);
    /**
     * æŒ‡æ´¾å¯¹è±¡çš„æ“ä½œæŒ‰é’®
     * @param objectId
     * @param buttonList
     * @return
     */
    boolean assignButton(String objectId, List<Button> buttonList);
    /**
     * ç¼–辑对象
     * @param id
     * @param objectBase
     * @return
     */
    boolean editObject(String id, ObjectBase objectBase);
    /**
     * åˆ é™¤å¯¹è±¡
     * @param id
     * @return
     */
    boolean deleteObjectById(String id);
    /**
     * åˆ†é¡µæŸ¥è¯¢å¯¹è±¡
     * @param page
     * @param size
     * @param buttonRequest
     * @return
     */
    QueryPageResponseResult<ObjectBase> findPageList(int page, int size, ObjectBaseRequest buttonRequest );
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ObjectServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
package org.jeecg.modules.dnc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.dnc.entity.Button;
import org.jeecg.modules.dnc.entity.ObjectBase;
import org.jeecg.modules.dnc.entity.ObjectButton;
import org.jeecg.modules.dnc.entity.ObjectButtonPermission;
import org.jeecg.modules.dnc.exception.ExceptionCast;
import org.jeecg.modules.dnc.mapper.DncObjectMapper;
import org.jeecg.modules.dnc.request.ObjectBaseRequest;
import org.jeecg.modules.dnc.response.CommonCode;
import org.jeecg.modules.dnc.response.ObjectCode;
import org.jeecg.modules.dnc.response.QueryPageResponseResult;
import org.jeecg.modules.dnc.service.IButtonService;
import org.jeecg.modules.dnc.service.IObjectButtonPermissionService;
import org.jeecg.modules.dnc.service.IObjectButtonService;
import org.jeecg.modules.dnc.service.IObjectService;
import org.jeecg.modules.dnc.utils.ValidateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Service
public class ObjectServiceImpl extends ServiceImpl<DncObjectMapper, ObjectBase> implements IObjectService {
    @Autowired
    private IObjectButtonService objectButtonService;
    @Autowired
    private IButtonService buttonService;
    @Autowired
    private IObjectButtonPermissionService objectButtonPermissionService;
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean addObject(ObjectBase objectBase) {
        if(objectBase == null)
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        if(!ValidateUtil.validateString(objectBase.getObjectPerm()))
            ExceptionCast.cast(ObjectCode.OBJ_PERM_CODE_NONE);
        if(!ValidateUtil.validateString(objectBase.getObjectName()))
            ExceptionCast.cast(ObjectCode.OBJ_NAME_NONE);
        ObjectBase en = getByPermCode(objectBase.getObjectPerm());
        if(en != null)
            ExceptionCast.cast(ObjectCode.OBJ_PERM_CODE_EXIST);
        return super.save(objectBase);
    }
    @Override
    public ObjectBase getByPermCode(String permCode) {
        if(!ValidateUtil.validateString(permCode))
            return null;
        List<ObjectBase> list = super.lambdaQuery().eq(ObjectBase::getObjectPerm, permCode).list();
        if(list == null || list.isEmpty())
            return null;
        return list.get(0);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean assignButton(String objectId, List<Button> buttonList) {
        if(!ValidateUtil.validateString(objectId))
            ExceptionCast.cast(ObjectCode.OBJ_ID_NONE);
        ObjectBase objectBase = super.getById(objectId);
        if(objectBase == null)
            ExceptionCast.cast(ObjectCode.OBJ_NOT_EXIST);
        boolean b = objectButtonService.deleteByObjectId(objectId);
        if(!b)
            ExceptionCast.cast(CommonCode.FAIL);
        if(buttonList != null && !buttonList.isEmpty()) {
            List<ObjectButton> objButtons = new ArrayList<>();
            List<String> ids = new ArrayList<>();
            buttonList.forEach(item -> {
                final ObjectButton en = new ObjectButton();
                en.setObjectId(objectBase.getObjectId());
                en.setButtonId(item.getButtonId());
                en.setButtonUrl(item.getButtonUrl());
                if(ValidateUtil.validateString(item.getButtonAlias())) {
                    en.setButtonAlias(item.getButtonAlias());
                }else {
                    en.setButtonAlias(item.getButtonName());
                }
                en.setPermCode(objectBase.getObjectPerm() + "_" + item.getButtonPerm());
                objButtons.add(en);
                ids.add(item.getButtonId());
            });
            Collection<Button> buttons = buttonService.listByIds(ids);
            if(buttons == null || buttons.isEmpty() || buttons.size() != buttonList.size())
                ExceptionCast.cast(CommonCode.INVALID_PARAM);
            if(!objButtons.isEmpty())
                return objectButtonService.saveBatch(objButtons);
        }
        return b;
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean editObject(String id, ObjectBase objectBase) {
        if(!ValidateUtil.validateString(id) || objectBase == null)
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        ObjectBase en = super.getById(id);
        if (en == null) {
            ExceptionCast.cast(ObjectCode.OBJ_ID_NOT_EXIST);
        }
        objectBase.setObjectId(id);
        objectBase.setObjectPerm(null);
        return super.updateById(objectBase);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteObjectById(String id) {
        if(!ValidateUtil.validateString(id)) {
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        }
        ObjectBase en = super.getById(id);
        if (en == null)
            ExceptionCast.cast(ObjectCode.OBJ_ID_NOT_EXIST);
        List<ObjectButtonPermission> objectButtonPermissions = objectButtonPermissionService.findByObjectId(id);
        if(objectButtonPermissions != null && !objectButtonPermissions.isEmpty())
            ExceptionCast.cast(ObjectCode.OBJ_ROLE_EXIST);
        boolean b = objectButtonService.deleteByObjectId(id);
        if(!b)
            ExceptionCast.cast(CommonCode.FAIL);
        return super.removeById(id);
    }
    @Override
    public QueryPageResponseResult<ObjectBase> findPageList(int page, int size, ObjectBaseRequest buttonRequest) {
        if(page < 1 || size < 1) {
            ExceptionCast.cast(CommonCode.INVALID_PAGE);
        }
        IPage<ObjectBase> pageData = new Page<>(page, size);
        LambdaQueryChainWrapper<ObjectBase> lambdaQuery = super.lambdaQuery();
        if(buttonRequest != null) {
            if(ValidateUtil.validateString(buttonRequest.getObjectName())) {
                lambdaQuery.eq(ObjectBase::getObjectName, buttonRequest.getObjectName());
            }
            if(ValidateUtil.validateString(buttonRequest.getObjectPerm())) {
                lambdaQuery.like(ObjectBase::getObjectPerm, buttonRequest.getObjectPerm());
            }
            if(ValidateUtil.validateString(buttonRequest.getAscStr())) {
                String[] ascArr = buttonRequest.getAscStr().split(",");
//                ((Page<ObjectBase>) pageData).setAsc(ascArr);
            }
            if(ValidateUtil.validateString(buttonRequest.getDescStr())) {
                String[] descStr = buttonRequest.getDescStr().split(",");
//                ((Page<ObjectBase>) pageData).setDesc(descStr);
            }
        }
        IPage<ObjectBase> userIPage = lambdaQuery.page(pageData);
        return new QueryPageResponseResult<>(CommonCode.SUCCESS, userIPage);
    }
}