| | |
| | | package cc.mrbird.febs.pay.controller; |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; |
| | | import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; |
| | | import cc.mrbird.febs.common.enumerates.OrderStatusEnum; |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.properties.XcxProperties; |
| | | 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.IApiMallMemberService; |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; |
| | | import cc.mrbird.febs.mall.service.IMallMoneyFlowService; |
| | | import cc.mrbird.febs.pay.model.NotifyData; |
| | | import cc.mrbird.febs.pay.model.OrderStateDto; |
| | | 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.IXcxPayService; |
| | | import cc.mrbird.febs.pay.util.PayThreadPool; |
| | | import cc.mrbird.febs.pay.service.WxFaPiaoService; |
| | | import cc.mrbird.febs.pay.util.Signature; |
| | | import cc.mrbird.febs.pay.util.Util; |
| | | import cc.mrbird.febs.pay.util.WechatConfigure; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import com.wechat.pay.contrib.apache.httpclient.notification.NotificationRequest; |
| | | 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.client.RestTemplate; |
| | | import org.thymeleaf.engine.TemplateData; |
| | | |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.BufferedReader; |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | |
| | | @Autowired |
| | | DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | @Autowired |
| | | IMallMoneyFlowService mallMoneyFlowService; |
| | | @Autowired |
| | | RedisUtils redisUtils; |
| | | @Autowired |
| | | private IApiMallMemberWalletService memberWalletService; |
| | | @Autowired |
| | | private IApiMallMemberService mallMemberService; |
| | | @Autowired |
| | | private MallAgentRecordMapper mallAgentRecordMapper; |
| | | @Autowired |
| | | private AgentProducer agentProducer; |
| | | |
| | | @Autowired |
| | | private IXcxPayService iXcxPayService; |
| | | |
| | | @Autowired |
| | | private WxFaPiaoService wxFaPiaoService; |
| | | |
| | | private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); |
| | | /** |
| | |
| | | attrStr = data.getAttach(); |
| | | JSONObject jsonObject = JSONUtil.parseObj(attrStr); |
| | | String rechargeNo = (String) jsonObject.get("rechargeNo"); |
| | | Integer type = (Integer) jsonObject.get("type"); |
| | | Long memberId = Long.parseLong(jsonObject.get("memberId").toString()); |
| | | Long agentApplyId = Long.parseLong(jsonObject.get("agentApplyId").toString()); |
| | | // 检验订单状态 |
| | | MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOneByOrderNoAndMemberId(rechargeNo,memberId); |
| | | // 校验签名 |
| | |
| | | |
| | | if (ObjectUtil.isNotEmpty(mallMoneyFlow)) { |
| | | log.debug("检查支付金额payMoney={},mallMoneyFlow.getPayMoney()={}", payMoney, mallMoneyFlow.getAmount()); |
| | | //合伙人申请的充值,要更新会员状态为FIRST_LEVEL |
| | | if(2 == type){ |
| | | log.info("微信充值回调" + agentApplyId); |
| | | MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(agentApplyId); |
| | | mallMemberService.updateMemberAgent(agentApplyId,mallAgentRecord.getAgentLevel()); |
| | | } |
| | | memberWalletService.addBalance(payMoney,memberId); |
| | | mallMoneyFlow.setStatus(2); |
| | | mallMoneyFlowMapper.updateById(mallMoneyFlow); |
| | | |
| | | /** |
| | | * 充值赠送金额 |
| | | */ |
| | | DataDictionaryCustom giveStateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.GIVE_STATE.getType(), |
| | | DataDictionaryEnum.GIVE_STATE.getCode()); |
| | | |
| | | DataDictionaryCustom giveAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.GIVE_AMOUNT.getType(), |
| | | DataDictionaryEnum.GIVE_AMOUNT.getCode()); |
| | | |
| | | DataDictionaryCustom chargeAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.CHARGE_AMOUNT.getType(), |
| | | DataDictionaryEnum.CHARGE_AMOUNT.getCode()); |
| | | /** |
| | | * 普通充值 |
| | | * 开启了充值赠送 |
| | | * 系统设置的赠送金额和充值金额不为空 |
| | | * 充值金额大于等于系统设置的充值金额 |
| | | */ |
| | | if(1 == type |
| | | && ObjectUtil.isNotEmpty(giveStateDic) |
| | | && "1".equals(giveStateDic.getValue()) |
| | | && ObjectUtil.isNotEmpty(giveAmountDic) |
| | | && ObjectUtil.isNotEmpty(chargeAmountDic)){ |
| | | BigDecimal giveAmount = ObjectUtil.isEmpty(giveAmountDic.getValue()) ? |
| | | BigDecimal.ZERO : |
| | | new BigDecimal(giveAmountDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN); |
| | | BigDecimal chargeAmount = ObjectUtil.isEmpty(chargeAmountDic.getValue()) ? |
| | | BigDecimal.ZERO : |
| | | new BigDecimal(chargeAmountDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN); |
| | | if(payMoney.compareTo(chargeAmount) >= 0){ |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | giveAmount, |
| | | MoneyFlowTypeEnum.RECHARGE_SEND.getValue(), |
| | | rechargeNo+"ZS", |
| | | FlowTypeEnum.BALANCE.getValue(), |
| | | "充值赠送金额", |
| | | 2); |
| | | |
| | | memberWalletService.addBalance(giveAmount,memberId); |
| | | } |
| | | } |
| | | |
| | | RechargeWalletMessageSendDto rechargeWalletMessageSendDto = new RechargeWalletMessageSendDto(); |
| | | rechargeWalletMessageSendDto.setRechargeNo(rechargeNo); |
| | |
| | | // System.out.println(memberId); |
| | | // System.out.println(rechargeNo); |
| | | // } |
| | | /** |
| | | * 微信电子发票回调接口 |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @RequestMapping(value = "/fapiaoCallBack") |
| | | public Map<String, Object> fapiaoCallBack(HttpServletResponse response, HttpServletRequest request) throws IOException { |
| | | return wxFaPiaoService.fapiaoCallBack(response,request); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 微信支付回调接口 |
| | | */ |
| | |
| | | order.setPayTime(new Date()); |
| | | order.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); |
| | | mallOrderInfoMapper.updateById(order); |
| | | |
| | | agentProducer.sendOrderCoupon(order.getId()); |
| | | |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | order.getMemberId(), |
| | | order.getAmount().negate(), |
| | | MoneyFlowTypeEnum.WECHAT_PAY.getValue(), |
| | | order.getOrderNo(), |
| | | FlowTypeEnum.WECHAT.getValue(), |
| | | "微信支付", |
| | | 2); |
| | | threadResult.success().message("支付成功"); |
| | | } else { |
| | | log.info("订单状态不为待付款,order status=", order.getStatus()); |