Преглед изворни кода

Merge remote-tracking branch 'origin/feature/0721-tenant' into feature/0721-tenant

zouxuan пре 1 година
родитељ
комит
f561b7d599

+ 124 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SysAreaController.java

@@ -0,0 +1,124 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.admin.io.request.SysAreaVo;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Validated
+@RestController
+@RequestMapping("/sysArea")
+@Api(tags = "区域表")
+public class SysAreaController {
+
+    @Autowired
+    private SysAreaService sysAreaService;
+
+	/**
+	 * 查询单条
+	 * @param id 详情ID
+	 * @return R<SysAreaVo.SysArea>
+	 */
+	@ApiOperation(value = "详情", notes = "传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<SysAreaWrapper.SysArea> detail(@PathVariable("id") Long id) {
+
+        return R.from(sysAreaService.detail(id));
+	}
+
+	/**
+	 * 根据code查询
+	 * @param code 详情ID
+	 * @return R<SysAreaVo.SysArea>
+	 */
+	@ApiOperation(value = "根据code查询", notes = "传入code")
+    @GetMapping("/queryByCode/{code}")
+    public R<SysArea> queryByCode(@PathVariable("code") Integer code) {
+
+		List<Integer> codeList = new ArrayList<Integer>();
+		codeList.add(code);
+		List<SysArea> list = sysAreaService.queryByCodes(codeList);
+
+		if(list == null || list.size() == 0){
+			throw BizException.from("根据code查询区域表失败");
+		}
+
+        return R.from(list.get(0));
+	}
+
+    /**
+	 * 查询分页
+	 * @param query SysAreaVo.SysAreaQuery
+	 * @return R<PageInfo<SysAreaVo.SysAreaList>>
+	 */
+    @ApiOperation(value = "查询分页", notes = "传入sysAreaSearch")
+    @PreAuthorize("@auditsvc.hasPermissions('sysArea/page', {'BACKEND'})")
+    @PostMapping("/page")
+    public R<PageInfo<SysAreaWrapper.SysArea>> page(@RequestBody SysAreaWrapper.SysAreaQuery query) {
+
+        IPage<SysAreaWrapper.SysArea> pages = sysAreaService.selectPage(QueryInfo.getPage(query), query);
+
+        return R.from(QueryInfo.pageInfo(pages));
+	}
+
+    /**
+     * 查询全部区域
+     * @return R<List<SysAreaVo.Province>>
+     */
+    @ApiOperation(value = "查询全部区域", notes = "查询全部区域")
+    @GetMapping("/queryAllProvince")
+    public R<List<SysAreaVo.Province>> queryAllProvince() {
+
+        List<SysAreaVo.Province> provinces = Lists.newArrayList();
+
+        // 全部城市信息
+        Map<Integer, List<SysArea>> areaMap = sysAreaService.lambdaQuery().list().stream()
+            .filter(x -> x.getDelFlag().equals("0"))
+            .collect(Collectors.groupingBy(SysArea::getParentOrganId));
+
+        SysAreaVo.Province provinceVo;
+        SysAreaVo.City cityVo;
+        for (SysArea province : areaMap.get(0)) {
+
+            provinceVo = JSON.parseObject(JSON.toJSONString(province), SysAreaVo.Province.class)
+                .cities(Lists.newArrayList());
+            provinces.add(provinceVo);
+
+            // 城市信息
+            for (SysArea city : areaMap.get(province.getId())) {
+
+                cityVo = JSON.parseObject(JSON.toJSONString(city), SysAreaVo.City.class);
+                provinceVo.getAreas().add(cityVo);
+
+                if (areaMap.containsKey(city.getId())) {
+                    cityVo.setAreas(JSON.parseArray(JSON.toJSONString(areaMap.get(city.getId())), SysAreaVo.District.class));
+                }
+            }
+        }
+
+        return R.from(provinces);
+    }
+}

+ 124 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenSysAreaController.java

@@ -0,0 +1,124 @@
+package com.yonge.cooleshow.admin.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.admin.io.request.SysAreaVo;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Validated
+@RestController
+@RequestMapping("/open/sysArea")
+@Api(tags = "区域表")
+public class OpenSysAreaController {
+
+    @Autowired
+    private SysAreaService sysAreaService;
+
+    /**
+     * 查询单条
+     * @param id 详情ID
+     * @return R<SysAreaVo.SysArea>
+     */
+    @ApiOperation(value = "详情", notes = "传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<SysAreaWrapper.SysArea> detail(@PathVariable("id") Long id) {
+
+        return R.from(sysAreaService.detail(id));
+    }
+
+    /**
+     * 根据code查询
+     * @param code 详情ID
+     * @return R<SysAreaVo.SysArea>
+     */
+    @ApiOperation(value = "根据code查询", notes = "传入code")
+    @GetMapping("/queryByCode/{code}")
+    public R<SysArea> queryByCode(@PathVariable("code") Integer code) {
+
+        List<Integer> codeList = new ArrayList<Integer>();
+        codeList.add(code);
+        List<SysArea> list = sysAreaService.queryByCodes(codeList);
+
+        if(list == null || list.size() == 0){
+            throw BizException.from("根据code查询区域表失败");
+        }
+
+        return R.from(list.get(0));
+    }
+
+    /**
+     * 查询分页
+     * @param query SysAreaVo.SysAreaQuery
+     * @return R<PageInfo<SysAreaVo.SysAreaList>>
+     */
+    @ApiOperation(value = "查询分页", notes = "传入sysAreaSearch")
+    @PreAuthorize("@auditsvc.hasPermissions('sysArea/page', {'BACKEND'})")
+    @PostMapping("/page")
+    public R<PageInfo<SysAreaWrapper.SysArea>> page(@RequestBody SysAreaWrapper.SysAreaQuery query) {
+
+        IPage<SysAreaWrapper.SysArea> pages = sysAreaService.selectPage(QueryInfo.getPage(query), query);
+
+        return R.from(QueryInfo.pageInfo(pages));
+    }
+
+    /**
+     * 查询全部区域
+     * @return R<List<SysAreaVo.Province>>
+     */
+    @ApiOperation(value = "查询全部区域", notes = "查询全部区域")
+    @GetMapping("/queryAllProvince")
+    public R<List<SysAreaVo.Province>> queryAllProvince() {
+
+        List<SysAreaVo.Province> provinces = Lists.newArrayList();
+
+        // 全部城市信息
+        Map<Integer, List<SysArea>> areaMap = sysAreaService.lambdaQuery().list().stream()
+                .filter(x -> x.getDelFlag().equals("0"))
+                .collect(Collectors.groupingBy(SysArea::getParentOrganId));
+
+        SysAreaVo.Province provinceVo;
+        SysAreaVo.City cityVo;
+        for (SysArea province : areaMap.get(0)) {
+
+            provinceVo = JSON.parseObject(JSON.toJSONString(province), SysAreaVo.Province.class)
+                    .cities(Lists.newArrayList());
+            provinces.add(provinceVo);
+
+            // 城市信息
+            for (SysArea city : areaMap.get(province.getId())) {
+
+                cityVo = JSON.parseObject(JSON.toJSONString(city), SysAreaVo.City.class);
+                provinceVo.getAreas().add(cityVo);
+
+                if (areaMap.containsKey(city.getId())) {
+                    cityVo.setAreas(JSON.parseArray(JSON.toJSONString(areaMap.get(city.getId())), SysAreaVo.District.class));
+                }
+            }
+        }
+
+        return R.from(provinces);
+    }
+}

+ 168 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/SysAreaVo.java

