瀏覽代碼

投资效益系统模块开发

LHB 4 月之前
父節點
當前提交
945c3fed14
共有 26 個文件被更改,包括 1530 次插入0 次删除
  1. 167 0
      src/main/java/org/springblade/modules/investment/controller/IbaProjectController.java
  2. 20 0
      src/main/java/org/springblade/modules/investment/mapper/IbaProjectFundMapper.java
  3. 38 0
      src/main/java/org/springblade/modules/investment/mapper/IbaProjectFundMapper.xml
  4. 64 0
      src/main/java/org/springblade/modules/investment/mapper/IbaProjectMapper.java
  5. 190 0
      src/main/java/org/springblade/modules/investment/mapper/IbaProjectMapper.xml
  6. 25 0
      src/main/java/org/springblade/modules/investment/mapper/IbaProjectVolumeMapper.java
  7. 41 0
      src/main/java/org/springblade/modules/investment/mapper/IbaProjectVolumeMapper.xml
  8. 22 0
      src/main/java/org/springblade/modules/investment/pojo/dto/IbaProjectVolumeDTO.java
  9. 12 0
      src/main/java/org/springblade/modules/investment/pojo/dto/IbaProjectVolumeQueryDTO.java
  10. 95 0
      src/main/java/org/springblade/modules/investment/pojo/entity/IbaProject.java
  11. 214 0
      src/main/java/org/springblade/modules/investment/pojo/entity/IbaProjectFund.java
  12. 49 0
      src/main/java/org/springblade/modules/investment/pojo/entity/IbaProjectVolume.java
  13. 24 0
      src/main/java/org/springblade/modules/investment/pojo/query/IbaProjectIncomeQuery.java
  14. 33 0
      src/main/java/org/springblade/modules/investment/pojo/query/IbaProjectQuery.java
  15. 31 0
      src/main/java/org/springblade/modules/investment/pojo/query/IbaProjectVolumeQuery.java
  16. 26 0
      src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectCompanyTotalVo.java
  17. 23 0
      src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectStageTotalVo.java
  18. 19 0
      src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectTotalVo.java
  19. 29 0
      src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectTypeTotalVo.java
  20. 28 0
      src/main/java/org/springblade/modules/investment/pojo/vo/incomeTotalVo.java
  21. 13 0
      src/main/java/org/springblade/modules/investment/service/IbaProjectFundService.java
  22. 94 0
      src/main/java/org/springblade/modules/investment/service/IbaProjectService.java
  23. 13 0
      src/main/java/org/springblade/modules/investment/service/IbaProjectVolumeService.java
  24. 22 0
      src/main/java/org/springblade/modules/investment/service/impl/IbaProjectFundServiceImpl.java
  25. 216 0
      src/main/java/org/springblade/modules/investment/service/impl/IbaProjectServiceImpl.java
  26. 22 0
      src/main/java/org/springblade/modules/investment/service/impl/IbaProjectVolumeServiceImpl.java

+ 167 - 0
src/main/java/org/springblade/modules/investment/controller/IbaProjectController.java

