From 9efe765214c68f13f495d590a1f2d0d46246c77b Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Sat, 4 May 2024 08:52:06 +0800 Subject: [PATCH] =?UTF-8?q?feature=EF=BC=9A=20=E6=96=B0=E5=A2=9E=E5=82=A8?= =?UTF-8?q?=E8=93=84=E5=8D=A1=E3=80=81=E4=BF=A1=E7=94=A8=E5=8D=A1=E6=94=B6?= =?UTF-8?q?=E6=94=AF=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatisticAnalysisController.java | 7 + .../ruoyi/invest/domain/dto/AnalysisDto.java | 8 + .../service/IStatisticAnalysisService.java | 2 + .../service/impl/StatisticAnalysisImpl.java | 211 ++++++++++++++++++ 4 files changed, 228 insertions(+) diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/StatisticAnalysisController.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/StatisticAnalysisController.java index 4b33294..73dc45c 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/StatisticAnalysisController.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/StatisticAnalysisController.java @@ -109,6 +109,13 @@ public class StatisticAnalysisController { } + @ApiOperation("交易记录统计分析") + @GetMapping("/accountsDealAnalysis") + public Map getAccountsDealAnalysis(AnalysisDto analysisDto){ + Map resultMap = iStatisticAnalysisService.getAccountsDealAnalysis(analysisDto); + return AjaxResult.success(resultMap); + } + diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AnalysisDto.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AnalysisDto.java index d0bebff..3e1a8bd 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AnalysisDto.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AnalysisDto.java @@ -38,4 +38,12 @@ public class AnalysisDto implements Serializable @ApiModelProperty(value="类型") private String dataType; + /** 交易类型 */ + @ApiModelProperty(value="交易类型") + private String dealType; + + /** 交易类别 */ + @ApiModelProperty(value="交易类别") + private String dealCategory; + } diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/IStatisticAnalysisService.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/IStatisticAnalysisService.java index b0dcf05..ee2fc7a 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/IStatisticAnalysisService.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/IStatisticAnalysisService.java @@ -34,4 +34,6 @@ public interface IStatisticAnalysisService { public Map getPosAnalysis(AnalysisDto analysisDto); + public Map getAccountsDealAnalysis(AnalysisDto analysisDto); + } diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java index e7fc2d3..72e0c15 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java @@ -50,6 +50,9 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService { @Resource private AccountsTransferRecordMapper accountsTransferRecordMapper; + @Resource + private AccountsDealRecordMapper accountsDealRecordMapper; + @Override public Map getIncomeInfo() { @@ -1482,4 +1485,212 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService { return map; } + + @Override + public Map getAccountsDealAnalysis(AnalysisDto analysisDto) { + //返回数据 + HashMap map = new HashMap<>(); + DecimalFormat decimalFormat = new DecimalFormat("#.###"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat formatterMonth = new SimpleDateFormat("yyyy-MM"); + //月查询 + if(analysisDto.getType().equals("2")){ + if(StringUtils.isEmpty(analysisDto.getStartTime())&&StringUtils.isEmpty(analysisDto.getEndTime())){ + String endTime=dateFormat.format(DateUtils.addMonths(DateUtils.getNowDate(),0)); + String startTime=dateFormat.format(DateUtils.addMonths(DateUtils.getNowDate(),-24)); + analysisDto.setStartTime(startTime); + analysisDto.setEndTime(endTime); + }else { + analysisDto.setStartTime(analysisDto.getStartTime()+"-01"); + if(analysisDto.getEndTime().equals(formatterMonth.format(new Date()))){ + SimpleDateFormat sdf = new SimpleDateFormat("dd"); + analysisDto.setEndTime(analysisDto.getEndTime()+"-"+sdf.format(new Date())); + }else { + analysisDto.setEndTime(analysisDto.getEndTime()+"-31"); + } + + } + + //年查询 + }else if(analysisDto.getType().equals("3")){ + if(StringUtils.isEmpty(analysisDto.getStartTime())&&StringUtils.isEmpty(analysisDto.getEndTime())){ + String endTime=dateFormat.format(DateUtils.getNowDate()); + String startTime=dateFormat.format(DateUtils.addYears(DateUtils.getNowDate(),-5)); + analysisDto.setStartTime(startTime); + analysisDto.setEndTime(endTime); + }else { + analysisDto.setStartTime(analysisDto.getStartTime()+"-01-01"); + SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); + if(analysisDto.getEndTime().equals(sdfYear.format(new Date()))){ + SimpleDateFormat sdf = new SimpleDateFormat("MM-dd"); + analysisDto.setEndTime(analysisDto.getEndTime()+"-"+sdf.format(new Date())); + }else { + analysisDto.setEndTime(analysisDto.getEndTime()+"-12-31"); + } + + } + } + AccountsDealRecordDto dto=new AccountsDealRecordDto(); + //获取数据 + dto.setEndTime(analysisDto.getEndTime()); + dto.setStartTime(analysisDto.getStartTime()); + dto.setType(analysisDto.getDataType()); + dto.setAccountId(analysisDto.getId()); + dto.setDealType(analysisDto.getDealType()); + dto.setDealCategory(analysisDto.getDealCategory()); + List accountsDealRecordVoList=accountsDealRecordMapper.selectAccountsDealRecordList(dto); + double income =0; + double expenses =0; + int incomeCount =0; + int expensesCount =0; + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + if(vo.getDealType().equals("1")){ + income+=vo.getAmount(); + incomeCount++; + } + //支出 + if(vo.getDealType().equals("2")){ + expenses+=vo.getAmount(); + expensesCount++; + } + } + map.put("amount",decimalFormat.format(income-expenses)); + map.put("income",decimalFormat.format(income)); + map.put("expenses",decimalFormat.format(expenses)); + map.put("incomeCount",incomeCount); + map.put("expensesCount",expensesCount); + List queryList =new ArrayList<>(); + + if("1".equals(analysisDto.getType())){ + //日列表 + List staticsTimeList=new ArrayList<>(); + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + String dayString=dateFormat.format(vo.getCreateTime()); + + if(!staticsTimeList.contains(dayString)){ + staticsTimeList.add(dayString); + } + } + + for (String staticsTime :staticsTimeList + ) { + double actualCreditBillDay=0; + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + String dayString=dateFormat.format(vo.getCreateTime()); + + if(staticsTime.equals(dayString)){ + if(vo.getDealType().equals("1")){ + actualCreditBillDay+=vo.getAmount(); + } + if(vo.getDealType().equals("2")){ + actualCreditBillDay-=vo.getAmount(); + } + + } + } + AccountsDealRecordVo analysisVo=new AccountsDealRecordVo(); + analysisVo.setAmount(actualCreditBillDay); + analysisVo.setRemark(staticsTime); + queryList.add(analysisVo); + } + + //年查询 + } + else if("2".equals(analysisDto.getType())){ + //月列表 + List staticsTimeList=new ArrayList<>(); + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + String monthString=dateFormat.format(vo.getCreateTime()).substring(0,7); + + if(!staticsTimeList.contains(monthString)){ + staticsTimeList.add(monthString); + } + } + + for (String staticsTime :staticsTimeList + ) { + double actualCreditBillMonth=0; + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + String monthString=dateFormat.format(vo.getCreateTime()).substring(0,7); + + if(staticsTime.equals(monthString)){ + if(vo.getDealType().equals("1")){ + actualCreditBillMonth+=vo.getAmount(); + } + if(vo.getDealType().equals("2")){ + actualCreditBillMonth-=vo.getAmount(); + } + } + } + AccountsDealRecordVo analysisVo=new AccountsDealRecordVo(); + analysisVo.setAmount(actualCreditBillMonth); + analysisVo.setRemark(staticsTime); + queryList.add(analysisVo); + } + + //年查询 + }else if("3".equals(analysisDto.getType())){ + List staticsTimeList=new ArrayList<>(); + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + String yearString=dateFormat.format(vo.getCreateTime()).substring(0,4); + + if(!staticsTimeList.contains(yearString)){ + staticsTimeList.add(yearString); + } + } + + for (String staticsTime :staticsTimeList + ) { + double actualCreditBillYear=0; + for (AccountsDealRecordVo vo:accountsDealRecordVoList + ) { + String yearString=dateFormat.format(vo.getCreateTime()).substring(0,4); + if(staticsTime.equals(yearString)){ + if(vo.getDealType().equals("1")){ + actualCreditBillYear+=vo.getAmount(); + } + if(vo.getDealType().equals("2")){ + actualCreditBillYear-=vo.getAmount(); + } + } + } + AccountsDealRecordVo analysisVo=new AccountsDealRecordVo(); + analysisVo.setAmount(actualCreditBillYear); + analysisVo.setRemark(staticsTime); + queryList.add(analysisVo); + + } + + } + + ArrayList> acccountsList = new ArrayList<>(); + ArrayList> tableAccountsList = new ArrayList<>(); + for (AccountsDealRecordVo vo:queryList + ) { + Map datamap = new HashMap<>(); + datamap.put("time", vo.getRemark()); + datamap.put("value", decimalFormat.format(vo.getAmount())); + tableAccountsList.add(datamap); + } + Collections.reverse(queryList); + for (AccountsDealRecordVo vo:queryList + ) { + Map datamap = new HashMap<>(); + datamap.put("time", vo.getRemark()); + datamap.put("value", decimalFormat.format(vo.getAmount())); + acccountsList.add(datamap); + } + //列表 + map.put("acccountsList",acccountsList); + map.put("tableAccountsList",tableAccountsList); + + return map; + } + }