package com.lnsoft.sdth.ems.cfs.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.lnsoft.mmbdf.service.commons.utils.StringUtil;
import com.lnsoft.sdth.base.base.RespObject;
import com.lnsoft.sdth.base.base.auth.AuthUtil;
import com.lnsoft.sdth.base.base.utils.PdfUtils;
import com.lnsoft.sdth.base.db.edb.entity.*;
import com.lnsoft.sdth.base.db.edb.mapper.EdbEnterpriseAppraiseInfoMapper;
import com.lnsoft.sdth.base.db.edb.mapper.EdbEnterpriseInfoMapper;
import com.lnsoft.sdth.base.db.edb.query.PmTransferProjectDetailQuery;
import com.lnsoft.sdth.base.db.edb.service.impl.ExportDataServiceImpl;
import com.lnsoft.sdth.base.db.sas.isa.query.CoreInfoQuery;
import com.lnsoft.sdth.base.db.utils.CommonUtil;
import com.lnsoft.sdth.base.db.utils.DataGrid;
import com.lnsoft.sdth.base.db.utils.DateUtil;
import com.lnsoft.sdth.base.db.utils.PageHelperUtil;
import com.lnsoft.sdth.ems.cfs.dto.*;
import com.lnsoft.sdth.ems.cfs.mapper.*;
import com.lnsoft.sdth.ems.cfs.query.*;
import com.lnsoft.sdth.ems.cfs.service.CfEnterpriseCreditReportMainService;
import com.lnsoft.sdth.ems.cfs.util.BeforeQueryUtil;
import com.lnsoft.sdth.ems.cfs.util.EnergyColorEnum;
import com.lnsoft.sdth.ems.cfs.util.ReportLabelEnum;
import com.lnsoft.sdth.ems.pm.service.PmTransferProjectDetailService;
import org.apache.http.client.UserTokenHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.*;
/**
* 企业碳征信报告主表
*
* @Author wql
* @Date 2024/2/15 9:39
*/
@Service
public class CfEnterpriseCreditReportMainServiceImpl implements CfEnterpriseCreditReportMainService {
/**
* 企业碳征信报告主表
*/
@Autowired
private CfEnterpriseCreditReportMainMapper cfEnterpriseCreditReportMainMapper;
/**
* excel列表导出
*/
@Autowired
private ExportDataServiceImpl exportDataService;
/**
* 企业信息查询
*/
@Autowired
private EdbEnterpriseInfoMapper edbEnterpriseInfoMapper;
/**
* 企业碳征信报告减碳项目
*/
@Autowired
private CfEnterpriseCreditReportProjectMapper cfEnterpriseCreditReportProjectMapper;
/**
* 企业金融服务申请
*/
@Autowired
private CfEnterpriseFinanceApplyMapper cfEnterpriseFinanceApplyMapper;
/**
* 企业碳征信报告碳金融申请记录
*/
@Autowired
private CfEnterpriseCreditReportApplyMapper cfEnterpriseCreditReportApplyMapper;
/**
* 企业碳征信报告企业标签与释义
*/
@Autowired
private CfEnterpriseCreditReportLabelMapper cfEnterpriseCreditReportLabelMapper;
/**
* 企业碳征信报告风险防范预警
*/
@Autowired
private CfEnterpriseCreditReportWarningMapper cfEnterpriseCreditReportWarningMapper;
/**
* 技改项目详情服务接口层
*/
@Resource
private PmTransferProjectDetailService pmTransferProjectDetailService;
@Autowired
private CfEnterpriseEnergyColorMapper cfEnterpriseEnergyColorMapper;
@Autowired
private CfEnterpriseEnergyLevelMapper cfEnterpriseEnergyLevelMapper;
@Autowired
private EdbEnterpriseAppraiseInfoMapper edbEnterpriseAppraiseInfoMapper;
@Autowired
private CfEnterpriseCreditReportLabelDetailMapper cfEnterpriseCreditReportLabelDetailMapper;
@Autowired
private CfEnterpriseWarningMapper cfEnterpriseWarningMapper;
@Autowired
private CfFactoryProcessEnergyMapper cfFactoryProcessEnergyMapper;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
public CfEnterpriseCreditReportMain queryById(Long id) {
CfEnterpriseCreditReportMain enterpriseCreditReportMain = cfEnterpriseCreditReportMainMapper.selectById(id);
enterpriseCreditReportMain.setQueryTime(new Date());
//企业标识与释义
CfEnterpriseCreditReportLabel cfEnterpriseCreditReportLabel = new CfEnterpriseCreditReportLabel();
cfEnterpriseCreditReportLabel.setReportId(id);
List<CfEnterpriseCreditReportLabel> enterpriseCreditReportLabelList = cfEnterpriseCreditReportLabelMapper.queryCfEnterpriseCreditReportLabelList(id);
for (CfEnterpriseCreditReportLabel enterpriseCreditReportLabel : enterpriseCreditReportLabelList) {
List<CfEnterpriseCreditReportLabelDetail> detailList = cfEnterpriseCreditReportLabelDetailMapper.queryCfEnterpriseCreditReportLabelDetailList(id, enterpriseCreditReportLabel.getLabelType());
enterpriseCreditReportLabel.setLabelDetailList(detailList);
if (enterpriseCreditReportLabel.getLabelType().equals(ReportLabelEnum.QYBS.getCode())) {
enterpriseCreditReportMain.setQybsEntity(enterpriseCreditReportLabel);
} else if (enterpriseCreditReportLabel.getLabelType().equals(ReportLabelEnum.QYPJ.getCode())) {
enterpriseCreditReportMain.setQypjEntity(enterpriseCreditReportLabel);
} else if (enterpriseCreditReportLabel.getLabelType().equals(ReportLabelEnum.QYXY.getCode())) {
enterpriseCreditReportMain.setQyxyEntity(enterpriseCreditReportLabel);
}
}
//碳金融减碳项目
List<CfEnterpriseCreditReportProject> enterpriseCreditReportProjectList = cfEnterpriseCreditReportProjectMapper.queryCfEnterpriseCreditReportProjectList(id);
if (enterpriseCreditReportProjectList != null && enterpriseCreditReportProjectList.size() > 0) {
enterpriseCreditReportMain.setEnterpriseCreditReportProjectList(enterpriseCreditReportProjectList);
}
//碳金融申请记录
List<CfEnterpriseCreditReportApply> enterpriseCreditReportApplyList = cfEnterpriseCreditReportApplyMapper.queryCfEnterpriseCreditReportApplyList(id);
if (enterpriseCreditReportApplyList != null && enterpriseCreditReportApplyList.size() > 0) {
enterpriseCreditReportMain.setEnterpriseCreditReportApplyList(enterpriseCreditReportApplyList);
}
//风险防范预警
List<CfEnterpriseCreditReportWarning> enterpriseCreditReportWarningList = cfEnterpriseCreditReportWarningMapper.queryCfEnterpriseCreditReportWarningList(id);
if (enterpriseCreditReportWarningList != null && enterpriseCreditReportWarningList.size() > 0) {
enterpriseCreditReportMain.setEnterpriseCreditReportWarningList(enterpriseCreditReportWarningList);
}
return enterpriseCreditReportMain;
}
/**
* 企业/发改委/银行查询单条报告
*
* @param cfEnterpriseCreditReportMain
* @return
*/
public CfEnterpriseCreditReportMain queryReportDetails(CfEnterpriseCreditReportMainQuery cfEnterpriseCreditReportMain) {
if (StringUtil.isEmpty(cfEnterpriseCreditReportMain.getEnterpriseCode())) {//企业用户
String enterpriseCode = AuthUtil.getCurrentEnterpriseCode();
cfEnterpriseCreditReportMain.setEnterpriseCode(enterpriseCode);
}
List<CfEnterpriseCreditReportMain> cfEnterpriseCreditReportMainList = cfEnterpriseCreditReportMainMapper.queryCfEnterpriseCreditReportMainList(cfEnterpriseCreditReportMain);
if (cfEnterpriseCreditReportMainList==null || cfEnt
list转树状结构通用工具类
需积分: 0 32 浏览量
更新于2024-03-21
收藏 10KB ZIP 举报
在IT行业中,数据结构的转换是非常常见的操作,特别是在处理复杂的数据组织时。"list转树状结构"就是其中的一种常见需求,特别是在数据可视化、数据库查询优化或者构建层次化菜单等场景下。本篇将深入探讨如何实现一个非递归的、支持多个顶级节点的通用工具类来完成这一任务。
我们需要理解“list转树状结构”的概念。在这个问题中,我们通常有一个扁平化的数据列表,其中每个元素代表一个节点,节点之间可能存在父子关系。我们的目标是将这个列表转换为树形结构,这样可以更好地体现数据间的层次关系。
对于非递归方法,我们可以利用栈或队列等数据结构来实现。这种方法避免了递归可能导致的堆栈溢出问题,尤其适用于层级较深的树结构。以下是一个基于栈的非递归转换算法步骤:
1. 初始化一个空栈,用于存储待处理的节点。
2. 将所有顶级节点(即没有父节点的节点)添加到栈中。
3. 当栈不为空时,执行以下操作:
- 弹出栈顶元素,作为当前节点。
- 遍历列表中的其他节点,查找与当前节点存在父子关系的子节点,将这些子节点添加到当前节点的子节点列表中,并将子节点入栈。
4. 重复步骤3,直到栈为空。
在实现这个通用工具类时,我们需要考虑以下几点:
1. **数据模型**:定义一个Node类,包含节点ID、节点值、子节点列表等属性,用于表示树结构的节点。
```java
public class TreeNode {
private int id;
private String value;
private List<TreeNode> children;
// 构造器、getter和setter方法...
}
```
2. **工具类**:创建TreeUtil类,提供`listToTree(List<TreeNode>)`方法,接收一个Node列表,返回转换后的树结构。
```java
public class TreeUtil {
public static List<TreeNode> listToTree(List<TreeNode> nodeList) {
// 实现上述非递归算法
}
}
```
3. **处理多个顶级节点**:在处理过程中,我们需要记录已处理过的节点,以处理多个顶级节点。可以使用HashMap存储已处理节点,键为节点ID,值为节点对象。
4. **连接父子节点**:遍历列表时,通过比较节点的父ID与当前节点ID,确定父子关系并进行连接。
5. **处理子节点**:当找到子节点时,不仅将其添加到当前节点的子节点列表,还需要将子节点入栈,以便后续处理。
6. **处理结束条件**:栈为空表示所有节点都已处理完毕,此时返回构建好的树结构。
通过以上设计,我们就可以创建一个通用的工具类,能够处理任意具有父子关系的list数据,将其转换为树状结构,且支持存在多个顶级节点的情况。这个工具类在实际开发中具有很高的实用性,可应用于多种场景,例如数据展示、数据检索等。

程序海中的鱼儿
- 粉丝: 92
最新资源
- 公司网络组建方案.doc
- 大数据背景下的《二维动画设计》课程翻转课堂教学模式探究.docx
- 互联网+环境下学困生参与课堂合作学习的探究.docx
- 数据库车辆管理.doc
- 图书馆大数据模型精品文档.doc
- 水果行业电子商务的现状和发展趋势.doc
- 信息化背景下浅析电力客服管理体系.docx
- 人工智能对企业会计的影响及其对策.docx
- 学生成绩管理系统数据库设计方案[].doc
- 高中数学必修3第一章算法初步.ppt
- 谈项目经理如何在项目管理中发挥好作用.docx
- 云计算环境下的资源管理研究.doc
- 基于单片机的数字温度计和数字钟方案设计书.doc
- MySQL-DBA最佳技术实践.pdf
- Delphi机房管理.doc
- 浅议军校大学计算机基础课程教学改革.docx