/* * 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 com.vci.ubcs.code.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.vci.ubcs.code.entity.CodeClassify; import com.vci.ubcs.code.mapper.CodeClassifyMapper; import com.vci.ubcs.code.service.ICodeClassifyService; import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO; import com.vci.ubcs.code.vo.pagemodel.CodeImProtRusultVO; import com.vci.ubcs.code.wrapper.CodeClassifyWrapper; import com.vci.ubcs.omd.vo.BtmTypeAttributeVO; import com.vci.ubcs.starter.revision.model.TreeQueryObject; import com.vci.ubcs.starter.util.LocalFileUtil; import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject; import com.vci.ubcs.starter.web.pagemodel.DataGrid; import com.vci.ubcs.starter.web.pagemodel.Tree; import com.vci.ubcs.starter.web.util.ControllerUtil; import com.vci.ubcs.starter.web.util.LangBaseUtil; import com.vci.ubcs.starter.web.util.VciBaseUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j2; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.Date; import java.util.List; import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED; import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED; /** * 主题库定义表 控制器 * * @author yuxc * @since 2023-04-06 */ @RestController @AllArgsConstructor @RequestMapping("/codeClassify") @Api(value = "主题库定义表", tags = "主题库定义表接口") @Log4j2 public class CodeClassifyController extends BladeController { private final ICodeClassifyService codeClassifyService; CodeClassifyMapper codeClassifyMapper; /** * 主题库定义表 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入plCodeClassify") public R detail(CodeClassify codeClassify) { CodeClassify detail = codeClassifyMapper.selectOne(Condition.getQueryWrapper(codeClassify)); return R.data(CodeClassifyWrapper.build().entityVO(detail)); } /** * 主题库分类树 * @param treeQueryObject 树形查询对象 * @return 主题库分类显示树 */ @GetMapping("/treeCodeClassify") public List treeCodeClassify(TreeQueryObject treeQueryObject) { return codeClassifyService.treeCodeClassify(treeQueryObject); } /** * 主题库定义表 分页 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入plCodeClassify") public R> list(CodeClassify codeClassify, Query query) { IPage pages = codeClassifyMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClassify)); return R.data(CodeClassifyWrapper.build().pageVO(pages)); } /** * 主题库定义表 自定义分页 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = "传入plCodeClassify") public R> page(CodeClassifyVO codeClassify, Query query) { IPage pages = codeClassifyService.selectPlCodeClassifyPage(Condition.getPage(query), codeClassify); return R.data(pages); } /** * 主题库定义表 新增 * @param */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入plCodeClassify") public R save(@Valid @RequestBody CodeClassify codeClassify) { if(codeClassify.getOrderNum() == null){ codeClassify.setOrderNum(0); } return codeClassifyService.addSave(codeClassify); } /** * 主题库定义表 修改 */ @PostMapping("/editSave") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入plCodeClassify") public R editSave(@Valid @RequestBody CodeClassify codeClassify) { return codeClassifyService.editSave(codeClassify); // return R.status(SqlHelper.retBool(codeClassifyMapper.updateById(codeClassify))); } /** * 主题库定义表 新增或修改 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入plCodeClassify") public R submit(@Valid @RequestBody CodeClassify codeClassify) { if(codeClassify.getOid() != null){ codeClassify.setLastModifier(AuthUtil.getUser().getUserName()); codeClassify.setLastModifyTime(new Date()); return R.status(SqlHelper.retBool(codeClassifyMapper.updateById(codeClassify))); } return codeClassifyService.addSave(codeClassify); } /** * 主题库定义表 删除 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "逻辑删除", notes = "传入oids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String oids) { return R.status(SqlHelper.retBool(codeClassifyMapper.deleteBatchIds(Func.toLongList(oids)))); } /** * 检查 主题库分类是否删除 * @param codeClassify 主题库分类数据传输对象,必须要有oid和ts属性 * @return 执行结果 success为true为可以删除,false表示有数据引用 */ @PostMapping( "/checkIsCanDelete") public R checkIsCanDelete(@Valid @RequestBody CodeClassify codeClassify) { return codeClassifyService.checkIsCanDelete(codeClassify); } /** * 删除主题库分类 * @param codeClassify,oid和ts需要传输 * @return 删除结果反馈::success:成功,fail:失败 */ @DeleteMapping( "/deleteData") public R delCodeClassify(@Valid @RequestBody CodeClassify codeClassify) { return codeClassifyService.deleteCodeClassify(codeClassify); } /** * 启用 * @param codeClassify * @return */ @PostMapping( "/enableData") public R enable(@Valid @RequestBody CodeClassify codeClassify) { return codeClassifyService.updateLcStatus(codeClassify.getOid(),FRAMEWORK_DATA_ENABLED); } /** * 停用 * @param codeClassify * @return */ @PostMapping( "/disableData") public R disable(@Valid @RequestBody CodeClassify codeClassify) { return codeClassifyService.updateLcStatus(codeClassify.getOid(),FRAMEWORK_DATA_DISABLED); } /** * 主键批量获取主题库分类 * @param oids 主键,多个以逗号分隔,但是受性能影响,建议一次查询不超过10000个 * @return 主题库分类显示对象 */ @GetMapping("/listDataByOids") public R listCodeClassifyByOids(String oids){ Collection voCollection = codeClassifyService.listCodeClassifyByOids(VciBaseUtil.str2List(oids)); return R.data(voCollection); } /** * 参照树 主题库分类 * @param treeQueryObject 树形查询对象 * @return 主题库分类显示树 */ @GetMapping("/referTree") public List referTree(TreeQueryObject treeQueryObject) { return codeClassifyService.referTree(treeQueryObject); } /** * 导出分类 * @param oid 分类主键 */ @GetMapping("/exportClassify") public void exportClassify(@ApiParam(value = "主键", required = true) @RequestParam String oid, HttpServletResponse response) throws IOException { String excelName = codeClassifyService.exportClassify(oid); try { ControllerUtil.writeFileToResponse(response,excelName); } catch (Throwable e) { //如果出错,把错误信息写到text String msg = LangBaseUtil.getErrorMsg(e); String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误.txt"; LocalFileUtil.writeContentToFile(msg,errorFile); ControllerUtil.writeFileToResponse(response,errorFile); } } /** * 下载导入的模板 * @param response 响应对象 * @throws IOException 抛出异常 */ @GetMapping("/downloadImportExcel") public void downloadImportExcel(HttpServletResponse response) throws IOException{ String excelName = codeClassifyService.createImportExcel(); try { ControllerUtil.writeFileToResponse(response,excelName); } catch (Throwable e) { //如果出错,把错误信息写到text String msg = LangBaseUtil.getErrorMsg(e); if(StringUtil.isBlank(msg)){ msg = "未知错误"; } ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null); } } /** * 导入分类 * @param file excel的内容 * @return 执行结果,obj有值表示有错误信息,需要访问downloadErrorFile来下载 */ @PostMapping("/importClassify") public R importClassify(MultipartFile file) { String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename()); File file1 = new File(excelFileName); try { file.transferTo(new File(excelFileName)); codeClassifyService.importClassify(file1); return R.success("导入成功!"); }catch (Throwable e) { log.error("导入错误",e); String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误信息.txt"; LocalFileUtil.writeContentToFile(LangBaseUtil.getErrorMsg(e),errorFile); CodeImProtRusultVO codeImProtRusultVO =new CodeImProtRusultVO(); codeImProtRusultVO.setRedisUuid(""); codeImProtRusultVO.setFileOid(ControllerUtil.putErrorFile(errorFile)); codeImProtRusultVO.setFilePath(errorFile); R r = R.fail("导入失败"); r.setData(codeImProtRusultVO); return r; }finally { file1.delete(); } } /** * 下载错误的文件信息 * @param uuid 唯一标识 * @param response 响应对象 * @throws IOException 抛出异常 */ @GetMapping("/downloadErrorFile") public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException { ControllerUtil.downloadErrorFile(response,uuid); } /** * 获取分类关联的属性 * @param baseQueryObject 查询对象,必须有codeClassifyOid,支持id和name两种查询条件(不支持分页) * @return 属性的信息,包含默认的属性 */ @GetMapping("/listClassifyLinkAttr") public DataGrid listClassifyLinkAttr(BaseQueryObject baseQueryObject){ return codeClassifyService.listClassifyLinkAttr(baseQueryObject); } /** * 主键获取主题库分类 * @param oid 主键 * @return 主题库分类显示对象 */ @GetMapping("/getObjectByOid") public R getObjectByOid(String oid){ CodeClassifyVO codeClassifyVO = codeClassifyService.getObjectByOid(oid); return R.data(codeClassifyVO); } /** * 使用编号的路径获取对象 * @param idPath 编号的路径,一定要从最顶层节点开始,格式为xxx/yyy/zz 这样 * @return 分类的显示对象 */ @GetMapping("/getObjectByIdPath") public CodeClassifyVO getObjectByIdPath(String idPath){ return codeClassifyService.getObjectByIdPath(idPath); } /** * 主题库的树 * @param treeQueryObject 树形查询对象 * @return 主题库显示树 */ @GetMapping("/treeTopCodeClassify") public List treeTopCodeClassify(TreeQueryObject treeQueryObject){ return codeClassifyService.treeTopCodeClassify(treeQueryObject); } /** * 主题库定义表 详情 */ @GetMapping("/getObjectByClsfNamePath") public R getObjectByClsfNamePath(String clsfNamePath) { CodeClassifyVO codeClassifyVO = codeClassifyService.getObjectByClsfNamePath(clsfNamePath); return R.data(codeClassifyVO); } /** * 流水依赖生成 */ @GetMapping("/flowingDependencyGen") public R flowingDependencyGen(String classifyOid) { return codeClassifyService.flowingDependencyGen(classifyOid); } }