Răsfoiți Sursa

数据报表:财务数据-经营利润代码开发

lipf 2 luni în urmă
părinte
comite
aa4e247740

+ 14 - 3
commons/src/main/java/com/jzg/commons/entity/report/dto/ReportOperatingProfitDataDto.java

@@ -5,16 +5,14 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  *  @version
@@ -37,8 +35,21 @@ public class ReportOperatingProfitDataDto {
     @ExcelProperty(value = "时间", index = 0)
     @ColumnWidth(10)
     @Schema(description = "时间")
+    @TableField(value = "ym")
+    private String ym;
+
+    /**
+     *  时间
+     */
+    @ExcelIgnore
+    @Schema(description = "时间")
     private String yearAndMonthTime;
 
+    public String getYearAndMonthTime(){
+        return this.ym;
+    }
+
+
     /**
      *  保费
      */

+ 4 - 2
consoleStatistics/src/main/java/com/jzg/console/client/FeeAuditClient.java

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 调用 quotation-summary 的订单审核接口 Feign 客户端
@@ -44,7 +45,8 @@ public interface FeeAuditClient {
      * @author lipf
      * @date 2026/7/25 11:22
      */
-    @GetMapping("/feeAudit/queryOperatingProfits")
-    HttpResult<List<ReportOperatingProfitDataDto>> queryOperatingProfits(@RequestParam("year") String year);
+    @GetMapping("/insFeeOrder/queryOperatingProfits")
+    HttpResult<Map<String, ReportOperatingProfitDataDto>> queryOperatingProfits(@RequestParam("year") Integer year,
+                                                                                @RequestParam("sqlType") String sqlType);
 
 }

+ 50 - 98
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportOperatingProfitDataServiceImpl.java

@@ -5,16 +5,20 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.entity.report.dto.ReportOperatingProfitDataDto;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.commons.util.BigDecimalUtil;
 import com.jzg.console.client.FeeAuditClient;
 import com.jzg.console.service.ReportOperatingProfitDataService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StopWatch;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -31,6 +35,8 @@ public class ReportOperatingProfitDataServiceImpl extends ReportBaseServiceImpl
 
     @Autowired
     private FeeAuditClient feeAuditClient;
+    @Autowired
+    private BaseController baseController;
 
     /**
      *  @version
@@ -41,109 +47,55 @@ public class ReportOperatingProfitDataServiceImpl extends ReportBaseServiceImpl
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
         log.info("财务数据-经营利润-列表查询: reportSearchCommonVo=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo));
-        String sql1 = """
-                
-                select
-                	a.ym ,
-                	sum(a.total_premium),
-                	sum(a.total_receivable_premium)
-                	-- ,sum(a.total_payable_premium)
-                from
-                	(
-                	select
-                		io.id as order_no,
-                		io.signing_time ,
-                		DATE_FORMAT(io.signing_time, '%Y-%m') as ym,
-                		ifo.total_premium ,
-                		ifo.total_payable_premium ,
-                		ifo.total_receivable_premium,
-                		io.system_code
-                	from
-                		ins_fee_orders ifo
-                	left join ins_orders io on
-                		ifo.order_no = io.id
-                	where
-                		io.system_code = 'G111'
-                		and io.signing_time >= '2016-01-01 00:00:00'
-                ) as a
-                group by a.ym
-                order by a.ym asc
-             
-                """;
-
-        String sql11 = """
-                
-                select
-                	a.ym ,
-                	sum(a.total_payable_premium)
-                from
-                	(
-                	select
-                		io.id as order_no,
-                		io.signing_time ,
-                		DATE_FORMAT(io.signing_time, '%Y-%m') as ym,
-                		ifo.total_premium ,
-                		ifo.total_payable_premium ,
-                		ifo.total_receivable_premium,
-                		io.system_code
-                	from
-                		ins_fee_orders ifo
-                	left join ins_orders io on
-                		ifo.order_no = io.id
-                	where
-                		io.system_code = 'G111'
-                		and io.signing_time >= '2016-01-01 00:00:00'
-                		and io.id in (
-                		select
-                			ifa.order_no
-                		from
-                			ins_fee_audit ifa
-                		where
-                			ifa.audit_status = 1
-                )
-                ) as a
-                group by	a.ym
-                order by	a.ym asc
-                
-                """;
-
-        String sql2 = """
-                    select
-                    	sum(ipiis.actual_received_amount),
-                    	DATE_FORMAT(ipiis.receive_payment_date, '%Y-%m') as ym
-                    from
-                    	ins_ply_income_invoice_settlement ipiis
-                    where
-                    	receive_payment_date >= '2026-07-01 00:00:00'
-                    	and ipiis.system_code = 'G111'
-                    group by ym
-                
-                """;
-
-        String sql3 = """
-                select
-                	DATE_FORMAT(suacl.create_time, '%Y-%m') as ym,
-                	sum(suacl.amount)
-                from
-                	sys_user_account_change_log suacl
-                where
-                	suacl.system_code = 'G111'
-                	and suacl.amount < 0
-                	and suacl.create_time >= '2026-01-01 00:00:00'
-                group by
-                	ym
-                """;
-
-        Map<String, ReportOperatingProfitDataDto> map1 = new HashMap<>();
+        Integer year = LocalDate.now().getYear();
+        List<String> years = reportSearchCommonVo.getYear();
+        if(CollUtil.isNotEmpty(years)){
+            year = Integer.valueOf(years.get(0));
+        }
+        StopWatch stopWatch = new StopWatch("营业利润汇总");
+        stopWatch.start("查询总保费");
+        Map<String, ReportOperatingProfitDataDto> map1 = feeAuditClient.queryOperatingProfits(year,"01").getData();
+        stopWatch.stop();
+
+        stopWatch.start("查询总的应付");
+
         Map<String, ReportOperatingProfitDataDto> map2 = new HashMap<>();
+        try{
+            map2 = feeAuditClient.queryOperatingProfits(year,"02").getData();
+        }catch (Exception e){
+            log.error("查询总的应付",e);
+        }
+        stopWatch.stop();
+        stopWatch.start("查询实收金额(结算金额)");
         Map<String, ReportOperatingProfitDataDto> map3 = new HashMap<>();
+        try {
+            map3 = feeAuditClient.queryOperatingProfits(year,"03").getData();
+        } catch (Exception e) {
+            log.error("查询实收金额(结算金额)",e);
+        }
+        stopWatch.stop();
+        stopWatch.start("查询实际提取金额");
         Map<String, ReportOperatingProfitDataDto> map4 = new HashMap<>();
+        try {
+            map3 = feeAuditClient.queryOperatingProfits(year,"04").getData();
+        } catch (Exception e) {
+            log.error("查询实际提取金额",e);
+        }
+        stopWatch.stop();
         List<Map<String, ReportOperatingProfitDataDto>>  allMaps = new ArrayList<>();
+        allMaps.add(map1);
+        allMaps.add(map2);
+        allMaps.add(map3);
+        allMaps.add(map4);
+        stopWatch.start("数据集汇总");
         Map<String, ReportOperatingProfitDataDto> compMaps = this.mergeMaps(allMaps);
-        List<ReportOperatingProfitDataDto> values = new ArrayList<>(compMaps.values());
-
+        stopWatch.stop();
 
-        // Page<ReportOperatingProfitDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        log.info("统计营业利润,耗时明细如下:[{}]", stopWatch.prettyPrint());
+        List<ReportOperatingProfitDataDto> values = compMaps.values().stream()
+                .peek(action->{
+                    action.setProfitMoney(BigDecimalUtil.subtract(action.getReceivableMoney(),action.getMeetMoney()));
+                }).sorted(Comparator.comparing(ReportOperatingProfitDataDto::getYm).reversed()).collect(Collectors.toList());
         IPage<ReportOperatingProfitDataDto> pageList = new Page<ReportOperatingProfitDataDto>();
         pageList.setRecords(values);
         pageList.setTotal(CollUtil.size(values));
@@ -202,7 +154,7 @@ public class ReportOperatingProfitDataServiceImpl extends ReportBaseServiceImpl
     public List<ReportOperatingProfitDataDto>  getList(){
         List<ReportOperatingProfitDataDto> list =new ArrayList<>();
         ReportOperatingProfitDataDto reportOperatingProfitDataDto = ReportOperatingProfitDataDto.builder()
-                .yearAndMonthTime("2023-10").sumPremium(new BigDecimal(456)).receivableMoney(new BigDecimal(456))
+                .ym("2023-10").sumPremium(new BigDecimal(456)).receivableMoney(new BigDecimal(456))
                 .meetMoney(new BigDecimal(23)).profitMoney(new BigDecimal(32))
                 .receivedMoney(new BigDecimal(23)).paidMoney(new BigDecimal(23)).build();
         list.add(reportOperatingProfitDataDto);

+ 4 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeOrderController.java

@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author quchen
@@ -100,9 +101,9 @@ public class InsFeeOrderController {
      * @author lipf
      * @date 2026/7/25 11:22
      */
-    @GetMapping("/feeAudit/queryOperatingProfits")
-    HttpResult<List<ReportOperatingProfitDataDto>> queryOperatingProfits(@RequestParam("year") String year){
+    @GetMapping("/queryOperatingProfits")
+    HttpResult<Map<String, ReportOperatingProfitDataDto>> queryOperatingProfits(@RequestParam("year") Integer year, @RequestParam("sqlType") String sqlType){
         String systemCode = baseController.getSystemCode();
-        return HttpResult.ok(insFeeOrdersService.queryOperatingProfits(year,systemCode));
+        return HttpResult.ok(insFeeOrdersService.queryOperatingProfits(year,systemCode, sqlType));
     }
 }

+ 49 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsFeeOrdersMapper.java

@@ -3,11 +3,15 @@ package com.jzg.quotation.summary.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
 import com.jzg.commons.entity.po.InsFeeOrders;
+import com.jzg.commons.entity.report.dto.ReportOperatingProfitDataDto;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface InsFeeOrdersMapper extends BaseMapper<InsFeeOrders> {
@@ -29,4 +33,49 @@ public interface InsFeeOrdersMapper extends BaseMapper<InsFeeOrders> {
      */
     BigDecimal queryAllTotalReceivablePremiumByOrderNo(@Param("orders") List<String> orders);
 
+    /**
+     * 查询保费总额和总的应收
+     *
+     * @author lipf
+     * @date 2026/7/27 8:44
+     */
+    @MapKey(value="ym")
+    Map<String,ReportOperatingProfitDataDto> queryTotalPremium(@Param("signTimeStart") LocalDateTime signTimeStart,
+                                                               @Param("signTimeEnd") LocalDateTime signTimeEnd,
+                                                               @Param("systemCode") String systemCode);
+    /**
+     * 查询保费总额和总的应付
+     *
+     * @author lipf
+     * @date 2026/7/27 8:44
+     */
+    @MapKey(value="ym")
+    Map<String,ReportOperatingProfitDataDto> queryTotalPayAmount(@Param("signTimeStart") LocalDateTime signTimeStart,
+                                                               @Param("signTimeEnd") LocalDateTime signTimeEnd,
+                                                               @Param("systemCode") String systemCode);
+
+    /**
+     * 查询保费总额和总的实收金额
+     *
+     * @author lipf
+     * @date 2026/7/27 8:44
+     */
+    @MapKey(value="ym")
+    Map<String,ReportOperatingProfitDataDto> queryTotalSettlement(@Param("signTimeStart") LocalDateTime signTimeStart,
+                                                                 @Param("signTimeEnd") LocalDateTime signTimeEnd,
+                                                                 @Param("systemCode") String systemCode);
+
+    /**
+     * 查询保费总额和总的提现金额
+     *
+     * @author lipf
+     * @date 2026/7/27 8:44
+     */
+    @MapKey(value="ym")
+    Map<String,ReportOperatingProfitDataDto> queryTotalTx(@Param("signTimeStart") LocalDateTime signTimeStart,
+                                                                  @Param("signTimeEnd") LocalDateTime signTimeEnd,
+                                                                  @Param("systemCode") String systemCode);
+
+
+
 }

+ 4 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeOrdersService.java

@@ -10,6 +10,7 @@ import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 public interface InsFeeOrdersService extends IService<InsFeeOrders> {
 
@@ -62,9 +63,10 @@ public interface InsFeeOrdersService extends IService<InsFeeOrders> {
     /**
      * 查询指定年份的经营利润
      *
-     * @param year 年份,例如 2026
+     * @param year    年份,例如 2026
+     * @param sqlType 不同类型查询不同的统计值
      * @author lipf
      * @date 2026/7/25 11:22
      */
-    List<ReportOperatingProfitDataDto> queryOperatingProfits(String year, String systemCode);
+    Map<String,ReportOperatingProfitDataDto> queryOperatingProfits(Integer year, String systemCode, String sqlType);
 }

+ 36 - 4
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java

@@ -35,7 +35,11 @@ import org.springframework.stereotype.Service;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author quchen
@@ -716,15 +720,43 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
      * 查询指定年份的经营利润
      *
      * @param year       年份,例如 2026
-     * @param systemCode
+     * @param systemCode 租户代码
+     * @param sqlType 查询类型
      * @author lipf
      * @date 2026/7/25 11:22
      */
     @Override
-    public List<ReportOperatingProfitDataDto> queryOperatingProfits(String year, String systemCode) {
-        log.info("查询租户[{}]在指定年份[{}]的经营利润之保费等信息",systemCode,year);
+    public Map<String,ReportOperatingProfitDataDto> queryOperatingProfits(Integer year, String systemCode, String sqlType) {
+        log.info("查询租户[{}]在指定年份[{}]的经营利润之保费等信息.sqlType=[{}]",systemCode,year,sqlType);
+        LocalDateTime localDateTimeStart = LocalDate.of(year, 1, 1).atStartOfDay();
+        LocalDateTime localDateTimeEnd = LocalDate.of(year+1, 1, 1).atStartOfDay();
+
+        Map<String,ReportOperatingProfitDataDto> reportOperatingProfitDataDtos = new HashMap<>();
+        try{
+            switch(sqlType){
+                case "01":
+                    reportOperatingProfitDataDtos = insFeeOrdersMapper.queryTotalPremium(localDateTimeStart, localDateTimeEnd, systemCode);
+                    break;
+                case "02":
+                    reportOperatingProfitDataDtos = insFeeOrdersMapper.queryTotalPayAmount(localDateTimeStart, localDateTimeEnd, systemCode);
+                    break;
+                case "03":
+                    reportOperatingProfitDataDtos = insFeeOrdersMapper.queryTotalSettlement(localDateTimeStart, localDateTimeEnd, systemCode);
+                    break;
+                case "04":
+                    reportOperatingProfitDataDtos = insFeeOrdersMapper.queryTotalTx(localDateTimeStart, localDateTimeEnd, systemCode);
+                    break;
+                default:
+                    log.info("sqlType=[{}]的统计维度还未支持", sqlType);
+                    break;
+            }
+        }catch (Exception e){
+            log.error("执行sql异常",e);
+        }
+
 
+        log.info("查询租户[{}]在指定年份[{}]的经营利润之保费等信息.sqlType=[{}]reportOperatingProfitDataDtos.size()=[{}]",systemCode,year,sqlType, CollUtil.size(reportOperatingProfitDataDtos));
+        return reportOperatingProfitDataDtos;
 
-        return List.of();
     }
 }

+ 106 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeOrdersMapper.xml

@@ -94,4 +94,110 @@
             </foreach>
         </where>
     </select>
+    <!-- 查询保费总额和总的应收 lipf 2026年7月27日08:45:05 -->
+    <select id="queryTotalPremium">
+        select a.ym , sum(a.total_premium) as sumPremium, sum(a.total_receivable_premium) as receivableMoney
+        from ( select
+        io.id as order_no,
+        io.signing_time,
+        DATE_FORMAT(io.signing_time, '%Y-%m') as ym,
+        ifo.total_premium ,
+        ifo.total_payable_premium ,
+        ifo.total_receivable_premium,
+        io.system_code
+        from
+        ins_fee_orders ifo
+        left join ins_orders io on
+        ifo.order_no = io.id
+        <where>
+            io.system_code = #{systemCode}
+            <if test="signTimeStart != null">
+                and io.signing_time &gt;= #{signTimeStart}
+            </if>
+            <if test="signTimeEnd != null">
+                and io.signing_time &lt; #{signTimeEnd}
+            </if>
+        </where>
+        ) as a
+        group by a.ym
+        order by a.ym asc
+    </select>
+    <!-- 查询保费总额和总的应付 2026年7月27日09:41:37  -->
+    <select id="queryTotalPayAmount" >
+        select
+        a.ym ,
+        sum(a.total_payable_premium) as meetMoney
+        from
+        (
+        select
+        io.id as order_no,
+        io.signing_time ,
+        DATE_FORMAT(io.signing_time, '%Y-%m') as ym,
+        ifo.total_premium ,
+        ifo.total_payable_premium ,
+        ifo.total_receivable_premium,
+        io.system_code
+        from
+        ins_fee_orders ifo
+        left join ins_orders io on
+        ifo.order_no = io.id and io.system_code = #{systemCode}
+        <if test="signTimeStart != null">
+            and io.signing_time &gt;= #{signTimeStart}
+        </if>
+        <if test="signTimeEnd != null">
+            and io.signing_time &lt; #{signTimeEnd}
+        </if>
+        and io.id in (
+        select
+        ifa.order_no
+        from
+        ins_fee_audit ifa
+        where
+        ifa.audit_status = 1
+        )
+        ) as a
+        group by	a.ym
+        having ym is not null
+        order by	a.ym asc
+    </select>
+    <!-- 查询保费总额和总的实收金额 2026年7月27日09:43:31 lipf  -->
+    <select id="queryTotalSettlement" >
+        select
+        sum(ipiis.actual_received_amount) as receivableMoney,
+        DATE_FORMAT(ipiis.receive_payment_date, '%Y-%m') as ym
+        from
+        ins_ply_income_invoice_settlement ipiis
+        <where>
+            ipiis.system_code = #{systemCode}
+            <if test="signTimeStart != null">
+                and ipiis.receive_payment_date &gt;= #{signTimeStart}
+            </if>
+            <if test="signTimeEnd != null">
+                and ipiis.receive_payment_date &lt; #{signTimeEnd}
+            </if>
+        </where>
+        group by ym
+    </select>
+    <!-- 查询总的提现金额 lipf 2026年7月27日09:46:14  -->
+    <select id="queryTotalTx" >
+        select
+        DATE_FORMAT(suacl.create_time, '%Y-%m') as ym,
+        sum(suacl.amount) as paidMoney
+        from
+        sys_user_account_change_log suacl
+        <where>
+            suacl.system_code = #{systemCode}
+            <if test="signTimeStart != null">
+                and suacl.create_time &gt;= #{signTimeStart}
+            </if>
+            <if test="signTimeEnd != null">
+                and suacl.create_time &lt; #{signTimeEnd}
+            </if>
+            and suacl.amount &lt; 0
+        </where>
+        group by
+        ym
+    </select>
+
+
 </mapper>