吉安感知网项目-后端
rain
2026-01-23 595faeff5d994f7921c6dd7db1a5987a885894bb
Merge remote-tracking branch 'origin/master'
17 files modified
6 files added
769 ■■■■ changed files
drone-service-api/drone-system-api/src/main/java/org/sxkj/system/entity/Region.java 3 ●●●●● patch | view | raw | blame | history
drone-service-api/drone-system-api/src/main/java/org/sxkj/system/vo/DeptVO.java 5 ●●●● patch | view | raw | blame | history
drone-service-api/drone-system-api/src/main/java/org/sxkj/system/vo/RegionVO.java 2 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdPatrolTaskController.java 28 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdPatrolTaskMapper.xml 39 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdPatrolTaskVO.java 3 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java 58 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/controller/RegionController.java 35 ●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/excel/DeptExcel.java 59 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/excel/DeptImporter.java 41 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/DeptMapper.java 27 ●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/DeptMapper.xml 29 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/RegionMapper.java 9 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/RegionMapper.xml 85 ●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/param/DeptAddParam.java 96 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/param/DeptExportParam.java 17 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/param/DeptPageParam.java 3 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/param/RegionAddParam.java 116 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/param/RegionPageParam.java 24 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/service/IDeptService.java 38 ●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/service/IRegionService.java 10 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/service/impl/DeptServiceImpl.java 36 ●●●●● patch | view | raw | blame | history
drone-service/drone-system/src/main/java/org/sxkj/system/service/impl/RegionServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
drone-service-api/drone-system-api/src/main/java/org/sxkj/system/entity/Region.java
@@ -139,5 +139,8 @@
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "状态 0:禁用 1:启用 ")
    private Integer status;
}
drone-service-api/drone-system-api/src/main/java/org/sxkj/system/vo/DeptVO.java
@@ -64,6 +64,10 @@
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private Boolean hasChildren;
    // area_name
    @ApiModelProperty(value = "区划名称")
    private String areaName;
    @Override
    public List<DeptVO> getChildren() {
        if (this.children == null) {
@@ -111,7 +115,6 @@
     */
    private String areaCode;
    private String areaName;
    /**
     * 部署模式:0-统一部署,1-独立部署
drone-service-api/drone-system-api/src/main/java/org/sxkj/system/vo/RegionVO.java
@@ -20,6 +20,7 @@
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tool.node.INode;
@@ -55,6 +56,7 @@
    /**
     * 父节点名称
     */
    @ApiModelProperty(value = "父节点名称")
    private String parentName;
    /**
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdPatrolTaskController.java
@@ -89,16 +89,6 @@
        GdPatrolTaskEntity detail = gdPatrolTaskService.getOne(Condition.getQueryWrapper(gdPatrolTask));
        return R.data(GdPatrolTaskWrapper.build().entityVO(detail));
    }
    /**
     * 巡查任务表 分页
     */
    // @GetMapping("/list")
    // @ApiOperationSupport(order = 2)
    // @ApiOperation(value = "分页", notes = "传入gdPatrolTask")
    // public R<IPage<GdPatrolTaskVO>> list(@ApiIgnore @RequestParam Map<String, Object> gdPatrolTask, Query query) {
    //     IPage<GdPatrolTaskEntity> pages = gdPatrolTaskService.page(Condition.getPage(query), Condition.getQueryWrapper(gdPatrolTask, GdPatrolTaskEntity.class));
    //     return R.data(GdPatrolTaskWrapper.build().pageVO(pages));
    // }
    /**
     * 巡查任务表 自定义分页
@@ -130,25 +120,7 @@
        return R.status(gdPatrolTaskService.savePatrolTask(taskEntityList));
    }
    /**
     * 巡查任务表 修改
     */
    // @PostMapping("/update")
    // @ApiOperationSupport(order = 5)
    // @ApiOperation(value = "修改", notes = "传入gdPatrolTask")
    // public R update(@Valid @RequestBody GdPatrolTaskEntity gdPatrolTask) {
    //     return R.status(gdPatrolTaskService.updateById(gdPatrolTask));
    // }
    /**
     * 巡查任务表 新增或修改
     */
    // @PostMapping("/submit")
    // @ApiOperationSupport(order = 6)
    // @ApiOperation(value = "新增或修改", notes = "传入gdPatrolTask")
    // public R submit(@Valid @RequestBody GdPatrolTaskEntity gdPatrolTask) {
    //     return R.status(gdPatrolTaskService.saveOrUpdate(gdPatrolTask));
    // }
    /**
     * 巡查任务表 删除
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdPatrolTaskMapper.xml
@@ -13,6 +13,7 @@
        <result column="patrol_route_url" property="patrolRouteUrl"/>
        <result column="recommend_flyer_name" property="recommendFlyerName"/>
        <result column="device_id" property="deviceId"/>
        <result column="device_name" property="deviceName"/>
        <result column="task_desc" property="taskDesc"/>
        <result column="task_status" property="taskStatus"/>
        <result column="area_code" property="areaCode"/>
@@ -29,20 +30,30 @@
    <select id="selectGdPatrolTaskPage" resultMap="gdPatrolTaskResultMap">
        select pt.*,
        wo.work_order_name,
        IFNULL(tr.result_count, 0) as result_count,
        IFNULL(tr.issue_event_count, 0) as issue_event_count
        from ja_gd_patrol_task pt
        left join ja_gd_work_order wo on pt.work_order_id = wo.id
        left join (
        select patrol_task_id,
        count(*) as result_count,
        sum(case when distribute_status in (1,2) then 1 else 0 end) as issue_event_count
        from ja_gd_task_result
        where is_deleted = 0
        group by patrol_task_id
        ) tr on tr.patrol_task_id = pt.id
        select
            pt.*,
            md.device_name,
            wo.work_order_name,
            IFNULL(tr.result_count, 0) as result_count,
            IFNULL(tr.issue_event_count, 0) as issue_event_count
        from
            ja_gd_patrol_task pt
        left join
            ja_gd_work_order wo on pt.work_order_id = wo.id
        left join
                ja_gd_manage_device md on md.id = pt.device_id
        left join
            (
            select patrol_task_id,
                count(*) as result_count,
                sum(case when distribute_status in (1,2) then 1 else 0 end) as issue_event_count
            from
                ja_gd_task_result
            where
                is_deleted = 0
            group by
                patrol_task_id
            ) tr on tr.patrol_task_id = pt.id
        <where>
            <if test="param2.workOrderId != null and param2.workOrderId != ''">
                and pt.work_order_id = #{param2.workOrderId}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdPatrolTaskVO.java
@@ -83,6 +83,9 @@
     */
    @ApiModelProperty(value = "关联设备ID")
    private Long deviceId;
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    /**
     * 任务描述
     */
drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java
@@ -26,6 +26,7 @@
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.log.annotation.ApiLog;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
@@ -36,17 +37,27 @@
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.constant.RoleConstant;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;
import org.sxkj.common.node.TreeStringNode;
import org.sxkj.common.utils.HeaderUtils;
import org.sxkj.system.cache.DictCache;
import org.sxkj.system.cache.UserCache;
import org.sxkj.system.entity.Dept;
import org.sxkj.system.entity.Region;
import org.sxkj.system.entity.User;
import org.sxkj.system.enums.DictEnum;
import org.sxkj.system.excel.DeptExcel;
import org.sxkj.system.excel.DeptImporter;
import org.sxkj.system.excel.RegionExcel;
import org.sxkj.system.excel.RegionImporter;
import org.sxkj.system.mapper.DeptMapper;
import org.sxkj.system.mapper.UserMapper;
import org.sxkj.system.param.DeptAddParam;
import org.sxkj.system.param.DeptExportParam;
import org.sxkj.system.param.DeptPageParam;
import org.sxkj.system.service.IDeptService;
import org.sxkj.system.vo.DeptVO;
@@ -54,9 +65,12 @@
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
@@ -91,7 +105,7 @@
    }
    /**
     * 飞手表 自定义分页
     * 机构 自定义分页
     */
    @GetMapping("/page")
    @ApiOperationSupport(order = 3)
@@ -181,13 +195,13 @@
    /**
     * 新增或修改
     */
//    @PreAuth(RoleConstant.HAS_ROLE_ADMIN)
    @PostMapping("/submit")
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "新增或修改", notes = "传入dept")
    @ApiLog("组织机构信息新增或修改")
    public R submit(@Valid @RequestBody Dept dept) {
        if (deptService.submit(dept)) {
    public R submit(@Valid @RequestBody DeptAddParam dept) {
        Dept deptEntity = Objects.requireNonNull(BeanUtil.copy(dept, Dept.class));
        if (deptService.submit(deptEntity)) {
            CacheUtil.clear(SYS_CACHE);
            CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
            List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getDeptId, dept.getId()));
@@ -284,7 +298,7 @@
     */
    @GetMapping("/getParentDeptInfo")
    @ApiOperationSupport(order = 12)
    @ApiOperation(value = "下拉数据源", notes = "传入id集合")
    @ApiOperation(value = "通过id查询", notes = "传入id集合")
    public R getParentDeptInfo(String deptId) {
        DeptVO list = deptService.getParentDeptInfo(deptId);
        return R.data(list);
@@ -322,4 +336,38 @@
        return R.data(list);
    }
    /**
     * 导入机构数据
     */
    @PostMapping("import-region")
    @ApiOperationSupport(order = 14)
    @ApiOperation(value = "导入机构", notes = "传入excel")
    public R importRegion(MultipartFile file, Integer isCovered) {
        DeptImporter deptImporter = new DeptImporter(deptService, isCovered == 1);
        ExcelUtil.save(file, deptImporter, DeptExcel.class);
        return R.success("操作成功");
    }
    /**
     * 导出机构数据
     */
    @GetMapping("export-region")
    @ApiOperationSupport(order = 15)
    @ApiOperation(value = "导出机构", notes = "传入user")
    public void exportRegion(DeptExportParam dept, HttpServletResponse response) {
         List<DeptExcel> list = deptService.exportDept(dept);
        ExcelUtil.export(response, "机构数据" + DateUtil.time(), "机构数据表", list, DeptExcel.class);
    }
    /**
     * 导出模板
     */
    @GetMapping("export-template")
    @ApiOperationSupport(order = 16)
    @ApiOperation(value = "导出模板")
    public void exportUser(HttpServletResponse response) {
        List<DeptExcel> list = new ArrayList<>();
        ExcelUtil.export(response, "机构模板", "机构表", list, DeptExcel.class);
    }
}
drone-service/drone-system/src/main/java/org/sxkj/system/controller/RegionController.java
@@ -29,10 +29,13 @@
import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.sxkj.system.entity.Region;
import org.sxkj.system.excel.RegionExcel;
import org.sxkj.system.excel.RegionImporter;
import org.sxkj.system.param.RegionAddParam;
import org.sxkj.system.param.RegionPageParam;
import org.sxkj.system.service.IRegionService;
import org.sxkj.system.vo.RegionVO;
import org.sxkj.system.vo.TreeVo;
@@ -46,6 +49,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * 行政区划表 控制器
@@ -84,6 +88,17 @@
    }
    /**
     * 行政区划表 自定义分页
     */
    @GetMapping("/page")
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "分页", notes = " ")
    public R<IPage<RegionVO>> page(RegionPageParam regionPageParam, Query query) {
        IPage<RegionVO> pages = regionService.selectRegionPage(Condition.getPage(query), regionPageParam);
        return R.data(pages);
    }
    /**
     * 懒加载列表
     */
    @GetMapping("/lazy-list")
