/* * 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.controller; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.*; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; 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; 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.DeptImportExcel; import org.sxkj.system.excel.RegionExcel; import org.sxkj.system.excel.RegionImportExcel; import org.sxkj.system.excel.RegionImporter; import org.sxkj.system.param.RegionAddParam; import org.sxkj.system.param.RegionExportParam; import org.sxkj.system.param.RegionPageParam; import org.sxkj.system.service.IRegionService; import org.sxkj.system.util.excel.RegionSheetWriteHandler; import org.sxkj.system.vo.RegionVO; import org.sxkj.system.vo.TreeVo; import org.sxkj.system.wrapper.RegionWrapper; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; /** * 行政区划表 控制器 * * @author Chill */ @NonDS @RestController @AllArgsConstructor @RequestMapping("/region") @Api(value = "行政区划", tags = "行政区划") public class RegionController extends BladeController { private final IRegionService regionService; /** * 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入region") public R detail(Region region) { Region detail = regionService.getOne(Condition.getQueryWrapper(region)); return R.data(RegionWrapper.build().entityVO(detail)); } /** * 分页 行政区划表 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入region") public R> list(Region region, Query query) { IPage pages = regionService.page(Condition.getPage(query), Condition.getQueryWrapper(region)); return R.data(pages); } /** * 行政区划表 自定义分页 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = " ") public R> page(RegionPageParam regionPageParam, Query query) { IPage pages = regionService.selectRegionPage(Condition.getPage(query), regionPageParam); return R.data(pages); } /** * 懒加载列表 */ @GetMapping("/lazy-list") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "区划编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "区划名称", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 3) @ApiOperation(value = "懒加载列表", notes = "传入menu") public R> lazyList(String parentCode, @ApiIgnore @RequestParam Map menu) { List list = regionService.lazyList(parentCode, menu); return R.data(RegionWrapper.build().listNodeLazyVO(list)); } /** * 懒加载列表 */ @GetMapping("/lazy-tree") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "区划编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "name", value = "区划名称", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 4) @ApiOperation(value = "懒加载列表", notes = "传入menu") public R> lazyTree(String parentCode, @ApiIgnore @RequestParam Map menu) { List list = regionService.lazyTree(parentCode, menu); return R.data(RegionWrapper.build().listNodeLazyVO(list)); } /** * 新增 行政区划表 */ // @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)); // } /** * 修改 行政区划表 */ @PostMapping("/update") @ApiOperationSupport(order = 6) @ApiOperation(value = "修改", notes = "传入region") @ApiLog("行政区划数据修改") public R update(@Valid @RequestBody Region region) { region.setUpdateTime(DateUtil.now()); return R.status(regionService.updateById(region)); } /** * 新增或修改 行政区划表 */ @PostMapping("/submit") @ApiOperationSupport(order = 7) @ApiOperation(value = "新增或修改", notes = "传入region") @ApiLog("行政区划数据新增或修改") public R submit(@Valid @RequestBody RegionAddParam region) { Region regionEntity = Objects.requireNonNull(BeanUtil.copy(region, Region.class)); regionEntity.setUpdateTime(DateUtil.now()); regionEntity.setCreateTime(DateUtil.now()); return R.status(regionService.submit(regionEntity)); } /** * 删除 行政区划表 */ @PostMapping("/remove") @ApiOperationSupport(order = 8) @ApiOperation(value = "删除", notes = "传入主键") @ApiLog("行政区划数据删除") public R remove(@ApiParam(value = "主键", required = true) @RequestParam String id) { return R.status(regionService.removeRegion(id)); } /** * 行政区划下拉数据源 */ @GetMapping("/select") @ApiOperationSupport(order = 9) @ApiOperation(value = "下拉数据源", notes = "传入tenant") public R> select(@RequestParam(required = false, defaultValue = "000000000000") String code) { List list = regionService.list(Wrappers.query().lambda().eq(Region::getParentCode, code)); return R.data(list); } /** * 导入行政区划数据 */ @PostMapping("import-region") @ApiOperationSupport(order = 10) @ApiOperation(value = "导入行政区划", notes = "传入excel") public R importRegion(MultipartFile file, Integer isCovered) { RegionImporter regionImporter = new RegionImporter(regionService, isCovered == 1); ExcelUtil.save(file, regionImporter, RegionImportExcel.class); return R.success("操作成功"); } /** * 导出行政区划数据 */ @GetMapping("export-region") @ApiOperationSupport(order = 11) @ApiOperation(value = "导出行政区划", notes = "传入user") public void exportRegion(RegionExportParam region, HttpServletResponse response) { List list = regionService.exportRegion(region); ExcelUtil.export(response, "行政区划数据" + DateUtil.time(), "行政区划数据表", list, RegionExcel.class); } /** * 导出模板 */ @GetMapping("export-template") @ApiOperationSupport(order = 16) @ApiOperation(value = "导出模板") public void exportUser(HttpServletResponse response) throws IOException { // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding(StandardCharsets.UTF_8.name()); String fileName = URLEncoder.encode("行政区划模板", StandardCharsets.UTF_8.name()); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // 准备空数据列表 List list = new ArrayList<>(); // 使用EasyExcel导出,并注册RegionSheetWriteHandler EasyExcel.write(response.getOutputStream(), RegionImportExcel.class) .registerWriteHandler(new RegionSheetWriteHandler()) .sheet("行政区划表") .doWrite(list); } /** * 区域数据处理 */ @GetMapping("regionDataHandle") @ApiOperationSupport(order = 13) @ApiOperation(value = "区域数据处理") @ApiLog("区域数据处理") public void regionDataHandle() { regionService.regionDataHandle(); } @GetMapping("findRegionByPartnerCode") @ApiOperationSupport(order = 13) @ApiOperation(value = "查询父级下的所有县级以上单位") @ApiLog("查询父级下的所有县级以上单位") public R regionDataHandle(String parentCode) { TreeVo regionVOS = regionService.buildRegionTree(parentCode); return R.data(regionVOS); } }