Commit 9e6a5db0 by 宋祥

Merge branch 'mymaster' into 'master'

修改统计的bug

See merge request rays/pcloud-book!37
parents a8cc654a 2269cb49
...@@ -158,6 +158,24 @@ ...@@ -158,6 +158,24 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.pcloud.facade</groupId>
<artifactId>pcloud-facade-audioapp</artifactId>
<version>${pcloud-facade-audioapp.version}</version>
</dependency>
<dependency>
<groupId>com.pcloud.facade</groupId>
<artifactId>pcloud-facade-videolesson</artifactId>
<version>${pcloud-facade-videolesson.version}</version>
</dependency>
<dependency>
<groupId>com.pcloud.facade</groupId>
<artifactId>pcloud-facade-liveapp</artifactId>
<version>${pcloud-facade-liveapp.version}</version>
</dependency>
<dependency>
<groupId>fakepath</groupId> <groupId>fakepath</groupId>
<artifactId>jbarcode</artifactId> <artifactId>jbarcode</artifactId>
<version>0.2.8</version> <version>0.2.8</version>
......
...@@ -6,6 +6,7 @@ import com.pcloud.common.utils.ListUtils; ...@@ -6,6 +6,7 @@ import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil; import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.facade.tradecenter.dto.GroupMoneyDto; import com.pcloud.facade.tradecenter.dto.GroupMoneyDto;
import com.pcloud.facade.tradecenter.dto.QrGroupBuyDetailDto; import com.pcloud.facade.tradecenter.dto.QrGroupBuyDetailDto;
import com.pcloud.facade.tradecenter.dto.SpeWechatGroupDto;
import com.pcloud.facade.tradecenter.dto.WechatGroupDto; import com.pcloud.facade.tradecenter.dto.WechatGroupDto;
import com.pcloud.facade.tradecenter.service.OrderFormService; import com.pcloud.facade.tradecenter.service.OrderFormService;
...@@ -69,4 +70,24 @@ public class TradeConsr { ...@@ -69,4 +70,24 @@ public class TradeConsr {
} }
return map; return map;
} }
/**
* 获取购买人数量
*/
public Map<Long, GroupMoneyDto> getSpeQrGroupSaleMoney(SpeWechatGroupDto speWechatGroupDto) throws BizException{
Map<Long, GroupMoneyDto> map = new HashMap<>();
if (speWechatGroupDto == null) {
return map;
}
try {
ResponseEntity<ResponseDto<Map<Long, GroupMoneyDto>>> responseEntityP = orderFormService.getSpeQrGroupSaleMoney(speWechatGroupDto);
map = ResponseHandleUtil.parseMap(responseEntityP, Long.class, GroupMoneyDto.class);
} catch (Exception e) {
LOGGER.error("获取交易额.[获取购买人数量]:" + e.getMessage(), e);
}
if (map == null) {
map = new HashMap<>();
}
return map;
}
} }
...@@ -2,6 +2,7 @@ package com.pcloud.book.group.biz.impl; ...@@ -2,6 +2,7 @@ package com.pcloud.book.group.biz.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.pcloud.appcenter.app.dto.AppDto; import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.audioapp.audioLesson.service.AudioLessonService;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz; import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.dao.BookDao; import com.pcloud.book.book.dao.BookDao;
...@@ -44,15 +45,20 @@ import com.pcloud.common.utils.ResponseHandleUtil; ...@@ -44,15 +45,20 @@ import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.zip.CompressUtils; import com.pcloud.common.utils.zip.CompressUtils;
import com.pcloud.facade.tradecenter.dto.GroupMoneyDto; import com.pcloud.facade.tradecenter.dto.GroupMoneyDto;
import com.pcloud.facade.tradecenter.dto.SpeWechatGroupDto;
import com.pcloud.facade.tradecenter.dto.WechatGroupDto; import com.pcloud.facade.tradecenter.dto.WechatGroupDto;
import com.pcloud.labelcenter.label.service.LabelService; import com.pcloud.labelcenter.label.service.LabelService;
import com.pcloud.liveapp.live.dto.ProductIdSearchDto;
import com.pcloud.liveapp.live.service.TimeTableService;
import com.pcloud.resourcecenter.product.dto.AddAppProductParamDTO; import com.pcloud.resourcecenter.product.dto.AddAppProductParamDTO;
import com.pcloud.resourcecenter.product.dto.ProductDto; import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.resourcecenter.product.dto.ProductTypeDto; import com.pcloud.resourcecenter.product.dto.ProductTypeDto;
import com.pcloud.resourcecenter.product.dto.SpecificationDto;
import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO; import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO;
import com.pcloud.resourcecenter.product.entity.Product; import com.pcloud.resourcecenter.product.entity.Product;
import com.pcloud.resourcecenter.product.service.ProductService; import com.pcloud.resourcecenter.product.service.ProductService;
import com.pcloud.settlementcenter.record.service.SettlementService; import com.pcloud.settlementcenter.record.service.SettlementService;
import com.pcloud.videolesson.schedule.service.ScheduleService;
import com.pcloud.wechatgroup.group.service.GroupMemberService; import com.pcloud.wechatgroup.group.service.GroupMemberService;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
...@@ -66,6 +72,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -66,6 +72,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -126,6 +133,12 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -126,6 +133,12 @@ public class BookGroupBizImpl implements BookGroupBiz {
private MainLineConsr mainLineConsr; private MainLineConsr mainLineConsr;
@Autowired @Autowired
private MessageBiz messageBiz; private MessageBiz messageBiz;
@Autowired
private AudioLessonService audioLessonService;
@Autowired
private ScheduleService scheduleService;
@Autowired
private TimeTableService timeTableService;
/** /**
...@@ -632,9 +645,176 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -632,9 +645,176 @@ public class BookGroupBizImpl implements BookGroupBiz {
appStatisticsDTO.setBuyRate(new BigDecimal(buyCount.doubleValue() / clickCount).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); appStatisticsDTO.setBuyRate(new BigDecimal(buyCount.doubleValue() / clickCount).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
} }
//处理音频、视频、直播课的逻辑
dealOtherSale(appStatisticsDTOS,productDtoMap,bookGroupId,qrcodeId,partyId);
return pageBeanNew; return pageBeanNew;
} }
@ParamLog("处理音频、视频、直播课的逻辑")
private void dealOtherSale(List<AppStatisticsDTO> appStatisticsDTOS, Map<Long, ProductDto> productDtoMap, Long bookGroupId, Long qrcodeId, Long partyId) {
if (productDtoMap == null || productDtoMap.values() == null || productDtoMap.values().isEmpty()) {
return;
}
//视频课,音频课,直播课特殊处理
List<Long> videoProductIds = new ArrayList<>();
List<Long> audioProductIds = new ArrayList<>();
List<Long> liveProductIds = new ArrayList<>();
List<ProductDto> productDtos = new ArrayList<>(productDtoMap.values());
if (!ListUtils.isEmpty(productDtos)) {
for (ProductDto productDto : productDtos) {
ProductTypeDto productTypeDto=productDto.getProductTypeDto();
String productTypeCode="";
if (productTypeDto!=null){
productTypeCode=productTypeDto.getTypeCode();
}
String[] videoTypes = {"VIDEO_COURSE", "VIDEO_SCHEDULE"};
if (Arrays.asList(videoTypes).contains(productTypeCode)) {
videoProductIds.add(productDto.getProductId());
}
String[] audioTypes = {"AUDIOAPP", "AUDIO_RESOURCE", "AUDIO_SCHEDULE", "AUDIO_COURSE"};
if (Arrays.asList(audioTypes).contains(productTypeCode)) {
audioProductIds.add(productDto.getProductId());
}
String[] liveTypes = {"LIVE", "SCHEDULE"};
if (Arrays.asList(liveTypes).contains(productTypeCode)) {
liveProductIds.add(productDto.getProductId());
}
}
}
Map<Long, List<Long>> videoPProductMapIds = new HashMap<>();
Map<Long, List<Long>> audioPProductMapIds = new HashMap<>();
Map<Long, List<Long>> livePProductMapIds = new HashMap<>();
//视频课
if (!ListUtils.isEmpty(videoProductIds)) {
videoPProductMapIds = ResponseHandleUtil.parseMapList(scheduleService.getCourseProductIdByIds(videoProductIds, "PRODUCT"), Long.class, Long.class);
}
//音频课
if (!ListUtils.isEmpty(audioProductIds)) {
audioPProductMapIds = ResponseHandleUtil.parseMapList(audioLessonService.getProIdsByIds(audioProductIds, "PRODUCT"), Long.class, Long.class);
}
//直播课
if (!ListUtils.isEmpty(liveProductIds)) {
ProductIdSearchDto productIdSearchDto=new ProductIdSearchDto();
productIdSearchDto.setIds(liveProductIds);
productIdSearchDto.setType("PRODUCT");
livePProductMapIds = ResponseHandleUtil.parseMapList(timeTableService.getCoursePidsUnderTable(productIdSearchDto), Long.class, Long.class);
}
List<Long> valProductIds = new ArrayList<>();
fillProductIdsFromLL(valProductIds,videoPProductMapIds);
fillProductIdsFromLL(valProductIds,audioPProductMapIds);
fillProductIdsFromLL(valProductIds,livePProductMapIds);
if (!ListUtils.isEmpty(valProductIds)){
//调交易中心获取交易额信息
WechatGroupDto wechatGroupDtoP = new WechatGroupDto();
wechatGroupDtoP.setBookGroupId(bookGroupId);
wechatGroupDtoP.setIds(valProductIds);
wechatGroupDtoP.setPartyId(partyId);
wechatGroupDtoP.setType("PRODUCT");
wechatGroupDtoP.setQrcodeId(qrcodeId);
Map<Long, GroupMoneyDto> productSaleMap = tradeConsr.getQrGroupSaleMoney(wechatGroupDtoP);
SpeWechatGroupDto speWechatGroupDto=new SpeWechatGroupDto();
speWechatGroupDto.setBookGroupId(bookGroupId);
speWechatGroupDto.setPartyId(partyId);
speWechatGroupDto.setQrcodeId(qrcodeId);
Map<Long,List<Long>> map=new HashMap<>();
map.putAll(videoPProductMapIds);
map.putAll(audioPProductMapIds);
map.putAll(livePProductMapIds);
speWechatGroupDto.setProductIdMap(map);
Map<Long, GroupMoneyDto> forBuyCountMap = tradeConsr.getSpeQrGroupSaleMoney(speWechatGroupDto);
Map<Long, Double> proSaleMap = new HashMap<>();
if (productSaleMap.values() != null && !productSaleMap.values().isEmpty()) {
dealSale(videoProductIds, videoPProductMapIds, productSaleMap, proSaleMap);
dealSale(audioProductIds, audioPProductMapIds, productSaleMap, proSaleMap);
dealSale(liveProductIds, livePProductMapIds, productSaleMap, proSaleMap);
for (AppStatisticsDTO appStatisticsDTO : appStatisticsDTOS) {
Long id = appStatisticsDTO.getServeId();
String type = appStatisticsDTO.getServeType();
if ("PRODUCT".equalsIgnoreCase(type)) {
Integer toAddCount = 0;
GroupMoneyDto groupMoneyDto = forBuyCountMap.get(id);
if (groupMoneyDto != null && groupMoneyDto.getSaleCount() != null) {
toAddCount = groupMoneyDto.getSaleCount().intValue();
}
addProductSale(id, productDtoMap, proSaleMap, toAddCount, appStatisticsDTO);
}
}
}
}
}
private void addProductSale(Long id, Map<Long, ProductDto> productDtoMap, Map<Long, Double> proSaleMap, Integer toAddCount, AppStatisticsDTO appStatisticsDTO) {
ProductDto productDto = productDtoMap.get(id);
String[] videoTypes = {"VIDEO_COURSE", "VIDEO_SCHEDULE"};
String[] audioTypes = {"AUDIOAPP", "AUDIO_RESOURCE", "AUDIO_SCHEDULE", "AUDIO_COURSE"};
String[] liveTypes = {"LIVE", "SCHEDULE"};
String typeCode = "";
if (productDto != null && productDto.getProductTypeDto() != null) {
typeCode = productDto.getProductTypeDto().getTypeCode();
}
if (productDto != null && (Arrays.asList(videoTypes).contains(typeCode)
|| Arrays.asList(audioTypes).contains(typeCode)
|| Arrays.asList(liveTypes).contains(typeCode))) {
Double toAdd = proSaleMap.get(id);
if (toAdd != null) {
Double oldSale = appStatisticsDTO.getSaleAmount();
if (oldSale == null) {
oldSale = 0D;
}
appStatisticsDTO.setSaleAmount(oldSale + toAdd);
}
if (toAddCount != null) {
Integer oldBuy = appStatisticsDTO.getBuyCount();
if (oldBuy == null) {
oldBuy = 0;
}
appStatisticsDTO.setBuyCount(oldBuy + toAddCount);
Integer buyCount = appStatisticsDTO.getBuyCount();
Integer clickCount = appStatisticsDTO.getClickCount();
//重新设置购买率
if (buyCount == null || buyCount == 0 || clickCount == null || clickCount == 0) {
appStatisticsDTO.setBuyRate(0D);
} else {
appStatisticsDTO.setBuyRate(new BigDecimal(buyCount.doubleValue() / clickCount).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
}
}
}
}
private void dealSale(List<Long> ids, Map<Long,List<Long>> productMapIds, Map<Long,GroupMoneyDto> productSaleMap, Map<Long,Double> saleMap) {
if (!ListUtils.isEmpty(ids)) {
for (Long id : ids) {
List<Long> productIds = productMapIds.get(id);
if (!ListUtils.isEmpty(productIds)) {
Double saleMoney = 0D;
Long saleCount = 0L;
for (Long productId : productIds) {
GroupMoneyDto groupMoneyDto = productSaleMap.get(productId);
if (groupMoneyDto != null) {
if (groupMoneyDto.getSaleMoney() != null) {
saleMoney = saleMoney + groupMoneyDto.getSaleMoney();
}
if (groupMoneyDto.getSaleCount() != null) {
saleCount = saleCount + groupMoneyDto.getSaleCount();
}
}
}
saleMap.put(id, saleMoney);
}
}
}
}
private void fillProductIdsFromLL(List<Long> productIds,Map<Long, List<Long>> map){
if (map != null && !map.values().isEmpty()) {
List<List<Long>> ll = new ArrayList<>(map.values());
for (List<Long> l : ll) {
if (!ListUtils.isEmpty(l)) {
productIds.addAll(l);
}
}
}
}
@Override @Override
public void exportGroupQrcode4Adviser(Map<String, Object> paramMap, Long adviserId) { public void exportGroupQrcode4Adviser(Map<String, Object> paramMap, Long adviserId) {
EXECUTOR_SINGLE_SERVICE.execute(() -> { EXECUTOR_SINGLE_SERVICE.execute(() -> {
......
...@@ -125,7 +125,9 @@ ...@@ -125,7 +125,9 @@
<pcloud-facade-labelcenter.version>2.1.0-RELEASE</pcloud-facade-labelcenter.version> <pcloud-facade-labelcenter.version>2.1.0-RELEASE</pcloud-facade-labelcenter.version>
<pcloud-facade-wechatgroup.version>2.1.0-RELEASE</pcloud-facade-wechatgroup.version> <pcloud-facade-wechatgroup.version>2.1.0-RELEASE</pcloud-facade-wechatgroup.version>
<pcloud-facade-promotion.version>2.1.0-RELEASE</pcloud-facade-promotion.version> <pcloud-facade-promotion.version>2.1.0-RELEASE</pcloud-facade-promotion.version>
<pcloud-facade-audioapp.version>2.1.0-RELEASE</pcloud-facade-audioapp.version>
<pcloud-facade-videolesson.version>2.1.0-RELEASE</pcloud-facade-videolesson.version>
<pcloud-facade-liveapp.version>2.1.0-RELEASE</pcloud-facade-liveapp.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment