Commit 6e9e464f authored by libin's avatar libin

Merge branch 'member_statistics' into dev

# Conflicts:
#	ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/feign/UserFeign.java
parents 6dc5a1c3 132197a5
...@@ -15,9 +15,9 @@ import java.util.stream.Collectors; ...@@ -15,9 +15,9 @@ import java.util.stream.Collectors;
* @data 2019/11/13 17:23 * @data 2019/11/13 17:23
*/ */
public enum LevelEnum { public enum LevelEnum {
DIAMOND(3, "钻石"), DIAMOND(3, "钻石会员"),
GOLD(2, "黄金"), GOLD(2, "黄金会员"),
GENERAL(1, "普通"); GENERAL(1, "普通会员");
LevelEnum(Integer level, String desc) { LevelEnum(Integer level, String desc) {
this.level = level; this.level = level;
......
...@@ -92,7 +92,7 @@ public interface UserFeign { ...@@ -92,7 +92,7 @@ public interface UserFeign {
* @return * @return
*/ */
@GetMapping(value = "/public/getByUserIds") @GetMapping(value = "/public/getByUserIds")
ObjectRestResponse<List<AppUserVo>> getByUserIds(@RequestParam("ids")List<Integer> ids); ObjectRestResponse<List<AppUserVo>> getByUserIds(@RequestParam("ids")List<Integer> ids);
/** /**
* 购买会员 * 购买会员
...@@ -142,16 +142,16 @@ public interface UserFeign { ...@@ -142,16 +142,16 @@ public interface UserFeign {
* @return * @return
*/ */
@GetMapping("/public/getUsersByUserIds") @GetMapping("/public/getUsersByUserIds")
ObjectRestResponse<List<AppUserVo>> getUsersByUserIds(@RequestParam("ids") List<Integer> ids); ObjectRestResponse<List<AppUserVo>> getUsersByUserIds(@RequestParam("ids") List<Integer> ids);
@GetMapping(value = "/app/user/users") @GetMapping(value = "/app/user/users")
List<Integer> findAppUserIds(@RequestParam(value = "phone",required = false) String phone, List<Integer> findAppUserIds(@RequestParam(value = "phone",required = false) String phone,
@RequestParam(value = "leaderPhone",required = false) String leaderPhone, @RequestParam(value = "leaderPhone",required = false) String leaderPhone,
@RequestParam(value = "name",required = false) String name); @RequestParam(value = "name",required = false) String name);
@PostMapping(value = "/app/user/users/info") @PostMapping(value = "/app/user/users/info")
List<UserBo> findUserDetailByUserBo(@RequestBody(required = false) List<UserBo> userBos); List<UserBo> findUserDetailByUserBo(@RequestBody(required = false) List<UserBo> userBos);
@GetMapping("/member/user") @GetMapping("/member/user")
BaseUserMember findBaseUserMemberByUserId(@RequestParam(value = "userId") Integer userId); BaseUserMember findBaseUserMemberByUserId(@RequestParam(value = "userId") Integer userId);
...@@ -164,11 +164,6 @@ public interface UserFeign { ...@@ -164,11 +164,6 @@ public interface UserFeign {
@RequestParam(value = "isSuccess") Boolean isSuccess, @RequestParam(value = "isSuccess") Boolean isSuccess,
@RequestParam(value = "realReason",required = false) String realReason); @RequestParam(value = "realReason",required = false) String realReason);
@GetMapping("/app/user/collect/exist")
boolean isCollectionByTypeAndTypeId(@RequestParam("userId") Integer userId,
@RequestParam(value = "type") int type,
@RequestParam("id") Integer typId);
/** /**
* 通过公司id,获取员工的下级用户id * 通过公司id,获取员工的下级用户id
* @param parentCompanyId * @param parentCompanyId
...@@ -193,4 +188,11 @@ public interface UserFeign { ...@@ -193,4 +188,11 @@ public interface UserFeign {
@GetMapping("/public/getUsersByUserIdList") @GetMapping("/public/getUsersByUserIdList")
ObjectRestResponse<List<AppUserVo>> getByUserIdList(@RequestParam("userIds") List<Integer> userIds); ObjectRestResponse<List<AppUserVo>> getByUserIdList(@RequestParam("userIds") List<Integer> userIds);
@GetMapping("/app/user/collect/exist")
boolean isCollectionByTypeAndTypeId(@RequestParam("userId") Integer userId,
@RequestParam(value = "type") int type,
@RequestParam("id") Integer typId);
@GetMapping("/app/user/list_user_info")
List<UserBo> findUserDetailUserIds(@RequestParam(value = "userIds",required = false) List<Integer> userIds);
} }
...@@ -241,4 +241,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -241,4 +241,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
List<AppUserDetail> appUserDetails = mapper.selectAllWithNoProviinceCode(); List<AppUserDetail> appUserDetails = mapper.selectAllWithNoProviinceCode();
return CollectionUtils.isEmpty(appUserDetails)?Collections.EMPTY_LIST:appUserDetails; return CollectionUtils.isEmpty(appUserDetails)?Collections.EMPTY_LIST:appUserDetails;
} }
}
public List<UserBo> findUserDetailByUserIds(List<Integer> userIds) {
List<UserBo> userBoList = mapper.selectUserByUserIds(userIds);
return CollectionUtils.isEmpty(userBoList)?Collections.EMPTY_LIST:userBoList;
}
}
...@@ -41,4 +41,5 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> { ...@@ -41,4 +41,5 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
List<AppUserDetail> selectAllWithNoProviinceCode(); List<AppUserDetail> selectAllWithNoProviinceCode();
List<UserBo> selectUserByUserIds(@Param("userIds") List<Integer> userIds);
} }
\ No newline at end of file
...@@ -25,7 +25,6 @@ import io.swagger.annotations.ApiOperation; ...@@ -25,7 +25,6 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -378,4 +377,9 @@ public class AppUserController extends CommonBaseController{ ...@@ -378,4 +377,9 @@ public class AppUserController extends CommonBaseController{
AppUserVo appUserVo = userDetailBiz.findByCode(code); AppUserVo appUserVo = userDetailBiz.findByCode(code);
return ObjectRestResponse.succ(appUserVo); return ObjectRestResponse.succ(appUserVo);
} }
@GetMapping("/list_user_info")
public List<UserBo> findUserDetailByUserIds(@RequestParam(value = "userIds",required = false) List<Integer> userIds){
return userDetailBiz.findUserDetailByUserIds(userIds);
}
} }
...@@ -343,4 +343,16 @@ from `app_user_detail` as `aud` left join `app_user_login` as `aul` on aul.id= ...@@ -343,4 +343,16 @@ from `app_user_detail` as `aud` left join `app_user_login` as `aul` on aul.id=
resultType="com.github.wxiaoqi.security.admin.entity.AppUserDetail"> resultType="com.github.wxiaoqi.security.admin.entity.AppUserDetail">
select `id`,`crt_host` from `app_user_detail` where crt_host is not null and ( province_code = 0 or province_code is null) select `id`,`crt_host` from `app_user_detail` where crt_host is not null and ( province_code = 0 or province_code is null)
</select> </select>
<select id="selectUserByUserIds" resultType="com.github.wxiaoqi.security.admin.bo.UserBo">
select aud.userid as `userId`,case when length(aud.realname)>0 then aud.realname else aud.nickname end as `name`,aul.username as `phone` from `app_user_detail` as aud left join `app_user_login` as aul on aul.id=aud.userid
<where>
<if test="userIds != null and userIds.size() != 0">
userid in
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>
\ No newline at end of file
package com.xxfc.platform.order.contant.enumerate;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 12:48
*/
public enum MemberStatisticsBehaviorTypeEnum {
FIRST_TIME_BUY(0, "首次购买"),
RENEW(1, "续费"),
ACTIVATE(2, "激活"),
PAY(3, "付费(首次购买+续费)");
private int code;
private String desc;
MemberStatisticsBehaviorTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
package com.xxfc.platform.order.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 12:38
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "order_member_view")
@Entity
public class MemberStatistics {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "real_amount")
private BigDecimal realAmount;
@Column(name = "pay_time")
private Long payTime;
@Column(name = "order_no")
private String orderNo;
/**
* 0:首次购买 1:续费 2:激活
*/
@Column(name = "behavior_type")
private Integer behaviorType;
@Column(name = "member_level")
private Integer memberLevel;
@Column(name = "parent_id")
private Integer parentId;
/**
* 是否是第一时时间成为会员
*/
@Column(name = "is_first_time_member")
private Integer isFirstTimeMember;
}
package com.xxfc.platform.order.pojo.bo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 11:04
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberStatisticsBo implements Serializable {
private static final long serialVersionUID = 1L;
@JsonIgnore
private Integer userId;
private String name;
private String phone;
private BigDecimal realAmount;
private Long payTime;
private String orderNo;
/**
* 0:首次购买 1:续费 2:激活
*/
private Integer behaviorType;
@JsonIgnore
private Integer memberLevel;
private String memberName;
@JsonIgnore
private Integer parentId;
private String parentName;
private String parentPhone;
}
package com.xxfc.platform.order.pojo.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 11:21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberStatisticsPageBo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 会员订单数
*/
private long memberOrdersNum;
/**
* 新增会员人数
*/
private long newMembersNum;
/**
* 激活人数
*/
private long activateMembersNum;
/**
* 会员费
*/
private BigDecimal memberAmount = BigDecimal.ZERO;
/**
* 普通会员订单数
*/
private long commonMemberOrdersNum;
/**
* 普通会员订单金额
*/
private BigDecimal commonMemberOrderAmount = BigDecimal.ZERO;
/**
* 黄金会员订单数
*/
private long goldMemberOrdersNum;
/**
* 黄金会员订单金额
*/
private BigDecimal goldMemberOrderAmount = BigDecimal.ZERO;
/**
* 钻石会员订单数
*/
private long diamondMemberOrdersNum;
/**
* 钻石会员订单金额
*/
private BigDecimal diamondMemberOrderAmount = BigDecimal.ZERO;
/**
* 会员统计
*/
private List<MemberStatisticsBo> memberStatistics;
private Long totalCount;
private Integer totalPage;
private Integer pageNum;
private Integer pageSize;
public List<MemberStatisticsBo> getMemberStatistics() {
return CollectionUtils.isEmpty(memberStatistics)? Collections.EMPTY_LIST:memberStatistics;
}
}
package com.xxfc.platform.order.pojo.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 12:31
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberStatisticsFindDTO extends PageParam {
private Long startTime;
private Long endTime;
private Integer behaviorType;
private Boolean isExport;
}
package com.xxfc.platform.order.biz;
import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.enumconstant.LevelEnum;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.contant.enumerate.MemberStatisticsBehaviorTypeEnum;
import com.xxfc.platform.order.entity.MemberStatistics;
import com.xxfc.platform.order.mapper.MemberStatisticsMapper;
import com.xxfc.platform.order.pojo.bo.MemberStatisticsBo;
import com.xxfc.platform.order.pojo.bo.MemberStatisticsPageBo;
import com.xxfc.platform.order.pojo.dto.MemberStatisticsFindDTO;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 12:35
*/
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MemberStatisticsBiz extends BaseBiz<MemberStatisticsMapper, MemberStatistics> {
private final UserFeign userFeign;
public MemberStatisticsPageBo findMemberStatisticsWithPage(MemberStatisticsFindDTO memberStatisticsFindDTO) {
Example example = getMemberStatisticsExample(memberStatisticsFindDTO);
PageDataVO<MemberStatistics> dataVO = PageDataVO.pageInfo(memberStatisticsFindDTO.getPage(), memberStatisticsFindDTO.getLimit(), () -> mapper.selectByExample(example));
List<MemberStatistics> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)) {
return new MemberStatisticsPageBo();
}
MemberStatisticsPageBo memberStatisticsPageBo = createMemberStatistics(memberStatisticsFindDTO);
memberStatisticsPageBo = wrapToMemberStatisticsPageBo(data,memberStatisticsPageBo);
memberStatisticsPageBo.setPageNum(dataVO.getPageNum());
memberStatisticsPageBo.setPageSize(dataVO.getPageSize());
memberStatisticsPageBo.setTotalCount(dataVO.getTotalCount());
memberStatisticsPageBo.setTotalPage(dataVO.getTotalPage());
return memberStatisticsPageBo;
}
private Example getMemberStatisticsExample(MemberStatisticsFindDTO memberStatisticsFindDTO) {
Example example = new Example(MemberStatistics.class);
Example.Criteria criteria = example.createCriteria();
if (Objects.nonNull(memberStatisticsFindDTO.getBehaviorType())) {
if (memberStatisticsFindDTO.getBehaviorType() == MemberStatisticsBehaviorTypeEnum.PAY.getCode()) {
criteria.andIn("behaviorType", Arrays.asList(MemberStatisticsBehaviorTypeEnum.FIRST_TIME_BUY.getCode(), MemberStatisticsBehaviorTypeEnum.RENEW.getCode()));
} else {
criteria.andEqualTo("behaviorType", memberStatisticsFindDTO.getBehaviorType());
}
}
if (Objects.nonNull(memberStatisticsFindDTO.getStartTime()) && Objects.nonNull(memberStatisticsFindDTO.getEndTime())) {
criteria.andBetween("payTime", memberStatisticsFindDTO.getStartTime(), memberStatisticsFindDTO.getEndTime());
}
if (Objects.nonNull(memberStatisticsFindDTO.getStartTime()) && Objects.isNull(memberStatisticsFindDTO.getEndTime())) {
criteria.andGreaterThanOrEqualTo("payTime", memberStatisticsFindDTO.getStartTime());
}
if (Objects.nonNull(memberStatisticsFindDTO.getEndTime()) && Objects.isNull(memberStatisticsFindDTO.getStartTime())) {
criteria.andLessThanOrEqualTo("payTime", memberStatisticsFindDTO.getEndTime());
}
return example;
}
public MemberStatisticsPageBo wrapToMemberStatisticsPageBo(List<MemberStatistics> memberStatistics,MemberStatisticsPageBo memberStatisticsPageBo) {
if (CollectionUtils.isEmpty(memberStatistics)) {
return memberStatisticsPageBo;
}
//用户id
List<Integer> userIds = memberStatistics.stream().map(member ->
Arrays.asList(member.getUserId(), member.getParentId())
).flatMap(List::stream).filter(Objects::nonNull).distinct().collect(Collectors.toList());
List<UserBo> userBos = userFeign.findUserDetailUserIds(userIds);
Map<Integer, UserBo> userBoMap = userBos.stream().collect(Collectors.toMap(UserBo::getUserId, Function.identity()));
List<MemberStatisticsBo> memberStatisticsBos = new ArrayList<>();
MemberStatisticsBo memberStatisticsBo;
UserBo userBo = new UserBo();
boolean isNullOrEmpty = userBoMap == null || userBoMap.isEmpty();
for (MemberStatistics memberStatistic : memberStatistics) {
memberStatisticsBo = new MemberStatisticsBo();
BeanUtils.copyProperties(memberStatistic, memberStatisticsBo);
UserBo bo = isNullOrEmpty ? userBo : userBoMap.get(memberStatistic.getUserId()) == null ? userBo : userBoMap.get(memberStatistic.getUserId());
memberStatisticsBo.setName(bo.getName());
memberStatisticsBo.setPhone(bo.getPhone());
UserBo leaderUserBo = isNullOrEmpty ? userBo : userBoMap.get(memberStatistic.getParentId()) == null ? userBo : userBoMap.get(memberStatistic.getParentId());
memberStatisticsBo.setParentName(leaderUserBo.getName());
memberStatisticsBo.setParentPhone(leaderUserBo.getPhone());
memberStatisticsBo.setMemberName(LevelEnum.getLevelEnumByLevel(memberStatistic.getMemberLevel()).getDesc());
memberStatisticsBos.add(memberStatisticsBo);
}
memberStatisticsPageBo.setMemberStatistics(memberStatisticsBos);
return memberStatisticsPageBo;
}
public MemberStatisticsPageBo createMemberStatistics(MemberStatisticsFindDTO memberStatisticsFindDTO) {
MemberStatisticsPageBo memberStatisticsPageBo = new MemberStatisticsPageBo();
boolean isStatistics = memberStatisticsFindDTO.getPage() != null && (memberStatisticsFindDTO.getPage() == 1 || memberStatisticsFindDTO.getIsExport());
if (isStatistics) {
Example memberStatisticsExample = getMemberStatisticsExample(memberStatisticsFindDTO);
List<MemberStatistics> memberStatistics = mapper.selectByExample(memberStatisticsExample);
if (CollectionUtils.isEmpty(memberStatistics)) {
return memberStatisticsPageBo;
}
Supplier<Stream<MemberStatistics>> memberStatisticsSupplier = () -> memberStatistics.stream();
Map<Integer, Long> memberBehaviorMap = memberStatisticsSupplier.get().collect(Collectors.groupingBy(MemberStatistics::getBehaviorType, Collectors.counting()));
//激活人数
long activateNum = memberBehaviorMap.get(MemberStatisticsBehaviorTypeEnum.ACTIVATE.getCode()) == null ? 0 : memberBehaviorMap.get(MemberStatisticsBehaviorTypeEnum.ACTIVATE.getCode());
memberStatisticsPageBo.setActivateMembersNum(activateNum);
//会员订单数
long firstBuyNum = memberBehaviorMap.get(MemberStatisticsBehaviorTypeEnum.FIRST_TIME_BUY.getCode()) == null ? 0 : memberBehaviorMap.get(MemberStatisticsBehaviorTypeEnum.FIRST_TIME_BUY.getCode());
long renewNum = memberBehaviorMap.get(MemberStatisticsBehaviorTypeEnum.RENEW.getCode()) == null ? 0 : memberBehaviorMap.get(MemberStatisticsBehaviorTypeEnum.RENEW.getCode());
long orderNums = firstBuyNum + renewNum;
memberStatisticsPageBo.setMemberOrdersNum(orderNums);
//新增会员人数
long newMemberNum = memberStatisticsSupplier.get().filter(member -> Objects.equals(member.getIsFirstTimeMember(), 1)).count();
memberStatisticsPageBo.setNewMembersNum(newMemberNum);
//会员等级分类
Map<Integer, List<MemberStatistics>> memberLevelStatisticsMap = memberStatisticsSupplier.get()
.filter(member -> member.getBehaviorType() != MemberStatisticsBehaviorTypeEnum.ACTIVATE.getCode())
.collect(Collectors.groupingBy(MemberStatistics::getMemberLevel, Collectors.toList()));
if (memberLevelStatisticsMap == null || memberLevelStatisticsMap.isEmpty()) {
return memberStatisticsPageBo;
}
memberLevelStatisticsMap.forEach((K, V) -> {
LevelEnum levelEnum = LevelEnum.getLevelEnumByLevel(K);
wrapMemberStatisticsPageBo(levelEnum, V, memberStatisticsPageBo);
});
//会员订单金额
BigDecimal totalMemberAmount = memberStatisticsPageBo.getCommonMemberOrderAmount()
.add(memberStatisticsPageBo.getGoldMemberOrderAmount())
.add(memberStatisticsPageBo.getDiamondMemberOrderAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
memberStatisticsPageBo.setMemberAmount(totalMemberAmount);
}
return memberStatisticsPageBo;
}
private void wrapMemberStatisticsPageBo(LevelEnum levelEnum, List<MemberStatistics> memberStatistics, MemberStatisticsPageBo memberStatisticsPageBo) {
int orderNum = memberStatistics.size();
BigDecimal orderAmount = memberStatistics.stream().map(MemberStatistics::getRealAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
switch (levelEnum) {
case GENERAL:
memberStatisticsPageBo.setCommonMemberOrdersNum(orderNum);
memberStatisticsPageBo.setCommonMemberOrderAmount(orderAmount);
break;
case GOLD:
memberStatisticsPageBo.setGoldMemberOrdersNum(orderNum);
memberStatisticsPageBo.setGoldMemberOrderAmount(orderAmount);
break;
case DIAMOND:
memberStatisticsPageBo.setDiamondMemberOrdersNum(orderNum);
memberStatisticsPageBo.setDiamondMemberOrderAmount(orderAmount);
break;
default:
break;
}
}
}
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.MemberStatistics;
import tk.mybatis.mapper.common.Mapper;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 12:36
*/
public interface MemberStatisticsMapper extends Mapper<MemberStatistics> {
}
package com.xxfc.platform.order.rest.background;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.biz.MemberStatisticsBiz;
import com.xxfc.platform.order.pojo.bo.MemberStatisticsPageBo;
import com.xxfc.platform.order.pojo.dto.MemberStatisticsFindDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author libin
* @version 1.0
* @description
* @data 2020/1/6 12:34
*/
@Controller
@RequestMapping("/admin/member/statistics")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MemberStatisticsAdminController {
private final MemberStatisticsBiz memberStatisticsBiz;
@PostMapping("/page")
@ResponseBody
public ObjectRestResponse<MemberStatisticsPageBo> findMemberStatisticsWithPage(@RequestBody MemberStatisticsFindDTO memberStatisticsFindDTO){
MemberStatisticsPageBo memberStatisticsPageBo = memberStatisticsBiz.findMemberStatisticsWithPage(memberStatisticsFindDTO);
return ObjectRestResponse.succ(memberStatisticsPageBo);
}
}
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