Commit f8fa2875 by zhangxingmin

Merge remote-tracking branch 'origin/dev' into prod

parents 4f5d558d 13b0cf83
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
FROM openjdk:8 FROM openjdk:8
# 维护人 # 维护人
LABEL maintainer="zxm<2060197959@qq.com>" LABEL maintainer="zxm<2060197959@qq.com>"
# 创建目录 # 创建应用目录
RUN mkdir -p /home/app RUN mkdir -p /home/app
# 拷贝项目jar - 使用可执行的 fat JAR # 创建日志目录并授权(默认 root 可写)
RUN mkdir -p /var/log/yd-csf-api && chmod 755 /var/log/yd-csf-api
# 拷贝项目jar
COPY target/yd-csf-api-1.0-SNAPSHOT-exec.jar /home/app/yd-csf-api.jar COPY target/yd-csf-api-1.0-SNAPSHOT-exec.jar /home/app/yd-csf-api.jar
# 执行命令启动jar,并设置JVM内存参数 # 启动命令
ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-Xmx256m", "-Xms128m", "-jar", "/home/app/yd-csf-api.jar"] ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-Xmx256m", "-Xms128m", "-jar", "/home/app/yd-csf-api.jar"]
# 暴露端口
EXPOSE 9202 EXPOSE 9202
...@@ -375,12 +375,16 @@ public class ApiCommissionExpectedController { ...@@ -375,12 +375,16 @@ public class ApiCommissionExpectedController {
commissionExpectedQueryRequest.setQueryFlag(queryFlag); commissionExpectedQueryRequest.setQueryFlag(queryFlag);
QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest); QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest);
// List<Long> allExpectedIdList = new ArrayList<>();
// 先查询所有符合条件的记录ID(用于统计) // 先查询所有符合条件的记录ID(用于统计)
List<CommissionExpected> allCommissionExpectedList = commissionExpectedService.list(queryWrapper); // List<CommissionExpected> allCommissionExpectedList = commissionExpectedService.list(queryWrapper);
List<Long> allExpectedIdList = allCommissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList()); // List<Long> allExpectedIdList = allCommissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList());
// 查询统计数据(基于所有符合条件的记录) // 查询统计数据(基于所有符合条件的记录)
CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allCommissionExpectedList); // CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allCommissionExpectedList);
queryWrapper.select("id");
List<Long> allExpectedIdList = commissionExpectedService.listObjs(queryWrapper, obj -> (Long) obj);
// 应收款报表分页查询 - 按保单号和期数维度统计 // 应收款报表分页查询 - 按保单号和期数维度统计
Page<ReceivableReportVO> reportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize()); Page<ReceivableReportVO> reportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize());
...@@ -392,11 +396,93 @@ public class ApiCommissionExpectedController { ...@@ -392,11 +396,93 @@ public class ApiCommissionExpectedController {
receivableReportPage = convertReceivableReport(receivableReportPage); receivableReportPage = convertReceivableReport(receivableReportPage);
// 组装返回结果 // 组装返回结果
ReceivableReportResponse response = new ReceivableReportResponse(); ReceivableReportResponse response = new ReceivableReportResponse();
response.setStatisticsVO(statisticsVO); // response.setStatisticsVO(statisticsVO);
response.setPage(receivableReportPage); response.setPage(receivableReportPage);
return Result.success(response); return Result.success(response);
} }
@PostMapping("/receivable_report/statistics")
@Operation(summary = "应收款报表统计")
public Result<ReceivableReportResponse> receivableReportStatistics(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
//保單持有人(中/英、繁简/大小写)、签单人、转介人名称(主)、受保人(中/英、繁简/大小写)、查询保单号列表
List<String> queryPolicyNoList = new ArrayList<>();
Boolean queryFlag = false;
if (StringUtils.isNotBlank(commissionExpectedQueryRequest.getPolicyHolder())
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getSigner())
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getBrokerName())
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getInsured())
){
queryPolicyNoList = policyFollowService.queryPolicyNoList(
commissionExpectedQueryRequest.getPolicyHolder(),
commissionExpectedQueryRequest.getSigner(),
commissionExpectedQueryRequest.getBrokerName(),
commissionExpectedQueryRequest.getInsured());
queryFlag = true;
}
log.info("应收款报表=>receivableReport=>queryPolicyNoList:{}",JSON.toJSONString(queryPolicyNoList));
// 构建查询条件
commissionExpectedQueryRequest.setPolicyNoList(queryPolicyNoList);
commissionExpectedQueryRequest.setQueryFlag(queryFlag);
QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest);
// 先查询所有符合条件的记录ID(用于统计)
List<CommissionExpected> allCommissionExpectedList = commissionExpectedService.list(queryWrapper);
// 查询统计数据(基于所有符合条件的记录)
CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allCommissionExpectedList);
// 应收款报表分页查询 - 按保单号和期数维度统计
// Page<ReceivableReportVO> reportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize());
// IPage<ReceivableReportVO> receivableReportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize());
// if (!CollectionUtils.isEmpty(allExpectedIdList)) {
// receivableReportPage = commissionExpectedService.receivableReportPage(reportPage, allExpectedIdList);
// }
// enrichReceivableReportWithCompanyName(receivableReportPage);
// receivableReportPage = convertReceivableReport(receivableReportPage);
// 组装返回结果
ReceivableReportResponse response = new ReceivableReportResponse();
response.setStatisticsVO(statisticsVO);
// response.setPage(receivableReportPage);
return Result.success(response);
}
// @PostMapping("/receivable_report")
// @Operation(summary = "应收款报表")
// public Result<ReceivableReportResponse> receivableReport(@RequestBody CommissionExpectedQueryRequest request) {
// // 1. 根据持有人、签单人等条件查询保单号列表
// List<String> queryPolicyNoList = new ArrayList<>();
// Boolean queryFlag = false;
// if (StringUtils.isNotBlank(request.getPolicyHolder())
// || StringUtils.isNotBlank(request.getSigner())
// || StringUtils.isNotBlank(request.getBrokerName())
// || StringUtils.isNotBlank(request.getInsured())) {
// queryPolicyNoList = policyFollowService.queryPolicyNoList(
// request.getPolicyHolder(),
// request.getSigner(),
// request.getBrokerName(),
// request.getInsured());
// queryFlag = true;
// }
// log.info("应收款报表=>receivableReport=>queryPolicyNoList:{}", JSON.toJSONString(queryPolicyNoList));
//
// // 2. 将保单号列表设回请求对象
// request.setPolicyNoList(queryPolicyNoList);
// request.setQueryFlag(queryFlag);
//
// // 3. 直接分页查询(无需先查 ID)
// Page<ReceivableReportVO> page = new Page<>(request.getPageNo(), request.getPageSize());
// IPage<ReceivableReportVO> receivableReportPage = commissionExpectedService.receivableReportPage(page, request);
//
// // 4. 后处理:补充产品名称等字段,以及待入账金额归零逻辑
// receivableReportPage = convertReceivableReport(receivableReportPage);
//
// // 5. 组装返回(统计信息暂不提供,如需可后续添加单独统计查询)
// ReceivableReportResponse response = new ReceivableReportResponse();
// response.setPage(receivableReportPage);
// return Result.success(response);
// }
public IPage<ReceivableReportVO> convertReceivableReport(IPage<ReceivableReportVO> receivableReportPage) { public IPage<ReceivableReportVO> convertReceivableReport(IPage<ReceivableReportVO> receivableReportPage) {
if (!org.springframework.util.CollectionUtils.isEmpty(receivableReportPage.getRecords())) { if (!org.springframework.util.CollectionUtils.isEmpty(receivableReportPage.getRecords())) {
List<String> policyNoList = receivableReportPage.getRecords().stream().map(ReceivableReportVO::getPolicyNo).collect(Collectors.toList()); List<String> policyNoList = receivableReportPage.getRecords().stream().map(ReceivableReportVO::getPolicyNo).collect(Collectors.toList());
......
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="BASE_LOG_DIR" value="/var/log/yd-csf-api" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 不指定固定 file,让 fileNamePattern 完全控制 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${BASE_LOG_DIR}/%d{yyyy-MM-dd}/app.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
\ No newline at end of file
#3.2.1\u4EE5\u4E0A\u4F7F\u7528 # p6spy 配置文件
# 注意:需要配合 application.yml 中修改 driver 和 url 使用
# 3.2.1 及以上版本使用 Mybatis-Plus 的工厂类(输出可执行 SQL)
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1\u4EE5\u4E0B\u4F7F\u7528\u6216\u8005\u4E0D\u914D\u7F6E
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory # 使用 Mybatis-Plus 提供的日志格式(参数已替换,排版清晰)
# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#\u65E5\u5FD7\u8F93\u51FA\u5230\u63A7\u5236\u53F0
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger # 关键:使用 SLF4J 输出,让日志完全由 Logback 管理
# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# \u8BBE\u7F6E p6spy driver \u4EE3\u7406 # 取消 JDBC URL 前缀(保持原 URL 可用)
deregisterdrivers=true
# \u53D6\u6D88JDBC URL\u524D\u7F00
useprefix=true useprefix=true
# \u914D\u7F6E\u8BB0\u5F55 Log \u4F8B\u5916,\u53EF\u53BB\u6389\u7684\u7ED3\u679C\u96C6\u6709error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset # 注销不必要的 JDBC 驱动
# \u65E5\u671F\u683C\u5F0F deregisterdrivers=true
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss dateformat=yyyy-MM-dd HH:mm:ss
# \u5B9E\u9645\u9A71\u52A8\u53EF\u591A\u4E2A
#driverlist=org.h2.Driver # 排除不输出的类别,减少日志噪音
# \u662F\u5426\u5F00\u542F\u6162SQL\u8BB0\u5F55 # 可选值:info, debug, result, commit, batch, resultset
excludecategories=info,debug,result,commit,resultset
# 是否开启慢 SQL 记录
outagedetection=true outagedetection=true
# \u6162SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2
outagedetectioninterval=2 # 慢 SQL 阈值(单位:秒),超过此值会单独记录(输出 WARN 级别)
outagedetectioninterval=1
# 可选:自定义日志输出格式(如果不需要 Mybatis-Plus 格式,可启用以下行)
# 但建议保留上面的 Mybatis-Plus 格式,效果更好
# customLogMessageFormat=%(executionTime)ms | %(category) | %(sqlSingleLine)
# 可选:记录执行时间超过阈值的 SQL 到单独的日志类别(配合 outage detection)
# 无需额外配置,P6OutageFactory 已自动处理
# 注意:不需要配置 driverlist,p6spy 会自动读取原数据源的驱动
\ No newline at end of file
package com.yd.csf.service.config;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
@Slf4j
public class MethodTimeAspect {
@Around("execution(* com.yd.csf.service..*.*(..))")
public Object measure(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
long cost = System.currentTimeMillis() - start;
log.info("【性能】{}.{} 耗时 {} ms",
pjp.getTarget().getClass().getSimpleName(),
pjp.getSignature().getName(),
cost);
return result;
}
}
\ No newline at end of file
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO; import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
...@@ -30,6 +31,9 @@ public interface CommissionExpectedMapper extends BaseMapper<CommissionExpected> ...@@ -30,6 +31,9 @@ public interface CommissionExpectedMapper extends BaseMapper<CommissionExpected>
*/ */
IPage<ReceivableReportVO> receivableReportPage(@Param("page") Page<ReceivableReportVO> page, IPage<ReceivableReportVO> receivableReportPage(@Param("page") Page<ReceivableReportVO> page,
@Param("expectedIds") List<Long> expectedIds); @Param("expectedIds") List<Long> expectedIds);
// IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page,
// @Param("query") CommissionExpectedQueryRequest query);
} }
......
...@@ -84,7 +84,10 @@ public interface CommissionExpectedService extends IService<CommissionExpected> ...@@ -84,7 +84,10 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
*/ */
IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds); IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds);
void testExpectedCommission(String policyNo,String effectiveDate,String coolingOffEndDate) throws IOException; // IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page,
// CommissionExpectedQueryRequest query);
void testExpectedCommission(String policyNo, String effectiveDate, String coolingOffEndDate) throws IOException;
Boolean changeStatus(CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest); Boolean changeStatus(CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest);
......
...@@ -1486,6 +1486,12 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -1486,6 +1486,12 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
return baseMapper.receivableReportPage(page, expectedIds); return baseMapper.receivableReportPage(page, expectedIds);
} }
// @Override
// public IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page,
// CommissionExpectedQueryRequest query){
// return baseMapper.receivableReportPage(page, query);
// };
@Override @Override
public void testExpectedCommission(String policyNo,String effectiveDate,String coolingOffEndDate) throws IOException { public void testExpectedCommission(String policyNo,String effectiveDate,String coolingOffEndDate) throws IOException {
PolicyFollow policyFollow = policyFollowService.queryOneByPolicyNo(policyNo); PolicyFollow policyFollow = policyFollowService.queryOneByPolicyNo(policyNo);
......
...@@ -5,40 +5,40 @@ ...@@ -5,40 +5,40 @@
<mapper namespace="com.yd.csf.service.dao.CommissionExpectedMapper"> <mapper namespace="com.yd.csf.service.dao.CommissionExpectedMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.CommissionExpected"> <resultMap id="BaseResultMap" type="com.yd.csf.service.model.CommissionExpected">
<id property="id" column="id" /> <id property="id" column="id" />
<result property="commissionExpectedBizId" column="commission_expected_biz_id" /> <result property="commissionExpectedBizId" column="commission_expected_biz_id" />
<result property="receivableNo" column="receivable_no" /> <result property="receivableNo" column="receivable_no" />
<result property="commissionBizType" column="commission_biz_type" /> <result property="commissionBizType" column="commission_biz_type" />
<result property="policyNo" column="policy_no" /> <result property="policyNo" column="policy_no" />
<result property="premium" column="premium" /> <result property="premium" column="premium" />
<result property="policyCurrency" column="policy_currency" /> <result property="policyCurrency" column="policy_currency" />
<result property="insuranceCompanyBizId" column="insurance_company_biz_id" /> <result property="insuranceCompanyBizId" column="insurance_company_biz_id" />
<result property="productLaunchBizId" column="product_launch_biz_id" /> <result property="productLaunchBizId" column="product_launch_biz_id" />
<result property="reconciliationCompany" column="reconciliation_company" /> <result property="reconciliationCompany" column="reconciliation_company" />
<result property="reconciliationCompanyCode" column="reconciliation_company_code" /> <result property="reconciliationCompanyCode" column="reconciliation_company_code" />
<result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" /> <result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" />
<result property="commissionPeriod" column="commission_period" /> <result property="commissionPeriod" column="commission_period" />
<result property="totalPeriod" column="total_period" /> <result property="totalPeriod" column="total_period" />
<result property="commissionName" column="commission_name" /> <result property="commissionName" column="commission_name" />
<result property="commissionType" column="commission_type" /> <result property="commissionType" column="commission_type" />
<result property="commissionRatio" column="commission_ratio" /> <result property="commissionRatio" column="commission_ratio" />
<result property="amount" column="amount" /> <result property="amount" column="amount" />
<result property="currency" column="currency" /> <result property="currency" column="currency" />
<result property="commissionDate" column="commission_date" /> <result property="commissionDate" column="commission_date" />
<result property="actualCommissionDate" column="actual_commission_date" /> <result property="actualCommissionDate" column="actual_commission_date" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="statusDesc" column="status_desc" /> <result property="statusDesc" column="status_desc" />
<result property="defaultExchangeRate" column="default_exchange_rate" /> <result property="defaultExchangeRate" column="default_exchange_rate" />
<result property="expectedAmount" column="expected_amount" /> <result property="expectedAmount" column="expected_amount" />
<result property="paidAmount" column="paid_amount" /> <result property="paidAmount" column="paid_amount" />
<result property="paidRatio" column="paid_ratio" /> <result property="paidRatio" column="paid_ratio" />
<result property="pendingRatio" column="pending_ratio" /> <result property="pendingRatio" column="pending_ratio" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" /> <result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" /> <result property="creatorId" column="creator_id" />
<result property="updaterId" column="updater_id" /> <result property="updaterId" column="updater_id" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
...@@ -52,12 +52,11 @@ ...@@ -52,12 +52,11 @@
<select id="getExpectedStatistics" resultType="com.yd.csf.service.vo.CommissionExpectedStatisticsVO"> <select id="getExpectedStatistics" resultType="com.yd.csf.service.vo.CommissionExpectedStatisticsVO">
SELECT SELECT
IFNULL(SUM(expected_amount),0) AS totalAmount, IFNULL(SUM(expected_amount),0) AS totalAmount,
IFNULL(SUM(paid_amount),0) AS totalPaidAmount, IFNULL(SUM(paid_amount),0) AS totalPaidAmount,
COUNT(DISTINCT policy_no) AS totalPolicyCount, COUNT(DISTINCT policy_no) AS totalPolicyCount,
GROUP_CONCAT(DISTINCT policy_no) AS policyNos GROUP_CONCAT(DISTINCT policy_no) AS policyNos
FROM FROM commission_expected ce
commission_expected ce
<where> <where>
<if test="expectedIds != null and expectedIds.size > 0"> <if test="expectedIds != null and expectedIds.size > 0">
id IN id IN
...@@ -163,4 +162,4 @@ ...@@ -163,4 +162,4 @@
</where> </where>
</select> </select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment