diff --git a/cash-api/market-server/src/main/java/com/czg/controller/admin/GbWareController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/GbWareController.java similarity index 79% rename from cash-api/market-server/src/main/java/com/czg/controller/admin/GbWareController.java rename to cash-api/order-server/src/main/java/com/czg/controller/admin/GbWareController.java index 660123dc8..b9e5e2dbf 100644 --- a/cash-api/market-server/src/main/java/com/czg/controller/admin/GbWareController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/GbWareController.java @@ -5,6 +5,7 @@ import com.czg.market.dto.GbWareDTO; import com.czg.market.dto.GbWareQueryParamDTO; import com.czg.market.entity.GbWare; import com.czg.market.service.GbWareService; +import com.czg.order.service.GbOrderService; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; @@ -26,6 +27,15 @@ public class GbWareController { @Resource private GbWareService wareService; + @Resource + private GbOrderService gbOrderService; + + @PostMapping("/upShopConfig") + @SaAdminCheckPermission(parentName = "拼团商品", value = "ware:info:up", name = "拼团商品-修改") + public CzgResult upShopConfig(@RequestBody GbWareDTO param) { + AssertUtil.isNull(param.getOnlineStatus(), "操作失败,请选择状态"); + return CzgResult.success(wareService.upShopConfig(param.getOnlineStatus(), StpKit.USER.getShopId())); + } @GetMapping("/getGbWarePage") @SaAdminCheckPermission(parentName = "拼团商品", value = "ware:info:list", name = "拼团商品-列表") @@ -44,7 +54,7 @@ public class GbWareController { public CzgResult editGbWareOnlineStatus(@RequestBody GbWareDTO param) { AssertUtil.isNull(param.getId(), "操作失败,请选择商品"); AssertUtil.isNull(param.getOnlineStatus(), "操作失败,请选择商品状态"); - return CzgResult.success(wareService.editGbWareOnlineStatus(param.getId(), param.getOnlineStatus())); + return CzgResult.success(gbOrderService.editGbWareOnlineStatus(param.getId(), param.getOnlineStatus())); } @PostMapping("/updateGbWareById") diff --git a/cash-api/order-server/src/main/java/com/czg/controller/user/UGbOrderController.java b/cash-api/order-server/src/main/java/com/czg/controller/user/UGbOrderController.java index 8a6916bf8..cc5faaa51 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/user/UGbOrderController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/user/UGbOrderController.java @@ -2,23 +2,17 @@ package com.czg.controller.user; import com.czg.market.dto.GbWareQueryParamDTO; import com.czg.market.entity.GbWare; -import com.czg.market.entity.MkPointsGoodsRecord; import com.czg.market.service.GbWareService; -import com.czg.market.service.MkPointsGoodsRecordService; -import com.czg.market.service.MkPointsGoodsService; import com.czg.order.dto.CommonRefundDTO; import com.czg.order.dto.GbOrderQueryParam; import com.czg.order.dto.GroupJoinDTO; -import com.czg.order.dto.LtPayOtherDTO; import com.czg.order.service.GbOrderService; -import com.czg.order.service.PointsGoodPayService; import com.czg.order.vo.GbOrderDetailVO; import com.czg.order.vo.GbWareVO; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; import com.czg.utils.ServletUtil; import com.mybatisflex.core.paginate.Page; -import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.springframework.validation.annotation.Validated; diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/GbWareService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/GbWareService.java index b6fd919a4..c4b58c356 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/GbWareService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/GbWareService.java @@ -13,15 +13,16 @@ import com.mybatisflex.core.service.IService; * @since 2025-12-15 */ public interface GbWareService extends IService { + + //操作店铺功能开关 + boolean upShopConfig(Integer status, Long shopId); + //拼团 活动 注意分店 主店的 问题 Page getGbWarePage(GbWareQueryParamDTO param, Long shopId); //添加 boolean addGbWare(GbWareDTO param); - //修改 上架状态可修改 - boolean editGbWareOnlineStatus(Long id, Integer onlineStatus); - //修改 下架状态可修改 boolean updateGbWareById(GbWareDTO param); diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/GbOrderService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/GbOrderService.java index 2f864352c..7d4c727f4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/service/GbOrderService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/GbOrderService.java @@ -38,13 +38,24 @@ public interface GbOrderService extends IService { //支付回调 处理成团人数, 如果没团则创团 void payCallBack(Long recordId, Long payOrderId); - //用户申请退款 boolean applyRefund(CommonRefundDTO param, Long userId); //取消退款 boolean cancelRefund(CommonRefundDTO param, Long userId, Long shopId); - //退款 同意退款/任务过期 自动退款 + //退款 同意退款 boolean agreeRefund(CommonRefundDTO param, Long shopId); + + //商品下架 同步操作退款 + boolean editGbWareOnlineStatus(Long id, Integer onlineStatus); + + //任务过期 自动退款 成团期限超时 + boolean expireRefund(Long gbOrderId); + + //商品下架 退款 所属活动变更为下架状态 + boolean wareDownRefund(Long wareId); + + //店铺商品拼团功能关闭 退款 + boolean shopDownRefund(Long shopId); } diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java index ea70bef4f..6c168c9aa 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java @@ -20,6 +20,7 @@ public class AssertUtil { /** * 判断两个对象是否不相等,如果不相等则抛出异常 + * 注意字段类型 * * @param a 实际值 * @param b 期望值 diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/GbWareServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/GbWareServiceImpl.java index bc18ea622..f1abbc781 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/GbWareServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/GbWareServiceImpl.java @@ -3,7 +3,6 @@ package com.czg.service.market.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.czg.account.service.ShopInfoService; -import com.czg.exception.CzgException; import com.czg.market.dto.GbWareDTO; import com.czg.market.dto.GbWareQueryParamDTO; import com.czg.market.entity.GbWare; @@ -11,11 +10,11 @@ import com.czg.market.service.GbWareService; import com.czg.sa.StpKit; import com.czg.service.market.mapper.GbWareMapper; import com.czg.utils.AssertUtil; -import com.czg.utils.CzgStrUtils; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; /** @@ -29,6 +28,14 @@ public class GbWareServiceImpl extends ServiceImpl impleme @DubboReference private ShopInfoService shopInfoService; + + @CacheEvict(cacheNames = "shopInfo", key = "#shopId") + @Override + public boolean upShopConfig(Integer status, Long shopId) { + + return false; + } + @Override public Page getGbWarePage(GbWareQueryParamDTO param, Long shopId) { Long mainShopId = shopInfoService.getMainIdByShopId(shopId); @@ -62,13 +69,6 @@ public class GbWareServiceImpl extends ServiceImpl impleme return save(gbWare); } - @Override - public boolean editGbWareOnlineStatus(Long id, Integer onlineStatus) { - GbWare gbWare = new GbWare(); - gbWare.setOnlineStatus(onlineStatus); - return update(gbWare, query().eq(GbWare::getId, id).eq(GbWare::getShopId, StpKit.USER.getShopId())); - } - @Override public boolean updateGbWareById(GbWareDTO param) { @@ -88,8 +88,6 @@ public class GbWareServiceImpl extends ServiceImpl impleme private void checkStatus(Long id) { GbWare ware = getById(id); - if (ware.getOnlineStatus() == 1) { - throw new CzgException("操作失败,请下架后,重试"); - } + AssertUtil.isNotEqual(ware.getOnlineStatus(), 1, "操作失败,请下架后,重试"); } } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/GbOrderServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/GbOrderServiceImpl.java index 08fafb156..974be4723 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/GbOrderServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/GbOrderServiceImpl.java @@ -10,7 +10,6 @@ import com.czg.enums.OrderNoPrefixEnum; import com.czg.enums.YesNoEnum; import com.czg.exception.CzgException; import com.czg.market.entity.GbWare; -import com.czg.market.entity.MkPointsGoodsRecord; import com.czg.market.service.GbWareService; import com.czg.order.dto.CommonRefundDTO; import com.czg.order.dto.GbOrderQueryParam; @@ -25,6 +24,7 @@ import com.czg.order.vo.GbOrderUserVO; import com.czg.order.vo.GbWareOrderVO; import com.czg.order.vo.GbWareVO; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; import com.czg.service.order.mapper.GbOrderMapper; import com.czg.service.order.service.PayService; import com.czg.utils.AssertUtil; @@ -273,7 +273,7 @@ public class GbOrderServiceImpl extends ServiceImpl impl throw new CzgException("申请失败,该商品不可申请退款"); } if ("待成团".equals(record.getStatus())) { - return refundAmount(record, ""); + return refundAmount(record, param.getReason()); } GbOrderDetail upRecord = new GbOrderDetail(); record.setStatus("退款中"); @@ -338,16 +338,66 @@ public class GbOrderServiceImpl extends ServiceImpl impl return refundAmount(record, param.getReason()); } + @Override + public boolean editGbWareOnlineStatus(Long id, Integer onlineStatus) { + GbWare gbWare = new GbWare(); + gbWare.setOnlineStatus(onlineStatus); + boolean update = wareService.update(gbWare, query().eq(GbWare::getId, id).eq(GbWare::getShopId, StpKit.USER.getShopId())); + if (update && onlineStatus == 0) { + //退钱 + wareDownRefund(id); + } + return update; + } + + @Override + public boolean expireRefund(Long gbOrderId) { + GbOrder order = getOne(query().eq(GbOrder::getId, gbOrderId).eq(GbOrder::getStatus, "ing")); + return refundByGbOrder(order, "成团期限超时"); + } + + @Override + public boolean wareDownRefund(Long wareId) { + List list = list(query().eq(GbOrder::getWareId, wareId).eq(GbOrder::getStatus, "ing")); + for (GbOrder gbOrder : list) { + refundByGbOrder(gbOrder, "所属活动变更为下架状态"); + } + return true; + } + + @Override + public boolean shopDownRefund(Long shopId) { + List list = list(query().eq(GbOrder::getShopId, shopId).eq(GbOrder::getStatus, "ing")); + for (GbOrder gbOrder : list) { + refundByGbOrder(gbOrder, "商品拼团功能关闭"); + } + return true; + } + + public boolean refundByGbOrder(GbOrder gbOrder, String reason) { + if (gbOrder == null) { + return false; + } + List details = detailService.list(query() + .ne(GbOrderDetail::getShopId, gbOrder.getShopId()) + .eq(GbOrderDetail::getGroupOrderNo, gbOrder.getGroupOrderNo()) + .ne(GbOrderDetail::getStatus, "已退款") + .eq(GbOrderDetail::getIsDel, YesNoEnum.NO.value())); + details.forEach(item -> refundAmount(item, reason)); + return true; + } + + private boolean refundAmount(GbOrderDetail record, String reason) { //退钱 String refPayOrderNo = CzgRandomUtils.snowflake(OrderNoPrefixEnum.REP); payService.unifyRefund(record.getShopId(), record.getId(), record.getPayOrderId(), refPayOrderNo, StrUtil.isBlankIfStr(reason) ? "拼团退款" : reason, record.getPayAmount()); - //回退 人数 GbOrder gbOrder = getOne(query().eq(GbOrder::getGroupOrderNo, record.getGroupOrderNo()).eq(GbOrder::getShopId, record.getShopId())); if (gbOrder != null) { GbOrder upOrder = new GbOrder(); + upOrder.setId(gbOrder.getId()); upOrder.setCurrentPeopleNum(gbOrder.getCurrentPeopleNum() - 1); if (upOrder.getCurrentPeopleNum() == 0) { upOrder.setStatus("fail"); @@ -357,6 +407,7 @@ public class GbOrderServiceImpl extends ServiceImpl impl } GbOrderDetail upRecord = new GbOrderDetail(); upRecord.setStatus("已退款"); + upRecord.setCancelReason(reason); return detailService.update(upRecord, query().eq(GbOrderDetail::getId, record.getId())); } }