@@ -0,0 +1,167 @@
+package org.springblade.modules.investment.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.tool.api.R;
+import org.springblade.modules.investment.pojo.entity.IbaProject;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import org.springblade.modules.investment.pojo.query.IbaProjectIncomeQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectVolumeQuery;
+import org.springblade.modules.investment.pojo.vo.IbaProjectCompanyTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTypeTotalVo;
+import org.springblade.modules.investment.pojo.vo.incomeTotalVo;
+import org.springblade.modules.investment.service.IbaProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 投资效益分析-项目表(IbaProject)表控制层
+ *
+ * @author lihb
+ * @since 2025-05-06 10:20:25
+ */
+@RestController
+@RequestMapping("ibaProject")
+public class IbaProjectController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private IbaProjectService ibaProjectService;
+
+    /**
+     * 分页查询
+     *
+     * @param query 分页对象
+     * @return 查询结果
+     */
+    @PostMapping("/page")
+    public R<IPage<IbaProject>> queryByPage(@RequestBody IbaProjectQuery query) {
+        return R.data(this.ibaProjectService.queryByPage(query));
+    }
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param id 主键
+     * @return 单条数据
+     */
+    @GetMapping("{id}")
+    public R<IbaProject> queryById(@PathVariable("id") Long id) {
+        return R.data(this.ibaProjectService.queryById(id));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param ibaProject 实体
+     * @return 新增结果
+     */
+    @PostMapping("/add")
+    public R<IbaProject> add(@RequestBody IbaProject ibaProject) {
+        return R.status(this.ibaProjectService.insert(ibaProject));
+    }
+
+    /**
+     * 编辑数据
+     *
+     * @param ibaProject 实体
+     * @return 编辑结果
+     */
+    @PostMapping("/edit")
+    public R<IbaProject> edit(@RequestBody IbaProject ibaProject) {
+        if (ibaProject.getId() == null) {
+            return R.fail("id不能为空");
+        }
+        return R.status(this.ibaProjectService.update(ibaProject));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param ids 主键
+     * @return 删除是否成功
+     */
+    @DeleteMapping("/delete")
+    public R<Boolean> deleteById(List<Long> ids) {
+        if (ids.isEmpty()) {
+            return R.fail("id不能为空");
+        }
+        return R.status(this.ibaProjectService.deleteById(ids));
+    }
+
+
+    /**
+     * 统计项目数和公司数
+     *
+     * @return 统计数量
+     */
+    @GetMapping("/total")
+    public R<IbaProjectTotalVo> total() {
+        return R.data(this.ibaProjectService.total());
+    }
+
+
+    /**
+     * 根据类型统计
+     *
+     * @return 统计数量
+     */
+    @GetMapping("/typeTotal")
+    public R<List<IbaProjectTypeTotalVo>> typeTotal() {
+        return R.data(this.ibaProjectService.typeTotal());
+    }
+
+
+    /**
+     * 根据公司统计
+     *
+     * @return 统计数量
+     */
+    @GetMapping("/companyTotal")
+    public R<List<IbaProjectCompanyTotalVo>> companyTotal() {
+        return R.data(this.ibaProjectService.companyTotal());
+    }
+
+
+    /**
+     * 收益统计
+     *
+     * @return 统计数量
+     */
+    @PostMapping("/incomeTotalList")
+    public R<List<incomeTotalVo>> incomeTotalList(@RequestBody IbaProjectIncomeQuery query) {
+        if (query.getType() == null || (query.getType() != 1 && query.getType() != 2)) {
+            return R.fail("类型未知");
+        }
+        return R.data(this.ibaProjectService.incomeTotalList(query));
+    }
+
+    /**
+     * 车流量统计
+     *
+     * @return 统计数量
+     */
+    @PostMapping("/companyList")
+    public R<List<IbaProjectVolume>> companyList(@RequestBody IbaProjectVolumeQuery query) {
+        if (query.getType() == null || (query.getType() != 1 && query.getType() != 2)) {
+            return R.fail("类型未知");
+        }
+
+        if(query.getType() == 1 && query.getId() == null){
+            return R.fail("项目id为空");
+        }
+        if(query.getType() == 2 && query.getOperationCompany() == null){
+            return R.fail("公司为空");
+        }
+
+        return R.data(this.ibaProjectService.companyList(query));
+    }
+
+
+}
+

+ 20 - 0
src/main/java/org/springblade/modules/investment/mapper/IbaProjectFundMapper.java

@@ -0,0 +1,20 @@
+package org.springblade.modules.investment.mapper;
+
+import org.springblade.modules.investment.pojo.entity.IbaProjectFund;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+* @author LHB
+* @description 针对表【iba_project_fund(项目资金信息)】的数据库操作Mapper
+* @createDate 2025-05-06 16:42:33
+* @Entity org.springblade.modules.investment.pojo.entity.IbaProjectFund
+*/
+public interface IbaProjectFundMapper extends BaseMapper<IbaProjectFund> {
+
+}
+
+
+
+

+ 38 - 0
src/main/java/org/springblade/modules/investment/mapper/IbaProjectFundMapper.xml

@@ -0,0 +1,38 @@
+<?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="org.springblade.modules.investment.mapper.IbaProjectFundMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.modules.investment.pojo.entity.IbaProjectFund">
+            <id property="id" column="id" />
+            <result property="projectId" column="project_id" />
+            <result property="year" column="year" />
+            <result property="tollInflow" column="toll_inflow" />
+            <result property="otherInflow" column="other_inflow" />
+            <result property="constructInvestOutflow" column="construct_invest_outflow" />
+            <result property="constructProportionOutflow" column="construct_proportion_outflow" />
+            <result property="borrowPrincipalOutflow" column="borrow_principal_outflow" />
+            <result property="borrowInterestOutflow" column="borrow_interest_outflow" />
+            <result property="operateMaintainOutflow" column="operate_maintain_outflow" />
+            <result property="operateOverhaulOutflow" column="operate_overhaul_outflow" />
+            <result property="operateCapitalOutflow" column="operate_capital_outflow" />
+            <result property="operateOperationOutflow" column="operate_operation_outflow" />
+            <result property="operateOtherOutflow" column="operate_other_outflow" />
+            <result property="operationTaxesOutflow" column="operation_taxes_outflow" />
+            <result property="otherOutflow" column="other_outflow" />
+            <result property="isDeleted" column="is_deleted" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+
+
+    <sql id="Base_Column_List">
+        id,project_id,year,toll_inflow,other_inflow,construct_invest_outflow,
+        construct_proportion_outflow,borrow_principal_outflow,borrow_interest_outflow,operate_maintain_outflow,operate_overhaul_outflow,
+        operate_capital_outflow,operate_operation_outflow,operate_other_outflow,operation_taxes_outflow,other_outflow,
+        is_deleted,create_time,create_user,update_time,update_user
+    </sql>
+</mapper>

+ 64 - 0
src/main/java/org/springblade/modules/investment/mapper/IbaProjectMapper.java

@@ -0,0 +1,64 @@
+package org.springblade.modules.investment.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.investment.pojo.entity.IbaProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import org.springblade.modules.investment.pojo.query.IbaProjectIncomeQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectVolumeQuery;
+import org.springblade.modules.investment.pojo.vo.IbaProjectCompanyTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTypeTotalVo;
+import org.springblade.modules.investment.pojo.vo.incomeTotalVo;
+
+import java.util.List;
+
+/**
+* @author LHB
+* @description 针对表【iba_project(投资效益分析-项目表)】的数据库操作Mapper
+* @createDate 2025-05-06 09:59:53
+* @Entity generator.domain.IbaProject
+*/
+public interface IbaProjectMapper extends BaseMapper<IbaProject> {
+    /**
+     * 修改数据是否删除
+     * @param ids
+     * @param isDeleted
+     */
+    void updateIsDeleted(@Param("ids") List<Long> ids,@Param("isDeleted") int isDeleted);
+
+    /**
+     * 按公司统计
+     * @return
+     */
+    Long companyTotal();
+
+    /**
+     * 项目类型统计
+     * @return
+     */
+    List<IbaProjectTypeTotalVo> typeTotal();
+
+    /**
+     * 按公司分类统计
+     * @return
+     */
+    List<IbaProjectCompanyTotalVo> companyGroupTotal();
+
+    /**
+     * 收益统计
+     * @param query
+     * @return
+     */
+    List<incomeTotalVo> incomeTotalList(IbaProjectIncomeQuery query);
+
+    /**
+     * 根据条件查询车流量
+     * @param query
+     * @return
+     */
+    List<IbaProjectVolume> companyList(IbaProjectVolumeQuery query);
+}
+
+
+
+

+ 190 - 0
src/main/java/org/springblade/modules/investment/mapper/IbaProjectMapper.xml

@@ -0,0 +1,190 @@
+<?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="org.springblade.modules.investment.mapper.IbaProjectMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.modules.investment.pojo.entity.IbaProject">
+            <id property="id" column="id" />
+            <result property="projectName" column="project_name" />
+            <result property="type" column="type" />
+            <result property="routeType" column="route_type" />
+            <result property="stage" column="stage" />
+            <result property="constructStartTime" column="construct_start_time" />
+            <result property="constructEndTime" column="construct_end_time" />
+            <result property="operationStartTime" column="operation_start_time" />
+            <result property="operationEndTime" column="operation_end_time" />
+            <result property="operationCompany" column="operation_company" />
+            <result property="actualOperatingMileage" column="actual_operating_mileage" />
+            <result property="lane" column="lane" />
+            <result property="isDeleted" column="is_deleted" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,project_name,type,route_type,stage,construct_start_time,
+        construct_end_time,operation_start_time,operation_end_time,operation_company,actual_operating_mileage,
+        lane,is_deleted,
+        create_time,create_user,update_time,update_user
+    </sql>
+    <update id="updateIsDeleted">
+        UPDATE iba_project SET is_deleted = #{isDeleted} WHERE id IN
+        <foreach item="id" collection="ids" separator="," open="(" close=")" index="">
+            #{id}
+        </foreach>
+    </update>
+
+
+    <select id="companyTotal" resultType="java.lang.Long">
+        select count(0) from (select DISTINCT operation_company from iba_project where is_deleted = 0 ) a
+    </select>
+
+
+    <resultMap id="IbaProjectTypeTotalVo" type="org.springblade.modules.investment.pojo.vo.IbaProjectTypeTotalVo">
+        <result property="type" column="type"/>
+        <collection property="stageTotalVos" javaType="java.util.List"
+                    ofType="org.springblade.modules.investment.pojo.vo.IbaProjectStageTotalVo"
+                    select="stageTotalByType"
+                    column="{type=type}"/>
+    </resultMap>
+
+    <select id="typeTotal" resultMap="IbaProjectTypeTotalVo">
+        SELECT
+            a.type,
+            b.dict_value typeName,
+            count( 0 ) count
+        FROM
+            iba_project a
+            INNER JOIN blade_dict_biz b ON a.type = b.id
+        WHERE
+            a.is_deleted = 0 and b.is_deleted = 0
+        GROUP BY
+            a.type
+    </select>
+
+    <select id="stageTotalByType" resultType="org.springblade.modules.investment.pojo.vo.IbaProjectStageTotalVo">
+        SELECT
+            a.stage,
+            b.dict_value stageName,
+            count( 0 ) count
+        FROM
+            iba_project a
+            INNER JOIN blade_dict_biz b ON b.CODE = 'ibaProjectStage'
+            AND a.stage = b.dict_key
+        WHERE
+            a.is_deleted = 0
+          AND b.is_deleted = 0
+          AND a.type = #{type}
+        GROUP BY
+            a.stage
+    </select>
+    <!--运营公司分组统计-->
+    <resultMap id="IbaProjectCompanyTotalVo" type="org.springblade.modules.investment.pojo.vo.IbaProjectCompanyTotalVo">
+        <result property="operationCompany" column="operation_company"/>
+        <collection property="stageTotalVos" javaType="java.util.List"
+                    ofType="org.springblade.modules.investment.pojo.vo.IbaProjectStageTotalVo"
+                    select="stageTotalByCompany"
+                    column="{operationCompany=operation_company}"/>
+    </resultMap>
+    <select id="companyGroupTotal"
+            resultMap="IbaProjectCompanyTotalVo">
+        SELECT
+            a.operation_company,
+            count( 0 ) count
+        FROM
+            iba_project a
+        WHERE
+            a.is_deleted = 0
+        GROUP BY
+            a.operation_company
+    </select>
+    <select id="stageTotalByCompany" resultType="org.springblade.modules.investment.pojo.vo.IbaProjectStageTotalVo">
+        SELECT
+            a.stage,
+            b.dict_value stageName,
+            count( 0 ) count
+        FROM
+            iba_project a
+            INNER JOIN blade_dict_biz b ON b.CODE = 'ibaProjectStage'
+            AND a.stage = b.dict_key
+        WHERE
+            a.is_deleted = 0
+          AND b.is_deleted = 0
+          AND a.operation_company = #{operationCompany}
+        GROUP BY
+            a.stage
+    </select>
+
+
+
+
+    <select id="incomeTotalList" resultType="org.springblade.modules.investment.pojo.vo.incomeTotalVo">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    a.id,
+                    a.project_name,
+                    a.operation_company ,
+                    IFNULL(( b.toll_inflow + b.other_inflow ), 0 ) inflow
+                FROM
+                    iba_project a
+                        LEFT JOIN iba_project_fund b ON a.id = b.project_id
+                <where>
+                    <if test="year != null and year != ''">
+                        b.year = #{year}
+                    </if>
+                </where>
+                GROUP BY
+                    <choose>
+                        <when test="type == 1">
+                            a.id
+                        </when>
+                        <otherwise>
+                            a.operation_company
+                        </otherwise>
+                    </choose>
+
+            ) a
+        ORDER BY
+            inflow DESC
+            LIMIT #{size}
+    </select>
+    <select id="companyList" resultType="org.springblade.modules.investment.pojo.entity.IbaProjectVolume">
+        SELECT
+            sum( b.number ) number,
+            b.*
+        FROM
+            iba_project a
+                LEFT JOIN iba_project_volume b ON a.id = b.project_id
+        <where>
+            <choose>
+                <when test="type == 1">
+                    a.id = #{id}
+                </when>
+                <otherwise>
+                    a.operationCompany = #{operationCompany}
+                </otherwise>
+            </choose>
+            <if test="year != null and year != ''">
+                AND b.year = #{year}
+            </if>
+        </where>
+
+        GROUP BY
+            <choose>
+                <when test="type == 1">
+                    a.id,
+                </when>
+                <otherwise>
+                    a.operationCompany,
+                </otherwise>
+            </choose>
+            b.`month`
+        order by b.month
+    </select>
+</mapper>

