Pārlūkot izejas kodu

1.行业分析/历史分析

赵越越 2 nedēļas atpakaļ
vecāks
revīzija
e84dbfc580

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

@@ -2,9 +2,12 @@ package com.hotent.enterpriseDeclare.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData;
+import com.hotent.project.req.ComprehensiveStatisticsReq;
+import com.hotent.project.vo.CostSurveysVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 成本调查表模板上传数据表 Mapper 接口
@@ -38,5 +41,7 @@ public interface CostSurveyTemplateUploadDataDao extends BaseMapper<CostSurveyTe
      * @return 数据列表
      */
     List<CostSurveyTemplateUploadData> selectByRowid(@Param("rowid") String rowid);
+
+    List<CostSurveysVo> analyze(@Param("taskIds") List<String> taskIds);
 }
 

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

@@ -2,6 +2,8 @@ package com.hotent.enterpriseDeclare.manager;
 
 import com.hotent.base.manager.BaseManager;
 import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData;
+import com.hotent.project.req.ComprehensiveStatisticsReq;
+import com.hotent.project.vo.CostSurveysVo;
 
 import java.util.List;
 import java.util.Map;
@@ -63,5 +65,7 @@ public interface CostSurveyTemplateUploadDataManager extends BaseManager<CostSur
      * @param uploadId 上传记录ID
      */
     void deleteByUploadId(String uploadId);
+
+    List<CostSurveysVo> analyze(List<String> taskIds);
 }
 

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

@@ -6,6 +6,8 @@ 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.project.req.ComprehensiveStatisticsReq;
+import com.hotent.project.vo.CostSurveysVo;
 import com.hotent.surveyinfo.manager.CostSurveyTemplateUploadManager;
 import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -128,6 +130,12 @@ public class CostSurveyTemplateUploadDataManagerImpl extends BaseManagerImpl<Cos
         deleteByRefId(uploadId, "1");
     }
 
+    @Override
+    public List<CostSurveysVo> analyze(List<String> taskIds) {
+
+        return costSurveyTemplateUploadDataDao.analyze(taskIds);
+    }
+
     /**
      * 根据refId删除数据
      * @param refId 关联ID

+ 41 - 0
assistMg/src/main/java/com/hotent/project/controller/ComprehensiveStatisticsController.java

@@ -0,0 +1,41 @@
+package com.hotent.project.controller;
+
+import com.hotent.base.annotation.ApiGroup;
+import com.hotent.base.constants.ApiGroupConsts;
+import com.hotent.base.model.CommonResult;
+import com.hotent.base.query.PageList;
+import com.hotent.project.manager.ComprehensiveStatisticsManager;
+import com.hotent.project.model.CostAnnualPlan;
+import com.hotent.project.req.ComprehensiveStatisticsReq;
+import com.hotent.project.req.CostAnnualPlanPageReq;
+import com.hotent.project.vo.ComprehensiveStatisticsVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 14:06
+ */
+@RestController
+@RequestMapping("/api/comprehensive/statistics/")
+@Api(tags = "行业分析/历史分析")
+@ApiGroup(group = {ApiGroupConsts.GROUP_COST})
+public class ComprehensiveStatisticsController {
+
+    @Autowired
+    private ComprehensiveStatisticsManager comprehensiveStatisticsManager;
+
+    @PostMapping(value="/analyze")
+    @ApiOperation(value="行业分析/历史分析analyze",httpMethod = "POST",notes = "行业分析/历史分析analyze")
+    public CommonResult<ComprehensiveStatisticsVo> pageList(@RequestBody ComprehensiveStatisticsReq req) throws Exception {
+        return  comprehensiveStatisticsManager.analyze(req);
+    }
+
+}

+ 15 - 0
assistMg/src/main/java/com/hotent/project/manager/ComprehensiveStatisticsManager.java

@@ -0,0 +1,15 @@
+package com.hotent.project.manager;
+
+import com.hotent.base.model.CommonResult;
+import com.hotent.project.req.ComprehensiveStatisticsReq;
+import com.hotent.project.vo.ComprehensiveStatisticsVo;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 14:07
+ */
+public interface ComprehensiveStatisticsManager {
+
+
+    CommonResult<ComprehensiveStatisticsVo> analyze(ComprehensiveStatisticsReq req);
+}

+ 112 - 0
assistMg/src/main/java/com/hotent/project/manager/impl/ComprehensiveStatisticsManagerImpl.java

@@ -0,0 +1,112 @@
+package com.hotent.project.manager.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hotent.base.model.CommonResult;
+import com.hotent.base.util.StringUtil;
+import com.hotent.enterpriseDeclare.manager.CostSurveyTemplateUploadDataManager;
+import com.hotent.project.manager.ComprehensiveStatisticsManager;
+import com.hotent.project.manager.CostAnnualPlanManager;
+import com.hotent.project.manager.CostProjectApprovalManager;
+import com.hotent.project.manager.CostProjectTaskManager;
+import com.hotent.project.model.CostProjectApproval;
+import com.hotent.project.model.CostProjectTask;
+import com.hotent.project.req.ComprehensiveStatisticsReq;
+import com.hotent.project.vo.ComprehensiveStatisticsVo;
+import com.hotent.project.vo.CostSurveysVo;
+import com.hotent.project.vo.SurveysVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import springfox.documentation.spring.web.json.Json;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 14:07
+ */
+@Service
+public class ComprehensiveStatisticsManagerImpl implements ComprehensiveStatisticsManager {
+
+    @Autowired
+    private CostSurveyTemplateUploadDataManager costSurveyTemplateUploadDataManager;
+    @Autowired
+    private CostProjectApprovalManager costProjectApprovalManager;
+    @Autowired
+    private CostProjectTaskManager costProjectTaskManager;
+
+    @Override
+    public CommonResult<ComprehensiveStatisticsVo> analyze(ComprehensiveStatisticsReq req) {
+        List<String> taskIds=new ArrayList<>();
+        ComprehensiveStatisticsVo comprehensiveStatisticsVo = new ComprehensiveStatisticsVo();
+        QueryWrapper<CostProjectApproval> projectWrapper = new QueryWrapper<>();
+        if (StringUtil.isNotEmpty(req.getProjectId())) {
+            projectWrapper.eq("project_id",req.getProjectId());
+        }
+        if (StringUtil.isNotEmpty(req.getProjectName())) {
+            projectWrapper.like("project_name",req.getProjectName());
+        }
+        if (StringUtil.isNotEmpty(req.getStartYear())) {
+            projectWrapper.ge("audit_period",req.getStartYear());
+        }
+        if (StringUtil.isNotEmpty(req.getEndYear())) {
+            projectWrapper.le("audit_period",req.getEndYear());
+        }
+        List<CostProjectApproval> projectApprovals = costProjectApprovalManager.list(projectWrapper);
+        QueryWrapper<CostProjectTask> taskWrapper = new QueryWrapper<>();
+        if (StringUtil.isNotEmpty(req.getAuditedUnitId())) {
+            taskWrapper.eq("audited_unit_id",req.getAuditedUnitId());
+        }
+        if (StringUtil.isNotEmpty(req.getAuditedUnitName())) {
+            taskWrapper.like("audited_unit_name",req.getAuditedUnitName());
+        }
+        if (projectApprovals!=null && !projectApprovals.isEmpty()) {
+            List<String> projectids = projectApprovals.stream().map(CostProjectApproval::getProjectId).distinct().collect(Collectors.toList());
+            taskWrapper.in("project_id",projectids);
+        }
+        List<CostProjectTask> projectTasks = costProjectTaskManager.list(taskWrapper);
+        taskIds.addAll(projectTasks.stream().map(CostProjectTask::getId).distinct().collect(Collectors.toList()));
+        List<CostSurveysVo> costSurveysVos= costSurveyTemplateUploadDataManager.analyze(taskIds);
+        List<String> ids = costSurveysVos.stream().map(CostSurveysVo::getTaskId).distinct().collect(Collectors.toList());
+
+        List<CostSurveysVo> costSurveysVoList = new ArrayList<>();
+        //根据任务进行重组数据
+        List<CostSurveysVo> costSurveysVoArrayList = new ArrayList<>();
+        ids.forEach(i->{
+            List<CostSurveysVo> surveysVos = costSurveysVos.stream().filter(c -> c.getTaskId().equals(i)).collect(Collectors.toList());
+            List<String> rowids = surveysVos.stream().map(CostSurveysVo::getRowid).distinct().collect(Collectors.toList());
+            rowids.forEach(r->{
+                List<CostSurveysVo>  costSurveysVos1=surveysVos.stream().filter(v -> v.getRowid().equals(r)).collect(Collectors.toList());
+                if (!costSurveysVos1.isEmpty()) {
+                    CostSurveysVo costSurveysVo1 = costSurveysVos1.get(0);
+                    List<SurveysVo> collect = costSurveysVos1.stream().map(csv -> {
+                        SurveysVo surveysVo = new SurveysVo();
+                        String nianfen = (String) csv.getNianfen();
+                        if (nianfen != null && nianfen.length() >= 4) {
+                            String year = nianfen.substring(0, 4);
+                            surveysVo.setName(year);// 2024, 2025, 2023
+                        }
+                        surveysVo.setValue(csv.getRvalue());
+                        return surveysVo;
+                    }).collect(Collectors.toList());
+                    costSurveysVo1.setSurveysVos(collect);
+                    costSurveysVo1.setNianfen(null);
+                    costSurveysVoArrayList.add(costSurveysVo1);
+                }
+            });
+            List<CostSurveysVo> vos = costSurveysVoArrayList.stream().filter(c -> c.getParentId().equals("-1")).collect(Collectors.toList());
+            vos.forEach(v->{
+                List<CostSurveysVo> voList = costSurveysVoArrayList.stream().filter(su -> su.getParentId().equals(v.getRowid())).sorted(Comparator.comparing(CostSurveysVo::getOrderNum)).collect(Collectors.toList());
+                v.setCostSurveysVos(voList);
+            });
+            costSurveysVoList.addAll(vos);
+
+        });
+        comprehensiveStatisticsVo.setCostSurveysList(costSurveysVoList);
+        return CommonResult.<ComprehensiveStatisticsVo>ok().value(comprehensiveStatisticsVo);
+    }
+}

