| | |
| | | import com.doumee.dao.business.model.MemberRides; |
| | | import com.doumee.dao.business.model.MemberRidesTrack; |
| | | import com.doumee.dao.business.vo.BikeIncomeStatVO; |
| | | import com.doumee.dao.business.vo.BikeUsageStatVO; |
| | | import com.doumee.dao.business.vo.DashboardVO; |
| | | import com.doumee.dao.business.vo.IncomeDailyVO; |
| | | import com.doumee.dao.business.vo.IncomeStatVO; |
| | | import com.doumee.dao.business.vo.OperationCenterVO; |
| | |
| | | import com.doumee.dao.business.vo.OrderRideTrackVO; |
| | | import com.doumee.dao.business.vo.OrderRidesDetailVO; |
| | | import com.doumee.dao.business.vo.OverviewStatVO; |
| | | import com.doumee.dao.business.vo.PackageSourceStatVO; |
| | | import com.doumee.dao.business.web.request.BikeIncomeQueryDTO; |
| | | import com.doumee.dao.business.web.request.OperationOrderQueryDTO; |
| | | import com.doumee.service.business.ReportService; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.Date; |
| | |
| | | |
| | | /** ç¾åæ¯åºæ°(å¢é¿ç = (æ¬æ - å¯¹æ¯æ) / å¯¹æ¯æ à 100) */ |
| | | private static final BigDecimal PERCENT_BASE = new BigDecimal("100"); |
| | | |
| | | /** æ¯ä»æ¹å¼:æé³å¸æ ¸é(å¥é¤é宿¥æºè¯å«ç¨) */ |
| | | private static final int PAY_WAY_DOUYIN = 2; |
| | | |
| | | @Override |
| | | public OverviewStatVO overview() { |
| | |
| | | } |
| | | return "æªç¥"; |
| | | } |
| | | |
| | | @Override |
| | | public IncomeStatVO incomeStat30() { |
| | | // è¿30天(å«ä»å¤©å
±30天),å¤ç¨ incomeStat æ¢æå®ç°ä¸å£å¾ |
| | | BikeIncomeQueryDTO query = new BikeIncomeQueryDTO(); |
| | | query.setDateType(3); |
| | | return incomeStat(query); |
| | | } |
| | | |
| | | @Override |
| | | public BikeUsageStatVO bikeUsageStat() { |
| | | // status:0 ç©ºé² / 1 使ç¨ä¸;ç¦ç¨(3)ä¸è®¡å
¥;type:0 èªè¡è½¦ / 1 çµå¨è½¦ |
| | | BikeUsageStatVO vo = new BikeUsageStatVO(); |
| | | vo.setBikeIdle(countBikeByStatus(Constants.ZERO, Constants.ZERO)); |
| | | vo.setBikeInUse(countBikeByStatus(Constants.ZERO, Constants.ONE)); |
| | | vo.setEleBikeIdle(countBikeByStatus(Constants.ONE, Constants.ZERO)); |
| | | vo.setEleBikeInUse(countBikeByStatus(Constants.ONE, Constants.ONE)); |
| | | return vo; |
| | | } |
| | | |
| | | /** |
| | | * æè½¦è¾ç±»å + ç¶æç»è®¡æªå é¤è½¦è¾æ°éã |
| | | * |
| | | * @param type 车è¾ç±»å 0 èªè¡è½¦ / 1 çµå¨è½¦ |
| | | * @param status 车è¾ç¶æ 0 ç©ºé² / 1 使ç¨ä¸ |
| | | * @return 满足æ¡ä»¶çè½¦è¾æ° |
| | | */ |
| | | private long countBikeByStatus(Integer type, Integer status) { |
| | | return bikesMapper.selectCount( |
| | | new QueryWrapper<Bikes>().lambda() |
| | | .eq(Bikes::getType, type) |
| | | .eq(Bikes::getStatus, status) |
| | | .eq(Bikes::getIsdeleted, Constants.ZERO)); |
| | | } |
| | | |
| | | @Override |
| | | public PackageSourceStatVO packageSourceStat() { |
| | | // æ¬æ/æ¬å¹´èµ·æ¢(pay_date è½å¨åºé´å
);goodsorder type=1 å¥é¤å¡è´ä¹° + payStatus=1 å·²æ¯ä» |
| | | Calendar cal = Calendar.getInstance(); |
| | | Date monthStart = DateUtil.getStartOfDay(getFirstMs(cal, Calendar.MONTH)); |
| | | Date monthEnd = DateUtil.getEndOfDay(new Date()); |
| | | Date yearStart = DateUtil.getStartOfDay(getFirstMs(cal, Calendar.YEAR)); |
| | | Date yearEnd = DateUtil.getEndOfDay(new Date()); |
| | | |
| | | PackageSourceStatVO vo = new PackageSourceStatVO(); |
| | | vo.setMonth(countPackageSource(monthStart, monthEnd)); |
| | | vo.setYear(countPackageSource(yearStart, yearEnd)); |
| | | return vo; |
| | | } |
| | | |
| | | /** |
| | | * ç»è®¡æå®æ¶æ®µå
å¥é¤é宿¥æºæ°éã |
| | | * <p>æé³å
æ¢ = payWay 2,å°ç¨åºè´ä¹° = payWay 0(微信)ã |
| | | * |
| | | * @param start èµ·å§æ¶é´(å«) |
| | | * @param end ç»ææ¶é´(å«) |
| | | * @return æé³/å°ç¨åºå¥é¤æ°é |
| | | */ |
| | | private PackageSourceStatVO.PeriodCount countPackageSource(Date start, Date end) { |
| | | List<Goodsorder> orders = goodsorderMapper.selectList( |
| | | new QueryWrapper<Goodsorder>().lambda() |
| | | .select(Goodsorder::getPayWay) |
| | | .eq(Goodsorder::getType, Constants.ONE) |
| | | .eq(Goodsorder::getPayStatus, Constants.ONE) |
| | | .eq(Goodsorder::getIsdeleted, Constants.ZERO) |
| | | .ge(Goodsorder::getPayDate, start) |
| | | .le(Goodsorder::getPayDate, end)); |
| | | long douyin = 0L; |
| | | long mini = 0L; |
| | | for (Goodsorder o : orders) { |
| | | if (o.getPayWay() == null) { |
| | | continue; |
| | | } |
| | | if (o.getPayWay() == PAY_WAY_DOUYIN) { |
| | | douyin++; |
| | | } else if (o.getPayWay() == Constants.ZERO) { |
| | | mini++; |
| | | } |
| | | } |
| | | PackageSourceStatVO.PeriodCount pc = new PackageSourceStatVO.PeriodCount(); |
| | | pc.setDouyinCount(douyin); |
| | | pc.setMiniCount(mini); |
| | | return pc; |
| | | } |
| | | |
| | | @Override |
| | | public DashboardVO dashboard() { |
| | | DashboardVO vo = new DashboardVO(); |
| | | |
| | | // åæ¶æ®µèµ·æ¢:æ¬æ/æ¨æ¥/仿¥ |
| | | Date now = new Date(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | Date monthStart = DateUtil.getStartOfDay(getFirstMs(cal, Calendar.MONTH)); |
| | | Date monthEnd = DateUtil.getEndOfDay(now); |
| | | Date yesterdayStart = DateUtil.getStartOfDay(DateUtil.increaseDay(now, -1)); |
| | | Date yesterdayEnd = DateUtil.getEndOfDay(DateUtil.increaseDay(now, -1)); |
| | | Date todayStart = DateUtil.getStartOfDay(now); |
| | | Date todayEnd = DateUtil.getEndOfDay(now); |
| | | |
| | | // æ¶ç(å£å¾å incomeStat:type=0 æ¼é + status=4 å·²ç»ç® ç closeMoney),å¤ç¨ sumClosedMoney |
| | | vo.setMonthIncome(sumClosedMoney(monthStart, monthEnd)); |
| | | vo.setYesterdayIncome(sumClosedMoney(yesterdayStart, yesterdayEnd)); |
| | | vo.setTodayIncome(sumClosedMoney(todayStart, todayEnd)); |
| | | |
| | | // è®¢åæ°:å·²æ¯ä»(payStatus=1)订åè®¡æ° |
| | | vo.setMonthOrderCount(countPaidOrders(monthStart, monthEnd)); |
| | | vo.setYesterdayOrderCount(countPaidOrders(yesterdayStart, yesterdayEnd)); |
| | | vo.setTodayOrderCount(countPaidOrders(todayStart, todayEnd)); |
| | | |
| | | // 车è¾:ä»
è¿åæªå 餿»æ° |
| | | vo.setTotalBikeCount((long) bikesMapper.selectCount( |
| | | new QueryWrapper<Bikes>().lambda().eq(Bikes::getIsdeleted, Constants.ZERO))); |
| | | |
| | | // å®¢æ·æ°:æ»ä¼å=æªå é¤å
¨é¨;仿¥/æ¨æ¥æ°å¢æ create_date è½å¨å¯¹åºåºé´(ä¸ overview å£å¾ä¸è´) |
| | | vo.setTotalMemberCount((long) memberMapper.selectCount( |
| | | new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted, Constants.ZERO))); |
| | | vo.setYesterdayNewMember((long) memberMapper.selectCount( |
| | | new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted, Constants.ZERO) |
| | | .ge(Member::getCreateDate, yesterdayStart) |
| | | .le(Member::getCreateDate, yesterdayEnd))); |
| | | vo.setTodayNewMember((long) memberMapper.selectCount( |
| | | new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted, Constants.ZERO) |
| | | .ge(Member::getCreateDate, todayStart))); |
| | | return vo; |
| | | } |
| | | |
| | | /** |
| | | * ç»è®¡æå®æ¶æ®µå
å·²æ¯ä»è®¢åæ°é(payStatus=1)ã |
| | | * |
| | | * @param start èµ·å§æ¶é´(å«) |
| | | * @param end ç»ææ¶é´(å«) |
| | | * @return å·²æ¯ä»è®¢åæ° |
| | | */ |
| | | private long countPaidOrders(Date start, Date end) { |
| | | return goodsorderMapper.selectCount( |
| | | new QueryWrapper<Goodsorder>().lambda() |
| | | .eq(Goodsorder::getPayStatus, Constants.ONE) |
| | | .eq(Goodsorder::getIsdeleted, Constants.ZERO) |
| | | .ge(Goodsorder::getPayDate, start) |
| | | .le(Goodsorder::getPayDate, end)); |
| | | } |
| | | |
| | | /** |
| | | * 忬æ/æ¬å¹´ç¬¬ä¸å¤©çæ¶é´åå¼(æ¶åç§å½é¶åçæ¯«ç§),ç¨äºæé åºé´èµ·å§ã |
| | | * <p>ç¨ Calendar æã彿1æ¥ 00:00:00.000ãæãå½å¹´1æ1æ¥ 00:00:00.000ãååºã |
| | | * |
| | | * @param cal æ¥å(ä¼è¢«ä¿®æ¹) |
| | | * @param field Calendar.MONTH æ¬æç¬¬ä¸å¤© / Calendar.YEAR æ¬å¹´ç¬¬ä¸å¤© |
| | | * @return åºé´èµ·å§æ¶é´ |
| | | */ |
| | | private Date getFirstMs(Calendar cal, int field) { |
| | | cal.setTime(new Date()); |
| | | if (field == Calendar.MONTH) { |
| | | cal.set(Calendar.DAY_OF_MONTH, 1); |
| | | } else { |
| | | cal.set(Calendar.MONTH, Calendar.JANUARY); |
| | | cal.set(Calendar.DAY_OF_MONTH, 1); |
| | | } |
| | | cal.set(Calendar.HOUR_OF_DAY, 0); |
| | | cal.set(Calendar.MINUTE, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | return cal.getTime(); |
| | | } |
| | | } |