From cd7dd3a996f8dcaeb5d288b58bd3d27442dc542b Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期三, 27 八月 2025 17:52:22 +0800 Subject: [PATCH] bug修改 --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralController.java | 169 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 135 insertions(+), 34 deletions(-) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralController.java index 722d689..a15e13d 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralController.java @@ -6,23 +6,23 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.IntegralPay; import com.ruoyi.other.api.domain.IntegralRecord; import com.ruoyi.other.api.domain.ServicePay; import com.ruoyi.other.api.domain.TIntegralRule; +import com.ruoyi.other.api.dto.NativePayDTO; import com.ruoyi.other.query.IntegralListQuery; import com.ruoyi.other.service.TIntegralPayService; import com.ruoyi.other.service.TIntegralRecordService; import com.ruoyi.other.service.TIntegralRuleService; import com.ruoyi.other.service.TServicePayService; -import com.ruoyi.other.util.MyQrCodeUtil; -import com.ruoyi.other.util.ObsUploadUtil; -import com.ruoyi.other.util.QRCodeUtil; -import com.ruoyi.other.util.UUIDUtil; +import com.ruoyi.other.util.*; import com.ruoyi.other.util.pay.CreateLinkStringByGet1; import com.ruoyi.other.util.pay.HttpRequester; import com.ruoyi.other.util.pay.HttpRespons; @@ -37,12 +37,19 @@ import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysConfigClient; import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.ApiOperation; +import org.apache.http.HttpResponse; import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.*; import org.springframework.mock.web.MockMultipartFile; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -55,6 +62,7 @@ import java.net.URL; import java.security.KeyFactory; import java.security.PrivateKey; +import java.security.SecureRandom; import java.security.Signature; import java.security.spec.PKCS8EncodedKeySpec; import java.text.SimpleDateFormat; @@ -82,6 +90,15 @@ @Autowired private SysConfigClient sysConfigClient; + + + + @Autowired + private WxAppletTools wxAppletTools; + + + @Autowired + private RestTemplate restTemplate; @Autowired private TokenService tokenService; @Autowired @@ -122,13 +139,25 @@ ServicePay one = servicePayService.lambdaQuery().eq(ServicePay::getPayStatus, 2) .eq(ServicePay::getUserId, userid).orderByDesc(ServicePay::getCreateTime) .last("limit 1").one(); - if (one!=null){ + ServicePay servicePayBefore = servicePayService.lambdaQuery() + .eq(ServicePay::getUserId, userid) + .eq(ServicePay::getPayStatus,2) + .eq(ServicePay::getDelFlag,0) + .orderByDesc(ServicePay::getCreateTime) + .last("limit 1") + .one(); + if (servicePayBefore==null){ workPlatformVO.setServiceStatus(1); - workPlatformVO.setEndTime(one.getEndTime()); + } else if (servicePayBefore.getEndTime().isBefore(LocalDateTime.now())) { + workPlatformVO.setServiceStatus(2); + workPlatformVO.setEndTime(servicePayBefore.getEndTime()); + }else{ - workPlatformVO.setServiceStatus(0); - workPlatformVO.setEndTime(null); + workPlatformVO.setServiceStatus(3); + workPlatformVO.setEndTime(servicePayBefore.getEndTime()); + } + return R.ok(workPlatformVO); @@ -146,7 +175,12 @@ integralVO.setIntegral(integral); return R.ok(integralVO); } - + @ApiOperation(tags = {"2.0-积分钱包"}, value = "获取积分充值比例") + @PostMapping(value = "/getPointPercent") + public R getPointPercent() { + SysConfig data1 = sysConfigClient.getInfo(8L).getData(); + return R.ok(data1.getConfigValue()); + } @ApiOperation(tags = {"2.0-积分钱包"}, value = "查询支付结果 true成功 false失败") @PostMapping(value = "/queryPayStatus") public R buy(@RequestParam Integer id) { @@ -157,15 +191,72 @@ return R.ok(false); } } - + @ApiOperation(tags = {"2.0-积分钱包"}, value = "获取小程序二维码") + @PostMapping(value = "/getQrCode") + public R getQrCode(@RequestParam("amount") String amount ) { + LoginUser loginUser = tokenService.getLoginUser(); + SysUser data = sysUserClient.getSysUser(loginUser.getUserid()).getData(); + // 充值手机号 + String phonenumber = data.getPhonenumber(); + InputStream inputStream = null; + OutputStream outputStream = null; + String accessToken = wxAppletTools.getAccessToken(); + try { + String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; + Map<String, Object> param = new HashMap<>(); +// param.put("scene", "phone=" + phonenumber); + param.put("scene", "phone=" + phonenumber+",amount="+amount); + param.put("page", "chargingPile/payMent/payMent"); + param.put("check_path", false); + param.put("env_version", "trial"); + param.put("width", 200); //二维码尺寸 + param.put("is_hyaline", true); // 是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码 参数仅对小程序码生效 + param.put("auto_color", true); // 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 参数仅对小程序码生效 + Map<String, Object> line_color = new HashMap<>(); + line_color.put("r", 0); + line_color.put("g", 0); + line_color.put("b", 0); + param.put("line_color", line_color); + System.err.println("调用生成微信URL接口传参:" + param); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity requestEntity = new HttpEntity(param, headers); + ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class); + System.err.println("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody()); + byte[] result = entity.getBody(); + inputStream = new ByteArrayInputStream(result); + //拿到httpResponse后,在获取里面的图片 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + // 最后上传生成的文件名 + String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg"; + // oss中的文件夹名 + String objectName = sdf.format(new Date()) + "/" + finalFileName; + // 上传oss + String s = ObsUploadUtil.obsUpload(objectName, inputStream); + return R.ok(s); + }catch (Exception e){ + return R.fail(e.getMessage()); + } + } + @Resource + private WeChatUtil weChatUtil; @PostMapping("/nativePay") @ApiOperation(tags = {"2.0-积分钱包"}, value = "获取支付二维码") - public R nativePay(@RequestParam("amount") String amount) throws Exception { - BigDecimal bigDecimal = new BigDecimal(amount); - BigDecimal money = bigDecimal.setScale(2, RoundingMode.HALF_UP); - Long userid = tokenService.getLoginUser().getUserid(); - R<SysUser> sysUser = sysUserClient.getSysUser(userid); - SysUser data = sysUser.getData(); + public R nativePay(@RequestBody @Validated NativePayDTO dto) throws Exception { + + R<SysUser> sysUserR = sysUserClient.queryUserByPhone(dto.getPhone()); + SysUser data = sysUserR.getData(); + //使用jscode获取微信openid + Map<String, Object> map = weChatUtil.code2Session(dto.getJsCode()); + Integer errcode = Integer.valueOf(map.get("errcode").toString()); + if(0 != errcode){ + return R.fail(map.get("msg").toString()); + } + String openid = map.get("openid").toString(); + data.setOpenId(openid); + BigDecimal amount = dto.getAmount(); + BigDecimal money = amount.setScale(2, RoundingMode.HALF_UP); + List<Site> sites = siteClient.getSiteAll().getData(); Site site = sites.stream().filter(e -> e.getId().equals(data.getSiteId())).findFirst().orElse(null); if (site==null){ @@ -173,15 +264,19 @@ } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); - ServicePay servicePay = new ServicePay(); - servicePay.setUserId(data.getUserId()); - servicePay.setAmount(site.getAnnualServiceFee()); - servicePay.setCode(code); - servicePay.setPayStatus(1); - servicePay.setPayType(1); - servicePay.setDelFlag(0); - servicePay.setCreateTime(LocalDateTime.now()); - servicePayService.save(servicePay); + IntegralPay integralPay = new IntegralPay(); + integralPay.setUserId(data.getUserId()); + SysConfig data1 = sysConfigClient.getInfo(8L).getData(); + BigDecimal bigDecimal = amount.multiply(new BigDecimal(data1.getConfigValue())).setScale(2, RoundingMode.HALF_DOWN); + integralPay.setIntegralCount(bigDecimal.intValue()); + integralPay.setAmount(amount); + integralPay.setCode(code); + integralPay.setPayStatus(1); + integralPay.setDelFlag(0); + integralPay.setCreateTime(LocalDateTime.now()); + + + integralPayService.save(integralPay); // return wechatPayService.unifiedOrderApplet(servicePay.getId()+"",code, site.getAnnualServiceFee()+"", "服务费缴纳",data.getOpenId(), "/other/wx/serviceCallback"); @@ -264,6 +359,7 @@ } System.out.println("接收返回参数:" + response.toString()); + sysUserClient.updateSysUser(data); return R.ok(response.toString()); } @Autowired @@ -282,15 +378,19 @@ } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); - ServicePay servicePay = new ServicePay(); - servicePay.setUserId(data.getUserId()); - servicePay.setAmount(site.getAnnualServiceFee()); - servicePay.setCode(code); - servicePay.setPayStatus(1); - servicePay.setPayType(1); - servicePay.setDelFlag(0); - servicePay.setCreateTime(LocalDateTime.now()); - servicePayService.save(servicePay); + IntegralPay integralPay = new IntegralPay(); + integralPay.setUserId(data.getUserId()); + SysConfig data1 = sysConfigClient.getInfo(8L).getData(); + BigDecimal bigDecimal = amount.multiply(new BigDecimal(data1.getConfigValue())).setScale(2, RoundingMode.HALF_DOWN); + integralPay.setIntegralCount(bigDecimal.intValue()); + integralPay.setAmount(amount); + integralPay.setCode(code); + integralPay.setPayStatus(1); + integralPay.setDelFlag(0); + integralPay.setCreateTime(LocalDateTime.now()); + + + integralPayService.save(integralPay); // return wechatPayService.unifiedOrderApplet(servicePay.getId()+"",code, site.getAnnualServiceFee()+"", "服务费缴纳",data.getOpenId(), "/other/wx/serviceCallback"); @@ -406,6 +506,7 @@ String signStr = JSON.toJSONString(JSONObject.parseObject(JSON.toJSONString(dataMap), TreeMap.class)); + System.out.println("待签名字符串:" + signStr); // 签名 (按照汇付天下规则,使用MD5加签) -- Gitblit v1.7.1