|
@ -0,0 +1,213 @@ |
|
|
|
|
|
package org.jeecg.modules.apiService.impl; |
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
|
|
import com.alibaba.fastjson.TypeReference; |
|
|
|
|
|
import com.aliyun.oss.OSS; |
|
|
|
|
|
import com.aliyun.oss.OSSClientBuilder; |
|
|
|
|
|
import org.apache.commons.fileupload.FileItem; |
|
|
|
|
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory; |
|
|
|
|
|
import org.jeecg.common.api.vo.Result; |
|
|
|
|
|
import org.jeecg.config.shiro.ShiroRealm; |
|
|
|
|
|
import org.jeecg.modules.apiBean.HttpClientUtil; |
|
|
|
|
|
import org.jeecg.modules.apiBean.WxQrCodeVo; |
|
|
|
|
|
import org.jeecg.modules.apiService.RecommendService; |
|
|
|
|
|
import org.jeecg.modules.carrentConfig.entity.CarrentConfig; |
|
|
|
|
|
import org.jeecg.modules.carrentConfig.service.ICarrentConfigService; |
|
|
|
|
|
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; |
|
|
|
|
|
import org.springframework.http.HttpMethod; |
|
|
|
|
|
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.RestTemplate; |
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
import org.springframework.web.multipart.commons.CommonsMultipartFile; |
|
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
|
|
import java.io.*; |
|
|
|
|
|
import java.util.HashMap; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
@Service |
|
|
|
|
|
public class RecommendServiceImpl implements RecommendService { |
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************/ |
|
|
|
|
|
//权限验证 |
|
|
|
|
|
@Resource |
|
|
|
|
|
private ShiroRealm shiroRealm; |
|
|
|
|
|
|
|
|
|
|
|
//配置信息 |
|
|
|
|
|
@Resource |
|
|
|
|
|
private ICarrentConfigService carrentConfigService; |
|
|
|
|
|
|
|
|
|
|
|
private String appid = "wx1c95690b8180a150";//小程序appid |
|
|
|
|
|
private String secret = "7a686fb5308cca9ac0bc8cab14130cee";//小程序密钥 |
|
|
|
|
|
private String endpoint = "oss-cn-guangzhou.aliyuncs.com"; |
|
|
|
|
|
private String accessKey = "LTAI5tPfZo39q2r9Sr5mW84u"; |
|
|
|
|
|
private String secretKey = "XxExGallsV4O9nERHpVsQg2XtPCU7r"; |
|
|
|
|
|
private String bucketName = "augcl"; |
|
|
|
|
|
/*************************************************************************************/ |
|
|
|
|
|
|
|
|
|
|
|
//获取个人推荐二维码 |
|
|
|
|
|
@Override |
|
|
|
|
|
public Result<?> getInviteCode(String token) { |
|
|
|
|
|
HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); |
|
|
|
|
|
|
|
|
|
|
|
//获取版本信息 |
|
|
|
|
|
CarrentConfig vsion = carrentConfigService.lambdaQuery() |
|
|
|
|
|
.eq(CarrentConfig::getParamCode, "v_sion") |
|
|
|
|
|
.one(); |
|
|
|
|
|
Integer vsionStr = Integer.parseInt(vsion.getParamValue()); |
|
|
|
|
|
String trial = "release"; |
|
|
|
|
|
if(vsionStr == 0){ |
|
|
|
|
|
trial= "release"; |
|
|
|
|
|
}else if(vsionStr == 1){ |
|
|
|
|
|
trial= "trial"; |
|
|
|
|
|
}else{ |
|
|
|
|
|
trial= "develop"; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> param = new HashMap<>(); |
|
|
|
|
|
//获取跳转路径信息 |
|
|
|
|
|
CarrentConfig xcxSharePage = carrentConfigService.lambdaQuery() |
|
|
|
|
|
.eq(CarrentConfig::getParamCode, "xcxSharePage") |
|
|
|
|
|
.one(); |
|
|
|
|
|
|
|
|
|
|
|
String key = "shareId=" + hanHaiMember.getId(); |
|
|
|
|
|
|
|
|
|
|
|
param.put("path", xcxSharePage.getParamValue() + "?" + key); //跳转页面 |
|
|
|
|
|
String accessToken = this.getAccessToken(); |
|
|
|
|
|
RestTemplate rest = new RestTemplate(); |
|
|
|
|
|
InputStream inputStream = null; |
|
|
|
|
|
OutputStream outputStream = null; |
|
|
|
|
|
File file = null; |
|
|
|
|
|
|
|
|
|
|
|
//获取存储地址 |
|
|
|
|
|
CarrentConfig oneImage = carrentConfigService.lambdaQuery() |
|
|
|
|
|
.eq(CarrentConfig::getParamCode, "codeImg") |
|
|
|
|
|
.one(); |
|
|
|
|
|
|
|
|
|
|
|
String codeImg = oneImage.getParamValue(); |
|
|
|
|
|
try{ |
|
|
|
|
|
String url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + accessToken; |
|
|
|
|
|
param.put("scene", hanHaiMember.getId()); |
|
|
|
|
|
param.put("width", 150); |
|
|
|
|
|
param.put("auto_color", false); |
|
|
|
|
|
param.put("env_version", trial); |
|
|
|
|
|
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); |
|
|
|
|
|
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); |
|
|
|
|
|
org.springframework.http.HttpEntity requestEntity = new org.springframework.http.HttpEntity(JSON.toJSONString(param), headers); |
|
|
|
|
|
ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); |
|
|
|
|
|
byte[] result = entity.getBody(); |
|
|
|
|
|
|
|
|
|
|
|
inputStream = new ByteArrayInputStream(result); |
|
|
|
|
|
String tempSave = codeImg; |
|
|
|
|
|
String filePath = tempSave; |
|
|
|
|
|
|
|
|
|
|
|
file = new File(filePath); |
|
|
|
|
|
if (!file.exists()) { |
|
|
|
|
|
file.createNewFile(); |
|
|
|
|
|
} |
|
|
|
|
|
outputStream = new FileOutputStream(file); |
|
|
|
|
|
int len = 0; |
|
|
|
|
|
byte[] buf = new byte[1024]; |
|
|
|
|
|
while ((len = inputStream.read(buf, 0, 1024)) != -1) { |
|
|
|
|
|
outputStream.write(buf, 0, len); |
|
|
|
|
|
} |
|
|
|
|
|
outputStream.flush(); |
|
|
|
|
|
|
|
|
|
|
|
//将文件上传至阿里云 |
|
|
|
|
|
DiskFileItemFactory factory = new DiskFileItemFactory(16, null); |
|
|
|
|
|
FileItem item = factory.createItem("File", "text/plain", true, file.getName()); |
|
|
|
|
|
int bytesRead = 0; |
|
|
|
|
|
byte[] buffer = new byte[8192]; |
|
|
|
|
|
try { |
|
|
|
|
|
FileInputStream fis = new FileInputStream(file); |
|
|
|
|
|
OutputStream os = item.getOutputStream(); |
|
|
|
|
|
while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) { |
|
|
|
|
|
os.write(buffer, 0, bytesRead); |
|
|
|
|
|
} |
|
|
|
|
|
os.close(); |
|
|
|
|
|
fis.close(); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
MultipartFile mf = new CommonsMultipartFile(item); |
|
|
|
|
|
//返回图片下载地址 |
|
|
|
|
|
WxQrCodeVo wxCodeVo = new WxQrCodeVo(); |
|
|
|
|
|
wxCodeVo.setUrl(this.uploadAliYunOss(mf)); |
|
|
|
|
|
|
|
|
|
|
|
wxCodeVo.setName("老环卫欢迎您"); |
|
|
|
|
|
|
|
|
|
|
|
return Result.OK(wxCodeVo); |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} finally { |
|
|
|
|
|
|
|
|
|
|
|
if (inputStream != null) { |
|
|
|
|
|
try { |
|
|
|
|
|
inputStream.close(); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if (outputStream != null) { |
|
|
|
|
|
try { |
|
|
|
|
|
outputStream.close(); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
//删除文件 |
|
|
|
|
|
if (file.exists()) { |
|
|
|
|
|
file.delete(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 获取令牌 |
|
|
|
|
|
* |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private String getAccessToken() { |
|
|
|
|
|
String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret; |
|
|
|
|
|
String doGet2 = HttpClientUtil.doGet2(requestUrl); |
|
|
|
|
|
Map<String, String> map = JSON.parseObject(doGet2, new TypeReference<Map<String, String>>() { |
|
|
|
|
|
}); |
|
|
|
|
|
return map.get("access_token"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 上传文件至阿里云oss |
|
|
|
|
|
* |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private String uploadAliYunOss(MultipartFile mf) throws Exception { |
|
|
|
|
|
String uploadFile = "WxCodeFile"; |
|
|
|
|
|
String fileName = new StringBuffer(mf.getOriginalFilename()).append(".jpg").toString();// 获取文件名 |
|
|
|
|
|
String dbpath = uploadFile + File.separator + fileName; |
|
|
|
|
|
if (dbpath.contains("\\")) { |
|
|
|
|
|
dbpath = dbpath.replace("\\", "/"); |
|
|
|
|
|
} |
|
|
|
|
|
String endpoint = this.endpoint; |
|
|
|
|
|
String accessKey = this.accessKey; |
|
|
|
|
|
String secretKey = this.secretKey; |
|
|
|
|
|
// 创建OSSClient实例。 |
|
|
|
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey); |
|
|
|
|
|
// 上传Byte数组。 |
|
|
|
|
|
byte[] content = mf.getBytes(); |
|
|
|
|
|
String bucketName = this.bucketName; |
|
|
|
|
|
ossClient.putObject(bucketName, dbpath, new ByteArrayInputStream(content)); |
|
|
|
|
|
// 关闭OSSClient。 |
|
|
|
|
|
ossClient.shutdown(); |
|
|
|
|
|
return dbpath; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |