|
|
@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.service.payment;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.github.microservice.components.data.base.util.PageEntityUtil;
|
|
|
+import com.github.microservice.core.util.JsonUtil;
|
|
|
import com.github.microservice.http.APIResponseModel;
|
|
|
import com.github.microservice.models.hxz.ConsumTransactionsModel;
|
|
|
import com.github.microservice.models.hxz.ConsumTransactionsResult;
|
|
|
@@ -13,14 +14,18 @@ import com.github.microservice.models.type.DeviceState;
|
|
|
import com.github.microservice.models.type.OrderFromType;
|
|
|
import com.github.microservice.net.ResultContent;
|
|
|
import com.github.microservice.net.ResultMessage;
|
|
|
+import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
|
|
|
+import com.github.microservice.pay.client.model.weChatMiniApp.WeChatMiniAppPayRet;
|
|
|
import com.github.microservice.types.OrderModeType;
|
|
|
import com.github.microservice.types.OrderState;
|
|
|
import com.github.microservice.types.payment.ChargeableType;
|
|
|
import com.github.microservice.types.payment.PaymentDeviceType;
|
|
|
import com.github.microservice.types.payment.PaymentType;
|
|
|
import com.zhongshu.card.client.model.base.SuperSearch;
|
|
|
+import com.zhongshu.card.client.model.mqtt.SendMessageModel;
|
|
|
import com.zhongshu.card.client.model.org.UserJoinBusOrgModel;
|
|
|
import com.zhongshu.card.client.model.pay.RechargeOrderModel;
|
|
|
+import com.zhongshu.card.client.model.pay.WeChatPrepayParam;
|
|
|
import com.zhongshu.card.client.model.payment.*;
|
|
|
import com.zhongshu.card.client.model.payment.statistic.BusinessMainStatisticModel;
|
|
|
import com.zhongshu.card.client.model.payment.statistic.StatisticItem;
|
|
|
@@ -30,11 +35,11 @@ import com.zhongshu.card.client.service.payment.ExpenseFlowService;
|
|
|
import com.zhongshu.card.client.type.RefundState;
|
|
|
import com.zhongshu.card.client.type.StatisticType;
|
|
|
import com.zhongshu.card.client.type.UserState;
|
|
|
+import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
|
|
|
import com.zhongshu.card.client.type.payment.SettlementState;
|
|
|
import com.zhongshu.card.client.type.school.CardState;
|
|
|
import com.zhongshu.card.client.utils.DateUtils;
|
|
|
import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
|
|
|
-import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
|
|
|
import com.zhongshu.card.server.core.dao.org.OrganizationDao;
|
|
|
import com.zhongshu.card.server.core.dao.org.UserCountDao;
|
|
|
import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
|
|
|
@@ -50,9 +55,9 @@ import com.zhongshu.card.server.core.service.base.CommonService;
|
|
|
import com.zhongshu.card.server.core.service.base.SuperService;
|
|
|
import com.zhongshu.card.server.core.service.devices.DeviceInfoServiceImpl;
|
|
|
import com.zhongshu.card.server.core.service.devices.permiss.DevicePermissVerifyService;
|
|
|
+import com.zhongshu.card.server.core.service.mqtt.MqttServiceImpl;
|
|
|
import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
|
|
|
-import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
|
|
|
-import com.zhongshu.card.server.core.service.paySetting.ProjectPaySettingServiceImpl;
|
|
|
+import com.zhongshu.card.server.core.service.pay.WechatPayService;
|
|
|
import com.zhongshu.card.server.core.service.school.AreaServiceImpl;
|
|
|
import com.zhongshu.card.server.core.util.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -97,12 +102,6 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
|
|
|
@Autowired
|
|
|
private OrganizationDao organizationDao;
|
|
|
|
|
|
- @Autowired
|
|
|
- private ProjectPaySettingServiceImpl projectPaySettingService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private DevicePermissDao devicePermissDao;
|
|
|
-
|
|
|
@Autowired
|
|
|
private PayCallService payCallService;
|
|
|
|
|
|
@@ -115,11 +114,15 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
|
|
|
@Autowired
|
|
|
private DeviceInfoServiceImpl deviceInfoService;
|
|
|
|
|
|
- @Autowired
|
|
|
- private OrganizationManagerServiceImpl organizationManagerService;
|
|
|
@Autowired
|
|
|
private CommonService commonService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private WechatPayService wechatPayService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MqttServiceImpl mqttService;
|
|
|
+
|
|
|
/**
|
|
|
* 创建流水
|
|
|
*
|
|
|
@@ -390,10 +393,11 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
|
|
|
/**
|
|
|
* 开始支付订单,封装支付参数(如:微信支付)
|
|
|
*
|
|
|
- * @param id
|
|
|
+ * @param param
|
|
|
* @return
|
|
|
*/
|
|
|
- public ResultContent initSurePaymentTypeOrderPay(String id) {
|
|
|
+ public ResultContent initWxSurePaymentTypeOrderPay(WxOrderPrePayParam param) {
|
|
|
+ String id = param.getId();
|
|
|
ExpenseFlow expenseFlow = expenseFlowDao.findTopById(id);
|
|
|
if (ObjectUtils.isEmpty(expenseFlow)) {
|
|
|
return ResultContent.buildFail("订单不存在");
|
|
|
@@ -403,10 +407,93 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
|
|
|
return ResultContent.buildFail(orderPayModel.getPayMsg());
|
|
|
}
|
|
|
|
|
|
- // 组装支付参数
|
|
|
-
|
|
|
+ WxOrderPrePayResult result = new WxOrderPrePayResult();
|
|
|
+ result.setId(param.getId());
|
|
|
+ String key = PaymentType.WeChatPay.name();
|
|
|
+ Object value = expenseFlow.getMetaInfo().get(key);
|
|
|
+ if (value == null) {
|
|
|
+ // 组装支付参数
|
|
|
+ WeChatPrepayParam prepayParam = new WeChatPrepayParam();
|
|
|
+ prepayParam.setAppid(getCurrentAppId());
|
|
|
+ prepayParam.setProjectOid(expenseFlow.getProjectOid());
|
|
|
+ prepayParam.setOid(expenseFlow.getShopOid());
|
|
|
+ prepayParam.setUserId(getCurrentUserId());
|
|
|
+ prepayParam.setOpenid(param.getOpenid());
|
|
|
+ prepayParam.setDescription("扫码下单支付");
|
|
|
+ prepayParam.setOrderNo(expenseFlow.getPaymentNo());
|
|
|
+ prepayParam.setTotal(expenseFlow.getPayAmount().longValue());
|
|
|
+ ResultContent<Object> resultContent = wechatPayService.prepay(prepayParam);
|
|
|
+ if (resultContent.isSuccess()) {
|
|
|
+ value = resultContent.getCode();
|
|
|
+ } else {
|
|
|
+ return ResultContent.buildFail(resultContent.getMsg());
|
|
|
+ }
|
|
|
+ expenseFlow.addMetaInfo(key, value);
|
|
|
+ expenseFlowDao.save(expenseFlow);
|
|
|
+ }
|
|
|
+ result.setParam(value);
|
|
|
+ return ResultContent.buildSuccess(result);
|
|
|
+ }
|
|
|
|
|
|
- return ResultContent.buildSuccess();
|
|
|
+ /**
|
|
|
+ * 微信支付结果回调
|
|
|
+ *
|
|
|
+ * @param ret
|
|
|
+ */
|
|
|
+ public void handleWxSurePaymentTypeOrderPayCallSuccess(WeChatMiniAppPayRet ret) {
|
|
|
+ String orderNo = ret.getOutTradeNo();
|
|
|
+ ExpenseFlow expenseFlow = expenseFlowDao.findTopByPaymentNo(orderNo);
|
|
|
+ if (ObjectUtils.isNotEmpty(expenseFlow)) {
|
|
|
+ // 支付结果状态
|
|
|
+ switch (ret.getTradeState()) {
|
|
|
+ case "SUCCESS" -> {
|
|
|
+ log.info("收到的消息Success:{}", JsonUtil.toJson(ret));
|
|
|
+ expenseFlow.setOrderState(OrderState.HAVE_PAID);
|
|
|
+ expenseFlow.setPayRemark(ret.getTradeStateDesc());
|
|
|
+
|
|
|
+ com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> content = wechatPayService.handleTransactions(expenseFlow.getProjectOid(), expenseFlow.getShopOid(), expenseFlow.getUserId(), expenseFlow.getPaymentNo(), expenseFlow.getPayAmount());
|
|
|
+ expenseFlow.setIsPaySuccess(Boolean.TRUE);
|
|
|
+
|
|
|
+ if (content.getState() == com.github.microservice.pay.client.ret.ResultState.Success) {
|
|
|
+ // 关联参数
|
|
|
+ String msg = "支付成功";
|
|
|
+ List<TransactionLogModel> list = content.getContent();
|
|
|
+ expenseFlow.setTransactionIds(list);
|
|
|
+ expenseFlow.setPaymentStatus(msg);
|
|
|
+ expenseFlow.setPayRemark(msg);
|
|
|
+ } else {
|
|
|
+ expenseFlow.setPayRemark(String.format("调用支付中心失败: {}", content.getMsg()));
|
|
|
+ }
|
|
|
+ expenseFlowDao.save(expenseFlow);
|
|
|
+
|
|
|
+ // 发送消息
|
|
|
+ SendMessageModel sendMessageModel = new SendMessageModel();
|
|
|
+ sendMessageModel.setMessage(JsonUtil.toJson(Map.of("status", RechargeOrderStatus.Success.name(),
|
|
|
+ "orderNo", expenseFlow.getPaymentNo())));
|
|
|
+
|
|
|
+ String userId = expenseFlow.getUserId();
|
|
|
+ String topic = String.format("/wechat/pay/%s", userId);
|
|
|
+ sendMessageModel.setTopic(topic);
|
|
|
+ sendMessageModel.setUserId(userId);
|
|
|
+ log.info("mq topic : {}", topic);
|
|
|
+ mqttService.sendMessage(sendMessageModel);
|
|
|
+ }
|
|
|
+ case "PAYERROR", "REFUND" -> {
|
|
|
+ expenseFlow.setOrderState(OrderState.PAID_ERROR);
|
|
|
+ expenseFlow.setPayRemark(ret.getTradeStateDesc());
|
|
|
+ expenseFlow.setIsPaySuccess(Boolean.FALSE);
|
|
|
+ expenseFlowDao.save(expenseFlow);
|
|
|
+ }
|
|
|
+ case "CLOSED" -> {
|
|
|
+ expenseFlow.setOrderState(OrderState.CLOSED);
|
|
|
+ expenseFlow.setPayRemark(ret.getTradeStateDesc());
|
|
|
+ expenseFlow.setIsPaySuccess(Boolean.FALSE);
|
|
|
+ expenseFlowDao.save(expenseFlow);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.error("wxSurePaymentTypeOrderPayCallSuccess 订单为空: {}", orderNo);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|