CostSurveyTemplateController.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. package com.hotent.surveyinfo.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.hotent.base.annotation.ApiGroup;
  4. import com.hotent.base.constants.ApiGroupConsts;
  5. import com.hotent.base.query.PageList;
  6. import com.hotent.base.util.PinyinUtil;
  7. import com.hotent.common.CrudService;
  8. import com.hotent.resp.PageResp;
  9. import com.hotent.surveyinfo.dao.CostSurveyTemplateDao;
  10. import com.hotent.surveyinfo.dao.CostSurveyTemplateHeadersDao;
  11. import com.hotent.surveyinfo.dao.CostSurveyTemplateItemsDao;
  12. import com.hotent.surveyinfo.manager.*;
  13. import com.hotent.surveyinfo.model.*;
  14. import com.hotent.surveyinfo.req.ConstSurveyPageParam;
  15. import com.hotent.surveyinfo.req.ConstSurveyPageReq;
  16. import com.hotent.uc.api.model.IUser;
  17. import com.hotent.uc.util.ContextUtil;
  18. import io.swagger.annotations.Api;
  19. import org.apache.poi.ss.usermodel.Cell;
  20. import org.apache.poi.ss.usermodel.Row;
  21. import org.apache.poi.ss.usermodel.Sheet;
  22. import org.apache.poi.ss.usermodel.Workbook;
  23. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.web.bind.annotation.*;
  26. import com.hotent.base.model.CommonResult;
  27. import com.hotent.base.util.StringUtil;
  28. import io.swagger.annotations.ApiOperation;
  29. import io.swagger.annotations.ApiParam;
  30. import com.hotent.base.controller.BaseController;
  31. import javax.servlet.http.HttpServletResponse;
  32. import java.net.URLEncoder;
  33. import java.time.LocalDateTime;
  34. import java.util.*;
  35. import java.util.stream.Collectors;
  36. /**
  37. * 成本调查表模板表 前端控制器
  38. *
  39. * @author 超级管理员
  40. * @company 山西清众科技股份有限公司
  41. * @since 2025-09-19
  42. */
  43. @RestController
  44. @RequestMapping("/costSurveyTemplate/v1/")
  45. @Api(tags = "成本调查")
  46. @ApiGroup(group = {ApiGroupConsts.GROUP_COST})
  47. public class CostSurveyTemplateController extends BaseController<CostSurveyTemplateManager, CostSurveyTemplate> {
  48. @Autowired
  49. CostSurveyTemplateManager constbaseService;
  50. @Autowired
  51. CostSurveyTemplateDao costSurveyTemplateDao;
  52. @Autowired
  53. CostSurveyTemplateVersionManager costSurveyTemplateVersionMapper;
  54. @Autowired
  55. CostSurveyTemplateHeadersDao costSurveyTemplateHeadersDao;
  56. @Autowired
  57. CostSurveyTemplateItemsDao costSurveyTemplateItemsDao;
  58. @Autowired
  59. private CostVerifyTemplateManager costVerifyTemplateManager;
  60. @Autowired
  61. private CostVerifyTemplateHeadersManager costVerifyTemplateHeadersManager;
  62. @Autowired
  63. private CostVerifyTemplateItemsManager costVerifyTemplateItemsManager;
  64. // 创建通用服务实例
  65. private final CrudService crudService = new CrudService();
  66. /**
  67. * 获取所有成本调查表模板数据
  68. *
  69. * @return
  70. * @throws Exception
  71. */
  72. @PostMapping(value = "/listPage")
  73. @ApiOperation(value = "获取成本调查表模板数据", httpMethod = "POST", notes = "获取所有成本调查表模板数据集合")
  74. public PageList<CostSurveyTemplate> listPage(
  75. @RequestBody ConstSurveyPageParam params) throws Exception {
  76. return constbaseService.getCostSurveyListPage(params);
  77. }
  78. /**
  79. * 获取所有现行版启用的成本调查表模板数据
  80. *
  81. * @return
  82. * @throws Exception
  83. */
  84. @GetMapping(value = "/getallCurrentCostSurveyList")
  85. @ApiOperation(value = "获取所有现行版启用的成本调查表模板数据", httpMethod = "GET", notes = "获取所有现行版启用的成本调查表模板数据")
  86. public PageResp<CostSurveyTemplate> allCurrentCostSurveyList(ConstSurveyPageReq req) throws Exception {
  87. return crudService.pageQuery(req, constbaseService::getallCurrentCostSurveyList);
  88. }
  89. /**
  90. * 根据id获取成本调查表模板表数据详情
  91. *
  92. * @param id
  93. * @return
  94. * @throws Exception ModelAndView
  95. */
  96. @GetMapping(value = "/getDetail")
  97. @ApiOperation(value = "根据id获取成本调查表模板表数据详情", httpMethod = "GET", notes = "根据id获取成本调查表模板表数据详情")
  98. public CommonResult<CostSurveyTemplate> getDetail(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception {
  99. return CommonResult.<CostSurveyTemplate>ok().value(baseService.getDetail(id));
  100. }
  101. /**
  102. * 新增,更新成本调查表模板表
  103. *
  104. * @param costSurveyTemplate
  105. * @return
  106. * @throws Exception
  107. * @throws
  108. */
  109. @PostMapping(value = "/save")
  110. @ApiOperation(value = "新增,更新成本调查表模板表数据", httpMethod = "POST", notes = "新增,更新成本调查表模板表数据")
  111. public CommonResult<String> save(@ApiParam(name = "CostSurveyTemplate", value = "成本调查表模板表对象", required = true) @RequestBody CostSurveyTemplate costSurveyTemplate) throws Exception {
  112. String msg = StringUtil.isEmpty(costSurveyTemplate.getSurveyTemplateId()) ? "添加成本调查表模板表成功" : "更新成本调查表模板表成功";
  113. if (StringUtil.isEmpty(costSurveyTemplate.getSurveyTemplateId())) {
  114. IUser user = ContextUtil.getCurrentUser();
  115. costSurveyTemplate.setCreateBy(user.getAccount());
  116. costSurveyTemplate.setCreateTime(LocalDateTime.now());
  117. costSurveyTemplate.setIsDelete("0");
  118. costSurveyTemplate.setStatus("-1");
  119. } else {
  120. costSurveyTemplate.setUpdateBy(ContextUtil.getCurrentUser().getAccount());
  121. costSurveyTemplate.setUpdateTime(LocalDateTime.now());
  122. }
  123. baseService.createOrUpdate(costSurveyTemplate);
  124. return CommonResult.<String>ok().message(msg);
  125. }
  126. /**
  127. * 根据id删除成本调查表模板数据
  128. *
  129. * @param id
  130. * @return
  131. * @throws Exception
  132. */
  133. @ApiOperation(value = "根据id删除成本调查表模板数据", httpMethod = "GET", notes = "根据id删除成本调查表模板数据")
  134. @GetMapping(value = "/remove")
  135. public CommonResult<String> remove(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception {
  136. baseService.remove(id);
  137. return CommonResult.<String>ok().message("删除成本调查表模板成功");
  138. }
  139. /**
  140. * 批量删除成本调查表模板数据
  141. *
  142. * @param ids 要删除的ID列表
  143. * @return 操作结果
  144. * @throws Exception
  145. */
  146. @ApiOperation(value = "批量删除成本调查表模板数据", httpMethod = "POST", notes = "批量删除成本调查表模板数据")
  147. @PostMapping(value = "/batchRemove")
  148. public CommonResult<String> batchRemove(@ApiParam(name = "ids", value = "业务对象主键列表", required = true) @RequestBody List<String> ids) throws Exception {
  149. if (ids == null || ids.isEmpty()) {
  150. return CommonResult.<String>error().message("删除失败:未选择任何数据");
  151. }
  152. try {
  153. baseService.batchRemove(ids);
  154. return CommonResult.<String>ok().message("成功删除" + ids.size() + "条数据");
  155. } catch (Exception e) {
  156. return CommonResult.<String>error().message("删除失败:" + e.getMessage());
  157. }
  158. }
  159. /**
  160. * 获取除去指定ID外的所有成本调查表模板列表
  161. *
  162. * @param surveyTemplateId 要排除的模板ID
  163. * @return 成本调查表模板列表
  164. * @throws Exception
  165. */
  166. @GetMapping(value = "/listExcludeId")
  167. @ApiOperation(value = "计算公式-选择成本调查表", httpMethod = "GET", notes = "获取除去指定ID外的所有成本调查表模板列表")
  168. public CommonResult<List<CostSurveyTemplate>> listExcludeId(
  169. @ApiParam(name = "surveyTemplateId", value = "要排除的模板ID", required = false)
  170. @RequestParam(required = false) String surveyTemplateId) throws Exception {
  171. CostSurveyTemplate queryCondition = new CostSurveyTemplate();
  172. queryCondition.setStatus("0");//启用状态的成本调查表模板
  173. queryCondition.setTemplateType("2"); // 模板类型为固定表
  174. // IUser user = ContextUtil.getCurrentUser();
  175. // queryCondition.setCreateBy(user.getAccount());
  176. // 这里可以根据业务需要设置其他查询条件
  177. List<CostSurveyTemplate> allTemplates = costSurveyTemplateDao.selectByCondition(queryCondition);
  178. // 如果提供了excludeId,则过滤掉该ID的记录
  179. if (surveyTemplateId != null && !surveyTemplateId.isEmpty()) {
  180. allTemplates = allTemplates.stream()
  181. .filter(template -> !surveyTemplateId.equals(template.getSurveyTemplateId()))
  182. .collect(Collectors.toList());
  183. }
  184. return CommonResult.<List<CostSurveyTemplate>>ok().value(allTemplates);
  185. }
  186. /**
  187. * 获取所有模板类型为固定表的所有启用成本调查表数据
  188. *
  189. * @return 启用的固定表类型成本调查表列表
  190. * @throws Exception
  191. */
  192. @GetMapping(value = "/listFixedEnabled")
  193. @ApiOperation(value = "获取所有模板类型为固定表的所有启用成本调查表数据", httpMethod = "GET", notes = "获取所有模板类型为固定表的所有启用成本调查表数据")
  194. public CommonResult<List<CostSurveyTemplate>> listFixedEnabled() throws Exception {
  195. CostSurveyTemplate queryCondition = new CostSurveyTemplate();
  196. queryCondition.setStatus("0"); // 启用状态
  197. queryCondition.setTemplateType("2"); // 模板类型为固定表
  198. List<CostSurveyTemplate> templates = costSurveyTemplateDao.selectByCondition(queryCondition);
  199. return CommonResult.<List<CostSurveyTemplate>>ok().value(templates);
  200. }
  201. /**
  202. * 生成核定模板数据(通过templateId,状态为启用)
  203. *
  204. * @param templateId 模板ID
  205. * @return 核定模板数据
  206. * @throws Exception
  207. */
  208. @GetMapping(value = "/generateVerifyTemplateData")
  209. @ApiOperation(value = "生成核定模板数据", httpMethod = "GET", notes = "通过templateId获取启用状态的核定模板数据")
  210. public CommonResult<CostVerifyTemplate> generateVerifyTemplateData(
  211. @ApiParam(name = "templateId", value = "模板ID", required = true)
  212. @RequestParam String templateId, @ApiParam(name = "templatename", value = "模板名称", required = true)
  213. @RequestParam String templatename, @ApiParam(name = "catalogId", value = "监审id", required = true)
  214. String taskId, @ApiParam(name = "taskId", value = "任务id", required = false)
  215. @RequestParam String catalogId) throws Exception {
  216. if (taskId!=null){
  217. //先删
  218. costVerifyTemplateManager.remove(
  219. new QueryWrapper<CostVerifyTemplate>()
  220. .eq("task_id", taskId)
  221. );
  222. }
  223. CostSurveyTemplate queryCondition = new CostSurveyTemplate();
  224. queryCondition.setSurveyTemplateId(templateId);
  225. queryCondition.setStatus("0"); // 启用状态
  226. IUser user = ContextUtil.getCurrentUser();
  227. List<CostSurveyTemplate> templates = costSurveyTemplateDao.selectByCondition(queryCondition);
  228. CostSurveyTemplateVersion currentVersion = costSurveyTemplateVersionMapper.selectCurrentVersion(templateId);
  229. List<CostSurveyTemplateItems> updateites = new ArrayList<>();
  230. String ttemplateId = "";
  231. CostVerifyTemplate costVerifyTemplate = new CostVerifyTemplate();
  232. if (currentVersion != null) {
  233. CostSurveyTemplate sourceTemplate = templates.get(0);
  234. List<CostSurveyTemplateHeaders> headersList = costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(templateId, currentVersion.getId());
  235. List<CostSurveyTemplateItems> itemsList = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(templateId, currentVersion.getId());
  236. // 1. 开始将模板数据写入 CostVerifyTemplate 表中
  237. // 复制源模板的基本属性
  238. ttemplateId = UUID.randomUUID().toString();
  239. costVerifyTemplate.setSurveyTemplateId(ttemplateId);
  240. costVerifyTemplate.setSurveyTemplateName(sourceTemplate.getSurveyTemplateName());
  241. costVerifyTemplate.setTemplateType(sourceTemplate.getTemplateType());
  242. costVerifyTemplate.setCreatemode("1");
  243. costVerifyTemplate.setSurveyTemplateNameYw(PinyinUtil.getPinyin(sourceTemplate.getSurveyTemplateName()));
  244. costVerifyTemplate.setCreatetemplateid(sourceTemplate.getSurveyTemplateId());
  245. costVerifyTemplate.setStatus(taskId==null?"-1":"0");
  246. costVerifyTemplate.setSurveyTemplateName(templatename);
  247. costVerifyTemplate.setCatalogId(catalogId);
  248. costVerifyTemplate.setCreateBy(user.getAccount());
  249. costVerifyTemplate.setCreateTime(LocalDateTime.now());
  250. costVerifyTemplate.setType(sourceTemplate.getType());
  251. costVerifyTemplate.setIsDelete("0");
  252. costVerifyTemplate.setTaskId(taskId);
  253. // costVerifyTemplate.setCatalogId(sourceTemplate.getCatalogId());
  254. // 设置与源模板的关联关系
  255. costVerifyTemplate.setVersionNo(costVerifyTemplateManager.generateVersionNumber());
  256. // 保存成本核定模板
  257. costVerifyTemplateManager.createOrUpdate(costVerifyTemplate);
  258. // 2. 将headersList数据写入 CostVerifyTemplateHeaders 表中
  259. if (headersList != null && !headersList.isEmpty()) {
  260. for (CostSurveyTemplateHeaders header : headersList) {
  261. CostVerifyTemplateHeaders verifyHeader = new CostVerifyTemplateHeaders();
  262. // 复制表头属性
  263. String headid = UUID.randomUUID().toString();
  264. verifyHeader.setId(headid);
  265. verifyHeader.setFieldName(header.getFieldName());
  266. verifyHeader.setFieldEname(header.getFieldEname());
  267. verifyHeader.setFieldType(header.getFieldType());
  268. verifyHeader.setTabtype(header.getTabtype());
  269. verifyHeader.setIsRequired(header.getIsRequired());
  270. verifyHeader.setOrderNum(header.getOrderNum());
  271. verifyHeader.setDictid(header.getDictid());
  272. verifyHeader.setDictCode(header.getDictCode());
  273. verifyHeader.setCreateBy(user.getAccount());
  274. verifyHeader.setColumnComment(header.getColumnComment());
  275. verifyHeader.setColumnType(header.getColumnType());
  276. verifyHeader.setCreateTime(LocalDateTime.now());
  277. // 设置关联关系
  278. verifyHeader.setSurveyTemplateId(ttemplateId);
  279. verifyHeader.setVersionId(currentVersion.getId());
  280. //修改items 指标项中的headersid
  281. if (itemsList != null && !itemsList.isEmpty()) {
  282. for (CostSurveyTemplateItems items : itemsList) {
  283. if (items.getHeadersId().equals(header.getId())) {
  284. items.setHeadersId(headid);
  285. updateites.add(items);
  286. }
  287. }
  288. }
  289. // 保存成本核定表头
  290. costVerifyTemplateHeadersManager.createOrUpdate(verifyHeader);
  291. }
  292. }
  293. // 3. 将itemsList数据写入 CostVerifyTemplateItems 表中
  294. if (updateites != null && !updateites.isEmpty()) {
  295. for (CostSurveyTemplateItems item : updateites) {
  296. CostVerifyTemplateItems verifyItem = new CostVerifyTemplateItems();
  297. // 复制数据项属性
  298. String itemid = UUID.randomUUID().toString();
  299. verifyItem.setId(itemid);
  300. verifyItem.setRowid(item.getRowid());
  301. verifyItem.setParentid(item.getParentid());
  302. verifyItem.setRkey(item.getRkey());
  303. verifyItem.setRvalue(item.getRvalue());
  304. verifyItem.setCellCode(item.getCellCode());
  305. verifyItem.setCalculationFormula(item.getCalculationFormula());
  306. verifyItem.setUnit(item.getUnit());
  307. verifyItem.setOrderNum(item.getOrderNum());
  308. verifyItem.setJsonStr(item.getJsonStr());
  309. verifyItem.setCreateBy(user.getAccount());
  310. verifyItem.setCreateTime(LocalDateTime.now());
  311. verifyItem.setProjectId(item.getProjectId());
  312. verifyItem.setOrderText(item.getOrderText());
  313. verifyItem.setSurveyTemplateId(ttemplateId);
  314. verifyItem.setVersionId(currentVersion.getId());
  315. verifyItem.setHeadersId(item.getHeadersId());
  316. // 保存成本核定数据项
  317. costVerifyTemplateItemsManager.createOrUpdate(verifyItem);
  318. }
  319. }
  320. }
  321. if (templates != null && !templates.isEmpty()) {
  322. return CommonResult.<CostVerifyTemplate>ok().value(costVerifyTemplate);
  323. } else {
  324. return CommonResult.<CostVerifyTemplate>error().message("未找到启用状态的模板数据");
  325. }
  326. }
  327. /**
  328. * 生成版本号,格式为:yyyyMMdd + 4位流水号(如:202509270001)
  329. *
  330. * @return 生成的版本号
  331. */
  332. public String generateVersionNumber() {
  333. // 1. 获取当前日期字符串
  334. String dateStr = new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date());
  335. // 2. 查询当日最大版本号
  336. String maxVersion = costSurveyTemplateVersionMapper.selectMaxVersionByDate(dateStr);
  337. int sequence = 1;
  338. if (maxVersion != null && maxVersion.startsWith(dateStr)) {
  339. // 3. 提取流水号部分并加1
  340. String sequenceStr = maxVersion.substring(8); // 取后4位
  341. sequence = Integer.parseInt(sequenceStr) + 1;
  342. }
  343. // 4. 格式化生成版本号
  344. return String.format("%s%04d", dateStr, sequence);
  345. }
  346. /**
  347. * 导出成本调查表Excel模板
  348. *
  349. * @param templateId 模板ID
  350. * @return Excel文件
  351. * @throws Exception
  352. */
  353. @GetMapping(value = "/exportExcelTemplate")
  354. @ApiOperation(value = "导出成本调查表Excel模板", httpMethod = "GET", notes = "导出Excel模板并填充内容")
  355. public void exportExcelTemplate(
  356. @ApiParam(name = "templateId", value = "模板ID", required = true)
  357. @RequestParam String templateId,
  358. HttpServletResponse response) throws Exception {
  359. // 获取当前启用版本
  360. CostSurveyTemplateVersion currentVersion = costSurveyTemplateVersionMapper.selectCurrentVersion(templateId);
  361. if (currentVersion == null) {
  362. response.sendError(HttpServletResponse.SC_BAD_REQUEST, "未找到启用的模板版本");
  363. return;
  364. }
  365. // 获取表头信息
  366. List<CostSurveyTemplateHeaders> headersList = costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(templateId, currentVersion.getId());
  367. // 获取数据项信息
  368. List<CostSurveyTemplateItems> itemsList = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(templateId, currentVersion.getId());
  369. // 创建Excel工作簿
  370. Workbook workbook = new XSSFWorkbook();
  371. Sheet sheet = workbook.createSheet(currentVersion.getSurveyTemplateName());
  372. // 创建表头行
  373. Row headerRow = sheet.createRow(0);
  374. // 根据表头信息创建Excel列标题
  375. for (int i = 0; i < headersList.size(); i++) {
  376. CostSurveyTemplateHeaders header = headersList.get(i);
  377. Cell cell = headerRow.createCell(i);
  378. cell.setCellValue(header.getFieldName());
  379. }
  380. // 按照orderNum排序表头
  381. headersList.sort(Comparator.comparing(CostSurveyTemplateHeaders::getOrderNum,
  382. Comparator.nullsLast(Comparator.naturalOrder())));
  383. // 填充数据行(示例数据)
  384. if (!itemsList.isEmpty()) {
  385. // 按orderNum排序数据项
  386. itemsList.sort(Comparator.comparing(CostSurveyTemplateItems::getOrderNum,
  387. Comparator.nullsLast(Comparator.naturalOrder())));
  388. // 创建示例行
  389. Row dataRow = sheet.createRow(1);
  390. for (int i = 0; i < headersList.size(); i++) {
  391. CostSurveyTemplateHeaders header = headersList.get(i);
  392. Cell cell = dataRow.createCell(i);
  393. // 查找对应的数据项
  394. for (CostSurveyTemplateItems item : itemsList) {
  395. if (item.getHeadersId().equals(header.getId())) {
  396. cell.setCellValue(item.getRvalue() != null ? item.getRvalue() : "");
  397. break;
  398. }
  399. }
  400. }
  401. }
  402. // 设置响应头
  403. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
  404. response.setHeader("Content-Disposition", "attachment; filename=" +
  405. URLEncoder.encode(currentVersion.getSurveyTemplateName() + ".xlsx", "UTF-8"));
  406. // 写入响应输出流
  407. workbook.write(response.getOutputStream());
  408. workbook.close();
  409. }
  410. /**
  411. * 根据监管目录ID查询所有现行版本的所有成本调查表模板信息
  412. *
  413. * @param catalogId 监管目录ID
  414. * @return 成本调查表模板列表
  415. * @throws Exception
  416. */
  417. @GetMapping(value = "/listByCatalogId")
  418. @ApiOperation(value = "根据监管目录ID查询所有现行版本的成本调查表模板", httpMethod = "GET", notes = "根据监管目录ID查询所有现行版本的成本调查表模板信息")
  419. public CommonResult<List<CostSurveyTemplate>> listByCatalogId(
  420. @ApiParam(name = "catalogId", value = "监管目录ID", required = true)
  421. @RequestParam String catalogId) throws Exception {
  422. // 查询指定目录下的所有启用状态的模板
  423. CostSurveyTemplate queryCondition = new CostSurveyTemplate();
  424. queryCondition.setCatalogId(catalogId);
  425. queryCondition.setStatus("0"); // 启用状态
  426. List<CostSurveyTemplate> templates = costSurveyTemplateDao.selectByCondition(queryCondition);
  427. return CommonResult.<List<CostSurveyTemplate>>ok().value(templates);
  428. }
  429. /**
  430. * 状态切换方法
  431. * 当状态为-1(草稿)时启用为0(启用)
  432. * 当状态为0(启用)或1(停用)时可以相互切换
  433. *
  434. * @param id 成本调查表模板ID
  435. * @return 操作结果
  436. * @throws Exception
  437. */
  438. @ApiOperation(value = "状态切换", httpMethod = "GET", notes = "根据当前状态进行切换:草稿(-1)可启用为启用(0),启用(0)和停用(1)可相互切换")
  439. @GetMapping(value = "/enable")
  440. public CommonResult<String> enable(
  441. @ApiParam(name = "id", value = "成本调查表模板ID", required = true)
  442. @RequestParam String id) throws Exception {
  443. CostSurveyTemplate template = baseService.get(id);
  444. if (template == null) {
  445. return CommonResult.<String>error().message("未找到指定的成本调查表模板");
  446. }
  447. String currentStatus = template.getStatus();
  448. String newStatus = null;
  449. String message = null;
  450. // 根据当前状态决定切换到什么状态
  451. if ("-1".equals(currentStatus)) {
  452. // 草稿状态切换到启用状态
  453. newStatus = "0";
  454. message = "成本调查表模板启用成功";
  455. // 检查是否已经有现行版本
  456. CostSurveyTemplateVersion currentVersion = costSurveyTemplateVersionMapper.selectCurrentVersion(id);
  457. if (currentVersion == null) {
  458. return CommonResult.<String>error().message("启用失败:该模板没有现行版本");
  459. }
  460. } else if ("0".equals(currentStatus)) {
  461. // 启用状态切换到停用状态
  462. newStatus = "1";
  463. message = "成本调查表模板停用成功";
  464. } else if ("1".equals(currentStatus)) {
  465. // 停用状态切换到启用状态
  466. newStatus = "0";
  467. message = "成本调查表模板启用成功";
  468. } else {
  469. return CommonResult.<String>error().message("不支持的状态切换操作");
  470. }
  471. // 更新状态
  472. template.setStatus(newStatus);
  473. template.setUpdateTime(LocalDateTime.now());
  474. template.setUpdateBy(ContextUtil.getCurrentUser().getAccount());
  475. baseService.createOrUpdate(template);
  476. return CommonResult.<String>ok().message(message);
  477. }
  478. }