package com.fdkankan.pay.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fdkankan.pay.entity.Order;
import com.fdkankan.pay.entity.PayServe;
import com.fdkankan.pay.mapper.IOrderMapper;
import com.fdkankan.pay.service.IOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.pay.service.IPayServeService;
import com.fdkankan.pay.util.CacheUtil;
import com.fdkankan.pay.util.OrderSnUtil;
import com.fdkankan.rabbitmq.util.RabbitMqProducer;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Map;
/**
*
* 服务实现类
*
*
* @author
* @since 2023-04-12
*/
@Service
public class OrderServiceImpl extends ServiceImpl implements IOrderService {
@Autowired
OrderSnUtil orderSnUtil;
@Autowired
IPayServeService payServeService;
@Autowired
RabbitMqProducer rabbitMqProducer;
@Override
public Order createOrderByMqMsg(String msg) {
msg = StringEscapeUtils.unescapeJava(msg);
Order order = JSONObject.parseObject(msg, Order.class);
return this.createOrder(order);
}
@Override
public Order createOrder(Order order) {
if(StringUtils.isBlank(order.getServeName())){
return null;
}
PayServe payServe = payServeService.getByServeName(order.getServeName());
if(payServe == null ){
return null;
}
order.setOrderId(null);
order.setServeId(payServe.getId());
String orderSn = orderSnUtil.getOrderSn();
order.setOrderSn(orderSn);
this.save(order);
return order;
}
@Override
public Order getByOrderSn(String orderSn) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Order::getOrderSn,orderSn);
return this.getOne(wrapper);
}
@Override
public void payResult(Order order, Boolean payFlag, String trade_no,String openId) {
if(order.getPayStatus() != 0){
return;
}
order.setPayStatus(payFlag ? 1:2);
order.setTradeNo(trade_no);
order.setOpenId(openId);
order.setPayTime(new Date());
order.setUpdateTime(new Date());
this.updateById(order);
Map map = BeanUtil.beanToMap(order);
rabbitMqProducer.sendByWorkQueue(CacheUtil.orderPayResultQueue,map);
}
}