|
|
@@ -1,32 +1,34 @@
|
|
|
package com.mokamrp.privates.controller.pangu;
|
|
|
|
|
|
+import com.aliyun.oss.OSS;
|
|
|
+import com.aliyun.oss.model.PutObjectRequest;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.mokamrp.privates.config.OSSConfiguration;
|
|
|
import com.mokamrp.privates.constant.HttpStatus;
|
|
|
import com.mokamrp.privates.entity.DateHandle;
|
|
|
import com.mokamrp.privates.help.AjaxResult;
|
|
|
-import com.mokamrp.privates.mapper.data.PanCSTQRecordMapper;
|
|
|
import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecord;
|
|
|
import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecordTotal;
|
|
|
+import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecord;
|
|
|
import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecordTotal;
|
|
|
-import com.mokamrp.privates.mapper.pangu.pojo.PromoteQrcodePool;
|
|
|
-import com.mokamrp.privates.mapper.pangu.pojo.PromoteQrcodePoolRecord;
|
|
|
+import com.mokamrp.privates.mapper.pangu.pojo.*;
|
|
|
import com.mokamrp.privates.service.data.PanCSLTRecordService;
|
|
|
import com.mokamrp.privates.service.data.PanCSTQRecordService;
|
|
|
+import com.mokamrp.privates.service.pangu.CustserviceService;
|
|
|
import com.mokamrp.privates.service.pangu.PromoteQrcodePoolRecordService;
|
|
|
import com.mokamrp.privates.service.pangu.PromoteQrcodePoolService;
|
|
|
+import com.mokamrp.privates.utils.OssFile;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.validation.BindingResult;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import com.mokamrp.privates.service.pangu.PromoteCodeService;
|
|
|
-import com.mokamrp.privates.mapper.pangu.pojo.PromoteCode;
|
|
|
|
|
|
import javax.validation.Valid;
|
|
|
-import java.time.Duration;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.*;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -44,6 +46,9 @@ public class PromoteCodeDataController{
|
|
|
public PromoteCodeService promoteCodeService;
|
|
|
|
|
|
@Autowired
|
|
|
+ public CustserviceService custserviceService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
public PromoteQrcodePoolService promoteQrcodePoolService;
|
|
|
|
|
|
@Autowired
|
|
|
@@ -58,6 +63,11 @@ public class PromoteCodeDataController{
|
|
|
@Autowired
|
|
|
public PanCSTQRecordService panCSTQRecordService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private OSSConfiguration ossConfiguration;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OSS ossClient;
|
|
|
|
|
|
@PostMapping("/getDataTrend")
|
|
|
public Object getDataTrend(@Valid @RequestBody DateHandle dateHandle, BindingResult bindingResult){
|
|
|
@@ -119,5 +129,134 @@ public class PromoteCodeDataController{
|
|
|
res.put("takeQrcodeUv",total.getTakeQrcodePv());
|
|
|
return AjaxResult.success(res);
|
|
|
}
|
|
|
+
|
|
|
+ @PostMapping("/export")
|
|
|
+ public Object export(@RequestBody DateHandle dateHandle, BindingResult bindingResult){
|
|
|
+ if (bindingResult.hasErrors()) {
|
|
|
+ return AjaxResult.error(HttpStatus.ERROR, bindingResult.getFieldError().getDefaultMessage());
|
|
|
+ }
|
|
|
+ Long startDate = dateHandle.startDate.toEpochSecond(ZoneOffset.of("+8"));
|
|
|
+ Long endDate = dateHandle.endDate.toEpochSecond(ZoneOffset.of("+8"));
|
|
|
+ List<PromoteCode> promoteCodeList = promoteCodeService.list();
|
|
|
+ List<Custservice> custserviceList = custserviceService.list();
|
|
|
+ List<PanCSLTRecord> ltpv = panCSLTRecordService.getCustserviceLongTouchPvByDateGroupDs(startDate,endDate);
|
|
|
+ List<PanCSLTRecord> ltuv = panCSLTRecordService.getCustserviceLongTouchUvByDateGroupDs(startDate,endDate);
|
|
|
+ List<PanCSTQRecord> tqpv = panCSTQRecordService.getCustserviceTakeQrcodePvByDateGroupDs(startDate,endDate);
|
|
|
+ List<PanCSTQRecord> tquv = panCSTQRecordService.getCustserviceTakeQrcodeUvByDateGroupDs(startDate,endDate);
|
|
|
+ List<PromoteDataGroup> res = new ArrayList<>();
|
|
|
+ for (PanCSLTRecord panCSLTRecord : ltpv) {
|
|
|
+ Integer index = this.hasData(res,panCSLTRecord.getPromoteId(),panCSLTRecord.getCustserviceId(),panCSLTRecord.getDs());
|
|
|
+ if (index > -1){
|
|
|
+ res.get(index).setLongTouchPv(res.get(index).getLongTouchPv()+panCSLTRecord.getLongTouchCnt());
|
|
|
+ }else{
|
|
|
+ PromoteDataGroup promoteDataGroup = new PromoteDataGroup();
|
|
|
+ promoteDataGroup.setPromoteId(panCSLTRecord.getPromoteId());
|
|
|
+ promoteDataGroup.setCustserviceId(panCSLTRecord.getCustserviceId());
|
|
|
+ promoteDataGroup.setDs(panCSLTRecord.getDs());
|
|
|
+ promoteDataGroup.setLongTouchPv(panCSLTRecord.getLongTouchCnt());
|
|
|
+ res.add(promoteDataGroup);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (PanCSLTRecord panCSLTRecord : ltuv) {
|
|
|
+ Integer index = this.hasData(res,panCSLTRecord.getPromoteId(),panCSLTRecord.getCustserviceId(),panCSLTRecord.getDs());
|
|
|
+ if (index > -1){
|
|
|
+ res.get(index).setLongTouchUv(res.get(index).getLongTouchUv()+panCSLTRecord.getLongTouchCnt());
|
|
|
+ }else{
|
|
|
+ PromoteDataGroup promoteDataGroup = new PromoteDataGroup();
|
|
|
+ promoteDataGroup.setPromoteId(panCSLTRecord.getPromoteId());
|
|
|
+ promoteDataGroup.setCustserviceId(panCSLTRecord.getCustserviceId());
|
|
|
+ promoteDataGroup.setDs(panCSLTRecord.getDs());
|
|
|
+ promoteDataGroup.setLongTouchUv(panCSLTRecord.getLongTouchCnt());
|
|
|
+ res.add(promoteDataGroup);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (PanCSTQRecord panCSTQRecord : tqpv) {
|
|
|
+ Integer index = this.hasData(res,panCSTQRecord.getPromoteId(),panCSTQRecord.getCustserviceId(),panCSTQRecord.getDs());
|
|
|
+ if (index > -1){
|
|
|
+ res.get(index).setTakeQrcodePv(res.get(index).getLongTouchPv()+panCSTQRecord.getTakeQrcodeCnt());
|
|
|
+ }else{
|
|
|
+ PromoteDataGroup promoteDataGroup = new PromoteDataGroup();
|
|
|
+ promoteDataGroup.setPromoteId(panCSTQRecord.getPromoteId());
|
|
|
+ promoteDataGroup.setCustserviceId(panCSTQRecord.getCustserviceId());
|
|
|
+ promoteDataGroup.setDs(panCSTQRecord.getDs());
|
|
|
+ promoteDataGroup.setTakeQrcodePv(panCSTQRecord.getTakeQrcodeCnt());
|
|
|
+ res.add(promoteDataGroup);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (PanCSTQRecord panCSTQRecord : tquv) {
|
|
|
+ Integer index = this.hasData(res,panCSTQRecord.getPromoteId(),panCSTQRecord.getCustserviceId(),panCSTQRecord.getDs());
|
|
|
+ if (index > -1){
|
|
|
+ res.get(index).setTakeQrcodeUv(res.get(index).getLongTouchUv()+panCSTQRecord.getTakeQrcodeCnt());
|
|
|
+ }else{
|
|
|
+ PromoteDataGroup promoteDataGroup = new PromoteDataGroup();
|
|
|
+ promoteDataGroup.setPromoteId(panCSTQRecord.getPromoteId());
|
|
|
+ promoteDataGroup.setCustserviceId(panCSTQRecord.getCustserviceId());
|
|
|
+ promoteDataGroup.setDs(panCSTQRecord.getDs());
|
|
|
+ promoteDataGroup.setTakeQrcodeUv(panCSTQRecord.getTakeQrcodeCnt());
|
|
|
+ res.add(promoteDataGroup);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Object> tempObj;
|
|
|
+ List<List<Object>> resList = new ArrayList<List<Object>>();
|
|
|
+ Object[] head = {"日期", "活码ID", "活码名称", "二维码ID", "二维码名称", "扫码次数", "扫码人数", "长按次数", "长按人数"};
|
|
|
+ List<Object> headList = Arrays.asList(head);
|
|
|
+ Date currentTime = new Date();
|
|
|
+ String fileName = "活码数据.csv";
|
|
|
+ resList.add(headList);
|
|
|
+ for (PromoteDataGroup promoteDataGroup : res){
|
|
|
+ promoteDataGroup.setPromoteName(this.getPromoteCodeName(promoteCodeList,promoteDataGroup.getPromoteId()));
|
|
|
+ promoteDataGroup.setCustserviceName(this.getCustserviceName(custserviceList,promoteDataGroup.getCustserviceId()));
|
|
|
+ tempObj = new ArrayList<Object>() {
|
|
|
+ {
|
|
|
+ this.add(promoteDataGroup.getDs());
|
|
|
+ this.add(promoteDataGroup.getPromoteId());
|
|
|
+ this.add(promoteDataGroup.getPromoteName());
|
|
|
+ this.add(promoteDataGroup.getCustserviceId());
|
|
|
+ this.add(promoteDataGroup.getCustserviceName());
|
|
|
+ this.add(promoteDataGroup.getTakeQrcodePv());
|
|
|
+ this.add(promoteDataGroup.getTakeQrcodeUv());
|
|
|
+ this.add(promoteDataGroup.getLongTouchPv());
|
|
|
+ this.add(promoteDataGroup.getLongTouchUv());
|
|
|
+ }
|
|
|
+ };
|
|
|
+ resList.add(tempObj);
|
|
|
+ }
|
|
|
+ StringBuffer content = OssFile.createCSV(resList);
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String dateString = formatter.format(currentTime);
|
|
|
+ String randNum = Integer.toString((int)(10000+Math.random()*(99999-10000+1)));
|
|
|
+ String filePath = OSSConfiguration.PAN_DIR + dateString + "/" + randNum + "_" + fileName;
|
|
|
+ PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfiguration.getBucketName(), filePath,
|
|
|
+ new ByteArrayInputStream(content.toString().getBytes()));
|
|
|
+ ossClient.putObject(putObjectRequest);
|
|
|
+ return AjaxResult.success(ossConfiguration.getHost() + filePath);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getPromoteCodeName(List<PromoteCode> row,Integer promoteId){
|
|
|
+ for (PromoteCode promoteCode:row){
|
|
|
+ if (promoteCode.getId().equals(promoteId)){
|
|
|
+ return promoteCode.getName();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getCustserviceName(List<Custservice> row,Integer custserviceId){
|
|
|
+ for (Custservice custservice:row){
|
|
|
+ if (custservice.getId().equals(custserviceId)){
|
|
|
+ return custservice.getName();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer hasData(List<PromoteDataGroup> row,Integer promoteId,Integer custserviceId,String ds){
|
|
|
+ for (Integer i = 0;i<row.size();i++){
|
|
|
+ if (row.get(i).getPromoteId().equals(promoteId) && row.get(i).getCustserviceId().equals(custserviceId) && row.get(i).getDs().equals(ds)){
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
}
|
|
|
|