TRX 1 年間 前
コミット
1c52caf80f

+ 20 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/PaymentSettingMaxParam.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.model.payment;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author TRX
+ * @date 2024/6/26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PaymentSettingMaxParam {
+    @Schema(description = "每天最大的支付金额,为 0 代表不限制 >= 0")
+    private BigDecimal maxPaymentAmount = BigDecimal.ZERO;
+}

+ 25 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/PaymentSettingModel.java

@@ -0,0 +1,25 @@
+package com.zhongshu.card.client.model.payment;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author TRX
+ * @date 2024/6/26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PaymentSettingModel {
+
+    @Schema(description = "是否设置了支付密码")
+    private Boolean isSettingPassword = Boolean.FALSE;
+
+    @Schema(description = "每天最大的支付金额")
+    private BigDecimal maxPaymentAmount = BigDecimal.ZERO;
+
+}

+ 22 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/PaymentSettingPasswordParam.java

@@ -0,0 +1,22 @@
+package com.zhongshu.card.client.model.payment;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PaymentSettingPasswordParam {
+    @Schema(description = "登录密码")
+    private String logInPassWord;
+    @Schema(description = "支付密码")
+    private String passWord;
+    @Schema(description = "确认密码")
+    private String confirmPassWord;
+}

+ 61 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/PaymentSettingController.java

@@ -0,0 +1,61 @@
+package com.zhongshu.card.server.core.controller.payment;
+
+import com.github.microservice.auth.client.constant.AuthConstant;
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.zhongshu.card.client.model.payment.*;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.server.core.service.payment.PaymentSettingService;
+import com.zhongshu.card.server.core.service.payment.SignatureServiceImpl;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @author TRX
+ * @date 2024/6/19
+ */
+@RestController
+@RequestMapping("/school/paymentSetting")
+@Tag(name = "学校-支付设置")
+public class PaymentSettingController {
+
+    @Autowired
+    PaymentSettingService paymentSettingService;
+
+    @Operation(summary = "设置支付密码")
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @RequestMapping(value = "settingPayPassword", method = RequestMethod.POST)
+    public ResultContent settingPayPassword(@Valid @RequestBody PaymentSettingPasswordParam baseModel) {
+        return paymentSettingService.settingPayPassword(baseModel);
+    }
+
+    @Operation(summary = "置空支付密码")
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @RequestMapping(value = "resetPayPassword", method = RequestMethod.POST)
+    public ResultContent resetPayPassword(
+            @Parameter(name = "logInPassWord", description = "logInPassWord")
+            @RequestParam(name = "logInPassWord")
+            String logInPassWord) {
+        return paymentSettingService.resetPayPassword(logInPassWord);
+    }
+
+    @Operation(summary = "设置每天最大支付金额")
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @RequestMapping(value = "settingMaxPay", method = RequestMethod.POST)
+    public ResultContent settingMaxPay(@Valid @RequestBody PaymentSettingMaxParam baseModel) {
+        return paymentSettingService.settingMaxPay(baseModel);
+    }
+
+
+    @Operation(summary = "得到支付设置详情")
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @RequestMapping(value = "getSettingDetail", method = RequestMethod.POST)
+    public ResultContent<PaymentSettingModel> getSettingDetail() {
+        return paymentSettingService.getSettingDetail();
+    }
+}

+ 15 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/PaymentSettingDao.java

@@ -0,0 +1,15 @@
+package com.zhongshu.card.server.core.dao.payment;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.server.core.dao.payment.extend.ComplexDaoExtend;
+import com.zhongshu.card.server.core.domain.payment.Complex;
+import com.zhongshu.card.server.core.domain.payment.PaymentSetting;
+
+import java.util.List;
+
+public interface PaymentSettingDao extends MongoDao<PaymentSetting> {
+
+    PaymentSetting findTopById(String id);
+
+    PaymentSetting findTopByUserId(String userId);
+}

+ 39 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/PaymentSetting.java

@@ -0,0 +1,39 @@
+package com.zhongshu.card.server.core.domain.payment;
+
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.math.BigDecimal;
+
+/**
+ * @author TRX
+ * @date 2024/6/26
+ */
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class PaymentSetting extends SuperMain {
+
+    @Schema(description = "用户信息")
+    @DBRef(lazy = true)
+    private UserAccount userAccount;
+
+    @Schema(description = "用户ID")
+    private String userId;
+
+    @Schema(description = "支付密码")
+    private String payPassWord;
+
+    @Schema(description = "每天最大的支付金额")
+    private BigDecimal maxPaymentAmount = BigDecimal.ZERO;
+
+}

+ 171 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PaymentSettingService.java

