| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | |
| | | import cc.mrbird.febs.mall.vo.OrderDetailVo; |
| | | import cc.mrbird.febs.mall.vo.OrderListVo; |
| | | import cc.mrbird.febs.mall.vo.OrderRefundVo; |
| | | import cc.mrbird.febs.pay.model.AgreementPayDto; |
| | | import cc.mrbird.febs.pay.model.AgreementSignDto; |
| | | import cc.mrbird.febs.pay.model.UnipayDto; |
| | | import cc.mrbird.febs.pay.service.IPayService; |
| | | import cc.mrbird.febs.pay.service.UnipayService; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateUnit; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.crypto.SecureUtil; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.DecimalFormat; |
| | | import java.util.*; |
| | | |
| | | /** |
| | |
| | | private final AgentProducer agentProducer; |
| | | private final IPayService payService; |
| | | private final IMallAchieveService mallAchieveService; |
| | | private final UnipayService unipayService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | this.baseMapper.updateById(orderInfo); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String unipayStr = "{\"r1_MerchantNo\":\"888118000001971\",\"rd_Pic\":\"\",\"r6_FrpCode\":\"ALIPAY_H5\",\"r7_TrxNo\":\"100222082332490699\",\"r0_Version\":\"1.0\",\"r3_Amount\":\"0.01\",\"r4_Cur\":\"1\",\"r2_OrderNo\":\"2022082212510288174\",\"rb_CodeMsg\":\"\",\"hmac\":\"1659BB77DEDDF9956EA4D6DF227C3B14\",\"ra_Code\":100,\"rc_Result\":\"<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title></title></head><body><script type='text/javascript'>location.href='https://qr.alipay.com/bax019737vbdwoisxcdp00a2';</script></body></html>\"}"; |
| | | JSONObject jsonObject = JSONUtil.parseObj(unipayStr); |
| | | String r7_trxNo = (String) jsonObject.get("r7_TrxNo"); |
| | | System.out.println(r7_trxNo); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Map<String, Object> payOrder(PayOrderDto payOrderDto) { |
| | | MallMember member = LoginUserUtil.getLoginUser(); |
| | | MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), payOrderDto.getId()); |
| | | MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(payOrderDto.getId()); |
| | | if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { |
| | | throw new FebsException("订单不存在"); |
| | | } |
| | |
| | | } |
| | | |
| | | String payResultStr = ""; |
| | | String rcResult = ""; |
| | | switch (payOrderDto.getType()) { |
| | | case "1": |
| | | // orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); |
| | |
| | | agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | break; |
| | | case "2": |
| | | if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { |
| | | payResultStr = orderInfo.getPayOrderNo(); |
| | | } else { |
| | | payResultStr = payService.aliPay(orderInfo); |
| | | // if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { |
| | | // payResultStr = orderInfo.getPayOrderNo(); |
| | | // } else { |
| | | // payResultStr = payService.aliPay(orderInfo); |
| | | // } |
| | | UnipayDto unipayDto = new UnipayDto(); |
| | | // unipayDto.setAmount(new BigDecimal("0.01")); |
| | | unipayDto.setAmount(orderInfo.getAmount()); |
| | | unipayDto.setFrpCode("ALIPAY_H5"); |
| | | unipayDto.setTradeMerchantNo("777180800385820"); |
| | | unipayDto.setOrderNo(orderInfo.getOrderNo()); |
| | | List<MallOrderItem> items = orderInfo.getItems(); |
| | | if(CollUtil.isEmpty(items)){ |
| | | unipayDto.setProductName("商品"); |
| | | }else{ |
| | | unipayDto.setProductName(items.get(0).getGoodsName()); |
| | | } |
| | | |
| | | String unipayStr = unipayService.unipay(unipayDto); |
| | | if("fail" == unipayStr){ |
| | | throw new FebsException("支付失败"); |
| | | }else{ |
| | | // JSONUtil.parseObj(unipayStr); |
| | | JSONObject jsonObject = JSONUtil.parseObj(unipayStr); |
| | | payResultStr = (String) jsonObject.get("r7_TrxNo"); |
| | | rcResult = (String) jsonObject.get("rc_Result"); |
| | | } |
| | | orderInfo.setPayOrderNo(payResultStr); |
| | | orderInfo.setPayMethod("支付宝支付"); |
| | | agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | // agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | break; |
| | | case "3": |
| | | payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance"); |
| | |
| | | MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); |
| | | if (mallGoods.getIsNormal() == 2) { |
| | | hasTc = true; |
| | | score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()); |
| | | score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()).multiply(new BigDecimal(orderItem.getCnt())); |
| | | // BigDecimal staticMulti = mallGoods.getStaticMulti() == null ? BigDecimal.ZERO : mallGoods.getStaticMulti(); |
| | | // score = sku.getPresentPrice().multiply(staticMulti); |
| | | // 普通商品也及时结算,不再10天结算 |
| | | } else { |
| | | score = sku.getPresentPrice(); |
| | | } |
| | | |
| | | if (score.compareTo(BigDecimal.ZERO) > 0) { |
| | |
| | | |
| | | mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); |
| | | break; |
| | | case "5": |
| | | AgreementSignDto agreementSignDto = new AgreementSignDto(); |
| | | agreementSignDto.setOrderNo(orderInfo.getOrderNo()); |
| | | agreementSignDto.setSmsCode(payOrderDto.getSmsCode()); |
| | | String agreementSignStr = unipayService.agreementSign(agreementSignDto); |
| | | if("fail" == agreementSignStr){ |
| | | throw new FebsException("支付失败"); |
| | | }else{ |
| | | JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr); |
| | | payResultStr = (String) jsonObject.get("biz_code"); |
| | | String signBizMsg = (String) jsonObject.get("biz_msg"); |
| | | if("JS000000" != payResultStr){ |
| | | throw new FebsException(signBizMsg); |
| | | } |
| | | } |
| | | |
| | | AgreementPayDto agreementPayDto = new AgreementPayDto(); |
| | | agreementPayDto.setOrderNo(orderInfo.getOrderNo()); |
| | | |
| | | BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN); |
| | | DecimalFormat decimalFormat = new DecimalFormat("0.00#"); |
| | | String strVal = decimalFormat.format(value); |
| | | agreementPayDto.setOrderAmount(new BigDecimal(strVal)); |
| | | agreementPayDto.setOrderTime(DateUtil.now()); |
| | | List<MallOrderItem> itemsGoods = orderInfo.getItems(); |
| | | if(CollUtil.isEmpty(itemsGoods)){ |
| | | agreementPayDto.setOrderDesc("商品"); |
| | | }else{ |
| | | agreementPayDto.setOrderDesc(itemsGoods.get(0).getGoodsName()); |
| | | } |
| | | agreementPayDto.setBankNo(payOrderDto.getBankNo()); |
| | | String agreementPayStr = unipayService.agreementPay(agreementPayDto); |
| | | |
| | | if("fail".equals(agreementSignStr)){ |
| | | throw new FebsException("支付失败"); |
| | | }else{ |
| | | JSONObject jsonObject = JSONUtil.parseObj(agreementPayStr); |
| | | payResultStr = (String) jsonObject.get("biz_code"); |
| | | String payBizMsg = (String) jsonObject.get("biz_msg"); |
| | | if(!"JS000000".equals(payResultStr)){ |
| | | throw new FebsException(payBizMsg); |
| | | } |
| | | } |
| | | orderInfo.setPayMethod("快捷协议支付"); |
| | | break; |
| | | default: |
| | | |
| | | } |
| | |
| | | map.put("orderInfo", payResultStr); |
| | | map.put("orderNo", orderInfo.getOrderNo()); |
| | | map.put("orderId", orderInfo.getId()); |
| | | map.put("rcResult", rcResult); |
| | | |
| | | return map; |
| | | } |
| | |
| | | throw new FebsException("支付密码错误"); |
| | | } |
| | | |
| | | memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); |
| | | int reduce = memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); |
| | | if (reduce == 2) { |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | return orderInfo.getOrderNo(); |
| | | } |
| | | |