diff --git a/cash-api/market-server/src/main/java/com/czg/task/DistributionTask.java b/cash-api/market-server/src/main/java/com/czg/task/DistributionTask.java index d1ba61e0..3dc1cee7 100644 --- a/cash-api/market-server/src/main/java/com/czg/task/DistributionTask.java +++ b/cash-api/market-server/src/main/java/com/czg/task/DistributionTask.java @@ -1,13 +1,22 @@ package com.czg.task; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ArrayUtil; +import com.czg.account.entity.ShopInfo; import com.czg.account.entity.ShopUser; +import com.czg.account.service.ShopInfoService; import com.czg.account.service.ShopUserService; +import com.czg.constant.TableValueConstant; import com.czg.market.entity.MkDistributionDeliver; +import com.czg.market.entity.MkDistributionFlow; import com.czg.market.service.MkBirthdayGiftService; import com.czg.market.service.MkDistributionDeliverService; +import com.czg.market.service.MkDistributionFlowService; import com.czg.market.service.MkDistributionUserService; import com.czg.order.entity.OrderInfo; import com.czg.order.service.OrderInfoService; +import com.czg.service.market.enums.OrderStatusEnums; import com.czg.utils.FunUtils; import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; @@ -28,9 +37,13 @@ public class DistributionTask { private MkDistributionDeliverService distributionDeliverService; @Resource private MkDistributionUserService distributionUserService; + @Resource + private MkDistributionFlowService distributionFlowService; @DubboReference private OrderInfoService orderInfoService; + @DubboReference + private ShopInfoService shopInfoService; /** * 生日有礼奖励发放 @@ -38,18 +51,24 @@ public class DistributionTask { */ // @Scheduled(cron = "0 0 0 * * ?") public void deliver() { - distributionDeliverService.list(new QueryWrapper().eq(MkDistributionDeliver::getStatus, "pending")).forEach(item -> { + distributionFlowService.list(new QueryWrapper().ge(MkDistributionFlow::getDeliverTime, DateUtil.date()) + .eq(MkDistributionFlow::getStatus, TableValueConstant.DistributionFlow.Status.PENDING.getCode())).forEach(item -> { FunUtils.safeRunVoid(() -> { - log.info("开始处理延时分账, orderNo: {}, 类型: {}", item.getOrderNo(), item.getType()); + log.info("开始处理延时分账, id: {}, orderNo: {}, 类型: {}", item.getId(), item.getOrderNo(), item.getType()); + OrderInfo orderInfo = orderInfoService.getOne(new QueryWrapper().eq(OrderInfo::getOrderNo, item.getOrderNo())); if (orderInfo == null) { log.warn("订单不存在, 订单号: {}", item.getOrderNo()); return; } - - distributionUserService.distribute(orderInfo.getId(), orderInfo.getOrderNo(), orderInfo.getPayAmount(), orderInfo.getUserId(), orderInfo.getShopId(), "order", true); - item.setStatus("success"); - distributionDeliverService.updateById(item); + if (CollUtil.newArrayList(OrderStatusEnums.REFUND.getCode(), OrderStatusEnums.REFUNDING.getCode(), OrderStatusEnums.PART_REFUND.getCode()).contains(orderInfo.getStatus())) { + log.warn("订单已退款, 订单号: {}", item.getOrderNo()); + item.setStatus(TableValueConstant.DistributionFlow.Status.REFUND.getCode()); + }else { + item.setStatus(TableValueConstant.DistributionFlow.Status.SUCCESS.getCode()); + distributionUserService.updateShopInfoAmount(orderInfo.getShopId(), item.getRewardAmount(), orderInfo.getId()); + } + distributionFlowService.updateById(item); }); }); } diff --git a/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java b/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java index fc89ec59..949853a9 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java @@ -57,8 +57,8 @@ public class NotifyController { @GetMapping("testOpen") public JSONObject test1(String code) throws Exception { - JSONObject jsonObject = wxService.transferBalance("or1l86yipGvwyfPhrKIAcQuSfAV8", "叶明飞", new BigDecimal("0.01"), "转账测试", "testTranymf0001"); - return jsonObject; + distributionUserService.distribute(54659L, "WX1983728389726539776", BigDecimal.valueOf(1), 474L, 122L, "order"); + return null; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionFlow.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionFlow.java index 0a44abb7..35b4fcfa 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionFlow.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkDistributionFlow.java @@ -112,4 +112,5 @@ public class MkDistributionFlow implements Serializable { private BigDecimal commission; private BigDecimal parentCommission; + private LocalDateTime deliverTime; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionUserService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionUserService.java index 9962ed6c..e781b4ca 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionUserService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionUserService.java @@ -102,17 +102,19 @@ public interface MkDistributionUserService extends IService /** * 分销员开通 * - * @param userId 用户 + * @param shopUserId 用户 * @param amount 金额 * @param shopId 店铺id */ - void open(Long userId, BigDecimal amount, Long shopId, Long sourceId); + void open(Long shopUserId, BigDecimal amount, Long shopId, Long sourceId); /** * 分销商户运营余额充值回调 */ void rechargeCallBack(Long shopId, BigDecimal amount, Long paymentId); + BigDecimal updateShopInfoAmount(Long shopId, BigDecimal changeAmount, Long sourceId); + /** * 发放分销奖励 * @@ -122,7 +124,7 @@ public interface MkDistributionUserService extends IService * @param userId 用户id * @param shopId 店铺id */ - void distribute(Long sourceId, String orderNo, BigDecimal amount, Long userId, Long shopId, String type, boolean isTask); + void distribute(Long sourceId, String orderNo, BigDecimal amount, Long userId, Long shopId, String type); void updateIncome(BigDecimal pendingIncome, BigDecimal receivedIncome, BigDecimal withdrawIncome, Long id, Long userId, Long shopId, Integer isOne); diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/constant/TableValueConstant.java b/cash-common/cash-common-tools/src/main/java/com/czg/constant/TableValueConstant.java index 1480220d..b96c3b89 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/constant/TableValueConstant.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/constant/TableValueConstant.java @@ -85,6 +85,7 @@ public interface TableValueConstant { enum Status { PENDING("pending", "待入账"), SUCCESS("success", "已入账"), + REFUND("REFUND", "已退款"), FAIL("fail", "失败"); private final String code; private final String msg; diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java index ad6e1a67..2cd6bf82 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java @@ -447,6 +447,7 @@ public class ShopInfoServiceImpl extends ServiceImpl i return list(queryWrapper); } + @CacheEvict(key = "#id") @Override public BigDecimal updateAmount(Long id, BigDecimal amount) { ShopInfo shopInfo = getShopInfo(id); diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionFlowServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionFlowServiceImpl.java index 19a6f0b4..463761de 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionFlowServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionFlowServiceImpl.java @@ -24,6 +24,7 @@ import com.czg.service.market.mapper.MkDistributionFlowMapper; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -47,26 +48,29 @@ public class MkDistributionFlowServiceImpl extends ServiceImpl list = mapper.pageInfo(shopId, startTime, endTime, status, key, id, null); Page page = PageUtil.convert(new PageInfo<>(list)); Map map = BeanUtil.beanToMap(page); - map.put("successAmount", getOne(new QueryWrapper().eq(MkDistributionFlow::getShopId, shopId) - .eq(MkDistributionFlow::getType, TableValueConstant.DistributionFlow.Status.SUCCESS.getCode()) - .select("sum(reward_amount)"))); - map.put("pendingAmount", getOne(new QueryWrapper().eq(MkDistributionFlow::getShopId, shopId) - .eq(MkDistributionFlow::getType, TableValueConstant.DistributionFlow.Status.PENDING.getCode()) - .select("sum(reward_amount)"))); + map.put("successAmount", getOneAs(new QueryWrapper().eq(MkDistributionFlow::getShopId, shopId) + .eq(MkDistributionFlow::getStatus, TableValueConstant.DistributionFlow.Status.SUCCESS.getCode()) + .select("sum(reward_amount)"), BigDecimal.class)); + map.put("pendingAmount", getOneAs(new QueryWrapper().eq(MkDistributionFlow::getShopId, shopId) + .eq(MkDistributionFlow::getStatus, TableValueConstant.DistributionFlow.Status.PENDING.getCode()) + .select("sum(reward_amount)"), BigDecimal.class)); map.put("balanceAmount", shopInfoService.getById(shopId).getAmount()); return map; } @Override public Map distributionFlow(long userId, String startTime, String endTime, Long shopId, String status) { - ShopUser shopUserInfo = shopUserService.getShopUserInfo(shopId, userId); + ShopUser shopUserInfo = null; + if (shopId != null) { + shopUserInfo = shopUserService.getShopUserInfo(shopId, userId); + } PageHelper.startPage(PageUtil.buildPageHelp()); List list = mapper.pageInfo(shopId, StrUtil.isBlank(startTime) ? null : DateUtil.parseLocalDateTime(startTime), - StrUtil.isBlank(endTime) ? null : DateUtil.parseLocalDateTime(endTime), status,null, shopUserInfo.getId(), null); + StrUtil.isBlank(endTime) ? null : DateUtil.parseLocalDateTime(endTime), status,null, shopUserInfo == null ? null : shopUserInfo.getId(), null); Page page = PageUtil.convert(new PageInfo<>(list)); Map map = BeanUtil.beanToMap(page); map.put("totalAmount", mapper.totalAmount(shopId, StrUtil.isBlank(startTime) ? null : DateUtil.parseLocalDateTime(startTime), - StrUtil.isBlank(endTime) ? null : DateUtil.parseLocalDateTime(endTime), status,null, shopUserInfo.getId(), null)); + StrUtil.isBlank(endTime) ? null : DateUtil.parseLocalDateTime(endTime), status,null, shopUserInfo == null ? null : shopUserInfo.getId(), null)); return map; } } diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java index 4a6b7ad0..e3e7bd90 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java @@ -410,7 +410,6 @@ public class MkDistributionUserServiceImpl extends ServiceImpl { AssertUtil.isTrue(amount.compareTo(BigDecimal.ZERO) == 0, "分销金额不能为0"); MkDistributionConfigVO config = mkDistributionConfigService.detail(shopId); AssertUtil.isTrue(config.getIsEnable() != 1, "分销未开启"); - - - if (!isTask) { - if (config.getSettlementDay() != null && config.getSettlementDay() != 0) { - deliver.setShouldDeliverTime(DateUtil.offsetDay(DateUtil.date(), config.getSettlementDay()).toLocalDateTime()); - log.info("延时发放, {}", config.getSettlementDay()); - return; - } else { - deliver.setStatus("success"); - } - } - // 当前用户上级分销员 ShopUser sourceShopUserInfo = shopUserService.getShopUserInfo(shopId, sourceUserId); if (sourceShopUserInfo.getDistributionUserId() == null) { @@ -647,15 +646,16 @@ public class MkDistributionUserServiceImpl extends ServiceImpl and a.shop_id=#{shopId} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DistributionPayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DistributionPayServiceImpl.java index 1e86e7df..9c097e83 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DistributionPayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DistributionPayServiceImpl.java @@ -74,16 +74,15 @@ public class DistributionPayServiceImpl implements DistributionPayService { orderPaymentService.save(orderPayment); InitInfo initInfo = new InitInfo().setConfig(detail); - if (!isRecharge) { + if (isRecharge) { + String openId = wxService.getOpenId(payParam.getCode()); + initInfo.setOpenId(openId); + initInfo.setPayment(orderPayment); + } else { UserInfo userInfo = userInfoService.getById(userId); initInfo.setPayment(orderPayment).setShopUser(shopUserInfo) .setOpenId("aliPay".equals(payParam.getPayType()) ? userInfo.getAlipayOpenId() : userInfo.getWechatOpenId()); } - - if (StrUtil.isNotBlank(payParam.getCode())) { - String openId = wxService.getOpenId(payParam.getCode()); - initInfo.setOpenId(openId); - } return initInfo; } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index df6085d9..9ee1856c 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -1066,7 +1066,7 @@ public class OrderInfoServiceImpl extends ServiceImpl