+ 25 - 0
src/main/java/org/springblade/modules/investment/mapper/IbaProjectVolumeMapper.java

@@ -0,0 +1,25 @@
+package org.springblade.modules.investment.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.investment.pojo.dto.IbaProjectVolumeDTO;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+* @author LHB
+* @description 针对表【iba_project_volume(项目历史车流量系统)】的数据库操作Mapper
+* @createDate 2025-05-06 14:49:22
+* @Entity org.springblade.modules.investment.pojo.entity.IbaProjectVolume
+*/
+public interface IbaProjectVolumeMapper extends BaseMapper<IbaProjectVolume> {
+
+    void updateIsDeleted(@Param("ids") List<Long> ids,@Param("isDeleted") int isDeleted);
+
+    List<IbaProjectVolumeDTO> selectGroupYearList(@Param("id") Long id);
+}
+
+
+
+

+ 41 - 0
src/main/java/org/springblade/modules/investment/mapper/IbaProjectVolumeMapper.xml

@@ -0,0 +1,41 @@
+<?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="org.springblade.modules.investment.mapper.IbaProjectVolumeMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.modules.investment.pojo.entity.IbaProjectVolume">
+            <id property="id" column="id" />
+            <result property="projectId" column="project_id" />
+            <result property="year" column="year" />
+            <result property="month" column="month" />
+            <result property="number" column="number" />
+            <result property="isDeleted" column="is_deleted" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+    <resultMap id="groupYear" type="org.springblade.modules.investment.pojo.dto.IbaProjectVolumeDTO">
+        <result column="year" property="year"/>
+        <collection property="ibaProjectVolumeList" javaType="java.util.List" resultMap="BaseResultMap"/>
+    </resultMap>
+
+
+    <sql id="Base_Column_List">
+        id,project_id,year,month,number,is_deleted,
+        create_time,create_user,update_time,update_user
+    </sql>
+    <update id="updateIsDeleted">
+        UPDATE iba_project SET is_deleted = #{isDeleted} WHERE project_id IN
+        <foreach item="id" collection="ids" separator="," open="(" close=")" index="">
+            #{id}
+        </foreach>
+    </update>
+    <select id="selectGroupYearList"
+            resultMap="groupYear">
+        select <include refid="Base_Column_List"/> from iba_project_volume where project_id = #{id}
+        group by year, month
+        order by year, month
+    </select>
+</mapper>

