Jelajahi Sumber

fit:成本调查表-调查表填报(单记录)

zzw 1 bulan lalu
induk
melakukan
bd88142492

+ 192 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/opinion/CostAuditTaskInfoController.java

@@ -0,0 +1,192 @@
+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<List<CostSurveyTemplateUpload>> listUploadByCatalogId(
+            @ApiParam(name="catalogId", value="监管目录ID", required = true)
+            @RequestParam String catalogId) throws Exception {
+
+        List<CostSurveyTemplateUpload> uploadList = costSurveyTemplateUploadManager.listByCatalogId(catalogId);
+
+        return CommonResult.<List<CostSurveyTemplateUpload>>ok().value(uploadList);
+    }
+
+    /**
+     * 企业报送-成本申报表-在线填报所需字段
+     * @param surveyTemplateId 成本调查表id
+     * @return 指标项数据列表(带key-value拼接)
+     */
+    @GetMapping(value = "/listItemsByCurrentTemplateId")
+    @ApiOperation(value = "根据成本调查表现行模板id获取所有指标数据", httpMethod = "GET", notes = "根据成本调查表现行模板id获取所有指标数据(带key-value拼接)")
+    public CommonResult<CostItemData> 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.<CostItemData>ok().value(new CostItemData());
+        }
+
+        List<CostSurveyTemplateItems> items = costSurveyTemplateItemsDao.selectBySurveyTemplateIdAndVersion(surveyTemplateId, versiontemplate.getId());
+        List<CostSurveyTemplateHeaders> 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<Integer, List<CostSurveyTemplateItems>> groupedByHeadersId = items.stream()
+                .collect(Collectors.groupingBy(CostSurveyTemplateItems::getOrderNum));
+
+        List<Map<String, String>> result = new ArrayList<>();
+
+        for (Map.Entry<Integer, List<CostSurveyTemplateItems>> entry : groupedByHeadersId.entrySet()) {
+            List<CostSurveyTemplateItems> group = entry.getValue();
+            if (group.isEmpty()) continue;
+
+            // 主项(可以取第一个)
+            CostSurveyTemplateItems mainItem = group.get(0);
+
+            String headersIds = "";
+            String itemIds = "";
+            // 构造 key-value 映射
+            Map<String, String> 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.<CostItemData>ok().value(data);
+    }
+
+    /**
+     * 企业报送-成本申报表-在线填报保持
+     * @param dataList 数据列表(实体类列表,包含uploadId、auditedUnitId、rowid、rkey、rvalue等字段)
+     * @return 保存结果
+     */
+    @PostMapping(value = "/saveUploadData")
+    @ApiOperation(value = "保存成本调查表模板上传数据", httpMethod = "POST", notes = "保存成本调查表模板上传数据,直接使用实体类列表")
+    public CommonResult<String> saveUploadData(
+            @ApiParam(name = "dataList", value = "数据列表", required = true)
+            @RequestBody List<CostSurveyTemplateUploadData> dataList) throws Exception {
+
+        if (dataList == null || dataList.isEmpty()) {
+            return CommonResult.<String>error().message("数据列表不能为空");
+        }
+
+
+        costSurveyTemplateUploadDataManager.saveData(dataList);
+        return CommonResult.<String>ok().message("保存数据成功");
+    }
+
+    /**
+     * 企业报送-成本申报表-在线填报记录查看
+     * @param queryData 查询条件(实体类,包含uploadId和auditedUnitId)
+     * @return 数据列表(实体类列表)
+     */
+    @PostMapping(value = "/getUploadData")
+    @ApiOperation(value = "查询成本调查表模板上传数据", httpMethod = "POST", notes = "查询成本调查表模板上传数据,返回实体类列表")
+    public CommonResult<List<CostSurveyTemplateUploadData>> 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.<List<CostSurveyTemplateUploadData>>error().message("uploadId和auditedUnitId不能为空");
+        }
+
+        List<CostSurveyTemplateUploadData> dataList = costSurveyTemplateUploadDataManager.listByUploadIdAndAuditedUnitId(queryData.getUploadId(), queryData.getAuditedUnitId());
+        return CommonResult.<List<CostSurveyTemplateUploadData>>ok().value(dataList);
+    }
+}
+

+ 42 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/dao/CostSurveyTemplateUploadDataDao.java

