From 8bfe96b6f370f1d2e79b739c7db50b95dab9a965 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期五, 27 十二月 2024 11:39:01 +0800 Subject: [PATCH] add:阿里云短信模板获取签名和模板信息4 --- src/main/java/com/mzl/flower/schedule/ScheduleService.java | 246 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 225 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java index eea6f6f..34e0857 100644 --- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java +++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java @@ -1,27 +1,53 @@ package com.mzl.flower.schedule; +import com.aliyuncs.exceptions.ClientException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mzl.flower.constant.Constants; +import com.mzl.flower.constant.LockConstants; +import com.mzl.flower.dto.response.member.MemberGrowthRecordVO; +import com.mzl.flower.dto.response.payment.OrderSettlementDetailDTO; import com.mzl.flower.entity.flower.FlowerCategory; import com.mzl.flower.entity.partner.Partner; import com.mzl.flower.entity.payment.Order; import com.mzl.flower.entity.payment.Transfer; +import com.mzl.flower.entity.wallet.WalletBillRecordDO; +import com.mzl.flower.entity.wallet.WalletDO; import com.mzl.flower.mapper.flower.FlowerCategoryMapper; +import com.mzl.flower.mapper.member.MemberGrowthRecordMapper; import com.mzl.flower.mapper.partner.PartnerMapper; import com.mzl.flower.mapper.payment.OrderMapper; +import com.mzl.flower.mapper.payment.OrderSettlementDetailMapper; +import com.mzl.flower.mapper.wallet.WalletBillRecordMapper; +import com.mzl.flower.mapper.wallet.WalletMapper; +import com.mzl.flower.service.BaseService; +import com.mzl.flower.service.coupon.CouponRecordService; +import com.mzl.flower.service.coupon.CouponTemplateService2; import com.mzl.flower.service.flower.FlowerCategoryService; -import com.mzl.flower.service.flower.FlowerService; +import com.mzl.flower.service.menber.impl.GrowthValueDealService; import com.mzl.flower.service.payment.*; +import com.mzl.flower.service.wallet.WalletBillRecordService; +import com.mzl.flower.service.wallet.WalletService; +import com.mzl.flower.thread.FlowerCategoryPriceThread; +import com.mzl.flower.utils.SmsUtil; +import com.mzl.flower.utils.UUIDGenerator; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.time.DateFormatUtils; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; @Component @Slf4j @@ -32,9 +58,6 @@ @Autowired private PartnerMapper partnerMapper; - - @Autowired - private FlowerService flowerService; @Autowired private OrderMapper orderMapper; @@ -57,23 +80,47 @@ @Autowired private OrderItemSettlementService orderItemSettlementService; - @Scheduled(cron = "1 0/20 * * * ?") + @Autowired + private GrowthValueDealService growthValueDealService; + + @Autowired + private CouponRecordService couponRecordService; + + @Autowired + private MemberGrowthRecordMapper memberGrowthRecordMapper; + + @Autowired + private CouponTemplateService2 couponTemplateService2; + + @Autowired + private FlowerCategoryPriceThread thread; + + @Autowired + private BaseService baseService; + + @Autowired + private WalletBillRecordService walletBillRecordService; + + @Autowired + private OrderSettlementDetailMapper orderSettlementDetailMapper; + + @Autowired + private WalletService walletService; + + @Autowired + private RedissonClient redissonClient; + + @Autowired + private WalletBillRecordMapper walletBillRecordMapper; + + @Autowired + private WalletMapper walletMapper; + + + @Scheduled(cron = "1 1 0/2 * * ?") public void calculateAvePrice() { log.info("均价计算开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); - List<FlowerCategory> cLs = categoryMapper.selectList(new QueryWrapper<FlowerCategory>() - .isNotNull("parent_id")); - if(cLs != null && cLs.size() > 0){ - List<Partner> ls = partnerMapper.selectList(new QueryWrapper<Partner>().eq("status", "P")); - for(FlowerCategory c : cLs){ - flowerService.calculateCategoryDaily(c.getId(), null); - - if(ls != null && ls.size() > 0){ - for(Partner p : ls){ - flowerService.calculateCategoryDaily(c.getId(), p.getId()); - } - } - } - } + thread.run(); log.info("均价计算结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } @@ -97,7 +144,8 @@ log.info("分类加价缓存结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } - @Scheduled(cron = "0 0/5 * * * ?") +// @Scheduled(cron = "0 0/5 * * * ?") + @Scheduled(cron = "0 0/15 * * * ?") public void checkPrepayOrder() {//五分钟未付款自动取消 log.info("未付款确认开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); @@ -107,7 +155,7 @@ if(ls != null && ls.size() > 0){ for(Order o : ls){ try { - LocalDateTime createdTime = o.getCreateTime().plusMinutes(5); + LocalDateTime createdTime = o.getCreateTime().plusMinutes(15); if (createdTime.isBefore(LocalDateTime.now())) { boolean f = paymentV3Service.checkOrderStatus(o.getId()); if(!f){ @@ -170,6 +218,8 @@ try { paymentV3Service.checkTransferStatus(t); settlementService.updateSettlementStatus(t.getId()); + //2024-10-24更新钱包提现信息 + walletBillRecordService.updateTransferStatus(t.getId()); } catch (Exception e) { log.error(e.getMessage(), e); } @@ -185,4 +235,158 @@ billService.generateBill(date.plusDays(-1)); log.info("账单结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } + + //成长值降级定时任务 + @Scheduled(cron = "0 0 5 * * ?") + public void deductGrowthValue() { + log.info("成长值扣除开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + //获取当前员工 + List<Order> orderList = orderMapper.getOrderInfoByReceiveTime(); + if(!CollectionUtils.isEmpty(orderList)){ + orderList.forEach(o->{ + try { + LocalDateTime now = LocalDateTime.now(); + LocalDate nowDate = now.toLocalDate(); + List<MemberGrowthRecordVO> memberGrowthRecordVOS = memberGrowthRecordMapper.selectDowngradingByUserId(o.getCreateBy(), nowDate); + if (CollectionUtils.isEmpty(memberGrowthRecordVOS)) { + growthValueDealService.deductionGrowthValue(o); + } + } catch (Exception e) { + // 记录错误信息,例如将错误信息写入日志 + log.info("处理订单 " + o.getId() + " 时出错: " + e.getMessage()); + } + }); + } + log.info("成长值扣除结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + + + @Scheduled(cron = "0 30 0 1 * ?") + public void grantVipCouponRecordList() { + log.info("会员优惠券开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + couponRecordService.grantVipCouponRecordList(); + log.info("会员优惠券结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + + @Scheduled(cron = "0 30 0 1 * ?") + public void expiredCouponRecordLastMon() { + log.info("会员优惠券开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + couponRecordService.expiredCouponRecordLastMon(); + log.info("会员优惠券结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + + + @Scheduled(cron = "0 0/5 * * * ?") + public void expireActivityCouponTemplateAll() { + log.info("优惠券模版过期下架开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + + // 下架有所的过期的优惠券 + couponTemplateService2.expireActivityCouponTemplateAll(); + + log.info("优惠券模版过期下架开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + + @Scheduled(cron = "0 0/5 * * * ?") + public void expireCouponRecordAll() { + log.info("优惠券记录过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + + // 下架有所的过期的优惠券 + couponRecordService.expireCouponRecordAll(); + + log.info("优惠券记录过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + + @Scheduled(cron = "0 15 17 * * ?") + @Profile("prod") + public void DealSendMessageInfoBySupplier() { + log.info("供应商下单供货提示开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + // 设置开始时间为前一天的17点以后 + LocalDateTime startDateTime = LocalDateTime.of(currentDate.minusDays(1), LocalTime.of(17, 0)); + // 设置结束时间为当前日期的17点 + LocalDateTime endDateTime = LocalDateTime.of(currentDate, LocalTime.of(17, 0)); + System.out.println("开始时间: " + startDateTime); + System.out.println("结束时间: " + endDateTime); + List<String> sends = orderMapper.getWaitSendMessageInfoBySupplier("COLLECTION", startDateTime, endDateTime); + if(CollectionUtils.isNotEmpty(sends)) { + sends.forEach(s -> { + try { + SmsUtil.sendSms(s, "SMS_474905508", null); + } catch (ClientException e) { + log.error("发送短信失败,手机号:" + s, e); + } + }); + } + log.info("供应商下单供货提示结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + + public void dealHistoryAmount() { + log.info("处理历史结算金额开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + List<OrderSettlementDetailDTO> orderSettlementDetailDTOS = orderSettlementDetailMapper.selectSettlementDetailLists(); + orderSettlementDetailDTOS.forEach(o->{ + BigDecimal totalAmount = new BigDecimal(0);//交易合计 + BigDecimal checkFee = new BigDecimal(0);//降级扣款 + BigDecimal lackFee = new BigDecimal(0);//缺货扣款 + BigDecimal replaceFee = new BigDecimal(0);//补货扣款 + BigDecimal stationFee = new BigDecimal(0);//集货站运费 + BigDecimal salesFee = new BigDecimal(0);//售后理赔 + + totalAmount = totalAmount.add(o.getTotalAmount()); + checkFee = checkFee.add(o.getCheckFee()); + lackFee = lackFee.add(o.getLackFee() == null ? new BigDecimal(0): o.getLackFee()); + replaceFee = replaceFee.add(o.getReplaceFee() == null ? new BigDecimal(0): o.getReplaceFee()); + stationFee = stationFee.add(o.getStationFee()); + salesFee = salesFee.add(o.getSalesFee()); + + BigDecimal settlementAmount = totalAmount.subtract(checkFee).subtract(lackFee).subtract(replaceFee) + .subtract(salesFee).subtract(stationFee);//结算金额 + + WalletDO walletDO = walletService.getOrCreateBySupplierId(o.getSupplierId()); + RLock lock = redissonClient.getLock(String.format(LockConstants.WALLET_ID_KEY, walletDO.getId())); + try { + if (lock.tryLock(10, 30, TimeUnit.SECONDS)) { + try { + if(settlementAmount.compareTo(BigDecimal.ZERO) > 0) { + WalletBillRecordDO walletBillRecord = new WalletBillRecordDO(); + walletBillRecord.setId(UUIDGenerator.getUUID()); + WalletDO walletDOInfo = walletService.getBySupplierId(o.getSupplierId()); + //增加供应商结算金额保存到钱包 + walletBillRecord.setSupplierId(o.getSupplierId()); + walletBillRecord.setWalletId(walletDOInfo.getId()); + walletBillRecord.setSettlementId(o.getSettlementId()); + walletBillRecord.setOrderItemId(o.getOrderItemId()); + //变动金额等于供应商收入 + walletBillRecord.setTotalAmount(settlementAmount); + walletBillRecord.setType(Constants.BILL_CHANGE_TYPE.settlement.name()); + walletBillRecord.setMethod(Constants.BILL_CHANGE_METHOD.add.name()); + walletBillRecord.setOriginalAmount(walletDOInfo.getTotalAmount()); + walletBillRecord.setChangeAmount(settlementAmount); + walletBillRecord.setBalance(walletDOInfo.getWithdrawableAmount().add(settlementAmount)); + Order order = orderMapper.selectById(o.getOrderId()); + if (!ObjectUtils.isEmpty(order)) { + walletBillRecord.setRemark("订单完成(订单号" + order.getOrderNo() + ")" + ",获得收入"); + walletBillRecord.setOrderNo(order.getOrderNo()); + } + //更新钱包 + //可提现金额=钱包余额=结算金额 + walletDOInfo.setWithdrawableAmount(walletDOInfo.getWithdrawableAmount().add(settlementAmount)); + walletDOInfo.setTotalAmount(walletDOInfo.getWithdrawableAmount()); + //已结算金额 + walletDOInfo.setSettledAmount(walletDOInfo.getSettledAmount().add(settlementAmount)); + walletMapper.updateById(walletDOInfo); + walletBillRecord.create(); + walletBillRecordMapper.insert(walletBillRecord); + } + } finally { + lock.unlock(); + } + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }); + log.info("处理历史结算金额完成:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + } -- Gitblit v1.9.3