@@ -0,0 +1,168 @@
+package com.yonge.cooleshow.admin.io.request;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+@ApiModel(value = "SysAreaVo对象", description = "区域表查询视图对象")
+public class SysAreaVo {
+
+    @Data
+    @ApiModel(" SysAreaList-区域表")
+    public static class SysAreaQuery implements QueryInfo {
+
+    	@ApiModelProperty("父节点")
+    	private Integer parentId;
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+    }
+
+    @Data
+    @ApiModel(" SysArea-区域表")
+    public static class SysArea {
+
+
+		@ApiModelProperty("")
+        private Integer id;
+
+
+		@ApiModelProperty("名称")
+        private String name;
+
+
+		@ApiModelProperty("编码")
+        private Integer code;
+
+
+		@ApiModelProperty("创建时间")
+        private Date createTime;
+
+
+		@ApiModelProperty("修改时间")
+        private Date updateTime;
+
+
+		@ApiModelProperty("是否删除  -1:已删除  0:正常")
+        private String delFlag;
+
+
+		@ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+    @Data
+    @ApiModel(" SysAreaList-区域表")
+    public static class SysAreaList {
+
+
+		@ApiModelProperty("")
+        private Integer id;
+
+
+		@ApiModelProperty("名称")
+        private String name;
+
+
+		@ApiModelProperty("编码")
+        private Integer code;
+
+
+		@ApiModelProperty("创建时间")
+        private Date createTime;
+
+
+		@ApiModelProperty("修改时间")
+        private Date updateTime;
+
+
+		@ApiModelProperty("是否删除  -1:已删除  0:正常")
+        private String delFlag;
+
+
+		@ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("区域数")
+        private Integer number;
+    }
+
+    @Data
+    @ApiModel("省份")
+    public static class Province implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+
+        @ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("城市")
+        private List<City> areas;
+
+
+        public Province cities(List<City> cities) {
+            this.areas = cities;
+            return this;
+        }
+    }
+
+    @Data
+    @ApiModel("城市")
+    public static class City implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+
+        @ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("地区/街道")
+        private List<District> areas;
+
+    }
+
+    @Data
+    @ApiModel("地区/街道")
+    public static class District implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+    }
+}

+ 48 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysArea.java

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+@Data
+@TableName("sys_area")
+public class SysArea implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Integer id;
+
+    // 名称
+	@TableField(value = "name_")
+    private String name;
+
+    // 编码
+	@TableField(value = "code_")
+    private Integer code;
+
+    // 创建时间
+	@TableField(value = "create_time_")
+    private Date createTime;
+
+    // 修改时间
+	@TableField(value = "update_time_")
+    private Date updateTime;
+
+    // 是否删除  -1:已删除  0:正常
+	@TableField(value = "del_flag_")
+    private String delFlag;
+
+    // 父节点编号
+	@TableField(value = "parent_organ_id_")
+    private Integer parentOrganId;
+
+}

+ 51 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/SysAreaMapper.java

@@ -0,0 +1,51 @@
+package com.yonge.cooleshow.biz.dal.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+public interface SysAreaMapper extends BaseMapper<SysArea>{
+
+	/**
+	 * 分页查询
+	 * @param page IPage<SysAreaWrapper.SysArea>
+	 * @param param SysAreaWrapper.SysAreaQuery
+	 * @return List<SysAreaWrapper.SysArea>
+	 */
+	List<SysAreaWrapper.SysArea> selectPage(@Param("page") IPage<SysAreaWrapper.SysArea> page, @Param("param") SysAreaWrapper.SysAreaQuery param);
+
+	/**
+     * 根据code获取对象
+     * @param codeList
+     * @return
+     */
+    List<SysArea> queryByCodes(@Param("codeList") List<Integer> codeList);
+
+    /**
+     * 区域数量统计
+     * @param areaIds 区域ID
+     * @param delFlag 删除标记
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectProvinceAreaNumberStatInfo(@Param("areaIds") List<Integer> areaIds, @Param("delFlag") Integer delFlag);
+
+    /**
+    * @description: 获取code和name映射
+     * @param codeList
+    * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.String>>
+    * @author zx
+    * @date 2023/1/4 13:46
+    */
+    List<Map> getNameMap(@Param("codeList") Collection codeList);
+}

+ 62 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysAreaService.java

@@ -0,0 +1,62 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+public interface SysAreaService extends IService<SysArea>  {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return SysAreaWrapper.SysArea
+     */
+	SysAreaWrapper.SysArea detail(Long id);
+
+    /**
+     * 分页查询
+     * @param page IPage<SysAreaWrapper.SysArea>
+     * @param query SysAreaWrapper.SysAreaQuery
+     * @return IPage<SysAreaWrapper.SysArea>
+     */
+    IPage<SysAreaWrapper.SysArea> selectPage(IPage<SysAreaWrapper.SysArea> page, SysAreaWrapper.SysAreaQuery query);
+
+    /**
+     * 添加
+     * @param sysArea SysAreaWrapper.SysArea
+     * @return Boolean
+     */
+     Boolean add(SysAreaWrapper.SysArea sysArea);
+
+    /**
+     * 更新
+     * @param sysArea SysAreaWrapper.SysArea
+     * @return Boolean
+     */
+     Boolean update(SysAreaWrapper.SysArea sysArea);
+
+     /**
+      * 根据code获取对象
+      * @param codeList
+      * @return
+      */
+     List<SysArea> queryByCodes(List<Integer> codeList);
+
+     /**
+     * @description: 获取城市code和name映射
+      * @param schoolIds
+     * @return java.util.Map<java.lang.Integer,java.lang.String>
+     * @author zx
+     * @date 2023/1/4 13:40
+     */
+     <K extends Collection> Map<Integer, String> getNameMap(K schoolIds);
+}

