zzw преди 10 часа
родител
ревизия
b2c3265268

+ 30 - 14
assistMg/src/main/java/com/hotent/project/manager/impl/CostNoticeManagerImpl.java

@@ -14,6 +14,8 @@ import com.hotent.project.manager.CostNoticeManager;
 import com.hotent.base.manager.impl.BaseManagerImpl;
 import com.hotent.project.model.CostProjectApproval;
 import com.hotent.project.model.CostProjectMaterial;
+import com.hotent.project.model.CostProjectTask;
+import com.hotent.project.manager.CostProjectTaskManager;
 import com.hotent.project.req.CostProjectNoticeListReq;
 import com.hotent.project.req.CostProjectNoticePageReq;
 import com.hotent.uc.model.User;
@@ -48,6 +50,9 @@ public class CostNoticeManagerImpl extends BaseManagerImpl<CostNoticeDao, CostNo
 	@Autowired
 	private AuditedUnitManager auditedUnitManager;
 
+	@Autowired
+	private CostProjectTaskManager costProjectTaskManager;
+
 	@Override
 	public CostNotice getDetail(String id) {
     	CostNotice costNotice = this.get(id);
@@ -90,18 +95,32 @@ public class CostNoticeManagerImpl extends BaseManagerImpl<CostNoticeDao, CostNo
 		LambdaQueryWrapper<CostNotice> qw = new LambdaQueryWrapper<>();
 		qw.eq(CostNotice::getIsDeleted, "0");
 
-		// 用户权限过滤:只能看到发给自己或自己企业的消息
-		AuditedUnit unit = auditedUnitManager.getOne(
-			new LambdaQueryWrapper<AuditedUnit>()
-				.eq(AuditedUnit::getAccount, currentUserId)
-				.last("limit 1")
-		);
-		if (unit != null) {
-			qw.and(q -> q.eq(CostNotice::getEnterpriseId, unit.getUnitId())
-					.or()
-					.eq(CostNotice::getSendTarget, currentUserId));
+		// 判断是否有任务ID,如果有则使用任务关联的企业,否则使用当前用户的企业
+		if(ObjectUtil.isNotEmpty(req.getTaskId())){
+			// 根据任务ID获取任务信息,使用任务关联的企业
+			CostProjectTask task = costProjectTaskManager.getById(req.getTaskId());
+			if(task != null && StringUtils.isNotBlank(task.getAuditedUnitId())){
+				qw.and(q -> q.eq(CostNotice::getEnterpriseId, task.getAuditedUnitId())
+						.or()
+						.eq(CostNotice::getSendTarget, currentUserId));
+			} else {
+				qw.eq(CostNotice::getSendTarget, currentUserId);
+			}
+			qw.eq(CostNotice::getTaskId, req.getTaskId());
 		} else {
-			qw.eq(CostNotice::getSendTarget, currentUserId);
+			// 用户权限过滤:只能看到发给自己或自己企业的消息
+			AuditedUnit unit = auditedUnitManager.getOne(
+				new LambdaQueryWrapper<AuditedUnit>()
+					.eq(AuditedUnit::getAccount, currentUserId)
+					.last("limit 1")
+			);
+			if (unit != null) {
+				qw.and(q -> q.eq(CostNotice::getEnterpriseId, unit.getUnitId())
+						.or()
+						.eq(CostNotice::getSendTarget, currentUserId));
+			} else {
+				qw.eq(CostNotice::getSendTarget, currentUserId);
+			}
 		}
 
 		if(ObjectUtil.isNotEmpty(req.getTitle())){
@@ -113,9 +132,6 @@ public class CostNoticeManagerImpl extends BaseManagerImpl<CostNoticeDao, CostNo
 		if(ObjectUtil.isNotEmpty(req.getProjectId())){
 			qw.eq(CostNotice::getProjectId, req.getProjectId());
 		}
-		if(ObjectUtil.isNotEmpty(req.getTaskId())){
-			qw.eq(CostNotice::getTaskId, req.getTaskId());
-		}
 		qw.orderByDesc(CostNotice::getCreateTime);
 		IPage<CostNotice> page=new Page<>(req.getPageNum(), req.getPageSize());
 		IPage<CostNotice> costNoticeIPage = this.page(page, qw);

+ 36 - 37
assistMg/src/main/java/com/hotent/project/service/AsyncMaterialSummaryService.java

@@ -714,29 +714,29 @@ public class AsyncMaterialSummaryService {
             costProjectTaskMaterialSummaryDetailManager.save(detail);
         }
         // 获取子任务的资料登记表
-        for (CostProjectTask childTask : childTasks) {
-            List<CostProjectTaskEvidence> list = costProjectTaskEvidenceManager.list(
-                    new LambdaQueryWrapper<CostProjectTaskEvidence>().eq(CostProjectTaskEvidence::getTaskId, childTask.getId())
-            );
-            for (CostProjectTaskEvidence evidence : list) {
-                // 只处理有附件的资料登记
-                if (StringUtil.isNotEmpty(evidence.getAttachmentUrl())) {
-                    CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
-                    detail.setMasterId(summary.getId());
-                    detail.setTaskId(mainTask.getId());
-                    detail.setDocumentName(evidence.getMaterialName() != null ? evidence.getMaterialName() : "提取资料登记");
-                    detail.setDocumentNumber("");
-                    detail.setAuditedUnitId(childTask.getAuditedUnitId());
-                    detail.setAuditedUnitName(childTask.getAuditedUnitName() != null ? childTask.getAuditedUnitName() : "");
-                    detail.setFileSource("监审单位反馈文件");
-                    detail.setPageCount(evidence.getPageCount() != null ? evidence.getPageCount() : 0);
-                    detail.setAttachmentUrl(evidence.getAttachmentUrl());
-                    detail.setOrderNum(orderNum++);
-                    detail.setIsDeleted("0");
-                    costProjectTaskMaterialSummaryDetailManager.save(detail);
-                }
-            }
-        }
+//        for (CostProjectTask childTask : childTasks) {
+//            List<CostProjectTaskEvidence> list = costProjectTaskEvidenceManager.list(
+//                    new LambdaQueryWrapper<CostProjectTaskEvidence>().eq(CostProjectTaskEvidence::getTaskId, childTask.getId())
+//            );
+//            for (CostProjectTaskEvidence evidence : list) {
+//                // 只处理有附件的资料登记
+//                if (StringUtil.isNotEmpty(evidence.getAttachmentUrl())) {
+//                    CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
+//                    detail.setMasterId(summary.getId());
+//                    detail.setTaskId(mainTask.getId());
+//                    detail.setDocumentName(evidence.getMaterialName() != null ? evidence.getMaterialName() : "提取资料登记");
+//                    detail.setDocumentNumber("");
+//                    detail.setAuditedUnitId(childTask.getAuditedUnitId());
+//                    detail.setAuditedUnitName(childTask.getAuditedUnitName() != null ? childTask.getAuditedUnitName() : "");
+//                    detail.setFileSource("监审单位反馈文件");
+//                    detail.setPageCount(evidence.getPageCount() != null ? evidence.getPageCount() : 0);
+//                    detail.setAttachmentUrl(evidence.getAttachmentUrl());
+//                    detail.setOrderNum(orderNum++);
+//                    detail.setIsDeleted("0");
+//                    costProjectTaskMaterialSummaryDetailManager.save(detail);
+//                }
+//            }
+//        }
     }
 
     // ==================== 类型13:提取的成本资料和会计凭证等复印件 ====================
@@ -1919,20 +1919,19 @@ public class AsyncMaterialSummaryService {
 
         // 监审办结时间(任务状态为办结时,取更新时间,格式:xxxx年xx月)
         String auditEndTime = "";
-        if ("400".equals(task.getStatus()) && task.getUpdateTime() != null) {
-            // task
-            // 更新流程节点时间:清空当前节点的结束时间,重置上一节点的开始时间
-            CostProjectProccess proccess = costProjectProccessManager.getOne(
-                    new LambdaQueryWrapper<CostProjectProccess>().eq(CostProjectProccess::getProjectId, task.getProjectId())
-            );
-            CostProjectProccessNode currentNode = costProjectProccessNodeManager.getOne(
-                    new LambdaQueryWrapper<CostProjectProccessNode>()
-                            .eq(CostProjectProccessNode::getProcessId, proccess.getProcessId())
-                            .eq(CostProjectProccessNode::getProcessNodeKey, task.getCurrentNode())
-            );
-            if(currentNode != null){
-                auditEndTime = currentNode.getActEndTime().getYear() + "年" + currentNode.getActEndTime().getMonthValue() + "月";
-            }
+        CostProjectProccess proccess = costProjectProccessManager.getOne(
+                new LambdaQueryWrapper<CostProjectProccess>().eq(CostProjectProccess::getProjectId, task.getProjectId())
+        );
+        CostProjectProccessNode currentNode = costProjectProccessNodeManager.getOne(
+                new LambdaQueryWrapper<CostProjectProccessNode>()
+                        .eq(CostProjectProccessNode::getProcessId, proccess.getProcessId())
+                        .eq(CostProjectProccessNode::getProcessNodeKey, task.getCurrentNode())
+        );
+        if (currentNode != null) {
+            auditEndTime =
+                    currentNode.getActStartTime().getYear() + "年"
+                            + currentNode.getActStartTime().getMonthValue() + "月"
+                            + currentNode.getActStartTime().getDayOfMonth() + "日";
         }
         map.put("{监审办结时间}", auditEndTime);
 

+ 228 - 226
assistMg/src/main/java/com/hotent/surveyinfo/controller/CostSurveyTemplateHeadersController.java

@@ -39,8 +39,8 @@ import java.util.UUID;
 /**
  * 成本调查表头子表 前端控制器
  *
- * @company 山西清众科技股份有限公司
  * @author 超级管理员
+ * @company 山西清众科技股份有限公司
  * @since 2025-09-19
  */
 @RestController
@@ -48,231 +48,233 @@ import java.util.UUID;
 @Api(tags = "成本调查表头")
 @ApiGroup(group = {ApiGroupConsts.GROUP_COST})
 public class CostSurveyTemplateHeadersController extends BaseController<CostSurveyTemplateHeadersManager, CostSurveyTemplateHeaders> {
-	@Autowired
-	CostSurveyTemplateHeadersDao costSurveyTemplateHeadersDao;
-	@Autowired
-	CostSurveyTemplateManager basemanager;
-	@Autowired
-	private CostSurveyTemplateItemsManager costSurveyTemplateItemsManager;
-	@Autowired
-	CostSurveyTemplateVersionManager costSurveyTemplateVersionManager;
-
-	@Autowired
-	CostSurveyFdTemplateHeadersDao costSurveyFdTemplateHeadersDao;
-	/**
-	 * 根据成本调查表id获取成本调查表头子表数据列表
-	 * @param surveyTemplateId
-	 * @return
-	 */
-	@ApiOperation(value="根据成本调查表id获取成本调查表头子表数据列表", httpMethod = "GET", notes = "根据成本调查表id获取成本调查表头子表数据列表")
-	@GetMapping("/getlistBySurveyTemplateId")
-	public CommonResult<List<CostSurveyTemplateHeaders>> getlistBySurveyTemplateId(
-			@RequestParam String surveyTemplateId) {
-
-		List<CostSurveyTemplateHeaders> headersList =
-				costSurveyTemplateHeadersDao.selectBySurveyTemplateId(surveyTemplateId
-						);
-
-		return CommonResult.<List<CostSurveyTemplateHeaders>>ok().value(headersList);
-	}
-
-
-	/**
-	 * 根据成本调查表id和版本号获取表头数据列表
-	 * @param surveyTemplateId 成本调查表id
-	 * @param versionId 版本号
-	 * @return 表头数据列表
-	 */
-	@ApiOperation(value="根据成本调查表id和版本id获取表头数据列表", httpMethod = "GET", notes = "根据成本调查表id和版本号获取表头数据列表")
-	@GetMapping("/getlistBySurveyTemplateIdAndVersion")
-	public CommonResult<List<?>> xgetlistBySurveyTemplateIdAndVersion(
-			@ApiParam(name="surveyTemplateId",value="成本调查表id", required = true) @RequestParam String surveyTemplateId,
-			@ApiParam(name="versionId",value="版本id", required = false) @RequestParam(required = false) String versionId,
-			@ApiParam(name="type",value="版本id", required = false) @RequestParam(required = false,defaultValue = "1") String type
-	) {
-		if ("1".equals(type)) {
-			List<CostSurveyTemplateHeaders> headersList =
-					costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, versionId);
-			return CommonResult.<List<?>>ok().value(headersList);
-		}else{
-
-			List<CostSurveyFdTemplateHeaders> headersList =
-					costSurveyFdTemplateHeadersDao.selectBySurveyTemplateId(surveyTemplateId);
-			return CommonResult.<List<?>>ok().value(headersList);
-		}
-	}
-
-	/**
-	 * 根据成本调查表id获取现行版的表头数据列表
-	 * @param surveyTemplateId 成本调查表id
-	 * @return 表头数据列表
-	 */
-	@ApiOperation(value="根据成本调查表id获取现行版的表头数据列表", httpMethod = "GET", notes = "根据成本调查表id和版本号获取表头数据列表")
-	@GetMapping("/getlistBySurveyTemplateIdcurrentversion")
-	public CommonResult<List<CostSurveyTemplateHeaders>> getlistBySurveyTemplateIdcurrentversion(
-			@ApiParam(name="surveyTemplateId",value="成本调查表id", required = true) @RequestParam String surveyTemplateId) {
-
-		//获取现行版本号
-		CostSurveyTemplateVersion version = costSurveyTemplateVersionManager.selectCurrentVersion(surveyTemplateId);
-		List<CostSurveyTemplateHeaders> headersList =
-				costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, version.getId());
-
-		return CommonResult.<List<CostSurveyTemplateHeaders>>ok().value(headersList);
-	}
-
-
-	/**
-	 * 根据id获取成本调查表头子表数据详情
-	 * @param id
-	 * @return
-	 * @throws Exception 
-	 * ModelAndView
-	 */
-	@GetMapping(value="/getDetail")
-	@ApiOperation(value="根据id获取成本调查表头子表数据详情",httpMethod = "GET",notes = "根据id获取成本调查表头子表数据详情")
-	public CommonResult<CostSurveyTemplateHeaders> getDetail(@ApiParam(name="id",value="业务对象主键", required = true)@RequestParam(required=true) String id) throws Exception{
-		return CommonResult.<CostSurveyTemplateHeaders>ok().value(baseService.getDetail(id));
-	}
+    @Autowired
+    CostSurveyTemplateHeadersDao costSurveyTemplateHeadersDao;
+    @Autowired
+    CostSurveyTemplateManager basemanager;
+    @Autowired
+    private CostSurveyTemplateItemsManager costSurveyTemplateItemsManager;
+    @Autowired
+    CostSurveyTemplateVersionManager costSurveyTemplateVersionManager;
+
+    @Autowired
+    CostSurveyFdTemplateHeadersDao costSurveyFdTemplateHeadersDao;
+
+    /**
+     * 根据成本调查表id获取成本调查表头子表数据列表
+     *
+     * @param surveyTemplateId
+     * @return
+     */
+    @ApiOperation(value = "根据成本调查表id获取成本调查表头子表数据列表", httpMethod = "GET", notes = "根据成本调查表id获取成本调查表头子表数据列表")
+    @GetMapping("/getlistBySurveyTemplateId")
+    public CommonResult<List<CostSurveyTemplateHeaders>> getlistBySurveyTemplateId(
+            @RequestParam String surveyTemplateId) {
+
+        List<CostSurveyTemplateHeaders> headersList =
+                costSurveyTemplateHeadersDao.selectBySurveyTemplateId(surveyTemplateId
+                );
+
+        return CommonResult.<List<CostSurveyTemplateHeaders>>ok().value(headersList);
+    }
+
+
+    /**
+     * 根据成本调查表id和版本号获取表头数据列表
+     *
+     * @param surveyTemplateId 成本调查表id
+     * @param versionId        版本号
+     * @return 表头数据列表
+     */
+    @ApiOperation(value = "根据成本调查表id和版本id获取表头数据列表", httpMethod = "GET", notes = "根据成本调查表id和版本号获取表头数据列表")
+    @GetMapping("/getlistBySurveyTemplateIdAndVersion")
+    public CommonResult<List<?>> xgetlistBySurveyTemplateIdAndVersion(
+            @ApiParam(name = "surveyTemplateId", value = "成本调查表id", required = true) @RequestParam String surveyTemplateId,
+            @ApiParam(name = "versionId", value = "版本id", required = false) @RequestParam(required = false) String versionId,
+            @ApiParam(name = "type", value = "版本id", required = false) @RequestParam(required = false, defaultValue = "1") String type
+    ) {
+        if ("1".equals(type)) {
+            List<CostSurveyTemplateHeaders> headersList =
+                    costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, versionId);
+            return CommonResult.<List<?>>ok().value(headersList);
+        } else {
+
+            List<CostSurveyFdTemplateHeaders> headersList =
+                    costSurveyFdTemplateHeadersDao.selectBySurveyTemplateId(surveyTemplateId);
+            return CommonResult.<List<?>>ok().value(headersList);
+        }
+    }
+
+    /**
+     * 根据成本调查表id获取现行版的表头数据列表
+     *
+     * @param surveyTemplateId 成本调查表id
+     * @return 表头数据列表
+     */
+    @ApiOperation(value = "根据成本调查表id获取现行版的表头数据列表", httpMethod = "GET", notes = "根据成本调查表id和版本号获取表头数据列表")
+    @GetMapping("/getlistBySurveyTemplateIdcurrentversion")
+    public CommonResult<List<CostSurveyTemplateHeaders>> getlistBySurveyTemplateIdcurrentversion(
+            @ApiParam(name = "surveyTemplateId", value = "成本调查表id", required = true) @RequestParam String surveyTemplateId) {
+
+        //获取现行版本号
+        CostSurveyTemplateVersion version = costSurveyTemplateVersionManager.selectCurrentVersion(surveyTemplateId);
+        List<CostSurveyTemplateHeaders> headersList =
+                costSurveyTemplateHeadersDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, version.getId());
+
+        return CommonResult.<List<CostSurveyTemplateHeaders>>ok().value(headersList);
+    }
+
+
+    /**
+     * 根据id获取成本调查表头子表数据详情
+     *
+     * @param id
+     * @return
+     * @throws Exception ModelAndView
+     */
+    @GetMapping(value = "/getDetail")
+    @ApiOperation(value = "根据id获取成本调查表头子表数据详情", httpMethod = "GET", notes = "根据id获取成本调查表头子表数据详情")
+    public CommonResult<CostSurveyTemplateHeaders> getDetail(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception {
+        return CommonResult.<CostSurveyTemplateHeaders>ok().value(baseService.getDetail(id));
+    }
+
+    /**
+     * 新增,更新成本调查表头子表
+     *
+     * @param costSurveyTemplateHeaders
+     * @return
+     * @throws Exception
+     * @throws
+     */
+    @PostMapping(value = "/save")
+    @ApiOperation(value = "新增或更新成本调查表头子表数据", httpMethod = "POST", notes = "新增或更新成本调查表头子表数据")
+    public CommonResult<String> save(@ApiParam(name = "CostSurveyTemplateHeaders", value = "成本调查表头子表对象", required = true) @RequestBody CostSurveyTemplateHeaders costSurveyTemplateHeaders) throws Exception {
+        String msg = StringUtil.isEmpty(costSurveyTemplateHeaders.getId()) ? "添加成本调查表头子表成功" : "更新成本调查表头子表成功";
+        baseService.createOrUpdate(costSurveyTemplateHeaders);
+
+
+        return CommonResult.<String>ok().message(msg);
+    }
+
+    /**
+     * 批量新增或更新成本调查表头及指标项数据
+     * 动态处理 headersId 的生成和关联
+     *
+     * @param request 包含表头列表和指标项列表的请求对象
+     * @return 操作结果
+     * @throws Exception 异常信息
+     */
+    @ApiOperation(value = "批量新增或更新成本调查表头及指标项数据", httpMethod = "POST", notes = "批量新增或更新成本调查表头及指标项数据")
+    @PostMapping(value = "/batchSaveOrUpdate")
+    public CommonResult<String> batchSaveOrUpdate(
+            @ApiParam(name = "request", value = "包含表头列表和指标项列表的请求对象", required = true)
+            @RequestBody BatchHeadersItemsRequest request) throws Exception {
+
+        List<CostSurveyTemplateHeaders> headersList = request.getHeadersList();
+        List<CostSurveyTemplateItems> itemsList = request.getItemsList();
+        List<CostSurveyTemplateHeaders> deleteHeadersList = request.getDeleteheadersList();
+
+        // 检查输入列表是否为空
+        if ((headersList == null || headersList.isEmpty()) &&
+                (itemsList == null || itemsList.isEmpty()) &&
+                (deleteHeadersList == null || deleteHeadersList.isEmpty())) {
+            return CommonResult.<String>error().message("批量操作失败,数据列表为空");
+        }
+
+        IUser user = ContextUtil.getCurrentUser();
+
+        // 先处理表头数据,确保所有表头都有ID
+        if (headersList != null && !headersList.isEmpty()) {
+            for (CostSurveyTemplateHeaders 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 (CostSurveyTemplateHeaders 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 (CostSurveyTemplateItems item : itemsList) {
+                // 检查是否已设置 headersId
+                if (StringUtil.isEmpty(item.getHeadersId())) {
+                    item.setHeadersId(
+                            headersList.stream()
+                                    .filter(h -> h.getFieldName().equals(item.getRkey()))
+                                    .findFirst()
+                                    .map(CostSurveyTemplateHeaders::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.<String>ok().message("批量操作成功");
+    }
+
+
+    /**
+     * 根据id删除成本调查表头子表数据
+     *
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @ApiOperation(value = "根据id删除成本调查表头子表数据", httpMethod = "DELETE", notes = "根据id删除成本调查表头子表数据")
+    @GetMapping(value = "/remove")
+    public CommonResult<String> remove(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception {
+        baseService.remove(id);
+        return CommonResult.<String>ok().message("删除成本调查表头子表成功");
+    }
+
     /**
-	 * 新增,更新成本调查表头子表
-	 * @param costSurveyTemplateHeaders
-	 * @throws Exception 
-	 * @return
-	 * @exception 
-	 */
-	@PostMapping(value="/save")
-	@ApiOperation(value = "新增或更新成本调查表头子表数据", httpMethod = "POST", notes = "新增或更新成本调查表头子表数据")
-	public CommonResult<String> save(@ApiParam(name="CostSurveyTemplateHeaders",value="成本调查表头子表对象", required = true)@RequestBody CostSurveyTemplateHeaders costSurveyTemplateHeaders) throws Exception{
-		String msg = StringUtil.isEmpty(costSurveyTemplateHeaders.getId()) ? "添加成本调查表头子表成功" : "更新成本调查表头子表成功";
-		baseService.createOrUpdate(costSurveyTemplateHeaders);
-
-
-		return CommonResult.<String>ok().message(msg);
-	}
-
-	/**
-	 * 批量新增或更新成本调查表头及指标项数据
-	 * 动态处理 headersId 的生成和关联
-	 * @param request 包含表头列表和指标项列表的请求对象
-	 * @return 操作结果
-	 * @throws Exception 异常信息
-	 */
-	@ApiOperation(value = "批量新增或更新成本调查表头及指标项数据", httpMethod = "POST", notes = "批量新增或更新成本调查表头及指标项数据")
-	@PostMapping(value = "/batchSaveOrUpdate")
-	public CommonResult<String> batchSaveOrUpdate(
-			@ApiParam(name = "request", value = "包含表头列表和指标项列表的请求对象", required = true)
-			@RequestBody BatchHeadersItemsRequest request) throws Exception {
-
-		List<CostSurveyTemplateHeaders> headersList = request.getHeadersList();
-		List<CostSurveyTemplateItems> itemsList = request.getItemsList();
-		List<CostSurveyTemplateHeaders> deleteHeadersList = request.getDeleteheadersList();
-
-		// 检查输入列表是否为空
-		if ((headersList == null || headersList.isEmpty()) &&
-				(itemsList == null || itemsList.isEmpty()) &&
-				(deleteHeadersList == null || deleteHeadersList.isEmpty())) {
-			return CommonResult.<String>error().message("批量操作失败,数据列表为空");
-		}
-
-		IUser user = ContextUtil.getCurrentUser();
-
-		// 先处理表头数据,确保所有表头都有ID
-		if (headersList != null && !headersList.isEmpty()) {
-			for (CostSurveyTemplateHeaders 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 (CostSurveyTemplateHeaders 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 (CostSurveyTemplateItems item : itemsList) {
-				// 检查是否已设置 headersId
-				if (StringUtil.isEmpty(item.getHeadersId())) {
-					item.setHeadersId(
-							headersList.stream()
-									.filter(h -> h.getFieldName().equals(item.getRkey() ))
-									.findFirst()
-									.map(CostSurveyTemplateHeaders::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.<String>ok().message(
-				"批量操作成功");
-	}
-
-
-
-
-
-	/**
-	 * 根据id删除成本调查表头子表数据
-	 * @param id
-	 * @return
-	 * @throws Exception
-	 */
-	@ApiOperation(value = "根据id删除成本调查表头子表数据", httpMethod = "DELETE", notes = "根据id删除成本调查表头子表数据")
-	@GetMapping(value = "/remove")
-	public CommonResult<String> remove(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception {
-		baseService.remove(id);
-		return CommonResult.<String>ok().message("删除成本调查表头子表成功");
-	}
-	/**
-	 * 批量新增成本调查表头子表数据
-	 * @param costSurveyTemplateHeadersList
-	 * @return
-	 * @throws Exception
-	 */
-	@ApiOperation(value = "批量新增成本调查表头子表数据", httpMethod = "POST", notes = "批量新增成本调查表头子表数据")
-	@PostMapping(value = "/batchSave")
-	public CommonResult<String> batchSave(@ApiParam(name = "costSurveyTemplateHeadersList", value = "成本调查表头子表对象列表", required = true)
-										  @RequestBody List<CostSurveyTemplateHeaders> costSurveyTemplateHeadersList) throws Exception {
-
-		return CommonResult.<String>ok().message("批量新增成本调查表头子表数据成功");
-	}
+     * 批量新增成本调查表头子表数据
+     *
+     * @param costSurveyTemplateHeadersList
+     * @return
+     * @throws Exception
+     */
+    @ApiOperation(value = "批量新增成本调查表头子表数据", httpMethod = "POST", notes = "批量新增成本调查表头子表数据")
+    @PostMapping(value = "/batchSave")
+    public CommonResult<String> batchSave(@ApiParam(name = "costSurveyTemplateHeadersList", value = "成本调查表头子表对象列表", required = true)
+                                          @RequestBody List<CostSurveyTemplateHeaders> costSurveyTemplateHeadersList) throws Exception {
+
+        return CommonResult.<String>ok().message("批量新增成本调查表头子表数据成功");
+    }
 
 }