@@ -0,0 +1,42 @@
+package com.hotent.enterpriseDeclare.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 成本调查表模板上传数据表 Mapper 接口
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+public interface CostSurveyTemplateUploadDataDao extends BaseMapper<CostSurveyTemplateUploadData> {
+    
+    /**
+     * 根据上传记录ID查询数据列表
+     * @param uploadId 上传记录ID
+     * @return 数据列表
+     */
+    List<CostSurveyTemplateUploadData> selectByUploadId(@Param("uploadId") String uploadId);
+    
+    /**
+     * 根据上传记录ID和企业ID查询数据列表
+     * @param uploadId 上传记录ID
+     * @param auditedUnitId 企业ID
+     * @return 数据列表
+     */
+    List<CostSurveyTemplateUploadData> selectByUploadIdAndAuditedUnitId(
+            @Param("uploadId") String uploadId,
+            @Param("auditedUnitId") String auditedUnitId);
+    
+    /**
+     * 根据行数据ID查询数据列表
+     * @param rowid 行数据ID
+     * @return 数据列表
+     */
+    List<CostSurveyTemplateUploadData> selectByRowid(@Param("rowid") String rowid);
+}
+

+ 68 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/manager/CostSurveyTemplateUploadDataManager.java

@@ -0,0 +1,68 @@
+package com.hotent.enterpriseDeclare.manager;
+
+import com.hotent.base.manager.BaseManager;
+import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 成本调查表模板上传数据表 服务类
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+public interface CostSurveyTemplateUploadDataManager extends BaseManager<CostSurveyTemplateUploadData> {
+    
+    /**
+     * 根据主键获取详情
+     * @param id
+     * @return
+     */
+    CostSurveyTemplateUploadData getDetail(String id);
+    
+    /**
+     * 新建、更新数据
+     * @param costSurveyTemplateUploadData
+     */
+    void createOrUpdate(CostSurveyTemplateUploadData costSurveyTemplateUploadData);
+    
+    /**
+     * 根据上传记录ID查询数据列表
+     * @param uploadId 上传记录ID
+     * @return 数据列表
+     */
+    List<CostSurveyTemplateUploadData> listByUploadId(String uploadId);
+    
+    /**
+     * 根据上传记录ID和企业ID查询数据列表
+     * @param uploadId 上传记录ID
+     * @param auditedUnitId 企业ID
+     * @return 数据列表
+     */
+    List<CostSurveyTemplateUploadData> listByUploadIdAndAuditedUnitId(String uploadId, String auditedUnitId);
+    
+    /**
+     * 根据行数据ID查询数据列表
+     * @param rowid 行数据ID
+     * @return 数据列表
+     */
+    List<CostSurveyTemplateUploadData> listByRowid(String rowid);
+    
+    /**
+     * 保存数据(直接使用实体类列表,实体类中包含uploadId和auditedUnitId)
+     * @param dataList 数据列表(实体类列表)
+     */
+    void saveData(List<CostSurveyTemplateUploadData> dataList);
+    
+
+
+    
+    /**
+     * 根据上传记录ID删除数据
+     * @param uploadId 上传记录ID
+     */
+    void deleteByUploadId(String uploadId);
+}
+

+ 149 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/manager/impl/CostSurveyTemplateUploadDataManagerImpl.java