+ 22 - 0
src/main/java/org/springblade/modules/investment/pojo/dto/IbaProjectVolumeDTO.java

@@ -0,0 +1,22 @@
+package org.springblade.modules.investment.pojo.dto;
+
+import lombok.Data;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+
+import java.util.List;
+
+/**
+ * 年份分组
+ * @author LHB
+ */
+@Data
+public class IbaProjectVolumeDTO {
+    /**
+     * 年份
+     */
+    private String year;
+    /**
+     * 对应的月份及车流量
+     */
+    private List<IbaProjectVolume> ibaProjectVolumeList;
+}

+ 12 - 0
src/main/java/org/springblade/modules/investment/pojo/dto/IbaProjectVolumeQueryDTO.java

@@ -0,0 +1,12 @@
+package org.springblade.modules.investment.pojo.dto;
+
+import lombok.Data;
+
+/**
+ * 车流量统计
+ * @author LHB
+ */
+@Data
+public class IbaProjectVolumeQueryDTO {
+
+}

+ 95 - 0
src/main/java/org/springblade/modules/investment/pojo/entity/IbaProject.java

@@ -0,0 +1,95 @@
+package org.springblade.modules.investment.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springblade.modules.investment.pojo.dto.IbaProjectVolumeDTO;
+
+/**
+ * 投资效益分析-项目表
+ * @TableName iba_project
+ */
+@EqualsAndHashCode(callSuper = true)
+@TableName(value ="iba_project")
+@Data
+public class IbaProject extends BaseEntity {
+
+    /**
+     * 基础信息
+     */
+    private String projectName;
+
+    /**
+     * 类型(下拉选择框)
+     */
+    private Long type;
+
+    /**
+     * 路线类型(下拉选择框)
+     */
+    private Long routeType;
+
+    /**
+     * 项目阶段(下拉选择框)
+     */
+    private Integer stage;
+
+    /**
+     * 建设开始时间
+     */
+    private Date constructStartTime;
+
+    /**
+     * 建设结束时间
+     */
+    private Date constructEndTime;
+
+    /**
+     * 运营开始时间
+     */
+    private Date operationStartTime;
+
+    /**
+     * 运营结束时间
+     */
+    private Date operationEndTime;
+
+    /**
+     * 运营公司
+     */
+    private String operationCompany;
+
+    /**
+     * 实际运营里程(公里)
+     */
+    private Double actualOperatingMileage;
+
+    /**
+     * 车道数
+     */
+    private Integer lane;
+
+
+    @TableField(exist = false)
+    private Long createDept;
+
+    @TableField(exist = false)
+    private Integer status;
+
+    /**
+     * 资金信息
+     */
+    @TableField(exist = false)
+    private List<IbaProjectFund> funds;
+
+    /**
+     * 车流量数据
+     */
+    @TableField(exist = false)
+    private List<IbaProjectVolumeDTO> list;
+}

+ 214 - 0
src/main/java/org/springblade/modules/investment/pojo/entity/IbaProjectFund.java

@@ -0,0 +1,214 @@
+package org.springblade.modules.investment.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 项目资金信息
+ * @TableName iba_project_fund
+ */
+@TableName(value ="iba_project_fund")
+@Data
+public class IbaProjectFund {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 项目id
+     */
+    private Long projectId;
+
+    /**
+     * 年份
+     */
+    private String year;
+
+    /**
+     * 流入-通行费
+     */
+    private Double tollInflow;
+
+    /**
+     * 流入-其他
+     */
+    private Double otherInflow;
+
+    /**
+     * 流出-建设期总投资额
+     */
+    private Double constructInvestOutflow;
+
+    /**
+     * 流出-建设期各年份投入比例
+     */
+    private Double constructProportionOutflow;
+
+    /**
+     * 流出-借贷本金偿还
+     */
+    private Double borrowPrincipalOutflow;
+
+    /**
+     * 流出-借贷利息偿还
+     */
+    private Double borrowInterestOutflow;
+
+    /**
+     * 流出-经营成本-养护、小修费
+     */
+    private Double operateMaintainOutflow;
+
+    /**
+     * 流出-经营成本-大修费
+     */
+    private Double operateOverhaulOutflow;
+
+    /**
+     * 流出-经营成本-资本性支出
+     */
+    private Double operateCapitalOutflow;
+
+    /**
+     * 流出-经营成本-运营管理费
+     */
+    private Double operateOperationOutflow;
+
+    /**
+     * 流出-经营成本-其他费用
+     */
+    private Double operateOtherOutflow;
+
+    /**
+     * 流出-运营期税金
+     */
+    private Double operationTaxesOutflow;
+
+    /**
+     * 流出-其他费用
+     */
+    private Double otherOutflow;
+
+    /**
+     * 是否删除(0-未删除,1-删除)
+     */
+    private Integer isDeleted;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建人
+     */
+    private String createUser;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    /**
+     * 修改人
+     */
+    private String updateUser;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        IbaProjectFund other = (IbaProjectFund) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getProjectId() == null ? other.getProjectId() == null : this.getProjectId().equals(other.getProjectId()))
+            && (this.getYear() == null ? other.getYear() == null : this.getYear().equals(other.getYear()))
+            && (this.getTollInflow() == null ? other.getTollInflow() == null : this.getTollInflow().equals(other.getTollInflow()))
+            && (this.getOtherInflow() == null ? other.getOtherInflow() == null : this.getOtherInflow().equals(other.getOtherInflow()))
+            && (this.getConstructInvestOutflow() == null ? other.getConstructInvestOutflow() == null : this.getConstructInvestOutflow().equals(other.getConstructInvestOutflow()))
+            && (this.getConstructProportionOutflow() == null ? other.getConstructProportionOutflow() == null : this.getConstructProportionOutflow().equals(other.getConstructProportionOutflow()))
+            && (this.getBorrowPrincipalOutflow() == null ? other.getBorrowPrincipalOutflow() == null : this.getBorrowPrincipalOutflow().equals(other.getBorrowPrincipalOutflow()))
+            && (this.getBorrowInterestOutflow() == null ? other.getBorrowInterestOutflow() == null : this.getBorrowInterestOutflow().equals(other.getBorrowInterestOutflow()))
+            && (this.getOperateMaintainOutflow() == null ? other.getOperateMaintainOutflow() == null : this.getOperateMaintainOutflow().equals(other.getOperateMaintainOutflow()))
+            && (this.getOperateOverhaulOutflow() == null ? other.getOperateOverhaulOutflow() == null : this.getOperateOverhaulOutflow().equals(other.getOperateOverhaulOutflow()))
+            && (this.getOperateCapitalOutflow() == null ? other.getOperateCapitalOutflow() == null : this.getOperateCapitalOutflow().equals(other.getOperateCapitalOutflow()))
+            && (this.getOperateOperationOutflow() == null ? other.getOperateOperationOutflow() == null : this.getOperateOperationOutflow().equals(other.getOperateOperationOutflow()))
+            && (this.getOperateOtherOutflow() == null ? other.getOperateOtherOutflow() == null : this.getOperateOtherOutflow().equals(other.getOperateOtherOutflow()))
+            && (this.getOperationTaxesOutflow() == null ? other.getOperationTaxesOutflow() == null : this.getOperationTaxesOutflow().equals(other.getOperationTaxesOutflow()))
+            && (this.getOtherOutflow() == null ? other.getOtherOutflow() == null : this.getOtherOutflow().equals(other.getOtherOutflow()))
+            && (this.getIsDeleted() == null ? other.getIsDeleted() == null : this.getIsDeleted().equals(other.getIsDeleted()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+            && (this.getCreateUser() == null ? other.getCreateUser() == null : this.getCreateUser().equals(other.getCreateUser()))
+            && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
+            && (this.getUpdateUser() == null ? other.getUpdateUser() == null : this.getUpdateUser().equals(other.getUpdateUser()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getProjectId() == null) ? 0 : getProjectId().hashCode());
+        result = prime * result + ((getYear() == null) ? 0 : getYear().hashCode());
+        result = prime * result + ((getTollInflow() == null) ? 0 : getTollInflow().hashCode());
+        result = prime * result + ((getOtherInflow() == null) ? 0 : getOtherInflow().hashCode());
+        result = prime * result + ((getConstructInvestOutflow() == null) ? 0 : getConstructInvestOutflow().hashCode());
+        result = prime * result + ((getConstructProportionOutflow() == null) ? 0 : getConstructProportionOutflow().hashCode());
+        result = prime * result + ((getBorrowPrincipalOutflow() == null) ? 0 : getBorrowPrincipalOutflow().hashCode());
+        result = prime * result + ((getBorrowInterestOutflow() == null) ? 0 : getBorrowInterestOutflow().hashCode());
+        result = prime * result + ((getOperateMaintainOutflow() == null) ? 0 : getOperateMaintainOutflow().hashCode());
+        result = prime * result + ((getOperateOverhaulOutflow() == null) ? 0 : getOperateOverhaulOutflow().hashCode());
+        result = prime * result + ((getOperateCapitalOutflow() == null) ? 0 : getOperateCapitalOutflow().hashCode());
+        result = prime * result + ((getOperateOperationOutflow() == null) ? 0 : getOperateOperationOutflow().hashCode());
+        result = prime * result + ((getOperateOtherOutflow() == null) ? 0 : getOperateOtherOutflow().hashCode());
+        result = prime * result + ((getOperationTaxesOutflow() == null) ? 0 : getOperationTaxesOutflow().hashCode());
+        result = prime * result + ((getOtherOutflow() == null) ? 0 : getOtherOutflow().hashCode());
+        result = prime * result + ((getIsDeleted() == null) ? 0 : getIsDeleted().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        result = prime * result + ((getCreateUser() == null) ? 0 : getCreateUser().hashCode());
+        result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
+        result = prime * result + ((getUpdateUser() == null) ? 0 : getUpdateUser().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", projectId=").append(projectId);
+        sb.append(", year=").append(year);
+        sb.append(", tollInflow=").append(tollInflow);
+        sb.append(", otherInflow=").append(otherInflow);
+        sb.append(", constructInvestOutflow=").append(constructInvestOutflow);
+        sb.append(", constructProportionOutflow=").append(constructProportionOutflow);
+        sb.append(", borrowPrincipalOutflow=").append(borrowPrincipalOutflow);
+        sb.append(", borrowInterestOutflow=").append(borrowInterestOutflow);
+        sb.append(", operateMaintainOutflow=").append(operateMaintainOutflow);
+        sb.append(", operateOverhaulOutflow=").append(operateOverhaulOutflow);
+        sb.append(", operateCapitalOutflow=").append(operateCapitalOutflow);
+        sb.append(", operateOperationOutflow=").append(operateOperationOutflow);
+        sb.append(", operateOtherOutflow=").append(operateOtherOutflow);
+        sb.append(", operationTaxesOutflow=").append(operationTaxesOutflow);
+        sb.append(", otherOutflow=").append(otherOutflow);
+        sb.append(", isDeleted=").append(isDeleted);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", createUser=").append(createUser);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", updateUser=").append(updateUser);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 49 - 0
src/main/java/org/springblade/modules/investment/pojo/entity/IbaProjectVolume.java

@@ -0,0 +1,49 @@
+package org.springblade.modules.investment.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Data;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 项目历史车流量系统
+ * @TableName iba_project_volume
+ */
+@TableName(value ="iba_project_volume")
+@Data
+public class IbaProjectVolume extends BaseEntity {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 项目id
+     */
+    private Long projectId;
+
+    /**
+     * 年份
+     */
+    private String year;
+
+    /**
+     * 月份
+     */
+    private Integer month;
+
+    /**
+     * 数量
+     */
+    private Integer number;
+
+
+    @TableField(exist = false)
+    private Long createDept;
+
+    @TableField(exist = false)
+    private Integer status;
+}

+ 24 - 0
src/main/java/org/springblade/modules/investment/pojo/query/IbaProjectIncomeQuery.java

@@ -0,0 +1,24 @@
+package org.springblade.modules.investment.pojo.query;
+
+import lombok.Data;
+
+/**
+ * 收益统计
+ * @author LHB
+ */
+@Data
+public class IbaProjectIncomeQuery {
+    /**
+     *  类型:1-项目,2-公司
+     */
+    private Integer type;
+    /**
+     *  年份
+     */
+    private String year;
+    /**
+     * 查询多少条数据
+     */
+    private Integer size;
+
+}

+ 33 - 0
src/main/java/org/springblade/modules/investment/pojo/query/IbaProjectQuery.java

@@ -0,0 +1,33 @@
+package org.springblade.modules.investment.pojo.query;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.support.Query;
+import org.springblade.modules.investment.pojo.entity.IbaProject;
+
+/**
+ * @author LHB
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class IbaProjectQuery extends Query {
+    /**
+     * 类型(下拉选择框)
+     */
+    private String type;
+
+    /**
+     * 路线类型(下拉选择框)
+     */
+    private String routeType;
+
+    /**
+     * 项目阶段(下拉选择框)
+     */
+    private Integer stage;
+    /**
+     * 运营公司
+     */
+    private String operationCompany;
+
+}

