From 67d06a785d5fc4524639ace27651c01ff05a4b58 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期四, 29 五月 2025 22:31:33 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java | 145 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 132 insertions(+), 13 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java index e9df54a..9c4540d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java @@ -1,12 +1,15 @@ package com.ruoyi.order.controller; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ruoyi.account.api.feignClient.AppCouponClient; +import com.ruoyi.account.api.feignClient.AppUserAddressClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUserAddress; import com.ruoyi.common.core.domain.R; @@ -14,11 +17,19 @@ import com.ruoyi.common.core.utils.OrderCodeUtil; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.log.enums.OperatorType; +import com.ruoyi.common.security.annotation.Logical; +import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.model.TShoppingOrderRefund; import com.ruoyi.order.api.query.ShoppingOrderQuery; import com.ruoyi.order.dto.*; +import com.ruoyi.order.service.TShoppingOrderRefundService; import com.ruoyi.order.service.TShoppingOrderService; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; @@ -40,6 +51,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -73,8 +85,40 @@ private AppCouponClient appCouponClient; @Resource private SysUserClient sysUserClient; + @Resource + private TShoppingOrderRefundService shoppingOrderRefundService; + @Resource + private AppUserAddressClient appUserAddressClient; + + + + /** + * 远程管理后台取消订单后退款回调 + */ + @ResponseBody + @PostMapping(value = "/shoppingOrderWxRefund") + public void shoppingOrderWxRefund(@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){ + if("SUCCESS".equals(tradeState)){ + TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no)); + one.setRefundSerialNumber(refund_id); + one.setRefundStatus(2); + one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + shoppingOrderRefundService.updateById(one); + TShoppingOrder byId = shoppingOrderService.getById(one.getShoppingOrderId()); + byId.setStatus(4); + shoppingOrderService.updateById(byId); + if (byId.getAppCouponId() != null) { + appCouponClient.refund(byId.getAppCouponId().toString()); + } + } + } + + @RequiresPermissions(value = {"/shoppingOrder"}, logical = Logical.OR) @PostMapping("/getShoppingOrderList") @ApiOperation(value = "列表查询", tags = {"管理后台-购物订单"}) public AjaxResult<PageInfo<TShoppingOrder>> getShoppingOrderList(@RequestBody ShoppingOrderQuery query) { @@ -98,6 +142,7 @@ return AjaxResult.success(res); } + @RequiresPermissions(value = {"/shoppingOrder/deliver_goods"}, logical = Logical.OR) @GetMapping("/getShoppingOrderInfoById") @ApiOperation(value = "根据订单id查看订单详情", tags = {"管理后台-购物订单"}) public AjaxResult<TShoppingOrder> getShoppingOrderList(String id) { @@ -138,6 +183,8 @@ return AjaxResult.success(byId); } + + @RequiresPermissions(value = {"/shoppingOrder/del"}, logical = Logical.OR) @GetMapping("/deleteShoppingOrder") @ApiOperation(value = "批量删除订单", tags = {"管理后台-购物订单"}) public AjaxResult<TShoppingOrder> deleteShoppingOrder(String ids) { @@ -145,6 +192,8 @@ return AjaxResult.success(); } + + @RequiresPermissions(value = {"/shoppingOrder/cancel"}, logical = Logical.OR) @GetMapping("/cancelShoppingOrder") @ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"}) public AjaxResult cancelShoppingOrder(String id) { @@ -153,7 +202,22 @@ // todo 根据支付方式 取消订单 byId.setCancellationId(userid); byId.setCancellationTime(LocalDateTime.now()); - byId.setStatus(4); + byId.setStatus(5); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + TShoppingOrderRefund tShoppingOrderRefund = new TShoppingOrderRefund(); + tShoppingOrderRefund.setPayTime(byId.getPayTime()); + tShoppingOrderRefund.setPayCode(byId.getSerialNumber()); + tShoppingOrderRefund.setPayAmount(byId.getPaymentAmount()); + tShoppingOrderRefund.setPayType(1); + tShoppingOrderRefund.setShoppingOrderId(byId.getId()); + tShoppingOrderRefund.setRefundAmount(byId.getPaymentAmount()); + tShoppingOrderRefund.setRefundStatus(1); + tShoppingOrderRefund.setCode("GWF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); + tShoppingOrderRefund.setRefundTitle("后台取消订单"); + tShoppingOrderRefund.setRefundContent("后台取消订单"); + tShoppingOrderRefund.setRefundReason("后台取消订单"); + tShoppingOrderRefund.setRefundRemark("全额退款"); + tShoppingOrderRefund.setRefundTotalAmount(byId.getPaymentAmount()); switch (byId.getPaymentType()) { case 1: // 微信 @@ -163,8 +227,6 @@ wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GWTK")); wxPaymentRefundModel.setReason("后台购物订单退款"); wxPaymentRefundModel.setNotify_url("/payment/wx/refund/notify"); - - // todo 部署到线上之后写回调地址 String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString(); if (string.contains(".")) { string = string.substring(0, string.indexOf(".")); @@ -175,28 +237,43 @@ refundAmount.setCurrency("CNY"); refundAmount.setRefund(i); wxPaymentRefundModel.setAmount(refundAmount); - wxPaymentClient.refundOrderR(wxPaymentRefundModel); + R<Map<String, Object>> stringR = wxPaymentClient.refundOrderR(wxPaymentRefundModel); + if(200 == stringR.getCode()){ + shoppingOrderRefundService.save(tShoppingOrderRefund); + //手续费 + Map<String, Object> amount1 = (Map<String, Object>) stringR.getData().get("amount"); + Object refund_fee1 = amount1.get("refund_fee"); + BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); + tShoppingOrderRefund.setRefundFee(refund_fee); + shoppingOrderRefundService.updateById(tShoppingOrderRefund); + } break; case 2: // 支付宝 RefundReq refundReq = new RefundReq(); refundReq.setOutTradeNo(byId.getSerialNumber()); - String gw = OrderCodeUtil.getOrderCode("GWTK"); + String gw = OrderCodeUtil.getOrderCode("GWF"); refundReq.setOutRequestNo(gw); refundReq.setRefundAmount(byId.getPaymentAmount().toString()); refundReq.setRefundReason("后台购物订单退款"); RefundResp data = aliPaymentClient.refund(refundReq).getData(); if (data != null) { - // 退款成功 回退优惠券 byId.setStatus(4); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); + TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, data.getOutTradeNo())); + one.setRefundSerialNumber(data.getTradeNo()); + one.setRefundStatus(2); + one.setRefundTime(LocalDateTime.parse(sdf1.format(new Date()), DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + shoppingOrderRefundService.updateById(one); if (byId.getAppCouponId() != null) { + // 退款成功 回退优惠券 appCouponClient.refund(byId.getAppCouponId().toString()); - byId.setRefundCode(gw); - byId.setRefundAmount(byId.getPaymentAmount()); - byId.setRefundStatus(2); - byId.setRefundSerialNumber(data.getTradeNo()); - shoppingOrderService.updateById(byId); } + byId.setRefundCode(gw); + byId.setRefundAmount(byId.getPaymentAmount()); + byId.setRefundStatus(2); + byId.setRefundSerialNumber(data.getTradeNo()); + shoppingOrderService.updateById(byId); } break; } @@ -204,6 +281,8 @@ return AjaxResult.success(); } + + @RequiresPermissions(value = {"/shoppingOrder/deliver_goods"}, logical = Logical.OR) @GetMapping("/consignerShoppingOrder") @ApiOperation(value = "发货", tags = {"管理后台-购物订单"}) public AjaxResult consignerShoppingOrder(String id, String companyName, String code) { @@ -218,12 +297,16 @@ return AjaxResult.success(); } + + @GetMapping("/getMyShoppingOrderList") @ApiOperation(value = "获取购买订单列表", tags = {"小程序-商城购买订单"}) public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query) { Map<String, Object> list = shoppingOrderService.getMyShoppingOrderList(query); return AjaxResult.success(list); } + + @GetMapping("/getMyShoppingOrderListNum") @ApiOperation(value = "获取购买订单列表数量", tags = {"小程序-商城购买订单"}) @@ -244,17 +327,39 @@ @GetMapping("/getMyShoppingOrderInfo/{id}") - @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单", "管理后台-支付订单-订单信息"}) + @ApiOperation(value = "获取购买订单详情", tags = {"管理后台-支付订单-订单信息"}) public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id) { + TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); + Long userId = tokenService.getLoginUserApplet().getUserId(); + if(!shoppingOrder.getAppUserId().equals(userId)){ + return AjaxResult.error("权限不足"); + } MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id); return AjaxResult.success(info); } + @GetMapping("/getMyShoppingOrderInfo1/{id}") + @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单"}) + public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo1(@PathVariable String id) { + TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); + Long userId = tokenService.getLoginUserApplet().getUserId(); + if(!shoppingOrder.getAppUserId().equals(userId)){ + return AjaxResult.error("权限不足"); + } + MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id); + return AjaxResult.success(info); + } + + @Log(title = "【我的】确认收货操作", businessType = BusinessType.UPDATE,operatorType = OperatorType.MOBILE) @PutMapping("/confirmReceipt/{id}") @ApiOperation(value = "确认收货操作", tags = {"小程序-商城购买订单"}) public AjaxResult confirmReceipt(@PathVariable String id) { TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); + Long userId = tokenService.getLoginUserApplet().getUserId(); + if(!shoppingOrder.getAppUserId().equals(userId)){ + return AjaxResult.error("权限不足"); + } if (shoppingOrder.getStatus() == 3) { return AjaxResult.error("不能重复确认收货"); } @@ -271,9 +376,15 @@ } + @Log(title = "【我的】取消订单操作", businessType = BusinessType.UPDATE,operatorType = OperatorType.MOBILE) @PutMapping("/cancelOrder/{id}") @ApiOperation(value = "取消订单操作", tags = {"小程序-商城购买订单"}) public AjaxResult cancelOrder(@PathVariable String id) { + TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); + Long userId = tokenService.getLoginUserApplet().getUserId(); + if(!shoppingOrder.getAppUserId().equals(userId)){ + return AjaxResult.error("权限不足"); + } return shoppingOrderService.cancelOrder(id); } @@ -296,6 +407,7 @@ List<MyShoppingOrderList> list = shoppingOrderService.getNoInvoicedOrder(query); return AjaxResult.success(list); } + @PostMapping("/create") public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto) { @@ -306,8 +418,12 @@ shoppingOrder.setOrderType(exchangeDto.getGoodType()); if (exchangeDto.getGoodType() == 1) { shoppingOrder.setGoodsId(exchangeDto.getGoodId()); + shoppingOrder.setStatus(1); + } else { shoppingOrder.setCouponId(exchangeDto.getGoodId()); + shoppingOrder.setStatus(3); + } shoppingOrder.setPurchaseQuantity(exchangeDto.getNum()); shoppingOrder.setAppUserAddressId(exchangeDto.getAddressId()); @@ -322,10 +438,13 @@ shoppingOrder.setPaymentStatus(1); shoppingOrder.setPaymentType(exchangeDto.getPayMethod()); shoppingOrder.setRemark(exchangeDto.getRemark()); - shoppingOrder.setStatus(1); shoppingOrder.setPhone(exchangeDto.getPhone()); shoppingOrder.setCreateTime(LocalDateTime.now()); shoppingOrder.setDelFlag(false); + + + TAppUserAddress data = appUserAddressClient.getAppUserAddressById(exchangeDto.getAddressId()).getData(); + shoppingOrder.setAddressJson(JSON.toJSONString(data)); shoppingOrderService.save(shoppingOrder); return R.ok(shoppingOrder); -- Gitblit v1.7.1