jiangping
2024-11-26 f1864f6d2d85b49fc901b22e9f6759a5d0fb360b
开发更新
已添加6个文件
841 ■■■■■ 文件已修改
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/AreasCloudController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/AreasMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AreasDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Areas.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/AreasService.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java 458 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/AreasCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
package com.doumee.cloud.admin;
import com.doumee.api.BaseController;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dto.AreasDto;
import com.doumee.dao.business.model.Areas;
import com.doumee.service.business.AreasService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/02/15 08:55
 */
@Api(tags = "省市区信息表")
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/areas")
public class AreasCloudController extends BaseController {
    @Autowired
    private AreasService areasService;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:areas:create")
    public ApiResponse create(@RequestBody Areas areas,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        areas.setLoginUserInfo(getLoginUser(token));
        return ApiResponse.success(areasService.create(areas));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:areas:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        areasService.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:areas:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        areasService.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @RequiresPermissions("business:areas:update")
    public ApiResponse updateById(@RequestBody Areas areas,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        areas.setLoginUserInfo(getLoginUser(token));
        areasService.updateById(areas);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
//    @RequiresPermissions("business:areas:query")
    public ApiResponse<PageData<Areas>> findPage (@RequestBody PageWrap<Areas> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(areasService.findPage(pageWrap));
    }
    @ApiOperation("全部树形查询")
    @PostMapping("/treeList")
//    @RequiresPermissions("business:areas:query")
    public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        Areas a = new Areas();
        BeanUtils.copyProperties(pageWrap,a);
        return ApiResponse.success(areasService.findList(a));
    }
    @ApiOperation("根据父节点查下")
    @PostMapping("/listByParentId")
//    @RequiresPermissions("business:areas:query")
    public ApiResponse<List<Areas>> listByParentId (@RequestBody AreasDto pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        Areas a = new Areas();
        BeanUtils.copyProperties(pageWrap,a);
//        PageWrap<Areas> wrap = new PageWrap<>();
//        wrap.setPage(Constants.ONE);
//        wrap.setCapacity(9999);
//        wrap.setModel(a);
        return ApiResponse.success(areasService.listByParentId(a));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:areas:exportExcel")
    public void exportExcel (@RequestBody PageWrap<Areas> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(Areas.class).export(areasService.findPage(pageWrap).getRecords(), "省市区信息表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:areas:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(areasService.findById(id));
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/AreasMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.dao.business;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Areas;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/02/15 08:55
 */
public interface AreasMapper extends BaseMapper<Areas> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AreasDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.dao.business.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * @author Eva.Caesar Liu
 * @date 2023/02/14 11:14
 */
@Data
@ApiModel("省市区查询参数")
public class AreasDto implements Serializable {
    @ApiModelProperty(value = "名称" )
    private String name;
    @ApiModelProperty(value = "类型 0省 1市 2区县", example = "1")
    private Integer type;
    @ApiModelProperty(value = "父节点编码", example = "1")
    private Integer parentId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Areas.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
package com.doumee.dao.business.model;
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 com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * çœå¸‚区信息表
 * @author æ±Ÿè¹„蹄
 * @date 2023/02/15 08:55
 */
@Data
@ApiModel("省市区信息表")
@TableName("`areas`")
public class Areas extends LoginUserModel implements Cloneable{
    @ApiModelProperty(value = "主键", example = "1")
    @ExcelColumn(name="主键")
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "创建人编码", example = "1")
    @ExcelColumn(name="创建人编码")
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
    @ExcelColumn(name="更新人编码")
    private Integer editor;
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "名称")
    @ExcelColumn(name="名称")
    private String name;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String info;
    @ApiModelProperty(value = "行政区代码")
    @ExcelColumn(name="行政区代码")
    private String code;
    @ApiModelProperty(value = "父级编码(关联areas表)", example = "1")
    @ExcelColumn(name="父级编码(关联areas表)")
    private Integer parentId;
    @ApiModelProperty(value = "类型 0省 1市 2区县", example = "1")
    @ExcelColumn(name="类型 0省 1市 2区县")
    private Integer type;
    @ApiModelProperty(value = "排序码", example = "1")
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @TableField(exist = false)
    private List<Areas> childList;
    @TableField(exist = false)
    private Integer provinceId;
    @TableField(exist = false)
    private String provinceName;
    @TableField(exist = false)
    private Integer cityId;
    @TableField(exist = false)
    private String cityName;
    //实现Cloneable的clone方法,将clone定义为public
    public Areas clone()   {
        try {
            return (Areas) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    public String toString() {
        return "Areas{" +
            "id=" + id +
            ", creator=" + creator +
            ", createDate=" + createDate +
            ", editor=" + editor +
            ", editDate=" + editDate +
            ", isdeleted=" + isdeleted +
            ", name='" + name + '\'' +
            ", info='" + info + '\'' +
            ", code='" + code + '\'' +
            ", parentId=" + parentId +
            ", type=" + type +
            '}';
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/AreasService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
package com.doumee.service.business;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Areas;
import java.util.List;
/**
 * çœå¸‚区信息表Service定义
 * @author æ±Ÿè¹„蹄
 * @date 2023/02/15 08:55
 */
public interface AreasService {
    /**
     * åˆ›å»º
     *
     * @param areas å®žä½“对象
     * @return Integer
     */
    Integer create(Areas areas);
    /**
     * ä¸»é”®åˆ é™¤
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    /**
     * åˆ é™¤
     *
     * @param areas å®žä½“对象
     */
    void delete(Areas areas);
    /**
     * æ‰¹é‡ä¸»é”®åˆ é™¤
     *
     * @param ids ä¸»é”®é›†
     */
    void deleteByIdInBatch(List<Integer> ids);
    /**
     * ä¸»é”®æ›´æ–°
     *
     * @param areas å®žä½“对象
     */
    void updateById(Areas areas);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
     *
     * @param areass å®žä½“集
     */
    void updateByIdInBatch(List<Areas> areass);
    /**
     * ä¸»é”®æŸ¥è¯¢
     *
     * @param id ä¸»é”®
     * @return Areas
     */
    Areas findById(Integer id);
    /**
     * æ ¹æ®id和type查询对象信息
     * @param id
     * @param type null æŸ¥è¯¢å…¨éƒ¨ 0省份 1城市 2区域
     * @return
     */
    Areas findById(Integer id,Integer type);
    Areas findByName(String name,Integer type);
    Areas findByNameAndParentId(String name,Integer type,Integer parentId);
    List<Areas> findByParentId(Integer type,Integer parentId);
    List<Areas> findChildByParentId(Integer id,List<Areas>  list);
    boolean isAreaValid(String proName,String cityName,String areaName);
    /**
     * æ¡ä»¶æŸ¥è¯¢å•条记录
     *
     * @param areas å®žä½“对象
     * @return Areas
     */
    Areas findOne(Areas areas);
    /**
     * æ¡ä»¶æŸ¥è¯¢
     *
     * @param areas å®žä½“对象
     * @return List<Areas>
     */
    List<Areas> findList(Areas areas);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<Areas>
     */
    PageData<Areas> findPage(PageWrap<Areas> pageWrap);
    /**
     * æ¡ä»¶ç»Ÿè®¡
     *
     * @param areas å®žä½“对象
     * @return long
     */
    long count(Areas areas);
    void cacheData();
    Areas findByCityAndArea(String cityName, String areasName);
    String getAddress(Integer cityId,Integer areaId);
    List<Areas> listByParentId(Areas model);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,458 @@
package com.doumee.service.business.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.AreasMapper;
import com.doumee.dao.business.model.Areas;
import com.doumee.service.business.AreasService;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
 * çœå¸‚区信息表Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/02/15 08:55
 */
@Service
public class AreasServiceImpl implements AreasService {
    public static   List<Areas> ALL_AREA_LIST;
    public static   List<Areas> PROVINCE_LIST;
    public static   List<Areas> CITY_LIST;
    public static   List<Areas> AREA_LIST;
    public static   List<Areas> ALL_AREA_TREE;
    @Autowired
    private AreasMapper areasMapper;
    @Override
    public Integer create(Areas areas) {
        LoginUserInfo user = areas.getLoginUserInfo();
/*
        if (Objects.isNull(areas.getParentId())){
            areas.setType(Constants.ZERO);
        }else {
            Areas parentArea = areasMapper.selectById(areas.getParentId());
            if (Objects.isNull(parentArea)){
                areas.setType(Constants.ZERO);
            }else {
                areas.setType(parentArea.getType()+Constants.ONE);
            }
        }*/
        areas.setCreateDate(new Date());
        areas.setEditDate(new Date());
        areas.setCreator(user.getId());
        areas.setEditor(user.getId());
        areas.setIsdeleted(Constants.ZERO);
        areasMapper.insert(areas);
        //刷新缓存数据
        cacheData();
        return areas.getId();
    }
    @Override
    public void deleteById(Integer id) {
        areasMapper.deleteById(id);
        //刷新缓存数据
        cacheData();
    }
    @Override
    public void delete(Areas areas) {
        UpdateWrapper<Areas> deleteWrapper = new UpdateWrapper<>(areas);
        areasMapper.delete(deleteWrapper);
        //刷新缓存数据
        cacheData();
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        areasMapper.deleteBatchIds(ids);
        //刷新缓存数据
        cacheData();
    }
    @Override
    public void updateById(Areas areas) {
        UpdateWrapper<Areas> wrapper = new UpdateWrapper<>();
        wrapper.lambda().eq(Areas::getId,areas.getId());
        Areas update = new Areas();
        update.setName(areas.getName());
        update.setSortnum(areas.getSortnum());
        areasMapper.update(update,wrapper);
        //刷新缓存数据
        cacheData();
    }
    @Override
    public void updateByIdInBatch(List<Areas> areass) {
        if (CollectionUtils.isEmpty(areass)) {
            return;
        }
        for (Areas areas: areass) {
            this.updateById(areas);
        }
        //刷新缓存数据
        cacheData();
    }
    @Override
    public Areas findById(Integer id) {
        if(ALL_AREA_LIST!=null){
            for(Areas a : ALL_AREA_LIST){
                if(Constants.equalsInteger(a.getId(),id)){
                    return a;
                }
            }
        }
   //     return areasMapper.selectById(id);
        return  null;
    }
    @Override
    public Areas findById(Integer id,Integer type) {
        List<Areas> list = null;
        if(type == null){
            list = ALL_AREA_LIST;
        }else if(Constants.equalsInteger(type,Constants.ZERO)){
            list = PROVINCE_LIST;
        }else  if(Constants.equalsInteger(type,Constants.ONE)){
            list = CITY_LIST;
        } else if (Constants.equalsInteger(type,Constants.TWO)){
            list =  AREA_LIST;
        }
        if(list!=null){
            for(Areas a : list){
                if(Constants.equalsInteger(a.getId(),id)){
                    return a;
                }
            }
        }
        return null;
    }
    @Override
    public Areas findByName(String name,Integer type){
        List<Areas> list = null;
        if(type == null){
            list = ALL_AREA_LIST;
        }else if(Constants.equalsInteger(type,Constants.ZERO)){
            list = PROVINCE_LIST;
        }else  if(Constants.equalsInteger(type,Constants.ONE)){
            list = CITY_LIST;
        } else if (Constants.equalsInteger(type,Constants.TWO)){
            list =  AREA_LIST;
        }
        if(list!=null){
            for(Areas a : list){
                if(StringUtils.equals(name,a.getName())){
                    return a;
                }
            }
        }
        return null;
    }
    @Override
    public Areas findByNameAndParentId(String name,Integer type,Integer parentId){
        List<Areas> list = null;
        if(type == null){
            list = ALL_AREA_LIST;
        }else if(Constants.equalsInteger(type,Constants.ZERO)){
            list = PROVINCE_LIST;
        }else  if(Constants.equalsInteger(type,Constants.ONE)){
            list = CITY_LIST;
        } else if (Constants.equalsInteger(type,Constants.TWO)){
            list =  AREA_LIST;
        }
        if(list!=null){
            for(Areas a : list){
                if(StringUtils.equals(name,a.getName()) && Constants.equalsInteger(parentId,a.getParentId())){
                    return a;
                }
            }
        }
        return null;
    }
    @Override
    public List<Areas> findByParentId(Integer type, Integer parentId) {
        List<Areas> list = null;
        if(type == null){
            list = ALL_AREA_LIST;
        }else if(Constants.equalsInteger(type,Constants.ZERO)){
            list = PROVINCE_LIST;
        }else  if(Constants.equalsInteger(type,Constants.ONE)){
            list = CITY_LIST;
        } else if (Constants.equalsInteger(type,Constants.TWO)){
            list =  AREA_LIST;
        }
        if(list!=null){
            return list.stream().filter(s->Constants.equalsInteger(s.getParentId(),parentId)).collect(Collectors.toList());
        }
        return null;
    }
    @Override
    public List<Areas> findChildByParentId(Integer id,List<Areas> list){
        List<Areas> result =null;
        if(list == null){
            list = ALL_AREA_LIST;
        }
        if(list!=null && list.size()>0){
            for(Areas model :list){
                if(Constants.equalsInteger(id,model.getParentId())){
                    if(result == null){
                        result = new ArrayList<>();
                    }
                    result.add(model );
                }
            }
        }
        return result;
    }
    @Override
    public boolean isAreaValid(String proName,String cityName,String areaName){
        Areas pro = findByName(proName,Constants.ZERO);
        if(pro == null){
            return  false;
        }
        Areas city = findByName(proName,Constants.ONE);
        if(city == null && !Constants.equalsInteger(city.getParentId(),pro.getId())){
            return  false;
        }
        Areas area = findByName(proName,Constants.TWO);
        if(area == null && !Constants.equalsInteger(area.getParentId(),city.getId())){
            return  false;
        }
        return false;
    }
    @Override
    public Areas findOne(Areas areas) {
        QueryWrapper<Areas> wrapper = new QueryWrapper<>(areas);
        return areasMapper.selectOne(wrapper);
    }
    @Override
    public List<Areas> findList(Areas areas) {
        List<Areas> list = null;
        Integer type =areas.getType();
        if(type == null){
            list = ALL_AREA_LIST;
        }else if(Constants.equalsInteger(type,Constants.ZERO)){
            list = PROVINCE_LIST;
        }else  if(Constants.equalsInteger(type,Constants.ONE)){
            list = CITY_LIST;
        } else if (Constants.equalsInteger(type,Constants.TWO)){
            list =  AREA_LIST;
        }
        List<Areas> result = null;
        if(StringUtils.isNotBlank(areas.getName())){
            for(Areas a : list){
                if(StringUtils.contains(a.getName(),areas.getName())){
                    if(result == null){
                        result = new ArrayList<>();
                    }
                    result.add(a);
                }
            }
            return  result;
        }
        return list;
    }
    @Override
    public  List<Areas> listByParentId(Areas areas) {
        List<Areas> list = null;
        Integer type =areas.getType();
        if(type == null){
            list = ALL_AREA_LIST;
        }else if(Constants.equalsInteger(type,Constants.ZERO)){
            list = PROVINCE_LIST;
        }else  if(Constants.equalsInteger(type,Constants.ONE)){
            list = CITY_LIST;
        } else if (Constants.equalsInteger(type,Constants.TWO)){
            list =  AREA_LIST;
        }
        List<Areas> result = null;
        if(list!=null){
            for(Areas a : list){
                if(result == null){
                    result = new ArrayList<>();
                }
                if( areas.getParentId() == null
                        ||(areas.getParentId() !=null) && Constants.equalsInteger(a.getParentId(),areas.getParentId())){
                    Areas t = new Areas();
                    BeanUtils.copyProperties(a,t);
                    t.setChildList(null);
                    result.add(t);
                }
            }
        }
        return result;
    }
    @Override
    public  void cacheData() {
       Areas a = new Areas();
       a.setIsdeleted(Constants.ZERO);
       ALL_AREA_LIST = null;
       PROVINCE_LIST =null;
       CITY_LIST=null;
       AREA_LIST = null;
       ALL_AREA_TREE = null;
       ALL_AREA_LIST =  areasMapper.selectList(new QueryWrapper<>(a).lambda().orderByDesc(Areas::getSortnum));
       if(ALL_AREA_LIST!=null){
           for(Areas model : ALL_AREA_LIST){
                if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
                    if(PROVINCE_LIST == null){
                        PROVINCE_LIST = new ArrayList<>();
                    }
                    PROVINCE_LIST.add(model);
                }else if(Constants.equalsInteger(model.getType(),Constants.ONE)){
                    if(CITY_LIST == null){
                        CITY_LIST = new ArrayList<>();
                    }
                    CITY_LIST.add(model);
                    if(model.getParentId() != null){
                        Areas p = findById(model.getParentId());
                        if(p!=null  ){
                            model.setProvinceId(p.getId());
                            model.setProvinceName(p.getName());
                        }
                    }
                }else if(Constants.equalsInteger(model.getType(),Constants.TWO)){
                    if(AREA_LIST == null){
                        AREA_LIST = new ArrayList<>();
                    }
                    AREA_LIST.add(model);
                    Areas city = findById(model.getParentId());
                    if(city!=null  ){
                        model.setCityId(city.getId());
                        model.setCityName(city.getName());
                        if(city!=null && city.getParentId()!=null){
                            Areas p = findById(city.getParentId());
                            if(p!=null  ){
                                model.setProvinceId(p.getId());
                                model.setProvinceName(p.getName());
                            }
                        }
                    }
                }
           }
       }
       if(CITY_LIST!=null){
           for(Areas aa : CITY_LIST){
               aa.setChildList(findChildByParentId(aa.getId(), AREA_LIST));
           }
       }
       if(PROVINCE_LIST!=null){
           for(Areas aa : PROVINCE_LIST){
               aa.setChildList(findChildByParentId(aa.getId(),CITY_LIST));
           }
       }
       System.out.println("=================");
    }
    @Override
    public PageData<Areas> findPage(PageWrap<Areas> pageWrap) {
        IPage<Areas> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Areas> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Areas::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Areas::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Areas::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Areas::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Areas::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Areas::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Areas::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Areas::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().eq(Areas::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getInfo() != null) {
            queryWrapper.lambda().eq(Areas::getInfo, pageWrap.getModel().getInfo());
        }
        if (pageWrap.getModel().getCode() != null) {
            queryWrapper.lambda().eq(Areas::getCode, pageWrap.getModel().getCode());
        }
        if (pageWrap.getModel().getParentId() != null) {
            queryWrapper.lambda().eq(Areas::getParentId, pageWrap.getModel().getParentId());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Areas::getType, pageWrap.getModel().getType());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(areasMapper.selectPage(page, queryWrapper));
    }
    @Override
    public long count(Areas areas) {
        QueryWrapper<Areas> wrapper = new QueryWrapper<>(areas);
        return areasMapper.selectCount(wrapper);
    }
    @Override
    public Areas findByCityAndArea(String cityName, String areasName) {
        Areas city = findByName(cityName,Constants.ONE);
        if(city !=null){
           return  findByNameAndParentId(areasName,Constants.TWO,city.getId());
        }
        return null;
    }
    @Override
    public String getAddress(Integer cityId,Integer areaId){
        Areas cityAreas = findById(cityId, Constants.ONE);
        Areas areas = findById(areaId, Constants.TWO);
        String cityName = Optional.ofNullable(cityAreas)
                .map(s -> s.getProvinceName() + s.getName())
                .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST));
        String areaName = Optional.ofNullable(areas).map(s -> s.getName()).orElse("");
        return cityName+areaName;
    }
}