+ 31 - 0
src/main/java/org/springblade/modules/investment/pojo/query/IbaProjectVolumeQuery.java

@@ -0,0 +1,31 @@
+package org.springblade.modules.investment.pojo.query;
+
+import lombok.Data;
+import scala.Int;
+
+/**
+ * 收益统计
+ * @author LHB
+ */
+@Data
+public class IbaProjectVolumeQuery {
+    /**
+     * 类型 1-项目 2-公司
+     */
+    private Integer type;
+
+    /**
+     *  项目id
+     */
+    private Long id;
+    /**
+     *  公司名称
+     */
+    private Long operationCompany;
+
+    /**
+     *  年份
+     */
+    private String year;
+
+}

+ 26 - 0
src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectCompanyTotalVo.java

@@ -0,0 +1,26 @@
+package org.springblade.modules.investment.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 按照公司统计
+ * @author LHB
+ */
+@Data
+public class IbaProjectCompanyTotalVo {
+    /**
+     * 类型名称
+     */
+    private String operationCompany;
+    /**
+     * 公司数量
+     */
+    private Integer count;
+
+    /**
+     * 状态类型及数量
+     */
+    private List<IbaProjectStageTotalVo> stageTotalVos;
+}

+ 23 - 0
src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectStageTotalVo.java

@@ -0,0 +1,23 @@
+package org.springblade.modules.investment.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * 按照路线类型统计数量
+ * @author LHB
+ */
+@Data
+public class IbaProjectStageTotalVo {
+    /**
+     * 路线id
+     */
+    private Long stage;
+    /**
+     * 路线类型名称
+     */
+    private String stageName;
+    /**
+     * 数量
+     */
+    private Integer count;
+}

+ 19 - 0
src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectTotalVo.java

@@ -0,0 +1,19 @@
+package org.springblade.modules.investment.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * 项目数和公司数统计
+ * @author LHB
+ */
+@Data
+public class IbaProjectTotalVo {
+    /**
+     * 项目数
+     */
+    private Long projectNum;
+    /**
+     * 公司数
+     */
+    private Long companyNum;
+}

+ 29 - 0
src/main/java/org/springblade/modules/investment/pojo/vo/IbaProjectTypeTotalVo.java

@@ -0,0 +1,29 @@
+package org.springblade.modules.investment.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 按照类型分类统计数量
+ * @author LHB
+ */
+@Data
+public class IbaProjectTypeTotalVo {
+    /**
+     * 类型id
+     */
+    private Long type;
+    /**
+     * 类型名称
+     */
+    private String typeName;
+    /**
+     * 数量
+     */
+    private Integer count;
+    /**
+     * 路线类型及数量
+     */
+    private List<IbaProjectStageTotalVo> stageTotalVos;
+}

+ 28 - 0
src/main/java/org/springblade/modules/investment/pojo/vo/incomeTotalVo.java

@@ -0,0 +1,28 @@
+package org.springblade.modules.investment.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * 收益统计试图
+ * @author LHB
+ */
+@Data
+public class incomeTotalVo {
+    /**
+     * 项目id
+     */
+    private Long id;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+    /**
+     * 公司名称
+     */
+    private String operationCompany;
+    /**
+     * 收益金额
+     */
+    private Double inflow;
+}

+ 13 - 0
src/main/java/org/springblade/modules/investment/service/IbaProjectFundService.java

@@ -0,0 +1,13 @@
+package org.springblade.modules.investment.service;
+
+import org.springblade.modules.investment.pojo.entity.IbaProjectFund;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author LHB
+* @description 针对表【iba_project_fund(项目资金信息)】的数据库操作Service
+* @createDate 2025-05-06 16:42:33
+*/
+public interface IbaProjectFundService extends IService<IbaProjectFund> {
+
+}

+ 94 - 0
src/main/java/org/springblade/modules/investment/service/IbaProjectService.java

