diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/constant/RedisConstants.java b/jzo2o-health/src/main/java/com/jzo2o/health/constant/RedisConstants.java index ab0d4fb..39a7da1 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/constant/RedisConstants.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/constant/RedisConstants.java @@ -10,5 +10,10 @@ public class RedisConstants { /** * 用户端订单滚动分页查询 */ - public static final String ORDER_PAGE_QUERY = "ORDERS:PAGE_QUERY:PAGE_%s"; -} + public static final String ORDER_PAGE_QUERY = "HEALTH:ORDERS:PAGE_QUERY:PAGE_%s"; + + /** + * 用户端下单订单号生成器 + */ + public static final String ORDER_ID_GENERATOR = "HEALTH:ORDERS:GENERATOR"; +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersController.java b/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersController.java index 0c9a0c3..3a724be 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersController.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersController.java @@ -4,6 +4,7 @@ import com.jzo2o.api.trade.enums.PayChannelEnum; import com.jzo2o.health.model.dto.request.PlaceOrderReqDTO; import com.jzo2o.health.model.dto.response.OrdersPayResDTO; import com.jzo2o.health.model.dto.response.PlaceOrderResDTO; +import com.jzo2o.health.service.IOrderCreateService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -19,11 +20,13 @@ import javax.annotation.Resource; @RequestMapping("/user/orders") @Api(tags = "用户端 - 下单支付相关接口") public class OrdersController { + @Resource + private IOrderCreateService orderCreateService; @ApiOperation("下单接口") @PostMapping("/place") public PlaceOrderResDTO place(@RequestBody PlaceOrderReqDTO placeOrderReqDTO) { - return null; + return orderCreateService.placeOrder(placeOrderReqDTO); } @PutMapping("/pay/{id}") @@ -33,7 +36,7 @@ public class OrdersController { @ApiImplicitParam(name = "tradingChannel", value = "支付渠道:ALI_PAY、WECHAT_PAY", required = true, dataTypeClass = PayChannelEnum.class), }) public OrdersPayResDTO pay(@PathVariable("id") Long id, @RequestParam("tradingChannel") PayChannelEnum tradingChannel) { - return null; + return orderCreateService.payOrder(id, tradingChannel); } @GetMapping("/pay/{id}/result") @@ -42,6 +45,6 @@ public class OrdersController { @ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class) }) public OrdersPayResDTO payResult(@PathVariable("id") Long id) { - return null; + return orderCreateService.getPayResult(id); } -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderPayStatusEnum.java b/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderPayStatusEnum.java index 55b4a1a..d4e71f1 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderPayStatusEnum.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderPayStatusEnum.java @@ -1,5 +1,7 @@ package com.jzo2o.health.enums; +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; @@ -16,6 +18,8 @@ public enum OrderPayStatusEnum { REFUND_SUCCESS(3, "退款成功"), REFUND_FAIL(4, "退款失败"); + @EnumValue + @JsonValue private final Integer status; private final String desc; -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderStatusEnum.java b/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderStatusEnum.java index f44ac6e..f27c870 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderStatusEnum.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/enums/OrderStatusEnum.java @@ -1,5 +1,7 @@ package com.jzo2o.health.enums; +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; @@ -15,6 +17,8 @@ public enum OrderStatusEnum { CLOSED(300, "已关闭"), CANCELLED(400, "已取消"); + @EnumValue + @JsonValue private final Integer status; private final String desc; @@ -32,4 +36,4 @@ public enum OrderStatusEnum { } return null; } -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/model/OrderUpdateStatusDTO.java b/jzo2o-health/src/main/java/com/jzo2o/health/model/OrderUpdateStatusDTO.java new file mode 100644 index 0000000..bfabec5 --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/model/OrderUpdateStatusDTO.java @@ -0,0 +1,70 @@ +package com.jzo2o.health.model; + +import com.jzo2o.health.enums.OrderPayStatusEnum; +import com.jzo2o.health.enums.OrderStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 通用订单更新DTO + * @author JIAN + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderUpdateStatusDTO { + /** + * 订单id + */ + private Long id; + + /** + * 原订单状态 + */ + private OrderStatusEnum originStatus; + + /** + * 目标订单状态 + */ + private OrderStatusEnum targetStatus; + + /** + * 支付状态 + */ + private OrderPayStatusEnum payStatus; + + /** + * 支付时间 + */ + private LocalDateTime payTime; + + /** + * 支付服务交易单号 + */ + private Long tradingOrderNo; + + /** + * 第三方支付的交易号 + */ + private String transactionId; + + /** + * 支付服务退款单号 + */ + private Long refundNo; + + /** + * 第三方支付的退款单号 + */ + private String refundId; + + /** + * 支付渠道 + */ + private String tradingChannel; +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Orders.java b/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Orders.java index ac6e61b..c129acd 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Orders.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Orders.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; +import com.jzo2o.health.enums.OrderPayStatusEnum; +import com.jzo2o.health.enums.OrderStatusEnum; +import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -22,6 +25,7 @@ import java.time.LocalDateTime; * @since 2023-11-02 */ @Data +@Builder @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("orders") @@ -32,18 +36,18 @@ public class Orders implements Serializable { /** * 订单id */ - @TableId(value = "id", type = IdType.ASSIGN_ID) + @TableId(value = "id", type = IdType.NONE) private Long id; /** * 订单状态,0:未支付,100:待体检,200:已体检,300:已关闭,400:已取消 */ - private Integer orderStatus; + private OrderStatusEnum orderStatus; /** * 支付状态,0:未支付,1:已支付,2:退款中,3:退款成功,4:退款失败 */ - private Integer payStatus; + private OrderPayStatusEnum payStatus; /** * 套餐id @@ -160,6 +164,4 @@ public class Orders implements Serializable { * 更新时间 */ private LocalDateTime updateTime; - - -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Setmeal.java b/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Setmeal.java index c565d5f..12582d7 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Setmeal.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/model/domain/Setmeal.java @@ -1,16 +1,18 @@ package com.jzo2o.health.model.domain; -import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import java.io.Serializable; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.math.BigDecimal; + /** *

- * + * *

* * @author itcast @@ -55,7 +57,7 @@ public class Setmeal implements Serializable { /** * 套餐价格 */ - private Float price; + private BigDecimal price; /** * 套餐说明 @@ -73,4 +75,4 @@ public class Setmeal implements Serializable { private String img; -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/OrdersResDTO.java b/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/OrdersResDTO.java index 93d6928..a629c91 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/OrdersResDTO.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/OrdersResDTO.java @@ -1,6 +1,8 @@ package com.jzo2o.health.model.dto.response; import com.fasterxml.jackson.annotation.JsonFormat; +import com.jzo2o.health.enums.OrderPayStatusEnum; +import com.jzo2o.health.enums.OrderStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,7 +13,6 @@ import java.time.LocalDateTime; /** * 订单响应 - * * @author itcast * @create 2023/11/3 19:17 **/ @@ -28,14 +29,13 @@ public class OrdersResDTO { * 订单状态,0:未支付,100:待体检,200:已体检,300:已关闭,400:已取消 */ @ApiModelProperty("订单状态,0:未支付,100:待体检,200:已体检,300:已关闭,400:已取消") - private Integer orderStatus; + private OrderStatusEnum orderStatus; /** * 支付状态,0:未支付,1:已支付,2:退款中,3:退款成功,4:退款失败 */ @ApiModelProperty("支付状态,0:未支付,1:已支付,2:退款中,3:退款成功,4:退款失败") - private Integer payStatus; - + private OrderPayStatusEnum payStatus; /** * 套餐id @@ -123,4 +123,4 @@ public class OrdersResDTO { @ApiModelProperty("更新时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCreateService.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCreateService.java new file mode 100644 index 0000000..4fec073 --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCreateService.java @@ -0,0 +1,35 @@ +package com.jzo2o.health.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jzo2o.api.trade.enums.PayChannelEnum; +import com.jzo2o.health.model.domain.Orders; +import com.jzo2o.health.model.dto.request.PlaceOrderReqDTO; +import com.jzo2o.health.model.dto.response.OrdersPayResDTO; +import com.jzo2o.health.model.dto.response.PlaceOrderResDTO; + +/** + * 订单创建相关业务层 + * @author JIAN + */ +public interface IOrderCreateService extends IService { + /** + * 微服务标识 + */ + String PRODUCT_APP_ID = "health.orders"; + + /** + * 用户下单 + */ + PlaceOrderResDTO placeOrder(PlaceOrderReqDTO placeOrderReqDTO); + + /** + * 用户支付(返回支付二维码) + * @param id 本系统的订单id + */ + OrdersPayResDTO payOrder(Long id, PayChannelEnum tradingChannel); + + /** + * 获取指定订单的支付结果 + */ + OrdersPayResDTO getPayResult(Long id); +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrdersCommonService.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrdersCommonService.java new file mode 100644 index 0000000..3f6ddeb --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrdersCommonService.java @@ -0,0 +1,20 @@ +package com.jzo2o.health.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jzo2o.health.model.OrderUpdateStatusDTO; +import com.jzo2o.health.model.domain.Orders; + +/** + *

+ * 订单表 服务类 + *

+ * + * @author itcast + * @since 2023-08-02 + */ +public interface IOrdersCommonService extends IService { + /** + * 更新指定id订单的状态 + */ + Boolean updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO); +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCreateServiceImpl.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCreateServiceImpl.java new file mode 100644 index 0000000..d17d038 --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCreateServiceImpl.java @@ -0,0 +1,210 @@ +package com.jzo2o.health.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import com.jzo2o.api.trade.NativePayApi; +import com.jzo2o.api.trade.TradingApi; +import com.jzo2o.api.trade.dto.request.NativePayReqDTO; +import com.jzo2o.api.trade.dto.response.NativePayResDTO; +import com.jzo2o.api.trade.dto.response.TradingResDTO; +import com.jzo2o.api.trade.enums.PayChannelEnum; +import com.jzo2o.api.trade.enums.TradingStateEnum; +import com.jzo2o.common.expcetions.CommonException; +import com.jzo2o.common.expcetions.DBException; +import com.jzo2o.common.expcetions.ForbiddenOperationException; +import com.jzo2o.common.expcetions.ServerErrorException; +import com.jzo2o.common.utils.BeanUtils; +import com.jzo2o.common.utils.DateUtils; +import com.jzo2o.common.utils.ObjectUtils; +import com.jzo2o.health.constant.RedisConstants; +import com.jzo2o.health.enums.OrderPayStatusEnum; +import com.jzo2o.health.enums.OrderStatusEnum; +import com.jzo2o.health.mapper.OrdersMapper; +import com.jzo2o.health.model.OrderUpdateStatusDTO; +import com.jzo2o.health.model.UserThreadLocal; +import com.jzo2o.health.model.domain.Member; +import com.jzo2o.health.model.domain.Orders; +import com.jzo2o.health.model.domain.Setmeal; +import com.jzo2o.health.model.dto.request.PlaceOrderReqDTO; +import com.jzo2o.health.model.dto.response.OrdersPayResDTO; +import com.jzo2o.health.model.dto.response.PlaceOrderResDTO; +import com.jzo2o.health.properties.TradeProperties; +import com.jzo2o.health.service.IMemberService; +import com.jzo2o.health.service.IOrderCreateService; +import com.jzo2o.health.service.IOrdersCommonService; +import com.jzo2o.health.service.ISetmealService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 订单创建相关业务层 + * @author JIAN + */ +@Slf4j +@Service +public class OrderCreateServiceImpl extends ServiceImpl implements IOrderCreateService { + @Resource + private IMemberService memberService; + @Resource + private ISetmealService setmealService; + @Resource + private IOrdersCommonService ordersCommonService; + @Resource + private TradingApi tradingApi; + @Resource + private NativePayApi nativePayApi; + @Resource + private TradeProperties tradeProperties; + @Resource + private RedisTemplate redisTemplate; + + /** + * 生成订单号(2位年+2位月+2位日+13位序号) + */ + private Long generateOrderId() { + Long idNo = redisTemplate.opsForValue().increment(RedisConstants.ORDER_ID_GENERATOR, 1); + String orderId = DateUtils.format(LocalDateTime.now(), "yyMMdd") + String.format("%013d", idNo); + return Long.valueOf(orderId); + } + + @Override + public PlaceOrderResDTO placeOrder(PlaceOrderReqDTO placeOrderReqDTO) { + Long currentUserId = UserThreadLocal.currentUserId(); + if (ObjectUtils.isEmpty(currentUserId)) { + throw new ForbiddenOperationException("用户信息不存在无法下单"); + } + + Member member = memberService.getById(currentUserId); + if (ObjectUtils.isEmpty(member)) { + throw new ForbiddenOperationException("用户信息不存在无法下单"); + } + + Setmeal setmeal = setmealService.getById(placeOrderReqDTO.getSetmealId()); + if (ObjectUtils.isEmpty(setmeal)) { + throw new ForbiddenOperationException("套餐信息不存在无法下单"); + } + + // 生成订单id + Long orderId = this.generateOrderId(); + if (ObjectUtils.isEmpty(orderId)) { + throw new ServerErrorException("生成订单id失败无法下单"); + } + + if (!SqlHelper.retBool(baseMapper.insert(Orders.builder() + .id(orderId) + .orderStatus(OrderStatusEnum.NO_PAY) + .payStatus(OrderPayStatusEnum.NO_PAY) + .setmealId(setmeal.getId()) + .setmealName(setmeal.getName()) + .setmealPrice(setmeal.getPrice()) + .setmealSex(setmeal.getSex()) + .setmealAge(setmeal.getAge()) + .setmealImg(setmeal.getImg()) + .setmealRemark(setmeal.getRemark()) + .reservationDate(placeOrderReqDTO.getReservationDate()) + .checkupPersonName(placeOrderReqDTO.getCheckupPersonName()) + .checkupPersonSex(placeOrderReqDTO.getCheckupPersonSex()) + .checkupPersonPhone(placeOrderReqDTO.getCheckupPersonPhone()) + .checkupPersonIdcard(placeOrderReqDTO.getCheckupPersonIdcard()) + .memberId(member.getId()) + .memberPhone(member.getPhone()) + .sortBy(DateUtils.toEpochMilli(LocalDateTime.now())) + .build()))) { + throw new DBException("订单表插入失败下单失败"); + } + + return new PlaceOrderResDTO(orderId); + } + + @Override + public OrdersPayResDTO payOrder(Long id, PayChannelEnum tradingChannel) { + Orders orderInfo = baseMapper.selectById(id); + if (ObjectUtils.isEmpty(orderInfo)) { + throw new ForbiddenOperationException("订单不存在无法支付"); + } + + // 初步防止重复发起支付请求 + if (orderInfo.getPayStatus() == OrderPayStatusEnum.PAY_SUCCESS) { + OrdersPayResDTO ordersPayResDTO = BeanUtils.toBean(orderInfo, OrdersPayResDTO.class); + ordersPayResDTO.setProductOrderNo(id); + return ordersPayResDTO; + } + + // 下单 + String tradingChannelOld = orderInfo.getTradingChannel(); + NativePayResDTO nativePayResDTO = nativePayApi.createDownLineTrading(NativePayReqDTO.builder() + .productOrderNo(id) + .productAppId(IOrderCreateService.PRODUCT_APP_ID) + .tradingChannel(tradingChannel) + .tradingAmount(/*orderInfo.getSetmealPrice()*/ new BigDecimal("0.01")) + .memo(orderInfo.getSetmealName()) + .changeChannel(ObjectUtils.isNotEmpty(tradingChannelOld) + && !tradingChannelOld.equals(tradingChannel.name())) + .enterpriseId(tradingChannel == PayChannelEnum.WECHAT_PAY + ? tradeProperties.getWechatEnterpriseId() + : tradeProperties.getAliEnterpriseId()) + .build()); + + if (!lambdaUpdate() + .eq(Orders::getId, id) + .set(Orders::getTradingOrderNo, nativePayResDTO.getTradingOrderNo()) + .set(Orders::getTradingChannel, nativePayResDTO.getTradingChannel()) + .update()) { + log.warn("订单表更新失败(已正常生成支付二维码), 订单id: {}", id); + } + + OrdersPayResDTO ordersPayResDTO = BeanUtils.toBean(nativePayResDTO, OrdersPayResDTO.class); + ordersPayResDTO.setPayStatus(OrderPayStatusEnum.NO_PAY.getStatus()); + return ordersPayResDTO; + } + + @Override + public OrdersPayResDTO getPayResult(Long id) { + Orders orders = baseMapper.selectById(id); + if (ObjectUtils.isEmpty(orders)) { + throw new CommonException("订单不存在"); + } + + // 公共返回参数 + OrdersPayResDTO ordersPayResDTO = BeanUtils.toBean(orders, OrdersPayResDTO.class); + ordersPayResDTO.setProductOrderNo(id); + + // 未支付订单更新状态 + Long tradingOrderNo = orders.getTradingOrderNo(); + if (ObjectUtils.isNotEmpty(tradingOrderNo) + && orders.getPayStatus() == OrderPayStatusEnum.NO_PAY) { + TradingResDTO tradingResDTO = tradingApi.findTradResultByTradingOrderNo(tradingOrderNo); + + // 支付成功 + if (ObjectUtils.isNotEmpty(tradingResDTO) + && tradingResDTO.getTradingState() == TradingStateEnum.YJS) { + + if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder() + .id(id) + .originStatus(OrderStatusEnum.NO_PAY) + .targetStatus(OrderStatusEnum.WAITING_CHECKUP) + .payStatus(OrderPayStatusEnum.PAY_SUCCESS) + .tradingOrderNo(tradingResDTO.getTradingOrderNo()) + .transactionId(tradingResDTO.getTransactionId()) + .tradingChannel(tradingResDTO.getTradingChannel()) + .payTime(LocalDateTime.now()) + .build())) { + throw new DBException("订单表更新失败"); + } + + // 支付成功更新最终响应信息的状态 + ordersPayResDTO.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus()); + } else { + // 未支付成功返回二维码 + ordersPayResDTO.setQrCode(tradingResDTO.getQrCode()); + } + } + + return ordersPayResDTO; + } +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java index ecfbc71..0fb2f68 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java @@ -92,8 +92,8 @@ public class OrderManagerServiceImpl extends ServiceImpl i payInfo.setThirdOrderId(orders.getTransactionId()); adminOrdersDetailResDTO.setPayInfo(payInfo); - Integer orderStatus = orders.getOrderStatus(); - if (OrderStatusEnum.CANCELLED.getStatus().equals(orderStatus)) { + OrderStatusEnum orderStatus = orders.getOrderStatus(); + if (OrderStatusEnum.CANCELLED == orderStatus) { OrdersCancelled cancelInfo = orderCancelService.getById(orders.getId()); // 取消信息 @@ -112,7 +112,7 @@ public class OrderManagerServiceImpl extends ServiceImpl i .build()); payInfo.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus()); - } else if (OrderStatusEnum.CLOSED.getStatus().equals(orderStatus)) { + } else if (OrderStatusEnum.CLOSED == orderStatus) { OrdersCancelled cancelInfo = orderCancelService.getById(orders.getId()); // 取消信息 diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrdersCommonServiceImpl.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrdersCommonServiceImpl.java new file mode 100644 index 0000000..3505d4a --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrdersCommonServiceImpl.java @@ -0,0 +1,36 @@ +package com.jzo2o.health.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jzo2o.health.mapper.OrdersMapper; +import com.jzo2o.health.model.OrderUpdateStatusDTO; +import com.jzo2o.health.model.domain.Orders; +import com.jzo2o.health.service.IOrdersCommonService; +import org.springframework.stereotype.Service; + +/** + *

+ * 订单表 服务实现类 + *

+ * @author itcast + * @since 2023-08-02 + */ +@Service +public class OrdersCommonServiceImpl extends ServiceImpl implements IOrdersCommonService { + @Override + public Boolean updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO) { + return lambdaUpdate() + .eq(Orders::getId, orderUpdateStatusReqDTO.getId()) + .gt(Orders::getMemberId, 0) + .eq(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getOriginStatus()), Orders::getOrderStatus, orderUpdateStatusReqDTO.getOriginStatus()) + .set(Orders::getOrderStatus, orderUpdateStatusReqDTO.getTargetStatus()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayStatus()), Orders::getPayStatus, orderUpdateStatusReqDTO.getPayStatus()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayTime()), Orders::getPayTime, orderUpdateStatusReqDTO.getPayTime()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingOrderNo()), Orders::getTradingOrderNo, orderUpdateStatusReqDTO.getTradingOrderNo()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTransactionId()), Orders::getTransactionId, orderUpdateStatusReqDTO.getTransactionId()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingChannel()), Orders::getTradingChannel, orderUpdateStatusReqDTO.getTradingChannel()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundNo()), Orders::getRefundNo, orderUpdateStatusReqDTO.getRefundNo()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundId()), Orders::getRefundId, orderUpdateStatusReqDTO.getRefundId()) + .update(); + } +} \ No newline at end of file