diff --git a/play-admin/src/main/java/com/starry/admin/common/task/ClerkWagesSettlementTask.java b/play-admin/src/main/java/com/starry/admin/common/task/ClerkWagesSettlementTask.java index 30a2769..7e4166e 100644 --- a/play-admin/src/main/java/com/starry/admin/common/task/ClerkWagesSettlementTask.java +++ b/play-admin/src/main/java/com/starry/admin/common/task/ClerkWagesSettlementTask.java @@ -3,7 +3,6 @@ package com.starry.admin.common.task; import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity; import com.starry.admin.modules.clerk.module.entity.PlayClerkWagesDetailsInfoEntity; import com.starry.admin.modules.clerk.module.entity.PlayClerkWagesInfoEntity; -import com.starry.admin.modules.clerk.service.IPlayClerkRankingInfoService; import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; import com.starry.admin.modules.clerk.service.IPlayClerkWagesDetailsInfoService; import com.starry.admin.modules.clerk.service.IPlayClerkWagesInfoService; @@ -41,8 +40,6 @@ public class ClerkWagesSettlementTask { @Resource private IPlayOrderInfoService playOrderInfoService; - @Resource - private IPlayClerkRankingInfoService clerkRankingInfoService; @Resource private IPlayClerkWagesInfoService playClerkWagesInfoService; diff --git a/play-admin/src/main/java/com/starry/admin/common/task/OrderRankingSettlementTask.java b/play-admin/src/main/java/com/starry/admin/common/task/OrderRankingSettlementTask.java index b0b32ea..ed19bb9 100644 --- a/play-admin/src/main/java/com/starry/admin/common/task/OrderRankingSettlementTask.java +++ b/play-admin/src/main/java/com/starry/admin/common/task/OrderRankingSettlementTask.java @@ -17,6 +17,10 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -42,56 +46,88 @@ public class OrderRankingSettlementTask { @Resource private IPlayClerkRankingInfoService clerkRankingInfoService; + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + /** * 当日订单结算,查询前一日的订单信息,生成订单排名数据 * 每天凌晨0点5分0秒时触发执行 */ -// @Scheduled(cron = "0 0/1 * * * ?") + @Scheduled(cron = "0 5 0 * * ?") public void dailyRanking() { - // 1、查询所有的租户信息 - List tenantEntities = sysTenantService.listAll(); - LocalDate startTime = LocalDate.now().minusDays(1); - LocalDate endTime = LocalDate.now(); - // 2、查询每个租户的用户,以及他们的订单信息 - Integer newSerialNumber = clerkRankingInfoService.selectSerialNumber("0"); - for (SysTenantEntity tenantEntity : tenantEntities) { - SecurityUtils.setTenantId(tenantEntity.getTenantId()); - List clerkUserReturnVos = clerkUserInfoService.listAll(); - // 生成每个人的订单排行信息 - for (PlayClerkUserInfoEntity clerkUserInfo : clerkUserReturnVos) { - // 查询当前店员一定时间的订单信息 - String rankId = IdUtils.getUuid(); - // 3、根据订单信息,生成对应排名数据 - createClerkRanking(clerkUserInfo.getId(), startTime, endTime, rankId, newSerialNumber); - } - // 根据订单数量,更新排行名次 - List list = clerkRankingInfoService.selectMaxSerialNumber("0"); - // 使用匿名比较器排序 - list.sort((p1, p2) -> p2.getOrderNumber() - p1.getOrderNumber()); - for (int i = 0; i < list.size(); i++) { - PlayClerkRankingInfoEntity item = list.get(i); - item.setRankingIndex(i + 1); - if (i > 0) { - item.setPreviousMoney(list.get(i - 1).getOrderMoney().subtract(item.getOrderMoney())); - } - clerkRankingInfoService.update(item); - } - } + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String startTime = LocalDate.now().minusDays(1).atStartOfDay().format(df); + String endTime = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MAX).format(df); + rankingSettlement(startTime, endTime, "0"); } + /** + * 每周订单结算,周一凌晨30分执行,查询上一周的订单,然后生成订单排行数据 + * 每周一凌晨0点30分0秒时触发执行 + */ + @Scheduled(cron = "0 30 0 ? * MON") + public void weeklyRankingSettlement() { + + String startTime = LocalDate.now().minusDays(8).atStartOfDay().format(df); + String endTime = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MAX).format(df); + rankingSettlement(startTime, endTime, "1"); + } + + /** + * 生产排行信息 + * 1、查询所有的租户信息 + * 2、查询每个租户的用户,以及他们在对应时间段的订单 + * 3、根据订单生产排行信息 + * + * @param startTime 接单开始时间 + * @param endTime 接单截至时间 + * @param weeklyRanking weeklyRanking 日排名还是周排名(0:每日排名;1:每周排名) + * @author admin + * @since 2024/6/12 15:21 + **/ + public void rankingSettlement(String startTime, String endTime, String weeklyRanking) { + // 1、查询所有的租户信息 + List tenantEntities = sysTenantService.listAll(); + // 2、查询每个租户的用户,以及他们的订单信息 + for (SysTenantEntity tenantEntity : tenantEntities) { + SecurityUtils.setTenantId(tenantEntity.getTenantId()); + // 当前租户用户列表 + List clerkUserReturnVos = clerkUserInfoService.listAll(); + List clerkRankingInfoEntities = new ArrayList<>(); + // 查询当前租户、当前排行、的最后一次统计编号 + Integer newSerialNumber = clerkRankingInfoService.selectSerialNumber(weeklyRanking); + // 生成每个人的订单排行信息 + for (PlayClerkUserInfoEntity clerkUserInfo : clerkUserReturnVos) { + // 生成订单排行数据 + clerkRankingInfoEntities.add(getClerkRanking(clerkUserInfo.getId(), startTime, endTime, weeklyRanking, newSerialNumber)); + } + // 更新排行名次 + clerkRankingInfoEntities.sort((p1, p2) -> p2.getOrderNumber() - p1.getOrderNumber()); + for (int i = 0; i < clerkRankingInfoEntities.size(); i++) { + PlayClerkRankingInfoEntity item = clerkRankingInfoEntities.get(i); + item.setRankingIndex(i + 1); + if (i > 0) { + item.setPreviousMoney(clerkRankingInfoEntities.get(i - 1).getOrderMoney().subtract(item.getOrderMoney())); + } + } + // 排名数据生成后,将以往排名状态标记为历史排名 + clerkRankingInfoService.updateClerkRankingInfo(weeklyRanking, newSerialNumber); + // 插入本次排名数据 + clerkRankingInfoService.saveBatch(clerkRankingInfoEntities); + } + } /** * 生产当前排行信息 * - * @param clerkId 店员ID - * @param startTime 排行开始统计日期 - * @param endTime 排行结束统计日期 - * @param rankingId 排行榜ID - * @param newSerialNumber 统计批次 + * @param clerkId 店员ID + * @param startTime 排行开始统计日期 yyyy-mm-dd 00:00:00 + * @param endTime 排行结束统计日期 yyyy-mm-dd 23:59:59 + * @param weeklyRanking 日排名还是周排名(0:每日排名;1:每周排名) + * @param serialNumber 查询当前租户、当前排行、的最后一次统计编号 * @author admin * @since 2024/6/7 11:43 **/ - public void createClerkRanking(String clerkId, LocalDate startTime, LocalDate endTime, String rankingId, Integer newSerialNumber) { + public PlayClerkRankingInfoEntity getClerkRanking(String clerkId, String startTime, String endTime, String weeklyRanking, Integer serialNumber) { List orderInfoEntities = orderInfoService.listByTime(clerkId, startTime, endTime); int orderNumber = orderInfoEntities.size(); BigDecimal orderMoney = BigDecimal.ZERO; @@ -113,22 +149,29 @@ public class OrderRankingSettlementTask { BigDecimal orderContinueProportion = orderNumber == 0 ? BigDecimal.ZERO : new BigDecimal(ordersExpiredNumber).divide(new BigDecimal(orderNumber), 4, RoundingMode.HALF_UP).add(new BigDecimal(100)); BigDecimal averageUnitPrice = customIds.isEmpty() ? BigDecimal.ZERO : orderMoney.divide(new BigDecimal(customIds.size()), 4, RoundingMode.HALF_UP); PlayClerkRankingInfoEntity rankingInfo = new PlayClerkRankingInfoEntity(); - rankingInfo.setId(rankingId); + rankingInfo.setId(IdUtils.getUuid()); rankingInfo.setClerkId(clerkId); - rankingInfo.setStartCountDate(startTime); - rankingInfo.setEndCountDate(endTime); - rankingInfo.setWeeklyRanking("0"); + // 默认为当前统计 + rankingInfo.setHistoricalStatistics("0"); + rankingInfo.setWeeklyRanking(weeklyRanking); + // 当前统计编号+1 + rankingInfo.setSerialNumber(serialNumber + 1); + // 每个人的名次默认为1,后面在进行排序更新名次 + rankingInfo.setRankingIndex(1); + // 统计时间 + rankingInfo.setStartCountDate(LocalDate.parse(startTime, df)); + rankingInfo.setEndCountDate(LocalDate.parse(endTime, df)); rankingInfo.setOrderNumber(orderInfoEntities.size()); - rankingInfo.setSerialNumber(newSerialNumber + 1); rankingInfo.setOrderMoney(orderMoney); rankingInfo.setOrderContinueMoney(orderContinueMoney); rankingInfo.setOrderContinueNumber(orderContinueNumber); - rankingInfo.setOrdersExpiredNumber(ordersExpiredNumber); rankingInfo.setOrderContinueProportion(orderContinueProportion); + rankingInfo.setOrdersExpiredNumber(ordersExpiredNumber); rankingInfo.setCustomNumber(customIds.size()); rankingInfo.setAverageUnitPrice(averageUnitPrice); + rankingInfo.setPreviousMoney(BigDecimal.ZERO); rankingInfo.setSettlementDate(LocalDate.now()); - clerkRankingInfoService.saveOrUpdate(rankingInfo); + return rankingInfo; } diff --git a/play-admin/src/main/java/com/starry/admin/modules/clerk/service/IPlayClerkRankingInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/clerk/service/IPlayClerkRankingInfoService.java index f210496..c193e27 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/clerk/service/IPlayClerkRankingInfoService.java +++ b/play-admin/src/main/java/com/starry/admin/modules/clerk/service/IPlayClerkRankingInfoService.java @@ -45,12 +45,22 @@ public interface IPlayClerkRankingInfoService extends IService selectPlayClerkRankingInfoByPage(PlayClerkRankingInfoEntity playClerkRankingInfo); + /** + * 根据统计批次更新排名数据 + * + * @param weeklyRanking 日排名还是周排名(0:每日排名;1:每周排名) + * @param serialNumber 统计批次 + * @author admin + * @since 2024/6/12 15:47 + **/ + void updateClerkRankingInfo(String weeklyRanking, Integer serialNumber); + /** * 查询当前排行榜最后一个批次值 * * @param weeklyRanking 日排名还是周排名(0:每日排名;1:每周排名) * @return Integer 当前排行榜最后一个批次值 - * @author 杭州世平信息科技有限公司-xuhq + * @author admin * @since 2024/6/7 11:53 **/ Integer selectSerialNumber(String weeklyRanking); @@ -61,7 +71,7 @@ public interface IPlayClerkRankingInfoService extends IService - * @author 杭州世平信息科技有限公司-xuhq + * @author admin * @since 2024/6/7 11:55 **/ List selectMaxSerialNumber(String weeklyRanking); diff --git a/play-admin/src/main/java/com/starry/admin/modules/clerk/service/impl/PlayClerkRankingInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clerk/service/impl/PlayClerkRankingInfoServiceImpl.java index 7e769fb..17c8ee4 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/clerk/service/impl/PlayClerkRankingInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/clerk/service/impl/PlayClerkRankingInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.starry.admin.modules.clerk.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -37,7 +38,7 @@ public class PlayClerkRankingInfoServiceImpl extends ServiceImpl lambdaQueryWrapper = new MPJLambdaWrapper<>(); lambdaQueryWrapper.selectAll(PlayClerkRankingInfoEntity.class); // 拼接店员表 - lambdaQueryWrapper.selectAs(PlayClerkUserInfoEntity::getNickname, "clerkNickname").selectAs(PlayClerkUserInfoEntity::getSex,"clerkSex"); + lambdaQueryWrapper.selectAs(PlayClerkUserInfoEntity::getNickname, "clerkNickname").selectAs(PlayClerkUserInfoEntity::getSex, "clerkSex"); lambdaQueryWrapper.leftJoin(PlayClerkUserInfoEntity.class, PlayClerkUserInfoEntity::getId, PlayClerkRankingInfoEntity::getClerkId); if (StrUtil.isNotBlank(vo.getClerkId())) { lambdaQueryWrapper.eq(PlayClerkRankingInfoEntity::getClerkId, vo.getClerkId()); @@ -110,6 +111,16 @@ public class PlayClerkRankingInfoServiceImpl extends ServiceImpl lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(PlayClerkRankingInfoEntity::getWeeklyRanking, weeklyRanking); + lambdaUpdateWrapper.eq(PlayClerkRankingInfoEntity::getSerialNumber, serialNumber); + lambdaUpdateWrapper.set(PlayClerkRankingInfoEntity::getHistoricalStatistics, "1"); + this.baseMapper.update(null, lambdaUpdateWrapper); + } + /** * 获取当前期排名序号 * diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java index 0989edc..e71520b 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java @@ -8,7 +8,6 @@ import com.starry.admin.modules.weichat.entity.order.*; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -87,74 +86,6 @@ public interface IPlayOrderInfoService extends IService { * @since 2024/6/3 11:12 **/ Integer getEstimatedRevenueRatio(String clerkId, String placeType, String firstOrder); - /** - * 新增打赏单 - * - * @param orderId 订单ID - * @param orderMoney 订单金额 - * @param finalAmount 订单最终金额(支付金额) - * @param purchaserBy 下单人ID - * @param acceptBy 接单人ID - * @param remark 订单备注 - * @param weiChatCode 微信号码 - */ - void createRewardOrder(String orderId, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy, String acceptBy, String remark, String weiChatCode); - - - /** - * 新增赠送礼物订单 - * - * @param orderId 订单ID - * @param commodityId 商品ID(礼物ID) - * @param commodityPrice 商品单价(礼物单价) - * @param commodityNumber 商品数量(礼物数量) - * @param orderMoney 订单金额 - * @param finalAmount 订单最终金额(支付金额) - * @param purchaserBy 下单人ID - * @param acceptBy 接单人ID - * @param remark 订单备注 - * @param weiChatCode 微信号码 - */ - void createGiftOrder(String orderId, String commodityId, BigDecimal commodityPrice, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy, String acceptBy, String remark, String weiChatCode); - - - /** - * 新增指定订单 - * - * @param orderId 订单ID - * @param commodityId 商品ID - * @param commodityPrice 商品单价 - * @param commodityNumber 商品数量 - * @param serviceDuration 服务时长 - * @param commodityName 商品名称 - * @param orderMoney 订单金额 - * @param finalAmount 订单最终金额(支付金额) - * @param purchaserBy 下单人ID - * @param acceptBy 接单人ID - * @param remark 订单备注 - * @param weiChatCode 微信号码 - */ - void createOrdinaryOrder(String orderId, String commodityId, BigDecimal commodityPrice, String commodityNumber, String serviceDuration, String commodityName, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy, String acceptBy, String remark, String weiChatCode); - - - /** - * 新增指定订单 - * - * @param orderId 订单ID - * @param commodityId 商品ID - * @param commodityPrice 商品单价 - * @param commodityNumber 商品数量 - * @param serviceDuration 服务时长 - * @param commodityName 商品名称 - * @param orderMoney 订单金额 - * @param finalAmount 订单最终金额(支付金额) - * @param purchaserBy 下单人ID - * @param remark 订单备注 - * @param weiChatCode 微信号码 - */ - void createRandomOrder(String orderId, String commodityId, BigDecimal commodityPrice, String commodityNumber, String serviceDuration, String commodityName, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy, String remark, String weiChatCode); - - /** * 根据订单结算状态查询订单 * @@ -182,7 +113,7 @@ public interface IPlayOrderInfoService extends IService { * @param endTime 结束时间 * @return List */ - List listByTime(String clerkId, LocalDate startTime, LocalDate endTime); + List listByTime(String clerkId, String startTime, String endTime); /** * 分页查询打赏订单 diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java index f18efe3..172a892 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java @@ -35,7 +35,6 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; @@ -202,119 +201,11 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl listByTime(String clerkId, LocalDate startTime, LocalDate endTime) { + public List listByTime(String clerkId, String startTime, String endTime) { MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper<>(); lambdaQueryWrapper.eq(PlayOrderInfoEntity::getAcceptBy, clerkId); lambdaQueryWrapper.between(PlayOrderInfoEntity::getAcceptTime, startTime, endTime); diff --git a/play-admin/src/main/resources/mapper/system/SysDictDataMapper.xml b/play-admin/src/main/resources/mapper/system/SysDictDataMapper.xml index 87f84bd..4dacee6 100644 --- a/play-admin/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/play-admin/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -35,8 +35,7 @@ updated_by, created_time, created_by, - deleted, - version + deleted from sys_dict_data