diff --git a/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java b/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java index 4c1b915..aa15cab 100644 --- a/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java +++ b/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java @@ -35,7 +35,7 @@ public class MysqlServiceImpl implements MysqlService { @Autowired private RestTemplate restTemplate; - Set validZeroTypes = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29, 35, 36, 40, 45, 46, 47, 48, 49, 53, 54, 60)); + Set validZeroTypes = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29, 35, 36, 40, 45, 46, 47, 48, 49, 53, 54, 60,67)); Set validOneTypes = new HashSet<>(Arrays.asList(9, 15, 17, 25, 27, 37, 41, 42, 43, 50, 51, 62)); Set validTwoTypes = new HashSet<>(Arrays.asList(52,61)); Set validThreeTypes = new HashSet<>(Arrays.asList(10, 16, 30, 31, 32, 33, 34, 39, 44)); @@ -404,7 +404,10 @@ public class MysqlServiceImpl implements MysqlService { throw new IllegalArgumentException("不应处理 platform=4,应在上层过滤"); } else if ("0".equals(platform)) { stmt.setString(8, "初始化金币"); - } else { + } else if ("5".equals(platform)){ + stmt.setString(8, "DC"); + } + { stmt.setString(8, "其他"); } diff --git a/src/main/java/com/example/demo/Util/GoldTistV2.java b/src/main/java/com/example/demo/Util/GoldTistV2.java index b8022ac..42d3c74 100644 --- a/src/main/java/com/example/demo/Util/GoldTistV2.java +++ b/src/main/java/com/example/demo/Util/GoldTistV2.java @@ -215,6 +215,28 @@ public class GoldTistV2 { return resp; } + public static String addDCCoinNew(String jwcode, int lx, double jbs, String sjzfc, + String remark,double yjjb,String czr,String goodsname){ + //查错误使用 +// String sjzfc = RandomUid(10); + String resp = ""; + try { + + DESGB desjbkc = new DESGB("Jbxt.205"); + String sk = "jwcode="+jwcode+"&number="+jbs+"&uid="+sjzfc+"&remark="+ + remark+"&czr="+czr+"&yjjb="+yjjb+"&czpt=5&goodsname="+goodsname+"&type="+lx; + System.out.println("签名前:"+sk); + String sign = generateSignature(sk.split("&"),"222251821eba7efab6d48e388b8f6baa"); + sk = desjbkc.encrypt(new String(sk.getBytes(), "UTF-8")); + System.out.println(url+"goldUpdate_sign.gold?app=4&sk="+sk+"&sign="+sign); + resp = doGet(url+"goldUpdate_sign.gold?app=4&sk="+sk+"&sign="+sign); + }catch (Exception e){ + System.out.println("加金币异常"+e.toString()); + } + System.out.println(resp); + return resp; + } + /** addCoinRecordNew("94226013","测试","lzh","测试商品"); * @功能描述: 添加一条单独的记录不更新金币 * @开发人员: 弘历研发部 刘志红 于 2025-3-21下午1:58:13 创建 @@ -232,10 +254,10 @@ public class GoldTistV2 { String sjzfc = RandomUid(10); String resp = ""; try { - DESGB desjbkc = new DESGB("Jbxt.205"); + DESGB desjbkc = new DESGB("Jxbt.205"); String sk = "jwcode="+jwcode+"&type=66&uid="+sjzfc+"&remark="+ remark+"&czr="+czr+"&czpt=4&goodsname="+goodsname; - String sign = generateSignature(sk.split("&"),"222251821eba7efab6d48e388b8f6baa"); + String sign = generateSignature(sk.split("&"),"aJCQ6PcofDUybiZJI3ElC2eAQZhnF2hM"); sk = desjbkc.encrypt(new String(sk.getBytes(), "UTF-8")); resp = doGet(url+"userjbAddRecord.gold?app=4&sk="+sk+"&sign="+sign); }catch (Exception e){ @@ -247,10 +269,10 @@ public class GoldTistV2 { public static void main(String[] args) throws Exception { //调用demo - addCoinNew("94226013",63,20,"123","测试",0,"黄其振","文章11"); + addDCCoinNew("94629784",67,20,"123","测试",0,"黄其振","文章11"); } - - +//初始化类型 +// https://hcm.rzfwq.com/hwhcnewA/initTypeGold.gold } diff --git a/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java b/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java index 1d13e04..2906248 100644 --- a/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java +++ b/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java @@ -181,6 +181,18 @@ public class BeanRechargeController { } + + //添加金豆 + @PostMapping("/addBeanDC") + public Result addBeanDC(@RequestBody BeanRecharge recharge) { + try { + return beanRechargeService.addBeanDC(recharge); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + //线上金豆统计 @PostMapping("/statsOnlineBean") public Result statsOnlineBean(@RequestBody BeanOnlineRechargeInfo beanOnlineRechargeInfo, @RequestHeader(defaultValue = "zh_CN") String lang) { diff --git a/src/main/java/com/example/demo/controller/coin/RechargeController.java b/src/main/java/com/example/demo/controller/coin/RechargeController.java index 7996a2f..4803c80 100644 --- a/src/main/java/com/example/demo/controller/coin/RechargeController.java +++ b/src/main/java/com/example/demo/controller/coin/RechargeController.java @@ -170,6 +170,22 @@ public class RechargeController { } } + @PostMapping("/addDC") + public Result addDC(@RequestBody RechargeUser rechargeUser) { + try { + return rechargeService.addDC(rechargeUser); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + @PostMapping("/addFree") + public Result addFree(@RequestBody RechargeUser rechargeUser) { + try { + return rechargeService.addFree(rechargeUser); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } public Result select(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { try { diff --git a/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java b/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java index 703db58..1d226c1 100644 --- a/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java +++ b/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java @@ -23,4 +23,5 @@ public interface BeanRechargeMapper1 { //筛选查询小黄车消费 List selectCartBy(BeanConsumeCartDTO beanConsumeCartDTO); int add(BeanRecharge recharge); + int addBeanDC(BeanRecharge recharge); } \ No newline at end of file diff --git a/src/main/java/com/example/demo/security/SecurityConfig.java b/src/main/java/com/example/demo/security/SecurityConfig.java index 1530afa..73386dd 100644 --- a/src/main/java/com/example/demo/security/SecurityConfig.java +++ b/src/main/java/com/example/demo/security/SecurityConfig.java @@ -60,6 +60,7 @@ public class SecurityConfig { request .requestMatchers( HttpMethod.POST, // 用户不登录就可以访问的路径 + "/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/statistics/**","/Mysql/**","/Temporary/**","/beanRecharge/addBeanDC","/recharge/addDC","/recharge/addFree").permitAll() "/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/statistics/**","/Mysql/**","/Temporary/**","/cashCollection/syncToCashRecord").permitAll() .requestMatchers(HttpMethod.GET, "/captcha").permitAll() .requestMatchers( diff --git a/src/main/java/com/example/demo/service/bean/BeanRechargeService.java b/src/main/java/com/example/demo/service/bean/BeanRechargeService.java index 66f8ad6..0466847 100644 --- a/src/main/java/com/example/demo/service/bean/BeanRechargeService.java +++ b/src/main/java/com/example/demo/service/bean/BeanRechargeService.java @@ -24,6 +24,9 @@ public interface BeanRechargeService { //线上充值 Result add(BeanRecharge recharge); + //添加金豆 + Result addBeanDC(BeanRecharge recharge); + //系统充值 PageInfo selectBySystem(Integer pageNum, Integer pageSize, BeanSystemRechargeInfo beanRechargeInfo); diff --git a/src/main/java/com/example/demo/service/coin/RechargeService.java b/src/main/java/com/example/demo/service/coin/RechargeService.java index f7a3f45..1232555 100644 --- a/src/main/java/com/example/demo/service/coin/RechargeService.java +++ b/src/main/java/com/example/demo/service/coin/RechargeService.java @@ -27,4 +27,8 @@ public interface RechargeService { Result add(RechargeUser rechargeUser); ////根据订单单号获取订单信息(重复充值/消费提示) GoldRepeat selectByOrderCode(String orderCode); + + Result addDC(RechargeUser rechargeUser); + + Result addFree(RechargeUser rechargeUser); } diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java index 858c3ff..395633d 100644 --- a/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java @@ -1,5 +1,8 @@ package com.example.demo.serviceImpl.bean; +import com.example.demo.Util.BaseDES; +import com.example.demo.Util.BaseDES2; +import com.example.demo.Util.BaseDES3; import com.example.demo.domain.vo.bean.*; import com.example.demo.domain.vo.coin.*; import com.example.demo.mapper.bean.BeanRechargeMapper2; @@ -16,17 +19,22 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import com.example.demo.config.RabbitMQConfig; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; /** @@ -65,6 +73,9 @@ public class BeanRechargeServiceImpl implements BeanRechargeService { @Autowired private RabbitTemplate rabbitTemplate; + @Value("${bean.recharge.url}") + String apiUrl; + //新增金豆 @Override public Result add(BeanRecharge recharge) { @@ -165,6 +176,141 @@ public class BeanRechargeServiceImpl implements BeanRechargeService { } } + @Value("${toujiaoApp.url}") + private String toujiaoAppUrl; + + @Override + public Result addBeanDC(BeanRecharge recharge) { + try { + // 验证精网号是否有效 + recharge.setPermanentBean(0); + if (recharge.getJwcode() == null || recharge.getJwcode().toString().isEmpty()) { + return Result.error("精网号不能为空"); + } + if(recharge.getJwcode()<10000000||recharge.getJwcode()>99999999) + { + return Result.error("精网号位数小于8位或大于8位"); + } + // 验证免费豆和永久豆是否为非负数 + if (recharge.getFreeBean() < 0) { + return Result.error("免费豆不能为负数"); + } + // 验证免费豆和永久豆是否为非负数 + if (recharge.getFreeBean() > 999999 ) { + return Result.error("免费豆和不能超过999999"); + } + // 验证免费豆和永久豆是否均为0 + if (recharge.getFreeBean() == 0) { + return Result.error("免费豆为0"); + } + // 验证备注是否为空 + if (recharge.getRemark() == null || recharge.getRemark().toString().isEmpty()) { + return Result.error("备注不能为空"); + } + String jwcode = recharge.getJwcode().toString(); + String jwcodeDC = recharge.getJwcode().toString(); +// String jwcode = "2e35cadd48a15cc4cd834d35e38faa71"; + try { + BaseDES2 d = new BaseDES2(); + jwcode = d.encrypt(jwcode); + } catch (Exception e) { + return Result.error("加密失败"); + } + try { + BaseDES3 d = new BaseDES3(); + jwcodeDC = d.encrypt(jwcodeDC); + } catch (Exception e) { + return Result.error("加密失败"); + } + + try { + // 构建完整的请求URL + String fullUrl = toujiaoAppUrl + "/api/user/toujiaoAppLogin"; + + // 创建请求头,设置Content-Type为application/x-www-form-urlencoded + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + // 创建请求体,使用MultiValueMap存储参数 + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("jwcode", jwcodeDC); + + // 构建请求实体 + HttpEntity> requestEntity = new HttpEntity<>(params, headers); + + // 发送POST请求 + ResponseEntity response = restTemplate.postForEntity( + fullUrl, + requestEntity, + String.class + ); + + System.out.println("请求URL:" + fullUrl); + 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()); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("系统异常:" + e.getMessage()); + } + + BeanUserCard user = beanUserMapper.userCard(String.valueOf(recharge.getJwcode())); + if(user==null){ + return Result.error("用户查找不到"); + } + + String content = recharge.getRemark(); // 备注作为content参数 + String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号(去除横线) + + + // 1. 创建请求参数对象(使用Map或自定义实体类) + Map params = new HashMap<>(); + params.put("jwcode", jwcode); + params.put("gold_buy", recharge.getPermanentBean().toString()); + params.put("gold_free", recharge.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格式 + +// 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()); + } + return Result.success("添加成功"); + } catch (Exception e) { + return Result.error("系统异常:" + e.getMessage()); + } + } + + //系统充值明细 @Override public PageInfo selectBySystem(Integer pageNum, Integer pageSize, BeanSystemRechargeInfo beanSystemRechargeInfo) { diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RechargeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RechargeServiceImpl.java index 036bf9f..6bbcfea 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RechargeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RechargeServiceImpl.java @@ -1,9 +1,11 @@ package com.example.demo.serviceImpl.coin; +import com.example.demo.Util.GoldTistV2; import com.example.demo.Util.SimpleIdGenerator; import com.example.demo.config.RabbitMQConfig; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.bean.BeanUserCard; +import com.example.demo.exception.SystemException; import com.example.demo.mapper.bean.BeanUserMapper; import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.RechargeMapper; @@ -176,6 +178,43 @@ public class RechargeServiceImpl implements RechargeService { public GoldRepeat selectByOrderCode(String orderCode) { return rechargeMapper.selectByOrderCode(orderCode); } + + @Override + public Result addDC(RechargeUser rechargeUser) { + + if (rechargeUser.getJwcode()==null||rechargeUser.getJwcode()<10000000||rechargeUser.getJwcode()>99999999){ + throw new SystemException("精网号位数小于8位或大于8位"); + } + if (rechargeUser.getFreeGold()==null||rechargeUser.getFreeGold().compareTo(BigDecimal.ZERO)<0){ + throw new SystemException("免费金币不能小于0"); + } + String result = GoldTistV2.addDCCoinNew(rechargeUser.getJwcode().toString(),67,rechargeUser.getFreeGold().doubleValue(),"","DC免费金币赠送",0,"DC","DC免费金币赠送"); + + String cleanResult = result.replaceAll("\\s+", ""); + if ("1".equals(cleanResult)) { + return Result.success(); + } else { + throw new SystemException(String.format("金币发放失败:类型错误(%S),jwcode=%s", result,rechargeUser.getJwcode())); + } + } + + @Override + public Result addFree(RechargeUser rechargeUser) { + if (rechargeUser.getJwcode()==null||rechargeUser.getJwcode()<10000000||rechargeUser.getJwcode()>99999999){ + throw new SystemException("精网号位数小于8位或大于8位"); + } + if (rechargeUser.getFreeGold()==null||rechargeUser.getFreeGold().compareTo(BigDecimal.ZERO)<0){ + throw new SystemException("免费金币不能小于0"); + } + String result = GoldTistV2.addDCCoinNew(rechargeUser.getJwcode().toString(),67,rechargeUser.getFreeGold().doubleValue(),"","分享得金币",0,"黄其振","分享得金币"); + + String cleanResult = result.replaceAll("\\s+", ""); + if ("1".equals(cleanResult)) { + return Result.success(); + } else { + throw new SystemException(String.format("金币发放失败:类型错误(%S),jwcode=%s", result,rechargeUser.getJwcode())); + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 2d306d8..a7af526 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -92,6 +92,8 @@ file: upload: url: http://39.101.133.168:8828/hljw/api/aws/upload +toujiaoApp: + url: http://39.101.133.168:8828/hljw feishu: webhook: url: https://open.feishu.cn/open-apis/bot/v2/hook/455ccf9c-a8b1-46b4-b4d8-9f528620595d diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index d5bcebd..50f7d66 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -98,6 +98,9 @@ feishu: webhook: url: https://open.feishu.cn/open-apis/bot/v2/hook/1a515b19-b64f-46b7-9486-35842b9539fe +toujiaoApp: + url: https://api.homilychart.com/hljw + bean: recharge: url: http://api.homilychart.com/hljwgo/api/wallet/recharge diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 5cb518b..4c2b618 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -95,6 +95,9 @@ feishu: webhook: url: https://open.feishu.cn/open-apis/bot/v2/hook/8dd2bcc4-6492-487b-9dc5-bb7b27d43ccf +toujiaoApp: + url: https://api.homilychart.com/hljw + bean: recharge: # url: http://api.homilychart.com/hljwgo/api/wallet/recharge diff --git a/src/main/resources/mapper/BeanRechargeMapper1.xml b/src/main/resources/mapper/BeanRechargeMapper1.xml index 587c7ea..d356a3d 100644 --- a/src/main/resources/mapper/BeanRechargeMapper1.xml +++ b/src/main/resources/mapper/BeanRechargeMapper1.xml @@ -26,6 +26,28 @@ + + INSERT INTO audit + + jwcode, + buy_jd, + free_jd, + type, + admin_name, + remark, + audit_status + + VALUES + + #{jwcode}, + #{permanentBean}, + #{freeBean}, + 0, + #{adminName}, + #{remark}, + 1 + +