diff --git a/.vscode/settings.json b/.vscode/settings.json index f2dfa53..a4a7f65 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,5 +9,20 @@ "maven.pomfile.autoUpdateEffectivePOM": true, "java.debug.settings.hotCodeReplace": "auto", "spring-boot.ls.java.home": "", + "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=9 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx4G -Xms4G -Xlog:disable", // "java.compile.nullAnalysis.mode": "automatic" + "maven.excludedFolders": [ + "**/.vscode", + "**/.idea", + "**/target", + "**/.*", + "**/node_modules", + "**/target", + "**/bin", + "**/archetype-resources" + ], + "boot-java.rewrite.refactorings.on": true, + "maven.executable.preferMavenWrapper": true, + "java.import.maven.enabled": true, + "java.dependency.packagePresentation": "hierarchical", } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4c02f53..8beae23 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,7 @@ 2.11.0 3.2.2 4.1.2 + 4.5.2 2.3 0.9.1 4.5.0 @@ -136,6 +137,13 @@ ${velocity.version} + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + commons-collections diff --git a/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/controller/PayOrderController.java b/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/controller/PayOrderController.java index b534b13..866d02d 100644 --- a/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/controller/PayOrderController.java +++ b/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/controller/PayOrderController.java @@ -19,9 +19,9 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.uuid.Seq; import com.ruoyi.pay.domain.PayOrder; import com.ruoyi.pay.service.IPayOrderService; -import com.ruoyi.pay.utils.SnowflakeIdWorker; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -41,9 +41,6 @@ public class PayOrderController extends BaseController @Autowired private IPayOrderService payOrderService; - @Autowired - private SnowflakeIdWorker snowflakeidworker; - /** * 查询订单列表 */ @@ -92,7 +89,7 @@ public class PayOrderController extends BaseController public AjaxResult add(@RequestBody PayOrder payOrder) { payOrder.setUserId(getUserId()); - payOrder.setOrderNumber(snowflakeidworker.nextId().toString()); + payOrder.setOrderNumber(Seq.getId().toString()); AjaxResult result = toAjax(payOrderService.insertPayOrder(payOrder)); result.put(AjaxResult.DATA_TAG, payOrder); return result; diff --git a/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/utils/SnowflakeIdWorker.java b/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/utils/SnowflakeIdWorker.java deleted file mode 100644 index 47c22b3..0000000 --- a/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/utils/SnowflakeIdWorker.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.ruoyi.pay.utils; - -import org.springframework.stereotype.Component; - -@Component -public class SnowflakeIdWorker { - // 开始时间戳(2015-01-01) - private final long twepoch = 1420041600000L; - // 机器id所占的位数 - private final long workerIdBits = 5L; - // 数据标识id所占的位数 - private final long datacenterIdBits = 5L; - // 支持的最大机器id,结果是31(二进制:11111) - private final long maxWorkerId = -1L ^ (-1L << workerIdBits); - // 支持的最大数据标识id,结果是31(二进制:11111) - private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); - // 序列在id中占的位数 - private final long sequenceBits = 12L; - // 机器ID向左移12位 - private final long workerIdShift = sequenceBits; - // 数据标识id向左移17位(12+5) - private final long datacenterIdShift = sequenceBits + workerIdBits; - // 时间戳向左移22位(5+5+12) - private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; - // 生成序列的掩码,这里为4095(二进制:111111111111) - private final long sequenceMask = -1L ^ (-1L << sequenceBits); - // 工作机器ID(0~31) - private long workerId; - // 数据中心ID(0~31) - private long datacenterId; - // 毫秒内序列(0~4095) - private long sequence = 0L; - // 上次生成ID的时间戳 - private long lastTimestamp = -1L; - - public SnowflakeIdWorker() { - this(0,0); - } - - public SnowflakeIdWorker(long workerId, long datacenterId) { - if (workerId > maxWorkerId || workerId < 0) { - throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); - } - if (datacenterId > maxDatacenterId || datacenterId < 0) { - throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); - } - this.workerId = workerId; - this.datacenterId = datacenterId; - } - - public synchronized Long nextId() { - long timestamp = timeGen(); - if (timestamp < lastTimestamp) { - throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); - } - if (lastTimestamp == timestamp) { - sequence = (sequence + 1) & sequenceMask; - if (sequence == 0) { - timestamp = tilNextMillis(lastTimestamp); - } - } else { - sequence = 0L; - } - lastTimestamp = timestamp; - return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; - } - - protected Long tilNextMillis(long lastTimestamp) { - long timestamp = timeGen(); - while (timestamp <= lastTimestamp) { - timestamp = timeGen(); - } - return timestamp; - } - - protected long timeGen() { - return System.currentTimeMillis(); - } -} diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java index fd99882..47a6221 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java @@ -2,10 +2,12 @@ package com.ruoyi.pay.sqb.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.alibaba.fastjson2.JSON; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -42,8 +44,8 @@ public class SQBController extends BaseController { @Operation(summary = "查询支付状态") @Parameters(value = { - @Parameter(name = "orderNumber", description = "订单号", required = true) -}) + @Parameter(name = "orderNumber", description = "订单号", required = true) + }) @PostMapping("/query") @Anonymous public AjaxResult query(@RequestParam("orderNumber") String orderNumber) throws Exception { @@ -51,4 +53,14 @@ public class SQBController extends BaseController { return success(sqbServiceImpl.query(payOrder)); } + @PostMapping("/refund") + @Anonymous + public AjaxResult refund(@RequestBody PayOrder payOrder) { + String refund = sqbServiceImpl.refund(payOrder); + if (refund == null) { + return error("退款失败"); + } + Object parse = JSON.parse(refund); + return success(parse); + } } diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java index f889fca..c704984 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.sign.Md5Utils; import com.ruoyi.pay.domain.PayOrder; import com.ruoyi.pay.sqb.constant.SqbConstant; @@ -20,7 +21,7 @@ public class SQBServiceImpl { /** * 计算字符串的MD5值 - * + * * @param signStr:签名字符串 * @return */ @@ -36,7 +37,7 @@ public class SQBServiceImpl { /** * 终端激活 - * + * * @param code:激活码 * @return {terminal_sn:"$终端号",terminal_key:"$终端密钥"} */ @@ -68,7 +69,7 @@ public class SQBServiceImpl { /** * 终端签到 - * + * * @return {terminal_sn:"$终端号",terminal_key:"$终端密钥"} */ public JSONObject checkin() { @@ -97,7 +98,7 @@ public class SQBServiceImpl { /** * 退款 - * + * * @return */ public String refund(PayOrder payOrder) { @@ -121,7 +122,7 @@ public class SQBServiceImpl { /** * 查询 - * + * * @return */ @@ -146,7 +147,7 @@ public class SQBServiceImpl { } public String payUrl(PayOrder payOrder) throws UnsupportedEncodingException { - if(payOrder.getRemark() == null){ + if (payOrder.getRemark() == null) { payOrder.setRemark("支付"); } String param = "" + @@ -169,19 +170,19 @@ public class SQBServiceImpl { /** * 预下单 - * + * * @return */ - public String precreate(PayOrder payOrder,String sn, String payway) { + public String precreate(PayOrder payOrder, String sn, String payway) { String url = sqbConstant.getApiDomain() + "/upay/v2/precreate"; JSONObject params = new JSONObject(); try { params.put("terminal_sn", sqbConstant.getTerminalSn()); // 收钱吧终端ID params.put("client_sn", payOrder.getOrderNumber()); // 商户系统订单号,必须在商户系统内唯一;且长度不超过32字节 params.put("total_amount", payOrder.getTotalAmount()); // 交易总金额 - params.put("payway", payway); // 支付方式 + // params.put("payway", payway); // 支付方式 params.put("subject", "无简介"); // 交易简介 - params.put("operator", "admin"); // 门店操作员 + params.put("operator", SecurityUtils.getUsername()); // 门店操作员 String sign = getSign(params.toString() + sqbConstant.getTerminalKey()); String result = HttpUtil.httpPost(url, params.toString(), sign, sqbConstant.getTerminalSn()); @@ -193,7 +194,7 @@ public class SQBServiceImpl { /** * 自动撤单 - * + * * @param terminal_sn:终端号 * @param terminal_key:终端密钥 * @return