From ab860e32ad188032ebd9e81a998df753af5094be Mon Sep 17 00:00:00 2001
From: DB <2502523450@qq.com>
Date: Sat, 28 Oct 2023 22:19:05 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9A=E6=97=B6=E5=99=A8;?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=87=8C=E6=99=A8=E5=BA=93=E5=AD=98=E5=90=8C?=
=?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1;=E4=BF=AE=E8=AE=A2=E8=AE=A2?=
=?UTF-8?q?=E5=8D=95=E7=9B=B8=E5=85=B3=E8=BF=94=E5=9B=9E;=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4lettuce=E6=94=B9=E4=B8=BAjedis?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Cpop-Core/pom.xml | 10 ++
.../cpop/mall/web/CpopMallWebApplication.java | 5 +
.../src/main/resources/application-dev.yml | 2 +-
.../src/main/resources/application-prod.yml | 2 +-
.../src/main/resources/application-test.yml | 2 +-
.../mall/business/bo/LogisticsOrderBo.java | 34 ++++++
.../cpop/mall/business/bo/PlaceOrderBo.java | 22 ++--
.../backstage/BackstageOrderController.java | 70 ++++++++---
.../BackstageOrderRefundController.java | 26 ++--
.../controller/mini/MiniOrderController.java | 7 +-
.../com/cpop/mall/business/entity/Order.java | 13 +-
.../mall/business/entity/OrderDetail.java | 13 +-
.../mall/business/service/OrderService.java | 11 +-
.../service/impl/OrderRefundServiceImpl.java | 29 +++--
.../service/impl/OrderServiceImpl.java | 80 +++++++++---
.../service/impl/ProductServiceImpl.java | 2 -
.../task/ProductRecordSyncStockTask.java | 32 +++++
.../mall/business/vo/MiniOrderPageVo.java | 114 ------------------
.../cpop/mall/business/vo/OrderDetailVo.java | 30 +++++
.../cpop/mall/business/vo/OrderPageVo.java | 39 +++---
.../mall/business/vo/OrderRefundPageVo.java | 18 +--
.../cpop/mall/business/vo/ProductPageVo.java | 5 +-
22 files changed, 324 insertions(+), 242 deletions(-)
create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/bo/LogisticsOrderBo.java
delete mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MiniOrderPageVo.java
diff --git a/Cpop-Core/pom.xml b/Cpop-Core/pom.xml
index bb8c504..70d1a9b 100644
--- a/Cpop-Core/pom.xml
+++ b/Cpop-Core/pom.xml
@@ -47,6 +47,16 @@
org.springframework.boot
spring-boot-starter-data-redis
+
+
+ io.lettuce
+ lettuce-core
+
+
+
+
+ redis.clients
+ jedis
diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/java/com/cpop/mall/web/CpopMallWebApplication.java b/Cpop-Mall/Cpop-Mall-Web/src/main/java/com/cpop/mall/web/CpopMallWebApplication.java
index f4168eb..ba6c8c7 100644
--- a/Cpop-Mall/Cpop-Mall-Web/src/main/java/com/cpop/mall/web/CpopMallWebApplication.java
+++ b/Cpop-Mall/Cpop-Mall-Web/src/main/java/com/cpop/mall/web/CpopMallWebApplication.java
@@ -4,10 +4,15 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+/**
+ * @author DB
+ */
@SpringBootApplication(scanBasePackages = {"com.cpop.**"})
@MapperScan("com.cpop.**.mapper")
@EnableAsync
+@EnableScheduling
public class CpopMallWebApplication {
public static void main(String[] args) {
diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml
index 95ac6ca..2a50ba5 100644
--- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml
+++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml
@@ -28,7 +28,7 @@ spring:
password:
#连接超时
timeout: 5000
- lettuce:
+ jedis:
pool:
#
min-idle: 0
diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml
index bcb1eb1..3554e3b 100644
--- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml
+++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml
@@ -29,7 +29,7 @@ spring:
password: Jambox.123*
#连接超时
timeout: 5000
- lettuce:
+ jedis:
pool:
#
min-idle: 0
diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml
index bf35cd7..4b126bb 100644
--- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml
+++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml
@@ -30,7 +30,7 @@ spring:
password: Jambox.123*
#连接超时
timeout: 5000
- lettuce:
+ jedis:
pool:
#
min-idle: 0
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/LogisticsOrderBo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/LogisticsOrderBo.java
new file mode 100644
index 0000000..c767107
--- /dev/null
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/LogisticsOrderBo.java
@@ -0,0 +1,34 @@
+package com.cpop.mall.business.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author DB
+ * @Description:
+ * @create 2023-10-28 15:25
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "商城物流订单")
+public class LogisticsOrderBo implements Serializable {
+
+ /**
+ * 订单主键
+ */
+ @NotBlank(message = "订单主键不能为空")
+ @ApiModelProperty(value = "订单主键",required = true)
+ private String id;
+
+ /**
+ * 物流订单号
+ */
+ @NotBlank(message = "物流订单号不能为空")
+ @ApiModelProperty(value = "物流订单号",required = true)
+ private String logisticsOrder;
+}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/PlaceOrderBo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/PlaceOrderBo.java
index 2e84a82..b9a4b31 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/PlaceOrderBo.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/PlaceOrderBo.java
@@ -1,5 +1,6 @@
package com.cpop.mall.business.bo;
+import com.cpop.core.annontation.StringArrayConvert;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -49,13 +50,6 @@ public class PlaceOrderBo implements Serializable {
@ApiModelProperty(value = "品牌id",required = true)
private String brandId;
- /**
- * 店铺(校区)id
- */
- @NotBlank(message = "店铺(校区)id不能为空")
- @ApiModelProperty(value = "店铺(校区)id",required = true)
- private String storeId;
-
/**
* 下单人真实姓名
*/
@@ -76,6 +70,13 @@ public class PlaceOrderBo implements Serializable {
@ApiModelProperty(value = "收货人电话",required = true)
private String receivePhone;
+ /**
+ * 当前订单所有产品名
+ */
+ @StringArrayConvert
+ @ApiModelProperty(value = "当前订单所有产品名")
+ private String productNames;
+
/**
* 收货地址
*/
@@ -137,5 +138,12 @@ public class PlaceOrderBo implements Serializable {
@NotNull(message = "下单数量不能为空")
@ApiModelProperty(value = "下单数量",required = true)
private Integer number;
+
+ /**
+ * 店铺(校区)id
+ */
+ //TODO:@NotBlank(message = "店铺(校区)id不能为空")
+ @ApiModelProperty(value = "店铺(校区)id",required = true)
+ private String storeId;
}
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderController.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderController.java
index a90f32a..baf19bf 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderController.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderController.java
@@ -1,27 +1,19 @@
package com.cpop.mall.business.controller.backstage;
import com.cpop.core.base.R;
+import com.cpop.mall.business.bo.LogisticsOrderBo;
import com.cpop.mall.business.bo.OrderPageBo;
-import com.cpop.mall.business.bo.ProductPageBo;
-import com.cpop.mall.business.vo.OrderPageVo;
-import com.cpop.mall.business.vo.ProductPageVo;
-import com.mybatisflex.core.paginate.Page;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.beans.factory.annotation.Autowired;
-import com.cpop.mall.business.entity.Order;
import com.cpop.mall.business.service.OrderService;
-import org.springframework.web.bind.annotation.RestController;
+import com.cpop.mall.business.vo.OrderPageVo;
+import com.mybatisflex.core.paginate.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import java.io.Serializable;
-import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import static com.cpop.mall.business.entity.table.OrderTableDef.ORDER;
/**
* 商城订单表 控制层。
@@ -51,4 +43,50 @@ public class BackstageOrderController {
return R.ok(page);
}
+ /**
+ * @descriptions 输入物流订单
+ * @author DB
+ * @date 2023/10/12 10:48
+ * @param bo 请求参数
+ * @return: com.cpop.core.base.R
+ */
+ @ApiOperation("输入物流订单")
+ @PostMapping("/inputLogisticsOrder")
+ public R inputLogisticsOrder(@RequestBody @Validated LogisticsOrderBo bo) {
+ orderService.inputLogisticsOrder(bo);
+ return R.ok();
+ }
+
+ /**
+ * @Description: 转变订单状态
+ * @param id 订单id
+ * @param orderStatus 订单状态
+ * @return R
+ * @Author DB
+ * @Date: 2023/10/28 15:49
+ */
+ @PutMapping("/changeOrderStatus")
+ @ApiOperation("转变订单状态")
+ public R changeOrderStatus(@RequestParam("id") @ApiParam(value = "订单id",required = true) String id,
+ @RequestParam("orderStatus") @ApiParam(value = "订单状态") Integer orderStatus) {
+ orderService.updateChain()
+ .set(ORDER.ORDER_STATUS, orderStatus + 1)
+ .where(ORDER.ID.eq(id)).update();
+ return R.ok();
+ }
+
+ /**
+ * @Description: 删除订单
+ * @param id 主键
+ * @return R
+ * @Author DB
+ * @Date: 2023/10/28 16:20
+ */
+ @ApiOperation("删除订单")
+ @DeleteMapping("/removeOrderById/{id}")
+ public R removeOrderById(@PathVariable String id) {
+ orderService.removeById(id);
+ return R.ok();
+ }
+
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderRefundController.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderRefundController.java
index 910f79b..55e9833 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderRefundController.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderRefundController.java
@@ -3,27 +3,15 @@ package com.cpop.mall.business.controller.backstage;
import com.cpop.core.base.R;
import com.cpop.mall.business.bo.OrderRefundPageBo;
import com.cpop.mall.business.bo.OrderRejectRefundBo;
-import com.cpop.mall.business.bo.ProductPageBo;
-import com.cpop.mall.business.vo.OrderRefundPageVo;
-import com.cpop.mall.business.vo.ProductPageVo;
-import com.mybatisflex.core.paginate.Page;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.beans.factory.annotation.Autowired;
-import com.cpop.mall.business.entity.OrderRefund;
import com.cpop.mall.business.service.OrderRefundService;
-import org.springframework.web.bind.annotation.RestController;
+import com.cpop.mall.business.vo.OrderRefundPageVo;
+import com.mybatisflex.core.paginate.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import java.io.Serializable;
-import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
/**
* 商城订单退款记录表 控制层。
@@ -48,7 +36,7 @@ public class BackstageOrderRefundController {
*/
@GetMapping("/getOrderRefundPage")
@ApiOperation("分页查询商城-退款列表")
- public R> getOrderRefundPage(@RequestBody @ApiParam("分页参数") OrderRefundPageBo bo) {
+ public R> getOrderRefundPage(@ApiParam("分页参数") OrderRefundPageBo bo) {
Page page = orderRefundService.getOrderRefundPage(bo);
return R.ok(page);
}
@@ -74,7 +62,7 @@ public class BackstageOrderRefundController {
* @param bo 请求参数
* @return: com.cpop.core.base.R
*/
- @PutMapping("/rejectRefund")
+ @PostMapping("/rejectRefund")
@ApiOperation("拒绝退款")
public R rejectRefund(@RequestBody @Validated OrderRejectRefundBo bo) {
orderRefundService.rejectRefund(bo);
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/mini/MiniOrderController.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/mini/MiniOrderController.java
index e35a8c1..6b7c58f 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/mini/MiniOrderController.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/mini/MiniOrderController.java
@@ -3,7 +3,10 @@ package com.cpop.mall.business.controller.mini;
import com.cpop.common.utils.bean.BeanUtils;
import com.cpop.core.base.R;
import com.cpop.core.utils.SpringUtils;
-import com.cpop.mall.business.bo.*;
+import com.cpop.mall.business.bo.OrderApplyRefundBo;
+import com.cpop.mall.business.bo.OrderEvaluateBo;
+import com.cpop.mall.business.bo.OrderPageBo;
+import com.cpop.mall.business.bo.PlaceOrderBo;
import com.cpop.mall.business.entity.OrderEvaluate;
import com.cpop.mall.business.service.OrderEvaluateService;
import com.cpop.mall.business.service.OrderService;
@@ -40,7 +43,7 @@ public class MiniOrderController {
* @return: com.cpop.core.base.R>
*/
@GetMapping("/getOrderPage")
- @ApiOperation("我的订单列表")
+ @ApiOperation("小程序-我的订单列表")
public R> getOrderPage(@ApiParam("分页参数") OrderPageBo bo) {
Page page = orderService.getOrderPage(bo);
return R.ok(page);
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/Order.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/Order.java
index edd4e73..74d6b96 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/Order.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/Order.java
@@ -6,14 +6,12 @@ import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
/**
* 商城订单表 实体类。
*
@@ -60,11 +58,6 @@ public class Order extends BaseEntity implements Serializable {
*/
private String brandId;
- /**
- * 店铺(校区)id
- */
- private String storeId;
-
/**
* 模板id
*/
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/OrderDetail.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/OrderDetail.java
index 3908d0b..7329aac 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/OrderDetail.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/OrderDetail.java
@@ -6,15 +6,11 @@ import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
-import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
/**
* 商城订单详情表 实体类。
@@ -57,6 +53,11 @@ public class OrderDetail extends BaseEntity implements Serializable {
*/
private Integer number;
+ /**
+ * 店铺(校区)id
+ */
+ private String storeId;
+
/**
* 逻辑删除(0否1是)
*/
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderService.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderService.java
index e6e9a7a..302d983 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderService.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderService.java
@@ -1,12 +1,13 @@
package com.cpop.mall.business.service;
+import com.cpop.mall.business.bo.LogisticsOrderBo;
import com.cpop.mall.business.bo.OrderApplyRefundBo;
import com.cpop.mall.business.bo.OrderPageBo;
import com.cpop.mall.business.bo.PlaceOrderBo;
+import com.cpop.mall.business.entity.Order;
import com.cpop.mall.business.vo.OrderPageVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
-import com.cpop.mall.business.entity.Order;
/**
* 商城订单表 服务层。
@@ -61,5 +62,11 @@ public interface OrderService extends IService {
*/
void cancelOrder(String orderId);
-
+ /**
+ * @Description: 输入物流订单
+ * @param bo 请求参数
+ * @Author DB
+ * @Date: 2023/10/28 15:27
+ */
+ void inputLogisticsOrder(LogisticsOrderBo bo);
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java
index 50e0492..24a96d3 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java
@@ -8,14 +8,15 @@ import com.cpop.core.utils.sql.SqlUtils;
import com.cpop.mall.business.bo.OrderRefundPageBo;
import com.cpop.mall.business.bo.OrderRejectRefundBo;
import com.cpop.mall.business.entity.Order;
+import com.cpop.mall.business.entity.OrderRefund;
+import com.cpop.mall.business.mapper.OrderRefundMapper;
+import com.cpop.mall.business.service.OrderRefundService;
import com.cpop.mall.business.service.OrderService;
import com.cpop.mall.business.vo.OrderRefundPageVo;
import com.cpop.mall.framework.handler.WxPayHandler;
import com.cpop.system.business.entity.ProfitSharing;
import com.cpop.system.business.service.ProfitSharingService;
import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
-import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReturnRequest;
-import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReturnResult;
import com.github.binarywang.wxpay.bean.request.WxPayRefundV3Request;
import com.github.binarywang.wxpay.bean.result.WxPayRefundV3Result;
import com.github.binarywang.wxpay.exception.WxPayException;
@@ -23,9 +24,6 @@ import com.github.binarywang.wxpay.service.WxPayService;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
-import com.cpop.mall.business.entity.OrderRefund;
-import com.cpop.mall.business.mapper.OrderRefundMapper;
-import com.cpop.mall.business.service.OrderRefundService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -35,7 +33,6 @@ import static com.cpop.mall.business.entity.table.OrderRefundTableDef.ORDER_REFU
import static com.cpop.mall.business.entity.table.OrderTableDef.ORDER;
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
import static com.cpop.system.business.entity.table.ProfitSharingTableDef.PROFIT_SHARING;
-import static com.cpop.system.business.entity.table.StoreTableDef.STORE;
/**
* 商城订单退款记录表 服务层实现。
@@ -122,22 +119,28 @@ public class OrderRefundServiceImpl extends ServiceImpl getOrderRefundPage(OrderRefundPageBo bo) {
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
+ QueryWrapper queryWrapper = QueryWrapper.create();
+ if (null != bo.getRefundStatus()) {
+ if (-1 == bo.getRefundStatus()) {
+ queryWrapper.and(ORDER_REFUND.REFUND_STATUS.in(1, 2));
+ } else {
+ queryWrapper.and(ORDER_REFUND.REFUND_STATUS.eq(bo.getRefundStatus()));
+ }
+ }
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
- QueryWrapper.create().select(ORDER_REFUND.REFUND_STATUS,ORDER_REFUND.REFUND_REASON,ORDER_REFUND.ID,ORDER_REFUND.ORDER_ID,ORDER_REFUND.CREATE_TIME)
+ queryWrapper.select(ORDER_REFUND.REFUND_STATUS,ORDER_REFUND.REFUND_REASON,ORDER_REFUND.ID,ORDER_REFUND.ORDER_ID,ORDER_REFUND.CREATE_TIME)
//订单相关参数
- .select(ORDER.ORDER_STATUS,ORDER.OUT_ORDER_NO,ORDER.PRODUCT_NAMES,ORDER.TOTAL_AMOUNT,ORDER.PAY_USER_NAME,ORDER.BRAND_ID,
- ORDER.STORE_ID,ORDER.RECEIVE_PHONE,ORDER.RECEIVE_ADDRESS,ORDER.LOGISTICS_ORDER,ORDER.REMARKS)
+ .select(ORDER.ORDER_STATUS,ORDER.OUT_ORDER_NO,ORDER.PRODUCT_NAMES,ORDER.TOTAL_AMOUNT,ORDER.PAY_USER_NAME,ORDER.BRAND_ID,ORDER.RECEIVE_NAME,
+ ORDER.RECEIVE_PHONE,ORDER.RECEIVE_ADDRESS,ORDER.LOGISTICS_ORDER,ORDER.REMARKS)
//品牌/店铺或校区
- .select(BRAND.BRAND_NAME,STORE.STORE_NAME)
+ .select(BRAND.BRAND_NAME)
.from(ORDER_REFUND)
.leftJoin(ORDER).on(ORDER.ID.eq(ORDER_REFUND.ORDER_ID))
.leftJoin(SYS_USER).on(SYS_USER.ID.eq(ORDER.PAY_USER_ID))
.leftJoin(BRAND).on(BRAND.ID.eq(ORDER.BRAND_ID))
- .leftJoin(STORE).on(STORE.ID.eq(ORDER.STORE_ID))
.and(ORDER.PRODUCT_NAMES.like(bo.getProductName()))
.and(ORDER.PAY_USER_NAME.like(bo.getPayUserName()))
- .and(SYS_USER.PHONE_NUMBER.eq(bo.getPayUserPhone()))
- .and(ORDER_REFUND.REFUND_STATUS.eq(bo.getRefundStatus())),
+ .and(SYS_USER.PHONE_NUMBER.eq(bo.getPayUserPhone())),
OrderRefundPageVo.class);
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderServiceImpl.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderServiceImpl.java
index 40dd4b7..bf3dd08 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderServiceImpl.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderServiceImpl.java
@@ -5,36 +5,30 @@ import com.cpop.common.utils.StringUtils;
import com.cpop.common.utils.bean.BeanUtils;
import com.cpop.common.utils.ip.IpUtils;
import com.cpop.core.base.entity.PageDomain;
-import com.cpop.core.base.enums.OrderSource;
import com.cpop.core.base.enums.UserType;
import com.cpop.core.base.exception.ServiceException;
import com.cpop.core.service.RedisService;
import com.cpop.core.utils.SecurityUtils;
import com.cpop.core.utils.SpringUtils;
import com.cpop.core.utils.sql.SqlUtils;
+import com.cpop.mall.business.bo.LogisticsOrderBo;
import com.cpop.mall.business.bo.OrderApplyRefundBo;
import com.cpop.mall.business.bo.OrderPageBo;
import com.cpop.mall.business.bo.PlaceOrderBo;
import com.cpop.mall.business.dto.WxPayGoodsDetailDto;
import com.cpop.mall.business.entity.*;
+import com.cpop.mall.business.mapper.OrderMapper;
import com.cpop.mall.business.service.*;
import com.cpop.mall.business.vo.OrderPageVo;
-import com.cpop.mall.framework.handler.WxPayHandler;
import com.cpop.mall.framework.constant.MallRedisConstant;
-import com.cpop.system.business.entity.ProfitSharing;
-import com.cpop.system.business.service.ProfitSharingService;
+import com.cpop.mall.framework.handler.WxPayHandler;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver;
-import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingRequest;
-import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingResult;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
-import com.cpop.mall.business.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -47,10 +41,11 @@ import java.util.stream.Collectors;
import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER;
import static com.cpop.mall.business.entity.table.OrderDetailTableDef.ORDER_DETAIL;
+import static com.cpop.mall.business.entity.table.OrderRefundTableDef.ORDER_REFUND;
import static com.cpop.mall.business.entity.table.OrderTableDef.ORDER;
import static com.cpop.mall.business.entity.table.ProductRecordTableDef.PRODUCT_RECORD;
import static com.cpop.mall.business.entity.table.ProductTableDef.PRODUCT;
-import static com.cpop.system.business.entity.table.ProfitSharingTableDef.PROFIT_SHARING;
+import static com.cpop.system.business.entity.table.StoreTableDef.STORE;
/**
@@ -89,7 +84,7 @@ public class OrderServiceImpl extends ServiceImpl implements
queryWrapper.where(ORDER.PAY_USER_ID.eq(loginUserInfo.getString("userId")));
}
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
- return this.mapper.paginateWithRelationsAs(Page.of(pageDomain.getPageNum(),pageDomain.getPageSize()),
+ return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(),pageDomain.getPageSize()),
queryWrapper
.select(ORDER.ALL_COLUMNS)
.from(ORDER)
@@ -100,7 +95,23 @@ public class OrderServiceImpl extends ServiceImpl implements
//订单状态
.and(ORDER.ORDER_STATUS.eq(bo.getOrderStatus()))
.orderBy(ORDER.CREATE_TIME.desc()),
- OrderPageVo.class);
+ OrderPageVo.class,
+ //子查询
+ item -> item.field(OrderPageVo::getDetailList)
+ .queryWrapper(pageVo -> queryChain()
+ //产品
+ .select(PRODUCT.PRODUCT_NAME, PRODUCT.PIC_URL, PRODUCT.PIC_DETAIL_URL)
+ //订单详情
+ .select(ORDER_DETAIL.ORDER_ID, ORDER_DETAIL.PRODUCT_RECORD_ID, ORDER_DETAIL.AMOUNT, ORDER_DETAIL.POINT, ORDER_DETAIL.STORE_ID)
+ //规格
+ .select(PRODUCT_RECORD.RECORD_NAMES)
+ //校区
+ .select(STORE.STORE_NAME)
+ .from(ORDER_DETAIL)
+ .leftJoin(PRODUCT_RECORD).on(PRODUCT_RECORD.ID.eq(ORDER_DETAIL.PRODUCT_RECORD_ID))
+ .leftJoin(PRODUCT).on(PRODUCT.ID.eq(PRODUCT_RECORD.PRODUCT_ID))
+ .leftJoin(STORE).on(STORE.ID.eq(ORDER_DETAIL.STORE_ID))
+ .where(ORDER_DETAIL.ORDER_ID.eq(pageVo.getId()))));
}
/**
@@ -163,7 +174,7 @@ public class OrderServiceImpl extends ServiceImpl implements
return wxPayService.createOrder(orderRequest);
} else {
//TODO:积分支付直接扣库存
- return null;
+ return pointPay(recordNumIsEnough, order.getId());
}
} catch (Exception e){
//回滚库存
@@ -175,12 +186,25 @@ public class OrderServiceImpl extends ServiceImpl implements
}
}
- private void pointPay(Map recordNumIsEnough){
- /*List productRecords = productRecordService.listByIds(orderDetails.stream().map(OrderDetail::getProductRecordId).collect(Collectors.toSet()));
+ /**
+ * @Description: 积分支付
+ * @param recordNumIsEnough
+ * @return
+ * @Author DB
+ * @Date: 2023/10/28 9:33
+ */
+ private Object pointPay(Map recordNumIsEnough,String orderId){
+ ProductRecordService productRecordService = SpringUtils.getBean(ProductRecordService.class);
+ List productRecords = productRecordService.listByIds(recordNumIsEnough.keySet());
productRecords.forEach(item -> {
- item.setRecordNum(item.getRecordNum() - orderNumMap.get(item.getId()));
+ item.setRecordNum(item.getRecordNum() - recordNumIsEnough.get(item.getId()));
});
- productRecordService.updateBatch(productRecords);*/
+ productRecordService.updateBatch(productRecords);
+ //TODO:通知到云?
+ //修改订单状态
+ return this.updateChain()
+ .set(ORDER.ORDER_STATUS, 3).where(ORDER.ID.eq(orderId)).update();
+
}
/**
@@ -235,9 +259,16 @@ public class OrderServiceImpl extends ServiceImpl implements
*/
@Override
public void applyRefund(OrderApplyRefundBo bo) {
+ //查询是否有进行中的退款申请
+ OrderRefundService orderRefundService = SpringUtils.getBean(OrderRefundService.class);
+ long applying = orderRefundService.queryChain().where(ORDER_REFUND.ORDER_ID.eq(bo.getOrderId()))
+ .and(ORDER_REFUND.REFUND_STATUS.eq(0)).count();
+ if (applying > 0) {
+ throw new ServiceException("你已申请此订单退款,现在暂在处理中,如需跟多信息请和客服联系");
+ }
OrderRefund orderRefund = BeanUtils.mapToClass(bo, OrderRefund.class);
orderRefund.setRefundStatus(0);
- SpringUtils.getBean(OrderRefundService.class).save(orderRefund);
+ orderRefundService.save(orderRefund);
//修改订单状态
this.updateChain().set(ORDER.ORDER_STATUS, 3).where(ORDER.ID.eq(bo.getOrderId())).update();
}
@@ -320,4 +351,17 @@ public class OrderServiceImpl extends ServiceImpl implements
redisService.longIncrement(MallRedisConstant.STOCK_RECORD_NUM + key, value.longValue());
});
}
+
+ /**
+ * @Description: 输入物流订单
+ * @param bo 请求参数
+ * @Author DB
+ * @Date: 2023/10/28 15:27
+ */
+ @Override
+ public void inputLogisticsOrder(LogisticsOrderBo bo) {
+ this.updateChain().set(ORDER.ORDER_STATUS, 2)
+ .set(ORDER.LOGISTICS_ORDER, bo.getLogisticsOrder())
+ .where(ORDER.ID.eq(bo.getId())).update();
+ }
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/ProductServiceImpl.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/ProductServiceImpl.java
index abd8c53..76f3a76 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/ProductServiceImpl.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/ProductServiceImpl.java
@@ -1,12 +1,10 @@
package com.cpop.mall.business.service.impl;
import com.alibaba.fastjson.JSONObject;
-import com.cpop.common.constant.Constants;
import com.cpop.common.utils.StringUtils;
import com.cpop.common.utils.bean.BeanUtils;
import com.cpop.core.base.entity.PageDomain;
import com.cpop.core.base.enums.SourceType;
-import com.cpop.core.base.enums.UserType;
import com.cpop.core.utils.SecurityUtils;
import com.cpop.core.utils.SpringUtils;
import com.cpop.core.utils.sql.SqlUtils;
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/task/ProductRecordSyncStockTask.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/task/ProductRecordSyncStockTask.java
index 9107951..87aa225 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/task/ProductRecordSyncStockTask.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/task/ProductRecordSyncStockTask.java
@@ -1,9 +1,41 @@
package com.cpop.mall.business.task;
+import com.cpop.core.service.RedisService;
+import com.cpop.core.utils.SpringUtils;
+import com.cpop.mall.business.entity.ProductRecord;
+import com.cpop.mall.business.service.ProductRecordService;
+import com.cpop.mall.framework.constant.MallRedisConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
/**
* @author DB
* @createTime 2023/10/27 17:26
* @description 凌晨同步库存任务
*/
+
+@Component
+@Slf4j
public class ProductRecordSyncStockTask {
+
+ /**
+ * @Description: 每天1点05分进行库存同步
+ * @Author DB
+ * @Date: 2023/10/28 10:08
+ */
+ @Scheduled(cron="0 5 1 * * ?")
+ public void syncMysqlStockToRedis(){
+ log.info("===============================开始<-库存信息同步->开始===============================");
+ //获取所有库存
+ List productRecords = SpringUtils.getBean(ProductRecordService.class).list();
+ RedisService redisService = SpringUtils.getBean(RedisService.class);
+ productRecords.forEach(item->{
+ redisService.setCacheObject(MallRedisConstant.STOCK_RECORD_NUM + item.getProductId(), item.getRecordNum());
+ log.info("商品记录id为:{};商品库存为:{}", item.getProductId(), item.getRecordNum());
+ });
+ log.info("===============================结束<-库存信息结束->结束===============================");
+ }
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MiniOrderPageVo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MiniOrderPageVo.java
deleted file mode 100644
index 2bee6bf..0000000
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MiniOrderPageVo.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.cpop.mall.business.vo;
-
-import com.mybatisflex.annotation.RelationOneToMany;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * @author DB
- * @createTime 2023/10/28 0:28
- * @description
- */
-@Data
-@Accessors(chain = true)
-@ApiModel(value = "小程序商城订单分页返回对象")
-public class MiniOrderPageVo implements Serializable {
- /**
- * 主键
- */
- @ApiModelProperty("主键")
- private String id;
-
- /**
- * 订单状态(0:待付款;1:待发货;2:待确认;3:已完成;4:退款/售后中)
- */
- @ApiModelProperty("订单状态(0:待付款;1:待发货;2:待确认;3:已完成;4:退款/售后中)")
- private Integer orderStatus;
-
- /**
- * 外部订单号
- */
- @ApiModelProperty("外部订单号")
- private String outOrderNo;
-
- /**
- * 总金额
- */
- @ApiModelProperty("总金额")
- private BigDecimal totalAmount;
-
- /**
- * 总积分
- */
- @ApiModelProperty("总积分")
- private Long totalPoint;
-
- /**
- * 品牌id
- */
- @ApiModelProperty("品牌id")
- private String brandId;
-
- /**
- * 店铺(校区)id
- */
- @ApiModelProperty("店铺(校区)id")
- private String storeId;
-
- /**
- * 商品名
- */
- @ApiModelProperty("商品名")
- private String productNames;
-
- /**
- * 下单用户id
- */
- @ApiModelProperty("下单用户id")
- private String payUserId;
-
- /**
- * 收货人名
- */
- @ApiModelProperty("收货人名")
- private String receiveName;
-
- /**
- * 收货人电话
- */
- @ApiModelProperty("收货人电话")
- private String receivePhone;
-
- /**
- * 收货地址
- */
- @ApiModelProperty("收货地址")
- private String receiveAddress;
-
- /**
- * 物流订单号
- */
- @ApiModelProperty("物流订单号")
- private String logisticsOrder;
-
- /**
- * 备注
- */
- @ApiModelProperty("备注")
- private String remarks;
-
- /**
- * 订单详情vo
- */
- @ApiModelProperty("订单详情")
- @RelationOneToMany(selfField = "id",
- targetField = "orderId",
- targetTable = "cp_mall_order_detail")
- private List detailList;
-}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderDetailVo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderDetailVo.java
index dad31c1..e6a7dd0 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderDetailVo.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderDetailVo.java
@@ -36,6 +36,18 @@ public class OrderDetailVo implements Serializable {
@ApiModelProperty("商品规格")
private String recordNames;
+ /**
+ * 店铺(校区)id
+ */
+ @ApiModelProperty("店铺(校区)id")
+ private String storeId;
+
+ /**
+ * 店铺名
+ */
+ @ApiModelProperty("店铺名")
+ private String storeName;
+
/**
* 金额
*/
@@ -47,4 +59,22 @@ public class OrderDetailVo implements Serializable {
*/
@ApiModelProperty("积分")
private Integer point;
+
+ /**
+ * 积分
+ */
+ @ApiModelProperty("产品名")
+ private String productName;
+
+ /**
+ * 积分
+ */
+ @ApiModelProperty("微缩图")
+ private String picUrl;
+
+ /**
+ * 积分
+ */
+ @ApiModelProperty("详情图")
+ private String picDetailUrl;
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderPageVo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderPageVo.java
index 9b684c2..56d2c71 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderPageVo.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderPageVo.java
@@ -1,8 +1,6 @@
package com.cpop.mall.business.vo;
-import com.mybatisflex.annotation.Id;
-import com.mybatisflex.annotation.RelationOneToMany;
-import com.mybatisflex.annotation.RelationOneToOne;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -10,6 +8,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
+import java.time.LocalDateTime;
import java.util.List;
/**
@@ -59,16 +58,10 @@ public class OrderPageVo implements Serializable {
private String brandId;
/**
- * 店铺(校区)id
+ * 支付类型
*/
- @ApiModelProperty("店铺(校区)id")
- private String storeId;
-
- /**
- * 商品名
- */
- @ApiModelProperty("商品名")
- private String productNames;
+ @ApiModelProperty("支付类型")
+ private Integer payType;
/**
* 下单用户id
@@ -76,6 +69,12 @@ public class OrderPageVo implements Serializable {
@ApiModelProperty("下单用户id")
private String payUserId;
+ /**
+ * 下单用户名
+ */
+ @ApiModelProperty("下单用户名")
+ private String payUserName;
+
/**
* 收货人名
*/
@@ -100,18 +99,28 @@ public class OrderPageVo implements Serializable {
@ApiModelProperty("物流订单号")
private String logisticsOrder;
+ /**
+ * 商品名
+ */
+ @ApiModelProperty("商品名")
+ private String productNames;
+
/**
* 备注
*/
@ApiModelProperty("备注")
private String remarks;
+ /**
+ * 下单时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+ @ApiModelProperty("下单时间")
+ private LocalDateTime createTime;
+
/**
* 订单详情vo
*/
@ApiModelProperty("订单详情")
- @RelationOneToMany(selfField = "id",
- targetField = "orderId",
- targetTable = "cp_mall_order_detail")
private List detailList;
}
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderRefundPageVo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderRefundPageVo.java
index 155ba8f..f73d125 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderRefundPageVo.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderRefundPageVo.java
@@ -68,30 +68,24 @@ public class OrderRefundPageVo implements Serializable {
@ApiModelProperty("品牌id")
private String brandId;
- /**
- * 店铺(校区)id
- */
- @ApiModelProperty("店铺(校区)id")
- private String storeId;
-
/**
* 品牌名
*/
@ApiModelProperty("品牌名")
private String brandName;
- /**
- * 店铺(校区)名
- */
- @ApiModelProperty("店铺(校区)名")
- private String storeName;
-
/**
* 下单用户id
*/
@ApiModelProperty("下单用户id")
private String payUserId;
+ /**
+ * 下单用户
+ */
+ @ApiModelProperty("下单用户")
+ private String payUserName;
+
/**
* 收货人名
*/
diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/ProductPageVo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/ProductPageVo.java
index 611c40a..1348d10 100644
--- a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/ProductPageVo.java
+++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/ProductPageVo.java
@@ -1,6 +1,5 @@
package com.cpop.mall.business.vo;
-import com.cpop.mall.business.entity.ProductSpecification;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mybatisflex.annotation.RelationOneToMany;
import io.swagger.annotations.ApiModel;
@@ -132,12 +131,12 @@ public class ProductPageVo implements Serializable {
* 交易数量
*/
@ApiModelProperty("交易数量")
- private Long tradeNum;
+ private Long tradeNum = 0L;
/**
* 交易金额
*/
@ApiModelProperty("交易金额")
- private BigDecimal tradePrice;
+ private BigDecimal tradePrice = BigDecimal.ZERO;
}
}