Browse Source

八字算命页面

feature-1.0-img-prototype
qyhdd 4 years ago
parent
commit
c6e240721c
  1. 24
      bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/service/RedisService.java
  2. 3
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java
  3. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/BnyerImgApplication.java
  4. 110
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/BzDataController.java
  5. 61
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/BzData.java
  6. 35
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/BzDto.java
  7. 15
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/BzDataMapper.java
  8. 19
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/BzDataService.java
  9. 124
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/BzDataServiceImpl.java
  10. 60
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DateSyncTask.java

24
bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/service/RedisService.java

@ -327,4 +327,28 @@ public class RedisService
Long releaseStatus = (Long)this.redisTemplate.execute(redisScript, Collections.singletonList(key),value);
return releaseStatus;
}
/**
* pv统计
* @param today 统计的日期
* @param page 统计的页面
* @return pv
*/
public Long pvStatistics(String today,String page){
//访问次数pv
return redisTemplate.opsForValue().increment(today +page+"PV", 1);
}
/**
* uv统计
* @param today 统计的日期
* @param page 统计的页面
* @param ip 进入页面的ip
* @return uv
*/
public Long uvStatistics(String today,String page,String ip){
//访问次数uv
return redisTemplate.opsForHyperLogLog().add(today + page+"UV", ip);
}
}

3
bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java

@ -166,7 +166,8 @@ public class QiniuServiceImpl implements IQiniuService {
videoSuffixList.add("mp4");
videoSuffixList.add("mov");
videoSuffixList.add("wmv");
if (suffix != null&&imageSuffixList.contains(suffix)&&multipartFile.getSize() / 1024 < 50000&&multipartFile.getSize() / 1024 > 0) {
long size = multipartFile.getSize();
if (suffix != null&&imageSuffixList.contains(suffix)&&multipartFile.getSize() / 1024 < 3072&&multipartFile.getSize() / 1024 > 0) {
afterCheckFiles.add(multipartFile);
}
}

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/BnyerImgApplication.java

@ -5,6 +5,7 @@ import com.bnyer.common.security.annotation.EnableRyFeignClients;
import com.bnyer.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* 系统模块
@ -15,6 +16,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@EnableAsync
public class BnyerImgApplication
{
public static void main(String[] args)

110
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/BzDataController.java

@ -0,0 +1,110 @@
package com.bnyer.img.controller;
import cn.hutool.http.server.HttpServerRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.web.controller.BaseController;
import com.bnyer.common.core.web.domain.AjaxResult;
import com.bnyer.common.core.web.page.TableDataInfo;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.domain.Banner;
import com.bnyer.img.domain.BzData;
import com.bnyer.img.dto.BannerDto;
import com.bnyer.img.dto.BannerPageDto;
import com.bnyer.img.dto.BzDto;
import com.bnyer.img.dto.StatusDto;
import com.bnyer.img.service.BannerService;
import com.bnyer.img.service.BzDataService;
import com.github.pagehelper.PageHelper;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.log.XxlJobLogger;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.List;
import java.util.Set;
@Api(value = "【图文平台】八字运势接口",tags = "【图文平台】八字运势接口")
@RestController
@RequestMapping("/img/bz")
@Slf4j
public class BzDataController extends BaseController {
@Autowired
private BzDataService bzDataService;
@Autowired
private RedisService redisService;
//@RequiresPermissions("system:config:list")
@ApiOperation(value = "八字算命")
@PostMapping("/getYs")
public R<JSONObject> getYs(@RequestBody @ApiParam("八字运势") BzDto dto) {
JSONObject jsonObject = bzDataService.getYs(dto);
if (jsonObject!=null){
return R.ok(jsonObject);
}
return R.fail();
}
@ApiOperation(value = "八字页面数据统计")
@PostMapping("/dataStatistics")
public R<JSONObject> dataStatistics(@RequestParam String source, HttpServletRequest request) {
String ip = getIpAddr(request);
bzDataService.dataStatistics(ip,source);
return R.ok();
}
private String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
//System.out.println("x-forwarded-for ip: " + ip);
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
if (ip.indexOf(",") != -1) {
ip = ip.split(",")[0];
}
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
//System.out.println("Proxy-Client-IP ip: " + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
//System.out.println("WL-Proxy-Client-IP ip: " + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
//System.out.println("HTTP_CLIENT_IP ip: " + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
//System.out.println("HTTP_X_FORWARDED_FOR ip: " + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
//System.out.println("X-Real-IP ip: " + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
//System.out.println("getRemoteAddr ip: " + ip);
}
//System.out.println("获取客户端ip: " + ip);
return ip;
}
}

