From b671f447f445f8da07b96a124597dcbec6f16c4c Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Mon, 27 Oct 2025 13:58:54 +0800 Subject: [PATCH 01/24] =?UTF-8?q?10=E6=9C=8827=E6=97=A5=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 +++ .../java/com/example/demo/DemoApplicationBank.java | 28 +++++ src/main/java/com/example/demo/bank/Server.java | 23 ++++ .../java/com/example/demo/config/AppConfig.java | 46 ++++++- .../demo/controller/cash/BankController.java | 44 +++++++ .../java/com/example/demo/domain/DTO/BankDTO.java | 21 ++++ .../com/example/demo/domain/DTO/PaymentDTO.java | 30 +++++ .../java/com/example/demo/domain/vo/cash/Bank.java | 19 +++ .../com/example/demo/service/cash/BankService.java | 18 +++ .../demo/serviceImpl/cash/BankServiceImpl.java | 137 +++++++++++++++++++++ 10 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/demo/DemoApplicationBank.java create mode 100644 src/main/java/com/example/demo/bank/Server.java create mode 100644 src/main/java/com/example/demo/controller/cash/BankController.java create mode 100644 src/main/java/com/example/demo/domain/DTO/BankDTO.java create mode 100644 src/main/java/com/example/demo/domain/DTO/PaymentDTO.java create mode 100644 src/main/java/com/example/demo/domain/vo/cash/Bank.java create mode 100644 src/main/java/com/example/demo/service/cash/BankService.java create mode 100644 src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java diff --git a/pom.xml b/pom.xml index 1eef049..a329465 100644 --- a/pom.xml +++ b/pom.xml @@ -166,6 +166,21 @@ jaxb-api 2.3.1 + + com.stripe + stripe-java + 30.0.0 + + + org.apache.httpcomponents.client5 + httpclient5 + 5.3.1 + + + com.alibaba + fastjson + 1.2.83 + diff --git a/src/main/java/com/example/demo/DemoApplicationBank.java b/src/main/java/com/example/demo/DemoApplicationBank.java new file mode 100644 index 0000000..7de0065 --- /dev/null +++ b/src/main/java/com/example/demo/DemoApplicationBank.java @@ -0,0 +1,28 @@ +package com.example.demo; + + + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableScheduling // 启用调度功能 +@SpringBootApplication +@MapperScan(basePackages = "com.example.demo.mapper.coin", sqlSessionTemplateRef = "mysql1SqlSessionTemplate") +@MapperScan(basePackages = "com.example.demo.mapper.bean", sqlSessionTemplateRef = "mysql2SqlSessionTemplate") +@MapperScan(basePackages = "com.example.demo.mapper.pay", sqlSessionTemplateRef = "mysql3SqlSessionTemplate") +@MapperScan(basePackages = "com.example.demo.mapper.cms", sqlSessionTemplateRef = "mysql4SqlSessionTemplate") +@MapperScan(basePackages = "com.example.demo.mapper.live", sqlSessionTemplateRef = "mysql5SqlSessionTemplate") +@MapperScan(basePackages = "com.example.demo.mapper.sqlserver", sqlSessionTemplateRef = "sqlserver1SqlSessionTemplate") +@MapperScan(basePackages = "com.example.demo.mapper.cash", sqlSessionTemplateRef = "mysql1SqlSessionTemplate") +public class DemoApplicationBank { + + public static void main(String[] args) { + System.setProperty("https.protocols", "TLSv1,TLSv1.2,TLSv1.3"); + // 设置客户端协议版本 + System.setProperty("jdk.tls.client.protocols", "TLSv1,TLSv1.2,TLSv1.3"); + SpringApplication.run(DemoApplication.class, args); + } + +} diff --git a/src/main/java/com/example/demo/bank/Server.java b/src/main/java/com/example/demo/bank/Server.java new file mode 100644 index 0000000..257e03c --- /dev/null +++ b/src/main/java/com/example/demo/bank/Server.java @@ -0,0 +1,23 @@ +package com.example.demo.bank; + +import com.stripe.Stripe; +import com.stripe.exception.StripeException; +import com.stripe.model.*; +import com.stripe.param.BalanceTransactionListParams; +import com.stripe.param.PaymentIntentSearchParams; +import com.stripe.param.ProductCreateParams; +import com.stripe.param.PriceCreateParams; + +public class Server { + public static void main(String[] args) throws StripeException { + Stripe.apiKey = "sk_test_51SKwgEQqF1eV5j2cyHz7uZ28OsPHzt9nXv1DCOmr4buFHpGhhgmskCz2XOxtCbbQMZIEkELTWIlMgZWcK6PeflZj00nRijQkLx"; + + BalanceTransactionListParams params = + BalanceTransactionListParams.builder().setLimit(3L).build(); + BalanceTransactionCollection balanceTransactions = BalanceTransaction.list(params); + System.out.println(balanceTransactions); + BalanceTransaction balanceTransaction = + BalanceTransaction.retrieve("txn_3SKxVWQqF1eV5j2c07IJegQv"); + System.out.println(balanceTransaction); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/config/AppConfig.java b/src/main/java/com/example/demo/config/AppConfig.java index a50aa5b..3c2f690 100644 --- a/src/main/java/com/example/demo/config/AppConfig.java +++ b/src/main/java/com/example/demo/config/AppConfig.java @@ -2,16 +2,60 @@ package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; +import javax.net.ssl.*; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; + @Configuration public class AppConfig { @Bean - public RestTemplate restTemplate() { + public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException { RestTemplate restTemplate = new RestTemplate(); + + // 配置SSL支持 + restTemplate.setRequestFactory(createSSLRequestFactory()); + restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); return restTemplate; } + + /** + * 创建支持SSL的HTTP请求工厂 + */ + private ClientHttpRequestFactory createSSLRequestFactory() throws NoSuchAlgorithmException, KeyManagementException { + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + } + }; + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); + + // 创建主机名验证器,信任所有主机 + HostnameVerifier allHostsValid = (hostname, session) -> true; + HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); + + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(30000); // 30秒连接超时 + factory.setReadTimeout(60000); // 60秒读取超时 + + return factory; + } } + diff --git a/src/main/java/com/example/demo/controller/cash/BankController.java b/src/main/java/com/example/demo/controller/cash/BankController.java new file mode 100644 index 0000000..1535bcf --- /dev/null +++ b/src/main/java/com/example/demo/controller/cash/BankController.java @@ -0,0 +1,44 @@ +package com.example.demo.controller.cash; + +import com.example.demo.config.interfac.Log; +import com.example.demo.domain.DTO.BankDTO; +import com.example.demo.domain.vo.cash.Bank; +import com.example.demo.domain.vo.coin.AuditRequest; +import com.example.demo.domain.vo.coin.Result; +import com.example.demo.service.cash.BankService; +import com.example.demo.service.cash.CashAuditService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @program: gold-java + * @ClassName BankController + * @description: + * @author: Double + * @create: 2025−10-27 10:50 + * @Version 1.0 + **/ + +@RestController +@RequestMapping("/admin/bank") +@RequiredArgsConstructor +@Slf4j +@CrossOrigin +public class BankController { + + @Autowired + private BankService bankService; + + //payment银行接口 + @Log("payment银行接口") + @PostMapping("/payment") + public Result payment(@RequestBody Bank bank){ + try { + BankDTO bankDTO = bankService.payment(bank); + return Result.success(bankDTO); + }catch (Exception e){ + return Result.error(e.getMessage()); + }} +} diff --git a/src/main/java/com/example/demo/domain/DTO/BankDTO.java b/src/main/java/com/example/demo/domain/DTO/BankDTO.java new file mode 100644 index 0000000..fb7af48 --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/BankDTO.java @@ -0,0 +1,21 @@ +package com.example.demo.domain.DTO; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName BankDTO + * @description: + * @author: Double + * @create: 2025−10-27 11:16 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +public class BankDTO { + private List paymentDTOList; +} diff --git a/src/main/java/com/example/demo/domain/DTO/PaymentDTO.java b/src/main/java/com/example/demo/domain/DTO/PaymentDTO.java new file mode 100644 index 0000000..09073dd --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/PaymentDTO.java @@ -0,0 +1,30 @@ +package com.example.demo.domain.DTO; + +/** + * @program: gold-java + * @ClassName PaymentDTO + * @description: + * @author: Double + * @create: 2025−10-27 13:35 + * @Version 1.0 + **/ + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class PaymentDTO { + private String type; + private String provider; + private String request_reference; + private String merchant_reference; + private String provider_reference; + private String currency; + private String order_amount; + private String charge; + private String net_amount; + private String status; + private String created_time; + private String completed_time; +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/cash/Bank.java b/src/main/java/com/example/demo/domain/vo/cash/Bank.java new file mode 100644 index 0000000..28bb31a --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/Bank.java @@ -0,0 +1,19 @@ +package com.example.demo.domain.vo.cash; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: gold-java + * @ClassName BankDTO + * @description: + * @author: Double + * @create: 2025−10-27 11:11 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +public class Bank { + private String time = ""; +} diff --git a/src/main/java/com/example/demo/service/cash/BankService.java b/src/main/java/com/example/demo/service/cash/BankService.java new file mode 100644 index 0000000..cd5eff8 --- /dev/null +++ b/src/main/java/com/example/demo/service/cash/BankService.java @@ -0,0 +1,18 @@ +package com.example.demo.service.cash; + + +import com.example.demo.domain.DTO.BankDTO; +import com.example.demo.domain.vo.cash.Bank; + +/** + * @program: gold-java + * @ClassName BankService + * @description: + * @author: Double + * @create: 2025−10-27 11:17 + * @Version 1.0 + **/ + +public interface BankService { + BankDTO payment(Bank bank); +} diff --git a/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java new file mode 100644 index 0000000..a531d4d --- /dev/null +++ b/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java @@ -0,0 +1,137 @@ +package com.example.demo.serviceImpl.cash; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.example.demo.domain.DTO.BankDTO; +import com.example.demo.domain.DTO.PaymentDTO; +import com.example.demo.domain.vo.cash.Bank; +import com.example.demo.service.cash.BankService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +/** + * @program: gold-java + * @ClassName BankServiceImpl + * @description: + * @author: Double + * @create: 2025−10-27 11:18 + * @Version 1.0 + **/ + +@Service +@Slf4j +public class BankServiceImpl implements BankService { + // 第三方API地址 + private static final String API_URL = "https://gateway.pa-sys.com/v1.1/reconciliation/519e26b2-8145-418c-b3e7-c1e88e52b946/settlement"; + // 签名密钥(与PHP中的$secret一致) + private static final String SECRET = "8987d1b8-1d82-4b15-af06-828d0b12076f"; + + // 注入RestTemplate用于HTTP请求(需在Spring配置类中定义) + private final RestTemplate restTemplate; + + public BankServiceImpl(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + @Override + public BankDTO payment(Bank bank) { + try { + // 1. 准备参数 + String settlementDate = bank.getTime(); // 从Bank对象获取time作为settlement_date + String network = "FPS"; // 固定值 + + // 2. 生成签名(复刻PHP逻辑,此处无需修改) + Map params = new TreeMap<>(); // 按key升序排序 + params.put("settlement_date", settlementDate); + params.put("network", network); + + String signSource = buildQueryString(params) + SECRET; + String sign = sha512(signSource); + + // 3. 构建form-data请求参数 + MultiValueMap formData = new LinkedMultiValueMap<>(); + formData.add("settlement_date", settlementDate); + formData.add("network", network); + formData.add("sign", sign); + + // 4. 发送HTTP POST请求(优化:显式设置multipart/form-data的字符集) + HttpHeaders headers = new HttpHeaders(); + // 补充charset=UTF-8,避免部分服务器对编码敏感 + headers.setContentType(new MediaType("multipart", "form-data", StandardCharsets.UTF_8)); + HttpEntity> requestEntity = new HttpEntity<>(formData, headers); + + // 调用第三方API(使用配置好SSL协议的RestTemplate) + ResponseEntity response = restTemplate.exchange( + API_URL, + HttpMethod.POST, + requestEntity, + String.class + ); + + if (response.getStatusCode().is2xxSuccessful()) { + String responseBody = response.getBody(); + log.info("第三方API响应: {}", responseBody); + + // 解析JSON获取payload.transactions数组 + JSONObject jsonObject = JSON.parseObject(responseBody); + JSONArray transactions = jsonObject.getJSONObject("payload").getJSONArray("transactions"); + + // 创建BankDTO并设置paymentDTOList + BankDTO bankDTO = new BankDTO(); + List paymentDTOList = transactions.toJavaList(PaymentDTO.class); + bankDTO.setPaymentDTOList(paymentDTOList); + + return bankDTO; + } else { + throw new RuntimeException("API请求失败,状态码: " + response.getStatusCodeValue()); + } + + } catch (Exception e) { + log.error("payment银行接口处理失败", e); + throw new RuntimeException("处理失败: " + e.getMessage()); + } + } + /** + * http_build_query的查询字符串(key=value&key=value) + */ + private String buildQueryString(Map params) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : params.entrySet()) { + if (sb.length() > 0) { + sb.append("&"); + } + sb.append(entry.getKey()).append("=").append(entry.getValue()); + } + return sb.toString(); + } + + /** + * SHA512加密 + */ + private String sha512(String content) throws NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("SHA-512"); + byte[] bytes = md.digest(content.getBytes(StandardCharsets.UTF_8)); + // 转换为十六进制字符串 + StringBuilder hexStr = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexStr.append('0'); + } + hexStr.append(hex); + } + return hexStr.toString(); + } +} From adcb639b3724c4fd5a58aaf3c16bbbaa8e57c263 Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Tue, 28 Oct 2025 14:06:43 +0800 Subject: [PATCH 02/24] =?UTF-8?q?10=E6=9C=8827=E6=97=A5=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3demo=E9=83=A8=E5=88=86=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/controller/cash/BankController.java | 6 +++--- src/main/java/com/example/demo/service/cash/BankService.java | 2 +- .../java/com/example/demo/serviceImpl/cash/BankServiceImpl.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/demo/controller/cash/BankController.java b/src/main/java/com/example/demo/controller/cash/BankController.java index 1535bcf..5359a8d 100644 --- a/src/main/java/com/example/demo/controller/cash/BankController.java +++ b/src/main/java/com/example/demo/controller/cash/BankController.java @@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.*; **/ @RestController -@RequestMapping("/admin/bank") +@RequestMapping("/admin/cash/bank") @RequiredArgsConstructor @Slf4j @CrossOrigin @@ -34,9 +34,9 @@ public class BankController { //payment银行接口 @Log("payment银行接口") @PostMapping("/payment") - public Result payment(@RequestBody Bank bank){ + public Result getPayment(@RequestBody Bank bank){ try { - BankDTO bankDTO = bankService.payment(bank); + BankDTO bankDTO = bankService.getPayment(bank); return Result.success(bankDTO); }catch (Exception e){ return Result.error(e.getMessage()); diff --git a/src/main/java/com/example/demo/service/cash/BankService.java b/src/main/java/com/example/demo/service/cash/BankService.java index cd5eff8..d77699e 100644 --- a/src/main/java/com/example/demo/service/cash/BankService.java +++ b/src/main/java/com/example/demo/service/cash/BankService.java @@ -14,5 +14,5 @@ import com.example.demo.domain.vo.cash.Bank; **/ public interface BankService { - BankDTO payment(Bank bank); + BankDTO getPayment(Bank bank); } diff --git a/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java index a531d4d..6188a2d 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java @@ -35,7 +35,7 @@ import java.util.TreeMap; public class BankServiceImpl implements BankService { // 第三方API地址 private static final String API_URL = "https://gateway.pa-sys.com/v1.1/reconciliation/519e26b2-8145-418c-b3e7-c1e88e52b946/settlement"; - // 签名密钥(与PHP中的$secret一致) + // 签名密钥 private static final String SECRET = "8987d1b8-1d82-4b15-af06-828d0b12076f"; // 注入RestTemplate用于HTTP请求(需在Spring配置类中定义) @@ -46,13 +46,13 @@ public class BankServiceImpl implements BankService { } @Override - public BankDTO payment(Bank bank) { + public BankDTO getPayment(Bank bank) { try { // 1. 准备参数 String settlementDate = bank.getTime(); // 从Bank对象获取time作为settlement_date String network = "FPS"; // 固定值 - // 2. 生成签名(复刻PHP逻辑,此处无需修改) + // 2. 生成签名 Map params = new TreeMap<>(); // 按key升序排序 params.put("settlement_date", settlementDate); params.put("network", network); From 7b50e5e4b821c038a8056cd9f8c23b7566b84114 Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Wed, 29 Oct 2025 11:26:09 +0800 Subject: [PATCH 03/24] =?UTF-8?q?10=E6=9C=8828=E6=97=A5=E6=B4=BB=E5=8A=A8d?= =?UTF-8?q?emo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/bank/Server.java | 26 +++-- .../coin/RechargeActivityCenterController.java | 118 +++++++++++++++++++++ .../demo/domain/vo/coin/RechargeActivity.java | 58 ++++++++++ .../mapper/coin/RechargeActivityCenterMapper.java | 33 ++++++ .../coin/RechargeActivityCenterService.java | 30 ++++++ .../coin/RechargeActivityCenterServiceImpl.java | 50 +++++++++ .../mapper/RechargeActivityCenterMapper.xml | 74 +++++++++++++ 7 files changed, 378 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java create mode 100644 src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java create mode 100644 src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java create mode 100644 src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java create mode 100644 src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java create mode 100644 src/main/resources/mapper/RechargeActivityCenterMapper.xml diff --git a/src/main/java/com/example/demo/bank/Server.java b/src/main/java/com/example/demo/bank/Server.java index 257e03c..c21e35e 100644 --- a/src/main/java/com/example/demo/bank/Server.java +++ b/src/main/java/com/example/demo/bank/Server.java @@ -3,21 +3,25 @@ package com.example.demo.bank; import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.*; -import com.stripe.param.BalanceTransactionListParams; -import com.stripe.param.PaymentIntentSearchParams; -import com.stripe.param.ProductCreateParams; -import com.stripe.param.PriceCreateParams; +import com.stripe.param.*; public class Server { public static void main(String[] args) throws StripeException { Stripe.apiKey = "sk_test_51SKwgEQqF1eV5j2cyHz7uZ28OsPHzt9nXv1DCOmr4buFHpGhhgmskCz2XOxtCbbQMZIEkELTWIlMgZWcK6PeflZj00nRijQkLx"; - BalanceTransactionListParams params = - BalanceTransactionListParams.builder().setLimit(3L).build(); - BalanceTransactionCollection balanceTransactions = BalanceTransaction.list(params); - System.out.println(balanceTransactions); - BalanceTransaction balanceTransaction = - BalanceTransaction.retrieve("txn_3SKxVWQqF1eV5j2c07IJegQv"); - System.out.println(balanceTransaction); +// BalanceTransactionListParams params = +// BalanceTransactionListParams.builder().setLimit(3L).build(); +// BalanceTransactionCollection balanceTransactions = BalanceTransaction.list(params); +// System.out.println(balanceTransactions); +// BalanceTransaction balanceTransaction = +// BalanceTransaction.retrieve("txn_3SKxVWQqF1eV5j2c07IJegQv"); +// System.out.println(balanceTransaction); +// Charge resource = Charge.retrieve("ch_3MrVHGLkdIwHu7ix1mN3zEiP"); +// ChargeCaptureParams params = ChargeCaptureParams.builder().build(); +// Charge charge = resource.capture(params); +// System.out.println(charge); + ChargeListParams params = ChargeListParams.builder().setLimit(3L).build(); + ChargeCollection charges = Charge.list(params); + System.out.println(charges); } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java b/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java new file mode 100644 index 0000000..df370d8 --- /dev/null +++ b/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java @@ -0,0 +1,118 @@ +package com.example.demo.controller.coin; + +import com.example.demo.config.interfac.Log; +import com.example.demo.domain.vo.coin.RechargeActivity; +import com.example.demo.domain.vo.coin.Result; +import com.example.demo.service.coin.RechargeActivityCenterService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterController + * @description: 充值活动中心管理 + * @author: Double + * @create: 2025−10-28 14:23 + * @Version 1.0 + **/ + +@RestController +@RequestMapping("/admin/coin/rechargeActivityCenter") +@RequiredArgsConstructor +@Slf4j +@CrossOrigin +public class RechargeActivityCenterController { + + @Autowired + private RechargeActivityCenterService rechargeActivityCenterService; + + + // 查询活动 + @Log("根据ID查询充值活动") + @PostMapping("/selectActivity") + public Result selectActivity(@RequestBody RechargeActivity activity) { + try { + RechargeActivity selectResult = rechargeActivityCenterService.selectActivityById(activity); + if (selectResult == null) { + return Result.error("查询失败:未找到该活动"); + } + return Result.success(selectResult); + } catch (NullPointerException e) { + log.error("查询活动失败:空指针异常,ID={}", activity.getId(), e); + return Result.error("查询失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("查询活动失败:参数异常,ID={}", activity.getId(), e); + return Result.error("查询失败:" + e.getMessage()); + } + } + + // 动 + @Log("新增充值活动") + @PostMapping("/addActivity") + public Result addActivity(@RequestBody RechargeActivity activity) { + try { + if (activity == null) { + return Result.error("添加失败:活动信息不能为空"); + } + if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { + return Result.error("添加失败:活动名称不能为空"); + } + rechargeActivityCenterService.addActivity(activity); + return Result.success("添加活动成功"); + } catch (NullPointerException e) { + log.error("添加活动失败:空指针异常", e); + return Result.error("添加失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("添加活动失败:参数异常", e); + return Result.error("添加失败:" + e.getMessage()); + } + } + + // 更新活动 + @Log("更新充值活动") + @PostMapping("/updateActivity") + public Result updateActivity(@RequestBody RechargeActivity activity) { + try { + if (activity == null) { + return Result.error("更新失败:活动信息不能为空"); + } + if (activity.getId() == null) { + return Result.error("更新失败:活动ID不能为空"); + } + if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { + return Result.error("更新失败:活动名称不能为空"); + } + rechargeActivityCenterService.updateActivity(activity); + return Result.success("更新活动成功"); + } catch (NullPointerException e) { + log.error("更新活动失败:空指针异常", e); + return Result.error("更新失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("更新活动失败:参数异常", e); + return Result.error("更新失败:" + e.getMessage()); + } + } + + // 删除活动 + @Log("删除充值活动") + @PostMapping("/deleteActivity") + public Result deleteActivity(@RequestParam Integer id) { + try { + if (id == null) { + return Result.error("删除失败:活动ID不能为空"); + } + rechargeActivityCenterService.deleteActivity(id); + return Result.success("删除活动成功"); + } catch (NullPointerException e) { + log.error("删除活动失败:空指针异常,ID={}", id, e); + return Result.error("删除失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("删除活动失败:参数异常,ID={}", id, e); + return Result.error("删除失败:" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java new file mode 100644 index 0000000..ca7142c --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java @@ -0,0 +1,58 @@ +package com.example.demo.domain.vo.coin; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @program: gold-java + * @ClassName RechargeActivity + * @description: 充值活动信息VO类 + * @author: Double + * @create: 2025−10-28 15:00 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RechargeActivity { + + @ExcelProperty("活动ID") + private Integer id; // 活动唯一标识 + + @ExcelProperty("活动名称") + private String activityName; // 活动名称 + + @ExcelProperty("业绩归属地") + private String businessBelong; // 业绩归属地 + + @ExcelProperty("活动开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 活动开始时间 + + @ExcelProperty("活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 活动结束时间 + + @ExcelProperty("活动状态") + private String status; // 活动状态(进行中、已结束、未开始) + + @ExcelProperty("添加人") + private String creator; // 添加人 + + @ExcelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; // 创建时间 + + @ExcelProperty("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; // 更新时间 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date activityTime; // 活动时间 +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java new file mode 100644 index 0000000..6ba2fcb --- /dev/null +++ b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java @@ -0,0 +1,33 @@ +package com.example.demo.mapper.coin; + +import com.example.demo.domain.vo.coin.RechargeActivity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterMapper + * @description: 充值活动中心Mapper接口 + * @author: Double + * @create: 2025−10-28 14:42 + * @Version 1.0 + **/ + +@Mapper +public interface RechargeActivityCenterMapper { + + + // 根据ID查询活动 + RechargeActivity selectActivityById(RechargeActivity activity); + + // 新增活动 + void addActivity(RechargeActivity activity); + + // 更新活动 + void updateActivity(RechargeActivity activity); + + // 删除活动 + void deleteActivity(@Param("id") Integer id); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java new file mode 100644 index 0000000..fba1cef --- /dev/null +++ b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java @@ -0,0 +1,30 @@ +package com.example.demo.service.coin; + +import com.example.demo.domain.vo.coin.RechargeActivity; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterService + * @description: 充值活动中心服务接口 + * @author: Double + * @create: 2025−10-28 14:40 + * @Version 1.0 + **/ + +public interface RechargeActivityCenterService { + + + // 根据ID查询活动 + RechargeActivity selectActivityById(RechargeActivity activity); + + // 新增活动 + void addActivity(RechargeActivity activity); + + // 更新活动 + void updateActivity(RechargeActivity activity); + + // 删除活动 + void deleteActivity(Integer id); +} diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java new file mode 100644 index 0000000..06c75c7 --- /dev/null +++ b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java @@ -0,0 +1,50 @@ +package com.example.demo.serviceImpl.coin; + +import com.example.demo.domain.vo.coin.RechargeActivity; +import com.example.demo.mapper.coin.RechargeActivityCenterMapper; +import com.example.demo.service.coin.RechargeActivityCenterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterServiceImpl + * @description: 充值活动中心服务实现类 + * @author: Double + * @create: 2025−10-28 14:40 + * @Version 1.0 + **/ + +@Service +public class RechargeActivityCenterServiceImpl implements RechargeActivityCenterService { + + @Autowired + private RechargeActivityCenterMapper rechargeActivityCenterMapper; + + + // 根据ID查询活动 + @Override + public RechargeActivity selectActivityById(RechargeActivity activity) { + return rechargeActivityCenterMapper.selectActivityById(activity); + } + + // 新增活动 + @Override + public void addActivity(RechargeActivity activity) { + rechargeActivityCenterMapper.addActivity(activity); + } + + // 更新活动 + @Override + public void updateActivity(RechargeActivity activity) { + rechargeActivityCenterMapper.updateActivity(activity); + } + + // 删除活动 + @Override + public void deleteActivity(Integer id) { + rechargeActivityCenterMapper.deleteActivity(id); + } +} \ No newline at end of file diff --git a/src/main/resources/mapper/RechargeActivityCenterMapper.xml b/src/main/resources/mapper/RechargeActivityCenterMapper.xml new file mode 100644 index 0000000..f500faa --- /dev/null +++ b/src/main/resources/mapper/RechargeActivityCenterMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + INSERT INTO recharge_activity ( + activity_name, + business_belong, + start_time, + end_time, + status, + creator, + create_time + ) VALUES ( + #{activityName}, + #{businessBelong}, + #{startTime}, + #{endTime}, + #{status}, + #{creator}, + NOW() + ) + + + + + UPDATE recharge_activity + + activity_name = #{activityName}, + business_belong = #{businessBelong}, + start_time = #{startTime}, + end_time = #{endTime}, + status = #{status}, + creator = #{creator}, + update_time = NOW() + + WHERE id = #{id} + + + + + DELETE FROM recharge_activity + WHERE id = #{id} + + + \ No newline at end of file From 8d52124fff7d3b96a3392485e029583f120471db Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Tue, 4 Nov 2025 10:21:37 +0800 Subject: [PATCH 04/24] =?UTF-8?q?10=E6=9C=8828=E6=97=A5=E6=B4=BB=E5=8A=A8d?= =?UTF-8?q?emo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/bank/Server.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/demo/bank/Server.java b/src/main/java/com/example/demo/bank/Server.java index c21e35e..55b258a 100644 --- a/src/main/java/com/example/demo/bank/Server.java +++ b/src/main/java/com/example/demo/bank/Server.java @@ -7,21 +7,22 @@ import com.stripe.param.*; public class Server { public static void main(String[] args) throws StripeException { - Stripe.apiKey = "sk_test_51SKwgEQqF1eV5j2cyHz7uZ28OsPHzt9nXv1DCOmr4buFHpGhhgmskCz2XOxtCbbQMZIEkELTWIlMgZWcK6PeflZj00nRijQkLx"; +// Stripe.apiKey = "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"; // BalanceTransactionListParams params = // BalanceTransactionListParams.builder().setLimit(3L).build(); // BalanceTransactionCollection balanceTransactions = BalanceTransaction.list(params); // System.out.println(balanceTransactions); // BalanceTransaction balanceTransaction = -// BalanceTransaction.retrieve("txn_3SKxVWQqF1eV5j2c07IJegQv"); +// BalanceTransaction.retrieve("txn_3SNkDjJHMNYcqBc01q4yHgvq"); // System.out.println(balanceTransaction); // Charge resource = Charge.retrieve("ch_3MrVHGLkdIwHu7ix1mN3zEiP"); // ChargeCaptureParams params = ChargeCaptureParams.builder().build(); // Charge charge = resource.capture(params); // System.out.println(charge); - ChargeListParams params = ChargeListParams.builder().setLimit(3L).build(); - ChargeCollection charges = Charge.list(params); - System.out.println(charges); +// ChargeListParams params = ChargeListParams.builder().setLimit(1L).build(); +// ChargeCollection charges = Charge.list(params); +// System.out.println(charges); + } } \ No newline at end of file From 1a7a1aae8b91043dd6d65e6f8e441fe6dc44dbbc Mon Sep 17 00:00:00 2001 From: lijianlin Date: Tue, 4 Nov 2025 14:04:48 +0800 Subject: [PATCH 05/24] =?UTF-8?q?11-04=20=E6=B4=BB=E5=8A=A8=E5=AE=9E?= =?UTF-8?q?=E4=BD=93=E7=B1=BB=E5=88=9B=E5=BB=BA=20=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=95=B0=E9=87=8F=E5=8D=95=E4=BD=8D=EF=BC=8C=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E8=81=94=E6=9F=A5=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/cash/CashCollectionController.java | 3 +- .../com/example/demo/domain/entity/CashRecord.java | 1 + .../demo/domain/entity/RechargeActivity.java | 35 ++++++++++++++++++++++ .../demo/domain/vo/cash/CashCollection.java | 1 + .../demo/mapper/cash/CashCollectionMapper.java | 4 ++- .../demo/service/cash/CashCollectionService.java | 3 +- .../cash/CashCollectionServiceImpl.java | 27 ++++++++--------- .../resources/cashMapper/CashCollectionMapper.xml | 23 +++++++++----- 8 files changed, 73 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/example/demo/domain/entity/RechargeActivity.java diff --git a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java index 34f80b8..4af9d05 100644 --- a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java +++ b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java @@ -3,6 +3,7 @@ package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.CashRecord; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Page; @@ -52,7 +53,7 @@ public class CashCollectionController { @PostMapping("/getActivityList") public Result getActivityList() { - List list = cashCollectionService.getActivityList(); + List list = cashCollectionService.getActivityList(); return Result.success(list); } //新增收款订单 diff --git a/src/main/java/com/example/demo/domain/entity/CashRecord.java b/src/main/java/com/example/demo/domain/entity/CashRecord.java index 958f5bb..d570bea 100644 --- a/src/main/java/com/example/demo/domain/entity/CashRecord.java +++ b/src/main/java/com/example/demo/domain/entity/CashRecord.java @@ -35,6 +35,7 @@ public class CashRecord implements Serializable { private String bankCode; // 银行流水订单号 private String goodsName; // 商品名称 private Integer goodNum; // 产品数量 + private String NumUnit; // 数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 diff --git a/src/main/java/com/example/demo/domain/entity/RechargeActivity.java b/src/main/java/com/example/demo/domain/entity/RechargeActivity.java new file mode 100644 index 0000000..32e76b7 --- /dev/null +++ b/src/main/java/com/example/demo/domain/entity/RechargeActivity.java @@ -0,0 +1,35 @@ +package com.example.demo.domain.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @program: gold-java + * @ClassName RechargeActivity + * @description: + * @author: Ethan + * @create: 2025−11-04 11:48 + * @Version 1.0 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RechargeActivity { + private Integer id; //活动id + private String activityName; //活动名称 + private String businessBelong; //业绩归属地 + private Integer status; //状态 0未开始 1进行中 2已结束(不是实时更新的,仅展示,不要拿这个做校验) + private Integer creator; //添加人 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime startTime; // 开始时间(到秒) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime endTime; // 结束时间(到秒) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime createTime; // 创建日期(到秒) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime updateTime; // 更新日期(到秒) +} diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java index bfdccd3..b25d472 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java @@ -36,6 +36,7 @@ public class CashCollection implements Serializable { private String bankCode; // 银行流水订单号 private String goodsName; // 商品名称 private Integer goodNum; // 商品数量 + private String numUnit; //数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 //金额信息 diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java index 7c598fb..5d952f6 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java @@ -2,10 +2,12 @@ package com.example.demo.mapper.cash; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.vo.cash.CashCollection; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.List; /** @@ -45,7 +47,7 @@ public interface CashCollectionMapper { //根据精网号获取市场名 String getMarketNameByJwcode(Integer jwcode); //获取收款活动列表 - List getActivityList(); + List getActivityList(@Param("now")LocalDateTime now); //查找未同步的订单 ListgetUnSync(@Param("size")int size); //给同步过去的gOrder设置同步状态 diff --git a/src/main/java/com/example/demo/service/cash/CashCollectionService.java b/src/main/java/com/example/demo/service/cash/CashCollectionService.java index 1401499..1caff87 100644 --- a/src/main/java/com/example/demo/service/cash/CashCollectionService.java +++ b/src/main/java/com/example/demo/service/cash/CashCollectionService.java @@ -1,6 +1,7 @@ package com.example.demo.service.cash; import com.example.demo.domain.entity.CashRecord; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Result; @@ -31,7 +32,7 @@ public interface CashCollectionService { //根据精网号获取姓名和地区 User getNameAndMarket(Integer jwcode); //获取活动列表 - List getActivityList(); + List getActivityList(); //同步g_order订单到cash_record表 Object syncToCashRecord(); } diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java index 5ab58b9..57d4652 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -2,6 +2,7 @@ package com.example.demo.serviceImpl.cash; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Result; @@ -64,6 +65,9 @@ public class CashCollectionServiceImpl implements CashCollectionService { if (!cashCollection.getGoodsName().equals("金币充值")){ if( cashCollection.getGoodNum()== 0 ){ throw new IllegalArgumentException("产品数量不能为空");} + if(cashCollection.getNumUnit()== null){ + throw new IllegalArgumentException("数量单位不能为空"); + } } if(cashCollection.getPaymentCurrency()== null){ throw new IllegalArgumentException("支付币种不能为空"); @@ -80,12 +84,6 @@ public class CashCollectionServiceImpl implements CashCollectionService { if(cashCollection.getPayTime()== null){ throw new IllegalArgumentException("付款时间不能为空"); } - if (cashCollection.getVoucher()== null){ - throw new IllegalArgumentException("转账凭证不能为空"); - } - if (cashCollection.getRemark()==null){ - throw new IllegalArgumentException("备注不能为空"); - } //生成订单号后半部分 String orderNumber = UUID.randomUUID().toString().replaceAll("-", ""); CashRecord cashRecord = new CashRecord(); @@ -96,6 +94,7 @@ public class CashCollectionServiceImpl implements CashCollectionService { cashRecord.setActivity(cashCollection.getActivity()); // 活动 cashRecord.setGoodsName(cashCollection.getGoodsName()); //商品名称 cashRecord.setGoodNum(cashCollection.getGoodNum()); //商品数量 + cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位 cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币 cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币 cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种 @@ -153,10 +152,14 @@ public class CashCollectionServiceImpl implements CashCollectionService { if (cashRecord.getGoodsName().equals("金币充值")){ if( cashRecord.getPermanentGold()== 0 && cashRecord.getFreeGold()== 0){ throw new IllegalArgumentException("金币数量不能为空");} + } if (!cashRecord.getGoodsName().equals("金币充值")){ if( cashRecord.getGoodNum()== 0 ){ throw new IllegalArgumentException("产品数量不能为空");} + if(cashRecord.getNumUnit()== null){ + throw new IllegalArgumentException("数量单位不能为空"); + } } if(cashRecord.getPaymentCurrency()== null){ throw new IllegalArgumentException("支付币种不能为空"); @@ -173,12 +176,7 @@ public class CashCollectionServiceImpl implements CashCollectionService { if(cashRecord.getPayTime()== null){ throw new IllegalArgumentException("付款时间不能为空"); } - if (cashRecord.getVoucher()== null){ - throw new IllegalArgumentException("转账凭证不能为空"); - } - if (cashRecord.getRemark()==null){ - throw new IllegalArgumentException("备注不能为空"); - } + CashRecord status=cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode()); if (!status.getStatus().equals(5)){ throw new IllegalArgumentException("只允许编辑已撤回订单"); @@ -253,8 +251,9 @@ public class CashCollectionServiceImpl implements CashCollectionService { } //获取收款活动列表 @Override - public List getActivityList() { - return cashCollectionMapper.getActivityList(); + public List getActivityList() { + LocalDateTime now = LocalDateTime.now(); + return cashCollectionMapper.getActivityList(now); } //同步g_order订单到cash_record表 @Override diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 144833f..1fcc5d8 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -7,12 +7,12 @@ useGeneratedKeys="true" keyProperty="id"> insert into cash_record(order_type,jwcode,name,market,activity, - order_code,goods_name,good_num,permanent_gold,free_gold, + order_code,goods_name,good_num,num_unit,permanent_gold,free_gold, payment_currency,payment_amount,received_market, pay_type,pay_time,status,submitter_id,submitter_market, voucher,remark) values(#{orderType},#{jwcode},#{name},#{market},#{activity}, - #{orderCode},#{goodsName},#{goodNum},#{permanentGold},#{freeGold},#{paymentCurrency}, + #{orderCode},#{goodsName},#{goodNum},#{NumUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime}, #{status},#{submitterId},#{submitterMarket},#{voucher},#{remark}) @@ -43,6 +43,9 @@ activity = #{cashRecord.activity}, goods_name = #{cashRecord.goodsName}, good_num = #{cashRecord.goodNum}, + permanent_gold = #{cashRecord.permanentGold}, + free_gold = #{cashRecord.freeGold}, + Num_unit = #{cashRecord.NumUnit}, payment_currency = #{cashRecord.paymentCurrency}, payment_amount = #{cashRecord.paymentAmount}, received_market = #{cashRecord.receivedMarket}, @@ -114,7 +117,7 @@ select m.name from user u left join market m on u.market=m.id where u.jwcode=#{jwcode} - + select id,activity_name,business_belong,status + from recharge_activity + where #{now} between start_time and end_time + @@ -34,6 +40,7 @@ INSERT INTO recharge_activity ( activity_name, business_belong, + area, start_time, end_time, status, @@ -42,6 +49,7 @@ ) VALUES ( #{activityName}, #{businessBelong}, + #{area}, #{startTime}, #{endTime}, #{status}, @@ -56,6 +64,7 @@ activity_name = #{activityName}, business_belong = #{businessBelong}, + area = #{area}, start_time = #{startTime}, end_time = #{endTime}, status = #{status}, @@ -66,9 +75,14 @@ - - DELETE FROM recharge_activity + + + UPDATE recharge_activity + + flag = 0, + update_time = NOW() + WHERE id = #{id} - + \ No newline at end of file From b306543c0e457f2f5aed6799a06c351070dfa64f Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Wed, 5 Nov 2025 13:22:46 +0800 Subject: [PATCH 12/24] =?UTF-8?q?11=E6=9C=885=E6=97=A5=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/coin/RechargeActivityCenterMapper.java | 2 + .../coin/RechargeActivityCenterService.java | 2 + .../coin/RechargeActivityCenterServiceImpl.java | 44 ++++++++++++++++++++++ .../mapper/RechargeActivityCenterMapper.xml | 13 +++++++ 4 files changed, 61 insertions(+) diff --git a/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java index 3049f10..27e527e 100644 --- a/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java @@ -18,6 +18,8 @@ import java.util.List; @Mapper public interface RechargeActivityCenterMapper { + // 查询所有活动(用于批量更新状态) + List listActivities(); // 根据ID查询活动 List queryActivity(RechargeActivity activity); diff --git a/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java index 7d5b419..5e97a88 100644 --- a/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java +++ b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java @@ -26,6 +26,8 @@ public interface RechargeActivityCenterService { // 更新活动 void updateActivity(RechargeActivity activity); + // 更新状态 + void updateStatus(); // 删除活动 void deleteActivity(RechargeActivity activity); diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java index e2f4484..2281e38 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java @@ -31,6 +31,7 @@ public class RechargeActivityCenterServiceImpl implements RechargeActivityCenter // 根据ID查询活动 @Override public PageInfo queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity) { + updateStatus(); PageHelper.startPage(pageNum, pageSize); List activityList = rechargeActivityCenterMapper.queryActivity(activity); return new PageInfo<>(activityList); @@ -82,6 +83,49 @@ public class RechargeActivityCenterServiceImpl implements RechargeActivityCenter rechargeActivityCenterMapper.updateActivity(activity); } + @Override + public void updateStatus() { + // 查询所有活动 + List activityList = rechargeActivityCenterMapper.listActivities(); + + if (activityList == null || activityList.isEmpty()) { + return; + } + + Date now = new Date(); + + // 遍历所有活动,更新状态 + for (RechargeActivity activity : activityList) { + Date startTime = activity.getStartTime(); + Date endTime = activity.getEndTime(); + + // 跳过时间为空的活动 + if (startTime == null || endTime == null) { + continue; + } + + String newStatus; + + // 时间范围判断,设置对应状态 + if (now.before(startTime)) { + // 当前时间 < 开始时间 → 未开始(状态0) + newStatus = "0"; + } else if (now.after(endTime)) { + // 当前时间 > 结束时间 → 已结束(状态2) + newStatus = "2"; + } else { + // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) + newStatus = "1"; + } + + // 只有当状态发生变化时才更新 + if (!newStatus.equals(activity.getStatus())) { + activity.setStatus(newStatus); + rechargeActivityCenterMapper.updateActivity(activity); + } + } + } + // 删除活动 @Override public void deleteActivity(RechargeActivity activity) { diff --git a/src/main/resources/mapper/RechargeActivityCenterMapper.xml b/src/main/resources/mapper/RechargeActivityCenterMapper.xml index 5b7dd95..3db0c92 100644 --- a/src/main/resources/mapper/RechargeActivityCenterMapper.xml +++ b/src/main/resources/mapper/RechargeActivityCenterMapper.xml @@ -2,6 +2,19 @@ + + + + + \ No newline at end of file From 812e70e2a3d2488f5023fa80f6861c6f3a264694 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Wed, 5 Nov 2025 14:05:15 +0800 Subject: [PATCH 14/24] =?UTF-8?q?11.5=20=E9=80=80=E6=AC=BE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/cash/CashRefundController.java | 21 +- .../example/demo/domain/vo/cash/CashRecordDTO.java | 39 +++ .../demo/domain/vo/cash/CashRecordRefund.java | 197 +++++++++++++ .../java/com/example/demo/domain/vo/coin/Page.java | 2 + .../example/demo/mapper/cash/CashRefundMapper.java | 7 +- .../example/demo/service/cash/RefundService.java | 10 +- .../serviceImpl/cash/CashRefundServiceImpl.java | 50 ++-- src/main/resources/cashMapper/CashRefundMapper.xml | 307 +++++++++++---------- 8 files changed, 453 insertions(+), 180 deletions(-) create mode 100644 src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java create mode 100644 src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java diff --git a/src/main/java/com/example/demo/controller/cash/CashRefundController.java b/src/main/java/com/example/demo/controller/cash/CashRefundController.java index e8d459c..9614661 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -4,6 +4,7 @@ package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.CashRecordRefund; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.RechargeUser; import com.example.demo.domain.vo.coin.Result; @@ -43,7 +44,9 @@ public class CashRefundController { private RefundService refundService; @Autowired MarketService marketService; - +/** + * 当地财务负责人退款记录 + */ @PostMapping("/select") public Result select(@RequestBody Page page) throws Exception { // 获取当前请求对象 @@ -84,17 +87,23 @@ public class CashRefundController { } // 校验通过,保持 requestedMarkets 不变 } - return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDone())); + return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } + /** + * 添加退款现金记录 + */ @PostMapping("/add") - public Result add(@RequestBody CashRecordDone cashRecordDone) throws Exception { + public Result add(@RequestBody CashRecordRefund cashRecordRefund) throws Exception { try { - return Result.success(refundService.add(cashRecordDone)); + return Result.success(refundService.add(cashRecordRefund)); } catch (Exception e) { return Result.error(e.getMessage()); } } + /** + * 查询客服提交现金记录 + */ @PostMapping("/selecta") public Result selecta(@RequestBody Page page) { @@ -107,9 +116,9 @@ public class CashRefundController { return Result.error("页大小为空!"); } // 获取传入的市场列表 - List requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null; + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; - return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDone())); + return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } @PostMapping("/update") public Result update(@RequestBody CashRecordDone cashRecordDone)throws Exception { diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java new file mode 100644 index 0000000..c7c2f63 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java @@ -0,0 +1,39 @@ +package com.example.demo.domain.vo.cash; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @program: GOLD + * @ClassName CashRecordDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-04 17:03 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +public class CashRecordDTO extends CashRecordRefund{ + private Integer activity; + private String goodsName; + private Integer goodsNum; + private String numUnit; + private BigDecimal gold; + private BigDecimal free; + private String paymentCurrency; + private BigDecimal paymentAmount; + private String receiveCurrency; + private BigDecimal receiveAmount; + private BigDecimal handlingCharges; + private String payType; + private String receivedMarket; + private String payVoucher; + private String payRemark; + private List goodsNames; + private List markets; + + +} diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java new file mode 100644 index 0000000..5be39cf --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java @@ -0,0 +1,197 @@ +package com.example.demo.domain.vo.cash; + + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @TableName cash_record_refund + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CashRecordRefund { + /** + * 序号 + */ + private Integer id; + + /** + * 精网号 + */ + private Integer jwcode; + + /** + * 姓名 + */ + private String name; + + /** + * 所属地区 + */ + private String market; + + /** + * 金币订单号 + */ + private String orderCode; + + /** + * 银行流水订单号 + */ + private String bankCode; + + /** + * 永久金币 + */ + private Integer permanentGold; + + /** + * 免费金币 + */ + private Integer freeGold; + + /** + * 审核人id + */ + private Integer auditId; + + /** + * 订单状态(1位代表收款,2位代表退款) +0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交 +3:link线上财务复核待填手续费 +4:收款流程全部结束 +6:退款 +--------------------------------------------- +10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回; +20:地区负责人待审核;22:地区负责人驳回; +30:总部财务待审核;32:总部财务驳回; +40:执行人待处理;41:执行人已处理,退款结束 + */ + private Integer status; + + /** + * 提交人id + */ + private Integer submitterId; + + /** + * 提交人地区 + */ + private String submitterMarket; + + /** + * 转账凭证 + */ + private String voucher; + + /** + * 备注 + */ + private String remark; + + /** + * 驳回理由 + */ + private String rejectReason; + + /** + * 退款备注(理由),客服填写 + */ + private String refundReason; + + /** + * 退款方式(0全额/1部分) + */ + private Integer refundModel; + + /** + * 退款执行人OA号 + */ + private Integer executor; + + /** + * 退款途径 + */ + private String refundChannels; + + /** + * 退款日期(到天) + */ + private Date refundTime; + + /** + * 退款备注(执行人填写) + */ + private String refundRemark; + + /** + * 退款截图 + */ + private String refundVoucher; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 审核时间 + */ + private Date auditTime; + + /** + * 退款币种 + */ + private String refundCurrency; + + /** + * 退款金额 + */ + private String refundAmount; + + /** + * 关联收款id + */ + private Integer relatedId; + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 开始时间 + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 结束时间 + private String submitterName; + private String auditName; + private String executorName; + private String marketName; + private List statuses; + + private String processInstanceId; // 流程实例ID + private String currentTaskId; // 当前任务ID + + private String areaServise; + private String areaFinance; + private String areaCharge; + private String headFinance; + private String sortField; + private String sortOrder; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date sTime; // 开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date eTime; // 结束时间 + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/Page.java b/src/main/java/com/example/demo/domain/vo/coin/Page.java index ec84775..048bdc3 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/Page.java +++ b/src/main/java/com/example/demo/domain/vo/coin/Page.java @@ -3,6 +3,7 @@ package com.example.demo.domain.vo.coin; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.bean.*; import com.example.demo.domain.vo.cash.CashCollection; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; import lombok.Data; import lombok.NoArgsConstructor; @@ -44,5 +45,6 @@ public class Page { private HistoryRecord historyRecord; //历史记录 private CashCollection cashCollection; //现金收款 private CashRecordDone cashRecordDone; + private CashRecordDTO cashRecordDTO; } diff --git a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java index 70cffe4..4c1039a 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java @@ -1,7 +1,9 @@ package com.example.demo.mapper.cash; import com.example.demo.domain.vo.cash.CashCollection; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.CashRecordRefund; import com.example.demo.domain.vo.coin.RefundUser; import org.apache.ibatis.annotations.Mapper; @@ -17,9 +19,9 @@ import java.util.List; **/ @Mapper public interface CashRefundMapper { - List select(CashRecordDone cashRecordDone); + List select(CashRecordDTO cashRecordDTO); int update(CashRecordDone cashRecordDone); - int insert(CashRecordDone cashRecordDone); + int insert(CashRecordRefund cashRecordRefund); int withdraw(Integer id); int review(CashRecordDone cashRecordDone); @@ -29,4 +31,5 @@ public interface CashRefundMapper { int updateStatus(CashRecordDone cashRecordDone); void addAudit(CashRecordDone cashRecordDone); void updateAudit(CashRecordDone cashRecordDone); + List financeSelect(CashRecordDTO cashRecordDTO); } diff --git a/src/main/java/com/example/demo/service/cash/RefundService.java b/src/main/java/com/example/demo/service/cash/RefundService.java index 3612678..57f1035 100644 --- a/src/main/java/com/example/demo/service/cash/RefundService.java +++ b/src/main/java/com/example/demo/service/cash/RefundService.java @@ -1,6 +1,9 @@ package com.example.demo.service.cash; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.CashRecordRefund; +import com.example.demo.domain.vo.coin.Page; import com.github.pagehelper.PageInfo; /** @@ -12,10 +15,10 @@ import com.github.pagehelper.PageInfo; * @Version 1.0 **/ public interface RefundService { - //多条件查询 - PageInfo select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone); + //多条件查询(qi'yong) + PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); //添加 - int add(CashRecordDone cashRecordDone) throws Exception; + int add(CashRecordRefund cashRecordRefund) throws Exception; //修改 int update(CashRecordDone cashRecordDone) throws Exception; // @@ -28,4 +31,5 @@ public interface RefundService { int updateStatus(CashRecordDone cashRecordDone); int finalreview(CashRecordDone cashRecordDone); + PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); } diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java index 53ea1ee..8dbce7a 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java @@ -3,7 +3,9 @@ package com.example.demo.serviceImpl.cash; import com.example.demo.Util.GoldTistV2; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.CashRecordRefund; import com.example.demo.domain.vo.coin.Result; import com.example.demo.mapper.cash.CashRefundMapper; import com.example.demo.mapper.coin.AuditMapper; @@ -12,6 +14,7 @@ import com.example.demo.mapper.coin.RefundMapper; import com.example.demo.service.cash.RefundService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -44,49 +47,38 @@ public class CashRefundServiceImpl implements RefundService { @Autowired private MarketMapper marketMapper; @Override - public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone) { + public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); - List list = cashRefundMapper.select(cashRecordDone); + List list = cashRefundMapper.select(cashRecordDTO); return new PageInfo<>(list); } @Override - public int add(CashRecordDone cashRecordDone) throws Exception { - if(cashRecordDone.getHandlingCharge()== null){ - throw new Exception("未输入手续费") ; - } - if(cashRecordDone.getJwcode()==null){ + public int add(CashRecordRefund cashRecordRefund) throws Exception { + if(cashRecordRefund.getJwcode()==null){ throw new Exception("未输入精网号") ; } - if(cashRecordDone.getPaymentAmount()== null){ - throw new Exception("未输入付款金额") ; - } - if(cashRecordDone.getPaymentCurrency()== null){ - throw new Exception("未输入付款币种") ; - } - if(cashRecordDone.getRefundModel()== null){ + if(cashRecordRefund.getRefundModel()== null){ throw new Exception("请填充退款类型") ; } - if(cashRecordDone.getRefundReason()== null){ + if(cashRecordRefund.getRefundReason()== null){ throw new Exception("请填写退款理由") ; } CashRecordDone cashRecordDonetwo = new CashRecordDone(); - cashRecordDonetwo.setAreaServise(cashRecordDone.getAreaServise()); + cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise()); cashRefundMapper.addAudit(cashRecordDonetwo); - cashRecordDone.setAuditId(cashRecordDonetwo.getId()); + cashRecordRefund.setAuditId(cashRecordDonetwo.getId()); - cashRecordDone.setOrderType(2); - cashRecordDone.setStatus(10); + cashRecordRefund.setStatus(10); //生成订单号后半部分 - String orderNumber = cashRecordDone.getOrderCode(); + String orderNumber = cashRecordRefund.getOrderCode(); //构建订单信息 - cashRecordDone.setOrderCode("TK" + orderNumber); //订单号 - cashRecordDone.setMarket(marketMapper.getMarketId(cashRecordDone.getMarket())); - cashRecordDone.setReceivedMarket(marketMapper.getMarketId(cashRecordDone.getReceivedMarket())); - cashRefundMapper.insert(cashRecordDone); + cashRecordRefund.setOrderCode("TK" + orderNumber); //订单号 + cashRecordRefund.setMarket(String.valueOf(Integer.valueOf(marketMapper.getMarketId(cashRecordRefund.getMarket())))); + cashRefundMapper.insert(cashRecordRefund); CashRecordDone cashRecordDone1 = new CashRecordDone(); - cashRecordDone1.setId(cashRecordDone.getId()); + cashRecordDone1.setId(cashRecordRefund.getId()); cashRecordDone1.setStatus(6); if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null) return cashRefundMapper.updateStatus(cashRecordDone1); @@ -226,4 +218,12 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); int result = cashRefundMapper.review(cashRecordDone); return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); } + + @Override + public PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { + PageHelper.startPage(pageNum, pageSize); +// System.out.println(goldDetail.getMarkets()); + List list = cashRefundMapper.financeSelect(cashRecordDTO); + return new PageInfo<>(list); + } } diff --git a/src/main/resources/cashMapper/CashRefundMapper.xml b/src/main/resources/cashMapper/CashRefundMapper.xml index ab6d627..3ecb7a7 100644 --- a/src/main/resources/cashMapper/CashRefundMapper.xml +++ b/src/main/resources/cashMapper/CashRefundMapper.xml @@ -2,72 +2,58 @@ - INSERT INTO cash_record ( - order_type, - jwcode, - name, - market, - activity, - order_code, - bank_code, - goods_name, - good_num, - audit_id, - payment_currency, - payment_amount, - received_currency, - received_amount, - handling_charge, - received_market, - pay_type, - pay_time, - received_time, - status, - submitter_id, - voucher, - remark, - refund_reason, - refund_model, - executor, - refund_channels, - refund_time, - refund_remark, - refund_voucher, - permanent_gold, - free_gold + INSERT INTO cash_record_refund ( + jwcode, + name, + market, + activity, + order_code, + bank_code, + permanent_gold, + free_gold, + submitter_id, + submitter_market, + voucher, + remark, + reject_reason, + refund_reason, + refund_model, + executor, + refund_channels, + refund_time, + refund_remark, + refund_voucher, + refund_currency, + refund_amount, + related_id, + audit_id, + status, ) VALUES ( - #{orderType}, - #{jwcode}, - #{name}, - #{market}, - #{activity}, - #{orderCode}, - #{bankCode}, - #{goodsName}, - #{goodNum}, - #{auditId}, - #{paymentCurrency}, - #{paymentAmount}, - #{receivedCurrency}, - #{receivedAmount}, - #{handlingCharge}, - #{receivedMarket}, - #{payType}, - #{payTime}, - #{receivedTime}, - #{status}, - #{submitterId}, - #{voucher}, - #{remark}, - #{refundReason}, - #{refundModel}, - #{executor}, - #{refundChannels}, - #{refundTime}, - #{refundRemark}, - #{refundVoucher}, + #{jwcode}, + #{name}, + #{market}, + #{activity}, + #{orderCode}, + #{bankCode}, #{permanentGold}, - #{freeGold} + #{freeGold}, + #{submitterId}, + #{submitterMarket}, + #{voucher}, + #{remark}, + #{rejectReason}, + #{refundReason}, + #{refundModel}, + #{executor}, + #{refundChannels}, + #{refundTime}, + #{refundRemark}, + #{refundVoucher}, + #{refundCurrency}, + #{refundAmount}, + #{id}, + #{auditId}, + #{status}, ); @@ -148,117 +134,150 @@ + select cash_record.id, status,jwcode,name,market,ra.activity_name as activity, order_code,bank_code,goods_name,good_num,permanent_gold,free_gold, - payment_currency,payment_amount,pay_type,pay_time,status,submitter_id, + payment_currency,payment_amount,pay_type,pay_time,cash_record.status,submitter_id, voucher,remark from cash_record left join recharge_activity ra on ra.id = cash_record.activity From 2dc56f9b89683eef19ff7db085dd185e1d145c33 Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Thu, 6 Nov 2025 16:54:58 +0800 Subject: [PATCH 19/24] =?UTF-8?q?11=E6=9C=886=E6=97=A5=E9=A2=91=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/demo/controller/coin/RoleController.java | 17 +++++++++++++++++ .../java/com/example/demo/domain/vo/coin/RoleVo.java | 1 + .../java/com/example/demo/mapper/live/LiveMapper.java | 2 ++ .../java/com/example/demo/service/coin/RoleService.java | 2 ++ .../example/demo/serviceImpl/coin/RoleServiceImpl.java | 16 +++++++++++++--- src/main/resources/liveMapper/LiveMapper.xml | 7 +++++++ src/main/resources/mapper/RoleMapper.xml | 16 +++++++++++----- 7 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/demo/controller/coin/RoleController.java b/src/main/java/com/example/demo/controller/coin/RoleController.java index 36e3786..89f220e 100644 --- a/src/main/java/com/example/demo/controller/coin/RoleController.java +++ b/src/main/java/com/example/demo/controller/coin/RoleController.java @@ -115,4 +115,21 @@ public class RoleController { } } + + //查询所有直播渠道 + @PostMapping("/getChannel") + public Result getChannel(){ + return Result.success(roleService.getChannel()); + } + + + @Log("获取频道列表") + @PostMapping("/selectChannel") + public Result selectChannel(@RequestBody RoleVo roleVo) { + Integer id = roleVo.getId(); + List list=roleService.selectSubRole(id); + return Result.success(list); + } + + } diff --git a/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java b/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java index d0f29c7..984c8e2 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java @@ -34,6 +34,7 @@ public class RoleVo implements Serializable { private String fatherMarket;//父级角色市场 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; // 创建时间 + private String channel;//所属渠道 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date updateTime; // 更新时间 diff --git a/src/main/java/com/example/demo/mapper/live/LiveMapper.java b/src/main/java/com/example/demo/mapper/live/LiveMapper.java index 223b64e..5715096 100644 --- a/src/main/java/com/example/demo/mapper/live/LiveMapper.java +++ b/src/main/java/com/example/demo/mapper/live/LiveMapper.java @@ -21,6 +21,8 @@ public interface LiveMapper { List selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive); //获取直播礼物列表 List getLiveGift(); + //获取频道列表 + List getChannel(); //获取直播频道列表 List getLiveChannel(); //计算直播消费金豆合计数 diff --git a/src/main/java/com/example/demo/service/coin/RoleService.java b/src/main/java/com/example/demo/service/coin/RoleService.java index c47e595..268cdef 100644 --- a/src/main/java/com/example/demo/service/coin/RoleService.java +++ b/src/main/java/com/example/demo/service/coin/RoleService.java @@ -19,6 +19,8 @@ import java.util.List; public interface RoleService { + //查询频道 + List getChannel(); //新增角色 Result addRole(RoleVo roleVo); //新增角色二期替补 diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java index 79495e4..d2ca389 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java @@ -9,6 +9,7 @@ import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.RoleVo; import com.example.demo.mapper.coin.MenuMapper; import com.example.demo.mapper.coin.RoleMapper; +import com.example.demo.mapper.live.LiveMapper; import com.example.demo.service.coin.MenuService; import com.example.demo.service.coin.RoleService; import com.github.pagehelper.PageHelper; @@ -40,6 +41,16 @@ public class RoleServiceImpl implements RoleService { private MenuService menuService; @Autowired private MenuMapper menuMapper; + @Autowired + private LiveMapper liveMapper; + + + + //查询直播礼物 + @Override + public List getChannel() { + return liveMapper.getChannel(); + } //新增角色 @Override @@ -62,9 +73,8 @@ public class RoleServiceImpl implements RoleService { if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) { return Result.error("权限为空"); } - if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) { - return Result.error("所属市场为空"); - } + + if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) { for (Integer menuId : roleVo.getMenuIds()) { diff --git a/src/main/resources/liveMapper/LiveMapper.xml b/src/main/resources/liveMapper/LiveMapper.xml index 602ecb5..69589b0 100644 --- a/src/main/resources/liveMapper/LiveMapper.xml +++ b/src/main/resources/liveMapper/LiveMapper.xml @@ -63,6 +63,13 @@ + \ No newline at end of file diff --git a/src/main/resources/cashMapper/CashRefundMapper.xml b/src/main/resources/cashMapper/CashRefundMapper.xml index 3ecb7a7..b9dd5fe 100644 --- a/src/main/resources/cashMapper/CashRefundMapper.xml +++ b/src/main/resources/cashMapper/CashRefundMapper.xml @@ -6,7 +6,6 @@ jwcode, name, market, - activity, order_code, bank_code, permanent_gold, @@ -32,7 +31,6 @@ #{jwcode}, #{name}, #{market}, - #{activity}, #{orderCode}, #{bankCode}, #{permanentGold}, @@ -133,7 +131,7 @@ - select crr.id, crr.jwcode, @@ -158,14 +156,15 @@ la.head_finance, crc.activity, crc.goods_name, - crc.goods_num, + crc.good_num as goodsNum, crc.num_unit, crc.pay_type, crc.pay_time, crc.voucher, crc.remark, crc.payment_currency, - crc.payment_amount, + crc.payment_amount + from cash_record_refund crr left join lhl_audit la on la.id = crr.audit_id left join cash_record_collection crc on crc.id = crr.related_id @@ -215,7 +214,7 @@ ORDER BY ${sortField} ${sortOrder} - ORDER BY create_time DESC + ORDER BY crr.create_time DESC @@ -225,7 +224,7 @@ crr.name, crr.market, crc.goods_name, - crc.goods_num, + crc.good_num as goodsNum, crc.num_unit, crr.refund_model, crr.submitter_id, @@ -235,9 +234,14 @@ crr.permanent_gold, crr.free_gold, crr.audit_id, - crr.related_id + crr.related_id, + la.area_servise, + la.area_finance, + la.area_charge, + la.head_finance from cash_record_refund crr left join cash_record_collection crc on crc.id = crr.related_id + left join lhl_audit la on la.id = crr.audit_id and crr.status = #{status} @@ -285,8 +289,93 @@ ORDER BY ${sortField} ${sortOrder} - ORDER BY create_time DESC + ORDER BY crr.create_time DESC + + + \ No newline at end of file diff --git a/src/main/resources/mapper/MarketMapper.xml b/src/main/resources/mapper/MarketMapper.xml index 734f78a..7f59272 100644 --- a/src/main/resources/mapper/MarketMapper.xml +++ b/src/main/resources/mapper/MarketMapper.xml @@ -35,4 +35,7 @@ + \ No newline at end of file From 328d62da52e86863cb68e677e66cf341a7753ef6 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Tue, 11 Nov 2025 09:49:08 +0800 Subject: [PATCH 23/24] =?UTF-8?q?11.11=20=E9=80=80=E6=AC=BE,=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=85=A8=E9=83=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Export/ExportService.java | 2 + .../com/example/demo/Export/ExportServiceImpl.java | 26 +- .../demo/controller/cash/CashRefundController.java | 4 + .../demo/controller/coin/ExportController.java | 18 ++ .../java/com/example/demo/domain/DTO/CashDTO.java | 39 +++ .../example/demo/domain/vo/cash/CashRecordDTO.java | 21 +- .../demo/domain/vo/cash/CashRecordRefund.java | 4 +- .../com/example/demo/domain/vo/cash/LhlAudit.java | 3 +- .../com/example/demo/domain/vo/coin/IdName.java | 13 + .../demo/mapper/cash/CashCollectionMapper.java | 4 + .../example/demo/mapper/cash/CashRefundMapper.java | 6 +- .../com/example/demo/mapper/coin/AuditMapper.java | 5 + .../com/example/demo/mapper/coin/MarketMapper.java | 4 + .../demo/service/coin/ExportExcelService.java | 2 + .../example/demo/service/listen/CashListener.java | 36 +++ .../serviceImpl/cash/CashRefundServiceImpl.java | 290 +++++++++++++-------- .../serviceImpl/coin/ExportExcelServiceImpl.java | 19 ++ .../resources/cashMapper/CashCollectionMapper.xml | 16 ++ src/main/resources/cashMapper/CashRefundMapper.xml | 32 ++- src/main/resources/mapper/AuditMapper.xml | 69 ++--- src/main/resources/mapper/MarketMapper.xml | 6 + 21 files changed, 452 insertions(+), 167 deletions(-) create mode 100644 src/main/java/com/example/demo/domain/DTO/CashDTO.java create mode 100644 src/main/java/com/example/demo/domain/vo/coin/IdName.java create mode 100644 src/main/java/com/example/demo/service/listen/CashListener.java diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index a907536..f190b38 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/src/main/java/com/example/demo/Export/ExportService.java @@ -30,4 +30,6 @@ public interface ExportService { Result addExportOnline(OnlineDTO dto); //现金负责人退款导出 Result addExportFinance(FinanceDTO dto); + + Result addExportCash(CashDTO dto); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index ad7e322..e86d041 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -127,8 +127,13 @@ public class ExportServiceImpl implements ExportService { } else if(dto instanceof FinanceDTO financeDTO){ financeDTO.setAccount(Integer.valueOf(account)); financeDTO.setUrl(""); - financeDTO.setFileName(generateFileName("现金明细", adminName)); + financeDTO.setFileName(generateFileName("现金退款明细", adminName)); financeDTO.setDataNum(0); + } else if(dto instanceof CashDTO cashDTO){ + cashDTO.setAccount(Integer.valueOf(account)); + cashDTO.setUrl(""); + cashDTO.setFileName(generateFileName("现金收款明细", adminName)); + cashDTO.setDataNum(0); } } @@ -226,6 +231,16 @@ public class ExportServiceImpl implements ExportService { financeDTO.getFileName(), financeDTO.getDataNum() ); + }else if (dto instanceof CashDTO cashDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + cashDTO.getType(), + cashDTO.getState(), + cashDTO.getUrl(), + cashDTO.getFileName(), + cashDTO.getDataNum() + ); } } @@ -256,6 +271,8 @@ public class ExportServiceImpl implements ExportService { requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo()); }else if(dto instanceof FinanceDTO financeDTO){ requestData.put(requestDataKey, financeDTO.getCashRecordDTO()); + }else if (dto instanceof CashDTO cashDTO){ + requestData.put(requestDataKey, cashDTO.getCashCollection()); } exportData.put("requestData", requestData); @@ -314,6 +331,11 @@ public class ExportServiceImpl implements ExportService { @Override public Result addExportFinance(FinanceDTO dto) { - return addExport(dto, "现金明细", "finance:queue:export_queue", "cashRecordDTO"); + return addExport(dto, "现金退款明细", "finance:queue:export_queue", "cashRecordDTO"); + } + + @Override + public Result addExportCash(CashDTO dto) { + return addExport(dto, "现金收款明细", "cash:queue:export_queue", "cashCollection"); } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/cash/CashRefundController.java b/src/main/java/com/example/demo/controller/cash/CashRefundController.java index 1aec3c7..bced193 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -233,4 +233,8 @@ public class CashRefundController { return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } + @PostMapping("/ceshi") + public Result ceshi() { + return Result.success("测试消息"); + } } diff --git a/src/main/java/com/example/demo/controller/coin/ExportController.java b/src/main/java/com/example/demo/controller/coin/ExportController.java index 01c3f14..07b9eca 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -6,6 +6,7 @@ import com.example.demo.Util.RedisLockUtil; import com.example.demo.domain.DTO.*; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; +import com.example.demo.domain.DTO.CashDTO; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.GoldDetailService; @@ -215,4 +216,21 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportCash") + public Result exportCash(@Valid @RequestBody CashDTO dto) { + String lockKey = "export:lock:" + dto.getToken(); + String requestId = UUID.randomUUID().toString(); + long expireTime = 5000; + try { + // 尝试获取锁 + if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { + throw new BusinessException("操作太频繁,请稍后重试"); + } + // 执行业务逻辑 + return exportService.addExportCash(dto); + }finally { + // 释放锁 + redisLockUtil.unlock(lockKey, requestId); + } + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/DTO/CashDTO.java b/src/main/java/com/example/demo/domain/DTO/CashDTO.java new file mode 100644 index 0000000..09aeea1 --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/CashDTO.java @@ -0,0 +1,39 @@ +package com.example.demo.domain.DTO; + +import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo; +import com.example.demo.domain.vo.cash.CashCollection; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName CashDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-09 09:26 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CashDTO { + private String token; + private String url = ""; + private String fileName = ""; + private Integer sort = 0; + private String field = ""; + private Integer account; + private Integer type = 13; //类型 + private Integer state = 0; //状态 + private String text = ""; //关键词搜索 + private Integer dataNum = 0; + private String deptid = ""; + + @NotNull(message = "page不能为空") + private Integer page = 1; + @NotNull(message = "pageSize不能为空") + private Integer pageSize = 20; + private CashCollection cashCollection; +} diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java index 8856418..fdc39a8 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java @@ -22,7 +22,7 @@ import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class CashRecordDTO extends CashRecordRefund{ +public class CashRecordDTO{ private String activity;// 活动 private String goodsName;// 商品名称 private Integer goodsNum;// 商品数量 @@ -33,7 +33,7 @@ public class CashRecordDTO extends CashRecordRefund{ private BigDecimal paymentAmount;// 支付金额 private String receivedCurrency;// 收款币种 private BigDecimal receivedAmount;// 收款金额 - private BigDecimal handlingCharges;// 手续费 + private BigDecimal handlingCharge;// 手续费 private String payBankCode;// 付款银行 private String payType;// 支付方式 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @@ -50,7 +50,9 @@ public class CashRecordDTO extends CashRecordRefund{ //到账日期 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private LocalDateTime receivedTime; + @ExcelIgnore private List goodsNames;// 商品名称 + @ExcelIgnore private List markets;// 地区 @@ -88,16 +90,17 @@ public class CashRecordDTO extends CashRecordRefund{ /** * 永久金币 */ - private Integer permanentGold; + private BigDecimal permanentGold; /** * 免费金币 */ - private Integer freeGold; + private BigDecimal freeGold; /** * 审核人id */ + @ExcelIgnore private Integer auditId; /** @@ -117,6 +120,7 @@ public class CashRecordDTO extends CashRecordRefund{ /** * 提交人id */ + @ExcelIgnore private Integer submitterId; /** @@ -206,6 +210,7 @@ public class CashRecordDTO extends CashRecordRefund{ /** * 关联收款id */ + @ExcelIgnore private Integer relatedId; @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @@ -217,20 +222,26 @@ public class CashRecordDTO extends CashRecordRefund{ private String auditName; private String executorName; private String marketName; + @ExcelIgnore private List statuses; - + @ExcelIgnore private String processInstanceId; // 流程实例ID + @ExcelIgnore private String currentTaskId; // 当前任务ID private String areaServise; private String areaFinance; private String areaCharge; private String headFinance; + @ExcelIgnore private String sortField; + @ExcelIgnore private String sortOrder; + @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date sTime; // 开始时间 + @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date eTime; // 结束时间 diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java index 5883655..7e4f6bf 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java @@ -192,10 +192,12 @@ public class CashRecordRefund { private String headFinance; private String sortField; private String sortOrder; - + @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date sTime; // 开始时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date eTime; // 结束时间 + private Integer partRefundGold; + private Integer partRefundFree; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java index 6a05965..d2a66e5 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java +++ b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java @@ -16,8 +16,9 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class LhlAudit { + private Integer id; private String areaServise;// private String areaFinance; private String areaCharge; private String headFinace; -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/IdName.java b/src/main/java/com/example/demo/domain/vo/coin/IdName.java new file mode 100644 index 0000000..fa550d3 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/coin/IdName.java @@ -0,0 +1,13 @@ +package com.example.demo.domain.vo.coin; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class IdName { + private Integer id; + private String name; +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java index 94e23d5..139c995 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java @@ -1,5 +1,6 @@ package com.example.demo.mapper.cash; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.RechargeActivity; @@ -9,6 +10,7 @@ import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -54,4 +56,6 @@ public interface CashCollectionMapper { int markSynced(@Param("orderId") Integer orderId); //根据id查询收款订单 CashCollection selectById(Integer id); + + List selectBatchIds(Set relatedIds); } diff --git a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java index 980016b..ee5fa3a 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java @@ -1,10 +1,12 @@ package com.example.demo.mapper.cash; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.RefundUser; import org.apache.ibatis.annotations.Mapper; import java.util.List; +import java.util.Set; /** * @program: GOLD @@ -32,4 +34,6 @@ public interface CashRefundMapper { //获取各阶段审核人 LhlAudit getAudit(Integer id); List exSelect(CashRecordDTO cashRecordDTO); -} + + List getAuditBatch(Set auditIds); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java index e5f9409..ec9280b 100644 --- a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java @@ -1,5 +1,7 @@ package com.example.demo.mapper.coin; +import cn.hutool.core.lang.Opt; +import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.coin.RechargeAudit; @@ -9,6 +11,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -46,4 +49,6 @@ public interface AuditMapper { String getName(Integer auditId); //更新首充日期 void updateFirstRecharge(Integer jwcode); + + List getNamesByIds(Set submitterIds); } diff --git a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java index 4feda3d..99adcd3 100644 --- a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java @@ -1,8 +1,11 @@ package com.example.demo.mapper.coin; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.entity.Market; +import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; public interface MarketMapper { List getMarket(); @@ -15,4 +18,5 @@ public interface MarketMapper { Market getMarketIdDao(String country); Market getMarketIdBytype(String market); String getMarketById(String market); + List getMarketByIds(@Param("marketIds") Set marketIds); } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/coin/ExportExcelService.java b/src/main/java/com/example/demo/service/coin/ExportExcelService.java index 669f8f3..c65b87e 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java @@ -36,4 +36,6 @@ public interface ExportExcelService { Exception OnlineExcel(String message) throws Exception; //负责人退款导出 Exception FinanceExcel(String message) throws Exception; + + Exception CashExcel(String message) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/listen/CashListener.java b/src/main/java/com/example/demo/service/listen/CashListener.java new file mode 100644 index 0000000..16cdfbc --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/CashListener.java @@ -0,0 +1,36 @@ +package com.example.demo.service.listen; + +import com.example.demo.Util.RedisUtil; +import com.example.demo.service.coin.ExportExcelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @program: GOLD + * @ClassName CashListener + * @description: + * @author: huangqizhen + * @create: 2025−11-09 09:42 + * @Version 1.0 + **/ +@Component +public class CashListener extends BaseMessageListener { + @Autowired + private ExportExcelService exportExcelService; + + protected CashListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil, "cash:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.CashExcel(message); + } catch (Exception e) { + handleException(e, message); + + } + } +} diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java index cefa8bd..6bfef96 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java @@ -1,8 +1,9 @@ package com.example.demo.serviceImpl.cash; - +import com.example.demo.domain.entity.Admin; import com.example.demo.Util.BusinessException; import com.example.demo.Util.GoldTistV2; import com.example.demo.controller.coin.AuditController; +import com.example.demo.domain.entity.Market; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.cash.*; @@ -13,20 +14,18 @@ import com.example.demo.mapper.cash.CashRefundMapper; import com.example.demo.mapper.coin.AuditMapper; import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.RefundMapper; -import com.example.demo.service.cash.CashCollectionService; import com.example.demo.service.cash.RefundService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.substring; @@ -58,48 +57,97 @@ public class CashRefundServiceImpl implements RefundService { @Override public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { PageHelper.startPage(pageNum, pageSize); -// System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.select(cashRecordDTO); + + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + + list.forEach(item -> { + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 list.forEach(item -> { - CashCollection cashCollection = cashCollectionMapper.selectById(item.getRelatedId()); - String marketName = marketMapper.getMarketById(item.getMarket()); - String submitter = auditMapper.getName(item.getSubmitterId()); - LhlAudit lhlAudit = cashRefundMapper.getAudit(item.getAuditId()); - if(cashCollection.getFreeGold()== null){ - cashCollection.setFreeGold(0); + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); } - if(cashCollection.getPermanentGold()== null){ - cashCollection.setPermanentGold(0); + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); } - BigDecimal free = new BigDecimal(cashCollection.getFreeGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - BigDecimal permanent = new BigDecimal(cashCollection.getPermanentGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - item.setGold(permanent); - item.setFree(free); - item.setActivity(cashCollection.getActivity()); - item.setPaymentCurrency(cashCollection.getPaymentCurrency()); - item.setPaymentAmount(cashCollection.getPaymentAmount()); - item.setReceivedCurrency(cashCollection.getReceivedCurrency()); - item.setReceivedAmount(cashCollection.getReceivedAmount()); - item.setPayType(cashCollection.getPayType()); - item.setPayTime(cashCollection.getPayTime()); - item.setPayBankCode(cashCollection.getBankCode()); - item.setPaySubmitter(cashCollection.getSubmitterName()); - item.setAudit(cashCollection.getAuditName()); - item.setReceivedTime(cashCollection.getReceivedTime()); - item.setPayVoucher(cashCollection.getVoucher()); - item.setPayRemark(cashCollection.getRemark()); - item.setMarketName(marketName); - item.setSubmitter(submitter); - item.setAreaServise(lhlAudit.getAreaServise()); - item.setAreaFinance(lhlAudit.getAreaFinance()); - item.setAreaCharge(lhlAudit.getAreaCharge()); - item.setHeadFinance(lhlAudit.getHeadFinace()); }); + return new PageInfo<>(list); } + private void processCashCollection(CashRecordDTO item, CashCollection cashCollection) { + // 设置默认值 + Integer freeGold = cashCollection.getFreeGold() != null ? cashCollection.getFreeGold() : 0; + Integer permanentGold = cashCollection.getPermanentGold() != null ? cashCollection.getPermanentGold() : 0; + + BigDecimal free = new BigDecimal(freeGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + BigDecimal permanent = new BigDecimal(permanentGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + + item.setGold(permanent); + item.setFree(free); + item.setActivity(cashCollection.getActivity()); + item.setPaymentCurrency(cashCollection.getPaymentCurrency()); + item.setPaymentAmount(cashCollection.getPaymentAmount()); + item.setReceivedCurrency(cashCollection.getReceivedCurrency()); + item.setReceivedAmount(cashCollection.getReceivedAmount()); + item.setPayType(cashCollection.getPayType()); + item.setPayTime(cashCollection.getPayTime()); + item.setPayBankCode(cashCollection.getBankCode()); + item.setPaySubmitter(cashCollection.getSubmitterName()); + item.setAudit(cashCollection.getAuditName()); + item.setReceivedTime(cashCollection.getReceivedTime()); + item.setPayVoucher(cashCollection.getVoucher()); + item.setPayRemark(cashCollection.getRemark()); + item.setHandlingCharge(cashCollection.getHandlingCharge()); + + // 处理金币金额 + if (item.getPermanentGold() != null) { + item.setPermanentGold(item.getPermanentGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); + } + if (item.getFreeGold() != null) { + item.setFreeGold(item.getFreeGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); + } + } + @Override public int add(CashRecordRefund cashRecordRefund) throws Exception { if(cashRecordRefund.getJwcode()==null){ @@ -270,44 +318,58 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.financeSelect(cashRecordDTO); - System.out.println( list); + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + list.forEach(item -> { - CashCollection cashCollection = cashCollectionMapper.selectById(item.getRelatedId()); - String marketName = marketMapper.getMarketById(item.getMarket()); - String submitter = auditMapper.getName(item.getSubmitterId()); - LhlAudit lhlAudit = cashRefundMapper.getAudit(item.getAuditId()); - if(cashCollection.getFreeGold()== null){ - cashCollection.setFreeGold(0); + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); } - if(cashCollection.getPermanentGold()== null){ - cashCollection.setPermanentGold(0); + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); } - BigDecimal free = new BigDecimal(cashCollection.getFreeGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - BigDecimal permanent = new BigDecimal(cashCollection.getPermanentGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - item.setGold(permanent); - item.setFree(free); - item.setActivity(cashCollection.getActivity()); - item.setPaymentCurrency(cashCollection.getPaymentCurrency()); - item.setPaymentAmount(cashCollection.getPaymentAmount()); - item.setReceivedCurrency(cashCollection.getReceivedCurrency()); - item.setReceivedAmount(cashCollection.getReceivedAmount()); - item.setPayType(cashCollection.getPayType()); - item.setPayTime(cashCollection.getPayTime()); - item.setPayBankCode(cashCollection.getBankCode()); - item.setPaySubmitter(cashCollection.getSubmitterName()); - item.setAudit(cashCollection.getAuditName()); - item.setReceivedTime(cashCollection.getReceivedTime()); - item.setPayVoucher(cashCollection.getVoucher()); - item.setPayRemark(cashCollection.getRemark()); - item.setMarketName(marketName); - item.setSubmitter(submitter); - item.setAreaServise(lhlAudit.getAreaServise()); - item.setAreaFinance(lhlAudit.getAreaFinance()); - item.setAreaCharge(lhlAudit.getAreaCharge()); - item.setHeadFinance(lhlAudit.getHeadFinace()); }); + return new PageInfo<>(list); } @@ -316,38 +378,58 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.exSelect(cashRecordDTO); + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + list.forEach(item -> { - CashCollection cashCollection = cashCollectionMapper.selectById(item.getRelatedId()); - String marketName - = marketMapper.getMarketById(item.getMarket()); - String submitter = auditMapper.getName(item.getSubmitterId()); - LhlAudit lhlAudit = cashRefundMapper.getAudit(item.getAuditId()); - BigDecimal free = new BigDecimal(cashCollection.getFreeGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - BigDecimal permanent = new BigDecimal(cashCollection.getPermanentGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - item.setGold(permanent); - item.setFree(free); - item.setActivity(cashCollection.getActivity()); - item.setPaymentCurrency(cashCollection.getPaymentCurrency()); - item.setPaymentAmount(cashCollection.getPaymentAmount()); - item.setReceivedCurrency(cashCollection.getReceivedCurrency()); - item.setReceivedAmount(cashCollection.getReceivedAmount()); - item.setPayType(cashCollection.getPayType()); - item.setPayTime(cashCollection.getPayTime()); - item.setPayBankCode(cashCollection.getBankCode()); - item.setPaySubmitter(cashCollection.getSubmitterName()); - item.setAudit(cashCollection.getAuditName()); - item.setReceivedTime(cashCollection.getReceivedTime()); - item.setPayVoucher(cashCollection.getVoucher()); - item.setPayRemark(cashCollection.getRemark()); - item.setMarketName(marketName); - item.setSubmitter(submitter); - item.setAreaServise(lhlAudit.getAreaServise()); - item.setAreaFinance(lhlAudit.getAreaFinance()); - item.setAreaCharge(lhlAudit.getAreaCharge()); - item.setHeadFinance(lhlAudit.getHeadFinace()); + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); + } + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); + } + }); + return new PageInfo<>(list); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java index 5e4d0cc..0b4b6d0 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -19,6 +19,7 @@ import com.example.demo.domain.entity.User; import com.example.demo.domain.export.Goldmingxi; import com.example.demo.domain.vo.bean.*; +import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.coin.*; @@ -285,6 +286,22 @@ public class ExportExcelServiceImpl implements ExportExcelService { } @Override + public Exception CashExcel(String message) throws Exception { + return exportExcelGeneric(message, "cashUser", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode beanRechargeNode = requestDataNode.path("cashCollection"); + CashCollection cashCollection = objectMapper.treeToValue(beanRechargeNode, CashCollection.class); + page.setCashCollection(cashCollection); + return cashRefundController.export(page); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + @Override public List getExcel(Export export) { List list = exportMapper.getExportRecord(export.getAccount(),export.getType()); System.out.println(list+"-------------------------------"); @@ -523,6 +540,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { return BeanOnlineRechargeInfo.class; case "financeUser": return CashRecordDTO.class; + case "cashUser": + return CashCollection.class; default: throw new IllegalArgumentException("不支持的导出类型: " + exportType); } diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 99c6b6f..ce94b08 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -255,4 +255,20 @@ left join recharge_activity ra on ra.id = cr.activity where cr.id=#{id} + \ No newline at end of file diff --git a/src/main/resources/cashMapper/CashRefundMapper.xml b/src/main/resources/cashMapper/CashRefundMapper.xml index b9dd5fe..8887167 100644 --- a/src/main/resources/cashMapper/CashRefundMapper.xml +++ b/src/main/resources/cashMapper/CashRefundMapper.xml @@ -26,15 +26,15 @@ refund_amount, related_id, audit_id, - status, + status ) VALUES ( #{jwcode}, #{name}, #{market}, #{orderCode}, #{bankCode}, - #{permanentGold}, - #{freeGold}, + #{partRefundGold}, + #{partRefundFree}, #{submitterId}, #{submitterMarket}, #{voucher}, @@ -51,7 +51,7 @@ #{refundAmount}, #{id}, #{auditId}, - #{status}, + #{status} ); @@ -73,7 +73,7 @@ - update cash_record + update cash_record_refund set status = 10, refund_model = #{refundModel}, @@ -81,15 +81,15 @@ where id = #{id} - update cash_record set status = 11 - where order_type =2 and id = #{id} + update cash_record_refund set status = 11 + where id = #{id} - update cash_record set status = #{status},executor = #{executor},reject_reason = #{rejectReason} - where order_type =2 and id = #{id} + update cash_record_refund set status = #{status},executor = #{executor},reject_reason = #{rejectReason} + where id = #{id} - update cash_record set refund_currency = #{refundCurrency}, + update cash_record_refund set refund_currency = #{refundCurrency}, refund_amount = #{refundAmount}, refund_channels = #{refundChannels}, refund_time = #{refundTime}, @@ -97,10 +97,10 @@ refund_voucher = #{refundVoucher}, status = #{status}, executor = #{executor} - where order_type =2 and id = #{id} + where id = #{id} - update cash_record + update cash_record_collection set status = #{status} @@ -378,4 +378,12 @@ + + \ No newline at end of file diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index ffa4b51..25cc1c4 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -1,7 +1,6 @@ - update user_gold_record set audit_id = #{auditId}, @@ -12,43 +11,29 @@ order by create_time DESC limit 1 - update user - set sum_permanent_gold = sum_permanent_gold + COALESCE(#{sumPermanentGold},0), - sum_free_june = sum_free_june + COALESCE(#{sumFreeJune},0), - sum_free_december = sum_free_december + COALESCE(#{sumFreeDecember},0), - sum_task_gold = sum_task_gold + COALESCE(#{sumTaskGold},0), - current_permanent_gold = current_permanent_gold + COALESCE(#{currentPermanentGold},0), - current_free_june = current_free_june + COALESCE(#{currentFreeJune},0), - current_free_december = current_free_december + COALESCE(#{currentFreeDecember},0), - current_task_gold = current_task_gold + COALESCE(#{currentTaskGold},0), - recharge_num = recharge_num+COALESCE(#{rechargeNum},0) - - + + + current_permanent_gold = current_permanent_gold + #{currentPermanentGold}, + + + current_free_june = current_free_june + #{currentFreeJune}, + + + current_free_december = current_free_december + #{currentFreeDecember}, + + + current_task_gold = current_task_gold + #{currentTaskGold}, + + where jwcode = #{jwcode} - update user_gold_record set is_refund = #{isRefund} - where order_code = #{orderCode} - - - update user - set first_recharge = NOW() - where jwcode = #{jwcode} + where order_code = #{orderCode} and type in (0,1) - - - - - - - - - - + + + + + update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null + + \ No newline at end of file diff --git a/src/main/resources/mapper/MarketMapper.xml b/src/main/resources/mapper/MarketMapper.xml index 7f59272..496fe44 100644 --- a/src/main/resources/mapper/MarketMapper.xml +++ b/src/main/resources/mapper/MarketMapper.xml @@ -38,4 +38,10 @@ + \ No newline at end of file From 6ce4a1d455157f7e7f1ea7f1f83555467c778e8d Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Tue, 11 Nov 2025 14:19:54 +0800 Subject: [PATCH 24/24] =?UTF-8?q?11.11=20=E5=9C=B0=E5=8C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java | 2 +- .../com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java index fdc39a8..6f46211 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java @@ -75,7 +75,7 @@ public class CashRecordDTO{ /** * 所属地区 */ - private String market; + private Integer market; /** * 金币订单号 diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java index 6bfef96..5d9b9f4 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java @@ -71,7 +71,7 @@ public class CashRefundServiceImpl implements RefundService { list.forEach(item -> { if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); - if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getMarket() != null) marketIds.add(item.getMarket()); if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); if (item.getAuditId() != null) auditIds.add(item.getAuditId()); }); @@ -330,7 +330,7 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); list.forEach(item -> { if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); - if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getMarket() != null) marketIds.add(item.getMarket()); if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); if (item.getAuditId() != null) auditIds.add(item.getAuditId()); }); @@ -390,7 +390,7 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); list.forEach(item -> { if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); - if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getMarket() != null) marketIds.add(item.getMarket()); if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); if (item.getAuditId() != null) auditIds.add(item.getAuditId()); });