From 7efbfadf902d77d3dc17d03b8261a65d2f214398 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期三, 08 一月 2025 17:17:48 +0800 Subject: [PATCH] 11.6 --- ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java | 251 ++++++++++++++++++++++++++++++++++++------------- 1 files changed, 182 insertions(+), 69 deletions(-) diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java index 0405a71..857b0a4 100644 --- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java +++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java @@ -6,6 +6,8 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; @@ -15,8 +17,13 @@ import com.ruoyi.admin.service.*; import com.ruoyi.admin.utils.MD5AndKL; import com.ruoyi.admin.utils.WeChatUtil; +import com.ruoyi.admin.utils.util.CreateLinkStringByGet1; +import com.ruoyi.admin.utils.util.HttpRequester; +import com.ruoyi.admin.utils.util.HttpRespons; +import com.ruoyi.admin.utils.util.Md5_Sign; import com.ruoyi.admin.vo.InfoDto; import com.ruoyi.admin.vo.MoneyRecentQuery; +import com.ruoyi.admin.vo.PayDto; import com.ruoyi.admin.vo.RencentBalance; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.R; @@ -137,6 +144,16 @@ return R.ok(balance3); } + + @ApiOperation(value = "详情",tags = {"师傅段2.0-统一充值扣款列表"}) + @PostMapping(value = "/change/detail") + public R<TFranchiseeBalanceChange> detail1(@RequestParam Integer id) throws AlipayApiException { + TFranchiseeBalanceChange byId = balanceChangeService.getById(id); + return R.ok(byId); + + } + + @ApiOperation(value = "扣款记录及充值记录", tags = {"后台2.0-统一充值扣款列表","师傅段2.0-统一充值扣款列表"}) @PostMapping(value = "/recent/money/list") public R<Page<TFranchiseeBalanceChange>> recentmoneylist(@RequestBody MoneyRecentQuery moneyRecentQuery) { @@ -145,17 +162,22 @@ .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) + .eq(TFranchiseeBalanceChange::getIs_pay,1) + .orderByDesc(TFranchiseeBalanceChange::getCreateTime) .page(Page.of(moneyRecentQuery.getPageNum(), moneyRecentQuery.getPageSize())); for (TFranchiseeBalanceChange record : page.getRecords()) { Franchisee franchisee = franchiseeService.getById(record.getFranchiseeId()); - String siteIds = franchisee.getSiteIds(); + if (franchisee.getSiteIds()!=null) { + String siteIds = franchisee.getSiteIds(); + List<Site> list1 = siteService.lambdaQuery().in(Site::getId, siteIds.split(",")).list(); + record.setList1(list1); + + } String cityCode = franchisee.getCityCode(); List<Region> list = regionService.lambdaQuery().in(Region::getCode, cityCode.split(",")).list(); - List<Site> list1 = siteService.lambdaQuery().in(Site::getId, siteIds.split(",")).list(); record.setList(list); - record.setList1(list1); record.setFranchiseeName(franchisee.getName()); } return R.ok(page); @@ -164,38 +186,74 @@ @ApiOperation(value = "导出", tags = {"后台2.0-统一充值扣款列表"}) @PostMapping(value = "/recent/money/list/export") public R<Page<TFranchiseeBalanceChange>> export(@RequestBody MoneyRecentQuery moneyRecentQuery, HttpServletResponse response) { - List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType()) - .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) - .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) - .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) - .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) - .list(); + if (moneyRecentQuery.getType()==2) { + List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType()) + .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) + .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) + .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) + .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) + .list(); - try { - response.setCharacterEncoding(Constants.UTF8); - response.setContentType("application/vnd.ms-excel"); - response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); - response.setHeader("Content-Disposition", "attachment;filename=" + - URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx"); - } catch (UnsupportedEncodingException e) { - return R.fail("excel导出失败!"); - } - try { - // excel模板封装 - ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); - InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME1 + ".xlsx"); - // 自动释放资源 - try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { - WriteSheet writeSheet = EasyExcelFactory.writerSheet().build(); - excelWriter.fill(page, writeSheet); - excelWriter.finish(); - } catch (Exception e) { + try { + response.setCharacterEncoding(Constants.UTF8); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx"); + } catch (UnsupportedEncodingException e) { return R.fail("excel导出失败!"); } - } catch (IOException e) { - return R.fail("excel导出失败!"); + try { + // excel模板封装 + ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); + InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME1 + ".xlsx"); + // 自动释放资源 + try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { + WriteSheet writeSheet = EasyExcelFactory.writerSheet().build(); + excelWriter.fill(page, writeSheet); + excelWriter.finish(); + } catch (Exception e) { + return R.fail("excel导出失败!"); + } + } catch (IOException e) { + return R.fail("excel导出失败!"); + } + return R.ok(); + }else { + List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType()) + .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) + .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) + .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) + .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) + .list(); + + + try { + response.setCharacterEncoding(Constants.UTF8); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx"); + } catch (UnsupportedEncodingException e) { + return R.fail("excel导出失败!"); + } + try { + // excel模板封装 + ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); + InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME2 + ".xlsx"); + // 自动释放资源 + try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { + WriteSheet writeSheet = EasyExcelFactory.writerSheet().build(); + excelWriter.fill(page, writeSheet); + excelWriter.finish(); + } catch (Exception e) { + return R.fail("excel导出失败!"); + } + } catch (IOException e) { + return R.fail("excel导出失败!"); + } + return R.ok(); } - return R.ok(); } @@ -204,6 +262,12 @@ public R<Page<TFranchiseeBalanceChange>> consume(@RequestBody TFranchiseeBalanceChange franchiseeBalanceChange) { Franchisee byId = franchiseeService.getById(franchiseeBalanceChange.getFranchiseeId()); franchiseeBalanceChange.setFranchiseeName(byId.getName()); + Region byId1 = regionService.getById(franchiseeBalanceChange.getRegionId()); + franchiseeBalanceChange.setRegionName(byId1.getName()); + + Site byId2 = siteService.getById(franchiseeBalanceChange.getSiteId()); + franchiseeBalanceChange.setSiteName(byId2.getSiteName()); + franchiseeBalanceChange.setIs_pay(1); balanceChangeService.save(franchiseeBalanceChange); byId.setBalance(byId.getBalance().subtract(franchiseeBalanceChange.getAmount())); franchiseeService.updateById(byId); @@ -215,7 +279,7 @@ @ApiOperation(value = "js支付", tags = {"2.0-支付"}) @GetMapping(value = "/js/wxPay") - public R jsPay(@RequestParam String openId,@RequestParam BigDecimal money,@RequestParam Integer userId) { + public R jsPay(@RequestParam String openId,@RequestParam BigDecimal money,@RequestParam Integer userId) throws IOException { SysUser byId1 = sysUserService.getById(userId); this.privateKey = PemUtil.loadPrivateKey(getPrivateKeyStream()); this.privateKeySigner = new PrivateKeySigner(weChatConfig.merchantSerialNumber, privateKey); @@ -225,37 +289,66 @@ Franchisee byId = franchiseeService.getById(byId1.getFranchiseeId()); - PrepayRequest prepayRequest = new PrepayRequest(); - prepayRequest.setAppid(weChatConfig.appId); - prepayRequest.setMchid(weChatConfig.merchantId); - prepayRequest.setDescription("加盟商充值"); - prepayRequest.setOutTradeNo(code); - prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack"); - Amount amount = new Amount(); - amount.setTotal(i); - prepayRequest.setAmount(amount); - Payer payer = new Payer(); - payer.setOpenid(openId); - prepayRequest.setPayer(payer); - PrepayResponse prepay = jsapiService.prepay(prepayRequest); - String timeStamp = String.valueOf(System.currentTimeMillis() / 1000); - String packageStr = "prepay_id=" + prepay.getPrepayId(); + // + String key = "ad273ceb5e1b49e68d5c565d28d1d305";/** md5密钥商户后台-商户中心-商户设置-密钥管理获取 必填!*/ + Map<String, String> map = new HashMap<String, String>(); + map.put("p0_Version", "2.5");/** 版本号 */ + map.put("p1_MerchantNo", "888122400007793");/** 商户编号 */ + map.put("p2_OrderNo", code); /**商户订单号*/ + map.put("p3_Amount", String.valueOf(money));/**订单金额*/ + map.put("p4_Cur", "1"); /**交易币种 */ + map.put("q5_OpenId", openId); + map.put("p5_ProductName", "加盟商充值"); /** 商品名称 */ + map.put("p9_NotifyUrl", "http://www.zhipingwang.com.cn:9100/admin/franchisee/callBack"); /** 服务器异步通知地址 */ + map.put("q1_FrpCode", "WEIXIN_APP3"); /** 交易类型*/ + map.put("q7_AppId", "wx1a4a7760be53a835"); /** 交易类型*/ + map.put("qa_TradeMerchantNo", "777165000859101"); /** 777开头的报备商户号 必填!*/ - String prepay_id = prepay.getPrepayId(); - //重新进行签名后返回给前端 + String Strmap = CreateLinkStringByGet1.createLinkStringByGet(map); + + // 签名 + String sign = ""; + sign = Md5_Sign.SignByMD5(Strmap, key); + map.put("hmac", sign);/** 签名数据 */ + System.out.println("发送:" + JSON.toJSONString(map).toString()); + + // post请求参数内容 + HttpRequester hr = new HttpRequester(); + HttpRespons HP = hr.sendPost("https://www.joinpay.com/trade/uniPayApi.action", map); + System.out.println("接收返回参数:" + HP.getContent()); + JSONObject jsonObject = JSONObject.parseObject(HP.getContent()); + JSONObject rcResult = JSONObject.parseObject(jsonObject.getString("rc_Result")); Map<String, Object> map2 = new HashMap<>(); - map2.put("appid", weChatConfig.getAppId()); - map2.put("noncestr", code); - map2.put("package", "Sign=WXPay"); - map2.put("partnerid", weChatConfig.getMerchantId()); - map2.put("prepayid", prepay_id); - map2.put("timestamp", timeStamp); -// String s1 = this.weixinSignature(map2); - String signStr = Stream.of(weChatConfig.getAppId(), timeStamp, code, packageStr).collect(Collectors.joining("\n", "", "\n")); - String packageSign = privateKeySigner.sign(signStr.getBytes(StandardCharsets.UTF_8)).getSign(); - - map2.put("sign", packageSign); - System.err.println(map2); + map2.put("rcResult", rcResult); +// map2.put("timestamp", rcResult.get("timeStamp")); +// map2.put("prepayid", rcResult.get("package")); +// map2.put("sign", rcResult.get("paySign")); + + // +// PrepayRequest prepayRequest = new PrepayRequest(); +// prepayRequest.setAppid(weChatConfig.appId); +// prepayRequest.setMchid(weChatConfig.merchantId); +// prepayRequest.setDescription("加盟商充值"); +// prepayRequest.setOutTradeNo(code); +// prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack"); +// Amount amount = new Amount(); +// amount.setTotal(i); +// prepayRequest.setAmount(amount); +// Payer payer = new Payer(); +// payer.setOpenid(openId); +// prepayRequest.setPayer(payer); +// PrepayResponse prepay = jsapiService.prepay(prepayRequest); +// String timeStamp = String.valueOf(System.currentTimeMillis() / 1000); +// String packageStr = "prepay_id=" + prepay.getPrepayId(); +// +// String prepay_id = prepay.getPrepayId(); +// //重新进行签名后返回给前端 + +//// String s1 = this.weixinSignature(map2); +// String signStr = Stream.of(weChatConfig.getAppId(), timeStamp, code, packageStr).collect(Collectors.joining("\n", "", "\n")); +// String packageSign = privateKeySigner.sign(signStr.getBytes(StandardCharsets.UTF_8)).getSign(); +// +// System.err.println(map2); TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange(); @@ -323,11 +416,18 @@ tFranchiseeBalanceChange.setAmount(money); tFranchiseeBalanceChange.setIs_pay(0); tFranchiseeBalanceChange.setFranchiseeName(byId.getName()); - tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(userid)); + tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId())); tFranchiseeBalanceChange.setType(2); tFranchiseeBalanceChange.setCode(code); balanceChangeService.save(tFranchiseeBalanceChange); - return R.ok(prepay.getCodeUrl()); + + + + PayDto payDto = new PayDto(); + payDto.setOrderId(tFranchiseeBalanceChange.getId()); + payDto.setQrCode(prepay.getCodeUrl()); + + return R.ok(payDto); } catch (HttpException e) { // 发送HTTP请求失败 // log.error("发送HTTP请求失败: {}", e.getHttpRequest()); } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500 @@ -340,19 +440,32 @@ return null; } + + @ApiOperation(value = "轮询获取支付状态",tags = {"后台2.0-加盟商列表余额"}) + @PostMapping(value = "/code/check") + public R buy(@RequestParam Integer orderId) throws AlipayApiException { + TFranchiseeBalanceChange byId = balanceChangeService.getById(orderId); + if (byId.getIs_pay()==1){ + return R.ok(true); + }else { + return R.ok(false); + } + + } @Resource private NotificationParser notificationParser; @ApiOperation(value = "支付回调",tags = {"微信支付回调"}) @RequestMapping (value = "/callBack") @Transactional - public R payNotify(HttpServletRequest request) throws Exception{ + public R payNotify(HttpServletRequest request,String r2_OrderNo) throws Exception{ System.err.println("======回调开始"); - Transaction transaction; - transaction = notificationParser.parse(WeChatUtil.handleNodifyRequestParam(request), Transaction.class); - if (transaction.getTradeState() == Transaction.TradeStateEnum.SUCCESS) { + System.err.println("======回调开始"+r2_OrderNo); +// Transaction transaction; +// transaction = notificationParser.parse(WeChatUtil.handleNodifyRequestParam(request), Transaction.class); +// if (transaction.getTradeState() == Transaction.TradeStateEnum.SUCCESS) { //将记录变为已支付 - TFranchiseeBalanceChange one = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getCode, transaction.getOutTradeNo()).one(); + TFranchiseeBalanceChange one = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getCode,r2_OrderNo).one(); if (one.getIs_pay()==0) { //将加盟商的余额增加 Franchisee byId = franchiseeService.getById(one.getFranchiseeId()); @@ -361,7 +474,7 @@ one.setIs_pay(1); balanceChangeService.updateById(one); - } +// } } return R.ok(null,"SUCCESS"); -- Gitblit v1.7.1