package com.hotent.enterpriseDeclare.controller.opinion; import com.hotent.base.annotation.ApiGroup; import com.hotent.base.constants.ApiGroupConsts; import com.hotent.base.model.CommonResult; import com.hotent.base.util.StringUtil; import com.hotent.enterpriseDeclare.manager.CostSurveyTemplateUploadDataManager; import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData; import com.hotent.surveyinfo.dao.CostSurveyTemplateItemsDao; import com.hotent.surveyinfo.manager.CostSurveyTemplateHeadersManager; import com.hotent.surveyinfo.manager.CostSurveyTemplateUploadManager; import com.hotent.surveyinfo.manager.CostSurveyTemplateVersionManager; import com.hotent.surveyinfo.model.CostSurveyTemplateHeaders; import com.hotent.surveyinfo.model.CostSurveyTemplateItems; import com.hotent.surveyinfo.model.CostSurveyTemplateUpload; import com.hotent.surveyinfo.model.CostSurveyTemplateVersion; import com.hotent.surveyinfo.model.dto.CostItemData; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @Api(tags = "成本监审任务填报") @RestController @RequestMapping("/api/enterprise/castTaskInfo") @ApiGroup(group = {ApiGroupConsts.GROUP_COST}) public class CostAuditTaskInfoController { @Autowired private CostSurveyTemplateUploadManager costSurveyTemplateUploadManager; @Autowired private CostSurveyTemplateItemsDao costSurveyTemplateItemsDao; @Autowired private CostSurveyTemplateVersionManager costSurveyTemplateVersionManager; @Autowired private CostSurveyTemplateHeadersManager costSurveyTemplateHeadersManager; @Autowired private CostSurveyTemplateUploadDataManager costSurveyTemplateUploadDataManager; /** * 企业报送-成本申报表-列表 * @param catalogId 监管目录ID * @return 上传记录列表(包含是否必填、是否上传等信息) * @throws Exception */ @GetMapping(value="/listUploadByCatalogId") @ApiOperation(value="根据监管目录ID查询成本调查表模板上传记录列表", httpMethod = "GET", notes = "根据监管目录ID查询成本调查表模板上传记录列表,包含是否必填、是否上传等信息") public CommonResult> listUploadByCatalogId( @ApiParam(name="catalogId", value="监管目录ID", required = true) @RequestParam String catalogId) throws Exception { List uploadList = costSurveyTemplateUploadManager.listByCatalogId(catalogId); return CommonResult.>ok().value(uploadList); } /** * 企业报送-成本申报表-在线填报所需字段 * @param surveyTemplateId 成本调查表id * @return 指标项数据列表(带key-value拼接) */ @GetMapping(value = "/listItemsByCurrentTemplateId") @ApiOperation(value = "根据成本调查表现行模板id获取所有指标数据", httpMethod = "GET", notes = "根据成本调查表现行模板id获取所有指标数据(带key-value拼接)") public CommonResult listItemsByCurrentTemplateId( @ApiParam(name = "surveyTemplateId", value = "关联的成本调查表ID", required = true) @RequestParam(required = true) String surveyTemplateId) throws Exception { //根据模板id 查询历史版本是现行的版本信息 CostSurveyTemplateVersion versiontemplate = costSurveyTemplateVersionManager.selectCurrentVersion(surveyTemplateId); if (versiontemplate == null) { return CommonResult.ok().value(new CostItemData()); } List items = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, versiontemplate.getId()); List headlist = costSurveyTemplateHeadersManager.listVisibleBySurveyTemplateIdAndVersion(surveyTemplateId, versiontemplate.getId()); String filename = headlist.stream().map(CostSurveyTemplateHeaders::getFieldName).collect(Collectors.joining(",")); String filenids = headlist.stream().map(CostSurveyTemplateHeaders::getId).collect(Collectors.joining(",")); // 按 orderNum 分组 Map> groupedByHeadersId = items.stream() .collect(Collectors.groupingBy(CostSurveyTemplateItems::getOrderNum)); List> result = new ArrayList<>(); for (Map.Entry> entry : groupedByHeadersId.entrySet()) { List group = entry.getValue(); if (group.isEmpty()) continue; // 主项(可以取第一个) CostSurveyTemplateItems mainItem = group.get(0); String headersIds = ""; String itemIds = ""; // 构造 key-value 映射 Map keyValueMap = new HashMap<>(); for (CostSurveyTemplateItems item : group) { if (item.getRkey() != null && item.getRvalue() != null) { keyValueMap.put(item.getRkey(), item.getRvalue()); headersIds += item.getHeadersId() + ","; itemIds += item.getId() + ","; } } if (!StringUtil.isEmpty(headersIds)) headersIds = headersIds.substring(0, headersIds.length() - 1); if (!StringUtil.isEmpty(itemIds)) itemIds = itemIds.substring(0, itemIds.length() - 1); //mainItem 放入到keyValueMap中 除了 key value 这两个字段 keyValueMap.put("id", mainItem.getId()); keyValueMap.put("surveyTemplateId", mainItem.getSurveyTemplateId()); keyValueMap.put("versionId", mainItem.getVersionId()); keyValueMap.put("headersId", mainItem.getHeadersId()); keyValueMap.put("cellCode", mainItem.getCellCode()); keyValueMap.put("calculationFormula", mainItem.getCalculationFormula()); keyValueMap.put("unit", mainItem.getUnit()); keyValueMap.put("orderNum", mainItem.getOrderNum().toString()); keyValueMap.put("jsonStr", mainItem.getJsonStr()); keyValueMap.put("headersIds", headersIds); keyValueMap.put("itemIds", itemIds); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); keyValueMap.put("createTime", mainItem.getCreateTime() != null ? mainItem.getCreateTime().format(formatter) : null); keyValueMap.put("updateTime", mainItem.getUpdateTime() != null ? mainItem.getUpdateTime().format(formatter) : null); keyValueMap.put("createBy", mainItem.getCreateBy()); keyValueMap.put("updateBy", mainItem.getUpdateBy()); keyValueMap.put("projectId", mainItem.getProjectId()); keyValueMap.put("orderText", mainItem.getOrderText()); keyValueMap.put("calculationTemplateId", mainItem.getCalculationTemplateId()); keyValueMap.put("rowid", mainItem.getRowid()); keyValueMap.put("parentid", mainItem.getParentid()); result.add(keyValueMap); } CostItemData data = new CostItemData(); data.setFixedFields(filename); // 存储动态字段名 data.setItemlist(result); data.setFixedFieldids(filenids); return CommonResult.ok().value(data); } /** * 企业报送-成本申报表-在线填报保持 * @param dataList 数据列表(实体类列表,包含uploadId、auditedUnitId、rowid、rkey、rvalue等字段) * @return 保存结果 */ @PostMapping(value = "/saveUploadData") @ApiOperation(value = "保存成本调查表模板上传数据", httpMethod = "POST", notes = "保存成本调查表模板上传数据,直接使用实体类列表") public CommonResult saveUploadData( @ApiParam(name = "dataList", value = "数据列表", required = true) @RequestBody List dataList) throws Exception { if (dataList == null || dataList.isEmpty()) { return CommonResult.error().message("数据列表不能为空"); } costSurveyTemplateUploadDataManager.saveData(dataList); return CommonResult.ok().message("保存数据成功"); } /** * 企业报送-成本申报表-在线填报记录查看 * @param queryData 查询条件(实体类,包含uploadId和auditedUnitId) * @return 数据列表(实体类列表) */ @PostMapping(value = "/getUploadData") @ApiOperation(value = "查询成本调查表模板上传数据", httpMethod = "POST", notes = "查询成本调查表模板上传数据,返回实体类列表") public CommonResult> getUploadData( @ApiParam(name = "queryData", value = "查询条件", required = true) @RequestBody CostSurveyTemplateUploadData queryData) throws Exception { if (queryData == null || StringUtil.isEmpty(queryData.getUploadId()) || StringUtil.isEmpty(queryData.getAuditedUnitId())) { return CommonResult.>error().message("uploadId和auditedUnitId不能为空"); } List dataList = costSurveyTemplateUploadDataManager.listByUploadIdAndAuditedUnitId(queryData.getUploadId(), queryData.getAuditedUnitId()); return CommonResult.>ok().value(dataList); } }