diff --git a/src/main/java/com/quinn/common/wx/DayLine.java b/src/main/java/com/quinn/common/wx/DayLine.java index d5b643f..4dbceff 100644 --- a/src/main/java/com/quinn/common/wx/DayLine.java +++ b/src/main/java/com/quinn/common/wx/DayLine.java @@ -6,7 +6,7 @@ import java.io.Serializable; @Data public class DayLine implements Serializable { - private String month; + private String date; private AccBillType accBillType; private Double money; } diff --git a/src/main/java/com/quinn/mapper/AccBillMapper.java b/src/main/java/com/quinn/mapper/AccBillMapper.java index 067e8f1..aaa0118 100644 --- a/src/main/java/com/quinn/mapper/AccBillMapper.java +++ b/src/main/java/com/quinn/mapper/AccBillMapper.java @@ -34,5 +34,7 @@ public interface AccBillMapper extends BaseMapper { List groupList(String userId, String startDate, String endDate); - List lineChartDay(String loginUserId, String rangeDate); + List lineChartDay(String userId, String startDate, String endDate); + + List lineChartMonth(String userId, List latestMonth); } diff --git a/src/main/java/com/quinn/mapper/xml/AccBillMapper.xml b/src/main/java/com/quinn/mapper/xml/AccBillMapper.xml index 7a11284..1f22e7b 100644 --- a/src/main/java/com/quinn/mapper/xml/AccBillMapper.xml +++ b/src/main/java/com/quinn/mapper/xml/AccBillMapper.xml @@ -92,10 +92,20 @@ order by a.date desc - select t.date "date",t.bill_type "accBillType",sum(money) "money" from qn_acc_bill t where t.user_id = #{userId} and t.date = ]]> #{startDate} and t.date #{endDate} group by t.bill_type,t.date order by t.date + + diff --git a/src/main/java/com/quinn/service/impl/AccBillServiceImpl.java b/src/main/java/com/quinn/service/impl/AccBillServiceImpl.java index 781bf86..3e07ab1 100644 --- a/src/main/java/com/quinn/service/impl/AccBillServiceImpl.java +++ b/src/main/java/com/quinn/service/impl/AccBillServiceImpl.java @@ -10,9 +10,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -98,16 +96,101 @@ public class AccBillServiceImpl extends ServiceImpl impl @Override public Map lineChart(String loginUserId, String rangeDate) { + Map> result = new HashMap<>(); + + /** + * 统计当月每天的收支走势图 + */ String startDate = rangeDate + "-01"; String endDate = rangeDate + "-31"; - List dayLines = accBillMapper.lineChartDay(loginUserId, rangeDate); + List dayLines = accBillMapper.lineChartDay(loginUserId, startDate,endDate); + Map expends = new HashMap<>(); + Map incomes = new HashMap<>(); + Map transfers = new HashMap<>(); + Map repayments = new HashMap<>(); if (!CollectionUtils.isEmpty(dayLines)){ - Map expends = dayLines.stream().filter(x -> AccBillType.EXPEND.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getMonth, DayLine::getMoney, (k1, k2) -> k1)); - Map incomes = dayLines.stream().filter(x -> AccBillType.INCOME.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getMonth, DayLine::getMoney, (k1, k2) -> k1)); - Map transfers = dayLines.stream().filter(x -> AccBillType.TRANSFER.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getMonth, DayLine::getMoney, (k1, k2) -> k1)); - Map repayments = dayLines.stream().filter(x -> AccBillType.REPAYMENT.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getMonth, DayLine::getMoney, (k1, k2) -> k1)); + expends = dayLines.stream().filter(x -> AccBillType.EXPEND.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + incomes = dayLines.stream().filter(x -> AccBillType.INCOME.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + transfers = dayLines.stream().filter(x -> AccBillType.TRANSFER.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + repayments = dayLines.stream().filter(x -> AccBillType.REPAYMENT.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); } List eachDay = QuinnUtils.getEachDay(rangeDate); - return null; + List lineDayExpend = new ArrayList<>(); + List lineDayIncome = new ArrayList<>(); + List lineDayTransfer = new ArrayList<>(); + List lineDayRepayment = new ArrayList<>(); + for (String date : eachDay) { + if (expends.get(date) == null){ + lineDayExpend.add(0.0); + }else { + lineDayExpend.add(expends.get(date)); + } + if (incomes.get(date) == null){ + lineDayIncome.add(0.0); + }else { + lineDayIncome.add(incomes.get(date)); + } + if (transfers.get(date) == null){ + lineDayTransfer.add(0.0); + }else { + lineDayTransfer.add(transfers.get(date)); + } + if (repayments.get(date) == null){ + lineDayRepayment.add(0.0); + }else { + lineDayRepayment.add(repayments.get(date)); + } + } + result.put("lineDayExpend",lineDayExpend); + result.put("lineDayIncome",lineDayIncome); + result.put("lineDayTransfer",lineDayTransfer); + result.put("lineDayRepayment",lineDayRepayment); + + /** + * 统计近六个月的收支走势图 + */ + List latestMonth = QuinnUtils.getLatestMonth(rangeDate); + List monthLine = accBillMapper.lineChartMonth(loginUserId, latestMonth); + Map expendMap = new HashMap<>(); + Map incomeMap = new HashMap<>(); + Map transferMap = new HashMap<>(); + Map repaymentMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(monthLine)){ + expendMap = monthLine.stream().filter(x -> AccBillType.EXPEND.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + incomeMap = monthLine.stream().filter(x -> AccBillType.INCOME.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + transferMap = monthLine.stream().filter(x -> AccBillType.TRANSFER.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + repaymentMap = monthLine.stream().filter(x -> AccBillType.REPAYMENT.equals(x.getAccBillType())).collect(Collectors.toMap(DayLine::getDate, DayLine::getMoney, (k1, k2) -> k1)); + } + List lineMonthExpend = new ArrayList<>(); + List lineMonthIncome = new ArrayList<>(); + List lineMonthTransfer = new ArrayList<>(); + List lineMonthRepayment = new ArrayList<>(); + for (String date : latestMonth) { + if (expendMap.get(date) == null){ + lineMonthExpend.add(0.0); + }else { + lineMonthExpend.add(expendMap.get(date)); + } + if (incomeMap.get(date) == null){ + lineMonthIncome.add(0.0); + }else { + lineMonthIncome.add(incomeMap.get(date)); + } + if (transferMap.get(date) == null){ + lineMonthTransfer.add(0.0); + }else { + lineMonthTransfer.add(transferMap.get(date)); + } + if (repaymentMap.get(date) == null){ + lineMonthRepayment.add(0.0); + }else { + lineMonthRepayment.add(repaymentMap.get(date)); + } + } + result.put("lineMonthExpend",lineMonthExpend); + result.put("lineMonthIncome",lineMonthIncome); + result.put("lineMonthTransfer",lineMonthTransfer); + result.put("lineMonthRepayment",lineMonthRepayment); + return result; } } diff --git a/src/main/java/com/quinn/utils/QuinnUtils.java b/src/main/java/com/quinn/utils/QuinnUtils.java index f991309..0759e04 100644 --- a/src/main/java/com/quinn/utils/QuinnUtils.java +++ b/src/main/java/com/quinn/utils/QuinnUtils.java @@ -54,17 +54,28 @@ public class QuinnUtils { } public static List getEachDay(String rangeDate){ + String viewStrFromDate = getViewStrFromDate(new Date()); + int max = 32; + int cYear = Integer.parseInt(viewStrFromDate.substring(0,4)); + int cMonth = Integer.parseInt(viewStrFromDate.substring(5,7)); + int cDay = Integer.parseInt(viewStrFromDate.substring(8)); List result = new ArrayList<>(); String mothText = rangeDate.substring(5); String yearText = rangeDate.substring(0,4); int month = Integer.parseInt(mothText); int year = Integer.parseInt(yearText); + if (year == cYear && month == cMonth) { + max = cDay; + } boolean isRunN = false; if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){ isRunN = true; } if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { for (int i = 1; i <= 31; i++){ + if (i > max) { + break; + } if (i < 10){ result.add(rangeDate + "-0" + i); }else { @@ -74,6 +85,9 @@ public class QuinnUtils { } if (month == 4 || month == 6 || month == 9 || month == 11){ for (int i = 1; i <= 30; i++){ + if (i > max) { + break; + } if (i < 10){ result.add(rangeDate + "-0" + i); }else { @@ -83,6 +97,9 @@ public class QuinnUtils { } if (month == 2){ for (int i = 1; i <= (isRunN ? 29 : 28); i++){ + if (i > max) { + break; + } if (i < 10){ result.add(rangeDate + "-0" + i); }else {