61
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/BzData.java

@ -0,0 +1,61 @@
package com.bnyer.img.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
@ApiModel(value="com-bnyer-img-domain-BzData")
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "img_bz_data")
public class BzData {
/**
* 主键id
*/
@TableId(value = "id", type = IdType.INPUT)
@ApiModelProperty(value="主键id")
private Long id;
/**
* 日期
*/
@TableField(value = "date")
@ApiModelProperty(value="日期 年月日")
private String date;
/**
* pv
*/
@TableField(value = "pv")
@ApiModelProperty(value="pv")
private Long pv;
/**
* uv
*/
@TableField(value = "uv")
@ApiModelProperty(value="uv")
private Long uv;
/**
* 平台(0->Hub;1->抖音;2->快手;3->微信)
*/
@TableField(value = "source")
@ApiModelProperty(value="source")
private String source;
/**
* 防止重复唯一标识
*/
@TableField(value = "mark")
@ApiModelProperty(value="mark")
private String mark;
private static final long serialVersionUID = 1L;
}

35
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/BzDto.java

@ -0,0 +1,35 @@
package com.bnyer.img.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @Author qyh
* @Date 2022/7/13 21:27
* @Description
*/
@Getter
@Setter
@ApiModel("八字运势接收类")
public class BzDto {
@NotBlank(message = "姓不能为空!")
@ApiModelProperty(value="姓")
private String lastName;
@NotBlank(message = "名不能为空!")
@ApiModelProperty(value="名")
private String firstName;
@NotBlank(message = "性别不能为空!")
@ApiModelProperty(value="性别")
private String sex;
@NotBlank(message = "出生年月不能为空!")
@ApiModelProperty(value="出生年月")
//19990209060808这样的
private String birth;
}

15
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/BzDataMapper.java

@ -0,0 +1,15 @@
package com.bnyer.img.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.img.domain.Banner;
import com.bnyer.img.domain.BzData;
import com.bnyer.img.vo.BannerVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface BzDataMapper extends BaseMapper<BzData> {
}

19
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/BzDataService.java

@ -0,0 +1,19 @@
package com.bnyer.img.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.bnyer.img.domain.Banner;
import com.bnyer.img.domain.BzData;
import com.bnyer.img.dto.BannerPageDto;
import com.bnyer.img.dto.BzDto;
import com.bnyer.img.vo.BannerVo;
import java.util.List;
public interface BzDataService {
JSONObject getYs(BzDto dto);
void dataStatistics(String ip,String source);
int update(BzData bzData,UpdateWrapper<BzData> updateWrapper);
}

124
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/BzDataServiceImpl.java

