| | |
| | | import cc.mrbird.febs.common.utils.RedisUtils; |
| | | import cc.mrbird.febs.common.utils.SpringContextHolder; |
| | | import cc.mrbird.febs.mall.dto.RechargeWalletMessageSendDto; |
| | | import cc.mrbird.febs.mall.entity.DataDictionaryCustom; |
| | | import cc.mrbird.febs.mall.entity.MallMemberWallet; |
| | | import cc.mrbird.febs.mall.entity.MallMoneyFlow; |
| | | import cc.mrbird.febs.mall.entity.MallOrderInfo; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; |
| | | import cc.mrbird.febs.pay.model.NotifyData; |
| | |
| | | import cc.mrbird.febs.pay.model.OrderStateMsgVo; |
| | | import cc.mrbird.febs.pay.model.WxTemplateData; |
| | | import cc.mrbird.febs.pay.service.IPayService; |
| | | import cc.mrbird.febs.pay.service.IXcxCodePayService; |
| | | import cc.mrbird.febs.pay.service.IXcxPayService; |
| | | import cc.mrbird.febs.pay.util.PayThreadPool; |
| | | import cc.mrbird.febs.pay.util.Signature; |
| | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; |
| | | import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; |
| | | import com.github.binarywang.wxpay.exception.WxPayException; |
| | | import com.github.binarywang.wxpay.service.WxPayService; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.client.RestTemplate; |
| | | import org.thymeleaf.engine.TemplateData; |
| | | |
| | |
| | | import java.math.RoundingMode; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Slf4j |
| | |
| | | @Autowired |
| | | MallMoneyFlowMapper mallMoneyFlowMapper; |
| | | @Autowired |
| | | MallOrderItemMapper mallOrderItemMapper; |
| | | @Autowired |
| | | MallGoodsMapper mallGoodsMapper; |
| | | @Autowired |
| | | MallGoodsSkuMapper mallGoodsSkuMapper; |
| | | @Autowired |
| | | MallMemberWalletMapper mallMemberWalletMapper; |
| | | @Autowired |
| | | MallMemberMapper mallMemberMapper; |
| | |
| | | RedisUtils redisUtils; |
| | | @Autowired |
| | | private IApiMallMemberWalletService memberWalletService; |
| | | |
| | | // @Autowired |
| | | // private WxPayService wxPayService; |
| | | // |
| | | // @Autowired |
| | | // private IXcxCodePayService xcxCodePayService; |
| | | |
| | | @Autowired |
| | | private IXcxPayService iXcxPayService; |
| | |
| | | attrStr = data.getAttach(); |
| | | JSONObject jsonObject = JSONUtil.parseObj(attrStr); |
| | | String rechargeNo = (String) jsonObject.get("rechargeNo"); |
| | | Long memberId = (Long) jsonObject.get("memberId"); |
| | | Long memberId = Long.parseLong(jsonObject.get("memberId").toString()); |
| | | // 检验订单状态 |
| | | MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOneByOrderNoAndMemberId(rechargeNo,memberId); |
| | | // 校验签名 |
| | |
| | | RoundingMode.HALF_UP); |
| | | |
| | | if (ObjectUtil.isNotEmpty(mallMoneyFlow)) { |
| | | log.debug("检查支付金额payMoney={},mallMoneyFlow.getPayMoney()={}", payMoney, mallMoneyFlow.getAmount()); |
| | | memberWalletService.addBalance(payMoney,memberId); |
| | | RechargeWalletMessageSendDto rechargeWalletMessageSendDto = new RechargeWalletMessageSendDto(); |
| | | rechargeWalletMessageSendDto.setRechargeNo(rechargeNo); |
| | | rechargeWalletMessageSendDto.setRechargeAmount(payMoney.toString()); |
| | | log.debug("检查支付金额payMoney={},mallMoneyFlow.getPayMoney()={}", payMoney, mallMoneyFlow.getAmount()); |
| | | memberWalletService.addBalance(payMoney,memberId); |
| | | mallMoneyFlow.setStatus(2); |
| | | mallMoneyFlowMapper.updateById(mallMoneyFlow); |
| | | |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); |
| | | rechargeWalletMessageSendDto.setBalance(mallMemberWallet.getBalance().toString()); |
| | | rechargeWalletMessageSendDto.setCreateTime(DateUtil.now()); |
| | | rechargeWalletMessageSendDto.setOpenId(mallMemberMapper.selectById(memberId).getOpenId()); |
| | | DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_TWO.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_TWO.getCode()); |
| | | rechargeWalletMessageSendDto.setTemplateId(dataDictionaryCustom.getValue()); |
| | | iXcxPayService.rechargeWalletMessageSend(rechargeWalletMessageSendDto); |
| | | RechargeWalletMessageSendDto rechargeWalletMessageSendDto = new RechargeWalletMessageSendDto(); |
| | | rechargeWalletMessageSendDto.setRechargeNo(rechargeNo); |
| | | rechargeWalletMessageSendDto.setRechargeAmount(payMoney.toString()); |
| | | |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); |
| | | rechargeWalletMessageSendDto.setBalance(mallMemberWallet.getBalance().toString()); |
| | | rechargeWalletMessageSendDto.setCreateTime(DateUtil.now()); |
| | | rechargeWalletMessageSendDto.setOpenId(mallMemberMapper.selectById(memberId).getOpenId()); |
| | | DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_TWO.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_TWO.getCode()); |
| | | rechargeWalletMessageSendDto.setTemplateId(dataDictionaryCustom.getValue()); |
| | | iXcxPayService.rechargeWalletMessageSend(rechargeWalletMessageSendDto); |
| | | threadResult.success().message("充值成功"); |
| | | } else { |
| | | log.info("充值失败", attrStr); |
| | |
| | | return; |
| | | |
| | | } |
| | | |
| | | // public static void main(String[] args) { |
| | | // String attach="{'rechargeNo':CZ_2022083117160259880,'memberId':47}"; |
| | | // JSONObject jsonObject = JSONUtil.parseObj(attach); |
| | | // String rechargeNo = (String) jsonObject.get("rechargeNo"); |
| | | // Long memberId = Long.parseLong(jsonObject.get("memberId").toString()); |
| | | // System.out.println(memberId); |
| | | // System.out.println(rechargeNo); |
| | | // } |
| | | /** |
| | | * 微信支付回调接口 |
| | | */ |
| | |
| | | BigDecimal payMoney = new BigDecimal(total_fee).divide(new BigDecimal(100), 2, |
| | | RoundingMode.HALF_UP); |
| | | |
| | | |
| | | log.info("订单支付状态---status:{}", order.getStatus()); |
| | | if (order != null && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()) { |
| | | log.debug("检查支付金额payMoney={},order.getPayMoney()={}", payMoney, order.getAmount()); |
| | | order.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); |
| | | order.setPayResult("1"); |
| | | log.info("检查支付金额payMoney={},order.getPayMoney()={}", payMoney, order.getAmount()); |
| | | // order.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); |
| | | order.setStatus(OrderStatusEnum.FINISH.getValue()); |
| | | order.setPayResult(1); |
| | | order.setPayTime(new Date()); |
| | | order.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); |
| | | order.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()); |
| | | mallOrderInfoMapper.updateById(order); |
| | | Long memberId = order.getMemberId(); |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); |
| | | if(ObjectUtil.isNotEmpty(mallMemberWallet)){ |
| | | |
| | | log.info("订单支付用户钱包---mallMemberWallet:{},{}", mallMemberWallet.getBalance(),mallMemberWallet.getScore()); |
| | | List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(order.getId()); |
| | | if(ObjectUtil.isNotEmpty(mallOrderItemList)){ |
| | | /** |
| | | * 会员增加积分 |
| | | * (现价-成本价)/现价*支付的金额 = 这个商品可以得到的积分 |
| | | * 然后累加得到总增加的积分数量 |
| | | */ |
| | | BigDecimal totalScoreAdd = BigDecimal.ZERO; |
| | | for(MallOrderItem mallOrderItem : mallOrderItemList){ |
| | | Long skuId = mallOrderItem.getSkuId(); |
| | | MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId); |
| | | if(ObjectUtil.isEmpty(mallGoodsSku)){ |
| | | continue; |
| | | } |
| | | BigDecimal presentPrice = mallGoodsSku.getPresentPrice(); |
| | | BigDecimal costPrice = mallGoodsSku.getCostPrice(); |
| | | BigDecimal subtractPrice = presentPrice.subtract(costPrice);//现价和成本价之间的差价 |
| | | if(subtractPrice.compareTo(BigDecimal.ZERO) <= 0){ |
| | | continue; |
| | | } |
| | | BigDecimal multiply = subtractPrice.divide(presentPrice, 2, BigDecimal.ROUND_DOWN).multiply(mallOrderItem.getAmount()); |
| | | totalScoreAdd = totalScoreAdd.add(multiply); |
| | | } |
| | | |
| | | |
| | | log.info("订单支付加积分---totalScoreAdd:{}", totalScoreAdd); |
| | | if(totalScoreAdd.compareTo(BigDecimal.ZERO) <= 0){ |
| | | return; |
| | | } |
| | | BigDecimal bigDecimal = totalScoreAdd.add(mallMemberWallet.getScore()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | mallMemberWallet.setScore(bigDecimal); |
| | | mallMemberWallet.setBalance(mallMemberWallet.getBalance()); |
| | | mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); |
| | | } |
| | | } |
| | | |
| | | threadResult.success().message("支付成功"); |
| | | |
| | | |
| | | } else { |
| | | log.info("订单状态不为待付款,order status=", order.getStatus()); |
| | | } |
| | |
| | | // resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "支付回调签名错误"); |
| | | } finally { |
| | | // 通知线程消息 |
| | | PayThreadPool.notifyThread(Integer.valueOf(orderId), threadResult); |
| | | // PayThreadPool.notifyThread(Integer.valueOf(orderId), threadResult); |
| | | sendResultBack(response, resXml); |
| | | } |
| | | return; |
| | |
| | | out.close(); |
| | | } |
| | | |
| | | |
| | | // @PostMapping(value = "/xcxCodePayCallBack") |
| | | // public String xcxCodePayCallBack(@RequestBody String xmlData) throws WxPayException { |
| | | // log.info("=======微信支付码付款回调:{}========", xmlData); |
| | | // WxPayOrderNotifyResult notifyResult = wxPayService.parseOrderNotifyResult(xmlData); |
| | | // xcxCodePayService.payCallback(notifyResult.toMap()); |
| | | // return WxPayNotifyResponse.success("成功"); |
| | | // } |
| | | |
| | | |
| | | } |