+ 127 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysAreaServiceImpl.java

@@ -0,0 +1,127 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.common.enums.EStatus;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+@Slf4j
+@Service
+public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea> implements SysAreaService {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return SysAreaWrapper.SysArea
+     */
+	@Override
+    public SysAreaWrapper.SysArea detail(Long id) {
+
+        SysArea entity =  baseMapper.selectById(id);
+        SysAreaWrapper.SysArea result = new SysAreaWrapper.SysArea();
+
+        BeanUtils.copyProperties(entity, result);
+        return result;
+    }
+
+    /**
+     * 分页查询
+     * @param page IPage<SysAreaWrapper.SysArea>
+     * @param query SysAreaWrapper.SysAreaQuery
+     * @return IPage<SysAreaWrapper.SysArea>
+     */
+    @Override
+    public IPage<SysAreaWrapper.SysArea> selectPage(IPage<SysAreaWrapper.SysArea> page, SysAreaWrapper.SysAreaQuery query){
+
+        List<SysAreaWrapper.SysArea> sysAreas = baseMapper.selectPage(page, query);
+        if (CollectionUtils.isNotEmpty(sysAreas)) {
+            // 统计子级数
+            List<Integer> collect = sysAreas.stream()
+                .filter(x -> x.getCode().toString().endsWith("00"))
+                .map(SysAreaWrapper.SysArea::getId).distinct().collect(Collectors.toList());
+
+            Map<Long, Integer> statMap = Maps.newHashMap();
+            if (CollectionUtils.isNotEmpty(collect)) {
+
+                statMap = getBaseMapper().selectProvinceAreaNumberStatInfo(collect, EStatus.DISABLE.getValue()).stream()
+                    .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+            }
+
+            for (SysAreaWrapper.SysArea item : sysAreas) {
+
+                item.setNumber(statMap.getOrDefault(Long.valueOf(item.getId()), 0));
+            }
+        }
+
+        return page.setRecords(sysAreas);
+    }
+
+    /**
+     * 添加
+     * @param sysArea SysAreaWrapper.SysArea
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(SysAreaWrapper.SysArea sysArea) {
+
+        SysArea result = new SysArea();
+        BeanUtils.copyProperties(sysArea, result);
+
+        return this.save(result);
+    }
+
+    /**
+     * 更新
+     * @param sysArea SysAreaWrapper.SysArea
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(SysAreaWrapper.SysArea sysArea){
+
+        SysArea result = new SysArea();
+        BeanUtils.copyProperties(sysArea, result);
+
+        return this.updateById(result);
+    }
+
+	@Override
+	public List<SysArea> queryByCodes(List<Integer> codeList) {
+        if (CollectionUtils.isEmpty(codeList)) {
+            return Lists.newArrayList();
+        }
+		return baseMapper.queryByCodes(codeList);
+	}
+
+    @Override
+    public <K extends Collection> Map<Integer, String> getNameMap(K codeList) {
+        if(org.springframework.util.CollectionUtils.isEmpty(codeList)){
+            return Collections.emptyMap();
+        }
+        codeList.removeAll(Collections.singleton(null));
+        if(org.springframework.util.CollectionUtils.isEmpty(codeList)){
+            return Collections.emptyMap();
+        }
+        List<Map> mapList = baseMapper.getNameMap(codeList);
+        return mapList.stream().collect(Collectors.toMap(s -> Integer.parseInt(s.get("key").toString()), s -> s.get("value").toString()));
+    }
+}

+ 97 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/SysAreaWrapper.java

@@ -0,0 +1,97 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+public class SysAreaWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+	@AllArgsConstructor
+    public static class SysAreaQuery implements QueryInfo {
+
+        @ApiModelProperty(value = "当前页")
+        private Integer page;
+
+        @ApiModelProperty(value = "分页行数")
+        private Integer rows;
+
+    	@ApiModelProperty(value = "父节点")
+    	private Integer parentId;
+
+    	@ApiModelProperty(value = "关键字匹配")
+		private String keyword;
+
+    }
+
+    @Data
+	@Builder
+	@NoArgsConstructor
+	@AllArgsConstructor
+    @ApiModel("省份区域")
+    public static class SysArea {
+
+        @ApiModelProperty("主键Id")
+		private Integer id;
+
+		@ApiModelProperty("名称")
+		private String name;
+
+		@ApiModelProperty("编码")
+		private Integer code;
+
+		@ApiModelProperty("创建时间")
+		private Date createTime;
+
+		@ApiModelProperty("修改时间")
+		private Date updateTime;
+
+		@ApiModelProperty("是否删除  -1:已删除  0:正常")
+		private String delFlag;
+
+        @ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("子节点数")
+        private Integer number;
+
+        @ApiModelProperty("城市")
+        private List<City> areas;
+
+        public static SysArea from(String json) {
+            return JSON.parseObject(json, SysArea.class);
+        }
+	}
+
+    @Data
+    @ApiModel("城市")
+    public static class City implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+
+        @ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+    }
+}

+ 63 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysAreaMapper.xml

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper">
+
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.SysArea">
+            <result column="id_" property="id" />
+	        <result column="name_" property="name" />
+	        <result column="code_" property="code" />
+	        <result column="create_time_" property="createTime" />
+	        <result column="update_time_" property="updateTime" />
+	        <result column="del_flag_" property="delFlag" />
+	        <result column="parent_organ_id_" property="parentOrganId" />
+		</resultMap>
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.name_ as name
+        , t.code_ as code
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        , t.del_flag_ as delFlag
+        , t.parent_organ_id_ as parentOrganId
+    </sql>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper$SysArea">
+		SELECT
+        	<include refid="baseColumns" />
+		FROM sys_area t
+		<where>
+			<if test="param.parentId != null" >
+				t.parent_organ_id_ = #{param.parentId}
+			</if>
+		</where>
+	</select>
+
+    <select id="queryByCodes" resultMap="BaseResultMap">
+		SELECT t.* FROM sys_area t where t.code_ IN (<foreach collection="codeList" separator="," item="code">#{code}</foreach>)
+	</select>
+
+	<!--区域数统计-->
+	<select id="selectProvinceAreaNumberStatInfo"
+			resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+		SELECT t1.parent_organ_id_ AS id, COUNT(t1.id_) AS total FROM sys_area t1
+		<where>
+			<if test="areaIds != null">
+				AND t1.parent_organ_id_ IN (<foreach collection="areaIds" separator="," item="item">#{item}</foreach>)
+			</if>
+			<if test="delFlag != null">
+				AND t1.del_flag_ = #{delFlag}
+			</if>
+		</where>
+		GROUP BY t1.parent_organ_id_
+	</select>
+    <select id="getNameMap" resultType="java.util.Map">
+        select code_ 'key',name_ 'value' from sys_area where code_ IN
+        <foreach collection="codeList" item="code" open="(" close=")" separator=",">
+            #{code}
+        </foreach>
+    </select>
+    <!--区域数统计-->
+
+</mapper>

+ 124 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/SysAreaController.java

@@ -0,0 +1,124 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+import com.yonge.cooleshow.tenant.io.request.SysAreaVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Validated
+@RestController
+@RequestMapping("/sysArea")
+@Api(tags = "区域表")
+public class SysAreaController {
+
+    @Autowired
+    private SysAreaService sysAreaService;
+
+	/**
+	 * 查询单条
+	 * @param id 详情ID
+	 * @return R<SysAreaVo.SysArea>
+	 */
+	@ApiOperation(value = "详情", notes = "传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<SysAreaWrapper.SysArea> detail(@PathVariable("id") Long id) {
+
+        return R.from(sysAreaService.detail(id));
+	}
+
+	/**
+	 * 根据code查询
+	 * @param code 详情ID
+	 * @return R<SysAreaVo.SysArea>
+	 */
+	@ApiOperation(value = "根据code查询", notes = "传入code")
+    @GetMapping("/queryByCode/{code}")
+    public R<SysArea> queryByCode(@PathVariable("code") Integer code) {
+
+		List<Integer> codeList = new ArrayList<Integer>();
+		codeList.add(code);
+		List<SysArea> list = sysAreaService.queryByCodes(codeList);
+
+		if(list == null || list.size() == 0){
+			throw BizException.from("根据code查询区域表失败");
+		}
+
+        return R.from(list.get(0));
+	}
+
+    /**
+	 * 查询分页
+	 * @param query SysAreaVo.SysAreaQuery
+	 * @return R<PageInfo<SysAreaVo.SysAreaList>>
+	 */
+    @ApiOperation(value = "查询分页", notes = "传入sysAreaSearch")
+    @PreAuthorize("@auditsvc.hasPermissions('sysArea/page', {'BACKEND'})")
+    @PostMapping("/page")
+    public R<PageInfo<SysAreaWrapper.SysArea>> page(@RequestBody SysAreaWrapper.SysAreaQuery query) {
+
+        IPage<SysAreaWrapper.SysArea> pages = sysAreaService.selectPage(QueryInfo.getPage(query), query);
+
+        return R.from(QueryInfo.pageInfo(pages));
+	}
+
+    /**
+     * 查询全部区域
+     * @return R<List<SysAreaVo.Province>>
+     */
+    @ApiOperation(value = "查询全部区域", notes = "查询全部区域")
+    @GetMapping("/queryAllProvince")
+    public R<List<SysAreaVo.Province>> queryAllProvince() {
+
+        List<SysAreaVo.Province> provinces = Lists.newArrayList();
+
+        // 全部城市信息
+        Map<Integer, List<SysArea>> areaMap = sysAreaService.lambdaQuery().list().stream()
+            .filter(x -> x.getDelFlag().equals("0"))
+            .collect(Collectors.groupingBy(SysArea::getParentOrganId));
+
+        SysAreaVo.Province provinceVo;
+        SysAreaVo.City cityVo;
+        for (SysArea province : areaMap.get(0)) {
+
+            provinceVo = JSON.parseObject(JSON.toJSONString(province), SysAreaVo.Province.class)
+                .cities(Lists.newArrayList());
+            provinces.add(provinceVo);
+
+            // 城市信息
+            for (SysArea city : areaMap.get(province.getId())) {
+
+                cityVo = JSON.parseObject(JSON.toJSONString(city), SysAreaVo.City.class);
+                provinceVo.getAreas().add(cityVo);
+
+                if (areaMap.containsKey(city.getId())) {
+                    cityVo.setAreas(JSON.parseArray(JSON.toJSONString(areaMap.get(city.getId())), SysAreaVo.District.class));
+                }
+            }
+        }
+
+        return R.from(provinces);
+    }
+}