@@ -116,13 +131,14 @@
    /**
     * 新增 行政区划表
     */
    @PostMapping("/save")
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "新增", notes = "传入region")
    @ApiLog("行政区划数据新增")
    public R save(@Valid @RequestBody Region region) {
        return R.status(regionService.save(region));
    }
    // @PostMapping("/save")
    // @ApiOperationSupport(order = 5)
    // @ApiOperation(value = "新增", notes = "传入region")
    // @ApiLog("行政区划数据新增")
    // public R save(@Valid @RequestBody RegionAddParam region) {
    //     Region regionEntity = Objects.requireNonNull(BeanUtil.copy(region, Region.class));
    //     return R.status(regionService.save(regionEntity));
    // }
    /**
     * 修改 行政区划表
@@ -142,8 +158,9 @@
    @ApiOperationSupport(order = 7)
    @ApiOperation(value = "新增或修改", notes = "传入region")
    @ApiLog("行政区划数据新增或修改")
    public R submit(@Valid @RequestBody Region region) {
        return R.status(regionService.submit(region));
    public R submit(@Valid @RequestBody RegionAddParam region) {
        Region regionEntity = Objects.requireNonNull(BeanUtil.copy(region, Region.class));
        return R.status(regionService.submit(regionEntity));
    }
drone-service/drone-system/src/main/java/org/sxkj/system/excel/DeptExcel.java
New file
@@ -0,0 +1,59 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.sxkj.system.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.io.Serializable;
/**
 * RegionExcel
 *
 * @author Chill
 */
