From ba4c339660a6a0ce2cef85564baddc631ad38e40 Mon Sep 17 00:00:00 2001 From: longbinbin <2284496322@qq.com> Date: Thu, 12 Dec 2024 15:39:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E2=80=9C=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=87=91=E9=A2=9D=E3=80=81=E9=A2=84=E8=A7=88?= =?UTF-8?q?=5F=E6=94=AF=E4=BB=98=E8=BD=AC=E5=8C=96=E7=8E=87=E3=80=81?= =?UTF-8?q?=E6=89=AB=E7=A0=81=5F=E4=BB=98=E8=B4=B9=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=BD=AC=E5=8C=96=E7=8E=87=E2=80=9D=E5=92=8C=E2=80=9C=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=AE=A2=E5=8D=95=E6=95=B0=E3=80=81=E7=8E=B0=E5=9C=BA?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=95=B0=E3=80=81=E6=8E=A8=E9=80=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E7=BB=9F=E8=AE=A1=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobile/AppMemberController.java | 9 +- .../mobile/AppStatisticsController.java | 8 + .../com/ycwl/basic/enums/StatisticEnum.java | 75 ++++++ .../ycwl/basic/mapper/StatisticsMapper.java | 44 ++++ .../model/mobile/statistic/AppSta1VO.java | 2 + .../model/mobile/statistic/AppSta2VO.java | 26 ++ .../mobile/statistic/CommonQueryReq.java | 2 + .../impl/mobile/AppMemberServiceImpl.java | 9 + .../impl/mobile/AppStatisticsServiceImpl.java | 230 +++++++++++++++++- .../service/mobile/AppMemberService.java | 2 + .../service/mobile/AppStatisticsService.java | 3 + .../java/com/ycwl/basic/utils/DateUtils.java | 148 +++++++---- src/main/resources/mapper/pc/OrderMapper.xml | 2 +- .../resources/mapper/pc/StatisticsMapper.xml | 48 ++++ 14 files changed, 555 insertions(+), 53 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/enums/StatisticEnum.java create mode 100644 src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta2VO.java diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java index 6962894..0ad4c1a 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java @@ -82,9 +82,16 @@ public class AppMemberController { return ApiResponse.success(""); } - @GetMapping("新增或修改景区服务通知状态") + @ApiOperation("新增或修改景区服务通知状态") + @GetMapping("/updateScenicServiceNoticeStatus") public ApiResponse updateScenicServiceNoticeStatus(Long scenicId) { return memberService.updateScenicServiceNoticeStatus(scenicId); } + @ApiOperation("查看景区服务通知状态 0关闭 1开启") + @GetMapping("/getScenicServiceNoticeStatus") + public ApiResponse getScenicServiceNoticeStatus(Long scenicId) { + return memberService.getScenicServiceNoticeStatus(scenicId); + } + } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppStatisticsController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppStatisticsController.java index 0487ba6..af84c37 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppStatisticsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppStatisticsController.java @@ -1,6 +1,7 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.model.mobile.statistic.AppSta1VO; +import com.ycwl.basic.model.mobile.statistic.AppSta2VO; import com.ycwl.basic.model.mobile.statistic.CommonQueryReq; import com.ycwl.basic.service.mobile.AppStatisticsService; import com.ycwl.basic.utils.ApiResponse; @@ -29,6 +30,13 @@ public class AppStatisticsController { return statisticsService.oneStatistics(query); } + @ApiOperation("支付订单数、现场订单数、推送订单数统计") + @PostMapping("/two") + public ApiResponse twoStatistics(@RequestBody CommonQueryReq query) { + + return statisticsService.twoStatistics(query); + } + } diff --git a/src/main/java/com/ycwl/basic/enums/StatisticEnum.java b/src/main/java/com/ycwl/basic/enums/StatisticEnum.java new file mode 100644 index 0000000..03f5089 --- /dev/null +++ b/src/main/java/com/ycwl/basic/enums/StatisticEnum.java @@ -0,0 +1,75 @@ +package com.ycwl.basic.enums; + +import java.util.HashMap; +import java.util.Map; + +public enum StatisticEnum { + SCAN_THE_CODE_TO_ENTER(0,"扫码进入"), + UPLOAD_FACE(1,"上传人脸"), + PREVIEWING_VIDEO(2,"预览视频"), + ON_SITE_PAYMENT(3,"现场支付"), + POST_PAYMENT(4,"事后支付"), + REFUND(5,"退款"), + AGREE_TO_PUSH(6,"同意推送"), + REFUSE_PUSH_NOTIFICATIONS(7,"拒绝推送"), + DOWNLOAD(8,"下载"), + CLICK_ON_PAYMENT(9,"点击支付、购买"), + + ; + + public static final Map cacheMap; + + static { + cacheMap = new HashMap<>(StatisticEnum.values().length); + for (StatisticEnum value : StatisticEnum.values()) { + cacheMap.put(value.code, value); + } + } + public static final Map valueMap; + + static { + valueMap = new HashMap<>(StatisticEnum.values().length); + for (StatisticEnum value : StatisticEnum.values()) { + valueMap.put(value.value, value); + } + } + + + public final Integer code; + + private final String value; + + StatisticEnum(Integer code, String value) { + this.code = code; + this.value = value; + } + + /** + * 获取value值 + */ + public static String getValue(Integer noticeMethod) { + if (noticeMethod == null) { + return null; + } + + StatisticEnum statisticEnum = cacheMap.get(noticeMethod); + if (statisticEnum == null) { + return null; + } + return statisticEnum.value; + } + /** + * 获取code值 + */ + public static Integer getCode(String noticeMethod) { + if (noticeMethod == null) { + return -1; + } + + StatisticEnum statisticEnum = valueMap.get(noticeMethod); + if (statisticEnum == null) { + return -1; + } + return statisticEnum.code; + } +} diff --git a/src/main/java/com/ycwl/basic/mapper/StatisticsMapper.java b/src/main/java/com/ycwl/basic/mapper/StatisticsMapper.java index 7298f82..4670e6d 100644 --- a/src/main/java/com/ycwl/basic/mapper/StatisticsMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/StatisticsMapper.java @@ -1,8 +1,52 @@ package com.ycwl.basic.mapper; +import com.ycwl.basic.model.mobile.statistic.CommonQueryReq; +import org.apache.ibatis.annotations.Mapper; + +import java.math.BigDecimal; + /** * @Author:longbinbin * @Date:2024/12/12 9:51 */ +@Mapper public interface StatisticsMapper { + /** + * 统计支付订单金额 + * @param query + * @return + */ + BigDecimal countOrderAmount(CommonQueryReq query); + + /** + * 统计预览视频人数 + * @param query + * @return + */ + int countPreviewOfMember(CommonQueryReq query); + + /** + * 统计扫码人数 + * @param query + * @return + */ + int countScanCodeOfMember(CommonQueryReq query); + + /** + * 统计点击购买人数 + * @param query + * @return + */ + int countClickPayOfMember(CommonQueryReq query); + + /** + * 统计付费人数 + * @param query + * @return + */ + int countPayOfMember(CommonQueryReq query); + + int countSceneOrderNum(CommonQueryReq query); + + int countPushOrderNum(CommonQueryReq query); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta1VO.java b/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta1VO.java index 350dfc9..e66ebf7 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta1VO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta1VO.java @@ -2,11 +2,13 @@ package com.ycwl.basic.model.mobile.statistic; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; /** * @Author:longbinbin * @Date:2024/12/11 18:23 */ +@Data @ApiModel("移动端订单金额、预览_支付转化率、扫码_付费用户转化率统计结果类") public class AppSta1VO { @ApiModelProperty("现在的数据 支付订单金额") diff --git a/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta2VO.java b/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta2VO.java new file mode 100644 index 0000000..5c2a978 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/statistic/AppSta2VO.java @@ -0,0 +1,26 @@ +package com.ycwl.basic.model.mobile.statistic; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author:longbinbin + * @Date:2024/12/11 18:23 + */ +@Data +@ApiModel("移动端支付订单数、现场订单数、推送订单数统计结果类") +public class AppSta2VO { + @ApiModelProperty("现在的数据 支付订单数") + private Integer nowPayOrderNum; + @ApiModelProperty("上一期的数据 支付订单数") + private Integer previousPayOrderNum; + @ApiModelProperty("现在的数据 现场订单数") + private Integer nowSceneOrderNum; + @ApiModelProperty("上一期的数据 现场订单数") + private Integer previousSceneOrderNum; + @ApiModelProperty("现在的数据 推送订单数") + private Integer nowPushOrderNum; + @ApiModelProperty("上一期的数据 推送订单数") + private Integer previousPushOrderNum; +} diff --git a/src/main/java/com/ycwl/basic/model/mobile/statistic/CommonQueryReq.java b/src/main/java/com/ycwl/basic/model/mobile/statistic/CommonQueryReq.java index ba58af9..4622697 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/statistic/CommonQueryReq.java +++ b/src/main/java/com/ycwl/basic/model/mobile/statistic/CommonQueryReq.java @@ -16,6 +16,8 @@ import java.util.Date; public class CommonQueryReq { @ApiModelProperty(value = "查询统计纬度 0今天、1昨天、2-近一周(7天)、3-近30天、4-近1年") private Integer standard; + @ApiModelProperty(value = "景区id") + private Long scenicId; private Date startTime; private Date endTime; } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java index 3c44cd2..b6d04cd 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppMemberServiceImpl.java @@ -162,4 +162,13 @@ public class AppMemberServiceImpl implements AppMemberService { } } + + @Override + public ApiResponse getScenicServiceNoticeStatus(Long scenicId) { + Integer scenicServiceNoticeStatus = memberMapper.getScenicServiceNoticeStatus(scenicId, Long.parseLong(BaseContextHandler.getUserId())); + if(scenicServiceNoticeStatus==null){ + scenicServiceNoticeStatus=0; + } + return ApiResponse.success(scenicServiceNoticeStatus); + } } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java index 3bcb01e..5e82b9d 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java @@ -1,11 +1,20 @@ package com.ycwl.basic.service.impl.mobile; +import com.ycwl.basic.mapper.StatisticsMapper; import com.ycwl.basic.model.mobile.statistic.AppSta1VO; +import com.ycwl.basic.model.mobile.statistic.AppSta2VO; import com.ycwl.basic.model.mobile.statistic.CommonQueryReq; import com.ycwl.basic.service.mobile.AppStatisticsService; import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.Date; + /** * @Author:longbinbin * @Date:2024/12/12 9:48 @@ -13,6 +22,10 @@ import org.springframework.stereotype.Service; @Service public class AppStatisticsServiceImpl implements AppStatisticsService { + @Autowired + private StatisticsMapper statisticsMapper; + + /** * 支付订单金额、预览_支付转化率、扫码_付费用户转化率 * @param query @@ -20,6 +33,221 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { */ @Override public ApiResponse oneStatistics(CommonQueryReq query) { - return null; + AppSta1VO vo = new AppSta1VO(); + //订单金额格式 + DecimalFormat orderAmountDf = new DecimalFormat("0.0"); + //转化率格式 + DecimalFormat df = new DecimalFormat("0.00"); + if(query.getEndTime()==null && query.getStartTime()==null){ + // 没有传时间,则代表用户没有自定义查询时间,使用standard来判断查询时间范围 + Integer standard = query.getStandard(); + if(standard==null){ + query.setStandard(0); + } + //获取当前周期的具体时间范围 + standardToNewSpecificTime(query); + //查询处理数据逻辑 + oneStatisticsHandler(1,query,vo); + //---------------------------------------------------- + //获取上一个周期的具体时间范围 + standardToPreviousSpecificTime(query); + //查询处理数据逻辑 + oneStatisticsHandler(2,query,vo); + }else{ + //自定义时间查询,只有当前数据,没有往期对比数据 + //查询处理数据逻辑 + oneStatisticsHandler(1,query,vo); + } + return ApiResponse.success(vo); + } + + @Override + public ApiResponse twoStatistics(CommonQueryReq query) { + AppSta2VO vo = new AppSta2VO(); + if(query.getEndTime()==null && query.getStartTime()==null){ + // 没有传时间,则代表用户没有自定义查询时间,使用standard来判断查询时间范围 + Integer standard = query.getStandard(); + if(standard==null){ + query.setStandard(0); + } + //获取当前周期的具体时间范围 + standardToNewSpecificTime(query); + //查询处理数据逻辑 + twoStatisticsHandler(1,query,vo); + //---------------------------------------------------- + //获取当前周期的具体时间范围 + standardToPreviousSpecificTime(query); + //查询处理数据逻辑 + twoStatisticsHandler(2,query,vo); + }else{ + //自定义时间查询,只有当前数据,没有往期对比数据 + //查询处理数据逻辑 + twoStatisticsHandler(1,query,vo); + } + return ApiResponse.success(vo); + } + + /** + * + * @param cycle 周期 1当前 2往期 + * @param query + * @param vo + */ + private void twoStatisticsHandler(Integer cycle,CommonQueryReq query,AppSta2VO vo){ + //查询现场支付订单数 + int sceneOrderNum=statisticsMapper.countSceneOrderNum(query); + //查询推送支付订单数 + int pushOrderNum=statisticsMapper.countPushOrderNum(query); + // 当前周期的总支付订单数 + Integer totalOrderNum=sceneOrderNum+pushOrderNum; + + if(cycle==1){ + //当前周期的总支付订单数 + vo.setNowPayOrderNum(totalOrderNum); + //查询现场支付订单数 + vo.setNowSceneOrderNum(sceneOrderNum); + //查询推送支付订单数 + vo.setNowPushOrderNum(pushOrderNum); + }else if(cycle==2){ + //当前周期的总支付订单数 + vo.setPreviousPayOrderNum(totalOrderNum); + //查询现场支付订单数 + vo.setPreviousSceneOrderNum(sceneOrderNum); + //查询推送支付订单数 + vo.setPreviousPushOrderNum(pushOrderNum); + } + } + + /** + * + * @param cycle 周期 1当前 2往期 + * @param query + * @param vo + */ + private void oneStatisticsHandler(Integer cycle,CommonQueryReq query,AppSta1VO vo){ + //订单金额格式 + DecimalFormat orderAmountDf = new DecimalFormat("0.0"); + //转化率格式 + DecimalFormat df = new DecimalFormat("0.00"); + // 计算当前周期的支付订单金额 + BigDecimal orderAmount=statisticsMapper.countOrderAmount(query).setScale(2, RoundingMode.HALF_UP); + //查询预览视频人数 + int preview=statisticsMapper.countPreviewOfMember(query); + //查询扫码人数 + int scanCode=statisticsMapper.countScanCodeOfMember(query); + //查询付费人数 + int pay=statisticsMapper.countPayOfMember(query); + + if(cycle==1){ + //当前周期的支付订单金额 + vo.setNowOrderAmount(orderAmountDf.format(orderAmount)); + //当前周期预览_支付转化率、扫码_付费用户转化率 + if(pay==0){ + vo.setNowPreviewPay("0.00"); + vo.setNowScanCodePay("0.00"); + }else { + BigDecimal previewPay = new BigDecimal(preview).divide(new BigDecimal(pay), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + vo.setNowPreviewPay(df.format(previewPay)); + BigDecimal scanCodePay = new BigDecimal(scanCode).divide(new BigDecimal(pay), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + vo.setNowScanCodePay(df.format(scanCodePay)); + } + }else if(cycle==2){ + //上一个周期的支付订单金额 + vo.setNowOrderAmount(orderAmountDf.format(orderAmount)); + // 计算预览_支付转化率 + if(pay==0){ + vo.setPreviousPreviewPay("0.00"); + vo.setPreviousScanCodePay("0.00"); + }else { + BigDecimal previewPay = new BigDecimal(preview).divide(new BigDecimal(pay), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + vo.setNowPreviewPay(df.format(previewPay)); + BigDecimal scanCodePay = new BigDecimal(scanCode).divide(new BigDecimal(pay), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + vo.setNowScanCodePay(df.format(scanCodePay)); + } + } + } + + + + + + /** + * 根据standard来获取查询时间范围(当前周期) + * @param query + */ + private void standardToNewSpecificTime(CommonQueryReq query) { + Integer standard = query.getStandard(); + Date newDate = new Date(); + Date startDate = new Date(); + Date endDate = new Date(); + switch (standard) { + case 4://年 + startDate = DateUtils.addDateYears(newDate, -1); + break; + case 3://月 + startDate = DateUtils.addDateMonths(newDate, -1); + break; + case 2://周 + startDate = DateUtils.addDateWeeks(newDate, -1); + break; + case 1://昨天 + Date yesterday = DateUtils.addDateDays(newDate, -1); + startDate = DateUtils.getStartOfDay(yesterday); + endDate = DateUtils.getEndOfDay(yesterday); + break; + case 0://今天 + startDate = DateUtils.getStartOfDay(newDate); + break; + case 9://历史累计 + startDate = null; + endDate = null; + break; + default: + break; + } + query.setStartTime(startDate); + query.setEndTime(endDate); + } + + /** + * 根据standard来获取查询时间范围(上一个周期) + * @param query + */ + private void standardToPreviousSpecificTime(CommonQueryReq query) { + Integer standard = query.getStandard(); + Date newDate = new Date(); + Date startDate = new Date(); + Date endDate = new Date(); + switch (standard) { + case 4://年,近一年的前一年 + startDate = DateUtils.addDateYears(newDate, -2); + break; + case 3://月,近一月的前一个月 + startDate = DateUtils.addDateMonths(newDate, -2); + endDate = DateUtils.addDateMonths(newDate, -1); + break; + case 2://周,近一周的前一周 + startDate = DateUtils.addDateWeeks(newDate, -2); + endDate = DateUtils.addDateWeeks(newDate, -1); + break; + case 1://昨天,昨天的前一天 + Date theDayBeforeYesterday = DateUtils.addDateDays(newDate, -2); + startDate = DateUtils.getStartOfDay(theDayBeforeYesterday); + endDate = DateUtils.getEndOfDay(theDayBeforeYesterday); + break; + case 0://今天,今天的前一天 + Date yesterday = DateUtils.addDateDays(newDate, -1); + startDate = DateUtils.getStartOfDay(yesterday); + endDate = DateUtils.getEndOfDay(yesterday); + break; + case 9://历史累计 + startDate = null; + endDate = null; + break; + default: + break; + } + query.setStartTime(startDate); + query.setEndTime(endDate); } } diff --git a/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java b/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java index d1ec464..4b468e4 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java @@ -52,4 +52,6 @@ public interface AppMemberService { ApiResponse updateScenicServiceNoticeStatus(Long scenicId); + + ApiResponse getScenicServiceNoticeStatus(Long scenicId); } diff --git a/src/main/java/com/ycwl/basic/service/mobile/AppStatisticsService.java b/src/main/java/com/ycwl/basic/service/mobile/AppStatisticsService.java index 4948f42..30dc45e 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppStatisticsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppStatisticsService.java @@ -1,6 +1,7 @@ package com.ycwl.basic.service.mobile; import com.ycwl.basic.model.mobile.statistic.AppSta1VO; +import com.ycwl.basic.model.mobile.statistic.AppSta2VO; import com.ycwl.basic.model.mobile.statistic.CommonQueryReq; import com.ycwl.basic.utils.ApiResponse; @@ -11,4 +12,6 @@ import com.ycwl.basic.utils.ApiResponse; public interface AppStatisticsService { ApiResponse oneStatistics(CommonQueryReq query); + + ApiResponse twoStatistics(CommonQueryReq query); } diff --git a/src/main/java/com/ycwl/basic/utils/DateUtils.java b/src/main/java/com/ycwl/basic/utils/DateUtils.java index fd285f3..69e1af8 100644 --- a/src/main/java/com/ycwl/basic/utils/DateUtils.java +++ b/src/main/java/com/ycwl/basic/utils/DateUtils.java @@ -27,18 +27,11 @@ public class DateUtils { public final static String YYYY_MM = "yyyyMM"; public final static String YYYY_MM_DD_HH_MM_SS_SSS = "yyyyMMddHHmmssSSS"; public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; - /** - * 时间格式(yyyy-MM-dd HH:mm:ss) - */ public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; - /** - * 日期转化为cron表达式 - */ public final static String CRON_DATE_TIME_PATTERN = "ss mm HH dd MM ? yyyy"; /** * 日期格式化 日期格式为:yyyy-MM-dd - * * @param date 日期 * @return 返回yyyy-MM-dd格式日期 */ @@ -47,8 +40,7 @@ public class DateUtils { } /** - * 日期格式化 日期格式为:yyyy-MM-dd - * + * 日期格式化 自定义格式 * @param date 日期 * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN * @return 返回yyyy-MM-dd格式日期 @@ -63,21 +55,19 @@ public class DateUtils { /** - * 日期格式化 日期格式为:yyyy-MM-dd HH:mm:ss - * - * @param dataStr - * @return 返回yyyy-MM-dd格式日期 + * 日期解析 日期格式为:yyyy-MM-dd HH:mm:ss + * @param dataStr 日期字符串 + * @return 返回yyyy-MM-dd HH:mm:ss格式日期 */ - public static Date format(String dataStr) throws ParseException { + public static Date parse(String dataStr) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_PATTERN); return sdf.parse(dataStr); } /** - * 日期解析 - * - * @param date 日期 + * 日期解析 自定义格式 + * @param date 日期字符串 * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN * @return 返回Date */ @@ -98,21 +88,27 @@ public class DateUtils { */ @SneakyThrows public static Date startOfDay(Date date) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String s = sdf.format(date); - return sdf.parse(s); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + // 将时间部分设置为00:00:00.000 + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); } /** * 这个月的第一天 - * * @param date 日期 * @return */ public static Date startOfMonth(Date date) { Date date1 = startOfDay(date); - date1.setDate(1); - return date1; + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + cal.set(Calendar.DAY_OF_MONTH,1); + return cal.getTime(); } /** @@ -142,8 +138,7 @@ public class DateUtils { } /** - * 获得某月最大时间 2019-10-08 23:59:59 - * + * 获得某月最大时间 * @param date * @return */ @@ -156,6 +151,11 @@ public class DateUtils { return getEndOfDay(localDateTimeToDate(endOfDay)); } + /** + * 获得某天最大时间 + * @param date + * @return + */ public static Date getStartMonthOfDay(Date date) { if (date == null) { return null; @@ -243,8 +243,7 @@ public class DateUtils { } /** - * 获得某天最小时间 2019-10-08 00:00:00 - * + * 获得某天最小时间 * @param date * @return */ @@ -258,8 +257,7 @@ public class DateUtils { } /** - * 获得某天最大时间 2019-10-08 23:59:59 - * + * 获得某天最大时间 * @param date * @return */ @@ -274,7 +272,6 @@ public class DateUtils { /** * localDateTime 转date - * * @param localDateTime * @return */ @@ -284,7 +281,6 @@ public class DateUtils { /** * 将秒转为时分秒格式【01:01:01】 - * * @param second 需要转化的秒数 * @return */ @@ -308,19 +304,17 @@ public class DateUtils { return str; } - + /** + * + * @param date + * @return + */ public static String getWeekOfDate(Date date) { - String[] weekDays = {"1", "2", "3", "4", "5", "6", "7"}; //"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" + String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"}; // "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" Calendar cal = Calendar.getInstance(); cal.setTime(date); - int w = cal.get(Calendar.DAY_OF_WEEK) - 1; - if (w < 0) - w = 0; - if (Integer.valueOf(weekDays[w]) >= 2) { - return String.valueOf(Integer.valueOf(weekDays[w]) - 1); - } else { - return String.valueOf(7); - } + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 将星期日转换为7 + return weekDays[w]; // 直接返回对应的星期数 } /** @@ -422,6 +416,11 @@ public class DateUtils { } return timesList; } + + /** + * 获取24小时制的时间 + * @return + */ public static List getAllTimesBetweenDates(){ // 创建一个字符串数组,容量为24 String[] times24 = new String[24]; @@ -435,16 +434,65 @@ public class DateUtils { return new ArrayList<>(Arrays.asList(times24)); } + /** + * 在指定日期上增加i年,负数为减少i年 + * @param date 指定的日期 + * @param i 增加/减少的年数 + * @return + */ + public static Date addDateYears(Date date, int i) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.YEAR, i); + return calendar.getTime(); + } + + /** + * 在指定日期上增加i月,负数为减少i月 + * @param date + * @param i + * @return + */ + public static Date addDateMonths(Date date, int i) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.MONTH, i); + return calendar.getTime(); + } + + /** + * 在指定日期上增加i周,负数为减少i周 + * @param date + * @param i + * @return + */ + public static Date addDateWeeks(Date date, int i) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.WEEK_OF_YEAR, i); + return calendar.getTime(); + } + + /** + * 在指定日期上增加i天,负数为减少i天 + * @param date + * @param i + * @return + */ + public static Date addDateDays(Date date, int i) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_YEAR, i); + return calendar.getTime(); + } + public static void main(String[] args) { -// System.out.println(getWeekOfDate(stringToDate("2023-07-31 00:00:00", DATE_TIME_PATTERN))); -// String ss = "2,3,4,5,6,7"; -// System.out.println(ss.contains(getWeekOfDate(stringToDate("2023-07-31 00:00:00", DATE_TIME_PATTERN)))); -// System.out.println(stringToDate("2020-03-23",DATE_PATTERN)); -// System.out.println("2020-03-23".length()); -// Date monthLastDay = endOfNextMonth(new Date()); -// System.out.println(format(monthLastDay,DATE_TIME_PATTERN)); -// String s = secondConvertHourMinSecond(360L); -// System.out.println(s); + Date date = new Date(); + Date yesterday = DateUtils.addDateDays(date, -1); + Date startDate = DateUtils.getStartOfDay(yesterday); + Date endDate = DateUtils.getEndOfDay(yesterday); + System.out.println(format(startDate, "yyyy-MM-dd HH:mm:ss")); + System.out.println(format(endDate, "yyyy-MM-dd HH:mm:ss")); } } diff --git a/src/main/resources/mapper/pc/OrderMapper.xml b/src/main/resources/mapper/pc/OrderMapper.xml index 2cb59cd..7429bbf 100644 --- a/src/main/resources/mapper/pc/OrderMapper.xml +++ b/src/main/resources/mapper/pc/OrderMapper.xml @@ -46,7 +46,7 @@ - + diff --git a/src/main/resources/mapper/pc/StatisticsMapper.xml b/src/main/resources/mapper/pc/StatisticsMapper.xml index d1f92d8..742705e 100644 --- a/src/main/resources/mapper/pc/StatisticsMapper.xml +++ b/src/main/resources/mapper/pc/StatisticsMapper.xml @@ -1,4 +1,52 @@ + + + + + + + \ No newline at end of file