# Conflicts:
#	pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java
This commit is contained in:
liuyingfang 2023-06-13 10:34:40 +08:00
commit df26d12b1c
4 changed files with 159 additions and 7 deletions

View File

@ -49,7 +49,6 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -495,8 +494,7 @@ public class MerchantOrderController {
@PostMapping(value = "orderList") @PostMapping(value = "orderList")
public Result<Object> posTradeQuery(HttpServletRequest request, @RequestBody BasePosReq req)throws Exception{ public Object posTradeQuery(HttpServletRequest request, @RequestBody BasePosReq req)throws Exception{
verify(req.getTimestamp(),req.getRequestId(),req.getAppId(),req.getToken(), req.getReqData()); verify(req.getTimestamp(),req.getRequestId(),req.getAppId(),req.getToken(), req.getReqData());
PosTradeQueryReq tradeQueryReq=JSONObject.parseObject(req.getReqData(),PosTradeQueryReq.class); PosTradeQueryReq tradeQueryReq=JSONObject.parseObject(req.getReqData(),PosTradeQueryReq.class);
@ -1392,6 +1390,7 @@ public class MerchantOrderController {
//首先验证签 //首先验证签
Map<String, String> tokenMap = TokenUtil.getToken(timestamp, requestId, appId, reqData); Map<String, String> tokenMap = TokenUtil.getToken(timestamp, requestId, appId, reqData);
boolean sign = tokenMap.get("TOKEN").equals(token); boolean sign = tokenMap.get("TOKEN").equals(token);
System.out.println(token);
MsgException.check(!sign,"签名错误"); MsgException.check(!sign,"签名错误");
} }

View File

@ -2,11 +2,15 @@ package cn.pluss.platform.pos;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
@Data @Data
public class ReturnFundsReq extends BasePosReq{ public class ReturnFundsReq implements Serializable {
private String orderNumber; private String orderNumber;
private String sn; private String sn;
private String remark;
} }

View File

@ -427,6 +427,8 @@ public interface MerchantOrderService extends IService<MerchantOrder> {
// void sendPayCallBackArrival(String userId,String orderNumber,Double consumeFee); // void sendPayCallBackArrival(String userId,String orderNumber,Double consumeFee);
Result<Object> 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) ;
} }

View File

@ -2,6 +2,7 @@ package cn.pluss.platform.merchantOrder.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONUtil;
import cn.pluss.platform.IdCardService; import cn.pluss.platform.IdCardService;
import cn.pluss.platform.PushService; import cn.pluss.platform.PushService;
import cn.pluss.platform.activityConsumReturn.ActivityConsumReturnService; import cn.pluss.platform.activityConsumReturn.ActivityConsumReturnService;
@ -2503,7 +2504,7 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
} }
@Override @Override
public Result<Object> 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<MerchantOrder> queryWrapper=new QueryWrapper<>(); QueryWrapper<MerchantOrder> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("merchantCode",merchantCode); queryWrapper.eq("merchantCode",merchantCode);
@ -2571,7 +2572,153 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
} }
resp.put("respData",null); resp.put("respData",null);
} }
return ResultGenerator.genSuccessResult(resp); return resp;
}
@Override
public JSONObject posReturnFunds(String requestId,String orderNumber, String refundReason, String type, String noticeCode) {
JSONObject object=new JSONObject();
// 更新通知的处理状态
if (StringUtil.isNotEmpty(noticeCode)) {
Notice queryNotice = new Notice();
queryNotice.setNoticeCode(noticeCode);
List<Notice> 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<String, Object> 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;
} }