+ 1 - 1
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectDocumentManagerImpl.java

@@ -218,7 +218,7 @@ public class CostProjectDocumentManagerImpl extends BaseManagerImpl<CostProjectD
         if (costDocumentTemplate == null || BaseConstant.DELETE_FLAG.equals(costDocumentTemplate.getIsDeleted())) {
             throw new BaseException("文书模板不存在");
         }
-        if (costDocumentTemplate.getIsWh().equals("1")) {
+        if (costDocumentTemplate.getIsWh().equals("0")) {
             throw new BaseException("请填写通知文号");
         }
         if (ObjectUtil.isEmpty(req.getEnterpriseId())) {

+ 32 - 0
assistMg/src/main/java/com/hotent/project/req/ComprehensiveStatisticsReq.java

@@ -0,0 +1,32 @@
+package com.hotent.project.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 14:09
+ */
+@Data
+@ApiModel(value = "")
+public class ComprehensiveStatisticsReq {
+
+    @ApiModelProperty("开始年度")
+    private String startYear;
+
+    @ApiModelProperty("结束年度")
+    private String endYear;
+
+    @ApiModelProperty("单位名称")
+    private String auditedUnitName;
+
+    @ApiModelProperty("单位id")
+    private String auditedUnitId;
+
+    @ApiModelProperty("项目id")
+    private String projectId;
+
+    @ApiModelProperty("项目名称")
+    private String projectName;
+}

+ 23 - 0
assistMg/src/main/java/com/hotent/project/vo/ComprehensiveStatisticsVo.java

@@ -0,0 +1,23 @@
+package com.hotent.project.vo;/**
+ * @program: cbjs-mvue-master
+ * @description:
+ * @author: zhao yue yue
+ * @create: 2025-12-08 14:16
+ */
+
+import io.swagger.annotations.ApiModelProperty;
+import jdk.internal.dynalink.linker.LinkerServices;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 14:16
+ */
+@Data
+public class ComprehensiveStatisticsVo {
+    @ApiModelProperty(value = "成本调查项目集合")
+    private List<CostSurveysVo> costSurveysList;
+
+}

+ 52 - 0
assistMg/src/main/java/com/hotent/project/vo/CostSurveysVo.java

@@ -0,0 +1,52 @@
+package com.hotent.project.vo;/**
+ * @program: cbjs-mvue-master
+ * @description:
+ * @author: zhao yue yue
+ * @create: 2025-12-08 14:20
+ */
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 14:20
+ */
+@Data
+public class CostSurveysVo {
+
+    @ApiModelProperty(value = "成本核查项目名称")
+    private String id;
+
+    @ApiModelProperty(value = "成本核查项目名称")
+    private String name;
+
+    @ApiModelProperty(value = "排序")
+    private String orderNum;
+
+    @ApiModelProperty(value = "行id")
+    private String rowid;
+
+    @ApiModelProperty(value = "序号")
+    private String number;
+
+    @ApiModelProperty(value = "数值")
+    private String rvalue;
+
+    @ApiModelProperty(value = "")
+    private String taskId;
+
+    @ApiModelProperty(value = "")
+    private String nianfen;
+
+    @ApiModelProperty(value = "")
+    private String parentId;
+
+    @ApiModelProperty(value = "")
+    private List<SurveysVo> surveysVos;
+
+    @ApiModelProperty(value = "二级")
+    private List<CostSurveysVo> costSurveysVos;
+}

+ 14 - 0
assistMg/src/main/java/com/hotent/project/vo/SurveysVo.java

@@ -0,0 +1,14 @@
+package com.hotent.project.vo;
+
+import lombok.Data;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-12-08 16:24
+ */
+@Data
+public class SurveysVo {
+    private String name;
+
+    private String value;
+}

+ 1 - 1
assistMg/src/main/resources/mapper/CostDocumentTemplateFileMapper.xml

@@ -89,7 +89,7 @@
 				r.rowid,
 				r.order_num
 		FROM ranked_data r
-		WHERE r.rkey LIKE CONCAT('%', '核定值', '%')
+		WHERE r.rkey LIKE CONCAT('%', '核定值', '%') and r.type=3
 		ORDER BY r.order_num,
 				 (SELECT rvalue FROM ranked_data WHERE rowid = r.rowid AND position = 1),
 				 (SELECT rvalue FROM ranked_data WHERE rowid = r.rowid AND position = 3),

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

@@ -91,5 +91,45 @@
         ORDER BY rkey
     </select>
 
+
+
+    <!-- 根据行数据ID查询数据列表 -->
+    <select id="analyze" resultType="com.hotent.project.vo.CostSurveysVo">
+        WITH ranked_data AS (
+            SELECT
+                *,
+                ROW_NUMBER() OVER (PARTITION BY rowid ORDER BY id ASC) as position
+        FROM cost_survey_template_upload_data
+        WHERE 1=1
+        <if test="taskIds != null and taskIds.size() > 0">
+            AND task_id IN
+            <foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
+                #{taskId}
+            </foreach>
+        </if>
+            )
+        SELECT DISTINCT
+                (SELECT rvalue FROM ranked_data WHERE rowid = r.rowid AND position = 1) as number,
+                (SELECT rvalue FROM ranked_data WHERE rowid = r.rowid AND position = 3) as name,
+                r.rkey as nianfen,
+                r.rvalue,
+                r.rowid,
+                r.order_num as orderNum,
+                r.task_id as taskId,
+                r.parent_id as parentId,
+                r.id
+        FROM ranked_data r
+        WHERE r.rkey LIKE CONCAT('%', '核定值', '%')
+          and r.parent_id IS NOT NULL
+          and r.order_num IS NOT NULL
+          and r.task_id IS NOT NULL
+        and r.type=3
+        ORDER BY r.order_num,
+                 (SELECT rvalue FROM ranked_data WHERE rowid = r.rowid AND position = 1),
+                 (SELECT rvalue FROM ranked_data WHERE rowid = r.rowid AND position = 3),
+                 r.rkey
+
+    </select>
+
 </mapper>