|
|
|
@ -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 = "拉卡拉收银台交易通知") |
|
|
|
|