|
|
@@ -122,8 +122,9 @@ public class CostVerifyTemplateController extends BaseController<CostVerifyTempl
|
|
|
/**
|
|
|
* 生成核定模板数据
|
|
|
* @param templateId 模板ID
|
|
|
- * @param templatename 模板类型:1-成本调查固定表,其他-成本核定表
|
|
|
+ * @param templatename 模板名称
|
|
|
* @param catalogId 监审id
|
|
|
+ * @param taskId 任务id
|
|
|
* @return 核定模板数据(包含表头和数据项)
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@@ -133,9 +134,11 @@ public class CostVerifyTemplateController extends BaseController<CostVerifyTempl
|
|
|
@ApiParam(name="templateId", value="模板ID", required = true)
|
|
|
@RequestParam String templateId,
|
|
|
@ApiParam(name="templatename", value="模板名称", required = true)
|
|
|
- String templatename,@ApiParam(name="catalogId", value="监审id", required = true)
|
|
|
- String taskId,@ApiParam(name="taskId", value="任务id", required = false)
|
|
|
- @RequestParam String catalogId) throws Exception {
|
|
|
+ @RequestParam String templatename,
|
|
|
+ @ApiParam(name="catalogId", value="监审id", required = true)
|
|
|
+ @RequestParam String catalogId,
|
|
|
+ @ApiParam(name="taskId", value="任务id", required = false)
|
|
|
+ @RequestParam(required = false) String taskId) throws Exception {
|
|
|
|
|
|
CostCatalog costCatalog = costCatalogManager.getById(catalogId);
|
|
|
if (costCatalog==null) {
|
|
|
@@ -154,46 +157,112 @@ public class CostVerifyTemplateController extends BaseController<CostVerifyTempl
|
|
|
template.setCatalogId(catalogId);
|
|
|
template.setCreatemode("2");
|
|
|
template.setCreatetemplateid(templateId);
|
|
|
- template.setAreaCode(costCatalog.getCode());
|
|
|
+
|
|
|
+ // 修复:根据用户数据权限设置区域代码和区域级别(与其他创建方式保持一致)
|
|
|
+ IUser user = ContextUtil.getCurrentUser();
|
|
|
+ User currentUser = userService.get(user.getUserId());
|
|
|
+ Integer dataScope = currentUser.getDataScope();
|
|
|
+ if (dataScope == 0) {
|
|
|
+ template.setAreaLevel("0");
|
|
|
+ template.setAreaCode(currentUser.getProvinceCode());
|
|
|
+ } else if (dataScope == 1) {
|
|
|
+ template.setAreaLevel("1");
|
|
|
+ template.setAreaCode(currentUser.getCityCode());
|
|
|
+ } else {
|
|
|
+ template.setAreaLevel("2");
|
|
|
+ template.setAreaCode(currentUser.getCountyCode());
|
|
|
+ }
|
|
|
|
|
|
//新增修改后的模板数据
|
|
|
costSurveyTemplateDao.insert(template);
|
|
|
+
|
|
|
+ // 查询源模板的数据项和表头
|
|
|
List<CostVerifyTemplateItems> itemsList = costVerifyTemplateItemsDao.selectByVerifyTemplateId(templateId,taskId);
|
|
|
- List<CostVerifyTemplateItems> updateitemsList=new ArrayList<>();
|
|
|
- // 从成本核定表获取启用状态的表头和数据项
|
|
|
List<CostVerifyTemplateHeaders> headersList = costVerifyTemplateHeadersDao.selectBySurveyTemplateId(templateId);
|
|
|
- //将 headersList 保存到数据库中
|
|
|
- for (CostVerifyTemplateHeaders header : headersList) {
|
|
|
- String headerId = UUID.randomUUID().toString();
|
|
|
- header.setId(headerId);
|
|
|
- header.setSurveyTemplateId(tid);
|
|
|
- header.setCreateBy(ContextUtil.getCurrentUser().getAccount());
|
|
|
- header.setCreateTime( LocalDateTime.now());
|
|
|
- costVerifyTemplateHeadersDao.insert(header);
|
|
|
- if (itemsList != null && !itemsList.isEmpty()) {
|
|
|
- for (CostVerifyTemplateItems items : itemsList)
|
|
|
- {
|
|
|
- if (items.getHeadersId().equals(header.getId())){
|
|
|
- items.setHeadersId(headerId);
|
|
|
- updateitemsList.add(items);
|
|
|
- }
|
|
|
|
|
|
+ // 关键修复:如果在任务中(有 taskId),过滤掉审计期间字段,避免重复生成
|
|
|
+ if (taskId != null && headersList != null && !headersList.isEmpty()) {
|
|
|
+ headersList = headersList.stream()
|
|
|
+ .filter(header -> {
|
|
|
+ String fieldName = header.getFieldName();
|
|
|
+ if (fieldName == null) {
|
|
|
+ return true; // 保留字段名为空的
|
|
|
+ }
|
|
|
+ // 过滤掉包含审计期间关键词的字段(前端会根据任务的审计期间重新生成)
|
|
|
+ return !fieldName.contains("年账面值")
|
|
|
+ && !fieldName.contains("年调整值")
|
|
|
+ && !fieldName.contains("年审核调整值")
|
|
|
+ && !fieldName.contains("年核定值");
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建旧ID到新ID的映射表(关键修复:使用Map保存映射关系)
|
|
|
+ Map<String, String> headerIdMap = new HashMap<>();
|
|
|
+
|
|
|
+ // 将 headersList 保存到数据库中
|
|
|
+ if (headersList != null && !headersList.isEmpty()) {
|
|
|
+ for (CostVerifyTemplateHeaders header : headersList) {
|
|
|
+ // 关键修复:先保存旧的header ID
|
|
|
+ String oldHeaderId = header.getId();
|
|
|
+
|
|
|
+ // 生成新的header ID
|
|
|
+ String newHeaderId = UUID.randomUUID().toString();
|
|
|
+
|
|
|
+ // 关键修复:记录映射关系
|
|
|
+ headerIdMap.put(oldHeaderId, newHeaderId);
|
|
|
+
|
|
|
+ // 设置新ID和其他属性
|
|
|
+ header.setId(newHeaderId);
|
|
|
+ header.setSurveyTemplateId(tid);
|
|
|
+ header.setCreateBy(ContextUtil.getCurrentUser().getAccount());
|
|
|
+ header.setCreateTime( LocalDateTime.now());
|
|
|
+ costVerifyTemplateHeadersDao.insert(header);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将itemsList数据依次写入 CostVerifyTemplateItems 表中
|
|
|
+ if (itemsList != null && !itemsList.isEmpty()) {
|
|
|
+ List<CostVerifyTemplateItems> updateitemsList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (CostVerifyTemplateItems items : itemsList) {
|
|
|
+ // 获取旧的 headersId
|
|
|
+ String oldHeadersId = items.getHeadersId();
|
|
|
+
|
|
|
+ // 跳过 headersId 为 null 的情况
|
|
|
+ if (oldHeadersId == null) {
|
|
|
+ System.err.println("警告:item (rowid=" + items.getRowid() + ") 的 headersId 为 null,跳过该 item");
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ // 关键修复:通过Map查找新的 headersId
|
|
|
+ String newHeadersId = headerIdMap.get(oldHeadersId);
|
|
|
+
|
|
|
+ // 如果找不到映射,记录警告并跳过该 item
|
|
|
+ if (newHeadersId == null) {
|
|
|
+ System.err.println("警告:item (rowid=" + items.getRowid() +
|
|
|
+ ") 的 headersId=" + oldHeadersId + " 在 headersList 中不存在,跳过该 item");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置新的 headersId
|
|
|
+ items.setHeadersId(newHeadersId);
|
|
|
+ updateitemsList.add(items);
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
-// 3. 将updateitemsList数据依次写入 CostVerifyTemplateItems 表中
|
|
|
- if (updateitemsList != null && !updateitemsList.isEmpty()) {
|
|
|
- for (CostVerifyTemplateItems items : updateitemsList)
|
|
|
- {
|
|
|
- String itemId = UUID.randomUUID().toString();
|
|
|
- items.setId(itemId);
|
|
|
- items.setSurveyTemplateId(tid);
|
|
|
- items.setCreateBy(ContextUtil.getCurrentUser().getAccount());
|
|
|
- items.setCreateTime( LocalDateTime.now());
|
|
|
- costVerifyTemplateItemsDao.insert(items);
|
|
|
+ // 批量保存数据项
|
|
|
+ if (!updateitemsList.isEmpty()) {
|
|
|
+ for (CostVerifyTemplateItems items : updateitemsList) {
|
|
|
+ String itemId = UUID.randomUUID().toString();
|
|
|
+ items.setId(itemId);
|
|
|
+ items.setSurveyTemplateId(tid);
|
|
|
+ items.setCreateBy(ContextUtil.getCurrentUser().getAccount());
|
|
|
+ items.setCreateTime( LocalDateTime.now());
|
|
|
+ costVerifyTemplateItemsDao.insert(items);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return CommonResult.<CostVerifyTemplate>ok().value(template);
|
|
|
}
|
|
|
|