package com.qianwen.smartman.modules.cps.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import java.util.List; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.core.boot.ctrl.BladeController; import com.qianwen.core.excel.util.ExcelUtil; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.scanner.modular.annotation.DeleteResource; import com.qianwen.core.scanner.modular.annotation.GetResource; import com.qianwen.core.scanner.modular.stereotype.ApiResource; import com.qianwen.core.secure.annotation.PreAuth; import com.qianwen.core.tenant.annotation.NonDS; import com.qianwen.core.tool.api.R; import com.qianwen.core.tool.node.ForestNodeMerger; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.smartman.modules.cps.convert.OrganizationConvert; import com.qianwen.smartman.modules.cps.dto.OrganizationDTO; import com.qianwen.smartman.modules.cps.excel.OrganizationExcel; import com.qianwen.smartman.modules.cps.service.IOrganizationService; import com.qianwen.smartman.modules.cps.vo.OrganizationSelectVO; import com.qianwen.smartman.modules.cps.vo.OrganizationVO; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.resource.enums.TemplateEnum; import com.qianwen.smartman.modules.resource.service.ISystemResourceService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @Api(value = "组织结构", tags = {"组织结构"}) @RestController @ApiResource({"smis/organization"}) @NonDS public class OrganizationController extends BladeController { private final IOrganizationService organizationService; private final OssBuilder ossBuilder; private final ISystemResourceService systemResourceService; public OrganizationController(final IOrganizationService organizationService, final OssBuilder ossBuilder, final ISystemResourceService systemResourceService) { this.organizationService = organizationService; this.ossBuilder = ossBuilder; this.systemResourceService = systemResourceService; } @ApiOperationSupport(order = 1) @GetResource({"/tree"}) @ApiOperation("树形结构") public R> tree(@Validated OrganizationSelectVO organizationSelectVO) { if (organizationSelectVO.getStatus() == null) { organizationSelectVO.setStatus(CommonConstant.ENABLE); } List list = this.organizationService.selectList(organizationSelectVO); return R.data(ForestNodeMerger.merge(OrganizationConvert.INSTANCE.convert(list))); } @ApiOperationSupport(order = 1) @GetResource({"/list"}) @ApiOperation("列表") public R> list(@Validated OrganizationSelectVO organizationSelectVO) { if (organizationSelectVO.getStatus() == null) { organizationSelectVO.setStatus(CommonConstant.ENABLE); } List list = this.organizationService.selectList(organizationSelectVO); return R.data(list); } @ApiOperationSupport(order = 2) @ApiOperation("删除组织") @PreAuth @DeleteResource public R deleteOrganization(@RequestParam @ApiParam(value = "主键", required = true) String ids, @RequestParam("type") @ApiParam("删除传0 停用传1") Integer type) { return R.data(this.organizationService.deleteOrganization(ids, type)); } @ApiOperationSupport(order = 3) @GetResource({"/export-template"}) @ApiOperation("导出模板") @PreAuth public R exportTemplate() { return R.data(this.systemResourceService.getBusinessTemplateInfo(TemplateEnum.ORGANIZATION)); } @ApiOperationSupport(order = 4) @GetResource({"/export-organization"}) @ApiOperation("导出组织") @PreAuth public R exportOrganization(OrganizationSelectVO organizationSelectVO) { List list = this.organizationService.getExportOrganizationData(organizationSelectVO); String fileName = String.format("%s-%s.xlsx", "部门数据", DateUtil.time()); MultipartFile multipartFile = ExcelUtil.exportToMultipartFile(fileName, "部门数据表", list, OrganizationExcel.class); BladeFile bladeFile = this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile); return R.data(bladeFile); } }