提交代码

master
胡锐 1 week ago
parent 9a3eb34a45
commit e2b7dc42a8
  1. 105
      open-api/src/main/java/com/api/controller/v1/NotifyController.java

@ -4,10 +4,13 @@ import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.utils.DateUtil;
import com.hfkj.common.utils.HttpsUtils;
import com.hfkj.entity.BsTradeOrder;
import com.hfkj.entity.BsTradeOrderMerge;
import com.hfkj.openapi.v1.model.response.OutSplitRspInfos;
import com.hfkj.openapi.v1.model.response.ResponseQueryTradeModel;
import com.hfkj.openapi.v1.service.OpenApiTradeOrderService;
import com.hfkj.openapi.v1.utils.SignatureUtil;
import com.hfkj.service.BsMerKeyService;
import com.hfkj.service.BsTradeOrderMergeService;
import com.hfkj.service.BsTradeOrderService;
import com.hfkj.sysenum.*;
import io.swagger.annotations.Api;
@ -25,7 +28,9 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@ -34,13 +39,12 @@ import java.util.Map;
public class NotifyController {
private static Logger log = LoggerFactory.getLogger(NotifyController.class);
@Resource
private BsTradeOrderService tradeOrderService;
@Resource
private OpenApiTradeOrderService openApiTradeOrderService;
@Resource
private BsTradeOrderMergeService tradeOrderMergeService;
@Resource
private BsMerKeyService merKeyService;
@ -121,6 +125,101 @@ public class NotifyController {
}
}
@RequestMapping(value="/lakalaMerge",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "拉卡拉合单交易通知")
public void lakalaMerge(@RequestBody String reqBody, HttpServletResponse response) {
try {
log.info("========= Start 拉卡拉合单交易通知 Start ===========");
log.info("平台接收拉卡拉交易通知:" + reqBody);
System.out.println(reqBody);
JSONObject body = JSONObject.parseObject(reqBody);
// 查询订单
BsTradeOrderMerge order = tradeOrderMergeService.getOrderMerge(body.getString("out_trade_no"));
if (order != null && order.getStatus().equals(TradeOrderStatusEnum.status1.getNumber())) {
Map<String,Object> other = new HashMap<>();
other.put("log_no", body.getString("log_no"));
other.put("acc_trade_no", body.getString("acc_trade_no"));
other.put("card_type", body.getString("card_type"));
other.put("trade_time", body.getString("trade_time"));
if (body.getString("acc_settle_amount") != null) {
other.put("acc_settle_amount", body.getBigDecimal("acc_settle_amount").divide(new BigDecimal("100")));
}
if (body.getString("acc_discount_amount") != null) {
other.put("acc_discount_amount", body.getBigDecimal("acc_discount_amount").divide(new BigDecimal("100")));
}
if (body.getString("acc_mdiscount_amount") != null) {
other.put("acc_mdiscount_amount", body.getBigDecimal("acc_mdiscount_amount").divide(new BigDecimal("100")));
}
tradeOrderMergeService.paySuccess(
body.getString("out_trade_no"),
body.getString("trade_no"),
PlatformTypeEnum.type1,
TradeOrderPayModeEnum.getNameByCode(body.getString("account_type")),
body.getBigDecimal("total_amount").divide(new BigDecimal("100")),
body.getString("merchant_no"),
body.getJSONArray("out_split_rsp_infos"),
other
);
}
if (StringUtils.isNotBlank(order.getPayNotifyUrl())) {
// 合单交易
BsTradeOrderMerge orderMerge = tradeOrderMergeService.getOrderMerge(order.getOutTradeNo());
// 子订单交易
List<BsTradeOrder> subTradeOrderList = tradeOrderService.getOrderByMergeTradeId(orderMerge.getId());
List<OutSplitRspInfos> responseOutSplitRspInfos = new ArrayList<>();
for (BsTradeOrder subTradeOrder : subTradeOrderList) {
OutSplitRspInfos outSplitRspInfos = new OutSplitRspInfos();
outSplitRspInfos.setMerchantNo(subTradeOrder.getMerNo());
outSplitRspInfos.setMerchantName(subTradeOrder.getMerName());
outSplitRspInfos.setAmount(subTradeOrder.getTradeAmount());
outSplitRspInfos.setOutSubTradeNo(subTradeOrder.getOutTradeNo());
outSplitRspInfos.setSubAttach(subTradeOrder.getAttach());
responseOutSplitRspInfos.add(outSplitRspInfos);
}
ResponseQueryTradeModel responseQueryTradeModel = new ResponseQueryTradeModel();
responseQueryTradeModel.setMerchantNo(orderMerge.getMerNo());
responseQueryTradeModel.setOutTradeNo(orderMerge.getOutTradeNo());
responseQueryTradeModel.setAccTradeNo(orderMerge.getAccTradeNo());
responseQueryTradeModel.setPlatformTradeNo(orderMerge.getPlatformTradeNo());
responseQueryTradeModel.setUserId(orderMerge.getPayUserId());
responseQueryTradeModel.setPayMode(orderMerge.getPayMode());
responseQueryTradeModel.setTradeAmount(orderMerge.getTradeAmount());
responseQueryTradeModel.setTradeActualAmount(orderMerge.getTradeActualAmount());
responseQueryTradeModel.setStatus(orderMerge.getStatus());
responseQueryTradeModel.setCreateTime(orderMerge.getCreateTime());
responseQueryTradeModel.setPayTime(orderMerge.getPayTime());
responseQueryTradeModel.setAttach(orderMerge.getAttach());
responseQueryTradeModel.setOutSplitInfos(responseOutSplitRspInfos);
responseQueryTradeModel.setSign(SignatureUtil.createSign(responseQueryTradeModel, merKeyService.getKeyByMerNo(orderMerge.getMerNo())));
log.info("发送URL:" + order.getPayNotifyUrl());
log.info("发送参数:" + JSONObject.toJSONString(responseQueryTradeModel));
JSONObject result = HttpsUtils.doPost(order.getPayNotifyUrl(), JSONObject.toJSONString(responseQueryTradeModel));
if (result != null) {
log.info("响应参数:" + result);
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
out.write(result.toJSONString().getBytes());
out.flush();
out.close();
} else {
log.info("响应参数:null");
}
}
} catch (Exception e) {
log.info("出现异常", e);
} finally {
log.info("========= END 拉卡拉合单交易通知 END ===========");
}
}
@RequestMapping(value="/lakalaCounter",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "拉卡拉收银台交易通知")

Loading…
Cancel
Save