diff --git a/src/main/java/com/example/demo/Util/BaseDES2.java b/src/main/java/com/example/demo/Util/BaseDES2.java index c877377..2020806 100644 --- a/src/main/java/com/example/demo/Util/BaseDES2.java +++ b/src/main/java/com/example/demo/Util/BaseDES2.java @@ -91,7 +91,7 @@ public class BaseDES2 { public static void main(String args[]) { try { BaseDES2 d = new BaseDES2(); - String encryptedText = d.encrypt("30003761"); + String encryptedText = d.encrypt("90035176"); System.out.println("加密结果:" + encryptedText); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/com/example/demo/config/AppConfig.java b/src/main/java/com/example/demo/config/AppConfig.java index c40f7fd..a50aa5b 100644 --- a/src/main/java/com/example/demo/config/AppConfig.java +++ b/src/main/java/com/example/demo/config/AppConfig.java @@ -2,6 +2,7 @@ package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; @Configuration @@ -9,6 +10,8 @@ public class AppConfig { @Bean public RestTemplate restTemplate() { - return new RestTemplate(); + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); + return restTemplate; } } diff --git a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java index 1711016..5234ccb 100644 --- a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java +++ b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java @@ -1,6 +1,8 @@ package com.example.demo.controller.bean; +import com.example.demo.domain.vo.bean.BeanConsume; import com.example.demo.domain.vo.bean.BeanConsumeGold; +import com.example.demo.domain.vo.bean.BeanRecharge; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.bean.BeanConsumeService; @@ -45,6 +47,16 @@ public class BeanConsumeController { return Result.success(deptList); } + + //减少金豆 + @PostMapping("/reduce") + public Result reduce(@RequestBody BeanConsume consume) { + try { + return beanConsumeService.reduce(consume); + } catch (Exception e) { + return Result.error("减少失败"); + } + } //筛选查询直播消费记录 @PostMapping("/selectLiveBy") public Result selectLiveBy(@RequestBody Page page){ diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java new file mode 100644 index 0000000..2ae8f76 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java @@ -0,0 +1,26 @@ +package com.example.demo.domain.vo.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: gold-java + * @ClassName BeanConsume + * @description: + * @author: Ethan + * @create: 2025−08-02 11:32 + * @Version 1.0 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BeanConsume { + private Integer id;//id + private String jwcode; // 精网号 + private Integer freeBean; // 免费豆 + private Integer permanentBean; // 永久豆 + private String remark; //备注 + private Integer money; // 金额 + private String adminName; // 管理员名称 +} diff --git a/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java b/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java index 66694c2..4ea43b2 100644 --- a/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java +++ b/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java @@ -23,7 +23,7 @@ public interface BeanUserMapper { List selectUserBy(@Param("beanUser") BeanUser beanUser); //查询用户卡片 - BeanUserCard userCard(@Param("jwcode")String jwcode, @Param("markets")List markets); + BeanUserCard userCard(@Param("jwcode")String jwcode); //查询客户金豆余额合计 BeanUserCard SumUserBy(@Param("beanUser")BeanUser beanUser); //查询客户分部 diff --git a/src/main/java/com/example/demo/service/bean/BeanConsumeService.java b/src/main/java/com/example/demo/service/bean/BeanConsumeService.java index 62f0138..3b4711c 100644 --- a/src/main/java/com/example/demo/service/bean/BeanConsumeService.java +++ b/src/main/java/com/example/demo/service/bean/BeanConsumeService.java @@ -3,6 +3,7 @@ package com.example.demo.service.bean; import com.example.demo.domain.vo.bean.*; import com.example.demo.domain.vo.coin.Gold; import com.example.demo.domain.vo.coin.Page; +import com.example.demo.domain.vo.coin.Result; import java.util.List; @@ -18,6 +19,10 @@ import java.util.List; public interface BeanConsumeService { //获取消费用户的分部 List getDept(); + //获取直播客户地区 + List getLiveDept(); + //减少金豆 + Result reduce(BeanConsume consume); //筛选查询直播消费 Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive); //筛选查询铁粉消费 @@ -31,6 +36,6 @@ public interface BeanConsumeService { //获取直播频道 List getLiveChannel(); - //获取直播客户地区 - List getLiveDept(); + + } diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java index 40d84c5..21625a7 100644 --- a/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java @@ -1,5 +1,6 @@ package com.example.demo.serviceImpl.bean; +import com.example.demo.Util.BaseDES2; import com.example.demo.domain.vo.bean.BeanAuditInfo; import com.example.demo.domain.vo.bean.BeanRechargeInfo; import com.example.demo.domain.vo.bean.GoldBean; @@ -11,13 +12,22 @@ import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + +import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -41,7 +51,7 @@ public class BeanAuditServiceImpl implements BeanAuditService { // 2. 构建接口URL及参数 - @Value("${file.upload.url}") + @Value("${bean.url}") String apiUrl; //查找审核信息 @@ -57,36 +67,50 @@ public class BeanAuditServiceImpl implements BeanAuditService { public Result updateStatus1(BeanAuditInfo info) { BeanAuditInfo beanAuditInfo = beanAuditMapper.selectById(info.getId()); String jwcode = beanAuditInfo.getJwcode().toString(); - String op = "recharge"; // 操作类型(根据实际业务定义,例如"recharge"表示充值) +// String jwcode = "2e35cadd48a15cc4cd834d35e38faa71"; + try { + BaseDES2 d = new BaseDES2(); + jwcode = d.encrypt(jwcode); + } catch (Exception e) { + return Result.error("加密失败"); + } String content = beanAuditInfo.getRemark(); // 备注作为content参数 String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号(去除横线) - UriComponentsBuilder urlBuilder1 = UriComponentsBuilder.fromHttpUrl(apiUrl) - .queryParam("jwcode", jwcode) - .queryParam("op", op) - .queryParam("gold", beanAuditInfo.getFreeBean()) - .queryParam("content", content); - - UriComponentsBuilder urlBuilder2 = UriComponentsBuilder.fromHttpUrl(apiUrl) - .queryParam("jwcode", jwcode) - .queryParam("op", op) - .queryParam("gold", beanAuditInfo.getPermanentBean()) - .queryParam("content", content) - .queryParam("order_no", orderNo); - // 3. 发送GET请求 - ResponseEntity response1 = restTemplate.getForEntity(urlBuilder1.toUriString(), String.class); - - // 4. 处理响应结果 - if (!response1.getStatusCode().is2xxSuccessful()) { - return Result.error("免费远程接口调用失败,状态码:" + response1.getStatusCodeValue()); - } - // 3. 发送GET请求 - ResponseEntity response2 = restTemplate.getForEntity(urlBuilder2.toUriString(), String.class); + // 1. 创建请求参数对象(使用Map或自定义实体类) + Map params = new HashMap<>(); + params.put("jwcode", jwcode); + params.put("gold_buy", beanAuditInfo.getPermanentBean().toString()); + params.put("gold_free", beanAuditInfo.getFreeBean().toString()); + params.put("content", content); + params.put("order_no", orderNo); + +// 2. 构建请求头,指定Content-Type为JSON + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); // 关键:设置为JSON格式 - // 4. 处理响应结果 - if (!response2.getStatusCode().is2xxSuccessful()) { - return Result.error("付费远程接口调用失败,状态码:" + response2.getStatusCodeValue()); +// 3. 构建请求实体(参数+头信息) + HttpEntity> requestEntity = new HttpEntity<>(params, headers); + + try { + // 4. 发送POST请求 + ResponseEntity response = restTemplate.postForEntity( + apiUrl, + requestEntity, + String.class + ); + + System.out.println("请求参数:" + params); + System.out.println("响应状态码:" + response.getStatusCodeValue()); + System.out.println("响应内容:" + response.getBody()); + + if (!response.getStatusCode().is2xxSuccessful()) { + return Result.error("远程接口接口调用失败,状态码:" + response.getStatusCodeValue() + ",响应:" + response.getBody()); + } + } catch (RestClientException e) { + e.printStackTrace(); + return Result.error("请求发送失败:" + e.getMessage()); } beanAuditMapper.updateStatus1(info); return Result.success(); diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java index 2835cab..15bcf5f 100644 --- a/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java @@ -1,19 +1,21 @@ package com.example.demo.serviceImpl.bean; import com.example.demo.domain.vo.bean.*; -import com.example.demo.domain.vo.coin.Gold; -import com.example.demo.domain.vo.coin.Page; -import com.example.demo.domain.vo.coin.RechargeAudit; -import com.example.demo.domain.vo.coin.RechargeUser; +import com.example.demo.domain.vo.coin.*; import com.example.demo.mapper.bean.BeanConsumeMapper; +import com.example.demo.mapper.coin.UserMapper; import com.example.demo.mapper.live.LiveMapper; import com.example.demo.service.bean.BeanConsumeService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import java.util.List; +import java.util.UUID; /** * @program: gold-java @@ -29,6 +31,11 @@ public class BeanConsumeServiceImpl implements BeanConsumeService { private BeanConsumeMapper beanConsumeMapper; @Autowired private LiveMapper liveMapper; + @Autowired + private UserMapper userMapper; + @Autowired + private RestTemplate restTemplate; + //获取消费用户分部 @Override @@ -36,6 +43,72 @@ public class BeanConsumeServiceImpl implements BeanConsumeService { List deptList = beanConsumeMapper.getDept(); return deptList; } + //获取直播消费客户分部 + @Override + public List getLiveDept() { + List liveDeptList = liveMapper.getDept(); + return liveDeptList; + } + //减少金豆 + @Override + public Result reduce(BeanConsume consume) { + try { + // 验证精网号是否有效 + if (consume.getJwcode() == null || consume.getJwcode().isEmpty()) { + return Result.error("精网号不能为空"); + } + + // 验证免费豆和永久豆是否为非负数 + if (consume.getFreeBean() < 0 || consume.getPermanentBean() < 0) { + return Result.error("免费豆和永久豆不能为负数"); + } + // 验证免费豆和永久豆是否为非负数 + if (consume.getFreeBean() > 999999 || consume.getPermanentBean() > 999999) { + return Result.error("免费豆和永久豆不能超过999999"); + } + // 验证免费豆和永久豆是否均为0 + if (consume.getFreeBean() == 0 && consume.getPermanentBean() == 0) { + return Result.error("免费豆和永久豆不能同时为0"); + } + // 验证备注是否为空 + if (consume.getRemark() == null || consume.getRemark().toString().isEmpty()) { + return Result.error("备注不能为空"); + } + if(consume.getAdminName() == null || consume.getAdminName().toString().isEmpty()){ + return Result.error("管理员名称不能为空"); + } + GoldUser goldUser = userMapper.selectUser(consume.getJwcode().toString()); + if(goldUser==null){ + return Result.error("用户不存在"); + } + // String jwcode = consume.getJwcode(); + String jwcode = "2e35cadd48a15cc4cd834d35e38faa71"; + String op = "cost"; // 操作类型(根据实际业务定义,例如"recharge"表示充值) + String content = consume.getRemark(); // 备注作为content参数 + String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号(去除横线) + + // 2. 构建接口URL及参数 + String apiUrl = "http://39.101.133.168:8828/mock/61/hljw/api/user/gold"; + UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(apiUrl) + .queryParam("jwcode", jwcode) + .queryParam("op", op) + .queryParam("gold", consume.getPermanentBean()) + .queryParam("content", content) + .queryParam("order_no", orderNo); + + // 3. 发送GET请求 + ResponseEntity response = restTemplate.getForEntity(urlBuilder.toUriString(), String.class); + + // 4. 处理响应结果 + if (!response.getStatusCode().is2xxSuccessful()) { + return Result.error("远程接口调用失败,状态码:" + response.getStatusCodeValue()); + } + return Result.success("减少成功"); + } catch (Exception e) { + return Result.error("系统异常:" + e.getMessage()); + } + + } //筛选查询直播消费 @Override public Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) { @@ -87,9 +160,5 @@ public class BeanConsumeServiceImpl implements BeanConsumeService { return liveMapper.getLiveChannel(); } - @Override - public List getLiveDept() { - List liveDeptList = liveMapper.getDept(); - return liveDeptList; - } + } diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java index 415963a..0186621 100644 --- a/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java @@ -45,7 +45,7 @@ public class BeanUserServiceImpl implements BeanUserService { Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); if (admin != null) { List list = Arrays.asList(admin.getMarkets().split(",")); - BeanUserCard user = beanUserMapper.userCard(jwcode,list); + BeanUserCard user = beanUserMapper.userCard(jwcode); return Result.success(user); } else{ diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 9e0b8a1..5435b82 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -51,7 +51,8 @@ file: feishu: webhook: url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877 - +bean: + url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge server: port: 8081 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index b6241a9..8365e88 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -54,7 +54,7 @@ feishu: url: https://open.feishu.cn/open-apis/bot/v2/hook/1a515b19-b64f-46b7-9486-35842b9539fe bean: - url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold + url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge server: port: 10704 diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 17db5f5..4f14e58 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -54,7 +54,7 @@ feishu: url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877 bean: - url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold + url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge server: port: 8081 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 050854c..3caac9c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -103,7 +103,8 @@ file: upload: url: http://39.101.133.168:8828/hljw/api/aws/upload bean: - url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold + # url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold + url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge server: port: 8081 diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index 2e5bb5e..5fe10e3 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -47,13 +47,14 @@ SELECT ugr.*, (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, u.name as name, - u.market as market, + m.name as market, a1.admin_name as adminName, a2.admin_name as auditName FROM user_gold_record as ugr LEFT JOIN user u ON ugr.jwcode = u.jwcode LEFT JOIN admin a1 ON ugr.admin_id = a1.id LEFT JOIN admin a2 ON ugr.audit_id = a2.id + left join market m ON u.market = m.id AND ugr.jwcode = #{rechargeAudit.jwcode} @@ -64,7 +65,7 @@ AND ( - u.market LIKE CONCAT('%', #{market}, '%') + m.name LIKE CONCAT('%', #{market}, '%') ) @@ -75,7 +76,7 @@ AND ugr.rate_id = #{rechargeAudit.rateId} --> - AND u.market = #{rechargeAudit.market} + AND m.name = #{rechargeAudit.market} AND ugr.pay_time between #{rechargeAudit.startTime} and #{rechargeAudit.endTime}