Commit 8f1fc4d6 authored by unset's avatar unset

会员统计信息修改

parent 912f6ef8
......@@ -12,4 +12,8 @@ import lombok.Data;
@Data
public class MemberShareRecordDto extends PageParam {
Integer userId;
Integer type;
Integer level;
String startDate;
String endDate;
}
package com.github.wxiaoqi.security.admin.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @ClassName : MemberShareRecordVo
* @Description : 会员记录统计
* @Author : jiaoruizhen
* @Date: 2020-11-12 14:04
*/
@Data
public class MemberShareRecordVo {
private String date;
private String levelName;
private Integer level;
private Integer userNum;
private BigDecimal totalAmount;
}
......@@ -13,14 +13,18 @@ import com.github.wxiaoqi.security.admin.mapper.BaseUserMemberLevelMapper;
import com.github.wxiaoqi.security.admin.mapper.MemberShareRecordMapper;
import com.github.wxiaoqi.security.admin.util.DateUtils;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.MemberShareRecordVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.xxfc.platform.order.entity.OrderMemberDetail;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
......@@ -28,10 +32,7 @@ import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -53,9 +54,11 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
BaseUserMemberLevelMapper baseUserMemberLevelMapper;
@Autowired
AppUserDetailBiz appUserDetailBiz;
/**
* 根据订单号查询分成记录
* 每个订单有且只有一条记录
*
* @param no
* @return
*/
......@@ -67,6 +70,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 新增或者编辑会员分成记录
*
* @param memberShareRecord
*/
public void addUpdate(MemberShareRecord memberShareRecord) {
......@@ -94,6 +98,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 查看某一用户分成记录明细
*
* @return
*/
public ObjectRestResponse<List<MemberShareRecord>> getAllRecord(MemberShareRecordDto memberShareRecordDto) {
......@@ -104,6 +109,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 更新相同会员等级的分成信息
*
* @param memberShareRecord
*/
public void updateAllLevelInfo(MemberShareRecord memberShareRecord) {
......@@ -128,6 +134,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 获取同级别的所有分成记录
*
* @param level
* @return
*/
......@@ -139,6 +146,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 根据日期查询所有分成记录
*
* @param startDate
* @param endDate
* @return
......@@ -218,6 +226,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 接收会员订单支付成功后处理
*
* @param orderMemberDetail
*/
public void generateMemberShareQueue(OrderMemberDetail orderMemberDetail) {
......@@ -232,7 +241,10 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
if (orderMemberDetail.getMemberLevel().compareTo(baseUserMemberLevelList.get(0).getLevel() - 1) >= 0) {
//所有分成会员都需要新增一条记录
for (BaseUserMemberLevel baseUserMemberLevel : baseUserMemberLevelList) {
List<BaseUserMember> baseUserMemberList = baseUserMemberBiz.selectList(new BaseUserMember(){{setIsDel(0); setMemberLevel(baseUserMemberLevel.getLevel());}});
List<BaseUserMember> baseUserMemberList = baseUserMemberBiz.selectList(new BaseUserMember() {{
setIsDel(0);
setMemberLevel(baseUserMemberLevel.getLevel());
}});
if (baseUserMemberList != null && baseUserMemberList.size() > 0) {
List<Integer> userIds = baseUserMemberList.stream().map(BaseUserMember::getUserId).collect(Collectors.toList());
if (userIds != null && userIds.size() > 0) {
......@@ -265,11 +277,12 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
/**
* 会员分成导出信息
*
* @param httpServletResponse
* @param memberShareRecordDto
* @throws Exception
*/
public void exportRecordList(HttpServletResponse httpServletResponse, MemberShareRecordDto memberShareRecordDto)throws Exception {
public void exportRecordList(HttpServletResponse httpServletResponse, MemberShareRecordDto memberShareRecordDto) throws Exception {
AppUserVo appUserDetail = appUserDetailBiz.getUserInfoById(memberShareRecordDto.getUserId());
if (appUserDetail != null) {
......@@ -332,10 +345,181 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
httpServletResponse.setContentType("application/octet-stream;charset=utf-8");
httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("会员分成明细.xlsx", "utf-8"));
writer.flush(httpServletResponse.getOutputStream());
}catch (Exception ex) {
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
throw ex;
} finally {
if (writer != null) {
writer.close();
}
}
}
}
public ObjectRestResponse<List<MemberShareRecordVo>> getAllCountRecord(MemberShareRecordDto memberShareRecordDto) {
List<MemberShareRecordVo> memberShareRecordVoList = new ArrayList<>();
List<MemberShareRecord> list = selectListAll();
if (list == null || list.size() <= 0) {
return ObjectRestResponse.succ(memberShareRecordVoList);
}
//按日统计
if (memberShareRecordDto.getType() != null && memberShareRecordDto.getType() == 1) {
generateRecordData(list, memberShareRecordVoList, 1);
List<MemberShareRecordVo> result = memberShareRecordVoList;
if (memberShareRecordDto.getLevel() != null) {
result = memberShareRecordVoList.stream()
.filter((MemberShareRecordVo s) -> s.getLevel().equals(memberShareRecordDto.getLevel()))
.collect(Collectors.toList());
}
if (StringUtils.isNotBlank(memberShareRecordDto.getStartDate())) {
result = result.stream()
.filter((MemberShareRecordVo s) -> DateTime.parse(s.getDate(), DateTimeFormat.forPattern("yyyy-MM-dd")).compareTo(DateTime.parse(memberShareRecordDto.getStartDate(), DateTimeFormat.forPattern("yyyy-MM-dd"))) >= 0
&& DateTime.parse(s.getDate(), DateTimeFormat.forPattern("yyyy-MM-dd")).compareTo(DateTime.parse(memberShareRecordDto.getEndDate(), DateTimeFormat.forPattern("yyyy-MM-dd"))) <= 0)
.collect(Collectors.toList());
}
return ObjectRestResponse.succ(result);
}
//按月统计
if (memberShareRecordDto.getType() != null && memberShareRecordDto.getType() == 2) {
generateRecordData(list, memberShareRecordVoList, 2);
List<MemberShareRecordVo> result = memberShareRecordVoList;
if (memberShareRecordDto.getLevel() != null) {
result = memberShareRecordVoList.stream()
.filter((MemberShareRecordVo s) -> s.getLevel().equals(memberShareRecordDto.getLevel()))
.collect(Collectors.toList());
}
if (StringUtils.isNotBlank(memberShareRecordDto.getStartDate())) {
result = result.stream()
.filter((MemberShareRecordVo s) -> DateTime.parse(s.getDate(),DateTimeFormat.forPattern("yyyy-MM")).getMillis() >= (DateTime.parse(memberShareRecordDto.getStartDate().substring(0, memberShareRecordDto.getStartDate().lastIndexOf("-")), DateTimeFormat.forPattern("yyyy-MM"))).getMillis()
&& DateTime.parse(s.getDate(),DateTimeFormat.forPattern("yyyy-MM")).getMillis() <= (DateTime.parse(memberShareRecordDto.getEndDate().substring(0, memberShareRecordDto.getEndDate().lastIndexOf("-")), DateTimeFormat.forPattern("yyyy-MM"))).getMillis())
.collect(Collectors.toList());
}
return ObjectRestResponse.succ(result);
}
//按年统计
if (memberShareRecordDto.getType() != null && memberShareRecordDto.getType() == 3) {
generateRecordData(list, memberShareRecordVoList, 3);
List<MemberShareRecordVo> result = memberShareRecordVoList;
if (memberShareRecordDto.getLevel() != null) {
result = memberShareRecordVoList.stream()
.filter((MemberShareRecordVo s) -> s.getLevel().equals(memberShareRecordDto.getType()))
.collect(Collectors.toList());
}
if (StringUtils.isNotBlank(memberShareRecordDto.getStartDate())) {
result = result.stream()
.filter((MemberShareRecordVo s) -> DateTime.parse(s.getDate(),DateTimeFormat.forPattern("yyyy")).getMillis() >= (DateTime.parse(memberShareRecordDto.getStartDate().split("-")[0], DateTimeFormat.forPattern("yyyy"))).getMillis()
&& DateTime.parse(s.getDate(),DateTimeFormat.forPattern("yyyy")).getMillis() <= (DateTime.parse(memberShareRecordDto.getEndDate().split("-")[0], DateTimeFormat.forPattern("yyyy"))).getMillis())
.collect(Collectors.toList());
}
return ObjectRestResponse.succ(result);
}
return ObjectRestResponse.succ(memberShareRecordVoList);
}
private void generateRecordData(List<MemberShareRecord> list, List<MemberShareRecordVo> memberShareRecordVoList, Integer type) {
List<BaseUserMemberLevel> baseUserMemberLevelList = baseUserMemberLevelMapper.select(new BaseUserMemberLevel(){{setIsdel(0);}});
Map<Integer, List<BaseUserMemberLevel>> levelMap = baseUserMemberLevelList.stream().collect(Collectors.groupingBy(BaseUserMemberLevel::getLevel));
Map<Integer, List<MemberShareRecord>> map = list.stream().collect(Collectors.groupingBy(MemberShareRecord::getMemberLevel));
if (MapUtil.isNotEmpty(map)) {
for (Map.Entry<Integer, List<MemberShareRecord>> entry : map.entrySet()) {
MemberShareRecordVo memberShareRecordVo = new MemberShareRecordVo();
List<BaseUserMemberLevel> baseUserMemberLevel = levelMap.get(entry.getKey());
if (baseUserMemberLevel != null && baseUserMemberLevel.size() > 0) {
memberShareRecordVo.setLevelName(baseUserMemberLevel.get(0).getName());
}
List<MemberShareRecord> memberShareRecordList = entry.getValue();
memberShareRecordVo.setLevel(entry.getKey());
if (memberShareRecordList != null && memberShareRecordList.size() > 0) {
Map<String, List<MemberShareRecord>> memberMap = new HashMap<>();
if (type == 1) {
memberMap = memberShareRecordList.stream().collect(Collectors.groupingBy(o -> new DateTime(o.getPayTime()).toString("yyyy-MM-dd")));
}
if (type == 2) {
memberMap = memberShareRecordList.stream().collect(Collectors.groupingBy(o -> new DateTime(o.getPayTime()).toString("yyyy-MM")));
}
if (type == 3) {
memberMap = memberShareRecordList.stream().collect(Collectors.groupingBy(o -> new DateTime(o.getPayTime()).toString("yyyy")));
}
for (Map.Entry<String, List<MemberShareRecord>> entry1 : memberMap.entrySet()) {
memberShareRecordVo.setDate(entry1.getKey());
List<MemberShareRecord> memberShareRecords = entry1.getValue();
if (memberShareRecords != null && memberShareRecords.size() > 0) {
Set<String> set = new HashSet<>();
memberShareRecords.parallelStream().forEach(memberShareRecord -> {
if (StringUtils.isNotBlank(memberShareRecord.getMemberIds())) {
String[] arr = memberShareRecord.getMemberIds().split(",");
Set<String> idList =
new HashSet<>(Arrays.asList(arr));
Iterables.removeIf(idList, Predicates.equalTo(""));
set.addAll(idList);
}
});
BigDecimal totalAmount = memberShareRecords.stream().map(MemberShareRecord::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
memberShareRecordVo.setTotalAmount(totalAmount);
memberShareRecordVo.setUserNum(set.size());
} else {
memberShareRecordVo.setTotalAmount(BigDecimal.ZERO);
memberShareRecordVo.setUserNum(0);
}
}
}
memberShareRecordVoList.add(memberShareRecordVo);
}
}
}
/**
* 会员分成统计导出信息
*
* @param httpServletResponse
* @param memberShareRecordDto
* @throws Exception
*/
public void exportCountRecordList(HttpServletResponse httpServletResponse, MemberShareRecordDto memberShareRecordDto) throws Exception {
List<MemberShareRecordVo> memberShareRecordVoList = getAllCountRecord(memberShareRecordDto).getData();
if (memberShareRecordVoList != null) {
ExcelWriter writer = null;
try {
writer = ExcelUtil.getWriter(true);
//封装表头
writer.addHeaderAlias("date", "统计时间");
writer.addHeaderAlias("levelName", "会员等级");
writer.addHeaderAlias("userNum", "会员数量");
writer.addHeaderAlias("totalAmount", "总分红");
//处理数据
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (memberShareRecordVoList != null && memberShareRecordVoList.size() > 0) {
for (MemberShareRecordVo memberShareRecord : memberShareRecordVoList) {
Map<String, Object> map = new HashMap();
map.put("date", memberShareRecord.getDate());
map.put("levelName", memberShareRecord.getLevelName());
map.put("userNum", memberShareRecord.getUserNum());
map.put("totalAmount", memberShareRecord.getTotalAmount());
list.add(map);
}
}
if (list.size() == 0) {
Map<String, Object> map = new HashMap<String, Object>();
writer.addHeaderAlias("date", "统计时间");
writer.addHeaderAlias("levelName", "会员等级");
writer.addHeaderAlias("userNum", "会员数量");
writer.addHeaderAlias("totalAmount", "总分红");
map.put("date", "");
map.put("totalAmount", "");
map.put("userNum", "");
map.put("levelName", "");
list.add(map);
}
writer.write(list);
httpServletResponse.setContentType("application/octet-stream;charset=utf-8");
httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("会员分成明细.xlsx", "utf-8"));
writer.flush(httpServletResponse.getOutputStream());
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
throw ex;
}finally {
} finally {
if (writer != null) {
writer.close();
}
......@@ -345,4 +529,7 @@ public class MemberShareRecordBiz extends BaseBiz<MemberShareRecordMapper, Membe
public static void main(String[] args) {
System.out.println(DateTime.parse("2020-12-12".substring(0, "2020-11-12".lastIndexOf("-")),DateTimeFormat.forPattern("yyyy-MM")).getMillis() <= (DateTime.parse("2020-11", DateTimeFormat.forPattern("yyyy-MM"))).getMillis());
}
}
\ No newline at end of file
......@@ -46,4 +46,19 @@ public class MemberShareRecordController extends BaseController<MemberShareRecor
return ObjectRestResponse.succ();
}
@GetMapping(value = "getAllCountRecord")
public ObjectRestResponse getAllCountRecord(MemberShareRecordDto memberShareRecordDto) {
return baseBiz.getAllCountRecord(memberShareRecordDto);
}
@GetMapping(value = "exportCountRecordList")
public ObjectRestResponse exportCountRecordList(HttpServletResponse response, MemberShareRecordDto memberShareRecordDto) {
try {
baseBiz.exportCountRecordList(response, memberShareRecordDto);
} catch (Exception e) {
log.error("{}", e);
return ObjectRestResponse.createDefaultFail();
}
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
......@@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
......@@ -96,6 +97,7 @@ public class OrderMemberDetailBiz extends BaseBiz<OrderMemberDetailMapper,OrderM
baseOrder.setCrtUser(userDTO.getUsername());
baseOrder.setCrtName(userDTO.getName());
baseOrder.setVersion(1);
baseOrder.setCrtTime(new Date(baseOrder.getPayTime()));
baseOrderBiz.insertSelectiveRe(baseOrder);
OrderMemberDetail orderMemberDetail = new OrderMemberDetail();
orderMemberDetail.setOrderId(baseOrder.getId());
......
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