@@ -0,0 +1,149 @@
+package com.hotent.enterpriseDeclare.manager.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hotent.base.manager.impl.BaseManagerImpl;
+import com.hotent.base.util.StringUtil;
+import com.hotent.enterpriseDeclare.dao.CostSurveyTemplateUploadDataDao;
+import com.hotent.enterpriseDeclare.manager.CostSurveyTemplateUploadDataManager;
+import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData;
+import com.hotent.surveyinfo.manager.CostSurveyTemplateUploadManager;
+import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 成本调查表模板上传数据表 服务实现类
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+@Service
+public class CostSurveyTemplateUploadDataManagerImpl extends BaseManagerImpl<CostSurveyTemplateUploadDataDao, CostSurveyTemplateUploadData> implements CostSurveyTemplateUploadDataManager {
+
+    @Autowired
+    private CostSurveyTemplateUploadDataDao costSurveyTemplateUploadDataDao;
+
+    @Autowired
+    private CostSurveyTemplateUploadManager costSurveyTemplateUploadManager;
+
+    @Override
+    public CostSurveyTemplateUploadData getDetail(String id) {
+        CostSurveyTemplateUploadData data = this.get(id);
+        return data;
+    }
+
+    @Override
+    @Transactional
+    public void createOrUpdate(CostSurveyTemplateUploadData costSurveyTemplateUploadData) {
+        //新建或更新
+        this.saveOrUpdate(costSurveyTemplateUploadData);
+    }
+
+    @Override
+    public List<CostSurveyTemplateUploadData> listByUploadId(String uploadId) {
+        return costSurveyTemplateUploadDataDao.selectByUploadId(uploadId);
+    }
+
+    @Override
+    public List<CostSurveyTemplateUploadData> listByUploadIdAndAuditedUnitId(String uploadId, String auditedUnitId) {
+        return costSurveyTemplateUploadDataDao.selectByUploadIdAndAuditedUnitId(uploadId, auditedUnitId);
+    }
+
+    @Override
+    public List<CostSurveyTemplateUploadData> listByRowid(String rowid) {
+        return costSurveyTemplateUploadDataDao.selectByRowid(rowid);
+    }
+
+    @Override
+    @Transactional
+    public void saveData(List<CostSurveyTemplateUploadData> dataList) {
+        if (dataList == null || dataList.isEmpty()) {
+            return;
+        }
+
+        // 从第一条数据中提取信息
+        CostSurveyTemplateUploadData firstData = dataList.get(0);
+        String uploadId = firstData.getUploadId();
+        String auditedUnitId = firstData.getAuditedUnitId();
+        String catalogId = firstData.getCatalogId();
+        String surveyTemplateId = firstData.getSurveyTemplateId();
+        
+        if (auditedUnitId == null || auditedUnitId.isEmpty()) {
+            throw new IllegalArgumentException("auditedUnitId不能为空");
+        }
+
+        // 如果没有 uploadId,需要先创建主表
+        if (StringUtil.isEmpty(uploadId)) {
+            if (StringUtil.isEmpty(catalogId) || StringUtil.isEmpty(surveyTemplateId)) {
+                throw new IllegalArgumentException("创建主表时,catalogId和surveyTemplateId不能为空");
+            }
+
+            // 创建主表记录
+            CostSurveyTemplateUpload upload = new CostSurveyTemplateUpload();
+            upload.setCatalogId(catalogId);
+            upload.setSurveyTemplateId(surveyTemplateId);
+            upload.setIsRequired("1");
+            upload.setIsDeleted("0");
+            upload.setOrderNum(0);
+            costSurveyTemplateUploadManager.save(upload);
+            uploadId = upload.getId();
+        }
+
+        // 先删除该上传记录和企业下的所有数据
+        deleteByUploadIdAndAuditedUnitId(uploadId, auditedUnitId);
+
+        // 设置公共字段并保存新数据
+        List<CostSurveyTemplateUploadData> saveList = new ArrayList<>();
+        for (CostSurveyTemplateUploadData data : dataList) {
+            if (data.getRowid() == null || data.getRowid().isEmpty() || 
+                data.getRkey() == null || data.getRkey().isEmpty()) {
+                continue;
+            }
+
+            data.setUploadId(uploadId);
+            data.setAuditedUnitId(auditedUnitId);
+            if (data.getIsDeleted() == null) {
+                data.setIsDeleted("0");
+            }
+            if (data.getRvalue() == null) {
+                data.setRvalue("");
+            }
+            saveList.add(data);
+        }
+
+        // 批量保存
+        if (!saveList.isEmpty()) {
+            this.saveBatch(saveList);
+        }
+    }
+
+
+    @Override
+    @Transactional
+    public void deleteByUploadId(String uploadId) {
+        QueryWrapper<CostSurveyTemplateUploadData> wrapper = new QueryWrapper<>();
+        wrapper.eq("upload_id", uploadId);
+        wrapper.eq("is_deleted", "0");
+        this.remove(wrapper);
+    }
+
+    /**
+     * 根据上传记录ID和企业ID删除数据
+     * @param uploadId 上传记录ID
+     * @param auditedUnitId 企业ID
+     */
+    private void deleteByUploadIdAndAuditedUnitId(String uploadId, String auditedUnitId) {
+        QueryWrapper<CostSurveyTemplateUploadData> wrapper = new QueryWrapper<>();
+        wrapper.eq("upload_id", uploadId);
+        wrapper.eq("audited_unit_id", auditedUnitId);
+        wrapper.eq("is_deleted", "0");
+        this.remove(wrapper);
+    }
+}
+

+ 217 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/model/CostSurveyTemplateUploadData.java