@Data
@ColumnWidth(16)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class DeptExcel implements Serializable {
    private static final long serialVersionUID = 1L;
    @ExcelProperty("机构编码")
    @ColumnWidth(20)
    private String deptCode;
    @ExcelProperty("机构名称")
    @ColumnWidth(20)
    private String deptName;
    @ExcelProperty("所属区划")
    @ColumnWidth(20)
    private String areaName;
    @ExcelProperty("机构描述")
    @ColumnWidth(20)
    private String deptDesc;
    @ExcelProperty("机构状态")
    @ColumnWidth(20)
    private String deptStatus;
}
drone-service/drone-system/src/main/java/org/sxkj/system/excel/DeptImporter.java
New file
@@ -0,0 +1,41 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.sxkj.system.excel;
import lombok.RequiredArgsConstructor;
import org.springblade.core.excel.support.ExcelImporter;
import org.sxkj.system.service.IDeptService;
import org.sxkj.system.service.IRegionService;
import java.util.List;
/**
 * 行政区划数据导入类
 *
 * @author Chill
 */
@RequiredArgsConstructor
public class DeptImporter implements ExcelImporter<DeptExcel> {
    private final IDeptService service;
    private final Boolean isCovered;
    @Override
    public void save(List<DeptExcel> data) {
        service.importDept(data, isCovered);
    }
}
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/DeptMapper.java
@@ -16,6 +16,7 @@
 */
package org.sxkj.system.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.MapKey;
@@ -23,6 +24,8 @@
import org.apache.ibatis.annotations.Param;
import org.sxkj.common.node.TreeStringNode;
import org.sxkj.system.entity.Dept;
import org.sxkj.system.excel.DeptExcel;
import org.sxkj.system.param.DeptExportParam;
import org.sxkj.system.param.DeptPageParam;
import org.sxkj.system.vo.DeptVO;
@@ -62,7 +65,7 @@
     * @param parentId
     * @return
     */
    List<DeptVO> lazyTree(String tenantId, Long parentId,Integer level);
    List<DeptVO> lazyTree(String tenantId, Long parentId, Integer level);
    /**
     * 获取部门名
@@ -74,6 +77,7 @@
    /**
     * 获取部门树形结构
     *
     * @param deptId
     * @return
     */
@@ -82,6 +86,7 @@
    /**
     * 自定义详情查询-根据系统配置id
     *
     * @param dept
     * @return
     */
@@ -89,6 +94,7 @@
    /**
     * 下拉机构列表查询
     *
     * @param deptId
     * @return
     */
@@ -96,6 +102,7 @@
    /**
     * 查询父级机构信息(一级机构)
     *
     * @param deptId
     * @return
     */
@@ -103,27 +110,39 @@
    /**
     * 查询机构树(除本机机构以外的机构)
     *
     * @param deptId
     * @return
     */
    @MapKey("id")
    Map<String, TreeStringNode> getDeptTreeByNotItself(@Param("deptId") String deptId,@Param("deviceSn") String deviceSn);
    Map<String, TreeStringNode> getDeptTreeByNotItself(@Param("deptId") String deptId, @Param("deviceSn") String deviceSn);
    /**
     * 懒加载获取部门树形结构(子集)
     *
     * @param parentId
     * @return
     */
    List<DeptVO> getChildLazyTree(Long parentId,Map<String, Object> param);
    List<DeptVO> getChildLazyTree(Long parentId, Map<String, Object> param);
    String getFullRegionName(String areaCode);
    String getSingleRegionName(String areaCode);
    /**
     * 查询部门分页数据
     *
     * @param page
     * @param deptPageParam
     * @return
     */
    IPage<DeptVO> selectDeptPage(IPage<DeptVO> page, DeptPageParam deptPageParam);
    IPage<DeptVO> selectDeptPage(IPage<DeptVO> page, DeptPageParam deptPageParam);
    /**
     * 导出部门数据
     *
     * @param deptExportParam
     * @return
     */
    List<DeptExcel> exportDept(DeptExportParam deptExportParam);
}
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/DeptMapper.xml
@@ -278,9 +278,10 @@
    <select id="selectDeptPage" resultType="org.sxkj.system.vo.DeptVO">
        SELECT
            bd.*
            bd.*,
            br.name AS area_name
        FROM
            blade_dept bd
            blade_dept bd LEFT JOIN blade_region br ON br.code = bd.area_code
        WHERE
            bd.is_deleted = 0
        <if test="param2.deptName!=null and param2.deptName!=''">
@@ -289,6 +290,30 @@
        <if test="param2.fullName!=null and param2.fullName!=''">
            and bd.full_name like concat(concat('%', #{param2.fullName}),'%')
        </if>
        <if test="param2.areaCode!=null and param2.areaCode!=''">
            and bd.area_code = #{param2.areaCode}
        </if>
    </select>
    <select id="exportDept" resultType="org.sxkj.system.excel.DeptExcel">
        SELECT
            bd.*,
            br.name AS area_name
        FROM
            blade_dept bd
        LEFT JOIN
            blade_region br ON br.code = bd.area_code
        WHERE
            bd.is_deleted = 0
        <if test="deptName!=null and deptName!=''">
            and bd.dept_name like concat(concat('%', #{deptName}),'%')
        </if>
        <if test="fullName!=null and fullName!=''">
            and bd.full_name like concat(concat('%', #{fullName}),'%')
        </if>
        <if test="areaCode!=null and areaCode!=''">
            and bd.area_code = #{areaCode}
        </if>
    </select>
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/RegionMapper.java
@@ -18,9 +18,11 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.sxkj.system.entity.Region;
import org.sxkj.system.excel.RegionExcel;
import org.sxkj.system.param.RegionPageParam;
import org.sxkj.system.vo.RegionVO;
import java.util.List;
@@ -71,4 +73,11 @@
     */
    List<Region> getCodeLess12DataList(@Param("size") Integer size);
    /**
     *
     * @param page
     * @param regionPageParam
     * @return
     */
    IPage<RegionVO> selectRegionPage(IPage<RegionVO> page, RegionPageParam regionPageParam);
}
drone-service/drone-system/src/main/java/org/sxkj/system/mapper/RegionMapper.xml
@@ -57,10 +57,11 @@
    <select id="lazyList" resultMap="regionVOResultMap">
        SELECT
            region.*,
            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM blade_region WHERE parent_code = region.code ) AS "has_children"
        region.*,
        ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM blade_region WHERE parent_code = region.code ) AS
        "has_children"
        FROM
            blade_region region
        blade_region region
        <where>
            <if test="param1!=null">
                and region.parent_code = #{param1}
@@ -76,14 +77,15 @@
    <select id="lazyTree" resultMap="treeNodeResultMap">
        SELECT
            region.code AS "id",
            region.parent_code AS "parent_id",
            region.name AS "title",
            region.code AS "value",
            region.code AS "key",
            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM blade_region WHERE parent_code = region.code ) AS "has_children"
        region.code AS "id",
        region.parent_code AS "parent_id",
        region.name AS "title",
        region.code AS "value",
        region.code AS "key",
        ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM blade_region WHERE parent_code = region.code ) AS
        "has_children"
        FROM
            blade_region region
        blade_region region
        <where>
            <if test="param1!=null">
                and region.parent_code = #{param1}
@@ -99,19 +101,72 @@
    </select>
    <select id="exportRegion" resultType="org.sxkj.system.excel.RegionExcel">
        SELECT * FROM blade_region ${ew.customSqlSegment}
        SELECT *
        FROM blade_region ${ew.customSqlSegment}
    </select>
    <!--查询parentCode 长度少于12 的-->
    <select id="getCodeLess12DataCount" resultType="java.lang.Integer">
        SELECT count(*) FROM blade_region
        SELECT count(*)
        FROM blade_region
        where length(parent_code) &lt; 12
    </select>
    <!--查询parentCode 长度少于12 的-->
    <select id="getCodeLess12DataList" resultType="org.sxkj.system.entity.Region">
        SELECT * FROM blade_region
        where length(parent_code) &lt; 12
        limit 0,#{size}
        SELECT *
        FROM blade_region
        where length(parent_code) &lt; 12 limit 0,#{size}
    </select>
    <select id="selectRegionPage" resultType="org.sxkj.system.vo.RegionVO">
        SELECT
            id,
            code,
            parent_code,
            ancestors,
            `name`,
            province_code,
            province_name,
            city_code,
            city_name,
            district_code,
            district_name,
            town_code,
            town_name,
            village_code,
            village_name,
            region_level,
            type,
            sort,
            remark,
            `status`,
            CASE
            WHEN
                region_level = '5' THEN town_name
            WHEN
                region_level = '4' THEN district_name
            WHEN
                region_level = '3' THEN city_name
            ELSE NULL
            END AS parent_name
        FROM
            blade_region
        <where>
            <if test="param2.status!=null">
                and status = #{param1.status}
            </if>
            <if test="param2.cityCode!=null and param2.cityCode!='' ">
                and city_code like concat(concat('%', #{param2.cityCode}),'%')
            </if>
            <if test="param2.districtName!=null and param2.districtName!=''">
                and district_name like concat(concat('%', #{param2.districtName}),'%')
            </if>
            <if test="param2.parentName!=null and param2.parentName!=''">
                and parent_name like concat(concat('%', #{param2.parentName}),'%')
            </if>
            <if test="param2.regionLevel!=null">
                and region_level = #{param2.regionLevel}
            </if>
        </where>
    </select>
</mapper>
drone-service/drone-system/src/main/java/org/sxkj/system/param/DeptAddParam.java
New file
@@ -0,0 +1,96 @@
package org.sxkj.system.param;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeptAddParam {
    /**
     * 主键
     */
    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(value = "主键")
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * 租户ID
     */
    @ApiModelProperty(value = "租户ID")
    private String tenantId;
    /**
     * 父主键
     */
    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(value = "父主键")
    private Long parentId;
    /**
     * 机构名
     */
    @ApiModelProperty(value = "机构名")
    private String deptName;
    /**
     * 机构全称
     */
    @ApiModelProperty(value = "机构全称")
    private String fullName;
    /**
     * 祖级机构主键
     */
    @ApiModelProperty(value = "祖级机构主键")
    private String ancestors;
    /**
     * 机构类型
     */
    @ApiModelProperty(value = "机构类型")
    private Integer deptCategory;
    /**
     * 机构性质
     */
    @ApiModelProperty(value = "机构性质")
    private Integer deptNature;
    /**
     * 排序
     */
    @ApiModelProperty(value = "排序")
    private Integer sort;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "组织id")
    private Integer bingId;
    /**
     * 是否已删除
     */
    @TableLogic
    @ApiModelProperty(value = "是否已删除")
    private Integer isDeleted;
    /**
     * 行政区划代码
     */
    @ApiModelProperty(value = "行政区划代码")
    private String areaCode;
    @ApiModelProperty(value = "状态 0:禁用 1:启用")
    private Integer status;
}
drone-service/drone-system/src/main/java/org/sxkj/system/param/DeptExportParam.java
New file
@@ -0,0 +1,17 @@
package org.sxkj.system.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeptExportParam {
    @ApiModelProperty(value = "部门名称")
    private String deptName;
    @ApiModelProperty(value = "部门全称")
    private String fullName;
    @ApiModelProperty(value = "所属区划")
    private String areaCode;
}
drone-service/drone-system/src/main/java/org/sxkj/system/param/DeptPageParam.java
@@ -11,4 +11,7 @@
    @ApiModelProperty(value = "部门全称")
    private String fullName;
    @ApiModelProperty(value = "所属区划")
    private String areaCode;
}
drone-service/drone-system/src/main/java/org/sxkj/system/param/RegionAddParam.java
New file
@@ -0,0 +1,116 @@
package org.sxkj.system.param;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class RegionAddParam {
    /**
     * 主键
     */
    @JsonSerialize(using = ToStringSerializer.class)
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    /**
     * 区划编号
     */
//    @TableId(value = "code", type = IdType.INPUT)
    @ApiModelProperty(value = "区划编号")
    private String code;
    /**
     * 父区划编号
     */
    @ApiModelProperty(value = "父区划编号")
    private String parentCode;
    /**
     * 祖区划编号
     */
    @ApiModelProperty(value = "祖区划编号")
    private String ancestors;
    /**
     * 区划名称
     */
    @ApiModelProperty(value = "区划名称")
    private String name;
    /**
     * 省级区划编号
     */
    @ApiModelProperty(value = "省级区划编号")
    private String provinceCode;
    /**
     * 省级名称
     */
    @ApiModelProperty(value = "省级名称")
    private String provinceName;
    /**
     * 市级区划编号
     */
    @ApiModelProperty(value = "市级区划编号")
    private String cityCode;
    /**
     * 市级名称
     */
    @ApiModelProperty(value = "市级名称")
    private String cityName;
    /**
     * 区级区划编号
     */
    @ApiModelProperty(value = "区级区划编号")
    private String districtCode;
    /**
     * 区级名称
     */
    @ApiModelProperty(value = "区级名称")
    private String districtName;
    /**
     * 镇级区划编号
     */
    @ApiModelProperty(value = "镇级区划编号")
    private String townCode;
    /**
     * 镇级名称
     */
    @ApiModelProperty(value = "镇级名称")
    private String townName;
    /**
     * 村级区划编号
     */
    @ApiModelProperty(value = "村级区划编号")
    private String villageCode;
    /**
     * 村级名称
     */
    @ApiModelProperty(value = "村级名称")
    private String villageName;
    /**
     * 层级
     */
    @ApiModelProperty(value = "层级")
    private Integer regionLevel;
    /**
     * 城乡分类代码
     */
    @ApiModelProperty(value = "城乡分类代码")
    private Integer type;
    /**
     * 排序
     */
    @ApiModelProperty(value = "排序")
    private Integer sort;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "状态 0:禁用 1:启用 ")
    private Integer status;
}
drone-service/drone-system/src/main/java/org/sxkj/system/param/RegionPageParam.java
New file
@@ -0,0 +1,24 @@
package org.sxkj.system.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class RegionPageParam {
    @ApiModelProperty(value = "父级")
    private String parentName;
    @ApiModelProperty(value = "区划代码")
    private String cityCode;
    @ApiModelProperty(value = "状态 0:禁用 1:启用 ")
    private Integer status;
    @ApiModelProperty(value = "区域名称")
    private String districtName;
    @ApiModelProperty(value = "区域等级")
    private Integer regionLevel;
}
drone-service/drone-system/src/main/java/org/sxkj/system/service/IDeptService.java
@@ -16,11 +16,14 @@
 */
package org.sxkj.system.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.tool.api.R;
import org.sxkj.common.node.TreeStringNode;
import org.sxkj.system.entity.Dept;
import org.sxkj.system.excel.DeptExcel;
import org.sxkj.system.param.DeptExportParam;
import org.sxkj.system.param.DeptPageParam;
import org.sxkj.system.vo.DeptVO;
@@ -59,7 +62,7 @@
     * @param parentId
     * @return
     */
    List<DeptVO> lazyTree(String tenantId, Long parentId,Integer level);
    List<DeptVO> lazyTree(String tenantId, Long parentId, Integer level);
    /**
     * 获取部门ID
@@ -122,6 +125,7 @@
    /**
     * 获取部门树形结构
     *
     * @param dept
     * @return
     */
@@ -129,13 +133,15 @@
    /**
     * 自定义详情查询-根据系统配置id
     *
     * @param dept
     * @return
     */
    DeptVO getDetailBySysConfigId(DeptVO dept);
    DeptVO getDetailBySysConfigId(DeptVO dept);
    /**
     * 下拉数据源
     *
     * @param deptId
     * @return
     */
@@ -143,6 +149,7 @@
    /**
     * 查询父级机构信息(一级机构)
     *
     * @param deptId
     * @return
     */
@@ -150,22 +157,25 @@
    /**
     * 查询机构树(除本机机构以外的机构)
     *
     * @param deptId
     * @param deviceSn
     * @return
     */
    List<TreeStringNode> getDeptTreeByNotItself(String deptId,String deviceSn);
    List<TreeStringNode> getDeptTreeByNotItself(String deptId, String deviceSn);
    /**
     * 懒加载获取部门树形结构(子集)
     *
     * @param param
     * @param parentId
     * @return
     */
    List<DeptVO> getChildLazyTree(Map<String, Object> param,Long parentId);
    List<DeptVO> getChildLazyTree(Map<String, Object> param, Long parentId);
    /**
     * 部门名称关系map
     *
     * @param deptIds
     * @return
     */
@@ -173,16 +183,32 @@
    /**
     * 获取部门列表
     *
     * @param areaCode 区域code
     * @return 部门列表
     */
    List<DeptVO> deptsByAreaCode(String areaCode);
    /**
     *
     * @param page
     * @param deptPageParam
     * @return
     */
    IPage<DeptVO> selectDeptPage(IPage<DeptVO> page, DeptPageParam deptPageParam);
    IPage<DeptVO> selectDeptPage(IPage<DeptVO> page, DeptPageParam deptPageParam);
    /**
     * 导入部门
     *
     * @param data
     * @param isCovered
     */
    void importDept(List<DeptExcel> data, Boolean isCovered);
    /**
     * 导出部门
     *
     * @param dept
     * @return
     */
    List<DeptExcel> exportDept(DeptExportParam dept);
}
drone-service/drone-system/src/main/java/org/sxkj/system/service/IRegionService.java
@@ -17,9 +17,11 @@
package org.sxkj.system.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.sxkj.system.entity.Region;
import org.sxkj.system.excel.RegionExcel;
import org.sxkj.system.param.RegionPageParam;
import org.sxkj.system.vo.RegionVO;
import org.sxkj.system.vo.TreeVo;
@@ -104,4 +106,12 @@
     * @return
     */
    public TreeVo buildRegionTree(String parentCode);
    /**
     *
     * @param page
     * @param regionPageParam
     * @return
     */
    IPage<RegionVO> selectRegionPage(IPage<RegionVO> page, RegionPageParam regionPageParam);
}
drone-service/drone-system/src/main/java/org/sxkj/system/service/impl/DeptServiceImpl.java
@@ -17,6 +17,7 @@
package org.sxkj.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -30,20 +31,21 @@
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.sxkj.common.func.Streams;
import org.sxkj.common.model.ResponseResult;
import org.sxkj.common.node.TreeStringNode;
import org.sxkj.common.utils.NodeTreeUtil;
import org.sxkj.system.cache.SysCache;
import org.sxkj.system.entity.Dept;
import org.sxkj.system.excel.DeptExcel;
import org.sxkj.system.mapper.DeptMapper;
import org.sxkj.system.param.DeptExportParam;
import org.sxkj.system.param.DeptPageParam;
import org.sxkj.system.service.IDeptService;
import org.sxkj.system.vo.DeptVO;
import org.sxkj.system.wrapper.DeptWrapper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -297,8 +299,38 @@
        return list;
    }
    /**
     * 分页查询
     * @param page
     * @param deptPageParam
     * @return
     */
    @Override
    public IPage<DeptVO> selectDeptPage(IPage<DeptVO> page, DeptPageParam deptPageParam) {
        return baseMapper.selectDeptPage(page, deptPageParam);
    }
    /**
     * 导入部门
     * @param data
     * @param isCovered
     */
    @Override
    public void importDept(List<DeptExcel> data, Boolean isCovered) {
        List<Dept> list = new ArrayList<>();
        data.forEach(deptExcel -> {
            Dept dept = BeanUtil.copy(deptExcel, Dept.class);
            list.add(dept);
        });
        if (isCovered) {
            this.saveOrUpdateBatch(list);
        } else {
            this.saveBatch(list);
        }
    }
    @Override
    public List<DeptExcel> exportDept(DeptExportParam dept) {
          return baseMapper.exportDept(dept);
    }
}
drone-service/drone-system/src/main/java/org/sxkj/system/service/impl/RegionServiceImpl.java
@@ -19,6 +19,7 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
@@ -29,6 +30,7 @@
import org.sxkj.system.entity.Region;
import org.sxkj.system.excel.RegionExcel;
import org.sxkj.system.mapper.RegionMapper;
import org.sxkj.system.param.RegionPageParam;
import org.sxkj.system.service.IRegionService;
import org.sxkj.system.vo.RegionVO;
import org.springframework.stereotype.Service;
@@ -225,6 +227,10 @@
        return treeVo;
    }
    @Override
    public IPage<RegionVO> selectRegionPage(IPage<RegionVO> page, RegionPageParam regionPageParam) {
        return baseMapper.selectRegionPage(page, regionPageParam);
    }
    /**
     * Query regions by parentCode and build a recursive tree structure