pos机部分逻辑

This commit is contained in:
liuyingfang
2023-04-12 10:27:55 +08:00
parent cb4ec5d64e
commit 403df2b287
4 changed files with 88 additions and 10 deletions

View File

@@ -28,6 +28,7 @@ import cn.pluss.platform.userApp.UserAppService;
import cn.pluss.platform.util.StringUtil;
import cn.pluss.platform.util.TokenUtil;
import cn.pluss.platform.vo.MemberScanVO;
import cn.pluss.platform.vo.MerchantOrderPosVO;
import cn.pluss.platform.vo.MerchantOrderVO;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -49,6 +50,8 @@ import javax.validation.Valid;
import java.text.SimpleDateFormat;
import java.util.*;
import static cn.hutool.poi.excel.sax.AttributeName.s;
@Slf4j
@RestController
@RequiredArgsConstructor
@@ -436,10 +439,7 @@ public class MerchantOrderController {
@PostMapping("/posScanPay")
public Result<Object> posScanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) {
//首先验签
Map<String, String> token = TokenUtil.getToken(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId());
boolean sign = token.get("TOKEN").equals(merchantOrderDTO.getToken());
System.out.println(token);
MsgException.check(!sign,"签名错误");
verify(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId(), merchantOrderDTO.getAppId(), merchantOrderDTO.getToken());
//通过后查询商户信息
DeviceStock deviceStock = deviceStockService.checkBind(merchantOrderDTO.getSn());
MerchantBaseInfo merchantBaseInfoById = merchantBaseInfoService.getMerchantBaseInfoById(Integer.valueOf(deviceStock.getActMercId()));
@@ -451,14 +451,19 @@ public class MerchantOrderController {
}
//进行支付操作
try {
return merchantOrderService.toActivePay(merchantOrderDTO);
Result<Object> activePay = merchantOrderService.toActivePay(merchantOrderDTO);
String result = activePay.toString();
JSONObject jsonData = JSONObject.parseObject(result);
Object orderNumber = jsonData.getJSONObject("data").get("orderNumber");
HashMap<String, Object> map = new HashMap<>();
map.put("orderNumber", orderNumber);
return ResultGenerator.genSuccessResult(map);
} catch (Exception e){
e.printStackTrace();
return ResultGenerator.genFailResult(e.getMessage());
}
}
/**
* 主扫会员支付
* @param memberScanPayDTO
@@ -775,6 +780,69 @@ public class MerchantOrderController {
}
return ResultGenerator.genSuccessResult("获取成功",order);
}
@GetMapping("/pos/tradeQuery/{orderNumber}")
@ApiOperation(value = "pos交易订单支付结果查询", notes = "交易订单支付结果查询", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "orderNumber", value = "查询的orderNumber", paramType = "orderNumber", required = true, dataType = "String")})
public Result<Object> posTradeQuery(@PathVariable String orderNumber, String timestamp,
String requestId, String token, String appId) throws Exception {
//首先验签
verify(timestamp, requestId, appId, token);
// 校验参数是否完整
if (StringUtil.isEmpty(orderNumber)) {
return ResultGenerator.genFailResult("无订单号");
}
QueryWrapper<MerchantOrder> queryWrapper = new QueryWrapper<MerchantOrder>()
.eq("orderNumber",orderNumber);
MerchantOrder order = merchantOrderService.getOne(queryWrapper);
if(order == null){
return ResultGenerator.genFailResult("订单数据异常");
}
MerchantOrderPosVO orderPosVO = new MerchantOrderPosVO();
//支付成功
if("1".equals(order.getStatus())){
orderPosVO.setConsumeFee(order.getConsumeFee());
orderPosVO.setStatus(order.getStatus());
orderPosVO.setPayTypeCode(order.getPayTypeCode());
return ResultGenerator.genSuccessResult("获取成功",orderPosVO);
}
String aisleSwitch = order.getAisleSwitch();
MerchantChannelStatus channel = null;
switch (aisleSwitch){
case "2":
channel = merchantChannelStatusMapper.getByMerchantCode(order.getMerchantCode(),1);
break;
default:
channel = merchantChannelStatusMapper.getByMerchantCode(order.getMerchantCode(),Integer.valueOf(aisleSwitch));
break;
}
if(channel != null){
JSONObject result = null;
switch (channel.getChannel()){
case 1:
result = sxfPayService.tradeQuery(order,channel.getMerchantId());
break;
case 3:
result = ryxPayService.tradeQuery(order,channel.getMerchantId());
break;
case 4:
result = ysPayOldService.tradeQuery(order,channel.getMerchantId());
break;
}
if(result != null){
merchantOrderService.updateOrderStatus(result,order);
String status = result.getString("payStatus");
if("1".equals(status)){
order.setStatus("1");
}
}
orderPosVO.setConsumeFee(order.getConsumeFee());
orderPosVO.setStatus(order.getStatus());
orderPosVO.setPayTypeCode(order.getPayTypeCode());
}
return ResultGenerator.genSuccessResult("获取成功", orderPosVO);
}
@GetMapping("/closeOrder")
@ApiOperation(value = "订单关闭", notes = "订单关闭", httpMethod = "POST")
@@ -1233,4 +1301,13 @@ public class MerchantOrderController {
List<Map<String, Object>> couponList = merchantOrderService.getCouponList(orderNumber);
return ResultGenerator.genSuccessResult(couponList);
}
public void verify(String timestamp, String requestId, String appId,
String token){
//首先验证签
Map<String, String> tokenMap = TokenUtil.getToken(timestamp, requestId, appId);
boolean sign = tokenMap.get("TOKEN").equals(token);
System.out.println(token);
MsgException.check(!sign,"签名错误");
}
}

View File

@@ -56,6 +56,7 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter {
limitUri.add("/api/open/login");
limitUri.add("/api/index.html");
limitUri.add("/api/merchantOrder/posScanPay");
limitUri.add("/api/merchantOrder/pos/tradeQuery");
boolean passFlag = limitUri.stream().anyMatch(s -> s.equals(requestUri) || requestUri.startsWith(s));
if (passFlag) {
return true;

View File

@@ -34,11 +34,11 @@ public class TokenUtil {
* @param requestId 请求ID自定义
* @return
*/
public static Map<String, String> getToken(String timestamp, String requestId) {
public static Map<String, String> getToken(String timestamp, String requestId,String appId) {
String token = "";
String encode = "";
SortedMap<String, Object> map = new TreeMap();
map.put("appId", APP_ID);
map.put("appId", appId);
map.put("timestamp", timestamp);
map.put("requestId", requestId);
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
@@ -62,7 +62,7 @@ public class TokenUtil {
System.out.println(s);
String s1 = UUID.randomUUID().toString();
System.out.println(s1);
Map<String, String> token = getToken(s, s1);
Map<String, String> token = getToken(s, s1,APP_SECRET);
System.out.println(token);
}

View File

@@ -62,7 +62,7 @@ public class MerchantChannelStatusController {
@ResponseBody
public Result<Object> openOnlinePay(String merchantCode) {
MerchantChannelStatus mcs = mcsService.getByMerchantCode(merchantCode, 4);
((YsAuditServiceImpl) ysAuditServiceV3).openOnlinePay(mcs);
ysAuditServiceV3.openOnlinePay(mcs);
return ResultGenerator.genSuccessResult("操作成功", null);
}