diff --git a/open-api/src/main/java/com/api/controller/v1/NotifyController.java b/open-api/src/main/java/com/api/controller/v1/NotifyController.java index 7e2304c..88da6aa 100644 --- a/open-api/src/main/java/com/api/controller/v1/NotifyController.java +++ b/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 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 subTradeOrderList = tradeOrderService.getOrderByMergeTradeId(orderMerge.getId()); + + List 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 = "拉卡拉收银台交易通知")