CostSurveyFdTemplateItemsController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. package com.hotent.surveyinfo.controller;
  2. import com.hotent.base.annotation.ApiGroup;
  3. import com.hotent.base.constants.ApiGroupConsts;
  4. import com.hotent.base.controller.BaseController;
  5. import com.hotent.base.model.CommonResult;
  6. import com.hotent.base.util.StringUtil;
  7. import com.hotent.surveyinfo.dao.CostSurveyFdTemplateHeadersDao;
  8. import com.hotent.surveyinfo.dao.CostSurveyFdTemplateItemsDao;
  9. import com.hotent.surveyinfo.dao.CostSurveyTemplateItemsDao;
  10. import com.hotent.surveyinfo.manager.*;
  11. import com.hotent.surveyinfo.model.*;
  12. import com.hotent.surveyinfo.model.dto.CostItemData;
  13. import io.swagger.annotations.Api;
  14. import io.swagger.annotations.ApiOperation;
  15. import io.swagger.annotations.ApiParam;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.*;
  18. import java.time.format.DateTimeFormatter;
  19. import java.util.*;
  20. import java.util.stream.Collectors;
  21. /**
  22. * 指标项子表 前端控制器
  23. *
  24. * @company 山西清众科技股份有限公司
  25. * @author 超级管理员
  26. * @since 2025-09-19
  27. */
  28. @RestController
  29. @RequestMapping("/costSurveyFdTemplateItems/v1/")
  30. @Api(tags = "财务数据指标项")
  31. @ApiGroup(group = {ApiGroupConsts.GROUP_COST})
  32. public class CostSurveyFdTemplateItemsController extends BaseController<CostSurveyFdTemplateItemsManager, CostSurveyFdTemplateItems> {
  33. @Autowired
  34. CostSurveyFdTemplateItemsDao costSurveyTemplateItemsDao;
  35. @Autowired
  36. CostSurveyFdTemplateVersionManager costSurveyTemplateVersionManager;
  37. @Autowired
  38. CostSurveyFdTemplateHeadersDao costSurveyTemplateHeadersDao;
  39. @Autowired
  40. CostSurveyFdTemplateHeadersManager costSurveyFdTemplateHeadersManager;
  41. /**
  42. * 根据survey_template_id获取所有指标项数据
  43. * @param surveyTemplateId 关联的财务数据调查表ID
  44. * @return 指标项列表
  45. */
  46. @GetMapping(value = "/listByTemplateId")
  47. @ApiOperation(value = "根据财务数据调查表ID获取所有指标项数据", httpMethod = "GET", notes = "根据财务数据调查表ID获取所有指标项数据")
  48. public CommonResult<List<CostSurveyFdTemplateItems>> listByTemplateId(
  49. @ApiParam(name = "surveyTemplateId", value = "关联的财务数据调查表ID", required = true)
  50. @RequestParam(required = true) String surveyTemplateId) throws Exception {
  51. List<CostSurveyFdTemplateItems> items = costSurveyTemplateItemsDao.selectBySurveyTemplateId(surveyTemplateId);
  52. return CommonResult.<List<CostSurveyFdTemplateItems>>ok().value(items);
  53. }
  54. /**
  55. * 根据财务数据调查表id、版本号和表头id获取指标项数据列表
  56. * @param surveyTemplateId 财务数据调查表id
  57. * @param version 版本号
  58. * @param headersId 表头id
  59. * @return 指标项数据列表
  60. */
  61. @GetMapping(value = "/listByTemplateIdAndVersionAndHeadersId")
  62. @ApiOperation(value = "根据财务数据调查表ID、版本id和表头ID获取指标项数据列表", httpMethod = "GET", notes = "根据财务数据调查表ID、版本号和表头ID获取指标项数据列表")
  63. public CommonResult<List<CostSurveyFdTemplateItems>> listByTemplateIdAndVersionAndHeadersId(
  64. @ApiParam(name = "surveyTemplateId", value = "关联的财务数据调查表ID", required = true)
  65. @RequestParam(required = true) String surveyTemplateId,
  66. @ApiParam(name = "version", value = "版本id", required = true)
  67. @RequestParam(required = true) String version,
  68. @ApiParam(name = "headersId", value = "表头ID", required = true)
  69. @RequestParam(required = true) String headersId) throws Exception {
  70. List<CostSurveyFdTemplateItems> items = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersionAndHeadersId(surveyTemplateId, version, headersId);
  71. return CommonResult.<List<CostSurveyFdTemplateItems>>ok().value(items);
  72. }
  73. /**
  74. * 根据财务数据调查表id和版本号获取指标项数据列表
  75. * @param surveyTemplateId 财务数据调查表id
  76. * @param version 版本号
  77. * @return 指标项数据列表
  78. */
  79. @GetMapping(value = "/listByTemplateIdAndVersion")
  80. @ApiOperation(value = "根据财务数据调查表ID和版本id获取指标项数据列表(带key-value拼接)", httpMethod = "GET", notes = "根据财务数据调查表ID和版本号获取指标项数据列表(带key-value拼接)")
  81. public CommonResult<CostItemData> listByTemplateIdAndVersion(
  82. @ApiParam(name = "surveyTemplateId", value = "关联的财务数据调查表ID", required = true)
  83. @RequestParam(required = true) String surveyTemplateId,
  84. @ApiParam(name = "version", value = "版本id", required = true)
  85. @RequestParam(required = true) String version) throws Exception {
  86. List<CostSurveyFdTemplateItems> items = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, version);
  87. List<CostSurveyFdTemplateHeaders> heardlist = costSurveyFdTemplateHeadersManager.listVisibleBySurveyTemplateIdAndVersion(surveyTemplateId, version);
  88. //使用逗号拼接 filename 值 循环遍历heardlist
  89. String filename = heardlist.stream().map(CostSurveyFdTemplateHeaders::getFieldName).collect(Collectors.joining(","));
  90. String fileids = heardlist.stream().map(CostSurveyFdTemplateHeaders::getId).collect(Collectors.joining(","));
  91. // 按 headersId 分组
  92. Map<Integer, List<CostSurveyFdTemplateItems>> groupedByHeadersId = items.stream()
  93. .collect(Collectors.groupingBy(CostSurveyFdTemplateItems::getOrderNum));
  94. List<Map<String, String>> result = new ArrayList<>();
  95. for (Map.Entry<Integer, List<CostSurveyFdTemplateItems>> entry : groupedByHeadersId.entrySet()) {
  96. List<CostSurveyFdTemplateItems> group = entry.getValue();
  97. if (group.isEmpty()) continue;
  98. // 主项(可以取第一个)
  99. CostSurveyFdTemplateItems mainItem = group.get(0);
  100. String headersIds = "";
  101. String itemIds="";
  102. // 构造 key-value 映射
  103. // 构造 key-value 映射
  104. Map<String, String> keyValueMap = new HashMap<>();
  105. for (CostSurveyFdTemplateItems item : group) {
  106. if (item.getRkey() != null && item.getRvalue() != null) {
  107. keyValueMap.put(item.getRkey(), item.getRvalue());
  108. headersIds+=item.getHeadersId()+",";
  109. itemIds+=item.getId()+",";
  110. }
  111. }
  112. if (!StringUtil.isEmpty(headersIds))
  113. headersIds = headersIds.substring(0, headersIds.length() - 1);
  114. if( !StringUtil.isEmpty(itemIds))
  115. itemIds = itemIds.substring(0, itemIds.length() - 1);
  116. //mainItem 放入到keyValueMap中 除了 key value 这两个字段
  117. keyValueMap.put("id", mainItem.getId());
  118. keyValueMap.put("surveyTemplateId", mainItem.getSurveyTemplateId());
  119. keyValueMap.put("versionId", mainItem.getVersionId());
  120. keyValueMap.put("headersId", mainItem.getHeadersId());
  121. keyValueMap.put("cellCode", mainItem.getCellCode());
  122. keyValueMap.put("calculationFormula", mainItem.getCalculationFormula());
  123. keyValueMap.put("unit", mainItem.getUnit());
  124. keyValueMap.put("orderNum", mainItem.getOrderNum().toString());
  125. keyValueMap.put("jsonStr", mainItem.getJsonStr());
  126. keyValueMap.put("headersIds", headersIds);
  127. keyValueMap.put("itemIds", itemIds);
  128. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  129. keyValueMap.put("createTime", mainItem.getCreateTime() != null ? mainItem.getCreateTime().format(formatter) : null);
  130. keyValueMap.put("updateTime", mainItem.getUpdateTime() != null ? mainItem.getUpdateTime().format(formatter) : null);
  131. keyValueMap.put("createBy", mainItem.getCreateBy());
  132. keyValueMap.put("updateBy", mainItem.getUpdateBy());
  133. keyValueMap.put("projectId", mainItem.getProjectId());
  134. keyValueMap.put("orderText", mainItem.getOrderText());
  135. keyValueMap.put("calculationTemplateId", mainItem.getCalculationTemplateId());
  136. keyValueMap.put("rowid", mainItem.getRowid());
  137. keyValueMap.put("parentid", mainItem.getParentid());
  138. result.add(keyValueMap);
  139. }
  140. CostItemData data = new CostItemData();
  141. data.setFixedFields(filename);
  142. data.setItemlist(result);
  143. data.setFixedFieldids(fileids);
  144. return CommonResult.<CostItemData>ok().value(data);
  145. }
  146. // public CommonResult<List<Map<String, String>>> listByTemplateIdAndVersion(
  147. // @ApiParam(name = "surveyTemplateId", value = "关联的财务数据调查表ID", required = true)
  148. // @RequestParam(required = true) String surveyTemplateId,
  149. // @ApiParam(name = "version", value = "版本id", required = true)
  150. // @RequestParam(required = true) String version) throws Exception {
  151. //
  152. // List<CostSurveyFdTemplateItems> items = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, version);
  153. //
  154. // // 按 headersId 分组
  155. // Map<Integer, List<CostSurveyFdTemplateItems>> groupedByHeadersId = items.stream()
  156. // .collect(Collectors.groupingBy(CostSurveyFdTemplateItems::getOrderNum));
  157. //
  158. // List<Map<String, String>> result = new ArrayList<>();
  159. //
  160. // for (Map.Entry<Integer, List<CostSurveyFdTemplateItems>> entry : groupedByHeadersId.entrySet()) {
  161. // List<CostSurveyFdTemplateItems> group = entry.getValue();
  162. // if (group.isEmpty()) continue;
  163. //
  164. // // 主项(可以取第一个)
  165. // CostSurveyFdTemplateItems mainItem = group.get(0);
  166. //
  167. // String headersIds = "";
  168. // // 构造 key-value 映射
  169. // Map<String, String> keyValueMap = new HashMap<>();
  170. // for (CostSurveyFdTemplateItems item : group) {
  171. // if (item.getRkey() != null && item.getRvalue() != null) {
  172. // keyValueMap.put(item.getRkey(), item.getRvalue());
  173. // headersIds+=item.getHeadersId()+",";
  174. // }
  175. // }
  176. // if (!StringUtil.isEmpty(headersIds))
  177. // headersIds = headersIds.substring(0, headersIds.length() - 1);
  178. // //mainItem 放入到keyValueMap中 除了 key value 这两个字段
  179. // keyValueMap.put("id", mainItem.getId());
  180. // keyValueMap.put("surveyTemplateId", mainItem.getSurveyTemplateId());
  181. // keyValueMap.put("versionId", mainItem.getVersionId());
  182. // keyValueMap.put("headersId", mainItem.getHeadersId());
  183. // keyValueMap.put("cellCode", mainItem.getCellCode());
  184. // keyValueMap.put("calculationFormula", mainItem.getCalculationFormula());
  185. // keyValueMap.put("unit", mainItem.getUnit());
  186. // keyValueMap.put("orderNum", mainItem.getOrderNum().toString());
  187. // keyValueMap.put("jsonStr", mainItem.getJsonStr());
  188. // keyValueMap.put("headersIds", headersIds);
  189. // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  190. // keyValueMap.put("createTime", mainItem.getCreateTime() != null ? mainItem.getCreateTime().format(formatter) : null);
  191. // keyValueMap.put("updateTime", mainItem.getUpdateTime() != null ? mainItem.getUpdateTime().format(formatter) : null);
  192. // keyValueMap.put("createBy", mainItem.getCreateBy());
  193. // keyValueMap.put("updateBy", mainItem.getUpdateBy());
  194. // keyValueMap.put("projectId", mainItem.getProjectId());
  195. // keyValueMap.put("orderText", mainItem.getOrderText());
  196. //
  197. //
  198. //
  199. // result.add(keyValueMap);
  200. // }
  201. //
  202. // return CommonResult.<List<Map<String, String>>>ok().value(result);
  203. // }
  204. /**
  205. * 根据财务数据调查表现行模板id获取指标项数据列表
  206. * @param surveyTemplateId 财务数据调查表id
  207. * @return 指标项数据列表
  208. */
  209. @GetMapping(value = "/listByCurrentTemplateId")
  210. @ApiOperation(value = "根据财务数据调查表现行模板id获取指标项数据列表", httpMethod = "GET", notes = "根据财务数据调查表现行模板id获取指标项数据列表")
  211. public CommonResult<CostItemData> listByCurrentTemplateId(
  212. @ApiParam(name = "surveyTemplateId", value = "关联的财务数据调查表ID", required = true)
  213. @RequestParam(required = true) String surveyTemplateId) throws Exception {
  214. CostSurveyFdTemplateVersion currentVersion =costSurveyTemplateVersionManager.selectCurrentVersion(surveyTemplateId);
  215. List<CostSurveyFdTemplateItems> items = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, currentVersion.getId());
  216. List<CostSurveyFdTemplateHeaders> heardlist = costSurveyFdTemplateHeadersManager.listVisibleBySurveyTemplateIdAndVersion(surveyTemplateId, currentVersion.getId() );
  217. // 使用逗号拼接 fieldName 值
  218. String filename = heardlist.stream()
  219. .map(CostSurveyFdTemplateHeaders::getFieldName)
  220. .filter(Objects::nonNull)
  221. .collect(Collectors.joining(","));
  222. String fileids = heardlist.stream()
  223. .map(CostSurveyFdTemplateHeaders::getId)
  224. .collect(Collectors.joining(","));
  225. // 按 orderNum 分组
  226. Map<Integer, List<CostSurveyFdTemplateItems>> groupedByHeadersId = items.stream()
  227. .collect(Collectors.groupingBy(CostSurveyFdTemplateItems::getOrderNum));
  228. List<Map<String, String>> result = new ArrayList<>();
  229. for (Map.Entry<Integer, List<CostSurveyFdTemplateItems>> entry : groupedByHeadersId.entrySet()) {
  230. List<CostSurveyFdTemplateItems> group = entry.getValue();
  231. if (group.isEmpty()) continue;
  232. // 主项(可以取第一个)
  233. CostSurveyFdTemplateItems mainItem = group.get(0);
  234. String headersIds = "";
  235. String itemIds="";
  236. // 构造 key-value 映射
  237. Map<String, String> keyValueMap = new HashMap<>();
  238. for (CostSurveyFdTemplateItems item : group) {
  239. if (item.getRkey() != null && item.getRvalue() != null) {
  240. keyValueMap.put(item.getRkey(), item.getRvalue());
  241. headersIds += item.getHeadersId() + ",";
  242. itemIds +=item.getId()+",";
  243. }
  244. }
  245. if (!StringUtil.isEmpty(headersIds))
  246. headersIds = headersIds.substring(0, headersIds.length() - 1);
  247. if( !StringUtil.isEmpty(itemIds))
  248. itemIds = itemIds.substring(0, itemIds.length() - 1);
  249. // 添加固定字段
  250. keyValueMap.put("id", mainItem.getId());
  251. keyValueMap.put("surveyTemplateId", mainItem.getSurveyTemplateId());
  252. keyValueMap.put("versionId", mainItem.getVersionId());
  253. keyValueMap.put("headersId", mainItem.getHeadersId());
  254. keyValueMap.put("cellCode", mainItem.getCellCode());
  255. keyValueMap.put("calculationFormula", mainItem.getCalculationFormula());
  256. keyValueMap.put("unit", mainItem.getUnit());
  257. keyValueMap.put("orderNum", mainItem.getOrderNum().toString());
  258. keyValueMap.put("jsonStr", mainItem.getJsonStr());
  259. keyValueMap.put("headersIds", headersIds);
  260. keyValueMap.put("itemIds", itemIds);
  261. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  262. keyValueMap.put("createTime", mainItem.getCreateTime() != null ? mainItem.getCreateTime().format(formatter) : null);
  263. keyValueMap.put("updateTime", mainItem.getUpdateTime() != null ? mainItem.getUpdateTime().format(formatter) : null);
  264. keyValueMap.put("createBy", mainItem.getCreateBy());
  265. keyValueMap.put("updateBy", mainItem.getUpdateBy());
  266. keyValueMap.put("projectId", mainItem.getProjectId());
  267. keyValueMap.put("orderText", mainItem.getOrderText());
  268. keyValueMap.put("calculationTemplateId", mainItem.getCalculationTemplateId());
  269. keyValueMap.put("rowid", mainItem.getRowid());
  270. keyValueMap.put("parentid", mainItem.getParentid());
  271. result.add(keyValueMap);
  272. }
  273. CostItemData data = new CostItemData();
  274. data.setFixedFields(filename);
  275. data.setItemlist(result);
  276. data.setFixedFieldids(fileids);
  277. return CommonResult.<CostItemData>ok().value(data);
  278. }
  279. /**
  280. * 根据id获取指标项子表数据详情
  281. * @param id
  282. * @return
  283. * @throws Exception
  284. * ModelAndView
  285. */
  286. @GetMapping(value="/getDetail")
  287. @ApiOperation(value="根据id获取指标项子表数据详情",httpMethod = "GET",notes = "根据id获取指标项子表数据详情")
  288. public CommonResult<CostSurveyFdTemplateItems> getDetail(@ApiParam(name="id",value="业务对象主键", required = true)@RequestParam(required=true) String id) throws Exception{
  289. return CommonResult.<CostSurveyFdTemplateItems>ok().value(baseService.getDetail(id));
  290. }
  291. /**
  292. * 新增,更新指标项子表
  293. * @param costSurveyTemplateItems
  294. * @throws Exception
  295. * @return
  296. * @exception
  297. */
  298. @PostMapping(value="/save")
  299. @ApiOperation(value = "新增,更新指标项子表数据", httpMethod = "POST", notes = "新增,更新指标项子表数据")
  300. public CommonResult<String> save(@ApiParam(name="CostSurveyTemplateItems",value="指标项子表对象", required = true)@RequestBody CostSurveyFdTemplateItems costSurveyTemplateItems) throws Exception{
  301. String msg = StringUtil.isEmpty(costSurveyTemplateItems.getId()) ? "添加指标项子表成功" : "更新指标项子表成功";
  302. baseService.createOrUpdate(costSurveyTemplateItems);
  303. return CommonResult.<String>ok().message(msg);
  304. }
  305. /**
  306. * 批量删除指标项子表数据
  307. * @param ids 指标项子表ID列表
  308. * @return 删除结果
  309. * @throws Exception
  310. */
  311. @PostMapping(value="/batchDelete")
  312. @ApiOperation(value = "批量删除指标项子表数据", httpMethod = "POST", notes = "批量删除指标项子表数据")
  313. public CommonResult<String> batchDelete(@ApiParam(name="ids",value="指标项子表ID列表", required = true)@RequestBody List<String> ids) throws Exception{
  314. baseService.removeByIds(ids);
  315. return CommonResult.<String>ok().message("批量删除指标项子表成功");
  316. }
  317. /**
  318. * 根据现行模板id获取所有指标编号数据
  319. *
  320. * @param surveyTemplateId 现行模板ID
  321. * @return 指标编号列表
  322. */
  323. @GetMapping(value = "/cellCodesByTemplateId")
  324. @ApiOperation(value = "根据现行模板id获取所有指标编号数据", httpMethod = "GET", notes = "根据现行模板id获取所有指标编号数据")
  325. public CommonResult<List<CostSurveyFdTemplateItems>> getCellCodesByTemplateId(
  326. @ApiParam(name = "surveyTemplateId", value = "现行模板ID", required = true)
  327. @RequestParam(required = true) String surveyTemplateId) {
  328. //获取现行版本模板
  329. CostSurveyFdTemplateVersion version = costSurveyTemplateVersionManager.selectCurrentVersion(surveyTemplateId);
  330. List<CostSurveyFdTemplateItems> cellCodes = baseService.getCellCodesBySurveyTemplateId(surveyTemplateId,version.getId());
  331. return CommonResult.<List<CostSurveyFdTemplateItems>>ok().value(cellCodes);
  332. }
  333. }