package cc.mrbird.febs.pay.service.impl;
|
|
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
|
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.mall.entity.MallMember;
|
import cc.mrbird.febs.mall.entity.MallOrderInfo;
|
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
|
import cc.mrbird.febs.mall.service.IApiMallMemberService;
|
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
|
import cc.mrbird.febs.pay.model.AliPayPassbackModel;
|
import cc.mrbird.febs.pay.properties.AliPayProperties;
|
import cc.mrbird.febs.pay.service.IPayService;
|
import cc.mrbird.febs.rabbit.producter.AgentProducer;
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
import com.alipay.api.response.AlipayTradeAppPayResponse;
|
import com.ijpay.alipay.AliPayApi;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.Map;
|
|
/**
|
* @author wzy
|
* @date 2021-09-27
|
**/
|
@Slf4j
|
@Service
|
public class PayServiceImpl implements IPayService {
|
|
@Resource
|
private AliPayProperties aliPayProperties;
|
|
@Autowired
|
private IApiMallMemberService memberService;
|
@Autowired
|
private MallOrderInfoMapper orderInfoMapper;
|
@Autowired
|
private AgentProducer agentProducer;
|
|
@Value("${spring.profiles.active}")
|
private String active;
|
|
@Override
|
public String aliPay(MallOrderInfo orderInfo) {
|
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
model.setSubject("中基商城商品支付");
|
model.setBody(orderInfo.getName());
|
model.setOutTradeNo(orderInfo.getOrderNo());
|
model.setTimeoutExpress("15m");
|
|
if ("dev".equals(active) || "test".equals(active)) {
|
model.setTotalAmount("0.01");
|
} else {
|
model.setTotalAmount(orderInfo.getAmount().toString());
|
}
|
|
AliPayPassbackModel passbackModel = new AliPayPassbackModel();
|
passbackModel.setOrderId(orderInfo.getId());
|
passbackModel.setMemberId(orderInfo.getMemberId());
|
model.setPassbackParams(JSONObject.toJSONString(passbackModel));
|
|
model.setProductCode("QUICK_MSECURITY_PAY");
|
AlipayTradeAppPayResponse resp = null;
|
try {
|
resp = AliPayApi.appPayToResponse(model, aliPayProperties.getNoticeUrl());
|
} catch (AlipayApiException e) {
|
log.error("支付宝支付异常", e);
|
throw new FebsException("支付宝支付异常");
|
}
|
return resp.getBody();
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void aliCallback(Map<String, String> params) {
|
String modelStr = params.get("passback_params");
|
|
AliPayPassbackModel passback = JSONObject.parseObject(modelStr, AliPayPassbackModel.class);
|
|
MallOrderInfo orderInfo = orderInfoMapper.selectById(passback.getOrderId());
|
if ("1".equals(orderInfo.getPayResult())) {
|
return;
|
}
|
|
MallMember member = memberService.getById(orderInfo.getMemberId());
|
if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) {
|
member.setLevel(AgentLevelEnum.FIRST_LEVEL.name());
|
memberService.updateById(member);
|
}
|
|
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
|
orderInfo.setPayResult("1");
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayTradeNo(params.get("trade_no"));
|
orderInfoMapper.updateById(orderInfo);
|
|
// agentProducer.sendReturnMoneyMsg(orderInfo.getId());
|
agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId());
|
|
// memberService.addMoneyFlow(orderInfo.getMemberId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.BALANCE.getValue());
|
}
|
}
|