diff --git a/cash-api/account-server/src/main/java/com/czg/AccountApplication.java b/cash-api/account-server/src/main/java/com/czg/AccountApplication.java index 53848ed1..48cad365 100644 --- a/cash-api/account-server/src/main/java/com/czg/AccountApplication.java +++ b/cash-api/account-server/src/main/java/com/czg/AccountApplication.java @@ -50,8 +50,16 @@ public class AccountApplication implements CommandLineRunner { SaAdminCheckPermission annotation = AnnotationUtils.getAnnotation(method, SaAdminCheckPermission.class); if (annotation == null) return; for (String s : annotation.value()) { - long count = sysMenuService.queryChain().eq(SysMenu::getPermission, s).count(); - if (count > 0) { + SysMenu menu1 = sysMenuService.queryChain().eq(SysMenu::getPermission, s).one(); + if (menu1 !=null) { + long count1 = sysRolesMenusService.queryChain().eq(SysRolesMenus::getMenuId, menu1.getMenuId()).eq(SysRolesMenus::getRoleId, 1L).count(); + if (count1 == 0) { + SysRolesMenus sysRolesMenus = new SysRolesMenus(); + sysRolesMenus.setMenuId(menu1.getMenuId()); + sysRolesMenus.setRoleId(1L); + sysRolesMenusService.save(sysRolesMenus); + log.info("接口菜单添加成功, 菜单名称: {}, 菜单权限: {}", menu1.getName(), menu1.getPermission()); + } continue; } SysMenu sysMenu = new SysMenu(); diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java index d197d5db..f061e98a 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java @@ -40,7 +40,7 @@ public class MenuController { * @return 菜单结构 */ @SaAdminCheckRole("管理员") - @SaAdminCheckPermission("menu:list") +// @SaAdminCheckPermission("menu:list") @GetMapping("/list") public CzgResult> all(String title, String startTime, String endTime) { return CzgResult.success(menuService.getAll(title, startTime, endTime)); @@ -51,7 +51,7 @@ public class MenuController { * @return 菜单结构 */ @SaAdminCheckRole("管理员") - @SaAdminCheckPermission("menu:detail") +// @SaAdminCheckPermission("menu:detail") @GetMapping("/detail") public CzgResult detail(@RequestParam Integer id) { return CzgResult.success(menuService.getById(id)); @@ -62,7 +62,7 @@ public class MenuController { * @return 是否成功 */ @SaAdminCheckRole("管理员") - @SaAdminCheckPermission("menu:add") +// @SaAdminCheckPermission("menu:add") @PostMapping public CzgResult add(@RequestBody @Validated MenuAddDTO menuAddDTO) { return CzgResult.success(menuService.add(menuAddDTO)); @@ -73,7 +73,7 @@ public class MenuController { * @return 是否成功 */ @SaAdminCheckRole("管理员") - @SaAdminCheckPermission("menu:edit") +// @SaAdminCheckPermission("menu:edit") @PutMapping() public CzgResult edit(@RequestBody @Validated MenuEditDTO menuEditDTO) { return CzgResult.success(menuService.edit(menuEditDTO)); @@ -84,7 +84,7 @@ public class MenuController { * @return 是否成功 */ @SaAdminCheckRole("管理员") - @SaAdminCheckPermission("menu:del") +// @SaAdminCheckPermission("menu:del") @DeleteMapping() public CzgResult edit(@RequestBody @Validated MenuDelDTO menuDelDTO) { return CzgResult.success(menuService.removeById(menuDelDTO.getId())); diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopActivateController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopActivateController.java new file mode 100644 index 00000000..19b07495 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopActivateController.java @@ -0,0 +1,54 @@ +package com.czg.controller.admin; + +import com.czg.account.dto.ShopActivateDTO; +import com.czg.account.service.ShopActivateService; +import com.czg.annotation.SaAdminCheckPermission; +import com.czg.resp.CzgResult; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 店铺充值活动管理 + * @author ww + * @description + */ + +@RestController +@RequestMapping("/admin/activate") +public class ShopActivateController { + @Resource + private ShopActivateService shopActivateService; + + /** + * 店铺充值活动列表 + * 权限标识: activate:list + */ + @SaAdminCheckPermission("activate:list") + @GetMapping + public CzgResult> detail() { + return CzgResult.success(shopActivateService.getList()); + } + + /** + * 店铺充值活动新增 + * 权限标识: activate:add + */ + @SaAdminCheckPermission("activate:add") + @PostMapping + public CzgResult add(@RequestBody @Validated ShopActivateDTO activateDTO) { + return CzgResult.success(shopActivateService.add(activateDTO)); + } + + /** + * 店铺充值活动修改 + * 权限标识: activate:edit + */ + @SaAdminCheckPermission("activate:edit") + @PutMapping + public CzgResult edit(@RequestBody @Validated ShopActivateDTO activateDTO) { + return CzgResult.success(shopActivateService.edit(activateDTO)); + } +} diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java new file mode 100644 index 00000000..ec4967f2 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java @@ -0,0 +1,20 @@ +package com.czg.controller.admin; + +import com.czg.account.service.ShopCouponService; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ww + * @description + */ + +@RestController +@RequestMapping("/admin/coupon") +public class ShopCouponController { + @Resource + private ShopCouponService couponService; + + +} diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java index c981cdf0..bb6e8e85 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java @@ -38,6 +38,6 @@ public class UserAuthorizationController { @PostMapping("/test") public CzgResult login() { StpKit.USER.login(1L, null, false, false); - return CzgResult.success(StpKit.USER.getTokenValue() +"哈哈哈"); + return CzgResult.success(StpKit.USER.getTokenValue()); } } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java index 9b1d632b..6fcfc81d 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java @@ -2,6 +2,7 @@ package com.czg.controller.user; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; +import com.czg.account.dto.user.userinfo.UserInfoDTO; import com.czg.account.dto.user.userinfo.UserInfoEditDTO; import com.czg.account.entity.UserInfo; import com.czg.account.service.UserInfoService; @@ -26,8 +27,8 @@ public class UserController { * @return 用户信息 */ @GetMapping - public CzgResult get() { - return CzgResult.success(userInfoService.getById(StpKit.USER.getLoginIdAsLong())); + public CzgResult get() { + return CzgResult.success(userInfoService.getInfo(StpKit.USER.getLoginIdAsLong())); } /** diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopActivateController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopActivateController.java new file mode 100644 index 00000000..513ebf3e --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopActivateController.java @@ -0,0 +1,31 @@ +package com.czg.controller.user; + +import com.czg.account.dto.ShopActivateDTO; +import com.czg.account.service.ShopActivateService; +import com.czg.resp.CzgResult; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 店铺充值活动管理 + * @author ww + */ +@RestController +@RequestMapping("/user/activate") +public class UserShopActivateController { + @Resource + private ShopActivateService shopActivateService; + + /** + * 店铺充值活动列表 + */ + @GetMapping + public CzgResult> detail() { + return CzgResult.success(shopActivateService.getList()); + } + +} diff --git a/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java b/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java index 3cd70bd9..6ce12f85 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java @@ -1,9 +1,12 @@ package com.czg.controller.user; import com.czg.order.dto.OrderInfoQueryDTO; +import com.czg.order.entity.OrderInfo; import com.czg.order.service.OrderInfoService; import com.czg.order.vo.OrderInfoVo; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; +import com.czg.utils.AssertUtil; import com.mybatisflex.core.paginate.Page; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; @@ -11,6 +14,7 @@ import org.springframework.web.bind.annotation.*; /** * 订单管理 + * * @author ww * @description */ @@ -25,7 +29,27 @@ public class UserOrderController { * 订单列表 */ @PostMapping - public CzgResult> get(@RequestBody OrderInfoQueryDTO queryDTO) { + public CzgResult> getOrderPage(@RequestBody OrderInfoQueryDTO queryDTO) { + queryDTO.setIsDel(1); + queryDTO.setUserId(StpKit.USER.getLoginIdAsLong()); return CzgResult.success(orderInfoService.getOrderByPage(queryDTO)); } + + @PostMapping("/createOrder") + public CzgResult createOrder(@RequestBody OrderInfoQueryDTO queryDTO) { + queryDTO.setIsDel(1); + queryDTO.setUserId(StpKit.USER.getLoginIdAsLong()); + return CzgResult.success(); + } + + @PutMapping("/{id}") + public CzgResult upOrderIsDel(@PathVariable("id") Long id) { + //效验数据 + AssertUtil.isNull(id, "{}不能为空", "订单Id"); + orderInfoService.updateChain() + .set(OrderInfo::getIsDel, 1) + .eq(OrderInfoVo::getId, id) + .update(); + return CzgResult.success(); + } } diff --git a/cash-api/order-server/src/main/java/com/czg/mq/RabbitmqReceiver.java b/cash-api/order-server/src/main/java/com/czg/mq/RabbitmqReceiver.java index f2d2f3be..854f30ca 100644 --- a/cash-api/order-server/src/main/java/com/czg/mq/RabbitmqReceiver.java +++ b/cash-api/order-server/src/main/java/com/czg/mq/RabbitmqReceiver.java @@ -18,6 +18,7 @@ public class RabbitmqReceiver { /** * 消费者监听,绑定队列 + * Queue RabbitConfig类的 orderPrintQueue */ @RabbitListener( bindings = @QueueBinding(value = @Queue(value = "#{orderPrintQueue.name}", durable = "true", @@ -26,11 +27,9 @@ public class RabbitmqReceiver { concurrency = "10" ) @RabbitHandler - public void receiveOrderPrintQueue(Channel channel, String payload, Message message) throws IOException { + public void receiveOrderPrintQueue(Channel channel, String orderId, Message message) throws IOException { try { - System.out.println("Topic模式(orderPrintQueue)消费者收到消息: " + message); - System.out.println(payload); - + log.info("订单监听 消息体:{},消息内容:{}", message, orderId); // 手动确认消息,multiple 参数表示是否批量确认 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); } catch (Exception e) { diff --git a/cash-common/cash-common-mq/src/main/java/com/czg/config/RabbitPublisher.java b/cash-common/cash-common-mq/src/main/java/com/czg/config/RabbitPublisher.java index f65e418a..f435b2da 100644 --- a/cash-common/cash-common-mq/src/main/java/com/czg/config/RabbitPublisher.java +++ b/cash-common/cash-common-mq/src/main/java/com/czg/config/RabbitPublisher.java @@ -17,12 +17,20 @@ public class RabbitPublisher { @Resource private RabbitTemplate rabbitTemplate; - public void sendOrderStockMsg(String msg) { - sendMsg(RabbitConstants.Exchange.CASH_EXCHANGE, RabbitConstants.Queue.ORDER_STOCK_QUEUE, msg); + /** + * 库存损耗消息 + * @param orderId 订单id + */ + public void sendOrderStockMsg(String orderId) { + sendMsg(RabbitConstants.Exchange.CASH_EXCHANGE, RabbitConstants.Queue.ORDER_STOCK_QUEUE, orderId); } - public void sendOrderPrintMsg(String msg) { - sendMsg(RabbitConstants.Exchange.CASH_EXCHANGE, RabbitConstants.Queue.ORDER_PRINT_QUEUE, msg); + /** + * 订单打印消息 + * @param orderId + */ + public void sendOrderPrintMsg(String orderId) { + sendMsg(RabbitConstants.Exchange.CASH_EXCHANGE, RabbitConstants.Queue.ORDER_PRINT_QUEUE, orderId); } private void sendMsg(String exchange, String queue, String msg) { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckLogin.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckLogin.java index 0f642ec2..8d568910 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckLogin.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckLogin.java @@ -11,8 +11,8 @@ import java.lang.annotation.Target; * 校验后台是否登录 * @author Administrator */ -//@SaCheckLogin(type = "admin") -@SaCheckLogin(type = "user") +@SaCheckLogin(type = "admin") +//@SaCheckLogin(type = "user") @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE}) public @interface SaAdminCheckLogin { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckPermission.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckPermission.java index f9e6f0fa..a90005cf 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckPermission.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckPermission.java @@ -15,8 +15,8 @@ import java.lang.annotation.Target; * @author click33 * */ -//@SaCheckPermission(type = "admin") -@SaCheckPermission(type = "user") +@SaCheckPermission(type = "admin") +//@SaCheckPermission(type = "user") @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE}) public @interface SaAdminCheckPermission { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckRole.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckRole.java index c4324a81..7796e940 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckRole.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaAdminCheckRole.java @@ -15,8 +15,8 @@ import java.lang.annotation.Target; * @author click33 * */ -@SaCheckRole(type = "user") -//@SaCheckRole(type = "admin") +//@SaCheckRole(type = "user") +@SaCheckRole(type = "admin") @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE}) public @interface SaAdminCheckRole { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckLogin.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckLogin.java index 9346bb69..b5e8551f 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckLogin.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckLogin.java @@ -11,7 +11,7 @@ import java.lang.annotation.Target; * 校验用户端是否登录 * @author Administrator */ -@SaCheckLogin(type = "user") +@SaCheckLogin(type = "client") @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE}) public @interface SaUserCheckLogin { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckPermission.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckPermission.java index 27692eeb..014e5042 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckPermission.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckPermission.java @@ -16,7 +16,7 @@ import java.lang.annotation.Target; * @author click33 * */ -@SaCheckPermission(type = "user") +@SaCheckPermission(type = "client") @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE}) public @interface SaUserCheckPermission { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckRole.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckRole.java index f88253be..3a100fe0 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckRole.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/annotation/SaUserCheckRole.java @@ -15,7 +15,7 @@ import java.lang.annotation.Target; * @author click33 * */ -@SaCheckRole(type = "user") +@SaCheckRole(type = "client") @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE}) public @interface SaUserCheckRole { diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java index 984751a3..f56837de 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java @@ -7,6 +7,10 @@ import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.strategy.SaAnnotationStrategy; +import cn.dev33.satoken.strategy.SaStrategy; +import cn.dev33.satoken.util.SaFoxUtil; +import cn.hutool.core.util.IdUtil; +import com.czg.sa.MyStpLogic; import com.czg.sa.StpKit; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; @@ -25,11 +29,13 @@ public class SaTokenConfigure implements WebMvcConfigurer { @PostConstruct public void setSaTokenConfig() { // admin配置 -// SaTokenConfig adminConfig = new SaTokenConfig(); -// adminConfig.setTokenName("token"); -// config1.setTimeout(1000); -// adminConfig.setTokenStyle("simple-uuid"); -// StpKit.ADMIN.setConfig(adminConfig); + SaTokenConfig adminConfig = new SaTokenConfig(); + adminConfig.setTokenName("token"); + adminConfig.setTimeout(1000); + adminConfig.setTokenStyle("simple-uuid"); + adminConfig.setIsConcurrent(true); + adminConfig.setIsShare(false); + MyStpLogic.ADMIN_LOGIC.setConfig(adminConfig); // 小程序配置 SaTokenConfig userConfig = new SaTokenConfig(); @@ -38,7 +44,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { userConfig.setIsShare(false); // config2.setTimeout(2000); userConfig.setTokenStyle("simple-uuid"); - StpKit.USER.setConfig(userConfig); + MyStpLogic.CLIENT_LOGIC.setConfig(userConfig); } @PostConstruct @@ -47,6 +53,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { SaAnnotationStrategy.instance.getAnnotation = AnnotatedElementUtils::getMergedAnnotation; } + // 注册 Sa-Token 的拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { @@ -57,13 +64,13 @@ public class SaTokenConfigure implements WebMvcConfigurer { ApplicationInfo.routePrefix = ""; SaRouter.match("/user/**").notMatch("/user/login", "/user/test", "/user/geo/**", "/user/home/**") - .check(r -> StpKit.USER.checkMiniUser()) + .check(r -> MyStpLogic.CLIENT_LOGIC.checkLogin()) .setHit(true) // .match("/**") .notMatch("/user/**") .notMatch("/admin/auth/**") .notMatch("/notify/**") - .check(r -> StpKit.USER.checkManager()); + .check(r -> MyStpLogic.ADMIN_LOGIC.checkLogin()); })).addPathPatterns("/**"); diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java index 03013aa1..eda90e03 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java @@ -1,44 +1,52 @@ package com.czg.sa; +import cn.dev33.satoken.config.SaTokenConfig; import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.exception.NotPermissionException; +import cn.dev33.satoken.fun.SaFunction; +import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.session.SaSession; +import cn.dev33.satoken.session.TokenSign; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.StpLogic; -import cn.dev33.satoken.stp.StpUtil; import com.czg.exception.ApiNotPrintException; import lombok.Getter; import java.util.List; +import java.util.Map; +import java.util.function.Consumer; /** * @author Administrator */ @Getter -public class MyStpLogic extends StpLogic { +public class MyStpLogic { + public static final StpLogic CLIENT_LOGIC = new StpLogic("client"); + public static final StpLogic ADMIN_LOGIC = new StpLogic("admin"); - - /** - * 初始化 StpLogic, 并指定账号类型 - * - * @param loginType 账号类型标识 - */ - public MyStpLogic(String loginType) { - super(loginType); + private StpLogic getLogic() { + boolean hit = SaRouter.match("/admin/**").isHit(); + if (hit) { + return ADMIN_LOGIC; + } + return CLIENT_LOGIC; } /** - * - * @param id 登录账号id - * @param shopId 店铺id + * @param id 登录账号id + * @param shopId 店铺id * @param isManager true 管理端 false 用户端 - * @param isAdmin 是否为管理员账号 + * @param isAdmin 是否为管理员账号 */ public void login(Long id, Long shopId, boolean isManager, boolean isAdmin) { - login(id); + StpLogic logic = getLogic(); + logic.login(id); if (isManager && shopId == null) { throw new ApiNotPrintException("管理端登录必须传递店铺id"); } - SaSession session = getSession().set("userId", id).set("isAdmin", isAdmin).set("isManager", isManager); + SaSession session = logic.getSession().set("userId", id).set("isAdmin", isAdmin).set("isManager", isManager); if (shopId != null) { session.set("shopId", shopId); } @@ -46,19 +54,21 @@ public class MyStpLogic extends StpLogic { /** * 获取店铺id + * * @param defaultValue 默认值,传递多个只取第一个 * @return 返回店铺id,不存在抛出异常,如果传递了默认值不存在返回默认值 */ public Long getShopId(Long... defaultValue) { + StpLogic logic = getLogic(); Long defaultVal = defaultValue.length > 0 ? defaultValue[0] : null; - Object object = StpKit.USER.getSession().get("isManager"); + Object object = logic.getSession().get("isManager"); Long shopId; int errType; if (object instanceof Boolean t && t) { - Object info = StpKit.USER.getSession().get("shopId"); + Object info = logic.getSession().get("shopId"); shopId = info instanceof Long l ? l : null; errType = 0; - }else { + } else { String header = SaHolder.getRequest().getHeader("shopId"); shopId = header == null ? null : Long.parseLong(header); errType = 1; @@ -74,8 +84,9 @@ public class MyStpLogic extends StpLogic { * 校验是否为管理端登录 */ public void checkManager() { - StpKit.USER.checkLogin(); - Object object = StpKit.USER.getSession().get("isManager"); + StpLogic logic = getLogic(); + logic.checkLogin(); + Object object = logic.getSession().get("isManager"); if (object instanceof Boolean t && !t) { throw new NotPermissionException("权限不足"); } @@ -85,8 +96,9 @@ public class MyStpLogic extends StpLogic { * 校验是否为小程序登录 */ public void checkMiniUser() { - StpKit.USER.checkLogin(); - Object object = StpKit.USER.getSession().get("isManager"); + StpLogic logic = getLogic(); + logic.checkLogin(); + Object object = logic.getSession().get("isManager"); if (object instanceof Boolean t && t) { throw new NotPermissionException("权限不足"); } @@ -94,30 +106,851 @@ public class MyStpLogic extends StpLogic { /** * 是否为管理员 + * * @return 布尔值 */ public boolean isAdmin() { - Object object = StpKit.USER.getSession().get("isAdmin"); + StpLogic logic = getLogic(); + Object object = logic.getSession().get("isAdmin"); return object instanceof Boolean t && t; } /** * 添加当前账号的角色 + * * @param roleList 角色列表 * @return 当前实例 */ public MyStpLogic addRoleList(List roleList) { - getSession().set("sa:roleList:" + getLoginType() + ":" + getLoginId(), roleList); + StpLogic logic = getLogic(); + logic.getSession().set("sa:roleList:" + logic.getLoginType() + ":" + logic.getLoginId(), roleList); return this; } /** * 添加当前账号的权限 + * * @param permissionList 角色列表 * @return 当前实例 */ public MyStpLogic addPermissionList(List permissionList) { - getSession().set("sa:permissionList:" + getLoginType() + ":" + getLoginId(), permissionList); + StpLogic logic = getLogic(); + logic.getSession().set("sa:permissionList:" + logic.getLoginType() + ":" + logic.getLoginId(), permissionList); return this; } + + + public String getLoginType() { + return getLogic().getLoginType(); + } + + + public StpLogic setLoginType(String loginType) { + return getLogic().setLoginType(loginType); + } + + + public StpLogic setConfig(SaTokenConfig config) { + return getLogic().setConfig(config); + } + + + public SaTokenConfig getConfig() { + return getLogic().getConfig(); + } + + + public SaTokenConfig getConfigOrGlobal() { + return getLogic().getConfigOrGlobal(); + } + + + public String getTokenName() { + return getLogic().getTokenName(); + } + + + public String createTokenValue(Object loginId, String device, long timeout, Map extraData) { + return getLogic().createTokenValue(loginId, device, timeout, extraData); + } + + + public void setTokenValue(String tokenValue) { + getLogic().setTokenValue(tokenValue); + } + + + public void setTokenValue(String tokenValue, int cookieTimeout) { + getLogic().setTokenValue(tokenValue, cookieTimeout); + } + + + public void setTokenValue(String tokenValue, SaLoginModel loginModel) { + getLogic().setTokenValue(tokenValue, loginModel); + } + + + public void setTokenValueToStorage(String tokenValue) { + getLogic().setTokenValueToStorage(tokenValue); + } + + + public void setTokenValueToCookie(String tokenValue, int cookieTimeout) { + getLogic().setTokenValueToCookie(tokenValue, cookieTimeout); + } + + + public void setTokenValueToResponseHeader(String tokenValue) { + getLogic().setTokenValueToResponseHeader(tokenValue); + } + + + public String getTokenValue() { + return getLogic().getTokenValue(); + } + + + public String getTokenValue(boolean noPrefixThrowException) { + return getLogic().getTokenValue(noPrefixThrowException); + } + + + public String getTokenValueNotCut() { + return getLogic().getTokenValueNotCut(); + } + + + public String getTokenValueNotNull() { + return getLogic().getTokenValueNotNull(); + } + + + public SaTokenInfo getTokenInfo() { + return getLogic().getTokenInfo(); + } + + + public void login(Object id) { + getLogic().login(id); + } + + + public void login(Object id, String device) { + getLogic().login(id, device); + } + + + public void login(Object id, boolean isLastingCookie) { + getLogic().login(id, isLastingCookie); + } + + + public void login(Object id, long timeout) { + getLogic().login(id, timeout); + } + + + public void login(Object id, SaLoginModel loginModel) { + getLogic().login(id, loginModel); + } + + + public String createLoginSession(Object id) { + return getLogic().createLoginSession(id); + } + + + public String createLoginSession(Object id, SaLoginModel loginModel) { + return getLogic().createLoginSession(id, loginModel); + } + + + public String getOrCreateLoginSession(Object id) { + return getLogic().getOrCreateLoginSession(id); + } + + + public void logout() { + getLogic().logout(); + } + + + public void logout(Object loginId) { + getLogic().logout(loginId); + } + + + public void logout(Object loginId, String device) { + getLogic().logout(loginId, device); + } + + + public void logoutByMaxLoginCount(Object loginId, SaSession session, String device, int maxLoginCount) { + getLogic().logoutByMaxLoginCount(loginId, session, device, maxLoginCount); + } + + + public void logoutByTokenValue(String tokenValue) { + getLogic().logoutByTokenValue(tokenValue); + } + + + public void kickout(Object loginId) { + getLogic().kickout(loginId); + } + + + public void kickout(Object loginId, String device) { + getLogic().kickout(loginId, device); + } + + + public void kickoutByTokenValue(String tokenValue) { + getLogic().kickoutByTokenValue(tokenValue); + } + + + public void replaced(Object loginId, String device) { + getLogic().replaced(loginId, device); + } + + + public boolean isLogin() { + return getLogic().isLogin(); + } + + + public boolean isLogin(Object loginId) { + return getLogic().isLogin(loginId); + } + + + public void checkLogin() { + getLogic().checkLogin(); + } + + + public Object getLoginId() { + return getLogic().getLoginId(); + } + + + public T getLoginId(T defaultValue) { + return getLogic().getLoginId(defaultValue); + } + + + public Object getLoginIdDefaultNull() { + return getLogic().getLoginIdDefaultNull(); + } + + + public String getLoginIdAsString() { + return getLogic().getLoginIdAsString(); + } + + + public int getLoginIdAsInt() { + return getLogic().getLoginIdAsInt(); + } + + + public long getLoginIdAsLong() { + return getLogic().getLoginIdAsLong(); + } + + + public Object getLoginIdByToken(String tokenValue) { + return getLogic().getLoginIdByToken(tokenValue); + } + + + public String getLoginIdNotHandle(String tokenValue) { + return getLogic().getLoginIdNotHandle(tokenValue); + } + + + public Object getExtra(String key) { + return getLogic().getExtra(key); + } + + + public Object getExtra(String tokenValue, String key) { + return getLogic().getExtra(tokenValue, key); + } + + + public boolean isValidLoginId(Object loginId) { + return getLogic().isValidLoginId(loginId); + } + + + public void saveTokenToIdMapping(String tokenValue, Object loginId, long timeout) { + getLogic().saveTokenToIdMapping(tokenValue, loginId, timeout); + } + + + public void updateTokenToIdMapping(String tokenValue, Object loginId) { + getLogic().updateTokenToIdMapping(tokenValue, loginId); + } + + + public void deleteTokenToIdMapping(String tokenValue) { + getLogic().deleteTokenToIdMapping(tokenValue); + } + + + public SaSession getSessionBySessionId(String sessionId, boolean isCreate, Long timeout, Consumer appendOperation) { + return getLogic().getSessionBySessionId(sessionId, isCreate, timeout, appendOperation); + } + + + public SaSession getSessionBySessionId(String sessionId) { + return getLogic().getSessionBySessionId(sessionId); + } + + + public SaSession getSessionByLoginId(Object loginId, boolean isCreate, Long timeout) { + return getLogic().getSessionByLoginId(loginId, isCreate, timeout); + } + + + public SaSession getSessionByLoginId(Object loginId, boolean isCreate) { + return getLogic().getSessionByLoginId(loginId, isCreate); + } + + + public SaSession getSessionByLoginId(Object loginId) { + return getLogic().getSessionByLoginId(loginId); + } + + + public SaSession getSession(boolean isCreate) { + return getLogic().getSession(isCreate); + } + + + public SaSession getSession() { + return getLogic().getSession(); + } + + + public SaSession getTokenSessionByToken(String tokenValue, boolean isCreate) { + return getLogic().getTokenSessionByToken(tokenValue, isCreate); + } + + + public SaSession getTokenSessionByToken(String tokenValue) { + return getLogic().getTokenSessionByToken(tokenValue); + } + + + public SaSession getTokenSession(boolean isCreate) { + return getLogic().getTokenSession(isCreate); + } + + + public SaSession getTokenSession() { + return getLogic().getTokenSession(); + } + + + public SaSession getAnonTokenSession(boolean isCreate) { + return getLogic().getAnonTokenSession(isCreate); + } + + + public SaSession getAnonTokenSession() { + return getLogic().getAnonTokenSession(); + } + + + public void deleteTokenSession(String tokenValue) { + getLogic().deleteTokenSession(tokenValue); + } + + + public void updateLastActiveToNow(String tokenValue) { + getLogic().updateLastActiveToNow(tokenValue); + } + + + public void updateLastActiveToNow() { + getLogic().updateLastActiveToNow(); + } + + + public void checkActiveTimeout(String tokenValue) { + getLogic().checkActiveTimeout(tokenValue); + } + + + public void checkActiveTimeout() { + getLogic().checkActiveTimeout(); + } + + + public Long getTokenUseActiveTimeout(String tokenValue) { + return getLogic().getTokenUseActiveTimeout(tokenValue); + } + + + public long getTokenUseActiveTimeoutOrGlobalConfig(String tokenValue) { + return getLogic().getTokenUseActiveTimeoutOrGlobalConfig(tokenValue); + } + + + public long getTokenLastActiveTime(String tokenValue) { + return getLogic().getTokenLastActiveTime(tokenValue); + } + + + public long getTokenLastActiveTime() { + return getLogic().getTokenLastActiveTime(); + } + + + public long getTokenTimeout() { + return getLogic().getTokenTimeout(); + } + + + public long getTokenTimeout(String token) { + return getLogic().getTokenTimeout(token); + } + + + public long getTokenTimeoutByLoginId(Object loginId) { + return getLogic().getTokenTimeoutByLoginId(loginId); + } + + + public long getSessionTimeout() { + return getLogic().getSessionTimeout(); + } + + + public long getSessionTimeoutByLoginId(Object loginId) { + return getLogic().getSessionTimeoutByLoginId(loginId); + } + + + public long getTokenSessionTimeout() { + return getLogic().getTokenSessionTimeout(); + } + + + public long getTokenSessionTimeoutByTokenValue(String tokenValue) { + return getLogic().getTokenSessionTimeoutByTokenValue(tokenValue); + } + + + public long getTokenActiveTimeout() { + return getLogic().getTokenActiveTimeout(); + } + + + public long getTokenActiveTimeoutByToken(String tokenValue) { + return getLogic().getTokenActiveTimeoutByToken(tokenValue); + } + + + public void renewTimeout(long timeout) { + getLogic().renewTimeout(timeout); + } + + + public void renewTimeout(String tokenValue, long timeout) { + getLogic().renewTimeout(tokenValue, timeout); + } + + + public List getRoleList() { + return getLogic().getRoleList(); + } + + + public List getRoleList(Object loginId) { + return getLogic().getRoleList(loginId); + } + + + public boolean hasRole(String role) { + return getLogic().hasRole(role); + } + + + public boolean hasRole(Object loginId, String role) { + return getLogic().hasRole(loginId, role); + } + + + public boolean hasRoleAnd(String... roleArray) { + return getLogic().hasRoleAnd(roleArray); + } + + + public boolean hasRoleOr(String... roleArray) { + return getLogic().hasRoleOr(roleArray); + } + + + public void checkRole(String role) { + getLogic().checkRole(role); + } + + + public void checkRoleAnd(String... roleArray) { + getLogic().checkRoleAnd(roleArray); + } + + + public void checkRoleOr(String... roleArray) { + getLogic().checkRoleOr(roleArray); + } + + + public List getPermissionList() { + return getLogic().getPermissionList(); + } + + + public List getPermissionList(Object loginId) { + return getLogic().getPermissionList(loginId); + } + + + public boolean hasPermission(String permission) { + return getLogic().hasPermission(permission); + } + + + public boolean hasPermission(Object loginId, String permission) { + return getLogic().hasPermission(loginId, permission); + } + + + public boolean hasPermissionAnd(String... permissionArray) { + return getLogic().hasPermissionAnd(permissionArray); + } + + + public boolean hasPermissionOr(String... permissionArray) { + return getLogic().hasPermissionOr(permissionArray); + } + + + public void checkPermission(String permission) { + getLogic().checkPermission(permission); + } + + + public void checkPermissionAnd(String... permissionArray) { + getLogic().checkPermissionAnd(permissionArray); + } + + + public void checkPermissionOr(String... permissionArray) { + getLogic().checkPermissionOr(permissionArray); + } + + + public String getTokenValueByLoginId(Object loginId) { + return getLogic().getTokenValueByLoginId(loginId); + } + + + public String getTokenValueByLoginId(Object loginId, String device) { + return getLogic().getTokenValueByLoginId(loginId, device); + } + + + public List getTokenValueListByLoginId(Object loginId) { + return getLogic().getTokenValueListByLoginId(loginId); + } + + + public List getTokenValueListByLoginId(Object loginId, String device) { + return getLogic().getTokenValueListByLoginId(loginId, device); + } + + + public List getTokenSignListByLoginId(Object loginId, String device) { + return getLogic().getTokenSignListByLoginId(loginId, device); + } + + + public String getLoginDevice() { + return getLogic().getLoginDevice(); + } + + + public String getLoginDeviceByToken(String tokenValue) { + return getLogic().getLoginDeviceByToken(tokenValue); + } + + + public List searchTokenValue(String keyword, int start, int size, boolean sortType) { + return getLogic().searchTokenValue(keyword, start, size, sortType); + } + + + public List searchSessionId(String keyword, int start, int size, boolean sortType) { + return getLogic().searchSessionId(keyword, start, size, sortType); + } + + + public List searchTokenSessionId(String keyword, int start, int size, boolean sortType) { + return getLogic().searchTokenSessionId(keyword, start, size, sortType); + } + + + public void disable(Object loginId, long time) { + getLogic().disable(loginId, time); + } + + + public boolean isDisable(Object loginId) { + return getLogic().isDisable(loginId); + } + + + public void checkDisable(Object loginId) { + getLogic().checkDisable(loginId); + } + + + public long getDisableTime(Object loginId) { + return getLogic().getDisableTime(loginId); + } + + + public void untieDisable(Object loginId) { + getLogic().untieDisable(loginId); + } + + + public void disable(Object loginId, String service, long time) { + getLogic().disable(loginId, service, time); + } + + + public boolean isDisable(Object loginId, String service) { + return getLogic().isDisable(loginId, service); + } + + + public void checkDisable(Object loginId, String... services) { + getLogic().checkDisable(loginId, services); + } + + + public long getDisableTime(Object loginId, String service) { + return getLogic().getDisableTime(loginId, service); + } + + + public void untieDisable(Object loginId, String... services) { + getLogic().untieDisable(loginId, services); + } + + + public void disableLevel(Object loginId, int level, long time) { + getLogic().disableLevel(loginId, level, time); + } + + + public void disableLevel(Object loginId, String service, int level, long time) { + getLogic().disableLevel(loginId, service, level, time); + } + + + public boolean isDisableLevel(Object loginId, int level) { + return getLogic().isDisableLevel(loginId, level); + } + + + public boolean isDisableLevel(Object loginId, String service, int level) { + return getLogic().isDisableLevel(loginId, service, level); + } + + + public void checkDisableLevel(Object loginId, int level) { + getLogic().checkDisableLevel(loginId, level); + } + + + public void checkDisableLevel(Object loginId, String service, int level) { + getLogic().checkDisableLevel(loginId, service, level); + } + + + public int getDisableLevel(Object loginId) { + return getLogic().getDisableLevel(loginId); + } + + + public int getDisableLevel(Object loginId, String service) { + return getLogic().getDisableLevel(loginId, service); + } + + + public void switchTo(Object loginId) { + getLogic().switchTo(loginId); + } + + + public void endSwitch() { + getLogic().endSwitch(); + } + + + public boolean isSwitch() { + return getLogic().isSwitch(); + } + + + public Object getSwitchLoginId() { + return getLogic().getSwitchLoginId(); + } + + + public void switchTo(Object loginId, SaFunction function) { + getLogic().switchTo(loginId, function); + } + + + public void openSafe(long safeTime) { + getLogic().openSafe(safeTime); + } + + + public void openSafe(String service, long safeTime) { + getLogic().openSafe(service, safeTime); + } + + + public boolean isSafe() { + return getLogic().isSafe(); + } + + + public boolean isSafe(String service) { + return getLogic().isSafe(service); + } + + + public boolean isSafe(String tokenValue, String service) { + return getLogic().isSafe(tokenValue, service); + } + + + public void checkSafe() { + getLogic().checkSafe(); + } + + + public void checkSafe(String service) { + getLogic().checkSafe(service); + } + + + public long getSafeTime() { + return getLogic().getSafeTime(); + } + + + public long getSafeTime(String service) { + return getLogic().getSafeTime(service); + } + + + public void closeSafe() { + getLogic().closeSafe(); + } + + + public void closeSafe(String service) { + getLogic().closeSafe(service); + } + + + public String splicingKeyTokenName() { + return getLogic().splicingKeyTokenName(); + } + + + public String splicingKeyTokenValue(String tokenValue) { + return getLogic().splicingKeyTokenValue(tokenValue); + } + + + public String splicingKeySession(Object loginId) { + return getLogic().splicingKeySession(loginId); + } + + + public String splicingKeyTokenSession(String tokenValue) { + return getLogic().splicingKeyTokenSession(tokenValue); + } + + + public String splicingKeyLastActiveTime(String tokenValue) { + return getLogic().splicingKeyLastActiveTime(tokenValue); + } + + + public String splicingKeySwitch() { + return getLogic().splicingKeySwitch(); + } + + + public String splicingKeyJustCreatedSave() { + return getLogic().splicingKeyJustCreatedSave(); + } + + + public String splicingKeyDisable(Object loginId, String service) { + return getLogic().splicingKeyDisable(loginId, service); + } + + + public String splicingKeySafe(String tokenValue, String service) { + return getLogic().splicingKeySafe(tokenValue, service); + } + + + public SaTokenDao getSaTokenDao() { + return getLogic().getSaTokenDao(); + } + + + public boolean getConfigOfIsShare() { + return getLogic().getConfigOfIsShare(); + } + + + public boolean isOpenCheckActiveTimeout() { + return getLogic().isOpenCheckActiveTimeout(); + } + + + public int getConfigOfCookieTimeout() { + return getLogic().getConfigOfCookieTimeout(); + } + + + public int getConfigOfMaxTryTimes() { + return getLogic().getConfigOfMaxTryTimes(); + } + + + public boolean hasElement(List list, String element) { + return getLogic().hasElement(list, element); + } + + + public boolean isSupportExtra() { + return getLogic().isSupportExtra(); + } } diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/StpKit.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/StpKit.java index d88c18aa..1657e427 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/StpKit.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/StpKit.java @@ -17,7 +17,7 @@ public class StpKit { /** * User 会话对象,管理 User 表所有账号的登录、权限认证 */ - public static final MyStpLogic USER = new MyStpLogic("user"); + public static final MyStpLogic USER = new MyStpLogic(); // public StpKit() { diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopActivateDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopActivateDTO.java new file mode 100644 index 00000000..436881d0 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopActivateDTO.java @@ -0,0 +1,75 @@ + +package com.czg.account.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.czg.validator.group.InsertGroup; +import com.czg.validator.group.UpdateGroup; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 活动 实体类。 + * + * @author ww + * @since 2025-02-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopActivateDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @NotNull(message = "主键不能为空", groups = {UpdateGroup.class}) + private Long id; + + + private Long shopId; + + /** + * 充值金额 + */ + @NotNull(message = "充值金额不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer amount; + + /** + * 赠送金额 + */ + private Integer giftAmount; + + /** + * 赠送积分 + */ + private Integer giftPoints; + + /** + * 是否赠送优惠卷 0否 1是 + */ + private Integer isGiftCoupon = 0; + + /** + * 优惠卷id + */ + private Long couponId; + + /** + * 优惠卷数量 + */ + private Integer num; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopCouponDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopCouponDTO.java new file mode 100644 index 00000000..ffff1ed3 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopCouponDTO.java @@ -0,0 +1,142 @@ + +package com.czg.account.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Time; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 优惠券 实体类。 + * + * @author ww + * @since 2025-02-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopCouponDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 自增 + */ + private Long id; + + /** + * 状态0-关闭 1 正常 + */ + private Integer status; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + /** + * 名称(无意义) + */ + private String title; + + private String shopId; + + /** + * 已使用数量 + */ + private Integer useNumber; + + /** + * 发放数量 + */ + private Integer number; + + /** + * 剩余数量 + */ + private Integer leftNumber; + + /** + * 有效期类型,可选值为 fixed(固定时间)/custom(自定义时间) + */ + private String validityType; + + /** + * 有效天数 + */ + private Integer validDays; + + /** + * 隔多少天生效 + */ + private Integer daysToTakeEffect; + + /** + * 有效开始时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime validStartTime; + + /** + * 有效结束时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime validEndTime; + + /** + * 周 数组["周一","周二"] + */ + private String userDays; + + /** + * all-全时段 custom-指定时段 + */ + private String useTimeType; + + /** + * 可用开始时间 + */ + @JSONField(format = "HH:mm:ss") + private Time useStartTime; + + /** + * 可用结束时间 + */ + @JSONField(format = "HH:mm:ss") + private Time useEndTime; + + /** + * 1-满减 2-商品 + */ + private Integer type; + + /** + * 满多少金额 + */ + private BigDecimal fullAmount; + + /** + * 减多少金额 + */ + private BigDecimal discountAmount; + + /** + * 描述 + */ + private String description; + + /** + * 发放人 + */ + private String editor; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/userinfo/UserInfoAssetsSummaryDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/userinfo/UserInfoAssetsSummaryDTO.java new file mode 100644 index 00000000..104b48c7 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/userinfo/UserInfoAssetsSummaryDTO.java @@ -0,0 +1,24 @@ +package com.czg.account.dto.user.userinfo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author Administrator + */ +@Data +public class UserInfoAssetsSummaryDTO { + /** + * 总余额 + */ + private BigDecimal amount; + /** + * 总积分 + */ + private Integer points; + /** + * 可使用优惠券数量 + */ + private Integer couponNum; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/userinfo/UserInfoDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/userinfo/UserInfoDTO.java new file mode 100644 index 00000000..ca90d801 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/userinfo/UserInfoDTO.java @@ -0,0 +1,17 @@ +package com.czg.account.dto.user.userinfo; + +import com.czg.account.entity.UserInfo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author Administrator + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class UserInfoDTO extends UserInfo { + /** + * 用户资产概述 + */ + private UserInfoAssetsSummaryDTO assetsSummary; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivate.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivate.java new file mode 100644 index 00000000..f2d6e3ed --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivate.java @@ -0,0 +1,74 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 活动 实体类。 + * + * @author ww + * @since 2025-02-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_activate") +public class ShopActivate implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + private Long shopId; + + /** + * 充值金额 + */ + private Integer amount; + + /** + * 赠送金额 + */ + private Integer giftAmount; + + /** + * 赠送积分 + */ + private Integer giftPoints; + + /** + * 是否赠送优惠卷 0否 1是 + */ + private Integer isGiftCoupon; + + /** + * 优惠卷id + */ + private Long couponId; + + /** + * 优惠卷数量 + */ + private Integer num; + + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateInRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateInRecord.java new file mode 100644 index 00000000..175035f5 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateInRecord.java @@ -0,0 +1,117 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 活动商品赠送记录表 实体类。 + * + * @author ww + * @since 2025-02-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_activate_in_record") +public class ShopActivateInRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 会员id + */ + private Long vipUserId; + + /** + * 卷Id (校验是否可用) + */ + private Long couponId; + + /** + * 卷描述 满10减2/商品卷 + */ + private String name; + + /** + * 1-满减 2-商品 + */ + private Integer type; + + /** + * 商品id + */ + private Long proId; + + /** + * 满多少金额 + */ + private BigDecimal fullAmount; + + /** + * 减多少金额 + */ + private BigDecimal discountAmount; + + /** + * 赠送数量 + */ + private Integer num; + + /** + * 未使用数量 + */ + private Integer overNum; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 来源活动id + */ + private Long sourceActId; + + private Long sourceFlowId; + + /** + * 可用开始时间 + */ + private LocalDateTime useStartTime; + + /** + * 可用结束时间 + */ + private LocalDateTime useEndTime; + + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + + private String couponJson; + + /** + * invited/activate + */ + private String source; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateOutRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateOutRecord.java new file mode 100644 index 00000000..4edceddf --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateOutRecord.java @@ -0,0 +1,79 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 活动赠送商品使用记录表 实体类。 + * + * @author ww + * @since 2025-02-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_activate_out_record") +public class ShopActivateOutRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + private Long shopId; + + /** + * 订单id + */ + private Long orderId; + + /** + * 商品赠送Id tb_activate_in_record的id + */ + private Long giveId; + + /** + * 会员id + */ + private Long vipUserId; + + /** + * 1-满减 2-商品 + */ + private Integer type; + + /** + * 使用数量 + */ + private Integer useNum; + + /** + * 退单量 + */ + private Integer refNum; + + /** + * 新建: create, 完成: closed, 取消:cancel, + */ + private String status; + + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java new file mode 100644 index 00000000..d6011828 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java @@ -0,0 +1,145 @@ +package com.czg.account.entity; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Time; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 优惠券 实体类。 + * + * @author ww + * @since 2025-02-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_coupon") +public class ShopCoupon implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 自增 + */ + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 状态0-关闭 1 正常 + */ + private Integer status; + + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + + /** + * 名称(无意义) + */ + private String title; + + private String shopId; + + /** + * 已使用数量 + */ + private Integer useNumber; + + /** + * 发放数量 + */ + private Integer number; + + /** + * 剩余数量 + */ + private Integer leftNumber; + + /** + * 有效期类型,可选值为 fixed(固定时间)/custom(自定义时间) + */ + private String validityType; + + /** + * 有效天数 + */ + private Integer validDays; + + /** + * 隔多少天生效 + */ + private Integer daysToTakeEffect; + + /** + * 有效开始时间 + */ + private LocalDateTime validStartTime; + + /** + * 有效结束时间 + */ + private LocalDateTime validEndTime; + + /** + * 周 数组["周一","周二"] + */ + private String userDays; + + /** + * all-全时段 custom-指定时段 + */ + private String useTimeType; + + /** + * 可用开始时间 + */ + private Time useStartTime; + + /** + * 可用结束时间 + */ + private Time useEndTime; + + /** + * 1-满减 2-商品 + */ + private Integer type; + + /** + * 满多少金额 + */ + private BigDecimal fullAmount; + + /** + * 减多少金额 + */ + private BigDecimal discountAmount; + + /** + * 描述 + */ + private String description; + + /** + * 发放人 + */ + private String editor; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java index f9d5c9f2..6bd1a52d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java @@ -106,11 +106,6 @@ public class ShopUser implements Serializable { */ private String code; - /** - * 会员码 - */ - private String dynamicCode; - /** * 最近一次积分变动时间 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateInRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateInRecordService.java new file mode 100644 index 00000000..e6744672 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateInRecordService.java @@ -0,0 +1,14 @@ +package com.czg.account.service; + +import com.mybatisflex.core.service.IService; +import com.czg.account.entity.ShopActivateInRecord; + +/** + * 活动商品赠送记录表 服务层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopActivateInRecordService extends IService { + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateOutRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateOutRecordService.java new file mode 100644 index 00000000..33532473 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateOutRecordService.java @@ -0,0 +1,14 @@ +package com.czg.account.service; + +import com.mybatisflex.core.service.IService; +import com.czg.account.entity.ShopActivateOutRecord; + +/** + * 活动赠送商品使用记录表 服务层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopActivateOutRecordService extends IService { + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateService.java new file mode 100644 index 00000000..714eea03 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateService.java @@ -0,0 +1,24 @@ +package com.czg.account.service; + +import com.czg.account.dto.ShopActivateDTO; +import com.czg.account.entity.ShopActivate; +import com.mybatisflex.core.service.IService; + +import java.util.List; + +/** + * 活动 服务层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopActivateService extends IService { + + List getList(); + + Boolean add(ShopActivateDTO activateDTO); + + Boolean edit(ShopActivateDTO activateDTO); + + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java new file mode 100644 index 00000000..75f27b4f --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java @@ -0,0 +1,40 @@ +package com.czg.account.service; + +import com.czg.account.dto.ShopCouponDTO; +import com.czg.account.entity.ShopActivateOutRecord; +import com.czg.account.entity.ShopCoupon; +import com.mybatisflex.core.service.IService; + +import java.util.List; + +/** + * 优惠券 服务层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopCouponService extends IService { + + /** + * 优惠券列表 + * + * @param shopId 店铺id + * @param status 状态 0 未使用 1已使用 -1已过期 + * @return + */ + List getList(Long shopId, Integer status); + ShopCouponDTO getCouponById(ShopCouponDTO couponDTO); + + Boolean add(ShopCouponDTO couponDTO); + + Boolean edit(ShopCouponDTO couponDTO); + + Boolean delete(Long id); + Boolean find(Long id); + Boolean use(Integer shopId, Integer orderId, Integer vipUserId, List param); + + Boolean refund(List param); + + + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/UserInfoService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/UserInfoService.java index 4c7bd97c..ad5fff72 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/UserInfoService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/UserInfoService.java @@ -1,5 +1,6 @@ package com.czg.account.service; +import com.czg.account.dto.user.userinfo.UserInfoDTO; import com.czg.account.entity.UserInfo; import com.mybatisflex.core.service.IService; @@ -11,4 +12,5 @@ import com.mybatisflex.core.service.IService; */ public interface UserInfoService extends IService { + UserInfoDTO getInfo(long userInfoId); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java new file mode 100644 index 00000000..22af88db --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java @@ -0,0 +1,43 @@ +package com.czg.account.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class UserCouponVo { + private Long id; + private BigDecimal fullAmount; + private BigDecimal discountAmount; + private Long couponId; + private Long proId; + // 商品名称 + private String productName; + private String productCover; + //优惠券名称 + private String name; + + //优惠券类型 1 满减 2 商品券 + private Integer type; + //数量 + private Integer num; + //到期时间 + private Date endTime; + private Long expireTime; + private String useRestrictions; + private boolean isUse = false; + //当前使用数量 + private BigDecimal currentUseNum; + private Integer finalUseNum; + private BigDecimal finalDiscountAmount = new BigDecimal(0); + + + public void setEndTime(Date endTime) { + this.endTime = endTime; + if(endTime!=null){ + expireTime=endTime.getTime(); + } + } + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateInRecordMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateInRecordMapper.java new file mode 100644 index 00000000..63cbea62 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateInRecordMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopActivateInRecord; + +/** + * 活动商品赠送记录表 映射层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopActivateInRecordMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateMapper.java new file mode 100644 index 00000000..6880e4d1 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopActivate; + +/** + * 活动 映射层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopActivateMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateOutRecordMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateOutRecordMapper.java new file mode 100644 index 00000000..5992d1e2 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateOutRecordMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopActivateOutRecord; + +/** + * 活动赠送商品使用记录表 映射层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopActivateOutRecordMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopCouponMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopCouponMapper.java new file mode 100644 index 00000000..0d9583f2 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopCouponMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopCoupon; + +/** + * 优惠券 映射层。 + * + * @author ww + * @since 2025-02-17 + */ +public interface ShopCouponMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopUserMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopUserMapper.java index 90ca96cf..fc72c1a4 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopUserMapper.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopUserMapper.java @@ -2,6 +2,7 @@ package com.czg.service.account.mapper; import com.czg.account.dto.shopuser.ShopUserSummaryDTO; import com.czg.account.dto.shopuser.ShopUserVipCardDTO; +import com.czg.account.dto.user.userinfo.UserInfoAssetsSummaryDTO; import com.czg.account.entity.ShopUser; import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.paginate.Page; @@ -27,4 +28,7 @@ public interface ShopUserMapper extends BaseMapper { ShopUserSummaryDTO selectUserSummary(@Param("shopId") Long shopId, @Param("isVip") Integer isVip); Page selectVipCard(@Param("page") Page objectPage, @Param("userInfoId") long userInfoId); + + UserInfoAssetsSummaryDTO selectAssetsSummary(@Param("userId") Long userInfoId); + } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateInRecordServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateInRecordServiceImpl.java new file mode 100644 index 00000000..30652031 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateInRecordServiceImpl.java @@ -0,0 +1,20 @@ +package com.czg.service.account.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.ShopActivateInRecord; +import com.czg.account.service.ShopActivateInRecordService; +import com.czg.service.account.mapper.ShopActivateInRecordMapper; +import org.apache.dubbo.config.annotation.DubboService; + + +/** + * 活动商品赠送记录表 服务层实现。 + * + * @author ww + * @since 2025-02-17 + */ +@DubboService +public class ShopActivateInRecordServiceImpl extends ServiceImpl implements ShopActivateInRecordService{ + + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateOutRecordServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateOutRecordServiceImpl.java new file mode 100644 index 00000000..a81945eb --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateOutRecordServiceImpl.java @@ -0,0 +1,19 @@ +package com.czg.service.account.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.ShopActivateOutRecord; +import com.czg.account.service.ShopActivateOutRecordService; +import com.czg.service.account.mapper.ShopActivateOutRecordMapper; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +/** + * 活动赠送商品使用记录表 服务层实现。 + * + * @author ww + * @since 2025-02-17 + */ +@DubboService +public class ShopActivateOutRecordServiceImpl extends ServiceImpl implements ShopActivateOutRecordService{ + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateServiceImpl.java new file mode 100644 index 00000000..7b7e92ba --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateServiceImpl.java @@ -0,0 +1,43 @@ +package com.czg.service.account.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.czg.account.dto.ShopActivateDTO; +import com.czg.account.entity.ShopActivate; +import com.czg.account.service.ShopActivateService; +import com.czg.sa.StpKit; +import com.czg.service.account.mapper.ShopActivateMapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 活动 服务层实现。 + * + * @author ww + * @since 2025-02-17 + */ +@DubboService +public class ShopActivateServiceImpl extends ServiceImpl implements ShopActivateService { + + @Override + public List getList() { + return queryChain().select().eq(ShopActivate::getShopId, StpKit.USER.getShopId()) + .orderBy(ShopActivate::getAmount, true).listAs(ShopActivateDTO.class); + } + + @Override + public Boolean add(ShopActivateDTO activateDTO) { + ShopActivate shopActivate = new ShopActivate(); + BeanUtil.copyProperties(activateDTO, shopActivate); + return save(shopActivate); + } + + @Override + public Boolean edit(ShopActivateDTO activateDTO) { + ShopActivate shopActivate = new ShopActivate(); + BeanUtil.copyProperties(activateDTO, shopActivate); + return updateById(shopActivate); + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java new file mode 100644 index 00000000..815597d9 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java @@ -0,0 +1,109 @@ +package com.czg.service.account.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.czg.account.dto.ShopCouponDTO; +import com.czg.account.entity.ShopActivateInRecord; +import com.czg.account.entity.ShopActivateOutRecord; +import com.czg.account.service.ShopActivateInRecordService; +import com.czg.account.service.ShopActivateOutRecordService; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.ShopCoupon; +import com.czg.account.service.ShopCouponService; +import com.czg.service.account.mapper.ShopCouponMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 优惠券 服务层实现。 + * + * @author ww + * @since 2025-02-17 + */ +@Service +public class ShopCouponServiceImpl extends ServiceImpl implements ShopCouponService { + + @Resource + private ShopActivateInRecordService inService; + @Resource + private ShopActivateOutRecordService outService; + + @Override + public List getList(Long shopId, Integer status) { + QueryWrapper queryWrapper = new QueryWrapper(); + if (shopId != null) { + if (status == 1) { + queryWrapper.eq(ShopActivateOutRecord::getShopId, shopId); + }else { + queryWrapper.eq(ShopActivateInRecord::getShopId, shopId); + } + } + return switch (status) { + case -1 -> { + queryWrapper.ge(ShopActivateInRecord::getUseEndTime, DateUtil.date()); + yield list(queryWrapper); + } + case 0 -> { +// yield outService.list(queryWrapper); + yield null; + + } + case 1 -> { + yield null; + + } + default -> throw new IllegalStateException("Unexpected value: " + status); + }; + } + + @Override + public ShopCouponDTO getCouponById(ShopCouponDTO couponDTO) { + return null; + } + + @Override + public Boolean add(ShopCouponDTO couponDTO) { + return null; + } + + @Override + public Boolean edit(ShopCouponDTO couponDTO) { + return null; + } + + @Override + public Boolean delete(Long id) { + return null; + } + + @Override + public Boolean find(Long id) { + return null; + } + + @Override + public Boolean use(Integer shopId, Integer orderId, Integer vipUserId, List param) { + return null; + } + + /** + * 退还券 + * + * @param param giveId和 refNum 必传 + */ + @Override + public Boolean refund(List param) { +// for (ShopActivateOutRecord outRecord : param) { +// outService.updateChain() +// .set(ShopActivateOutRecord::getRefNum, outRecord.getRefNum()) +// .eq(ShopActivateOutRecord::getId, outRecord.getId()) +// .update(); +// ShopActivateInRecord inRecord = inService.getById(outRecord.getGiveId()); +// inRecord.setOverNum(inRecord.getOverNum() + outRecord.getRefNum()); +// inService.updateOverNum(inRecord.getId(), inRecord.getOverNum()); +// } + return true; + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java index 5be1ed76..e82eedd9 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java @@ -17,6 +17,7 @@ import com.czg.exception.ApiNotPrintException; import com.czg.sa.StpKit; import com.czg.service.RedisService; import com.czg.service.account.mapper.ShopUserMapper; +import com.czg.utils.AssertUtil; import com.czg.utils.PageUtil; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.spring.service.impl.ServiceImpl; @@ -131,13 +132,9 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public String getCode(long userInfoId, long shopId) { ShopUser shopUser = queryChain().eq(ShopUser::getShopId, shopId).eq(ShopUser::getUserId, userInfoId).one(); - if (shopUser == null) { - throw new ApiNotPrintException("会员信息不存在"); - } + AssertUtil.isNull(shopUser, "会员信息不存在"); String dynamicCode = generatePaymentCode(String.valueOf(shopId), String.valueOf(userInfoId)); - redisService.set(RedisCst.SHOP_USER_DYNAMIC_CODE + shopUser.getId(), dynamicCode, 300); - shopUser.setDynamicCode(dynamicCode); - updateById(shopUser); + redisService.set(RedisCst.SHOP_USER_DYNAMIC_CODE + shopUser.getId() + ":" + dynamicCode, 1, 180); return dynamicCode; } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java index fe3ec199..c3d2b7fe 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java @@ -66,6 +66,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public Boolean add(MenuAddDTO menuAddDTO) { + checkExIsis(menuAddDTO.getTitle(), null); if (menuAddDTO.getType() == 2 && menuAddDTO.getPid() == null) { throw new ApiNotPrintException("二级菜单必须传递父id"); } @@ -82,6 +83,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public Boolean edit(MenuEditDTO menuEditDTO) { + checkExIsis(menuEditDTO.getTitle(), menuEditDTO.getId()); SysMenu menu = getById(menuEditDTO.getId()); if (menu == null) { throw new ApiNotPrintException("菜单不存在"); @@ -90,6 +92,19 @@ public class SysMenuServiceImpl extends ServiceImpl impl return updateById(menu); } + + private void checkExIsis(String title, Integer id) { + QueryWrapper queryWrapper = new QueryWrapper(); + if (id != null) { + queryWrapper.ne(SysMenu::getMenuId, id); + } + queryWrapper.eq(SysMenu::getTitle, title); + long count = count(queryWrapper); + if (count > 0) { + throw new ApiNotPrintException("名称已存在"); + } + } + private List buildMenuTree(List allMenus) { List menuVos = allMenus.stream() .map(menu -> BeanUtil.copyProperties(menu, MenuVO.class)) diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java index cb3d0be2..f1b4059a 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java @@ -120,7 +120,7 @@ public class SysRoleServiceImpl extends ServiceImpl imp throw new ApiNotPrintException("角色不存在"); } - long roleCount = queryChain().eq(SysRole::getName, roleEditDTO.getName()).count(); + long roleCount = queryChain().eq(SysRole::getName, roleEditDTO.getName()).ne(SysRole::getId, roleEditDTO.getId()).count(); if (roleCount > 0) { throw new ApiNotPrintException("此角色名称已存在"); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UserInfoServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UserInfoServiceImpl.java index ceecc273..de9702f6 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UserInfoServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UserInfoServiceImpl.java @@ -1,9 +1,16 @@ package com.czg.service.account.service.impl; +import cn.hutool.core.bean.BeanUtil; +import com.czg.account.dto.user.userinfo.UserInfoAssetsSummaryDTO; +import com.czg.account.dto.user.userinfo.UserInfoDTO; import com.czg.account.entity.UserInfo; +import com.czg.account.service.ShopUserService; +import com.czg.exception.ApiNotPrintException; +import com.czg.service.account.mapper.ShopUserMapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.czg.service.account.mapper.UserInfoMapper; import com.czg.account.service.UserInfoService; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; /** @@ -14,5 +21,19 @@ import org.springframework.stereotype.Service; */ @Service public class UserInfoServiceImpl extends ServiceImpl implements UserInfoService{ + @Resource + private ShopUserMapper shopUserMapper; + @Override + public UserInfoDTO getInfo(long userInfoId) { + UserInfo userInfo = queryChain().eq(UserInfo::getId, userInfoId).one(); + if (userInfo == null) { + throw new ApiNotPrintException("用户信息不存在"); + } + + UserInfoAssetsSummaryDTO assetsSummaryDTO = shopUserMapper.selectAssetsSummary(userInfoId); + UserInfoDTO userInfoDTO = BeanUtil.copyProperties(userInfo, UserInfoDTO.class); + userInfoDTO.setAssetsSummary(assetsSummaryDTO); + return userInfoDTO; + } } diff --git a/cash-service/account-service/src/main/resources/mapper/ShopActivateInRecordMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopActivateInRecordMapper.xml new file mode 100644 index 00000000..f5e1d356 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopActivateInRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/account-service/src/main/resources/mapper/ShopActivateMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopActivateMapper.xml new file mode 100644 index 00000000..68dab5fd --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopActivateMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/account-service/src/main/resources/mapper/ShopActivateOutRecordMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopActivateOutRecordMapper.xml new file mode 100644 index 00000000..92aade17 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopActivateOutRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/account-service/src/main/resources/mapper/ShopCouponMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopCouponMapper.xml new file mode 100644 index 00000000..0e9410c7 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopCouponMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index f30bd264..a8e8eb02 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -31,15 +31,26 @@ + diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/dto/CreateOrderDTO.java b/cash-service/order-service/src/main/java/com/czg/service/order/dto/CreateOrderDTO.java new file mode 100644 index 00000000..16a71a84 --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/dto/CreateOrderDTO.java @@ -0,0 +1,44 @@ +package com.czg.service.order.dto; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 创建订单 + * @author ww + */ +@Data +public class CreateOrderDTO { + @NotBlank(message = "桌号不能为空") + private String tableCode; + @NotBlank(message = "用餐模式 堂食 dine-in 外带 take-out 外卖 take-away") + private String dineMode; + /** + * 平台类型 + * 微信小程序 WX + * 支付宝小程序 ALI + * 收银机客户端 PC + * PC管理端 APC + * APP管理端 APP + */ + @NotBlank(message = "平台类型不能为空") + private String platformType; + + /** + * 是否使用了霸王餐 + */ + private boolean isFreeDine = false; + + private String remark; + + // 使用的积分抵扣数量 + private Integer pointsNum; + + // 使用的优惠券 + @Valid + private List userCouponInfos = new ArrayList<>(); +} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/dto/UserCouponInfoDTO.java b/cash-service/order-service/src/main/java/com/czg/service/order/dto/UserCouponInfoDTO.java new file mode 100644 index 00000000..bf0aac5b --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/dto/UserCouponInfoDTO.java @@ -0,0 +1,12 @@ +package com.czg.service.order.dto; + +import jakarta.validation.constraints.Min; +import lombok.Data; + + +@Data +public class UserCouponInfoDTO { + private Long userCouponId; + @Min(1) + private Integer num; +} 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 e33081a8..a7f9746a 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 @@ -57,10 +57,12 @@ public class OrderInfoServiceImpl extends ServiceImpl orderInfoVoPage = pageAs(PageUtil.buildPage(), queryWrapper, OrderInfoVo.class); orderInfoVoPage.getRecords().parallelStream().forEach(s -> { @@ -83,8 +85,8 @@ public class OrderInfoServiceImpl extends ServiceImpl