package com.ruoyi.other.service.impl;
import java.time.LocalDateTime;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.OrderCodeUtil;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.order.api.model.TVipOrder;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.feignClient.VipClient;
import com.ruoyi.other.mapper.TCouponMapper;
import com.ruoyi.other.mapper.TVipMapper;
import com.ruoyi.other.service.TVipService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.IcbcPaymentClient;
import com.ruoyi.payment.api.vo.AliPaymentReq;
import com.ruoyi.payment.api.vo.AliPaymentResp;
import com.ruoyi.payment.api.vo.IcbcPaymentReq;
import com.ruoyi.payment.api.vo.IcbcPaymentResp;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author 无关风月
* @since 2024-08-06
*/
@Service
public class TVipServiceImpl extends ServiceImpl implements TVipService {
@Autowired
private TCouponMapper tCouponMapper;
@Resource
private OrderClient orderClient;
@Resource
private AppUserClient appUserClient;
@Resource
private IcbcPaymentClient icbcPaymentClient;
@Resource
private AliPaymentClient aliPaymentClient;
@Override
public PageInfo pageList(Integer pageCurr,Integer pageSize) {
PageInfo pageInfo = new PageInfo<>(pageCurr,pageSize);
List list = this.baseMapper.pageList(pageInfo);
for (TVip tVip : list) {
String coupon = tVip.getCoupon();
if (StringUtils.hasLength(coupon)){
JSONArray jsonArray = JSONObject.parseArray(coupon);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Integer id = jsonObject.getInteger("id");
Integer number = jsonObject.getInteger("number");
TCoupon tCoupon = tCouponMapper.selectById(id);
if (tCoupon!=null){
stringBuilder.append(tCoupon.getName()).append("*").append(number).append(";");
}
}
tVip.setCouponName(stringBuilder.toString());
}
}
pageInfo.setRecords(list);
return pageInfo;
}
@Resource
private VipClient vipClient;
@Override
public Object vipInfoPay(TVip byId, BigDecimal payMoney, Integer payType,BigDecimal discountMoney,BigDecimal discount,Integer buyType, Long userId) {
TAppUser user = appUserClient.getUserById(userId).getData();
//生成会员购买订单
TVipOrder shopOrder = new TVipOrder();
shopOrder.setCode(OrderCodeUtil.getOrderCode("HY"));
shopOrder.setType(1);
shopOrder.setAppUserId(userId);
shopOrder.setType(1);
shopOrder.setVipId(byId.getId());
shopOrder.setTitle(byId.getName());
if (buyType==1){
shopOrder.setTitle(byId.getName()+"月卡");
}else if (buyType==2){
shopOrder.setTitle(byId.getName()+"季卡");
}else {
shopOrder.setTitle(byId.getName()+"年卡");
}
shopOrder.setVipType(buyType);
shopOrder.setOrderAmount(payMoney.add(discountMoney));
shopOrder.setDiscount(discount);
shopOrder.setDiscountAmount(discountMoney);
shopOrder.setPaymentAmount(payMoney);
shopOrder.setPaymentStatus(1);
shopOrder.setPaymentType(payType == 1 ? 3 : payType);
shopOrder.setPayTime(LocalDateTime.now());
shopOrder.setDelFlag(false);
R longR = orderClient.addVipOrder(shopOrder);
if(200 != longR.getCode()){
return AjaxResult.error(longR.getMsg());
}
if (payType==1){
IcbcPaymentReq paymentReq = new IcbcPaymentReq();
paymentReq.setOutTradeNo(shopOrder.getCode());
paymentReq.setAmount(shopOrder.getPaymentAmount());
paymentReq.setOpenId(user.getWxOpenid());
paymentReq.setPaymentType(1);
paymentReq.setSubject("购买会员");
paymentReq.setBody(shopOrder.getTitle());
R paymentResult = icbcPaymentClient.payment(paymentReq);
if (paymentResult == null || paymentResult.getCode() != 200 || paymentResult.getData() == null) {
return AjaxResult.error(paymentResult == null ? "工行支付无响应" : paymentResult.getMsg());
}
IcbcPaymentResp paymentResp = paymentResult.getData();
if (!"SUCCESS".equals(paymentResp.getStatus())) {
return AjaxResult.error(paymentResp.getRawResponse());
}
return AjaxResult.success(paymentResp);
}else {
AliPaymentReq req = new AliPaymentReq();
req.setOutTradeNo(shopOrder.getCode());
req.setTotalAmount(shopOrder.getPaymentAmount().toString());
req.setSubject("充电充值");
req.setBuyerOpenId(user.getAliOpenid());
req.setBody("充电充值");
req.setNotifyUrl("/payment/ali/callBack");
AliPaymentResp data = aliPaymentClient.payment(req).getData();
if(null != data){
return AjaxResult.success(data);
}
}
return null;
}
}