@@ -0,0 +1,94 @@
+package org.springblade.modules.investment.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.modules.investment.pojo.entity.IbaProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import org.springblade.modules.investment.pojo.query.IbaProjectIncomeQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectVolumeQuery;
+import org.springblade.modules.investment.pojo.vo.IbaProjectCompanyTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTypeTotalVo;
+import org.springblade.modules.investment.pojo.vo.incomeTotalVo;
+
+import java.util.List;
+
+/**
+* @author LHB
+* @description 针对表【iba_project(投资效益分析-项目表)】的数据库操作Service
+* @createDate 2025-05-06 09:59:53
+*/
+public interface IbaProjectService extends IService<IbaProject> {
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    IbaProject queryById(Long id);
+
+    /**
+     * 分页查询
+     *
+     * @param query      分页对象
+     * @return 查询结果
+     */
+    IPage<IbaProject> queryByPage(IbaProjectQuery query);
+
+    /**
+     * 新增数据
+     *
+     * @param ibaProject 实例对象
+     * @return 实例对象
+     */
+    boolean insert(IbaProject ibaProject);
+
+    /**
+     * 修改数据
+     *
+     * @param ibaProject 实例对象
+     * @return 实例对象
+     */
+    boolean update(IbaProject ibaProject);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param ids 主键
+     * @return 是否成功
+     */
+    boolean deleteById(List<Long> ids);
+
+    /**
+     * 查询项目数和公司数
+     * @return
+     */
+    IbaProjectTotalVo total();
+
+    /**
+     * 按照类型统计
+     * @return
+     */
+    List<IbaProjectTypeTotalVo> typeTotal();
+
+    /**
+     * 按照公司统计
+     * @return
+     */
+    List<IbaProjectCompanyTotalVo> companyTotal();
+
+    /**
+     * 收益统计
+     * @param query
+     * @return
+     */
+    List<incomeTotalVo> incomeTotalList(IbaProjectIncomeQuery query);
+
+    /**
+     * 车流量统计
+     * @param query
+     * @return
+     */
+    List<IbaProjectVolume> companyList(IbaProjectVolumeQuery query);
+}

+ 13 - 0
src/main/java/org/springblade/modules/investment/service/IbaProjectVolumeService.java

@@ -0,0 +1,13 @@
+package org.springblade.modules.investment.service;
+
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author LHB
+* @description 针对表【iba_project_volume(项目历史车流量系统)】的数据库操作Service
+* @createDate 2025-05-06 14:49:22
+*/
+public interface IbaProjectVolumeService extends IService<IbaProjectVolume> {
+
+}

+ 22 - 0
src/main/java/org/springblade/modules/investment/service/impl/IbaProjectFundServiceImpl.java

@@ -0,0 +1,22 @@
+package org.springblade.modules.investment.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.modules.investment.pojo.entity.IbaProjectFund;
+import org.springblade.modules.investment.service.IbaProjectFundService;
+import org.springblade.modules.investment.mapper.IbaProjectFundMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author LHB
+* @description 针对表【iba_project_fund(项目资金信息)】的数据库操作Service实现
+* @createDate 2025-05-06 16:42:33
+*/
+@Service
+public class IbaProjectFundServiceImpl extends ServiceImpl<IbaProjectFundMapper, IbaProjectFund>
+    implements IbaProjectFundService{
+
+}
+
+
+
+

+ 216 - 0
src/main/java/org/springblade/modules/investment/service/impl/IbaProjectServiceImpl.java

@@ -0,0 +1,216 @@
+package org.springblade.modules.investment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.modules.investment.mapper.IbaProjectFundMapper;
+import org.springblade.modules.investment.mapper.IbaProjectVolumeMapper;
+import org.springblade.modules.investment.pojo.dto.IbaProjectVolumeDTO;
+import org.springblade.modules.investment.pojo.entity.IbaProject;
+import org.springblade.modules.investment.mapper.IbaProjectMapper;
+import org.springblade.modules.investment.pojo.entity.IbaProjectFund;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import org.springblade.modules.investment.pojo.query.IbaProjectIncomeQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectQuery;
+import org.springblade.modules.investment.pojo.query.IbaProjectVolumeQuery;
+import org.springblade.modules.investment.pojo.vo.IbaProjectCompanyTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTotalVo;
+import org.springblade.modules.investment.pojo.vo.IbaProjectTypeTotalVo;
+import org.springblade.modules.investment.pojo.vo.incomeTotalVo;
+import org.springblade.modules.investment.service.IbaProjectFundService;
+import org.springblade.modules.investment.service.IbaProjectService;
+import org.springblade.modules.investment.service.IbaProjectVolumeService;
+import org.springblade.modules.project.utils.SnowFlakeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author LHB
+ * @description 针对表【iba_project(投资效益分析-项目表)】的数据库操作Service实现
+ * @createDate 2025-05-06 09:59:53
+ */
+@Service
+public class IbaProjectServiceImpl extends ServiceImpl<IbaProjectMapper, IbaProject>
+        implements IbaProjectService {
+
+    @Autowired
+    private IbaProjectVolumeService projectVolumeService;
+    @Autowired
+    private IbaProjectVolumeMapper projectVolumeMapper;
+    @Autowired
+    private IbaProjectFundService projectFundService;
+    @Autowired
+    private IbaProjectFundMapper projectFundMapper;
+
+    @Override
+    public IbaProject queryById(Long id) {
+        IbaProject ibaProject = baseMapper.selectById(id);
+        if (ibaProject != null) {
+            List<IbaProjectFund> ibaProjectFunds = projectFundMapper.selectList(new QueryWrapper<IbaProjectFund>().lambda().eq(IbaProjectFund::getProjectId, id));
+            //资金信息
+            ibaProject.setFunds(ibaProjectFunds);
+
+            //车流量信息
+            List<IbaProjectVolumeDTO> ibaProjectVolumeDTO = projectVolumeMapper.selectGroupYearList(id);
+            ibaProject.setList(ibaProjectVolumeDTO);
+
+
+        }
+        return ibaProject;
+    }
+
+    @Override
+    public IPage<IbaProject> queryByPage(IbaProjectQuery query) {
+        Page<IbaProject> page = new Page<>(query.getCurrent(), query.getSize());
+        QueryWrapper<IbaProject> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(IbaProject::getIsDeleted, 0)
+                .eq(query.getType() != null, IbaProject::getType, query.getType())
+                .eq(query.getRouteType() != null, IbaProject::getRouteType, query.getRouteType())
+                .eq(query.getStage() != null, IbaProject::getStage, query.getStage())
+                .eq(query.getOperationCompany() != null, IbaProject::getOperationCompany, query.getOperationCompany());
+
+        IPage<IbaProject> ibaProjectIPage = baseMapper.selectPage(page, queryWrapper);
+        return ibaProjectIPage;
+    }
+
+    @Override
+    @Transactional
+    public boolean insert(IbaProject ibaProject) {
+        Long name = baseMapper.selectCount(new QueryWrapper<IbaProject>().lambda()
+                .eq(IbaProject::getProjectName, ibaProject.getProjectName())
+                .eq(IbaProject::getIsDeleted, 0));
+        if (name > 0) {
+            throw new ServiceException("项目名已存在");
+        }
+
+        ibaProject.setId(SnowFlakeUtil.getId());
+        baseMapper.insert(ibaProject);
+        //添加车流量信息
+        if (!CollectionUtils.isEmpty(ibaProject.getList())) {
+            List<IbaProjectVolume> ibaProjectVolumes = new ArrayList<>();
+            for (IbaProjectVolumeDTO ibaProjectVolumeDTO : ibaProject.getList()) {
+                String year = ibaProjectVolumeDTO.getYear();
+                for (IbaProjectVolume ibaProjectVolume : ibaProjectVolumeDTO.getIbaProjectVolumeList()) {
+                    ibaProjectVolume.setId(SnowFlakeUtil.getId());
+                    ibaProjectVolume.setProjectId(ibaProject.getId());
+                    ibaProjectVolume.setYear(year);
+
+                }
+                ibaProjectVolumes.addAll(ibaProjectVolumeDTO.getIbaProjectVolumeList());
+            }
+            //批量新增
+            projectVolumeService.saveBatch(ibaProjectVolumes);
+        }
+        //添加资金信息
+        if (!CollectionUtils.isEmpty(ibaProject.getFunds())) {
+            for (IbaProjectFund fund : ibaProject.getFunds()) {
+                fund.setId(SnowFlakeUtil.getId());
+                fund.setProjectId(ibaProject.getId());
+            }
+            projectFundService.saveBatch(ibaProject.getFunds());
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public boolean update(IbaProject ibaProject) {
+        baseMapper.updateById(ibaProject);
+        //删除旧数据
+        projectVolumeMapper.delete(new QueryWrapper<IbaProjectVolume>().lambda().eq(IbaProjectVolume::getProjectId, ibaProject.getId()));
+        //删除资金信息
+        projectFundMapper.delete(new QueryWrapper<IbaProjectFund>().lambda().eq(IbaProjectFund::getProjectId, ibaProject.getId()));
+        //添加新数据
+        if (!CollectionUtils.isEmpty(ibaProject.getList())) {
+            List<IbaProjectVolume> ibaProjectVolumes = new ArrayList<>();
+            for (IbaProjectVolumeDTO ibaProjectVolumeDTO : ibaProject.getList()) {
+                String year = ibaProjectVolumeDTO.getYear();
+                for (IbaProjectVolume ibaProjectVolume : ibaProjectVolumeDTO.getIbaProjectVolumeList()) {
+                    ibaProjectVolume.setId(SnowFlakeUtil.getId());
+                    ibaProjectVolume.setProjectId(ibaProject.getId());
+                    ibaProjectVolume.setYear(year);
+
+                }
+                ibaProjectVolumes.addAll(ibaProjectVolumeDTO.getIbaProjectVolumeList());
+            }
+            //批量新增
+            projectVolumeService.saveBatch(ibaProjectVolumes);
+        }
+        //添加资金信息
+        if (!CollectionUtils.isEmpty(ibaProject.getFunds())) {
+            for (IbaProjectFund fund : ibaProject.getFunds()) {
+                fund.setId(SnowFlakeUtil.getId());
+                fund.setProjectId(ibaProject.getId());
+            }
+            projectFundService.saveBatch(ibaProject.getFunds());
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public boolean deleteById(List<Long> ids) {
+        baseMapper.updateIsDeleted(ids, 1);
+        projectVolumeMapper.updateIsDeleted(ids, 1);
+        //删除旧数据
+        projectVolumeMapper.delete(new QueryWrapper<IbaProjectVolume>().lambda().in(IbaProjectVolume::getProjectId, ids));
+        //删除资金信息
+        projectFundMapper.delete(new QueryWrapper<IbaProjectFund>().lambda().in(IbaProjectFund::getProjectId, ids));
+        return true;
+    }
+
+    @Override
+    public IbaProjectTotalVo total() {
+        //查询项目总数
+        Long projectCount = baseMapper.selectCount(new QueryWrapper<IbaProject>().lambda().eq(IbaProject::getIsDeleted, 0));
+        //查询公司总数
+        Long companyTotal = baseMapper.companyTotal();
+
+        IbaProjectTotalVo ibaProjectTotalVo = new IbaProjectTotalVo();
+        ibaProjectTotalVo.setProjectNum(projectCount);
+        ibaProjectTotalVo.setCompanyNum(companyTotal);
+
+        return ibaProjectTotalVo;
+    }
+
+    @Override
+    public List<IbaProjectTypeTotalVo> typeTotal() {
+        return baseMapper.typeTotal();
+    }
+
+    @Override
+    public List<IbaProjectCompanyTotalVo> companyTotal() {
+        return baseMapper.companyGroupTotal();
+    }
+
+    @Override
+    public List<incomeTotalVo> incomeTotalList(IbaProjectIncomeQuery query) {
+        if (query.getType() == null || (query.getType() != 1 && query.getType() != 2)) {
+            query.setType(1);
+        }
+        if(query.getSize() == null){
+            query.setSize(5);
+        }
+        return baseMapper.incomeTotalList(query);
+    }
+
+    @Override
+    public List<IbaProjectVolume> companyList(IbaProjectVolumeQuery query) {
+        List<IbaProjectVolume> list = baseMapper.companyList(query);
+        return list;
+    }
+}
+
+
+
+

+ 22 - 0
src/main/java/org/springblade/modules/investment/service/impl/IbaProjectVolumeServiceImpl.java

@@ -0,0 +1,22 @@
+package org.springblade.modules.investment.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
+import org.springblade.modules.investment.service.IbaProjectVolumeService;
+import org.springblade.modules.investment.mapper.IbaProjectVolumeMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author LHB
+* @description 针对表【iba_project_volume(项目历史车流量系统)】的数据库操作Service实现
+* @createDate 2025-05-06 14:49:22
+*/
+@Service
+public class IbaProjectVolumeServiceImpl extends ServiceImpl<IbaProjectVolumeMapper, IbaProjectVolume>
+    implements IbaProjectVolumeService{
+
+}
+
+
+
+