diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/CaseApplicationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/CaseApplicationController.java
index 1ccaea8..d120476 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/CaseApplicationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/CaseApplicationController.java
@@ -3,7 +3,6 @@ package com.ruoyi.web.controller.wisdomarbitrate;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
@@ -18,7 +17,6 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
-import static com.ruoyi.common.core.domain.AjaxResult.error;
@RestController
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 71fea1e..00240c2 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -126,6 +126,19 @@
javax.servlet-api
+
+ org.projectlombok
+ lombok
+ 1.18.22
+
+
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ 3.1.270
+
+
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SmsUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SmsUtils.java
new file mode 100644
index 0000000..d84faab
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SmsUtils.java
@@ -0,0 +1,66 @@
+package com.ruoyi.common.utils;
+
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.sms.v20210111.SmsClient;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import lombok.var;
+
+import java.util.Objects;
+
+@Slf4j
+public class SmsUtils {
+ private static final String SDK_APP_ID = "应用id";
+ private static final String SECRET_ID = "API的SecretId";
+ private static final String SECRET_KEY = "API的SecretKey";
+ private static final String SIGN_NAME = "签名内容";
+ public static Boolean sendSms(SendSmsRequest request) {
+ Credential cred = new Credential(SECRET_ID,SECRET_KEY);
+ SmsClient client = new SmsClient(cred, "ap-guangzhou");
+
+ final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
+ req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
+ req.setSmsSdkAppId(SDK_APP_ID);
+ req.setSignName(SIGN_NAME);
+ req.setTemplateId(request.getTemplateId());
+ req.setTemplateParamSet(request.getTemplateParamSet());
+
+ SendSmsResponse res = null;
+ try {
+ res = client.SendSms(req);
+ } catch (TencentCloudSDKException e) {
+ log.error("发送短信出错:", e);
+ return Boolean.FALSE;
+ }
+ log.error("发送短信结果:", SendSmsResponse.toJsonString(res));
+
+ if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
+ return Boolean.TRUE;
+ }
+ return Boolean.FALSE;
+ }
+
+ /**
+ * 参数对象
+ */
+ @Data
+ public static class SendSmsRequest {
+ /**
+ * 电话
+ */
+ private String phone;
+
+ /**
+ * 模板 ID: 必须填写已审核通过的模板 ID
+ */
+ private String templateId;
+
+ /**
+ * 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
+ */
+ private String[] templateParamSet;
+
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/CasePaymentRecord.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/CasePaymentRecord.java
new file mode 100644
index 0000000..f35b9ed
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/CasePaymentRecord.java
@@ -0,0 +1,33 @@
+package com.ruoyi.wisdomarbitrate.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CasePaymentRecord extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 主键
+ */
+ private Integer id;
+ /**
+ * 案件id
+ */
+ private Long caseId;
+ /**
+ * 订单号
+ */
+ private String orderNumber;
+ /**
+ * 支付状态(0未支付,1已支付)
+ */
+ private Integer paymentStatus;
+ /**
+ * 支付时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTime;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/dto/CasePayDTO.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/dto/CasePayDTO.java
index 8f2f20d..a58518b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/dto/CasePayDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/dto/CasePayDTO.java
@@ -1,14 +1,25 @@
package com.ruoyi.wisdomarbitrate.domain.dto;
import lombok.Data;
-
/**
* 案件缴费传入参数
*/
@Data
public class CasePayDTO {
- private int totalFee; //订单金额 单位:分
- private String body;//商品描述
+ /**
+ * 案件id
+ */
+ private Long caseId;
+
+ /**
+ * 订单金额 单位:分
+ */
+ private int totalFee;
+
+ /**
+ * 描述
+ */
+ private String body;
/**
* 交易类型 native(扫码) / jsapi(小程序) / app / h5
*/
@@ -17,4 +28,4 @@ public class CasePayDTO {
* 支付方式 wxpay(微信) alipay(支付宝)
*/
private String platform;
-}
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/mapper/CasePaymentRecordMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/mapper/CasePaymentRecordMapper.java
new file mode 100644
index 0000000..0aa384a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/mapper/CasePaymentRecordMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.wisdomarbitrate.mapper;
+
+import com.ruoyi.wisdomarbitrate.domain.CasePaymentRecord;
+
+public interface CasePaymentRecordMapper {
+ int saveRecord(CasePaymentRecord casePaymentRecord);
+
+ CasePaymentRecord queryRecord(String orderSn);
+
+ void update(CasePaymentRecord casePaymentRecord);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CallBackHandleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CallBackHandleServiceImpl.java
new file mode 100644
index 0000000..4812468
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CallBackHandleServiceImpl.java
@@ -0,0 +1,35 @@
+package com.ruoyi.wisdomarbitrate.service.impl;
+
+import com.ruoyi.CallBackService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 业务回调处理
+ */
+@Component
+@Slf4j
+public class CallBackHandleServiceImpl implements CallBackService {
+ @Autowired
+ private CasePaymentServiceImpl casePaymentService;
+ @Override
+ public void successPay(String orderSn) {
+ casePaymentService.callback(orderSn);
+ }
+
+ @Override
+ public void failPay(String orderSn) {
+ log.info("支付失败回调!"+orderSn);
+ }
+
+ @Override
+ public void successRefund(String orderSn) {
+ log.info("退款成功回调!"+orderSn);
+ }
+
+ @Override
+ public void failRefund(String orderSn) {
+ log.info("退款失败回调!"+orderSn);
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CasePaymentServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CasePaymentServiceImpl.java
index 598e979..dd02df0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CasePaymentServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CasePaymentServiceImpl.java
@@ -1,29 +1,41 @@
package com.ruoyi.wisdomarbitrate.service.impl;
-import com.ruoyi.CallBackService;
+
+
import com.ruoyi.ElegentPay;
import com.ruoyi.common.constant.CaseApplicationConstants;
import com.ruoyi.common.core.domain.AjaxResult;
-
+import com.ruoyi.common.utils.SmsUtils;
import com.ruoyi.dto.PayRequest;
import com.ruoyi.dto.PayResponse;
+import com.ruoyi.wisdomarbitrate.domain.CaseAffiliate;
import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
-import com.ruoyi.wisdomarbitrate.mapper.CaseApplicationMapper;
-import com.ruoyi.wisdomarbitrate.service.ICasePaymentService;
+import com.ruoyi.wisdomarbitrate.domain.CasePaymentRecord;
import com.ruoyi.wisdomarbitrate.domain.dto.CasePayDTO;
+import com.ruoyi.wisdomarbitrate.mapper.CaseApplicationMapper;
+import com.ruoyi.wisdomarbitrate.mapper.CasePaymentRecordMapper;
+import com.ruoyi.wisdomarbitrate.service.ICasePaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
@Service
public class CasePaymentServiceImpl implements ICasePaymentService {
private final ElegentPay elegentPay;
private final CaseApplicationMapper caseApplicationMapper;
+ private final CasePaymentRecordMapper casePaymentRecordMapper;
+
@Autowired
public CasePaymentServiceImpl(ElegentPay elegentPay
- , CaseApplicationMapper caseApplicationMapper) {
+ , CaseApplicationMapper caseApplicationMapper
+ , CasePaymentRecordMapper casePaymentRecordMapper) {
this.elegentPay = elegentPay;
this.caseApplicationMapper = caseApplicationMapper;
+ this.casePaymentRecordMapper = casePaymentRecordMapper;
}
@Override
@@ -33,13 +45,65 @@ public class CasePaymentServiceImpl implements ICasePaymentService {
payRequest.setOrderSn(System.currentTimeMillis() + "");
payRequest.setTotalFee(casePayDTO.getTotalFee());
PayResponse response = elegentPay.requestPay(payRequest, casePayDTO.getTradeType(), casePayDTO.getPlatform());
+ if (response.getCode_url() == null) {
+ return AjaxResult.error();
+ }
+ //缴费记录表里新增数据
+ CasePaymentRecord casePaymentRecord = new CasePaymentRecord();
+ casePaymentRecord.setCaseId(casePayDTO.getCaseId());
+ casePaymentRecord.setOrderNumber(payRequest.getOrderSn());
+ casePaymentRecord.setPaymentStatus(0);
+ int count = casePaymentRecordMapper.saveRecord(casePaymentRecord);
+ if (count < 1) {
+ return AjaxResult.error("请检查参数是否有误");
+ }
return AjaxResult.success(response);
}
+
+ public AjaxResult callback(String orderSn) {
+ //查询记录
+ CasePaymentRecord casePaymentRecord = casePaymentRecordMapper.queryRecord(orderSn);
+ if (casePaymentRecord == null) {
+ return AjaxResult.error("未查询到相关记录");
+ }
+ Long caseId = casePaymentRecord.getCaseId();
+ //更改记录表里的支付状态和支付时间
+ casePaymentRecord.setPaymentStatus(1);
+ casePaymentRecord.setPaymentTime(new Date());
+ casePaymentRecordMapper.update(casePaymentRecord);
+ //根据案件id查询案件信息
+ CaseApplication caseApplication = new CaseApplication();
+ caseApplication.setId(caseId);
+ CaseApplication caseApplication1 = caseApplicationMapper.selectCaseApplication(caseApplication);
+ caseApplication1.setCaseStatus(CaseApplicationConstants.PENDING_PAYMENT_CONFIRM);
+ //修改案件状态
+ caseApplicationMapper.submitCaseApplication(caseApplication);
+ //发送短信通知
+ SmsUtils.SendSmsRequest request = new SmsUtils.SendSmsRequest();
+ List caseAffiliates = caseApplication1.getCaseAffiliates();//获取案件关联人信息
+ if (caseAffiliates!=null&&caseAffiliates.size()>0){
+ for (CaseAffiliate caseAffiliate : caseAffiliates) {
+ request.setPhone(caseAffiliate.getContactTelphone());
+ //获取身份类型
+ int identityType = caseAffiliate.getIdentityType();
+ if (identityType==1){ //申请人
+ request.setTemplateId("申请人模板id"); //传入申请人模板id
+ // 这个值,要看你的模板中是否预留了占位符,如果没有则不需要设置
+ request.setTemplateParamSet(new String[]{"模板中的参数值,如果没有则为空"});
+ } else { //被申请人
+ request.setTemplateId("被申请人模板id");
+ request.setTemplateParamSet(new String[]{"模板中的参数值,如果没有则为空"});
+ }
+ }
+ }
+ SmsUtils.sendSms(request);
+ return AjaxResult.success();
+ }
@Override
public AjaxResult confirmPayment(CaseApplication caseApplication) {
caseApplication.setCaseStatus(CaseApplicationConstants.EVIDENCE_CONFREMED);
- int i = caseApplicationMapper.updataCaseApplication(caseApplication);
+ int i = caseApplicationMapper.submitCaseApplication(caseApplication);
if (i > 0) {
return AjaxResult.success();
}
diff --git a/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CasePaymentRecordMapper.xml b/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CasePaymentRecordMapper.xml
new file mode 100644
index 0000000..07c1f62
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CasePaymentRecordMapper.xml
@@ -0,0 +1,29 @@
+
+
+
+
+ INSERT INTO case_payment_record (case_id, order_number, payment_status)
+ VALUES (#{caseId}, #{orderNumber}, #{paymentStatus})
+
+
+ update case_payment_record
+
+ case_id= #{caseId},
+ order_number = #{orderNumber},
+ payment_time = #{paymentTime},
+ payment_status = #{paymentStatus},
+
+ where id = #{id}
+
+
+
\ No newline at end of file