@ -0,0 +1,124 @@
package com.bnyer.img.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.domain.Banner;
import com.bnyer.img.domain.BzData;
import com.bnyer.img.dto.BannerPageDto;
import com.bnyer.img.dto.BzDto;
import com.bnyer.img.mapper.BannerMapper;
import com.bnyer.img.mapper.BzDataMapper;
import com.bnyer.img.service.BannerService;
import com.bnyer.img.service.BzDataService;
import com.bnyer.img.vo.BannerVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class BzDataServiceImpl implements BzDataService {
@Autowired
private RedisService redisService;
@Autowired
private BzDataMapper bzDataMapper;
@Override
public JSONObject getYs(BzDto dto) {
//API产品路径
String requestUrl = "https://xuanxue.market.alicloudapi.com/ai_china_knowledge/bazi/v1?";
//阿里云APPCODE
String appcode = "7a37e4f4f24d4737bf48143d371a215b";
String lastName = dto.getLastName();
String firstName = dto.getFirstName();
String sex = dto.getSex();
String birth = dto.getBirth();
CloseableHttpClient httpClient = null;
try {
httpClient = HttpClients.createDefault();
String str = "SECOND_NAME=" + URLEncoder.encode(firstName, "UTF-8") + "&GENDER=" + URLEncoder.encode(sex, "UTF-8") + "&BIRTH=" + URLEncoder.encode(birth, "UTF-8") + "&FIRST_NAME=" + URLEncoder.encode(lastName, "UTF-8");
System.out.println(requestUrl + str);
// 创建一个HttpGet实例
HttpGet httpGet = new HttpGet(requestUrl + str);
httpGet.addHeader("Authorization", "APPCODE " + appcode);
// 发送GET请求
HttpResponse execute = httpClient.execute(httpGet);
// 获取状态码
int statusCode = execute.getStatusLine().getStatusCode();
System.out.println(statusCode);
// 获取结果
HttpEntity entity = execute.getEntity();
String result = EntityUtils.toString(entity, "utf-8");
//System.out.println(result);
return JSON.parseObject(result);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
public void dataStatistics(String ip, String source) {
String today = LocalDate.now() + "";
String page="bzPage_" + source;
//保存今天的key
redisService.redisTemplate.opsForZSet().add("bzPage_key" +today, today+page, 1.0);
//pv统计
redisService.pvStatistics(today, page);
//uv统计
redisService.uvStatistics(today, page, ip);
//查看是否已经有了这条数据
if (!redisService.hasKey(today + source)) {
QueryWrapper<BzData> wrapper = new QueryWrapper<>();
wrapper.eq("date", today);
wrapper.eq("source", source);
List<BzData> bzData = bzDataMapper.selectList(wrapper);
if (bzData.size() <= 0) {
BzData data = new BzData();
data.setDate(today);
data.setPv(1L);
data.setUv(1L);
data.setSource(source);
data.setMark(today + source);
bzDataMapper.insert(data);
}
}
}
@Override
public int update(BzData bzData, UpdateWrapper<BzData> updateWrapper) {
return bzDataMapper.update(bzData,updateWrapper);
}
}

60
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DateSyncTask.java

@ -0,0 +1,60 @@
package com.bnyer.img.task;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.domain.BzData;
import com.bnyer.img.service.BzDataService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.util.Set;
/**
* @Author qyh
* @Date 2022/7/14 16:43
* @Description
*/
@Component
@Slf4j
public class DateSyncTask {
@Autowired
private static RedisService redisService;
@Autowired
private static BzDataService bzDataService;
//@XxlJob("dateSyncTask")
//@Scheduled(fixedDelay = 1000 * 60 * 60)
public static ReturnT<String> dateSync() {
String day = LocalDate.now().plusDays(-1)+ "";
String redisKey = "bzPage_key" + day;
System.out.println(redisService);
redisService.setCacheObject("4", 2);
Set range = redisService.redisTemplate.opsForZSet().range(redisKey, 0, -1);
for (Object key : redisService.redisTemplate.opsForZSet().range(redisKey, 0, -1)) {
Long pv = Long.parseLong(redisService.redisTemplate.opsForValue().get(key + "PV").toString());
Long uv = Long.parseLong(redisService.redisTemplate.opsForHyperLogLog().size(key + "UV").toString());
String[] s = key.toString().split("_");
String source = s[1];
redisService.deleteObject(key + "PV");
redisService.deleteObject(key + "UV");
UpdateWrapper<BzData> wrapper = new UpdateWrapper<>();
wrapper.set("pv",pv);
wrapper.set("uv",uv);
wrapper.eq("date",day);
wrapper.eq("source",source);
bzDataService.update(new BzData(),wrapper);
// redisService.deleteObject(key + "PV");
// redisService.deleteObject(key + "UV");
}
redisService.deleteObject("bzPage_key" + day);
XxlJobLogger.log("{} 我执行了同步pv,uv任务", System.currentTimeMillis());
return ReturnT.SUCCESS;
}
}
Loading…
Cancel
Save