package cn.stylefeng.guns.modular.business.service.impl;
|
|
import cn.hutool.core.lang.Assert;
|
import cn.stylefeng.guns.modular.business.dto.OrderMentalTestDetailDTO;
|
import cn.stylefeng.guns.modular.business.dto.OrderMentalTestPageDTO;
|
import cn.stylefeng.guns.modular.business.entity.MentalTestTopic;
|
import cn.stylefeng.guns.modular.business.entity.OrderMentalTest;
|
import cn.stylefeng.guns.modular.business.mapper.OrderMentalTestMapper;
|
import cn.stylefeng.guns.modular.business.service.IMentalTestTopicService;
|
import cn.stylefeng.guns.modular.business.service.IOrderMentalTestService;
|
import cn.stylefeng.guns.utils.GeneralUtil;
|
import cn.stylefeng.roses.kernel.rule.enums.OrderStatusFlagEnum;
|
import cn.stylefeng.roses.kernel.rule.enums.OrderTypeEnum;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 心理测试订单 服务实现类
|
* </p>
|
*
|
* @author goupan
|
* @since 2024-01-01
|
*/
|
@Service
|
public class OrderMentalTestServiceImpl extends ServiceImpl<OrderMentalTestMapper, OrderMentalTest> implements IOrderMentalTestService {
|
|
@Resource
|
IMentalTestTopicService mentalTestTopicService;
|
|
@Override
|
public OrderMentalTest getOrderByNo(String orderNo) {
|
return this.getOne(
|
Wrappers.<OrderMentalTest>lambdaQuery()
|
.eq(OrderMentalTest::getOrderNo, orderNo)
|
.last("limit 1")
|
);
|
}
|
|
@Override
|
public Boolean paySuccess(String orderNo, String tradeNo, String totalAmount, Integer payType) {
|
// 获取订单信息
|
OrderMentalTest order = getOrderByNo(orderNo);
|
Assert.notNull(order, "订单不存在");
|
Assert.isTrue(order.getPayAmount().compareTo(new BigDecimal(totalAmount)) == 0, "订单支付金额错误!");
|
|
boolean update = this.update(
|
Wrappers.<OrderMentalTest>lambdaUpdate()
|
.set(OrderMentalTest::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode())
|
.set(OrderMentalTest::getPayType, payType)
|
.set(OrderMentalTest::getTransactionNo, tradeNo)
|
.eq(OrderMentalTest::getOrderNo, orderNo)
|
);
|
return update;
|
}
|
|
@Override
|
public Page<OrderMentalTestPageDTO> getPage(Page<Object> page, String title, String nickName, String telephone, Integer testType, Integer statusFlag, Integer adminView) {
|
return this.baseMapper.getPage(page, title, nickName, telephone, testType, statusFlag, adminView);
|
}
|
|
@Override
|
public OrderMentalTestDetailDTO getInfoById(Long id) {
|
return this.baseMapper.getInfoById(id);
|
}
|
|
@Override
|
public OrderMentalTest createOrderMentalTest(Long userId, Long topicId, Boolean isNeedPay, Boolean isBack) {
|
if (isBack == null || !isBack) {
|
// 获取用户已支付订单(以后每次都只有1个订单号)
|
OrderMentalTest doneOrder = this.baseMapper.selectOne(
|
Wrappers.<OrderMentalTest>lambdaQuery()
|
.eq(OrderMentalTest::getUserId, userId)
|
.eq(OrderMentalTest::getGoodsId, topicId)
|
.eq(OrderMentalTest::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode())
|
.orderByDesc(OrderMentalTest::getCreateTime)
|
.last("LIMIT 1")
|
);
|
if (doneOrder != null) {
|
return doneOrder;
|
}
|
}
|
|
// 题库信息
|
MentalTestTopic topic = mentalTestTopicService.getById(topicId);
|
Assert.notNull(topic, "题库不存在");
|
|
// 查询题库后台添加的订单
|
long isBackCount = this.count(
|
Wrappers.<OrderMentalTest>lambdaQuery()
|
.eq(OrderMentalTest::getIsBack, true)
|
.eq(OrderMentalTest::getUserId, userId)
|
.eq(OrderMentalTest::getGoodsId, topicId)
|
);
|
if (isBackCount > 0) {
|
// 以后的订单都标记为后台添加
|
isBack = true;
|
}
|
|
// 获取用户最近创建的待支付订单
|
OrderMentalTest o = this.baseMapper.selectOne(
|
Wrappers.<OrderMentalTest>lambdaQuery()
|
.eq(OrderMentalTest::getUserId, userId)
|
.eq(OrderMentalTest::getGoodsId, topicId)
|
.eq(OrderMentalTest::getStatusFlag, OrderStatusFlagEnum.WAIT_PAY.getCode())
|
.orderByDesc(OrderMentalTest::getCreateTime)
|
.last("LIMIT 1")
|
);
|
if (o == null) {
|
// 下单
|
o = OrderMentalTest.builder()
|
.orderNo(GeneralUtil.generateOrderNo(OrderTypeEnum.MENTAL_TEST))
|
.userId(userId)
|
.goodsId(topicId)
|
.statusFlag(OrderStatusFlagEnum.WAIT_PAY.getCode())
|
.payAmount(topic.getTestAmount())
|
.orderAmount(topic.getTestAmount())
|
.build();
|
}
|
|
// 测试类型:0免费,1付费
|
if (topic.getTestType() == 1) {
|
if (isNeedPay == null || isNeedPay) {
|
// 获取用户已经支付过的题库
|
long count = this.count(
|
Wrappers.<OrderMentalTest>lambdaQuery()
|
.eq(OrderMentalTest::getUserId, userId)
|
.eq(OrderMentalTest::getGoodsId, topicId)
|
.eq(OrderMentalTest::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode())
|
);
|
if (count > 0) {
|
// 已支付过的标记无须支付
|
isNeedPay = false;
|
}
|
}
|
}
|
|
// 题库免费 或 题库无须支付
|
if (!isNeedPay || topic.getTestType() == 0) {
|
o.setStatusFlag(OrderStatusFlagEnum.PAY_SUCCESS.getCode());
|
if (!isBack) {
|
// 后台添加的需统计
|
o.setPayAmount(BigDecimal.ZERO);
|
o.setOrderAmount(BigDecimal.ZERO);
|
}
|
}
|
|
// 保存订单信息
|
o.setIsBack(isBack);
|
this.saveOrUpdate(o);
|
return o;
|
}
|
|
@Override
|
public List<Map<String, Object>> getStatOrderList(String dateFormat, String beginTime, String endTime, Long workerId, List<Integer> statusList, List<String> orderNoList) {
|
return this.baseMapper.getStatOrderList(dateFormat, beginTime, endTime, workerId, statusList, orderNoList);
|
}
|
|
}
|