| | |
| | | import com.mzl.flower.dto.request.payment.TransferDetailReqDTO; |
| | | import com.mzl.flower.dto.request.payment.TransferReqDTO; |
| | | import com.mzl.flower.dto.request.payment.UserPaymentDTO; |
| | | import com.mzl.flower.entity.flower.Flower; |
| | | import com.mzl.flower.entity.payment.*; |
| | | import com.mzl.flower.entity.system.UserWechat; |
| | | import com.mzl.flower.mapper.flower.FlowerMapper; |
| | | import com.mzl.flower.mapper.payment.*; |
| | | import com.mzl.flower.mapper.system.UserWechatMapper; |
| | |
| | | import java.io.InputStreamReader; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.time.ZonedDateTime; |
| | | import java.time.*; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | |
| | | @Autowired |
| | | private CouponRecordService couponRecordService; |
| | | |
| | | @Autowired |
| | | private OrderService orderService; |
| | | |
| | | /** |
| | | * 微信预支付 |
| | | * |
| | |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"); |
| | | |
| | | // 使用formatter格式化ZonedDateTime |
| | | String formattedDateTime = zonedDateTime.plusMinutes(5).format(formatter); |
| | | String formattedDateTime = zonedDateTime.plusMinutes(15).format(formatter); |
| | | |
| | | return formattedDateTime; // 格式化日期 |
| | | } |
| | |
| | | order.setPaymentAmount(order.getTotalAmount()); |
| | | } |
| | | order.setPaymentTime(up.getPaymentTimeCallback()); |
| | | if(null!=order.getPaymentTime()){ |
| | | LocalDateTime paymentTime = order.getPaymentTime(); |
| | | LocalDate paymentDate = paymentTime.toLocalDate(); |
| | | LocalDateTime today1700 = paymentTime.with(LocalTime.of(17, 0)); |
| | | // 比较时间是否大于当天的 17:00 |
| | | if (paymentTime.isAfter(today1700)) { |
| | | // 如果大于 17:00,设置为下一天的日期 |
| | | paymentDate = paymentDate.plusDays(1); |
| | | } |
| | | order.setPaymentDateSta(paymentDate); |
| | | } |
| | | |
| | | order.setStatus(Constants.ORDER_STATUS.SEND.name()); |
| | | } else if (Constants.ORDER_STATUS_BACKEND.CANCEL.name().equals(orderStatus)){ |
| | | order.setStatus(Constants.ORDER_STATUS.CANCEL.name()); |
| | |
| | | revertPointGoodsRecord(order.getId()); |
| | | |
| | | //恢复优惠券 |
| | | couponRecordService.cancelCouponUsage(order.getId()); |
| | | String memberCouponId = order.getMemberCouponId(); |
| | | if(StringUtils.isNotEmpty(memberCouponId)) { |
| | | couponRecordService.cancelCouponUsage(order.getId()); |
| | | } |
| | | } |
| | | |
| | | private void revertPointGoodsRecord(String orderId){ |
| | |
| | | } |
| | | |
| | | public Map payAgain(String orderId){ |
| | | // 获取订单里面的商品是否有限购的,如果有则判断是否已经超过限购数量 |
| | | List<OrderItem> orderItemList = orderItemMapper.selectList(new QueryWrapper<OrderItem>() |
| | | .eq("order_id", orderId)); |
| | | |
| | | orderItemList.forEach(orderItem -> { |
| | | // 限购数量 鲜花数量校验 |
| | | Integer completeNumToday=orderService.getFlowerCompleteNumToday(orderItem.getCreateBy(),orderItem.getFlowerId()); |
| | | Integer tmp=completeNumToday+orderItem.getNum(); |
| | | Flower flower=flowerMapper.selectById(orderItem.getFlowerId()); |
| | | if(null!=flower.getLimited() && tmp.compareTo(flower.getLimited())>0){ |
| | | throw new ValidationException("商品:'"+flower.getName()+"' 昨天17:00到今天17:00 超过限售数量:"+flower.getLimited()+"!"); |
| | | } |
| | | |
| | | }); |
| | | |
| | | |
| | | UserPayment up = userPaymentMapper.selectOne( |
| | | new QueryWrapper<UserPayment>().eq("order_id", orderId)); |
| | | if(StringUtils.isNotEmpty(up.getStatus())){ |
| | |
| | | request.setTransactionId(o.getPaymentTrId()); |
| | | request.setNotifyUrl(PyamentV3Configurer.notify_url_refund); |
| | | |
| | | AmountReq amount = new AmountReq(); |
| | | int oa = prepareAmount(o.getPaymentAmount()); |
| | | amount.setTotal((long)oa); |
| | | amount.setRefund((long)oa); |
| | | amount.setCurrency("CNY"); |
| | | request.setAmount(amount); |
| | | // 调用接口 |
| | | refundService.create(request); |
| | | |
| | | o.setRefundAmount(o.getPaymentAmount()); |
| | | o.setRefundNo(request.getOutRefundNo()); |
| | | o.setRefundTime(LocalDateTime.now()); |
| | |
| | | deliveryOrderService.refundDelete(orderId); |
| | | |
| | | releasePrepayLock(o); |
| | | |
| | | //最后调用微信退款接口,防止回滚 |
| | | AmountReq amount = new AmountReq(); |
| | | int oa = prepareAmount(o.getPaymentAmount()); |
| | | amount.setTotal((long)oa); |
| | | amount.setRefund((long)oa); |
| | | amount.setCurrency("CNY"); |
| | | request.setAmount(amount); |
| | | // 调用接口 |
| | | refundService.create(request); |
| | | } |
| | | |
| | | public String refundOrderSub(Order o, BigDecimal refundAmount){ |
| | |
| | | InitiateBatchTransferRequest request = new InitiateBatchTransferRequest(); |
| | | request.setAppid(dto.getAppId()); |
| | | request.setOutBatchNo(transfer.getId());//【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 |
| | | request.setBatchName(transfer.getName());//【批次名称】 该笔批量转账的名称 |
| | | request.setBatchRemark(transfer.getRemarks());//【批次备注】 转账说明,UTF8编码,最多允许32个字符 |
| | | request.setBatchName(subString(transfer.getName(), 32));//【批次名称】 该笔批量转账的名称 |
| | | request.setBatchRemark(subString(transfer.getRemarks(), 32));//【批次备注】 转账说明,UTF8编码,最多允许32个字符 |
| | | |
| | | List<TransferDetailReqDTO> details = dto.getDetails(); |
| | | transfer.setTotalNum(details.size()); |
| | |
| | | return transfer.getId(); |
| | | } |
| | | |
| | | private String subString(String str, int len){ |
| | | if(StringUtils.isEmpty(str)){ |
| | | return str; |
| | | } |
| | | |
| | | int length = str.length(); |
| | | if(length > len){ |
| | | return str.substring(0, len - 1); |
| | | } |
| | | |
| | | return str; |
| | | } |
| | | |
| | | public void checkTransferStatus(Transfer transfer) {//定时任务验证转账状态 |
| | | GetTransferBatchByOutNoRequest request = new GetTransferBatchByOutNoRequest(); |
| | | request.setOutBatchNo(transfer.getId()); |