+ 124 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenSysAreaController.java

@@ -0,0 +1,124 @@
+package com.yonge.cooleshow.tenant.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysAreaWrapper;
+import com.yonge.cooleshow.tenant.io.request.SysAreaVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Validated
+@RestController
+@RequestMapping("/open/sysArea")
+@Api(tags = "区域表")
+public class OpenSysAreaController {
+
+    @Autowired
+    private SysAreaService sysAreaService;
+
+	/**
+	 * 查询单条
+	 * @param id 详情ID
+	 * @return R<SysAreaVo.SysArea>
+	 */
+	@ApiOperation(value = "详情", notes = "传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<SysAreaWrapper.SysArea> detail(@PathVariable("id") Long id) {
+
+        return R.from(sysAreaService.detail(id));
+	}
+
+	/**
+	 * 根据code查询
+	 * @param code 详情ID
+	 * @return R<SysAreaVo.SysArea>
+	 */
+	@ApiOperation(value = "根据code查询", notes = "传入code")
+    @GetMapping("/queryByCode/{code}")
+    public R<SysArea> queryByCode(@PathVariable("code") Integer code) {
+
+		List<Integer> codeList = new ArrayList<Integer>();
+		codeList.add(code);
+		List<SysArea> list = sysAreaService.queryByCodes(codeList);
+
+		if(list == null || list.size() == 0){
+			throw BizException.from("根据code查询区域表失败");
+		}
+
+        return R.from(list.get(0));
+	}
+
+    /**
+	 * 查询分页
+	 * @param query SysAreaVo.SysAreaQuery
+	 * @return R<PageInfo<SysAreaVo.SysAreaList>>
+	 */
+    @ApiOperation(value = "查询分页", notes = "传入sysAreaSearch")
+    @PreAuthorize("@auditsvc.hasPermissions('sysArea/page', {'BACKEND'})")
+    @PostMapping("/page")
+    public R<PageInfo<SysAreaWrapper.SysArea>> page(@RequestBody SysAreaWrapper.SysAreaQuery query) {
+
+        IPage<SysAreaWrapper.SysArea> pages = sysAreaService.selectPage(QueryInfo.getPage(query), query);
+
+        return R.from(QueryInfo.pageInfo(pages));
+	}
+
+    /**
+     * 查询全部区域
+     * @return R<List<SysAreaVo.Province>>
+     */
+    @ApiOperation(value = "查询全部区域", notes = "查询全部区域")
+    @GetMapping("/queryAllProvince")
+    public R<List<SysAreaVo.Province>> queryAllProvince() {
+
+        List<SysAreaVo.Province> provinces = Lists.newArrayList();
+
+        // 全部城市信息
+        Map<Integer, List<SysArea>> areaMap = sysAreaService.lambdaQuery().list().stream()
+            .filter(x -> x.getDelFlag().equals("0"))
+            .collect(Collectors.groupingBy(SysArea::getParentOrganId));
+
+        SysAreaVo.Province provinceVo;
+        SysAreaVo.City cityVo;
+        for (SysArea province : areaMap.get(0)) {
+
+            provinceVo = JSON.parseObject(JSON.toJSONString(province), SysAreaVo.Province.class)
+                .cities(Lists.newArrayList());
+            provinces.add(provinceVo);
+
+            // 城市信息
+            for (SysArea city : areaMap.get(province.getId())) {
+
+                cityVo = JSON.parseObject(JSON.toJSONString(city), SysAreaVo.City.class);
+                provinceVo.getAreas().add(cityVo);
+
+                if (areaMap.containsKey(city.getId())) {
+                    cityVo.setAreas(JSON.parseArray(JSON.toJSONString(areaMap.get(city.getId())), SysAreaVo.District.class));
+                }
+            }
+        }
+
+        return R.from(provinces);
+    }
+}

