太空舱订单逻辑处理
This commit is contained in:
@ -120,6 +120,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在");
|
||||
//========== 用户余额明细 1-004-016-000 =============
|
||||
ErrorCode ORDER_SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_016_001, "太空舱订单不存在");
|
||||
ErrorCode ORDER_SPACE_CAPSULE_ERREO = new ErrorCode(1_004_016_002, "太空舱订单状态非法");
|
||||
|
||||
ErrorCode STORE_BUSINESS_NOT_EXISTS = new ErrorCode(1_004_017_001, "超市营业统计不存在");
|
||||
}
|
||||
|
@ -54,15 +54,12 @@ public class OrderSpaceCapsuleSaveReqVO {
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "消费前的余额", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "消费前的余额不能为空")
|
||||
private BigDecimal startMoney;
|
||||
|
||||
@Schema(description = "消费后的余额", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "消费后的余额不能为空")
|
||||
private BigDecimal endMoney;
|
||||
|
||||
@Schema(description = "支付方式", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "支付方式不能为空")
|
||||
private String payMethods;
|
||||
|
||||
}
|
@ -36,7 +36,7 @@ public class AppSpaceCapsuleController {
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得太空舱分页")
|
||||
public CommonResult<PageResult<SpaceCapsuleRespVO>> getSpaceCapsulePage(@Valid SpaceCapsulePageReqVO pageReqVO) {
|
||||
PageResult<SpaceCapsuleDO> pageResult = spaceCapsuleService.getSpaceCapsulePageApp(pageReqVO);
|
||||
PageResult<SpaceCapsuleDO> pageResult = spaceCapsuleService.getSpaceCapsulePage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, SpaceCapsuleRespVO.class));
|
||||
}
|
||||
|
||||
|
@ -26,23 +26,4 @@ public interface SpaceCapsuleMapper extends BaseMapperX<SpaceCapsuleDO> {
|
||||
.likeIfPresent(SpaceCapsuleDO::getSpaceName, reqVO.getSpaceName())
|
||||
.orderByDesc(SpaceCapsuleDO::getId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序过滤故障 ===>Status为2
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
default PageResult<SpaceCapsuleDO> selectPageApp(SpaceCapsulePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<SpaceCapsuleDO>()
|
||||
.eqIfPresent(SpaceCapsuleDO::getPayNum, reqVO.getPayNum())
|
||||
.eqIfPresent(SpaceCapsuleDO::getMachineNum, reqVO.getMachineNum())
|
||||
.eqIfPresent(SpaceCapsuleDO::getStatus, reqVO.getStatus())
|
||||
.eqIfPresent(SpaceCapsuleDO::getCarteenId, reqVO.getCarteenId())
|
||||
.betweenIfPresent(SpaceCapsuleDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(SpaceCapsuleDO::getRemark, reqVO.getRemark())
|
||||
.likeIfPresent(SpaceCapsuleDO::getSpaceName, reqVO.getSpaceName())
|
||||
.ne(SpaceCapsuleDO::getStatus, 2)
|
||||
.orderByDesc(SpaceCapsuleDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package cn.iocoder.yudao.module.member.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 支付渠道的编码的枚举
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum PayMethodsEnum {
|
||||
|
||||
WX_PUB("wx_pub", "微信 JSAPI 支付"), // 公众号网页
|
||||
WX_LITE("wx_lite", "微信小程序支付"),
|
||||
WX_APP("wx_app", "微信 App 支付"),
|
||||
WX_NATIVE("wx_native", "微信 Native 支付"),
|
||||
WX_WAP("wx_wap", "微信 Wap 网站支付"), // H5 网页
|
||||
WX_BAR("wx_bar", "微信付款码支付"),
|
||||
|
||||
ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付" ),
|
||||
ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付"),
|
||||
ALIPAY_APP("alipay_app", "支付宝App 支付"),
|
||||
ALIPAY_QR("alipay_qr", "支付宝扫码支付"),
|
||||
ALIPAY_BAR("alipay_bar", "支付宝条码支付"),
|
||||
MOCK("mock", "模拟支付" ),
|
||||
|
||||
WALLET("wallet", "钱包支付");
|
||||
|
||||
/**
|
||||
* 编码
|
||||
*
|
||||
* 参考 <a href="https://www.pingxx.com/api/支付渠道属性值.html">支付渠道属性值</a>
|
||||
*/
|
||||
private final String code;
|
||||
/**
|
||||
* 名字
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.member.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum SpaceCapsuleEnum {
|
||||
//0使用中1空闲2故障3已预约
|
||||
SPACE_CAPSULE_ENUM_IN_USE(0,"使用中"),
|
||||
SPACE_CAPSULE_ENUM_FREE_TIME(1,"空闲"),
|
||||
SPACE_CAPSULE_ENUM_FAULT(2,"故障"),
|
||||
SPACE_CAPSULE_ENUM_APPOINTMENT(3,"已预约");
|
||||
/**
|
||||
* 编码
|
||||
*/
|
||||
private final Integer code;
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cn.iocoder.yudao.module.member.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum SpaceCapsuleOrderEnum {
|
||||
|
||||
//0未使用1使用中2已完成3已退款
|
||||
SPACE_CAPSULE_ORDER_ENUM_UNUSED(0,"未使用"),
|
||||
SPACE_CAPSULE_ORDER_ENUM_IN_USE(1,"使用中"),
|
||||
SPACE_CAPSULE_ORDER_ENUM_DONE(2,"已完成"),
|
||||
SPACE_CAPSULE_ORDER_ENUM_REFUNDED(3,"已退款"),
|
||||
SPACE_CAPSULE_ORDER_ENUM_APPOINTMENT(4,"已预约"),
|
||||
;
|
||||
|
||||
/**
|
||||
* 编码
|
||||
*/
|
||||
private final Integer code;
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
|
||||
|
||||
}
|
@ -4,14 +4,26 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsulePageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper;
|
||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||
import cn.iocoder.yudao.module.member.enums.PayMethodsEnum;
|
||||
import cn.iocoder.yudao.module.member.enums.SpaceCapsuleEnum;
|
||||
import cn.iocoder.yudao.module.member.enums.SpaceCapsuleOrderEnum;
|
||||
import cn.iocoder.yudao.module.member.service.amount.DeductionService;
|
||||
import cn.iocoder.yudao.module.member.service.spacecapsule.SpaceCapsuleService;
|
||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_SPACE_CAPSULE_ERREO;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_SPACE_CAPSULE_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
@ -25,25 +37,91 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
|
||||
|
||||
@Resource
|
||||
private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper;
|
||||
@Resource
|
||||
private DeductionService deductionService;
|
||||
@Resource
|
||||
private SpaceCapsuleService spaceCapsuleService;
|
||||
@Resource
|
||||
private MemberUserService userService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createOrderSpaceCapsule(OrderSpaceCapsuleSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
// 插入对象转换
|
||||
OrderSpaceCapsuleDO orderSpaceCapsule = BeanUtils.toBean(createReqVO, OrderSpaceCapsuleDO.class);
|
||||
|
||||
// 校验状态是否为未使用
|
||||
if (!SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_UNUSED.getCode().equals(orderSpaceCapsule.getStatus())) {
|
||||
throw exception(ORDER_SPACE_CAPSULE_ERREO);
|
||||
}
|
||||
// 获取用户信息及余额
|
||||
MemberUserDO user = userService.getUser(orderSpaceCapsule.getUserId());
|
||||
BigDecimal initialMoney = user.getMoney();
|
||||
// 设置变动前的余额
|
||||
orderSpaceCapsule.setStartMoney(initialMoney);
|
||||
// 扣除余额
|
||||
deductionService.deduct(orderSpaceCapsule.getUserId(), orderSpaceCapsule.getMoney(), CostTypeEnum.SHOPPING.getCode());
|
||||
// 设置变动后的余额
|
||||
orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney()));
|
||||
// 设置支付方式
|
||||
orderSpaceCapsule.setPayMethods(PayMethodsEnum.WX_LITE.getName());
|
||||
// 插入订单数据
|
||||
orderSpaceCapsuleMapper.insert(orderSpaceCapsule);
|
||||
// 返回
|
||||
// 返回订单 ID
|
||||
return orderSpaceCapsule.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateOrderSpaceCapsule(OrderSpaceCapsuleSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateOrderSpaceCapsuleExists(updateReqVO.getId());
|
||||
// 更新
|
||||
OrderSpaceCapsuleDO updateObj = BeanUtils.toBean(updateReqVO, OrderSpaceCapsuleDO.class);
|
||||
// 校验状态是否为不可用
|
||||
if (updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_UNUSED.getCode())) {
|
||||
throw exception(ORDER_SPACE_CAPSULE_ERREO);
|
||||
}
|
||||
// 判断是否需要更新状态
|
||||
Integer currentStatus = orderSpaceCapsuleMapper.selectById(updateObj.getId()).getStatus();
|
||||
if (currentStatus.equals(updateObj.getStatus())) {
|
||||
return; // 状态一致,无需更新
|
||||
}
|
||||
// 获取太空舱信息
|
||||
SpaceCapsuleDO spaceCapsule = spaceCapsuleService.getSpaceCapsule(updateObj.getSpaceCapsuleId());
|
||||
// 根据新状态处理逻辑
|
||||
if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_APPOINTMENT.getCode())){
|
||||
// TODO: 预约逻辑待完成
|
||||
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_REFUNDED.getCode())){
|
||||
handleRefund(updateObj);
|
||||
updateObj.setStatus(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_REFUNDED.getCode());
|
||||
updateSpaceCapsuleStatus(spaceCapsule, SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_FREE_TIME.getCode());
|
||||
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())){
|
||||
updateObj.setOrderEndTime(LocalDateTime.now());
|
||||
updateSpaceCapsuleStatus(spaceCapsule, SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_FREE_TIME.getCode());
|
||||
}else if(updateObj.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_IN_USE.getCode())){
|
||||
updateObj.setOrderStartTime(LocalDateTime.now());
|
||||
updateSpaceCapsuleStatus(spaceCapsule, SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_IN_USE.getCode());
|
||||
}
|
||||
// 更新数据库
|
||||
orderSpaceCapsuleMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
// 处理退款逻辑
|
||||
private void handleRefund(OrderSpaceCapsuleDO updateObj) {
|
||||
MemberUserDO user = userService.getUser(updateObj.getUserId());
|
||||
BigDecimal startMoney = user.getMoney();
|
||||
// 进行余额退款
|
||||
deductionService.reduction(updateObj.getUserId(), updateObj.getMoney(), BigDecimal.ZERO, updateObj.getMoney(), BigDecimal.ZERO);
|
||||
// 设置变动后的余额
|
||||
updateObj.setEndMoney(startMoney.add(updateObj.getMoney()));
|
||||
}
|
||||
|
||||
// 更新太空舱状态
|
||||
private void updateSpaceCapsuleStatus(SpaceCapsuleDO spaceCapsule, Integer newStatus) {
|
||||
spaceCapsule.setStatus(newStatus);
|
||||
spaceCapsuleService.updateSpaceCapsule(spaceCapsule);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteOrderSpaceCapsule(Long id) {
|
||||
// 校验存在
|
||||
|
@ -28,6 +28,7 @@ public interface SpaceCapsuleService {
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateSpaceCapsule(@Valid SpaceCapsuleSaveReqVO updateReqVO);
|
||||
void updateSpaceCapsule( SpaceCapsuleDO spaceCapsuleDO);
|
||||
|
||||
/**
|
||||
* 删除太空舱
|
||||
@ -52,11 +53,4 @@ public interface SpaceCapsuleService {
|
||||
*/
|
||||
PageResult<SpaceCapsuleDO> getSpaceCapsulePage(SpaceCapsulePageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 过滤掉故障的
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
PageResult<SpaceCapsuleDO> getSpaceCapsulePageApp(SpaceCapsulePageReqVO pageReqVO);
|
||||
|
||||
}
|
@ -42,6 +42,13 @@ public class SpaceCapsuleServiceImpl implements SpaceCapsuleService {
|
||||
spaceCapsuleMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSpaceCapsule(SpaceCapsuleDO spaceCapsuleDO) {
|
||||
// 校验存在
|
||||
validateSpaceCapsuleExists(spaceCapsuleDO.getId());
|
||||
spaceCapsuleMapper.updateById(spaceCapsuleDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteSpaceCapsule(Long id) {
|
||||
// 校验存在
|
||||
@ -66,9 +73,4 @@ public class SpaceCapsuleServiceImpl implements SpaceCapsuleService {
|
||||
return spaceCapsuleMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<SpaceCapsuleDO> getSpaceCapsulePageApp(SpaceCapsulePageReqVO pageReqVO) {
|
||||
return spaceCapsuleMapper.selectPageApp(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user