From 0befca3e70b575c420e7a14fa113aeb74b8fbef8 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 27 十一月 2024 09:05:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java | 5
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderVO.java | 34 +++
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java | 1
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java | 61 +++++
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderGoodsVO.java | 32 ++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java | 2
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/GoodsStatus.java | 14
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java | 15 +
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/ShareAuditStatus.java | 10
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/annotation/DistributedLock.java | 34 +++
ruoyi-api/ruoyi-api-order/src/main/java/model/Order.java | 4
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 57 ++++
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java | 10
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 18 +
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/aspectj/DistributedLockAspect.java | 142 ++++++++++++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointDetailVO.java | 23 ++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java | 47 ++++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java | 10
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java | 31 ++
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/TechnicianErrorCode.java | 18 +
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java | 39 +++
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java | 2
ruoyi-common/ruoyi-common-redis/pom.xml | 6
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/PhoneType.java | 14
24 files changed, 580 insertions(+), 49 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/model/Order.java b/ruoyi-api/ruoyi-api-order/src/main/java/model/Order.java
index 1c171b2..fba67dd 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/model/Order.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/model/Order.java
@@ -84,6 +84,10 @@
@TableField("express_json")
private String expressJson;
+ @ApiModelProperty(value = "收货地址信息")
+ @TableField("address_json")
+ private String addressJson;
+
@ApiModelProperty(value = "平台分佣")
@TableField("share_amount")
private BigDecimal shareAmount;
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
index 0fe1a4a..6d91ea3 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
@@ -38,7 +38,7 @@
@ApiModelProperty(value = "技师id")
@TableField("technician_id")
- private Integer technicianId;
+ private Long technicianId;
@ApiModelProperty(value = "预约时间")
@TableField("subscribe_time")
diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml
index 97c986b..46d20b4 100644
--- a/ruoyi-common/ruoyi-common-redis/pom.xml
+++ b/ruoyi-common/ruoyi-common-redis/pom.xml
@@ -22,6 +22,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.redisson</groupId>
+ <artifactId>redisson</artifactId>
+ <version>3.10.1</version>
+ </dependency>
<!-- RuoYi Common Core-->
<dependency>
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/annotation/DistributedLock.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/annotation/DistributedLock.java
new file mode 100644
index 0000000..93a38a7
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/annotation/DistributedLock.java
@@ -0,0 +1,34 @@
+package com.ruoyi.common.redis.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @Descreption: 分布式锁注解
+ * @Author: luofl
+ * @Date: 2024/11/26 16:43
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DistributedLock {
+
+ /**
+ * 锁名字(没有EL解析)
+ */
+ String lockName() default "";
+
+ /**
+ * 锁前缀(有EL解析)
+ */
+ String lockNamePre() default "";
+
+ /**
+ * 锁后缀(有EL解析)
+ */
+ String lockNamePost() default "";
+
+ /**
+ * 锁前后缀拼接分隔符
+ */
+ String separator() default "_";
+}
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/aspectj/DistributedLockAspect.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/aspectj/DistributedLockAspect.java
new file mode 100644
index 0000000..fa06f8c
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/aspectj/DistributedLockAspect.java
@@ -0,0 +1,142 @@
+package com.ruoyi.common.redis.aspectj;
+
+import com.ruoyi.common.redis.annotation.DistributedLock;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+/**
+ * @Description 分布式锁切面
+ * 注意!!!分布式锁不能加在事务方法当中:因为当锁释放,事务还没有提交
+ * @Author luofl
+ * @Date 2024/11/26 16:42
+ */
+@Aspect
+@Component
+@Slf4j
+public class DistributedLockAspect {
+ @Resource
+ private RedissonClient redissonClient;
+
+ /**
+ * @Descreption: 定义切面:以注解为切面
+ * @Author: luofl
+ * @Date: 2024/11/26 16:44
+ */
+ @Pointcut("@annotation(com.ruoyi.common.redis.annotation.DistributedLock)")
+ public void distributedLockAspect() {
+ }
+
+ @Around(value = "distributedLockAspect()")
+ public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
+
+ //切点所在的类
+ MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
+ Method method = methodSignature.getMethod();
+ //
+ DistributedLock annotation = method.getAnnotation(DistributedLock.class);
+ String lockName = getLockName(annotation, pjp.getArgs(), method);
+ //log.info("lockName:"+lockName);
+ RLock lock = redissonClient.getLock(lockName);
+ lock.lock();
+ try {
+ return pjp.proceed();
+ } finally {
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
+ //释放锁
+ lock.unlock();
+ }
+ }
+ }
+
+ /**
+ * @Descreption: 获取锁名字,优先获取注解中锁名
+ * @Author: luofl
+ * @Date: 2024/11/26 16:45
+ */
+ private String getLockName(DistributedLock distributedLock, Object[] args, Method method) {
+ //优先获取注解名称
+ if (StringUtils.isNotBlank(distributedLock.lockName())) {
+ return distributedLock.lockName();
+ }
+ //根据参数匹配有参数就使用动态参数,没有就使用定义参数
+ String lockNamePre = distributedLock.lockNamePre();
+ String lockNamePost = distributedLock.lockNamePost();
+ String separator = distributedLock.separator();
+
+ String preExpression = parseExpression(lockNamePre, method, args);
+ String postExpression = parseExpression(lockNamePost, method, args);
+ StringBuilder sb = new StringBuilder();
+ if (StringUtils.isNotBlank(preExpression)) {
+ sb.append(preExpression);
+ } else {
+ sb.append(lockNamePre);
+ }
+ sb.append(separator);
+ if (StringUtils.isNotBlank(postExpression)) {
+ sb.append(postExpression);
+ } else {
+ sb.append(lockNamePost);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * el表达式解析
+ *
+ * @param expressionString 解析值
+ * @param method 方法
+ * @param args 参数
+ */
+ private String parseExpression(String expressionString, Method method, Object[] args) {
+ //获取被拦截方法参数名列表
+ LocalVariableTableParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();
+ String[] paramNameArr = discoverer.getParameterNames(method);
+ //SPEL解析
+ ExpressionParser parser = new SpelExpressionParser();
+ StandardEvaluationContext context = new StandardEvaluationContext();
+ for (int i = 0; i < Objects.requireNonNull(paramNameArr).length; i++) {
+ context.setVariable(paramNameArr[i], args[i]);
+ }
+ return parser.parseExpression(expressionString).getValue(context, String.class);
+ }
+
+ // ==========================示例=============================
+
+ //固定静态参数锁:product_lock
+ @DistributedLock(lockName = "product_lock")
+ @GetMapping(value = "/test1")
+ public void test1() {
+ System.out.println("执行事务");
+ }
+
+ //未匹配到参数,因此仍然是静态参数锁:#param1_#param2
+ @DistributedLock(lockNamePre = "#param1", lockNamePost = "#param2")
+ @GetMapping(value = "/test2")
+ public void test2() {
+ System.out.println("执行事务");
+ }
+
+ //匹配到参数,动态参数锁:hello_world
+ @DistributedLock(lockNamePre = "#order", lockNamePost = "#param2")
+ @GetMapping(value = "/test3")
+ public void test3(String param1, String param2) {
+ System.out.println("执行事务");
+ }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
index 50fec32..4152c2c 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -1,9 +1,23 @@
package com.ruoyi.account.controller;
+import com.ruoyi.account.service.UserPointService;
+import com.ruoyi.account.vo.UserPointDetailVO;
+import com.ruoyi.account.vo.UserPointVO;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
/**
* <p>
@@ -16,10 +30,39 @@
@RestController
@RequestMapping("/user-point")
@Api("用户积分")
-public class UserPointController {
+public class UserPointController extends BaseController {
+ @Resource
+ private UserPointService userPointService;
+
/**
- * 积分
+ * 获取个人积分
*/
+ @GetMapping("/getUserPoint")
+ @ApiOperation("获取个人积分")
+ public R<UserPointVO> getUserPoint(){
+ return R.ok(userPointService.getUserPoint(SecurityUtils.getUserId()));
+ }
+
+ /**
+ * 获取变更明细
+ */
+ @GetMapping("/getUserPointDetail")
+ @ApiOperation("获取变更明细")
+ public R<UserPointDetailVO> getUserPointDetail(@ApiParam("指定日期") LocalDateTime date,
+ @ApiParam("变动类型(1=消费积分,2=返佣积分,3=拉新人积分,4=兑换商品 " +
+ "5 = 门店业绩积分 6 =门店返佣积分7=技师业绩积分8 =转赠积分 9 =做工积分 " +
+ "10 =注册积分)") Integer type){
+ return R.ok();
+ }
+
+ /**
+ * 转赠积分
+ */
+ @PostMapping("/transferPoint")
+ @ApiOperation("转赠积分")
+ public R<Void> transferPoint(@ApiParam("积分") BigDecimal point, @ApiParam("手机号") Long phone){
+ return R.ok();
+ }
}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
index e6c1e7f..5cc846e 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
@@ -4,6 +4,7 @@
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.WalletVO;
+import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
@@ -14,6 +15,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
+import java.util.List;
@Api("钱包")
@RestController
@@ -27,11 +29,11 @@
*/
@GetMapping("detail")
@ApiOperation(value = "钱包详情", notes = "钱包详情", tags = {"小程序-个人中心-我的钱包-钱包详情"})
- public AjaxResult detail() {
+ public R<WalletVO> detail() {
Long userId = SecurityUtils.getUserId();
// TODO 查询钱包详情
WalletVO walletVO = new WalletVO();
- return AjaxResult.success(walletVO);
+ return R.ok(walletVO);
}
/**
@@ -39,9 +41,9 @@
*/
@ApiOperation(value = "变更明细", notes = "变更明细", tags = {"小程序-个人中心-我的钱包-变更记录"})
@GetMapping("change")
- public AjaxResult change() {
+ public R<List<BalanceChangeRecord>> change() {
Long userId = SecurityUtils.getUserId();
- return AjaxResult.success(balanceChangeRecordService.list(new LambdaQueryWrapper<BalanceChangeRecord>()
+ return R.ok(balanceChangeRecordService.list(new LambdaQueryWrapper<BalanceChangeRecord>()
.eq(BalanceChangeRecord::getAppUserId, userId)));
}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java
index a77887d..1e104a9 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.account.api.model.UserPoint;
+import com.ruoyi.account.vo.UserPointVO;
/**
* <p>
@@ -13,4 +14,5 @@
*/
public interface UserPointService extends IService<UserPoint> {
+ UserPointVO getUserPoint(Long userId);
}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
index 0b4a3fb..0b091af 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -4,6 +4,7 @@
import com.ruoyi.account.mapper.UserPointMapper;
import com.ruoyi.account.api.model.UserPoint;
import com.ruoyi.account.service.UserPointService;
+import com.ruoyi.account.vo.UserPointVO;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +18,8 @@
@Service
public class UserPointServiceImpl extends ServiceImpl<UserPointMapper, UserPoint> implements UserPointService {
+ @Override
+ public UserPointVO getUserPoint(Long userId) {
+ return null;
+ }
}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointDetailVO.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointDetailVO.java
new file mode 100644
index 0000000..92dc03c
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointDetailVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.account.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value="UserPointDetail对象", description="")
+public class UserPointDetailVO {
+
+ @ApiModelProperty(value = "变动类型(1=消费积分,2=返佣积分,3=拉新人积分,4=兑换商品 5 = 门店业绩积分 6 =门店返佣积分7=技师业绩积分8 =转赠积分 9 =做工积分 10 =注册积分)")
+ private Integer type;
+
+ @ApiModelProperty(value = "变动金额")
+ private BigDecimal variablePoint;
+
+ @ApiModelProperty(value = "变动时间")
+ private LocalDateTime createTime;
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java
new file mode 100644
index 0000000..d81b7c9
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.account.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value="UserPoint对象", description="")
+public class UserPointVO {
+
+ @ApiModelProperty(value = "总积分")
+ private Integer totalPoint;
+
+ @ApiModelProperty(value = "消费积分数")
+ private BigDecimal shopPoint;
+
+ @ApiModelProperty(value = "返佣积分数")
+ private BigDecimal sharePoint;
+
+ @ApiModelProperty(value = "拉新积分")
+ private BigDecimal pullNewPoint;
+
+ @ApiModelProperty(value = "门店业绩积分")
+ private BigDecimal shopAchievementPoint;
+
+ @ApiModelProperty(value = "门店返佣积分")
+ private BigDecimal shopSharePoint;
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
index e913905..b943e89 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -1,8 +1,10 @@
package com.ruoyi.order.controller;
-import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.service.OrderService;
+import com.ruoyi.order.vo.OrderDetailVO;
+import com.ruoyi.order.vo.OrderVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -13,6 +15,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
+import java.util.List;
/**
* <p>
@@ -31,6 +34,30 @@
/**
+ * 我的订单列表
+ */
+ @ApiOperation(value = "我的订单列表", tags = {"小程序-个人中心-我的订单"})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "订单状态", name = "status", required = true, dataType = "int"),
+ })
+ @GetMapping("/list/{status}")
+ public R<List<OrderVO>> list(@PathVariable("status") Integer status){
+ return R.ok(orderService.getOrderList(status));
+ }
+
+ /**
+ * 订单详情
+ */
+ @ApiOperation(value = "订单详情", tags = {"小程序-订单详情"})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
+ })
+ @GetMapping("/detail/{orderId}")
+ public R<OrderDetailVO> detail(@PathVariable("orderId") Long orderId){
+ return R.ok(orderService.getOrderDetail(orderId));
+ }
+
+ /**
* 扫码校验
*/
@ApiOperation(value = "扫码校验", tags = {"小程序-个人中心-门店管理-扫码核销校验"})
@@ -38,21 +65,35 @@
@ApiImplicitParam(value = "分享id", name = "shareId", required = true, dataType = "int"),
})
@GetMapping("/check/{orderId}/{shopId}")
- public AjaxResult check(@PathVariable("orderId") Integer orderId, @PathVariable("shopId") Integer shopId){
- return AjaxResult.ok(orderService.check(orderId, shopId));
+ public R<Boolean> check(@PathVariable("orderId") Long orderId, @PathVariable("shopId") Long shopId){
+ return R.ok(orderService.check(orderId, shopId));
}
/**
- * 订单详情
+ * 订单核销
*/
- @ApiOperation(value = "订单详情", tags = {"订单详情"})
+ @ApiOperation(value = "订单核销", tags = {"小程序-个人中心-门店管理-扫码核销"})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "核销码", name = "code", required = true, dataType = "String"),
+ })
+ @GetMapping("/writeOff/{code}")
+ public R<Void> writeOff(@PathVariable("code") String code){
+ return R.ok();
+ }
+
+ /**
+ * 取消订单
+ */
+ @ApiOperation(value = "取消订单", tags = {"小程序-个人中心-我的订单-取消订单"})
@ApiImplicitParams({
@ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
})
- @GetMapping("/detail/{orderId}")
- public AjaxResult detail(@PathVariable("orderId") Integer orderId){
- return AjaxResult.success(orderService.getById(orderId));
+ @GetMapping("/cancel/{orderId}")
+ public R<Void> cancel(@PathVariable("orderId") Long orderId){
+ return R.ok();
}
+
+
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
index 541715a..0961a26 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
@@ -1,7 +1,11 @@
package com.ruoyi.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.order.vo.OrderDetailVO;
+import com.ruoyi.order.vo.OrderVO;
import model.Order;
+
+import java.util.List;
/**
* <p>
@@ -12,5 +16,9 @@
* @since 2024-11-21
*/
public interface OrderService extends IService<Order> {
- boolean check(Integer orderId, Integer shopId);
+ List<OrderVO> getOrderList(Integer status);
+
+ OrderDetailVO getOrderDetail(Long orderId);
+
+ boolean check(Long orderId, Long shopId);
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index a969b93..8b83866 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -3,8 +3,13 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.order.mapper.OrderMapper;
import com.ruoyi.order.service.OrderService;
+import com.ruoyi.order.vo.OrderDetailVO;
+import com.ruoyi.order.vo.OrderVO;
import model.Order;
import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
/**
* <p>
@@ -18,7 +23,18 @@
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Override
- public boolean check(Integer orderId, Integer shopId) {
+ public List<OrderVO> getOrderList(Integer status) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public OrderDetailVO getOrderDetail(Long orderId) {
+ return null;
+ }
+
+ @Override
+ public boolean check(Long orderId, Long shopId) {
+ // TODO 待实现
return false;
}
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java
new file mode 100644
index 0000000..eef904e
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderDetailVO.java
@@ -0,0 +1,61 @@
+package com.ruoyi.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "订单明细")
+public class OrderDetailVO {
+ @ApiModelProperty(value = "订单id")
+ private Long id;
+
+ @ApiModelProperty(value = "订单商品")
+ private List<OrderGoodsVO> goodsList;
+
+ @ApiModelProperty(value = "使用积分")
+ private BigDecimal point;
+
+ @ApiModelProperty(value = "收货地址id")
+ private Long addressId;
+
+ @ApiModelProperty(value = "收货联系人")
+ private String recieveName;
+
+ @ApiModelProperty(value = "收货联系电话")
+ private String recievePhone;
+
+ @ApiModelProperty(value = "收货地址")
+ private String recieveAddress;
+
+ @ApiModelProperty(value = "订单编号")
+ private String orderNumber;
+
+ @ApiModelProperty("下单时间")
+ private String createTime;
+
+ @ApiModelProperty(value = "订单总金额")
+ private BigDecimal totalAmount;
+
+ @ApiModelProperty(value = "优惠券名称")
+ private String couponName;
+
+ @ApiModelProperty(value = "参与活动名称")
+ private String activityName;
+
+ @ApiModelProperty(value = "抵扣金额")
+ private BigDecimal couponAmount;
+
+ @ApiModelProperty(value = "快递费")
+ private BigDecimal expressAmount;
+
+ @ApiModelProperty(value = "可获得积分")
+ private BigDecimal pointAmount;
+
+ @ApiModelProperty(value = "实际支付价格")
+ private BigDecimal paymentAmount;
+
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderGoodsVO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderGoodsVO.java
new file mode 100644
index 0000000..e19f665
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderGoodsVO.java
@@ -0,0 +1,32 @@
+package com.ruoyi.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "订单商品")
+public class OrderGoodsVO {
+ @ApiModelProperty(value = "商品id")
+ private Long goodsId;
+
+ @ApiModelProperty(value = "商品名称")
+ private String goodsName;
+
+ @ApiModelProperty(value = "类型(1=服务商品,2=单品商品)")
+ private Integer type;
+
+ @ApiModelProperty(value = "数量")
+ private Integer num;
+
+ @ApiModelProperty(value = "商品图片")
+ private String goodsPic;
+
+ @ApiModelProperty(value = "基础售价")
+ private BigDecimal sellingPrice;
+
+ @ApiModelProperty(value = "划线价")
+ private BigDecimal originalPrice;
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderVO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderVO.java
new file mode 100644
index 0000000..796f3d8
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderVO.java
@@ -0,0 +1,34 @@
+package com.ruoyi.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class OrderVO {
+ @ApiModelProperty(value = "订单id")
+ private Long id;
+
+ @ApiModelProperty(value = "订单编号")
+ private String orderNumber;
+
+ @ApiModelProperty(value = "1待发货2待收货3待使用4已完成待评论5已取消6已退款7售后中8已完成已评论")
+ private Integer orderStatus;
+
+ @ApiModelProperty(value = "商品图片")
+ private List<String> goodsPics;
+
+ @ApiModelProperty(value = "商品名称")
+ private String goodsName;
+
+ @ApiModelProperty(value = "使用积分")
+ private BigDecimal point;
+
+ @ApiModelProperty(value = "实际支付价格")
+ private BigDecimal paymentAmount;
+
+ @ApiModelProperty(value = "商品数量")
+ private Integer num;
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
index 6aa2f8b..b072ab6 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
@@ -12,10 +12,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@@ -49,6 +46,16 @@
}
/**
+ * 预约技师
+ */
+ @PostMapping("/subscribe")
+ @ApiOperation(value = "预约技师", notes = "预约技师", tags = {"小程序-个人中心-门店管理-预约列表-预约技师"})
+ public R<Void> subscribe(@RequestBody TechnicianSubscribe technicianSubscribe){
+ technicianSubscribeService.subscribe(technicianSubscribe);
+ return R.ok();
+ }
+
+ /**
* 取消服务
*/
@GetMapping("/cancel")
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/GoodsStatus.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/GoodsStatus.java
index c17d2e1..1a6702b 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/GoodsStatus.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/GoodsStatus.java
@@ -1,22 +1,18 @@
package com.ruoyi.other.enums;
+import lombok.Getter;
+
+@Getter
public enum GoodsStatus {
DOWN(0, "下架"),
UP(1, "上架");
- private Integer code;
- private String desc;
+ private final Integer code;
+ private final String desc;
GoodsStatus(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
- public Integer getCode() {
- return code;
- }
-
- public String getDesc() {
- return desc;
- }
}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/PhoneType.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/PhoneType.java
index 830d7dd..7fe4fd8 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/PhoneType.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/PhoneType.java
@@ -1,22 +1,18 @@
package com.ruoyi.other.enums;
+import lombok.Getter;
+
+@Getter
public enum PhoneType {
PLATFORM(1, "平台"),
SHOP(2, "门店");
- private Integer code;
- private String desc;
+ private final Integer code;
+ private final String desc;
PhoneType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
- public Integer getCode() {
- return code;
- }
-
- public String getDesc() {
- return desc;
- }
}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/ShareAuditStatus.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/ShareAuditStatus.java
index 16a5617..1f0ce88 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/ShareAuditStatus.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/ShareAuditStatus.java
@@ -1,5 +1,8 @@
package com.ruoyi.other.enums;
+import lombok.Getter;
+
+@Getter
public enum ShareAuditStatus {
WAIT(0, "待审核"),
SUCCESS(1, "审核通过"),
@@ -13,11 +16,4 @@
this.message = message;
}
- public Integer getCode() {
- return code;
- }
-
- public String getMessage() {
- return message;
- }
}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/TechnicianErrorCode.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/TechnicianErrorCode.java
new file mode 100644
index 0000000..50ab4e6
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/enums/TechnicianErrorCode.java
@@ -0,0 +1,18 @@
+package com.ruoyi.other.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum TechnicianErrorCode {
+ TECHNICIAN_ALREADY_SUBSCRIBED(1001, "该技师已被预约"),
+ ;
+
+ private final int code;
+ private final String message;
+
+ TechnicianErrorCode(int code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java
index 2bbdf42..f2e2555 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java
@@ -21,4 +21,5 @@
*/
List<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop(Long userId, Long shopId);
+ void subscribe(TechnicianSubscribe technicianSubscribe);
}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
index a1e6e7f..e1434cb 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
@@ -1,19 +1,26 @@
package com.ruoyi.other.service.impl;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.other.mapper.TechnicianSubscribeMapper;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.other.api.domain.Technician;
import com.ruoyi.other.api.domain.TechnicianSubscribe;
+import com.ruoyi.other.enums.TechnicianErrorCode;
+import com.ruoyi.other.mapper.TechnicianMapper;
+import com.ruoyi.other.mapper.TechnicianSubscribeMapper;
import com.ruoyi.other.service.TechnicianSubscribeService;
import com.ruoyi.other.vo.TechnicianSubscribeVO;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
-import java.util.Collections;
+import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
- * 服务实现类
+ * 服务实现类
* </p>
*
* @author luodangjia
@@ -23,9 +30,35 @@
public class TechnicianSubscribeServiceImpl extends ServiceImpl<TechnicianSubscribeMapper, TechnicianSubscribe> implements TechnicianSubscribeService {
@Resource
private TechnicianSubscribeMapper technicianSubscribeMapper;
+ @Resource
+ private TechnicianMapper technicianMapper;
@Override
public List<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop(Long userId, Long shopId) {
return technicianSubscribeMapper.getTechnicianSubscribeByUserAndShop(userId, shopId);
}
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void subscribe(TechnicianSubscribe technicianSubscribe) {
+ // 创建技师预约单
+ Long technicianId = technicianSubscribe.getTechnicianId();
+ Long userId = SecurityUtils.getUserId();
+ TechnicianSubscribe subscribe = new TechnicianSubscribe();
+ subscribe.setAppUserId(userId);
+ subscribe.setDelFlag(0);
+ subscribe.setCreateTime(LocalDateTime.now());
+ technicianSubscribeMapper.insert(subscribe);
+ // 更新技师状态
+ UpdateWrapper<Technician> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("id", technicianId);
+ updateWrapper.eq("subscribe_status", 1);
+ updateWrapper.eq("status", 2);
+ updateWrapper.set("subscribe_status", 2);
+ updateWrapper.set("create_time", LocalDateTime.now());
+ int update = technicianMapper.update(null, updateWrapper);
+ if (update == 0){
+ throw new ServiceException("该技师已被预约", TechnicianErrorCode.TECHNICIAN_ALREADY_SUBSCRIBED.getCode());
+ }
+ }
}
--
Gitblit v1.7.1