package com.hotent.surveyinfo.controller; import com.hotent.base.annotation.ApiGroup; import com.hotent.base.constants.ApiGroupConsts; import com.hotent.base.controller.BaseController; import com.hotent.base.model.CommonResult; import com.hotent.base.util.PinyinUtil; import com.hotent.base.util.StringUtil; import com.hotent.surveyinfo.dao.CostSurveyFdTemplateHeadersDao; import com.hotent.surveyinfo.dao.CostSurveyTemplateHeadersDao; import com.hotent.surveyinfo.manager.*; import com.hotent.surveyinfo.model.*; import com.hotent.surveyinfo.model.dto.BatchFdHeadersItemsRequest; import com.hotent.surveyinfo.model.dto.BatchHeadersItemsRequest; import com.hotent.uc.api.model.IUser; import com.hotent.uc.util.ContextUtil; 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.LocalDateTime; import java.util.List; import java.util.UUID; /** * 财务数据表头子表 前端控制器 * * @company 山西清众科技股份有限公司 * @author 超级管理员 * @since 2025-09-19 */ @RestController @RequestMapping("/costSurveyFdTemplateHeaders/v1/") @Api(tags = "财务数据表头") @ApiGroup(group = {ApiGroupConsts.GROUP_COST}) public class CostSurveyFdTemplateHeadersController extends BaseController { @Autowired CostSurveyFdTemplateHeadersDao costSurveyTemplateHeadersDao; @Autowired CostSurveyFdTemplateManager basemanager; @Autowired private CostSurveyFdTemplateItemsManager costSurveyTemplateItemsManager; @Autowired CostSurveyFdTemplateVersionManager costSurveyTemplateVersionManager; /** * 根据财务数据表id获取财务数据表头子表数据列表 * @param surveyTemplateId * @return */ @ApiOperation(value="根据财务数据表id获取财务数据表头子表数据列表", httpMethod = "GET", notes = "根据财务数据表id获取财务数据表头子表数据列表") @GetMapping("/getlistBySurveyTemplateId") public CommonResult> getlistBySurveyTemplateId( @RequestParam String surveyTemplateId) { List headersList = costSurveyTemplateHeadersDao.selectBySurveyTemplateId(surveyTemplateId ); return CommonResult.>ok().value(headersList); } /** * 根据财务数据表id和版本号获取表头数据列表 * @param surveyTemplateId 财务数据表id * @param versionId 版本号 * @return 表头数据列表 */ @ApiOperation(value="根据财务数据表id和版本id获取表头数据列表", httpMethod = "GET", notes = "根据财务数据表id和版本号获取表头数据列表") @GetMapping("/getlistBySurveyTemplateIdAndVersion") public CommonResult> getlistBySurveyTemplateIdAndVersion( @ApiParam(name="surveyTemplateId",value="财务数据表id", required = true) @RequestParam String surveyTemplateId, @ApiParam(name="versionId",value="版本id", required = false) @RequestParam(required = false) String versionId) { List headersList = costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, versionId); return CommonResult.>ok().value(headersList); } /** * 根据财务数据表id获取现行版的表头数据列表 * @param surveyTemplateId 财务数据表id * @return 表头数据列表 */ @ApiOperation(value="根据财务数据表id获取现行版的表头数据列表", httpMethod = "GET", notes = "根据财务数据表id和版本号获取表头数据列表") @GetMapping("/getlistBySurveyTemplateIdcurrentversion") public CommonResult> getlistBySurveyTemplateIdcurrentversion( @ApiParam(name="surveyTemplateId",value="财务数据表id", required = true) @RequestParam String surveyTemplateId) { //获取现行版本号 CostSurveyFdTemplateVersion version = costSurveyTemplateVersionManager.selectCurrentVersion(surveyTemplateId); List headersList = costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, version.getId()); return CommonResult.>ok().value(headersList); } /** * 根据id获取财务数据表头子表数据详情 * @param id * @return * @throws Exception * ModelAndView */ @GetMapping(value="/getDetail") @ApiOperation(value="根据id获取财务数据表头子表数据详情",httpMethod = "GET",notes = "根据id获取财务数据表头子表数据详情") public CommonResult getDetail(@ApiParam(name="id",value="业务对象主键", required = true)@RequestParam(required=true) String id) throws Exception{ return CommonResult.ok().value(baseService.getDetail(id)); } /** * 新增,更新财务数据表头子表 * @param costSurveyTemplateHeaders * @throws Exception * @return * @exception */ @PostMapping(value="/save") @ApiOperation(value = "新增或更新财务数据表头子表数据", httpMethod = "POST", notes = "新增或更新财务数据表头子表数据") public CommonResult save(@ApiParam(name="CostSurveyTemplateHeaders",value="财务数据表头子表对象", required = true)@RequestBody CostSurveyFdTemplateHeaders costSurveyTemplateHeaders) throws Exception{ String msg = StringUtil.isEmpty(costSurveyTemplateHeaders.getId()) ? "添加财务数据表头子表成功" : "更新财务数据表头子表成功"; baseService.createOrUpdate(costSurveyTemplateHeaders); return CommonResult.ok().message(msg); } /** * 批量新增或更新财务数据表头及指标项数据 * 动态处理 headersId 的生成和关联 * @param request 包含表头列表和指标项列表的请求对象 * @return 操作结果 * @throws Exception 异常信息 */ @ApiOperation(value = "批量新增或更新财务数据表头及指标项数据", httpMethod = "POST", notes = "批量新增或更新财务数据表头及指标项数据") @PostMapping(value = "/batchSaveOrUpdate") public CommonResult batchSaveOrUpdate( @ApiParam(name = "request", value = "包含表头列表和指标项列表的请求对象", required = true) @RequestBody BatchFdHeadersItemsRequest request) throws Exception { List headersList = request.getHeadersList(); List itemsList = request.getItemsList(); List deleteHeadersList = request.getDeleteheadersList(); // 检查输入列表是否为空 if ((headersList == null || headersList.isEmpty()) && (itemsList == null || itemsList.isEmpty()) && (deleteHeadersList == null || deleteHeadersList.isEmpty())) { return CommonResult.error().message("批量操作失败,数据列表为空"); } IUser user = ContextUtil.getCurrentUser(); // 先处理表头数据,确保所有表头都有ID if (headersList != null && !headersList.isEmpty()) { for (CostSurveyFdTemplateHeaders header : headersList) { boolean isHeaderCreate = StringUtil.isEmpty(header.getId()); header.setFieldEname(PinyinUtil.getPinyin(header.getFieldName())); if(StringUtil.isEmpty(header.getId())) { header.setId(UUID.randomUUID().toString()); header.setCreateBy(user.getAccount()); header.setCreateTime( LocalDateTime.now()); baseService.create(header); } else { header.setUpdateBy(user.getAccount()); header.setUpdateTime( LocalDateTime.now()); baseService.update(header); } } } // 处理需要删除的表头 if (deleteHeadersList != null && !deleteHeadersList.isEmpty()) { for (CostSurveyFdTemplateHeaders header : deleteHeadersList) { if (StringUtil.isNotEmpty(header.getId())) { baseService.remove(header.getId()); } } } // 处理指标项数据,动态设置 headersId if (itemsList != null && !itemsList.isEmpty()) { if( itemsList.size() >0) { costSurveyTemplateItemsManager.deleteBySurveyTemplateIdAndVersionId( itemsList.get(0).getSurveyTemplateId(), itemsList.get(0).getVersionId()); } for (CostSurveyFdTemplateItems item : itemsList) { // 检查是否已设置 headersId if (StringUtil.isEmpty(item.getHeadersId())) { item.setHeadersId( headersList.stream() .filter(h -> h.getFieldName().equals(item.getRkey() )) .findFirst() .map(CostSurveyFdTemplateHeaders::getId) .orElse(null) ); } item.setId(UUID.randomUUID().toString()); item.setCreateBy(user.getAccount()); item.setCreateTime( LocalDateTime.now()); item.setUpdateBy(user.getAccount()); item.setUpdateTime( LocalDateTime.now()); costSurveyTemplateItemsManager.create(item); } } return CommonResult.ok().message( "批量操作成功"); } /** * 根据id删除财务数据表头子表数据 * @param id * @return * @throws Exception */ @ApiOperation(value = "根据id删除财务数据表头子表数据", httpMethod = "DELETE", notes = "根据id删除财务数据表头子表数据") @GetMapping(value = "/remove") public CommonResult remove(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception { baseService.remove(id); return CommonResult.ok().message("删除财务数据表头子表成功"); } /** * 批量新增财务数据表头子表数据 * @param costSurveyTemplateHeadersList * @return * @throws Exception */ @ApiOperation(value = "批量新增财务数据表头子表数据", httpMethod = "POST", notes = "批量新增财务数据表头子表数据") @PostMapping(value = "/batchSave") public CommonResult batchSave(@ApiParam(name = "costSurveyTemplateHeadersList", value = "财务数据表头子表对象列表", required = true) @RequestBody List costSurveyTemplateHeadersList) throws Exception { return CommonResult.ok().message("批量新增财务数据表头子表数据成功"); } }