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;
* @data 2019/11/13 17:23
*/
public enum LevelEnum {
DIAMOND(3, "钻石"),
GOLD(2, "黄金"),
GENERAL(1, "普通");
DIAMOND(3, "钻石会员"),
GOLD(2, "黄金会员"),
GENERAL(1, "普通会员");
LevelEnum(Integer level, String desc) {
this.level = level;
......
......@@ -164,11 +164,6 @@ public interface UserFeign {
@RequestParam(value = "isSuccess") Boolean isSuccess,
@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
* @param parentCompanyId
......@@ -193,4 +188,11 @@ public interface UserFeign {
@GetMapping("/public/getUsersByUserIdList")
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
List<AppUserDetail> appUserDetails = mapper.selectAllWithNoProviinceCode();
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> {
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;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -378,4 +377,9 @@ public class AppUserController extends CommonBaseController{
AppUserVo appUserVo = userDetailBiz.findByCode(code);
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=
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>
<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>
\ 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.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