From 0dba7bcfb93ff58079ac610e62062569658f4766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E9=B9=8F=E8=BE=89?= <18322780655@163.com> Date: Tue, 13 Jun 2023 10:08:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pos=20=E6=9C=BA=E9=80=80?= =?UTF-8?q?=E6=AC=BE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MerchantOrderController.java | 10 +- .../cn/pluss/platform/pos/ReturnFundsReq.java | 6 +- .../merchantOrder/MerchantOrderService.java | 4 +- .../impl/MerchantOrderServiceImpl.java | 151 +++++++++++++++++- 4 files changed, 162 insertions(+), 9 deletions(-) diff --git a/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java b/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java index 986be1d..d03b8a5 100644 --- a/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java +++ b/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java @@ -474,7 +474,7 @@ public class MerchantOrderController { @PostMapping(value = "orderList") - public Result posTradeQuery(HttpServletRequest request, @RequestBody BasePosReq req){ + public Object posTradeQuery(HttpServletRequest request, @RequestBody BasePosReq req){ verify(req.getTimestamp(),req.getRequestId(),req.getAppId(),req.getToken()); @@ -495,15 +495,15 @@ public class MerchantOrderController { @PostMapping(value = "orderRefund") - public Result posReturn(HttpServletRequest request,@RequestBody ReturnFundsReq req){ + public Object posReturn(HttpServletRequest request,@RequestBody BasePosReq req){ verify(req.getTimestamp(),req.getRequestId(),req.getAppId(),req.getToken()); - DeviceStock deviceStock = deviceStockService.checkBind(req.getSn()); + ReturnFundsReq fundsReq=JSONObject.parseObject(req.getReqData(),ReturnFundsReq.class); + DeviceStock deviceStock = deviceStockService.checkBind(fundsReq.getSn()); MsgException.checkNull(deviceStock,"不存在的设备信息"); MerchantBaseInfo merchantBaseInfoById = merchantBaseInfoService.getMerchantBaseInfoById(Integer.valueOf(deviceStock.getActMercId())); MsgException.checkNull(merchantBaseInfoById, "该设备对应的商户信息不存在"); - - return null; + return merchantOrderService.posReturnFunds(req.getRequestId(),fundsReq.getOrderNumber(),fundsReq.getRemark(),"Pos",null); } diff --git a/pluss-model-bundle/src/main/java/cn/pluss/platform/pos/ReturnFundsReq.java b/pluss-model-bundle/src/main/java/cn/pluss/platform/pos/ReturnFundsReq.java index 358ebd1..d91e8ba 100644 --- a/pluss-model-bundle/src/main/java/cn/pluss/platform/pos/ReturnFundsReq.java +++ b/pluss-model-bundle/src/main/java/cn/pluss/platform/pos/ReturnFundsReq.java @@ -2,11 +2,15 @@ package cn.pluss.platform.pos; import lombok.Data; +import java.io.Serializable; + @Data -public class ReturnFundsReq extends BasePosReq{ +public class ReturnFundsReq implements Serializable { private String orderNumber; private String sn; + + private String remark; } diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/MerchantOrderService.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/MerchantOrderService.java index 758969c..aa36ac1 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/MerchantOrderService.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/MerchantOrderService.java @@ -427,6 +427,8 @@ public interface MerchantOrderService extends IService { // void sendPayCallBackArrival(String userId,String orderNumber,Double consumeFee); - Result posTradeQuery(String requestId,String merchantCode,String date,String type,Integer page,Integer size); + JSONObject posTradeQuery(String requestId,String merchantCode,String date,String type,Integer page,Integer size); + + JSONObject posReturnFunds(String requestId,String orderNumber,String refundReason,String type, String noticeCode) ; } diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java index 2bb5a1d..5f8f824 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java @@ -2,6 +2,7 @@ package cn.pluss.platform.merchantOrder.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.json.JSONUtil; import cn.pluss.platform.IdCardService; import cn.pluss.platform.PushService; import cn.pluss.platform.activityConsumReturn.ActivityConsumReturnService; @@ -2503,7 +2504,7 @@ public class MerchantOrderServiceImpl extends ServiceImpl posTradeQuery(String requestId,String merchantCode, String date, String type, Integer pageIndex, Integer pageSize) { + public JSONObject posTradeQuery(String requestId,String merchantCode, String date, String type, Integer pageIndex, Integer pageSize) { QueryWrapper queryWrapper=new QueryWrapper<>(); queryWrapper.eq("merchantCode",merchantCode); @@ -2571,7 +2572,153 @@ public class MerchantOrderServiceImpl extends ServiceImpl queryNoticeList = noticeService.queryNoticeList(queryNotice); + if (queryNoticeList != null && queryNoticeList.size() > 0) { + queryNotice = queryNoticeList.get(0); + queryNotice.setIsDeal(1); + queryNotice.setIsApply(1); + noticeService.updateNotice(queryNotice); + } + } + + MerchantOrderVO order = checkRefundOrderParams(orderNumber); + order.setRemark(refundReason); + MerchantChannelStatus channel = null; + if("2".equals(order.getAisleSwitch())){ + channel = merchantChannelStatusService.getByMerchantCode(order.getMerchantCode(), 1); + }else{ + channel = merchantChannelStatusService.getByMerchantCode(order.getMerchantCode(), Integer.valueOf(order.getAisleSwitch())); + } + MsgException.checkNull(channel,"订单通道获取异常"); + MsgException.check("7".equals(channel.getStatus()),"实时到账审核中,请耐心等待或者联系客服!"); + MsgException.check(!channel.isPayment(),"当前进件状态未通过,请耐心等待或联系客服!"); + + Map resultMap = new HashMap<>(); + MerchantRefundOrder refundOrder = new MerchantRefundOrder(); + if (channel.getChannel() == 1) { + resultMap = sxfPayService.refundPay(order, channel.getMerchantId()); + } else if (channel.getChannel() == 2) { + MsgException.throwException("通道已关闭!"); + } else if (channel.getChannel() == 3) { + resultMap = ryxPayService.refundPay(order, channel.getMerchantId()); + } else if (channel.getChannel() == 4) { + resultMap = ysPayOldService.refundPay(order, channel.getMerchantId()); + }else if(channel.getChannel()==5){ + resultMap = lkLPayServiceImpl.refundPay(order,channel.getMerchantCode()); + } + + else { + object.put("code",ResultCode.FAIL); + object.put("msg","不存在的通道"); + object.put("requestId",requestId); + return object; + } + + + if (ResultCode.SUCCESS.code() != (Integer) resultMap.get("code")) { + object.put("code",ResultCode.FAIL); + object.put("msg",resultMap.get("msg") + ""); + object.put("requestId",requestId); + return object; + } + MerchantOrder update = new MerchantOrder(); + if(StringUtil.isNotEmpty(order.getMarketAmt()) && order.getMarketAmt().doubleValue() > 0){ + update.setId(order.getId()); + update.setMarketAmt(BigDecimal.ZERO); + } + update.setRefundAmt(BigDecimal.valueOf(order.getConsumeFee())); + merchantOrderMapper.updateById(update); + refundOrder.convert(order, resultMap, channel.getMerchantId()); + order.setId(null); + order.setUpdateTime(new Date()); + order.setStatus("2"); + order.setMarketAmt(BigDecimal.ZERO); + order.setRefundAmt(BigDecimal.valueOf(order.getConsumeFee())); + merchantOrderMapper.insert(order); + realFansService.removeProfit(order.getOrderNumber()); + merchantRefundOrderMapper.insert(refundOrder); + if("app".equals(type)){ + //向小程序后台推送退款消息 + String url = "https://shop.shouyinbei.net/addons/we7_wmall/payment/refund/notify.php"; + JSONObject params = new JSONObject(); + params.put("orderNumber",orderNumber); + try { + String result = HttpUtil.doPostJson(url, params.toJSONString()); + log.info("================>【app退款】消息通知结果:{}<================",result); + } catch (Exception e) { + e.printStackTrace(); + log.info("================>【app退款】消息通知异常,异常信息:{}<================",e.getMessage()); + } + }else{ + pushService.pushMsg(String.valueOf(order.getUserId()), PushService.REFUND_ORDER); + } + + + + object.put("code",ResultCode.SUCCESS); + + object.put("requestId",requestId); + + JSONObject data=new JSONObject(); + data.put("orderNumber",orderNumber); + + switch (channel.getChannel()){ + case 1: + JSONObject response=JSONObject.parseObject(resultMap.get("data")+""); + String status=response.getString("tranSts"); + if("REFUNDSUC".equals(status)){ + data.put("status","1"); + object.put("msg","成功"); + }else if("REFUNDING".equals(status)){ + data.put("status","2"); + object.put("msg","退款中"); + }else if("REFUNDFAIL".equals(status)){ + data.put("status","3"); + object.put("msg","退款失败"); + } + data.put("refundNo",response.get("origUuid")); + data.put("refundTime",response.containsKey("finishTime")?response.get("finishTime"):null); + data.put("refundAmt",response.get("amt")); + data.put("oPayAmt",order.getConsumeFee()); + break; + case 2: + break; + case 3: + break; + case 4: + //待修改 + response=JSONObject.parseObject(resultMap.get("data")+""); + data.put("status","1"); + object.put("msg","成功"); + data.put("refundNo",response.get("out_trade_no")); + data.put("refundTime",response.get("trade_time")); + data.put("refundAmt",response.get("refund_amount")); + data.put("oPayAmt",order.getConsumeFee()); + break; + case 5: + response=JSONObject.parseObject(resultMap.get("data")+""); + data.put("status","1"); + object.put("msg","成功"); + data.put("refundNo",response.get("out_trade_no")); + data.put("refundTime",response.get("trade_time")); + data.put("refundAmt",response.get("refund_amount")); + data.put("oPayAmt",order.getConsumeFee()); + break; + + } + + return object; + }