From b360c15dce3d15d1a3c84b439da2c8630e593a22 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Thu, 18 Jun 2026 13:51:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B6=88=E8=B4=B9=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E5=8A=9F=E8=83=BD=EF=BC=8C=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatisticAnalysisController.java | 35 ++++++ .../domain/dto/AccountDealLocationDto.java | 60 +++++++++ .../domain/vo/AccountDealLocationVo.java | 47 +++++++ .../mapper/StatisticAnalysisMapper.java | 19 +++ .../service/IStatisticAnalysisService.java | 27 ++++ .../service/impl/StatisticAnalysisImpl.java | 67 ++++++++++ .../mapper/invest/StatisticAnalysisMapper.xml | 116 +++++++++++++++++- 7 files changed, 370 insertions(+), 1 deletion(-) create mode 100644 intc-modules/intc-invest/src/main/java/com/intc/invest/domain/dto/AccountDealLocationDto.java create mode 100644 intc-modules/intc-invest/src/main/java/com/intc/invest/domain/vo/AccountDealLocationVo.java diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/controller/StatisticAnalysisController.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/controller/StatisticAnalysisController.java index d0dbebc..76a3fca 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/controller/StatisticAnalysisController.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/controller/StatisticAnalysisController.java @@ -3,9 +3,12 @@ package com.intc.invest.controller; import com.intc.common.core.web.controller.BaseController; import com.intc.common.core.web.domain.AjaxResult; import com.intc.common.core.web.page.TableDataInfo; +import com.intc.invest.domain.dto.AccountDealLocationDto; import com.intc.invest.domain.dto.AccountsDto; import com.intc.invest.domain.dto.AnalysisDto; import com.intc.invest.domain.vo.AccountCalendarVo; +import com.intc.invest.domain.vo.AccountDealLocationVo; +import com.intc.invest.domain.vo.AccountsDealRecordVo; import com.intc.invest.domain.vo.AccountsVo; import com.intc.invest.domain.vo.BankCardStatisticsVo; import com.intc.invest.domain.vo.OpenCardVo; @@ -209,4 +212,36 @@ public class StatisticAnalysisController extends BaseController { return AjaxResult.success(list); } + /** + * 查询交易地点消费地图概览 + */ + @ApiOperation(value="查询交易地点消费地图概览") + @GetMapping("/accountDealLocationOverview") + public AjaxResult getAccountDealLocationOverview(AccountDealLocationDto accountDealLocationDto) + { + return AjaxResult.success(iStatisticAnalysisService.getAccountDealLocationOverview(accountDealLocationDto)); + } + + /** + * 查询交易地点消费地图聚合点位 + */ + @ApiOperation(value="查询交易地点消费地图聚合点位",response = AccountDealLocationVo.class) + @GetMapping("/accountDealLocationPoints") + public AjaxResult getAccountDealLocationPoints(AccountDealLocationDto accountDealLocationDto) + { + List list = iStatisticAnalysisService.getAccountDealLocationPoints(accountDealLocationDto); + return AjaxResult.success(list); + } + + /** + * 查询交易地点消费明细 + */ + @ApiOperation(value="查询交易地点消费明细",response = AccountsDealRecordVo.class) + @GetMapping("/accountDealLocationRecords") + public AjaxResult getAccountDealLocationRecords(AccountDealLocationDto accountDealLocationDto) + { + List list = iStatisticAnalysisService.getAccountDealLocationRecords(accountDealLocationDto); + return AjaxResult.success(list); + } + } diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/domain/dto/AccountDealLocationDto.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/domain/dto/AccountDealLocationDto.java new file mode 100644 index 0000000..e4559e0 --- /dev/null +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/domain/dto/AccountDealLocationDto.java @@ -0,0 +1,60 @@ +package com.intc.invest.domain.dto; + +import com.intc.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 交易地点消费地图查询对象 + * + * @author tianyongbao + */ +@ApiModel("交易地点消费地图查询对象") +@Data +public class AccountDealLocationDto extends BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 开始日期 */ + @ApiModelProperty(value="开始日期") + private String startTime; + + /** 结束日期 */ + @ApiModelProperty(value="结束日期") + private String endTime; + + /** 账户 */ + @ApiModelProperty(value="账户") + private Long accountId; + + /** 交易类型 */ + @ApiModelProperty(value="交易类型") + private String dealType; + + /** 交易类别 */ + @ApiModelProperty(value="交易类别") + private String dealCategory; + + /** 交易子类别 */ + @ApiModelProperty(value="交易子类别") + private String childCategory; + + /** 地点名称 */ + @ApiModelProperty(value="地点名称") + private String locationName; + + /** 地点地址 */ + @ApiModelProperty(value="地点地址") + private String locationAddress; + + /** 经度 */ + @ApiModelProperty(value="经度") + private Double longitude; + + /** 纬度 */ + @ApiModelProperty(value="纬度") + private Double latitude; +} diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/domain/vo/AccountDealLocationVo.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/domain/vo/AccountDealLocationVo.java new file mode 100644 index 0000000..6001f26 --- /dev/null +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/domain/vo/AccountDealLocationVo.java @@ -0,0 +1,47 @@ +package com.intc.invest.domain.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +/** + * 交易地点消费地图聚合对象 + * + * @author tianyongbao + */ +@ApiModel("交易地点消费地图聚合对象") +@Data +public class AccountDealLocationVo +{ + /** 地点聚合键 */ + private String locationKey; + + /** 地点名称 */ + private String locationName; + + /** 地点地址 */ + private String locationAddress; + + /** 经度 */ + private Double longitude; + + /** 纬度 */ + private Double latitude; + + /** 消费金额 */ + private Double totalAmount; + + /** 交易笔数 */ + private Long dealCount; + + /** 最近交易时间 */ + private String latestTime; + + /** 关联账户 */ + private String accountNames; + + /** 交易类别 */ + private String dealCategory; + + /** 交易子类别 */ + private String childCategory; +} diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/mapper/StatisticAnalysisMapper.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/mapper/StatisticAnalysisMapper.java index d935138..f9d95fb 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/mapper/StatisticAnalysisMapper.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/mapper/StatisticAnalysisMapper.java @@ -1,6 +1,7 @@ package com.intc.invest.mapper; import com.intc.common.datascope.annotation.DataScope; +import com.intc.invest.domain.dto.AccountDealLocationDto; import com.intc.invest.domain.dto.AccountsDealRecordDto; import com.intc.invest.domain.dto.AccountsDto; import com.intc.invest.domain.dto.BankCardLendDto; @@ -122,4 +123,22 @@ public interface StatisticAnalysisMapper { @DataScope(businessAlias = "a") public List selectBankCardStatistics(AccountsDto accountsDto); + /** + * 查询交易地点消费地图聚合点位 + * + * @param accountDealLocationDto 查询条件 + * @return 地点聚合点位集合 + */ + @DataScope(businessAlias = "a") + public List selectAccountDealLocationPoints(AccountDealLocationDto accountDealLocationDto); + + /** + * 查询交易地点消费明细 + * + * @param accountDealLocationDto 查询条件 + * @return 交易明细集合 + */ + @DataScope(businessAlias = "a") + public List selectAccountDealLocationRecords(AccountDealLocationDto accountDealLocationDto); + } diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IStatisticAnalysisService.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IStatisticAnalysisService.java index 4bb3fe9..5efdc93 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IStatisticAnalysisService.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IStatisticAnalysisService.java @@ -1,8 +1,11 @@ package com.intc.invest.service; +import com.intc.invest.domain.dto.AccountDealLocationDto; import com.intc.invest.domain.dto.AccountsDto; import com.intc.invest.domain.dto.AnalysisDto; import com.intc.invest.domain.vo.AccountCalendarVo; +import com.intc.invest.domain.vo.AccountDealLocationVo; +import com.intc.invest.domain.vo.AccountsDealRecordVo; import com.intc.invest.domain.vo.AccountsVo; import com.intc.invest.domain.vo.BankCardStatisticsVo; import com.intc.invest.domain.vo.CreditReportAnalysisVO; @@ -78,4 +81,28 @@ public interface IStatisticAnalysisService { */ public List getBankCardStatistics(); + /** + * 查询交易地点消费地图概览 + * + * @param accountDealLocationDto 查询条件 + * @return 概览数据 + */ + public Map getAccountDealLocationOverview(AccountDealLocationDto accountDealLocationDto); + + /** + * 查询交易地点消费地图聚合点位 + * + * @param accountDealLocationDto 查询条件 + * @return 地点聚合点位集合 + */ + public List getAccountDealLocationPoints(AccountDealLocationDto accountDealLocationDto); + + /** + * 查询交易地点消费明细 + * + * @param accountDealLocationDto 查询条件 + * @return 交易明细集合 + */ + public List getAccountDealLocationRecords(AccountDealLocationDto accountDealLocationDto); + } diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StatisticAnalysisImpl.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StatisticAnalysisImpl.java index ad26090..fb0dbb5 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StatisticAnalysisImpl.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StatisticAnalysisImpl.java @@ -3429,4 +3429,71 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService { public List getBankCardStatistics() { return statisticAnalysisMapper.selectBankCardStatistics(new AccountsDto()); } + + @Override + public Map getAccountDealLocationOverview(AccountDealLocationDto accountDealLocationDto) { + if (accountDealLocationDto == null) { + accountDealLocationDto = new AccountDealLocationDto(); + } + List locationList = getAccountDealLocationPoints(accountDealLocationDto); + + double totalAmount = 0; + long dealCount = 0; + double maxAmount = 0; + String latestTime = ""; + + for (AccountDealLocationVo vo : locationList) { + double amount = vo.getTotalAmount() == null ? 0 : vo.getTotalAmount(); + totalAmount += amount; + dealCount += vo.getDealCount() == null ? 0 : vo.getDealCount(); + if (amount > maxAmount) { + maxAmount = amount; + } + if (StringUtils.isNotEmpty(vo.getLatestTime()) && (StringUtils.isEmpty(latestTime) || vo.getLatestTime().compareTo(latestTime) > 0)) { + latestTime = vo.getLatestTime(); + } + } + + HashMap map = new HashMap<>(); + map.put("totalAmount", totalAmount); + map.put("dealCount", dealCount); + map.put("locationCount", locationList.size()); + map.put("maxAmount", maxAmount); + map.put("latestTime", latestTime); + map.put("topLocations", locationList.stream().limit(10).collect(Collectors.toList())); + return map; + } + + @Override + public List getAccountDealLocationPoints(AccountDealLocationDto accountDealLocationDto) { + if (accountDealLocationDto == null) { + accountDealLocationDto = new AccountDealLocationDto(); + } + initAccountDealLocationDefaultQuery(accountDealLocationDto); + return statisticAnalysisMapper.selectAccountDealLocationPoints(accountDealLocationDto); + } + + @Override + public List getAccountDealLocationRecords(AccountDealLocationDto accountDealLocationDto) { + if (accountDealLocationDto == null) { + accountDealLocationDto = new AccountDealLocationDto(); + } + initAccountDealLocationDefaultQuery(accountDealLocationDto); + List list = statisticAnalysisMapper.selectAccountDealLocationRecords(accountDealLocationDto); + for (AccountsDealRecordVo vo : list) { + if (StringUtils.isNotEmpty(vo.getDealCategory())) { + vo.setDealCategoryName(DictUtils.getDictLabel("deal_category", vo.getDealCategory())); + } + if (StringUtils.isNotEmpty(vo.getChildCategory()) && "1".equals(vo.getDealCategory())) { + vo.setChildCategoryName(DictUtils.getDictLabel("daily_expenses", vo.getChildCategory())); + } + } + return list; + } + + private void initAccountDealLocationDefaultQuery(AccountDealLocationDto accountDealLocationDto) { + if (accountDealLocationDto != null && StringUtils.isEmpty(accountDealLocationDto.getDealType())) { + accountDealLocationDto.setDealType("2"); + } + } } diff --git a/intc-modules/intc-invest/src/main/resources/mapper/invest/StatisticAnalysisMapper.xml b/intc-modules/intc-invest/src/main/resources/mapper/invest/StatisticAnalysisMapper.xml index 86189b1..1ad4905 100644 --- a/intc-modules/intc-invest/src/main/resources/mapper/invest/StatisticAnalysisMapper.xml +++ b/intc-modules/intc-invest/src/main/resources/mapper/invest/StatisticAnalysisMapper.xml @@ -68,6 +68,22 @@ + + + + + + + + + + + + + + + + - \ No newline at end of file + + a.del_flag = '0' + and a.longitude is not null + and a.latitude is not null + + and #{endTime} >= to_char(a.create_time, 'yyyy-MM-dd') + + + and to_char(a.create_time, 'yyyy-MM-dd') >= #{startTime} + + + and a.account_id = #{accountId} + + + and a.deal_type = #{dealType} + + + and a.deal_category = #{dealCategory} + + + and a.child_category = #{childCategory} + + + and a.location_name like '%' || #{locationName} || '%' + + + and a.location_address like '%' || #{locationAddress} || '%' + + + + + + + +