xuhy
2025-08-27 cd7dd3a996f8dcaeb5d288b58bd3d27442dc542b
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralController.java
@@ -6,9 +6,11 @@
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;
@@ -35,13 +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;
@@ -54,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;
@@ -81,6 +90,15 @@
    @Autowired
    private SysConfigClient sysConfigClient;
    @Autowired
    private WxAppletTools wxAppletTools;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private TokenService tokenService;
    @Autowired
@@ -121,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);
@@ -159,6 +189,53 @@
            return R.ok(true);
        } else {
            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
@@ -429,6 +506,7 @@
        String signStr = JSON.toJSONString(JSONObject.parseObject(JSON.toJSONString(dataMap), TreeMap.class));
        System.out.println("待签名字符串:" + signStr);
        // 签名 (按照汇付天下规则,使用MD5加签)