ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -118,6 +118,16 @@ public R<String> stopCharging(String id) { return R.fail("手动停止充电失败:" + throwable.getMessage()); } @Override public void chargingOrderWXCallback(String out_trade_no, String transaction_id, String attach) { log.error("充电支付成功回调通知失败:" + throwable.getMessage()); } @Override public void chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) { log.error("远程启动失败后退款通知失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -137,4 +137,30 @@ */ @PutMapping(value = "/t-charging-order/stopCharging/{id}") R<String> stopCharging(@PathVariable("id") String id); /** * 充电支付成功回调通知 * @param out_trade_no * @param transaction_id * @param attach */ @PostMapping("/t-charging-order/chargingOrderWXCallback") void chargingOrderWXCallback(@RequestParam("out_trade_no") String out_trade_no, @RequestParam("transaction_id") String transaction_id, @RequestParam("attach") String attach); /** * 远程启动失败后退款回调 * @param out_refund_no * @param refund_id * @param tradeState * @param success_time */ @PostMapping("/t-charging-order/chargingOrderStartupFailureWxRefund") void chargingOrderStartupFailureWxRefund(@RequestParam("out_trade_no") String out_refund_no, @RequestParam("out_trade_no") String refund_id, @RequestParam("out_trade_no") String tradeState, @RequestParam("out_trade_no") String success_time); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TShoppingOrder.java
@@ -105,7 +105,7 @@ @TableField("remark") private String remark; @ApiModelProperty(value = "状态(1=待发货,2=待收货,3=已完成,4=已取消)") @ApiModelProperty(value = "状态(1=待发货,2=待收货,3=已完成,4=已取消 5=交易关闭)") @TableField("status") private Integer status; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrder.java
@@ -101,5 +101,8 @@ @ApiModelProperty(value = "userUid") @TableField(exist = false) private String userUid; @ApiModelProperty(value = "购买用户") @TableField(exist = false) private String userPhone; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/GoodsDTO.java
@@ -14,6 +14,6 @@ private String name; @ApiModelProperty(value = "1现金购买 2积分兑换 ") private Integer type; @ApiModelProperty(value = "1全部 2已售罄 ") @ApiModelProperty(value = "1全部 2已售罄 3已下架") private Integer otherState; } ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/factory/WxPaymentFallbackFactory.java
@@ -38,16 +38,6 @@ public R<Map<String, Object>> orderPay(PaymentOrder paymentOrder) { return R.fail("调起微信支付失败:" + throwable.getMessage()); } @Override public R<Map<String, Object>> payNotify(HttpServletRequest request) { return R.fail("微信支付回调失败:" + throwable.getMessage()); } @Override public void ack() { } @Override public void close(String outTradeNo) { @@ -57,11 +47,6 @@ @Override public R<String> refundOrderR(WxPaymentRefundModel model) { return R.fail("微信退款失败:" + throwable.getMessage()); } @Override public R<WxRefundNotifyResp> refundNotify(HttpServletRequest request) { return R.fail("微信退款回调失败:" + throwable.getMessage()); } }; } ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/WxPaymentClient.java
@@ -41,20 +41,6 @@ R<Map<String, Object>> orderPay(@RequestBody PaymentOrder paymentOrder); /** * 支付回调 * @param request * @return */ @PostMapping("/wx/pay/notify") R<Map<String, Object>> payNotify(HttpServletRequest request); /** * 支付回调成功后的成功应答 */ @PostMapping("/wx/pay/ack") void ack(); /** * 关闭订单 @@ -66,10 +52,4 @@ @ApiOperation("订单退款") @PostMapping(value = "/wx/refundOrderR") public R<String> refundOrderR(@RequestBody WxPaymentRefundModel model); @ApiOperation("订单退款回调") @PostMapping(value = "/wx/refund/notify") R<WxRefundNotifyResp> refundNotify(HttpServletRequest request); } ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java
@@ -29,5 +29,5 @@ /** * 回调地址 */ private String notifyUrl ="http://221.182.45.100:9000/payment/wx/pay/notify"; private String notifyUrl ="/payment/wx/pay/notify"; } ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
@@ -46,7 +46,7 @@ enabled: true application-id: ${spring.application.name} tx-service-group: seata_tx_group #此处配置自定义的seata事务分组名称 enable-auto-data-source-proxy: false enable-auto-data-source-proxy: true service: vgroup-mapping: seata_tx_group: default ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -68,6 +68,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; @@ -429,21 +430,12 @@ /** * 充电充值支付回调 * @param request */ @ResponseBody @PostMapping(value = "/chargingOrderWXCallback") public void chargingOrderWXCallback(HttpServletRequest request) { Map<String, Object> data = wxPaymentClient.payNotify(request).getData(); if (null != data) { String out_trade_no = data.get("out_trade_no").toString(); String transaction_id = data.get("transaction_id").toString(); String attach = data.get("attach").toString(); AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach); if (ajaxResult.isSuccess()) { wxPaymentClient.ack(); } } public void chargingOrderWXCallback(@RequestParam("out_trade_no") String out_trade_no, @RequestParam("transaction_id") String transaction_id, @RequestParam("attach") String attach) { AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach); } @@ -472,19 +464,14 @@ /** * 远程启动失败后退款回调 * @param request */ @ResponseBody @PostMapping(value = "/chargingOrderStartupFailureWxRefund") public void chargingOrderStartupFailureWxRefund(HttpServletRequest request){ WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); if(null != data){ String out_refund_no = data.getOut_refund_no(); String refund_id = data.getRefund_id(); String tradeState = data.getTradeState(); String success_time = data.getSuccess_time(); chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); } public void chargingOrderStartupFailureWxRefund(@RequestParam("out_trade_no") String out_refund_no, @RequestParam("out_trade_no") String refund_id, @RequestParam("out_trade_no") String tradeState, @RequestParam("out_trade_no") String success_time){ chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); } @@ -585,7 +572,7 @@ } @ResponseBody @PostMapping(value = "/work/shop") @GetMapping(value = "/work/shop") @ApiOperation(value = "购物收入", tags = {"后台-工作台"}) public R workShop(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) { //count近6个月的数据 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -274,14 +274,14 @@ */ @PostMapping("/cancelShoppingOrderWxRefund") public void cancelShoppingOrderWxRefund(HttpServletRequest request) { WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); if (null != data) { String out_refund_no = data.getOut_refund_no(); String refund_id = data.getRefund_id(); String tradeState = data.getTradeState(); String success_time = data.getSuccess_time(); shoppingOrderService.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time); } // WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); // if (null != data) { // String out_refund_no = data.getOut_refund_no(); // String refund_id = data.getRefund_id(); // String tradeState = data.getTradeState(); // String success_time = data.getSuccess_time(); // shoppingOrderService.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time); // } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -70,6 +70,8 @@ @PostMapping("/addVipOrder") @ApiOperation(value = "添加会员订单", tags = {"管理后台-会员订单"}) public R<Long> addVipOrder(@RequestBody TVipOrder dto) { List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()).list(); if (!list.isEmpty())return R.fail("订单编号已存在"); vipOrderService.saveOrUpdate(dto); return R.ok(dto.getId()); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -498,7 +498,7 @@ paymentOrder.setAmount(addChargingOrder.getPaymentAmount()); paymentOrder.setOpenId(appUser.getWxOpenid()); paymentOrder.setDescription("充电充值"); paymentOrder.setNotifyUrl("/order/t-charging-order/chargingOrderWXCallback"); paymentOrder.setNotifyUrl("/payment/wx/pay/notify"); Map<String, Object> data = wxPaymentClient.orderPay(paymentOrder).getData(); return AjaxResult.success(data); } @@ -511,7 +511,7 @@ req.setBody("充电充值"); AliPaymentResp data = aliPaymentClient.payment(req).getData(); if(null != data){ data.setNotifyUrl(data.getNotifyUrl() + "/t-charging-order/chargingOrderALICallback"); data.setNotifyUrl(data.getNotifyUrl() + "/order/t-charging-order/chargingOrderALICallback"); return AjaxResult.success(data); } } @@ -550,7 +550,9 @@ //根据当前充值的金额和计费模板算出充电的金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); BigDecimal rechargeAmount1 = new BigDecimal(rechargeAmount.toString()); Long now = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat("HHmm"); Long now = Long.valueOf(sdf.format(new Date())); Long nowTimeMillis = System.currentTimeMillis(); //根据支付金额,获取出使用的计费策略明细 //计算电费金额和服务费 BigDecimal serviceCharge = BigDecimal.ZERO; @@ -559,21 +561,27 @@ BigDecimal discount = chargingOrder.getVipDiscount(); //先根据额定功率计算出每秒充电度数,然后计算出支付金额能充多少度电 TChargingGun tChargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); BigDecimal s_degrees = tChargingGun.getRatedPower().divide(new BigDecimal(3600)); BigDecimal s_degrees = tChargingGun.getRatedPower().divide(new BigDecimal(3600), 6, RoundingMode.HALF_EVEN); TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); for (AccountingStrategyDetailOrder accountingStrategyDetailOrder : list) { AccountingStrategyOrder accountingStrategyOrder = accountingStrategyOrderClient.getAccountingStrategyOrderById(accountingStrategyDetailOrder.getAccountingStrategyOrderId()).getData(); Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", "")); Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", "")); String[] split = accountingStrategyDetailOrder.getEndTime().split(":"); if(now >= start){ if(now >= start && now < end){ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0])); calendar.set(Calendar.MINUTE, Integer.valueOf(split[1])); //到此策略结束的秒数 long m = (calendar.getTimeInMillis() - now) / 1000; if(null == nowTimeMillis){ String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":"); Calendar calendar1 = Calendar.getInstance(); calendar1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0])); calendar1.set(Calendar.MINUTE, Integer.valueOf(split1[1])); nowTimeMillis = calendar.getTimeInMillis(); } long m = (calendar.getTimeInMillis() - nowTimeMillis) / 1000; //每度电的单价 BigDecimal total_unit = accountingStrategyDetailOrder.getElectrovalence().add(accountingStrategyDetailOrder.getServiceCharge()); //每秒需要支付的金额 @@ -586,6 +594,7 @@ serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(m)); discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10)))); rechargeAmount1 = rechargeAmount1.subtract(multiply.multiply(new BigDecimal(m))); nowTimeMillis = null; }else{ electrovalence = accountingStrategyDetailOrder.getElectrovalence().multiply(s_degrees).multiply(new BigDecimal(times)); serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(times)); @@ -620,7 +629,8 @@ chargingOrder.setChargeAmount(electrovalence); chargingOrder.setVipDiscountAmount(discountAmount); this.updateById(chargingOrder); TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData(); //调用远程启动充电消息 PlatformStartCharging platformStartCharging = new PlatformStartCharging(); @@ -630,6 +640,10 @@ //使用订单id作为逻辑卡号 platformStartCharging.setCard_number(chargingOrder.getId().toString()); platformStartCharging.setAccount_balance(electrovalence); System.err.println("-------------------远程调起开始充电请求-------------------"); System.err.println(platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 String code = chargingOrder.getCode(); @@ -637,6 +651,8 @@ ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(()->{ List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); System.err.println("-------------------开始检查调起充电结果-------------------"); System.err.println(data.toString()); if(data.size() != 0){ PlatformStartChargingReply platformStartChargingReply = data.get(1); Integer startup_result = platformStartChargingReply.getStartup_result(); @@ -711,7 +727,7 @@ model.setOut_trade_no(chargingOrder.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setReason("充电失败,取消充电订单"); model.setNotify_url("/order/t-charging-order/chargingOrderStartupFailureWxRefund"); model.setNotify_url("/payment/wx/refund/notify"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); @@ -1115,7 +1131,7 @@ model.setOut_trade_no(chargingOrder.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setReason("充电完成退款"); model.setNotify_url("/order/t-charging-order/chargingOrderStartupFailureWxRefund"); model.setNotify_url("/payment/wx/refund/notify"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -584,6 +584,7 @@ if (data1!=null){ tShoppingOrder.setName(data1.getName()); } tShoppingOrder.setStatus(3); break; } if (tShoppingOrder.getAppUserId() != null){ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.dto.GiveVipDto; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.order.api.model.TVipOrder; @@ -33,6 +35,8 @@ @Resource private VipClient vipClient; @Resource private AppUserClient appUserClient; @Override public PageInfo<TVipOrder> pageList(VipShoppingOrderQuery query) { String startTime1 = null; @@ -50,9 +54,12 @@ tVipOrder.setUid(tVipOrder.getId().toString()); tVipOrder.setUserUid(tVipOrder.getAppUserId().toString()); TVip data = vipClient.getInfo(tVipOrder.getVipId()).getData(); if (data!=null){ tVipOrder.setName(data.getName()); } TAppUser data1 = appUserClient.getUserById(tVipOrder.getAppUserId()).getData(); if (data1!=null)tVipOrder.setUserPhone(data1.getPhone()); } pageInfo.setRecords(list); return pageInfo; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
New file @@ -0,0 +1,120 @@ package com.ruoyi.order.util.task; import com.alibaba.fastjson2.util.UUIDUtils; import com.alibaba.nacos.common.utils.UuidUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.order.api.model.TChargingBill; import com.ruoyi.order.service.TChargingBillService; import org.apache.logging.log4j.core.util.UuidUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import java.util.stream.Collectors; /** * @author zhibing.pu * @date 2023/7/11 8:39 */ @Component public class TaskUtil { @Resource private TChargingBillService chargingBillService; @Resource private SiteClient siteClient; public static void main(String[] args) { LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1). withDayOfMonth(2); String string = firstDayOfLastMonth.toString(); // 将-替换为空字符串 string = string.replace("-", ""); System.err.println(string); } // 每月2号凌晨12点执行的定时任务 @Scheduled(cron = "0 0 0 2 * ?") public void taskMonth() { try { // 获取上个月的开始和结束日期 LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1). withDayOfMonth(2); String string = firstDayOfLastMonth.toString(); // 将-替换为空字符串 string = string.replace("-", ""); // 生成一次全站订单 TChargingBill tChargingBill = new TChargingBill(); // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置) Random random = new Random(); String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9 .mapToObj(String::valueOf) .collect(Collectors.joining()); // 将其连接成一个字符串 tChargingBill.setCode("JSD"+string+randomDigits+"001" ); tChargingBill.setType(1); tChargingBill.setBillTime(LocalDateTime.now()); tChargingBill.setStatus(1); tChargingBill.setOrderState(2); chargingBillService.save(tChargingBill); // 每月二号给每个站点生成上月账单 List<Integer> collect = siteClient.getSiteAll().getData().stream().map(Site::getId).collect(Collectors.toList()); List<TChargingBill> tChargingBills = new ArrayList<>(); for (int i = 1; i <= collect.size(); i++) { TChargingBill tChargingBill1 = new TChargingBill(); Random random1 = new Random(); String randomDigits1 = random1.ints(10, 0, 10) // 生成10个随机数字,范围在0-9 .mapToObj(String::valueOf) .collect(Collectors.joining()); // 将其连接成一个字符串 tChargingBill1.setCode("JSD"+string+randomDigits1+i ); tChargingBill1.setType(2); tChargingBill1.setSiteId(collect.get(i)); tChargingBill1.setBillTime(LocalDateTime.now()); tChargingBill1.setStatus(1); tChargingBill1.setOrderState(2); tChargingBills.add(tChargingBill1); } if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills); } catch (Exception e) { e.printStackTrace(); } } // 每个月最后一天23点执行的定时任务 @Scheduled(cron = "0 0 23 L * ?") public void taskLastDay() { try { // 获取上个月的开始和结束日期 LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1). withDayOfMonth(1); LocalDate lastDayOfLastMonth = LocalDate.now().minusMonths(1). withDayOfMonth(firstDayOfLastMonth.lengthOfMonth()); // 将 LocalDate 转换为 LocalDateTime,并设定时间为一天的开始 LocalDateTime startDateTime = firstDayOfLastMonth.atStartOfDay(); LocalDateTime endDateTime = lastDayOfLastMonth.atTime(23, 59, 59); // 设定到最后一秒 // 构建查询条件 LambdaQueryWrapper<TChargingBill> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.ge(TChargingBill::getBillTime, Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant())) .le(TChargingBill::getBillTime, Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录 List<TChargingBill> list = chargingBillService.list(queryWrapper); for (TChargingBill tChargingBill : list) { tChargingBill.setStatus(2); } chargingBillService.updateBatchById(list); } catch (Exception e) { e.printStackTrace(); } } } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
@@ -255,6 +255,7 @@ </if> and t1.payment_status = 2 AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} order by t1.create_time desc </select> <select id="sixBefore" resultType="com.ruoyi.order.dto.SixShopDto"> SELECT ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml
@@ -44,7 +44,9 @@ <if test="startTime1 != null and startTime1!=''"> and (t1.create_time between #{startTime1} and #{startTime2} </if> and t1.payment_status = 2 AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} order by t1.create_time desc </select> <select id="sixBefore" resultType="com.ruoyi.order.dto.SixVipDto"> SELECT ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -35,6 +35,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -180,6 +181,24 @@ public AjaxResult<PageInfo<TCoupon>> pageList(@RequestBody CouponQuery dto) { return AjaxResult.ok(tCouponService.pageList(dto)); } @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券列表分页查询") @PostMapping(value = "/pageList3") public AjaxResult<List<TCoupon>> pageList() { List<TCoupon> tCoupons = new ArrayList<>(); List<TCoupon> list = tCouponService.lambdaQuery().eq(TCoupon::getStatus, 1) .orderByDesc(TCoupon::getCreateTime).list(); for (TCoupon tCoupon : list) { if (tCoupon.getValidityPeriodMode()==1){ if (LocalDateTime.now().isBefore(tCoupon.getEndTime())){ tCoupons.add(tCoupon); } }else{ tCoupons.add(tCoupon); } } return AjaxResult.ok(tCoupons); } /** * 小程序远程调用 获取优惠券信息 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
@@ -45,6 +45,9 @@ <if test="req.otherState != null and req.otherState == 2"> AND inventory = 0 </if> <if test="req.otherState != null and req.otherState ==3"> AND status = #{req.status} </if> AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </where> ORDER BY create_time DESC ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
@@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.payment.api.vo.PaymentOrder; import com.ruoyi.payment.api.vo.WxRefundNotifyResp; @@ -37,6 +38,9 @@ @Resource private OrderClient orderClient; @Resource private ChargingOrderClient chargingOrderClient; @@ -121,6 +125,7 @@ log.info("支付回调:{}", params); String outRefundNo = (String) params.get("transaction_id"); String out_trade_no = params.get("out_trade_no").toString(); String attach = params.get("attach").toString(); String substring = out_trade_no.substring(0, 2); switch (substring){ //购物订单 @@ -132,8 +137,12 @@ orderClient.vipCallBack(out_trade_no,outRefundNo); System.err.println("----收到会员回调"); break; case "CD": chargingOrderClient.chargingOrderWXCallback(out_trade_no, outRefundNo, attach); System.err.println("----充电支付回调"); break; } wxV3Pay.ack(); return R.ok(params); } catch (Exception e) { log.error("支付回调异常:{}", e, e); @@ -180,6 +189,15 @@ // 时间不对的话,可以调用 WxTimeUtils.toRfc3339Date(success_time)转换一下 String success_time = params.get("success_time").toString(); if (tradeState.equals(RefundEnum.SUCCESS.name())) { String substring = out_refund_no.substring(0, 3); switch (substring){ //购物订单 case "CDF": chargingOrderClient.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); System.err.println("----充电启动失败退款回调通知"); break; } WxRefundNotifyResp resp = new WxRefundNotifyResp(); resp.setOut_trade_no(out_trade_no); resp.setOut_refund_no(out_refund_no);