@@ -0,0 +1,171 @@
+package com.zhongshu.card.server.core.service.payment;
+
+import com.github.microservice.auth.client.content.ResultState;
+import com.github.microservice.auth.client.service.UserService;
+import com.zhongshu.card.client.model.payment.PaymentSettingMaxParam;
+import com.zhongshu.card.client.model.payment.PaymentSettingModel;
+import com.zhongshu.card.client.model.payment.PaymentSettingPasswordParam;
+import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.server.core.dao.payment.PaymentSettingDao;
+import com.zhongshu.card.server.core.domain.payment.PaymentSetting;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+import com.zhongshu.card.server.core.util.ValidateResult;
+import com.zhongshu.card.server.core.util.ValidateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.math.BigDecimal;
+
+/**
+ * @author TRX
+ * @date 2024/6/26
+ */
+@Slf4j
+@Service
+@Primary
+public class PaymentSettingService extends SuperService {
+
+    @Autowired
+    PaymentSettingDao paymentSettingDao;
+
+    @Autowired
+    UserService userService;
+
+    /**
+     * 设置支付密码
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent settingPayPassword(PaymentSettingPasswordParam param) {
+        String userId = getCurrentUserId();
+        Assert.hasText(param.getLogInPassWord(), "登录密码不能为空");
+        Assert.hasText(param.getPassWord(), "密码不能为空");
+        com.github.microservice.auth.client.content.ResultContent<Void> resultContent = userService.checkLoginPassword(userId, param.getConfirmPassWord());
+        if (resultContent.getState() == ResultState.Fail) {
+            return ResultContent.buildFail(resultContent.getMsg());
+        }
+        if (!param.getPassWord().equals(param.getConfirmPassWord())) {
+            return ResultContent.buildFail("密码和确认密码不相等");
+        }
+        ValidateResult validateResult = ValidateUtils.validatePassWord(param.getPassWord());
+        if (!validateResult.isSuccess()) {
+            return ResultContent.buildFail(validateResult.getMsg());
+        }
+        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+        PaymentSetting paymentSetting = paymentSettingDao.findTopByUserId(userId);
+        if (ObjectUtils.isEmpty(paymentSetting)) {
+            paymentSetting = new PaymentSetting();
+            paymentSetting.setUserId(userId);
+            paymentSetting.setUserAccount(getCurrentUserAccount());
+        }
+        String psd = makePassWord(userId, param.getPassWord());
+        paymentSetting.setPayPassWord(passwordEncoder.encode(psd));
+
+        paymentSettingDao.save(paymentSetting);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 置空支付密码
+     *
+     * @return
+     */
+    public ResultContent resetPayPassword(String logInPassWord) {
+        String userId = getCurrentUserId();
+        com.github.microservice.auth.client.content.ResultContent<Void> resultContent = userService.checkLoginPassword(userId, logInPassWord);
+        if (resultContent.getState() == ResultState.Fail) {
+            return ResultContent.buildFail(resultContent.getMsg());
+        }
+
+        PaymentSetting paymentSetting = paymentSettingDao.findTopByUserId(userId);
+        if (ObjectUtils.isEmpty(paymentSetting)) {
+            paymentSetting = new PaymentSetting();
+            paymentSetting.setUserId(userId);
+            paymentSetting.setUserAccount(getCurrentUserAccount());
+        }
+        paymentSetting.setPayPassWord("");
+        paymentSettingDao.save(paymentSetting);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 验证支付密码
+     *
+     * @param userId
+     * @param password
+     * @return
+     */
+    public boolean checkPayPassword(String userId, String password) {
+        boolean b = true;
+        PaymentSetting paymentSetting = paymentSettingDao.findTopByUserId(userId);
+        if (ObjectUtils.isNotEmpty(paymentSetting)) {
+            if (StringUtils.isNotEmpty(paymentSetting.getPayPassWord())) {
+                PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+                String psd = makePassWord(userId, password);
+                if (passwordEncoder.matches(paymentSetting.getPayPassWord(), psd)) {
+                    return true;
+                }
+            }
+        }
+        return b;
+    }
+
+    /**
+     * 组装密码
+     * @param userId
+     * @param password
+     * @return
+     */
+    private String makePassWord(String userId, String password) {
+        return userId + password;
+    }
+
+    public ResultContent settingMaxPay(PaymentSettingMaxParam param) {
+        String userId = getCurrentUserId();
+        BigDecimal maxPaymentAmount = param.getMaxPaymentAmount();
+        if (maxPaymentAmount.compareTo(BigDecimal.ZERO) <= 0) {
+            return ResultContent.buildFail("金额不能小于o");
+        }
+        PaymentSetting paymentSetting = paymentSettingDao.findTopByUserId(userId);
+        if (ObjectUtils.isEmpty(paymentSetting)) {
+            paymentSetting = new PaymentSetting();
+            paymentSetting.setUserId(userId);
+            paymentSetting.setUserAccount(getCurrentUserAccount());
+        }
+        paymentSetting.setMaxPaymentAmount(maxPaymentAmount);
+        paymentSettingDao.save(paymentSetting);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent<PaymentSettingModel> getSettingDetail() {
+        String userId = getCurrentUserId();
+        return ResultContent.buildSuccess(paymentSettingDao.findTopByUserId(userId));
+    }
+
+    public PaymentSettingModel getByUserId(String userId) {
+        PaymentSetting paymentSetting = paymentSettingDao.findTopByUserId(userId);
+        return toModel(paymentSetting);
+    }
+
+    public PaymentSettingModel toModel(PaymentSetting entity) {
+        PaymentSettingModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new PaymentSettingModel();
+            BeanUtils.copyProperties(entity, model);
+            if (StringUtils.isNotEmpty(entity.getPayPassWord())) {
+                model.setIsSettingPassword(Boolean.TRUE);
+            }
+        }
+        return model;
+    }
+
+}