+ 168 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/io/request/SysAreaVo.java

@@ -0,0 +1,168 @@
+package com.yonge.cooleshow.tenant.io.request;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 区域表
+ * 2022-11-23 18:28:58
+ */
+@ApiModel(value = "SysAreaVo对象", description = "区域表查询视图对象")
+public class SysAreaVo {
+
+    @Data
+    @ApiModel(" SysAreaList-区域表")
+    public static class SysAreaQuery implements QueryInfo {
+
+    	@ApiModelProperty("父节点")
+    	private Integer parentId;
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+    }
+
+    @Data
+    @ApiModel(" SysArea-区域表")
+    public static class SysArea {
+
+
+		@ApiModelProperty("")
+        private Integer id;
+
+
+		@ApiModelProperty("名称")
+        private String name;
+
+
+		@ApiModelProperty("编码")
+        private Integer code;
+
+
+		@ApiModelProperty("创建时间")
+        private Date createTime;
+
+
+		@ApiModelProperty("修改时间")
+        private Date updateTime;
+
+
+		@ApiModelProperty("是否删除  -1:已删除  0:正常")
+        private String delFlag;
+
+
+		@ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+    @Data
+    @ApiModel(" SysAreaList-区域表")
+    public static class SysAreaList {
+
+
+		@ApiModelProperty("")
+        private Integer id;
+
+
+		@ApiModelProperty("名称")
+        private String name;
+
+
+		@ApiModelProperty("编码")
+        private Integer code;
+
+
+		@ApiModelProperty("创建时间")
+        private Date createTime;
+
+
+		@ApiModelProperty("修改时间")
+        private Date updateTime;
+
+
+		@ApiModelProperty("是否删除  -1:已删除  0:正常")
+        private String delFlag;
+
+
+		@ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("区域数")
+        private Integer number;
+    }
+
+    @Data
+    @ApiModel("省份")
+    public static class Province implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+
+        @ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("城市")
+        private List<City> areas;
+
+
+        public Province cities(List<City> cities) {
+            this.areas = cities;
+            return this;
+        }
+    }
+
+    @Data
+    @ApiModel("城市")
+    public static class City implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+
+        @ApiModelProperty("父节点编号")
+        private Integer parentOrganId;
+
+        @ApiModelProperty("地区/街道")
+        private List<District> areas;
+
+    }
+
+    @Data
+    @ApiModel("地区/街道")
+    public static class District implements Serializable {
+
+        @ApiModelProperty("主键Id")
+        private Integer id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private Integer code;
+    }
+}