From 7cf1eb27ecbd23ddc1d0e8080c9637aa6f2a2bf9 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 25 六月 2025 08:45:38 +0800
Subject: [PATCH] Merge branch 'dev' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 151 insertions(+), 28 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 1d39329..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) {
@@ -118,7 +163,10 @@
TAppUserAddress data = appUserClient.getAddressById(byId.getAppUserAddressId()).getData();
if (data != null) {
byId.setReceivingName(data.getName() + "-" + data.getPhone());
- byId.setReceivingAddress(data.getAddress());
+ byId.setReceivingAddress(data.getProvince()+data.getCity()
+ +(data.getDistrict()==null?"":data.getDistrict())
+ +(data.getAddress()==null?"":data.getAddress())
+ +(data.getHouseNumber()==null?"":data.getHouseNumber()));
}
}
if (byId.getOrderType()==1){
@@ -135,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) {
@@ -142,6 +192,8 @@
return AjaxResult.success();
}
+
+ @RequiresPermissions(value = {"/shoppingOrder/cancel"}, logical = Logical.OR)
@GetMapping("/cancelShoppingOrder")
@ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"})
public AjaxResult cancelShoppingOrder(String id) {
@@ -150,16 +202,31 @@
// 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:
// 微信
WxPaymentRefundModel wxPaymentRefundModel = new WxPaymentRefundModel();
wxPaymentRefundModel.setTransaction_id(byId.getSerialNumber());
wxPaymentRefundModel.setOut_trade_no(byId.getCode());
- wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GW"));
- // todo 部署到线上之后写回调地址
-// wxPaymentRefundModel.setNotify_url("");
+ wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GWTK"));
+ wxPaymentRefundModel.setReason("后台购物订单退款");
+ wxPaymentRefundModel.setNotify_url("/payment/wx/refund/notify");
String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString();
if (string.contains(".")) {
string = string.substring(0, string.indexOf("."));
@@ -167,29 +234,46 @@
int i = Integer.parseInt(string);
WxPaymentRefundModel.RefundAmount refundAmount = new WxPaymentRefundModel.RefundAmount();
refundAmount.setTotal(i);
+ 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("GW");
+ String gw = OrderCodeUtil.getOrderCode("GWF");
refundReq.setOutRequestNo(gw);
refundReq.setRefundAmount(byId.getPaymentAmount().toString());
- refundReq.setRefundReason("后台退款");
+ refundReq.setRefundReason("后台购物订单退款");
RefundResp data = aliPaymentClient.refund(refundReq).getData();
if (data != null) {
- // 退款成功 回退优惠券
-// byId.setStatus(4);
+ 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());
}
+ byId.setRefundCode(gw);
+ byId.setRefundAmount(byId.getPaymentAmount());
+ byId.setRefundStatus(2);
+ byId.setRefundSerialNumber(data.getTradeNo());
+ shoppingOrderService.updateById(byId);
}
break;
}
@@ -197,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) {
@@ -211,6 +297,8 @@
return AjaxResult.success();
}
+
+
@GetMapping("/getMyShoppingOrderList")
@ApiOperation(value = "获取购买订单列表", tags = {"小程序-商城购买订单"})
public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query) {
@@ -218,16 +306,18 @@
return AjaxResult.success(list);
}
+
+
@GetMapping("/getMyShoppingOrderListNum")
@ApiOperation(value = "获取购买订单列表数量", tags = {"小程序-商城购买订单"})
public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum() {
Long userId = tokenService.getLoginUserApplet().getUserId();
long dfh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
- .eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId));
+ .eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2));
long dsh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
- .eq(TShoppingOrder::getStatus, 2).eq(TShoppingOrder::getAppUserId, userId));
+ .eq(TShoppingOrder::getStatus, 2).eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2));
long ywc = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
- .eq(TShoppingOrder::getStatus, 3).eq(TShoppingOrder::getAppUserId, userId));
+ .eq(TShoppingOrder::getStatus, 3).eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2));
Map<String, Object> map = new HashMap<>();
map.put("dfh", dfh);
map.put("dsh", dsh);
@@ -237,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("不能重复确认收货");
}
@@ -258,14 +370,21 @@
return AjaxResult.error("订单已取消,不允许操作。");
}
shoppingOrder.setStatus(3);
+ shoppingOrder.setReceivingTime(LocalDateTime.now());
shoppingOrderService.updateById(shoppingOrder);
return AjaxResult.success();
}
+ @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);
}
@@ -273,15 +392,11 @@
* 商城订单取消微信退款回调
*/
@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);
- }
+ public void cancelShoppingOrderWxRefund(@RequestParam("out_refund_no") String out_refund_no,
+ @RequestParam("refund_id") String refund_id,
+ @RequestParam("tradeState") String tradeState,
+ @RequestParam("success_time") String success_time) {
+ shoppingOrderService.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time);
}
@@ -292,6 +407,7 @@
List<MyShoppingOrderList> list = shoppingOrderService.getNoInvoicedOrder(query);
return AjaxResult.success(list);
}
+
@PostMapping("/create")
public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto) {
@@ -302,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());
@@ -318,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