| | |
| | | private HuiminRecordService huiminRecordService; |
| | | @Resource |
| | | private StudentClient studentClient; |
| | | @Resource |
| | | private UserCouponService userCouponService; |
| | | @Resource |
| | | private CouponStoreService couponStoreService; |
| | | |
| | | |
| | | @Autowired |
| | |
| | | @ApiImplicitParam(value = "玩湃惠民卡id", name = "id", dataType = "int", required = true), |
| | | @ApiImplicitParam(value = "支付方式1微信2支付宝", name = "payType", dataType = "int", required = true), |
| | | @ApiImplicitParam(value = "绑定学员ids多,个逗号拼接", name = "studentIds", dataType = "String", required = true), |
| | | @ApiImplicitParam(value = "用户优惠券领取记录id;不使用时不传", name = "couponId", dataType = "long", required = false), |
| | | @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") |
| | | }) |
| | | public ResultUtil<THuiminCard> payHuiminCard(Integer id, Integer payType, String studentIds) { |
| | | public ResultUtil<?> payHuiminCard(Integer id, Integer payType, String studentIds, Long couponId) { |
| | | try { |
| | | Integer uid = tokenUtil.getUserIdFormRedis(); |
| | | if (null == uid) { |
| | |
| | | TPayHuimin tPayHuimin = new TPayHuimin(); |
| | | String[] split = studentIds.split(","); |
| | | |
| | | tPayHuimin.setSalesMoney(huiminCard.getSalesMoney().multiply(new BigDecimal(split.length)).setScale(2)); |
| | | BigDecimal salesMoney = huiminCard.getSalesMoney().multiply(new BigDecimal(split.length)).setScale(2); |
| | | UserCoupon userCoupon = null; |
| | | if (couponId != null && couponId != 0) { |
| | | if (payType != 1 && payType != 2) { |
| | | return ResultUtil.error("优惠券仅支持微信或支付宝支付"); |
| | | } |
| | | userCoupon = userCouponService.getById(couponId); |
| | | if (userCoupon == null || !uid.equals(userCoupon.getUserId()) || !Integer.valueOf(1).equals(userCoupon.getStatus())) { |
| | | return ResultUtil.error("优惠券不可用"); |
| | | } |
| | | Coupon coupon = couponService.getById(userCoupon.getCouponId()); |
| | | if (coupon == null || coupon.getEndTime() == null || !coupon.getEndTime().after(new Date())) { |
| | | return ResultUtil.error("优惠券已过期"); |
| | | } |
| | | if (Integer.valueOf(3).equals(coupon.getUseScope())) { |
| | | Set<Integer> cardStoreIds = Arrays.stream((huiminCard.getStoreIds() == null ? "" : huiminCard.getStoreIds()).split(",")) |
| | | .filter(value -> !value.trim().isEmpty()).map(Integer::valueOf).collect(Collectors.toSet()); |
| | | boolean available = couponStoreService.lambdaQuery().eq(CouponStore::getCouponId, coupon.getId()).list() |
| | | .stream().map(CouponStore::getStoreId).anyMatch(cardStoreIds::contains); |
| | | if (!available) { |
| | | return ResultUtil.error("该优惠券不适用于此惠民卡"); |
| | | } |
| | | } |
| | | if (coupon.getType() == 1) { |
| | | JSONObject rule = JSON.parseObject(coupon.getContent()); |
| | | BigDecimal condition = rule.getBigDecimal("conditionalAmount"); |
| | | BigDecimal deduction = rule.getBigDecimal("deductionAmount"); |
| | | if (condition == null || deduction == null || salesMoney.compareTo(condition) < 0) { |
| | | return ResultUtil.error("该优惠券无法使用"); |
| | | } |
| | | salesMoney = salesMoney.subtract(deduction).max(BigDecimal.ZERO).setScale(2); |
| | | } else if (coupon.getType() == 2) { |
| | | BigDecimal deduction = JSON.parseObject(coupon.getContent()).getBigDecimal("conditionalAmount"); |
| | | if (deduction == null) { |
| | | return ResultUtil.error("该优惠券无法使用"); |
| | | } |
| | | salesMoney = salesMoney.subtract(deduction).max(BigDecimal.ZERO).setScale(2); |
| | | } else { |
| | | return ResultUtil.error("该优惠券不支持购买惠民卡"); |
| | | } |
| | | } |
| | | tPayHuimin.setSalesMoney(salesMoney); |
| | | tPayHuimin.setAppUserId(uid); |
| | | tPayHuimin.setStudentId(studentIds); |
| | | switch (huiminCard.getHuiMinType()) { |
| | |
| | | tPayHuimin.setPaymentType(payType); |
| | | tPayHuimin.setRefundStatus(1); |
| | | tPayHuimin.setCardId(huiminCard.getId()); |
| | | tPayHuimin.setUserCouponId(couponId); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | tPayHuimin.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); |
| | | System.err.println("支付数据" + tPayHuimin); |
| | | payHuiminService.save(tPayHuimin); |
| | | if (userCoupon != null) { |
| | | // t_user_coupon 以 userId 分片;updateById 会把 userId 放入 SET, |
| | | // ShardingSphere 会拒绝更新分片键。只更新状态,并在 WHERE 中带上 userId。 |
| | | boolean couponUpdated = userCouponService.lambdaUpdate() |
| | | .set(UserCoupon::getStatus, 2) |
| | | .eq(UserCoupon::getId, userCoupon.getId()) |
| | | .eq(UserCoupon::getUserId, uid) |
| | | .eq(UserCoupon::getStatus, 1) |
| | | .update(); |
| | | if (!couponUpdated) { |
| | | return ResultUtil.error("优惠券已被使用"); |
| | | } |
| | | } |
| | | BigDecimal bigDecimal = new BigDecimal(studentIds.split(",").length); |
| | | if (tPayHuimin.getSalesMoney().compareTo(BigDecimal.ZERO)==0){ |
| | | // 零元购 |
| | | tPayHuimin.setStatus(2); |
| | | tPayHuimin.setPaymentTime(new Date()); |
| | | payHuiminService.updateById(tPayHuimin); |
| | | return ResultUtil.success(); |
| | | JSONObject data = new JSONObject(); |
| | | data.put("paySuccess", true); |
| | | return ResultUtil.success(data); |
| | | } |
| | | switch (payType) { |
| | | case 1: |
| | | // todo 惠民卡收入属于平台商户 定死 |
| | | return payMoneyUtil.weixinpay("购买玩湃惠民卡", "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(), |
| | | "/base/huimin/callBack/weixinPayHuiminCallback", "APP", ""); |
| | | return appendPaySuccess(payMoneyUtil.weixinpay("购买玩湃惠民卡", "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(), |
| | | "/base/huimin/callBack/weixinPayHuiminCallback", "APP", "")); |
| | | // return payMoneyUtil.weixinpayV3("1720719391","购买玩湃惠民卡",tPayHuimin.getCode(), |
| | | // "/base/huimin/callBack/weixinPayHuiminCallback1",tPayHuimin.getSalesMoney().toString()); |
| | | case 2: |
| | | String string = tPayHuimin.getSalesMoney().toString(); |
| | | return payMoneyUtil.alipay(smid, "购买玩湃惠民卡", "购买玩湃惠民卡", "", tPayHuimin.getCode(), string, |
| | | "/base/huimin/callBack/aliPayHuiminCallback"); |
| | | return appendPaySuccess(payMoneyUtil.alipay(smid, "购买玩湃惠民卡", "购买玩湃惠民卡", "", tPayHuimin.getCode(), string, |
| | | "/base/huimin/callBack/aliPayHuiminCallback")); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | /** |
| | | * 支付参数生成成功不代表实际支付成功,前端仍需拉起第三方支付。 |
| | | */ |
| | | private ResultUtil<?> appendPaySuccess(ResultUtil<?> paymentResult) { |
| | | JSONObject data = paymentResult.getData() == null ? new JSONObject() |
| | | : JSON.parseObject(JSON.toJSONString(paymentResult.getData())); |
| | | if (data == null) { |
| | | data = new JSONObject(); |
| | | } |
| | | data.put("paySuccess", false); |
| | | return ResultUtil.getResult(paymentResult.getCode(), paymentResult.getMsg(), data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查看玩湃惠民卡详情 |