@@ -0,0 +1,217 @@
+package com.hotent.enterpriseDeclare.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.hotent.base.entity.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * 成本调查表模板上传数据表
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+@ApiModel(value="CostSurveyTemplateUploadData对象", description="成本调查表模板上传数据表")
+public class CostSurveyTemplateUploadData extends BaseModel<CostSurveyTemplateUploadData> {
+
+    private static final long serialVersionUID = 1L;
+    
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @JsonProperty("id")
+    private String id;
+    
+    @ApiModelProperty(value = "关联上传记录1ID")
+    @TableField("upload_id")
+    @JsonProperty("uploadId")
+    private String uploadId;
+    
+    @ApiModelProperty(value = "企业ID")
+    @TableField("audited_unit_id")
+    @JsonProperty("auditedUnitId")
+    private String auditedUnitId;
+    
+    @ApiModelProperty(value = "行数据ID(标识同一行的数据)")
+    @TableField("rowid")
+    @JsonProperty("rowid")
+    private String rowid;
+    
+    @ApiModelProperty(value = "数据key(动态字段名)")
+    @TableField("rkey")
+    @JsonProperty("rkey")
+    private String rkey;
+    
+    @ApiModelProperty(value = "数据值(动态字段值)")
+    @TableField("rvalue")
+    @JsonProperty("rvalue")
+    private String rvalue;
+    
+    @ApiModelProperty(value = "逻辑删除:0正常 1删除")
+    @TableField("is_deleted")
+    @JsonProperty("isDeleted")
+    private String isDeleted;
+    
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    @JsonProperty("createTime")
+    private LocalDateTime createTime;
+    
+    @ApiModelProperty(value = "创建人")
+    @TableField("create_by")
+    @JsonProperty("createBy")
+    private String createBy;
+    
+    @ApiModelProperty(value = "更新时间")
+    @TableField("update_time")
+    @JsonProperty("updateTime")
+    private LocalDateTime updateTime;
+    
+    @ApiModelProperty(value = "更新人")
+    @TableField("update_by")
+    @JsonProperty("updateBy")
+    private String updateBy;
+
+    // 临时字段(用于创建主表,非数据库字段)
+    @ApiModelProperty(value = "监管目录ID(创建主表时使用)")
+    @TableField(exist = false)
+    @JsonProperty("catalogId")
+    private String catalogId;
+
+    @ApiModelProperty(value = "成本调查表模板ID(创建主表时使用)")
+    @TableField(exist = false)
+    @JsonProperty("surveyTemplateId")
+    private String surveyTemplateId;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getUploadId() {
+        return uploadId;
+    }
+
+    public void setUploadId(String uploadId) {
+        this.uploadId = uploadId;
+    }
+
+    public String getAuditedUnitId() {
+        return auditedUnitId;
+    }
+
+    public void setAuditedUnitId(String auditedUnitId) {
+        this.auditedUnitId = auditedUnitId;
+    }
+
+    public String getRowid() {
+        return rowid;
+    }
+
+    public void setRowid(String rowid) {
+        this.rowid = rowid;
+    }
+
+    public String getRkey() {
+        return rkey;
+    }
+
+    public void setRkey(String rkey) {
+        this.rkey = rkey;
+    }
+
+    public String getRvalue() {
+        return rvalue;
+    }
+
+    public void setRvalue(String rvalue) {
+        this.rvalue = rvalue;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getCatalogId() {
+        return catalogId;
+    }
+
+    public void setCatalogId(String catalogId) {
+        this.catalogId = catalogId;
+    }
+
+    public String getSurveyTemplateId() {
+        return surveyTemplateId;
+    }
+
+    public void setSurveyTemplateId(String surveyTemplateId) {
+        this.surveyTemplateId = surveyTemplateId;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "CostSurveyTemplateUploadData{" +
+            "id='" + id + '\'' +
+            ", uploadId='" + uploadId + '\'' +
+            ", auditedUnitId='" + auditedUnitId + '\'' +
+            ", rowid='" + rowid + '\'' +
+            ", rkey='" + rkey + '\'' +
+            ", rvalue='" + rvalue + '\'' +
+            ", isDeleted='" + isDeleted + '\'' +
+            ", createTime=" + createTime +
+            ", createBy='" + createBy + '\'' +
+            ", updateTime=" + updateTime +
+            ", updateBy='" + updateBy + '\'' +
+            '}';
+    }
+}
+

+ 24 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/req/CostSurveyTemplateUploadDataQueryReq.java

@@ -0,0 +1,24 @@
+package com.hotent.enterpriseDeclare.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 成本调查表模板上传数据查询请求参数
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+@ApiModel("成本调查表模板上传数据查询请求参数")
+@Data
+public class CostSurveyTemplateUploadDataQueryReq {
+    
+    @ApiModelProperty(value = "上传记录ID", required = true)
+    private String uploadId;
+    
+    @ApiModelProperty(value = "企业ID", required = true)
+    private String auditedUnitId;
+}
+

+ 30 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/req/CostSurveyTemplateUploadDataReq.java

@@ -0,0 +1,30 @@
+package com.hotent.enterpriseDeclare.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 成本调查表模板上传数据保存请求参数
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+@ApiModel("成本调查表模板上传数据保存请求参数")
+@Data
+public class CostSurveyTemplateUploadDataReq {
+    
+    @ApiModelProperty(value = "上传记录ID", required = true)
+    private String uploadId;
+    
+    @ApiModelProperty(value = "企业ID", required = true)
+    private String auditedUnitId;
+    
+    @ApiModelProperty(value = "数据列表(Map格式,每个Map代表一行数据)", required = true)
+    private List<Map<String, String>> itemlist;
+}
+

+ 32 - 69
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskManagerImpl.java

@@ -308,72 +308,21 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
      */
      */
     private String completeTask(CostProjectTask task) {
     private String completeTask(CostProjectTask task) {
         CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
         CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
-        NodeConstant nextNode = NodeConstant.getNextNode(task.getCurrentNode());
         if (nTask == null){
         if (nTask == null){
             return "任务不存在";
             return "任务不存在";
         }
         }
-        if (!nTask.getPid().equals("0") ) {
-            // 将当前任务置为办结
-            String nextNodeStatus = nextNode.getNodeKey();
-            task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
-            task.setCurrentNode(nextNodeStatus);
-            costProjectTaskManager.updateById(task);
-            // 如果所有子任务都办结,则将父子任务都扭转
-            List<CostProjectTask> children = costProjectTaskManager.list(
-                    new LambdaQueryWrapper<CostProjectTask>()
-                            .eq(CostProjectTask::getPid, nTask.getPid())
-            );
-            boolean b = children.stream().allMatch(child ->
-                    child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
-            if(b){
-                CostProjectTask pNtask = costProjectTaskManager.getById(nTask.getPid());
-                pNtask.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
-                pNtask.setCurrentNode(nextNodeStatus);
-                costProjectTaskManager.updateById(pNtask);
-                String  status = "";
-                switch (pNtask.getCurrentNode()){
-                    case "yjfk":
-                        status = TaskStatusConstant.WAIT_FEEDBACK.getStatusCode();
-                        break;
-                    case "jtsy":
-                        status = TaskStatusConstant.COMPLETED.getStatusCode();
-                        break;
-                    default:
-                        status = TaskStatusConstant.AUDITING.getStatusCode();
-                        break;
-                }
-                for (CostProjectTask child : children) {
-                    child.setStatus(status);
-                    child.setCurrentNode(nextNodeStatus);
-                    costProjectTaskManager.updateById(child);
-                }
-            }
-            // 如果下一个节点是"意见告知",生成空的初步意见数据
-            if (NodeConstant.yjfk.getNodeKey().equals(nextNodeStatus)) {
-                // 检查是否已存在初步意见
-                CostProjectTaskPreliminaryOpinion existingOpinion = preliminaryOpinionManager.getByTaskId(task.getId());
-                if (existingOpinion == null) {
-                    CostProjectTaskPreliminaryOpinion preliminaryOpinion = new CostProjectTaskPreliminaryOpinion();
-                    preliminaryOpinion.setTaskId(task.getId());
-                    preliminaryOpinion.setStatus("draft");
-                    preliminaryOpinion.setIsDeleted(BaseConstant.NORMAL_STATUS);
-                    preliminaryOpinionManager.createOrUpdate(preliminaryOpinion);
-                }
-            }
 
 
-        }else{
-            List<CostProjectTask> children = costProjectTaskManager.list(
-                    new LambdaQueryWrapper<CostProjectTask>()
-                            .eq(CostProjectTask::getPid, nTask.getId())
-            );
-            boolean b = children.stream().allMatch(child ->
-                    child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
-            if (!b) {
-                throw new RuntimeException("子任务未全部办结,主任务无法办结");
-            }
-            task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
-            costProjectTaskManager.updateById(task);
+        List<CostProjectTask> children = costProjectTaskManager.list(
+                new LambdaQueryWrapper<CostProjectTask>()
+                        .eq(CostProjectTask::getPid, nTask.getId())
+        );
+        boolean b = children.stream().allMatch(child ->
+                child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
+        if (!b) {
+            throw new RuntimeException("子任务未全部办结,主任务无法办结");
         }
         }
+        task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
+        costProjectTaskManager.updateById(task);
 
 
         // 发送通知
         // 发送通知
         String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"通过";
         String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"通过";
@@ -558,19 +507,33 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                 new LambdaQueryWrapper<CostProjectTask>()
                 new LambdaQueryWrapper<CostProjectTask>()
                         .eq(CostProjectTask::getPid, nTask.getId())
                         .eq(CostProjectTask::getPid, nTask.getId())
         );
         );
-        boolean b = children.stream().allMatch(
-                child -> child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
+        boolean b = children.stream().noneMatch(
+                child -> child.getStatus().equals(TaskStatusConstant.AUDITING.getStatusCode()));
         if (!b){
         if (!b){
             throw new RuntimeException("子任务未全部办结,主任务无法扭转");
             throw new RuntimeException("子任务未全部办结,主任务无法扭转");
         }
         }
-        // 主任务扭转下一步
-        String nextNodeKey = NodeConstant.getNextNode(nTask.getCurrentNode()).getNodeKey();
-        nTask.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
-        nTask.setCurrentNode(nextNodeKey);
+        // 将当前任务置为办结
+        String nextNodeStatus = NodeConstant.getNextNode(nTask.getCurrentNode()).getNodeKey();
+        task.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
+        task.setCurrentNode(nextNodeStatus);
         nTask.setIsGd("0");
         nTask.setIsGd("0");
-        costProjectTaskManager.updateById(nTask);
+        costProjectTaskManager.updateById(task);
+        // 如果所有子任务都办结,则将父子任务都扭转
+        String  status = "";
+        switch (nTask.getCurrentNode()){
+            case "yjfk":
+                status = TaskStatusConstant.WAIT_FEEDBACK.getStatusCode();
+                break;
+            case "jtsy":
+                status = TaskStatusConstant.COMPLETED.getStatusCode();
+                break;
+            default:
+                status = TaskStatusConstant.AUDITING.getStatusCode();
+                break;
+        }
         for (CostProjectTask child : children) {
         for (CostProjectTask child : children) {
-            child.setCurrentNode(nextNodeKey);
+            child.setStatus(status);
+            child.setCurrentNode(nextNodeStatus);
             costProjectTaskManager.updateById(child);
             costProjectTaskManager.updateById(child);
         }
         }
         // 通知内容组装
         // 通知内容组装

+ 25 - 0
assistMg/src/main/java/com/hotent/surveyinfo/dao/CostSurveyTemplateUploadDao.java

@@ -0,0 +1,25 @@
+package com.hotent.surveyinfo.dao;
+
+import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 成本调查表模板上传记录表 Mapper 接口
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+public interface CostSurveyTemplateUploadDao extends BaseMapper<CostSurveyTemplateUpload> {
+
+    /**
+     * 根据目录ID查询上传记录列表(关联模板信息)
+     * @param catalogId 监管目录ID
+     * @return 上传记录列表
+     */
+    List<CostSurveyTemplateUpload> selectListByCatalogId(@Param("catalogId") String catalogId);
+}
+

+ 24 - 0
assistMg/src/main/java/com/hotent/surveyinfo/manager/CostSurveyTemplateUploadManager.java

@@ -0,0 +1,24 @@
+package com.hotent.surveyinfo.manager;
+
+import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
+import com.hotent.base.manager.BaseManager;
+
+import java.util.List;
+
+/**
+ * 成本调查表模板上传记录表 服务类
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+public interface CostSurveyTemplateUploadManager extends BaseManager<CostSurveyTemplateUpload> {
+
+    /**
+     * 根据目录ID查询上传记录列表
+     * @param catalogId 监管目录ID
+     * @return 上传记录列表
+     */
+    List<CostSurveyTemplateUpload> listByCatalogId(String catalogId);
+}
+

+ 27 - 0
assistMg/src/main/java/com/hotent/surveyinfo/manager/impl/CostSurveyTemplateUploadManagerImpl.java

@@ -0,0 +1,27 @@
+package com.hotent.surveyinfo.manager.impl;
+
+import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
+import com.hotent.surveyinfo.dao.CostSurveyTemplateUploadDao;
+import com.hotent.surveyinfo.manager.CostSurveyTemplateUploadManager;
+import com.hotent.base.manager.impl.BaseManagerImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 成本调查表模板上传记录表 服务实现类
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+@Service
+public class CostSurveyTemplateUploadManagerImpl extends BaseManagerImpl<CostSurveyTemplateUploadDao, CostSurveyTemplateUpload> implements CostSurveyTemplateUploadManager {
+
+    @Override
+    public List<CostSurveyTemplateUpload> listByCatalogId(String catalogId) {
+        return baseMapper.selectListByCatalogId(catalogId);
+    }
+}
+

+ 273 - 0
assistMg/src/main/java/com/hotent/surveyinfo/model/CostSurveyTemplateUpload.java

@@ -0,0 +1,273 @@
+package com.hotent.surveyinfo.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.hotent.base.entity.BaseModel;
+
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * 成本调查表模板上传记录表
+ *
+ * @company 山西清众科技股份有限公司
+ * @author 超级管理员
+ * @since 2025-01-XX
+ */
+@ApiModel(value="CostSurveyTemplateUpload对象", description="成本调查表模板上传记录表")
+public class CostSurveyTemplateUpload extends BaseModel<CostSurveyTemplateUpload> {
+
+    private static final long serialVersionUID = 1L;
+    
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @JsonProperty("id")
+    private String id;
+    
+    @ApiModelProperty(value = "监管目录ID")
+    @TableField("catalog_id")
+    @JsonProperty("catalogId")
+    private String catalogId;
+    
+    @ApiModelProperty(value = "成本调查表模板ID")
+    @TableField("survey_template_id")
+    @JsonProperty("surveyTemplateId")
+    private String surveyTemplateId;
+    
+    @ApiModelProperty(value = "是否必填:0否 1是")
+    @TableField("is_required")
+    @JsonProperty("isRequired")
+    private String isRequired;
+    
+    @ApiModelProperty(value = "是否上传:0未上传 1已上传")
+    @TableField("is_upload")
+    @JsonProperty("isUpload")
+    private String isUpload;
+    
+    @ApiModelProperty(value = "上传时间")
+    @TableField("upload_time")
+    @JsonProperty("uploadTime")
+    private LocalDateTime uploadTime;
+    
+    @ApiModelProperty(value = "上传人")
+    @TableField("upload_by")
+    @JsonProperty("uploadBy")
+    private String uploadBy;
+    
+    @ApiModelProperty(value = "文件地址")
+    @TableField("file_url")
+    @JsonProperty("fileUrl")
+    private String fileUrl;
+    
+    @ApiModelProperty(value = "排序号")
+    @TableField("order_num")
+    @JsonProperty("orderNum")
+    private Integer orderNum;
+    
+    @ApiModelProperty(value = "逻辑删除:0正常 1删除")
+    @TableField("is_deleted")
+    @JsonProperty("isDeleted")
+    private String isDeleted;
+    
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    @JsonProperty("createTime")
+    private LocalDateTime createTime;
+    
+    @ApiModelProperty(value = "创建人")
+    @TableField("create_by")
+    @JsonProperty("createBy")
+    private String createBy;
+    
+    @ApiModelProperty(value = "更新时间")
+    @TableField("update_time")
+    @JsonProperty("updateTime")
+    private LocalDateTime updateTime;
+    
+    @ApiModelProperty(value = "更新人")
+    @TableField("update_by")
+    @JsonProperty("updateBy")
+    private String updateBy;
+
+    // 关联查询字段(非数据库字段)
+    @ApiModelProperty(value = "调查表名称")
+    @TableField(exist = false)
+    @JsonProperty("surveyTemplateName")
+    private String surveyTemplateName;
+    
+    @ApiModelProperty(value = "模板类型:1单记录 2固定表 3动态表")
+    @TableField(exist = false)
+    @JsonProperty("templateType")
+    private String templateType;
+    
+    @ApiModelProperty(value = "资料类型")
+    @TableField(exist = false)
+    @JsonProperty("dataType")
+    private String dataType;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCatalogId() {
+        return catalogId;
+    }
+
+    public void setCatalogId(String catalogId) {
+        this.catalogId = catalogId;
+    }
+
+    public String getSurveyTemplateId() {
+        return surveyTemplateId;
+    }
+
+    public void setSurveyTemplateId(String surveyTemplateId) {
+        this.surveyTemplateId = surveyTemplateId;
+    }
+
+    public String getIsRequired() {
+        return isRequired;
+    }
+
+    public void setIsRequired(String isRequired) {
+        this.isRequired = isRequired;
+    }
+
+    public String getIsUpload() {
+        return isUpload;
+    }
+
+    public void setIsUpload(String isUpload) {
+        this.isUpload = isUpload;
+    }
+
+    public LocalDateTime getUploadTime() {
+        return uploadTime;
+    }
+
+    public void setUploadTime(LocalDateTime uploadTime) {
+        this.uploadTime = uploadTime;
+    }
+
+    public String getUploadBy() {
+        return uploadBy;
+    }
+
+    public void setUploadBy(String uploadBy) {
+        this.uploadBy = uploadBy;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getSurveyTemplateName() {
+        return surveyTemplateName;
+    }
+
+    public void setSurveyTemplateName(String surveyTemplateName) {
+        this.surveyTemplateName = surveyTemplateName;
+    }
+
+    public String getTemplateType() {
+        return templateType;
+    }
+
+    public void setTemplateType(String templateType) {
+        this.templateType = templateType;
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "CostSurveyTemplateUpload{" +
+            "id=" + id +
+            ", catalogId=" + catalogId +
+            ", surveyTemplateId=" + surveyTemplateId +
+            ", isRequired=" + isRequired +
+            ", isUpload=" + isUpload +
+            ", uploadTime=" + uploadTime +
+            ", uploadBy=" + uploadBy +
+            ", fileUrl=" + fileUrl +
+            ", orderNum=" + orderNum +
+            ", isDeleted=" + isDeleted +
+            ", createTime=" + createTime +
+            ", createBy=" + createBy +
+            ", updateTime=" + updateTime +
+            ", updateBy=" + updateBy +
+        "}";
+    }
+}
+

+ 88 - 0
assistMg/src/main/resources/mapper/CostSurveyTemplateUploadDataMapper.xml

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hotent.enterpriseDeclare.dao.CostSurveyTemplateUploadDataDao">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData">
+        <id column="id" property="id" />
+        <result column="upload_id" property="uploadId" />
+        <result column="audited_unit_id" property="auditedUnitId" />
+        <result column="rowid" property="rowid" />
+        <result column="rkey" property="rkey" />
+        <result column="rvalue" property="rvalue" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="create_time" property="createTime" />
+        <result column="create_by" property="createBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_by" property="updateBy" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, upload_id, audited_unit_id, rowid, rkey, rvalue, is_deleted, create_time, create_by, update_time, update_by
+    </sql>
+
+    <select id="selectPage" resultMap="BaseResultMap">
+        select 
+            <include refid="Base_Column_List"/> 
+        from
+            cost_survey_template_upload_data
+        ${ew.customSqlSegment}
+    </select>
+    
+    <select id="selectList" resultMap="BaseResultMap">
+        select 
+            <include refid="Base_Column_List"/> 
+        from
+            cost_survey_template_upload_data
+        ${ew.customSqlSegment}
+    </select>
+    
+    <select id="selectById" resultMap="BaseResultMap">
+        select 
+            <include refid="Base_Column_List"/> 
+        from
+            cost_survey_template_upload_data
+        where 
+            id = #{id}
+    </select>
+
+    <!-- 根据上传记录ID查询数据列表 -->
+    <select id="selectByUploadId" resultMap="BaseResultMap">
+        SELECT 
+            <include refid="Base_Column_List"/>
+        FROM 
+            cost_survey_template_upload_data
+        WHERE 
+            upload_id = #{uploadId}
+            AND is_deleted = '0'
+        ORDER BY rowid, rkey
+    </select>
+
+    <!-- 根据上传记录ID和企业ID查询数据列表 -->
+    <select id="selectByUploadIdAndAuditedUnitId" resultMap="BaseResultMap">
+        SELECT 
+            <include refid="Base_Column_List"/>
+        FROM 
+            cost_survey_template_upload_data
+        WHERE 
+            upload_id = #{uploadId}
+            AND audited_unit_id = #{auditedUnitId}
+            AND is_deleted = '0'
+        ORDER BY rowid, rkey
+    </select>
+
+    <!-- 根据行数据ID查询数据列表 -->
+    <select id="selectByRowid" resultMap="BaseResultMap">
+        SELECT 
+            <include refid="Base_Column_List"/>
+        FROM 
+            cost_survey_template_upload_data
+        WHERE 
+            rowid = #{rowid}
+            AND is_deleted = '0'
+        ORDER BY rkey
+    </select>
+
+</mapper>
+

+ 91 - 0
assistMg/src/main/resources/mapper/CostSurveyTemplateUploadMapper.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hotent.surveyinfo.dao.CostSurveyTemplateUploadDao">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hotent.surveyinfo.model.CostSurveyTemplateUpload">
+        <id column="id" property="id" />
+        <result column="catalog_id" property="catalogId" />
+        <result column="survey_template_id" property="surveyTemplateId" />
+        <result column="is_required" property="isRequired" />
+        <result column="is_upload" property="isUpload" />
+        <result column="upload_time" property="uploadTime" />
+        <result column="upload_by" property="uploadBy" />
+        <result column="file_url" property="fileUrl" />
+        <result column="order_num" property="orderNum" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="create_time" property="createTime" />
+        <result column="create_by" property="createBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_by" property="updateBy" />
+        <!-- 关联查询字段 -->
+        <result column="survey_template_name" property="surveyTemplateName" />
+        <result column="template_type" property="templateType" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, catalog_id, survey_template_id, is_required, is_upload, upload_time, upload_by, 
+        file_url, order_num, is_deleted, create_time, create_by, update_time, update_by
+    </sql>
+
+    <!-- 根据目录ID查询上传记录列表(关联模板信息) -->
+    <select id="selectListByCatalogId" resultMap="BaseResultMap">
+        SELECT 
+            COALESCE(u.id, '') as id,
+            t.catalog_id,
+            t.survey_template_id,
+            COALESCE(u.is_required, '1') as is_required,
+            COALESCE(u.is_upload, '0') as is_upload,
+            u.upload_time,
+            u.upload_by,
+            u.file_url,
+            COALESCE(u.order_num, 0) as order_num,
+            COALESCE(u.is_deleted, '0') as is_deleted,
+            COALESCE(u.create_time, t.create_time) as create_time,
+            COALESCE(u.create_by, t.create_by) as create_by,
+            u.update_time,
+            u.update_by,
+            t.survey_template_name,
+            t.template_type,
+            '模版定制' as data_type
+        FROM 
+            cost_survey_template t
+        LEFT JOIN 
+            cost_survey_template_upload u ON t.survey_template_id = u.survey_template_id 
+                AND u.catalog_id = #{catalogId} 
+                AND u.is_deleted = '0'
+        WHERE 
+            t.catalog_id = #{catalogId}
+            AND t.status = '0'
+            AND t.is_delete = '0'
+        ORDER BY 
+            COALESCE(u.order_num, 0) ASC, t.create_time ASC
+    </select>
+
+    <select id="selectPage" resultMap="BaseResultMap">
+        select 
+            <include refid="Base_Column_List"/> 
+        from
+            cost_survey_template_upload
+        ${ew.customSqlSegment}
+    </select>
+    
+    <select id="selectList" resultMap="BaseResultMap">
+        select 
+            <include refid="Base_Column_List"/> 
+        from
+            cost_survey_template_upload
+        ${ew.customSqlSegment}
+    </select>
+    
+    <select id="selectById" resultMap="BaseResultMap">
+        select 
+            <include refid="Base_Column_List"/> 
+        from
+            cost_survey_template_upload
+        where 
+            id = #{id}
+    </select>
+</mapper>
+