Commit 912438e7 authored by jiaorz's avatar jiaorz

Merge remote-tracking branch 'origin/master'

parents 2ad1b101 28e83adb
package com.github.wxiaoqi.security.admin.bo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/30 17:42
*/
@Data
public class UserBo implements Serializable {
private static final long serialVersionUID = 1L;
@JSONField(serialize = false)
private String orderNo;
private Integer userId;
private String phone;
private String name;
private String leaderName;
private String leaderPhone;
private Integer facilitateId;
private String facilitateName;
}
package com.github.wxiaoqi.security.admin.feign; package com.github.wxiaoqi.security.admin.feign;
import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
...@@ -129,4 +130,12 @@ public interface UserFeign { ...@@ -129,4 +130,12 @@ public interface UserFeign {
@GetMapping("/app/user/finduserIdsByphones") @GetMapping("/app/user/finduserIdsByphones")
Map<String, Integer> findAppusersByUserNames(@RequestParam(value = "phones") List<String> phones); Map<String, Integer> findAppusersByUserNames(@RequestParam(value = "phones") List<String> phones);
@GetMapping(value = "/app/user/users")
List<Integer> findAppUserIds(@RequestParam(value = "phone",required = false) String phone,
@RequestParam(value = "leaderPhone",required = false) String leaderPhone,
@RequestParam(value = "name",required = false) String name);
@PostMapping(value = "/app/user/users/info")
List<UserBo> findUserDetailByUserBo(@RequestBody(required = false) List<UserBo> userBos);
} }
...@@ -171,4 +171,19 @@ public class AppUserManageVo { ...@@ -171,4 +171,19 @@ public class AppUserManageVo {
* 身份信息 * 身份信息
*/ */
private String positionName; private String positionName;
/**
* 上级名称
*/
private String nameOfSuperior;
/**
* 上级id
*/
private Integer parentId;
/**
* 上级手机号
*/
private String superiorMobileNumber;
} }
...@@ -4,17 +4,22 @@ import com.ace.cache.annotation.Cache; ...@@ -4,17 +4,22 @@ import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear; import com.ace.cache.annotation.CacheClear;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.dto.AccountBindDTO; import com.github.wxiaoqi.security.admin.dto.AccountBindDTO;
import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import com.github.wxiaoqi.security.admin.mapper.AppUserLoginMapper; import com.github.wxiaoqi.security.admin.mapper.AppUserLoginMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant; import com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant;
import com.github.wxiaoqi.security.common.constant.UserConstant; import com.github.wxiaoqi.security.common.constant.UserConstant;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.im.utils.StringUtil;
import com.xxfc.platform.universal.entity.IdInformation; import com.xxfc.platform.universal.entity.IdInformation;
import com.xxfc.platform.universal.feign.MQSenderFeign; import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -24,9 +29,7 @@ import tk.mybatis.mapper.entity.Example; ...@@ -24,9 +29,7 @@ import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.time.Instant; import java.time.Instant;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.function.Function; import java.util.function.Function;
...@@ -57,6 +60,9 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { ...@@ -57,6 +60,9 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
@Autowired @Autowired
private AppUserAlipayBiz appUserAlipayBiz; private AppUserAlipayBiz appUserAlipayBiz;
@Autowired
private AppUserRelationBiz appUserRelationBiz;
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
@Override @Override
public void insertSelective(AppUserLogin entity) { public void insertSelective(AppUserLogin entity) {
...@@ -325,7 +331,7 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { ...@@ -325,7 +331,7 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
public List<AppUserLogin> getUserByUsernameAndRealName(String username, String realName) { public List<AppUserLogin> getUserByUsernameAndRealName(String username, String realName) {
return mapper.getUserByUsernameAndRealName(username, realName); return mapper.getUserByUsernameAndRealName(username,realName);
} }
...@@ -397,4 +403,67 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { ...@@ -397,4 +403,67 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
appUserLogin.setUpdatetime(Instant.now().getEpochSecond()); appUserLogin.setUpdatetime(Instant.now().getEpochSecond());
mapper.updateByPrimaryKeySelective(appUserLogin); mapper.updateByPrimaryKeySelective(appUserLogin);
} }
public List<Integer> findAppuser(String phone, String leaderPhone, String name) {
List<Integer> memberIds = null;
//1.根据leader手机号查询userid
boolean isNoNullLeaderPhone = StringUtils.isNotEmpty(leaderPhone) && leaderPhone.trim().length()>0;
if (isNoNullLeaderPhone) {
List<AppUserLogin> appUserLogins = mapper.selectbyPhones(Arrays.asList(leaderPhone));
Integer leaderId = null;
if (CollectionUtils.isEmpty(appUserLogins)) {
return Collections.EMPTY_LIST;
}
leaderId = appUserLogins.get(0).getId();
//2.根据leader userId查询下级 userid
if (Objects.nonNull(leaderId)) {
List<AppUserRelation> appUserRelationList = appUserRelationBiz.findMemberPageByLeaderId(leaderId);
if(CollectionUtils.isEmpty(appUserRelationList)){
return Collections.EMPTY_LIST;
}
memberIds = appUserRelationList.stream().map(AppUserRelation::getUserId).collect(Collectors.toList());
}
}
List<Integer> userIds = mapper.findAppUser(phone, name, memberIds);
return userIds==null?Collections.EMPTY_LIST:userIds;
}
public List<UserBo> findUserDetailInfo(List<UserBo> userBos) {
Map<String, Integer> userIdAndFacilitateIdMap = userBos.stream().filter(x->Objects.nonNull(x.getFacilitateId())).collect(Collectors.toMap(UserBo::getOrderNo, UserBo::getFacilitateId));
List<Integer> userIdList = userBos.stream().map(UserBo::getUserId).distinct().collect(Collectors.toList());
//查询上级人
List<AppUserRelation> appUserRelationList = appUserRelationBiz.findLeaderByUserIds(userIdList);
Map<Integer, Integer> memberIdAndParentMap = appUserRelationList.stream().collect(Collectors.toMap(AppUserRelation::getUserId, AppUserRelation::getParentId));
List<Integer> uids = new ArrayList<>();
uids.addAll(userIdAndFacilitateIdMap==null?Collections.EMPTY_LIST:userIdList);
uids.addAll(userIdAndFacilitateIdMap==null?Collections.EMPTY_LIST:userIdAndFacilitateIdMap.values());
uids.addAll(memberIdAndParentMap==null?Collections.EMPTY_LIST:memberIdAndParentMap.values());
List<UserBo> userBoList = mapper.selectByUserIds(uids);
Map<Integer, UserBo> userMap = userBoList==null?Collections.EMPTY_MAP:userBoList.stream().collect(Collectors.toMap(UserBo::getUserId, Function.identity()));
if (userMap.isEmpty()){
return Collections.EMPTY_LIST;
}
for (UserBo userBo : userBos) {
UserBo bo = userMap.get(userBo.getUserId());
if (Objects.nonNull(bo)) {
userBo.setPhone(bo.getPhone());
userBo.setName(bo.getName());
}
Integer leaderId = memberIdAndParentMap.get(userBo.getUserId());
UserBo leader = userMap.get(leaderId);
if (Objects.nonNull(leader)) {
userBo.setLeaderName(leader.getName());
userBo.setLeaderPhone(leader.getPhone());
}
UserBo facilitate = userMap.get(userBo.getFacilitateId());
if (Objects.nonNull(facilitate)) {
userBo.setFacilitateName(facilitate.getName());
}
}
return userBos;
}
} }
...@@ -335,7 +335,9 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -335,7 +335,9 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
} }
public List<AppUserRelation> findLeaderByUserIds(List<Integer> userIds) {
List<AppUserRelation> appUserRelationList = mapper.selectByUserIds(userIds);
return appUserRelationList==null?Collections.EMPTY_LIST:appUserRelationList;
} }
}
package com.github.wxiaoqi.security.admin.mapper; package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserManage; import com.github.wxiaoqi.security.admin.entity.AppUserManage;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -31,4 +32,8 @@ public interface AppUserLoginMapper extends Mapper<AppUserLogin>, SelectByIdList ...@@ -31,4 +32,8 @@ public interface AppUserLoginMapper extends Mapper<AppUserLogin>, SelectByIdList
List<AppUserLogin> getUserByUsernameAndRealName(@Param("username") String username, @Param("realName")String realName); List<AppUserLogin> getUserByUsernameAndRealName(@Param("username") String username, @Param("realName")String realName);
List<Integer> findAppUser(@Param("phone") String phone,@Param("name") String name,@Param("memberIds") List<Integer> memberIds);
List<UserBo> selectByUserIds(@Param("userIds") List<Integer> uids);
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; ...@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 用户关系表 * 用户关系表
...@@ -20,4 +21,6 @@ public interface AppUserRelationMapper extends Mapper<AppUserRelation> { ...@@ -20,4 +21,6 @@ public interface AppUserRelationMapper extends Mapper<AppUserRelation> {
//获取有效的下级 //获取有效的下级
public int countByParentId(@Param("parentId")Integer parentId,@Param("bindTime")Long bindTime); public int countByParentId(@Param("parentId")Integer parentId,@Param("bindTime")Long bindTime);
List<AppUserRelation> selectByUserIds(@Param("userIds") List<Integer> userIds);
} }
package com.github.wxiaoqi.security.admin.rest; package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.*; import com.github.wxiaoqi.security.admin.biz.*;
import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.dto.AccountBindDTO; import com.github.wxiaoqi.security.admin.dto.AccountBindDTO;
import com.github.wxiaoqi.security.admin.entity.*; import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
...@@ -23,8 +24,6 @@ import com.xxfc.platform.order.feign.OrderFeign; ...@@ -23,8 +24,6 @@ import com.xxfc.platform.order.feign.OrderFeign;
import io.swagger.annotations.ApiOperation; 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.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
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.*;
...@@ -72,9 +71,6 @@ public class AppUserController extends CommonBaseController{ ...@@ -72,9 +71,6 @@ public class AppUserController extends CommonBaseController{
@Autowired @Autowired
private OrderFeign orderFeign; private OrderFeign orderFeign;
@Autowired
private AppUserAlipayBiz appUserAlipayBiz;
@GetMapping("page") @GetMapping("page")
...@@ -160,6 +156,7 @@ public class AppUserController extends CommonBaseController{ ...@@ -160,6 +156,7 @@ public class AppUserController extends CommonBaseController{
String icon=memberLevel.getIcon(); String icon=memberLevel.getIcon();
userDTO.setIcon(icon); userDTO.setIcon(icon);
userDTO.setBigIcon(memberLevel.getBigIcon()); userDTO.setBigIcon(memberLevel.getBigIcon());
userDTO.setItemImg(memberLevel.getItemImg());
} }
} }
} }
...@@ -167,14 +164,7 @@ public class AppUserController extends CommonBaseController{ ...@@ -167,14 +164,7 @@ public class AppUserController extends CommonBaseController{
if (userPosition!=null&&userPosition.getLevel()>0){ if (userPosition!=null&&userPosition.getLevel()>0){
userDTO.setPositionName(userPosition.getName()); userDTO.setPositionName(userPosition.getName());
} }
List<AppUserAlipay> appUserAlipays = appUserAlipayBiz.getByUserId(request);
long count = appUserAlipays.stream().filter(appUserAlipay -> appUserAlipay.getType() == 1).count();
userDTO.setIsBindAliPay(count>0);
userDTO.setId(id); userDTO.setId(id);
userDTO.setAliPayNickName(userDTO.getIsBindAliPay()?appUserAlipays.get(0).getNickname():"");
AppUserLogin appUserLogin = appUserLoginBiz.selectById(userid);
userDTO.setIsBindWx(StringUtils.isNotEmpty(appUserLogin.getWxOpenid()));
userDTO.setIsBindQQ(StringUtils.isNotEmpty(appUserLogin.getOpenid()));
return ObjectRestResponse.succ(userDTO); return ObjectRestResponse.succ(userDTO);
} }
...@@ -212,9 +202,10 @@ public class AppUserController extends CommonBaseController{ ...@@ -212,9 +202,10 @@ public class AppUserController extends CommonBaseController{
* @throws Exception * @throws Exception
*/ */
@PostMapping("/edit") @PostMapping("/edit")
public ObjectRestResponse edit(@RequestBody AppUserVo userVo,HttpServletRequest request)throws Exception { public ObjectRestResponse edit(@RequestBody AppUserVo userVo)throws Exception {
String id = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)).getId(); if(userVo==null||userVo.getId()==null){
userVo.setUserid(Integer.valueOf(id)); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
}
userDetailBiz.updUuserInfoById(userVo); userDetailBiz.updUuserInfoById(userVo);
Integer userid=userVo.getUserid(); Integer userid=userVo.getUserid();
if (userid!=null){ if (userid!=null){
...@@ -224,13 +215,8 @@ public class AppUserController extends CommonBaseController{ ...@@ -224,13 +215,8 @@ public class AppUserController extends CommonBaseController{
appUserLogin.setOpenid(userVo.getOpenid()); appUserLogin.setOpenid(userVo.getOpenid());
appUserLogin.setId(userid); appUserLogin.setId(userid);
appUserLogin.setUsername(userVo.getUsername()); appUserLogin.setUsername(userVo.getUsername());
appUserLoginBiz.updateAppuserLogin(appUserLogin); appUserLoginBiz.bindOpenid(appUserLogin);
//支付宝绑定
if (StringUtils.isNotEmpty(userVo.getAliCode()) && userVo.getAliCode().trim().length()>0){
appUserAlipayBiz.getUserInfo(userVo.getAliCode(),request);
}
} }
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
...@@ -339,7 +325,7 @@ public class AppUserController extends CommonBaseController{ ...@@ -339,7 +325,7 @@ public class AppUserController extends CommonBaseController{
} }
@PostMapping("/bind") @PostMapping("/bind")
private ObjectRestResponse accountBinding(@RequestBody AccountBindDTO accountBindDTO,HttpServletRequest request){ private ObjectRestResponse accountBinding(@RequestBody AccountBindDTO accountBindDTO, HttpServletRequest request){
try { try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)); IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
return appUserLoginBiz.bindAccount(accountBindDTO, Integer.valueOf(infoFromToken.getId()), request); return appUserLoginBiz.bindAccount(accountBindDTO, Integer.valueOf(infoFromToken.getId()), request);
...@@ -347,4 +333,20 @@ public class AppUserController extends CommonBaseController{ ...@@ -347,4 +333,20 @@ public class AppUserController extends CommonBaseController{
throw new BaseException(ex); throw new BaseException(ex);
} }
} }
@GetMapping("/users")
List<Integer> findAppUserIds(@RequestParam(value = "phone", required = false) String phone,
@RequestParam(value = "leaderPhone", required = false) String leaderPhone,
@RequestParam(value = "name", required = false) String name) {
return appUserLoginBiz.findAppuser(phone, leaderPhone, name);
}
@PostMapping("/users/info")
List<UserBo> findUserDetailByUserBo(@RequestBody(required = false) List<UserBo> userBos) {
return appUserLoginBiz.findUserDetailInfo(userBos);
}
} }
...@@ -82,7 +82,10 @@ ...@@ -82,7 +82,10 @@
m.recent_recharge as recentRecharge, m.recent_recharge as recentRecharge,
m.name as memberName, m.name as memberName,
ul.username as inviter, ul.username as inviter,
aup.name as `positionName` aup.name as `positionName`,
p.nameOfSuperior,
p.username AS superiorMobileNumber,
p.parent_id as parentId
from from
app_user_login l app_user_login l
inner join inner join
...@@ -123,6 +126,23 @@ ...@@ -123,6 +126,23 @@
left join left join
`app_user_position` as aup `app_user_position` as aup
on aup.id = d.position_id on aup.id = d.position_id
left join (
SELECT
r.user_id,
r.parent_id,
l.username,
IFNULL(d.realname,d.nickname) as nameOfSuperior
FROM
app_user_relation r
LEFT JOIN app_user_login l ON r.parent_id = l.id
LEFT JOIN app_user_detail d ON l.id = d.userid
WHERE
l.isdel = 0
AND
r.is_del = 0
) p
on
l.id=p.user_id
where l.isdel = 0 where l.isdel = 0
<if test="mobile !=null and mobile !='' "> <if test="mobile !=null and mobile !='' ">
and l.username like CONCAT('%',#{mobile},'%') and l.username like CONCAT('%',#{mobile},'%')
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserLoginMapper"> <mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserLoginMapper">
<select id="selectbyPhones" resultType="com.github.wxiaoqi.security.admin.entity.AppUserLogin"> <select id="selectbyPhones" resultType="com.github.wxiaoqi.security.admin.entity.AppUserLogin">
select `id`,`username` from `app_user_login` where `username` in select `id`,`username` from `app_user_login` where `isdel`=0 and `username` in
<foreach collection="phones" item="phone" open="(" close=")" separator=","> <foreach collection="phones" item="phone" open="(" close=")" separator=",">
#{phone} #{phone}
</foreach> </foreach>
...@@ -27,4 +27,32 @@ ...@@ -27,4 +27,32 @@
and d.realname like concat('%',#{realName},'%') and d.realname like concat('%',#{realName},'%')
</if> </if>
</select> </select>
<select id="findAppUser" resultType="integer">
select aul.`id` from (select `id` from `app_user_login` where `isdel`=0
<if test="phone!=null and phone!=''">
and `username`=#{phone}
</if>
<if test="memberIds!=null and memberIds.size()>0">
and `id` IN
<foreach collection="memberIds" item="userId" separator="," open="(" close=")">
#{userId}
</foreach>
</if>
) AS `aul`
INNER JOIN
`app_user_detail` AS `aud` ON aud.userid=aul.id
<if test="name!=null and name!=''">
and ( aud.realname like CONCAT('%',#{name},'%') OR aud.nickname like CONCAT('%',#{name},'%'))
</if>
</select>
<select id="selectByUserIds" resultType="com.github.wxiaoqi.security.admin.bo.UserBo">
select aul.`id` AS `userId`,aul.username AS `phone`,IFNULL(aud.realname,aud.nickname) AS `name` from ( select `id`,`username` from `app_user_login` where `isdel`=0 and `id` IN
<foreach collection="userIds" item="uid" separator="," open="(" close=")">
#{uid}
</foreach>) AS `aul`
INNER JOIN
`app_user_detail` AS `aud` ON aud.userid=aul.id
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -14,4 +14,11 @@ ...@@ -14,4 +14,11 @@
and (is_forever=1 or bind_time>#{bindTime}) and (is_forever=1 or bind_time>#{bindTime})
</if> </if>
</select> </select>
<select id="selectByUserIds" resultType="com.github.wxiaoqi.security.admin.entity.AppUserRelation">
select `user_id`,`parent_id` from `app_user_relation` where `is_del`=0 and `user_id` IN
<foreach collection="userIds" item="userId" separator="," open="(" close=")">
#{userId}
</foreach>
</select>
</mapper> </mapper>
\ No newline at end of file
package com.xxfc.platform.order.pojo.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/30 15:48
*/
@Data
public class MemberOrderBo {
private Integer id;
private String orderNo;
private Date creatTime;
private Integer status;
private String name;
private BigDecimal goodsAmount;
private Integer userId;
private String userName;
private String phone;
private String leaderName;
private String leaderPhone;
private Integer memberLevel;
/**
* 促成人
*/
@JSONField(serialize = false)
private Integer facilitateId;
private String facilitateName;
private String facilitatePhone;
/**
* 订单金额
*/
private BigDecimal orderAmount;
/**
* 优惠金额
*/
private BigDecimal couponAmount;
private BigDecimal realAmount;
private Long payTime;
private Integer hasPay;
private String desc;
}
package com.xxfc.platform.order.pojo.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/30 14:48
*/
@Data
public class MemberOrderFindDTO extends PageParam {
private String orderNo;
private String name;
private String phone;
private Integer state;
private Integer level;
/**
* 下单的开始时间
*/
private Date startOrderTime;
private Date endOrderTime;
/**
* 支付的开始时间
*/
private Long startPayTime;
private Long endPayTime;
private String leaderPhone;
/**
* 促成人的手机号
*/
private String facilitatePhone;
private Boolean isExport;
private List<Integer> userIds;
private Boolean isPay;
private String levelName;
}
package com.xxfc.platform.order.pojo.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/30 14:48
*/
@Data
public class MemberOrderStatisticsBo {
private Integer orderNum;
private BigDecimal totalAmount;
/**
* 钻石
*/
private Integer diamondOrderNum;
private BigDecimal totalDiamondAmount;
/**
* 黄金
*/
private Integer goldOrderNum;
private BigDecimal totalGoldAmount;
/**
* 普通
*/
private Integer generalOrderNum;
private BigDecimal totalGeneralAmount;
}
package com.xxfc.platform.order.pojo.vo;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderStatisticsBo;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/30 15:58
*/
@Data
public class MemberOrderPageVo {
private MemberOrderStatisticsBo memberOrderStatisticsBo;
private PageDataVO<MemberOrderBo> memberOrderPage;
}
...@@ -16,6 +16,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException; ...@@ -16,6 +16,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query; import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz; import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
...@@ -26,6 +27,8 @@ import com.xxfc.platform.order.mapper.BaseOrderMapper; ...@@ -26,6 +27,8 @@ import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.pojo.DedDetailDTO; import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail; import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO; import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.OrderListVo; import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
...@@ -141,6 +144,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -141,6 +144,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return mapper.getTourList(paramMap); return mapper.getTourList(paramMap);
} }
public PageDataVO<MemberOrderBo> findMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO){
return PageDataVO.pageInfo(memberOrderFindDTO.getPage(),memberOrderFindDTO.getLimit(),()->mapper.findMemberOrders(memberOrderFindDTO));
}
public List<MemberOrderBo> findMemberOrders(MemberOrderFindDTO memberOrderFindDTO) {
return mapper.findMemberOrders(memberOrderFindDTO);
}
// public List<MemberOrderBo>
/** /**
* 获取订单详情 * 获取订单详情
* *
...@@ -692,6 +706,8 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -692,6 +706,8 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
} }
} }
// /** // /**
// * 更新(不成功抛异常) // * 更新(不成功抛异常)
// * @param baseOrder // * @param baseOrder
...@@ -764,6 +780,8 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -764,6 +780,8 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return userFeign; return userFeign;
} }
/** /**
* 订单查询类 * 订单查询类
*/ */
......
package com.xxfc.platform.order.mapper; package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.order.OrderListVo; import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -32,4 +35,6 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> { ...@@ -32,4 +35,6 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> {
public List<OrderPageVO> selectAllTourOrder(Map<String, Object> paramMap); public List<OrderPageVO> selectAllTourOrder(Map<String, Object> paramMap);
List<MemberOrderBo> findMemberOrders(MemberOrderFindDTO memberOrderFindDTO);
} }
...@@ -9,23 +9,24 @@ import com.github.wxiaoqi.security.common.rest.BaseController; ...@@ -9,23 +9,24 @@ import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderMemberDetail; import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.order.add.AddMemberDTO; import com.xxfc.platform.order.pojo.order.add.AddMemberDTO;
import com.xxfc.platform.order.pojo.order.MemberBO; import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.vo.MemberOrderPageVo;
import com.xxfc.platform.order.service.OrderMemberService; import com.xxfc.platform.order.service.OrderMemberService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller @Controller
@RequestMapping("orderMember") @RequestMapping("orderMember")
@Api(value="会员订单",tags={"会员订单"}) @Api(value = "会员订单", tags = {"会员订单"})
@IgnoreClientToken @IgnoreClientToken
public class OrderMemberController extends BaseController<OrderMemberDetailBiz,OrderMemberDetail> { public class OrderMemberController extends BaseController<OrderMemberDetailBiz, OrderMemberDetail> {
@Autowired @Autowired
OrderMemberService orderMemberService; OrderMemberService orderMemberService;
...@@ -33,10 +34,10 @@ public class OrderMemberController extends BaseController<OrderMemberDetailBiz,O ...@@ -33,10 +34,10 @@ public class OrderMemberController extends BaseController<OrderMemberDetailBiz,O
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
@RequestMapping(value = "add",method = RequestMethod.POST) @RequestMapping(value = "add", method = RequestMethod.POST)
@ResponseBody @ResponseBody
@ApiOperation(value = "确认会员订单") @ApiOperation(value = "确认会员订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody AddMemberDTO dto){ public ObjectRestResponse<BaseOrder> add(@RequestBody AddMemberDTO dto) {
MemberBO bo = BeanUtil.toBean(dto, MemberBO.class); MemberBO bo = BeanUtil.toBean(dto, MemberBO.class);
//查询会员等级实体 //查询会员等级实体
...@@ -52,4 +53,22 @@ public class OrderMemberController extends BaseController<OrderMemberDetailBiz,O ...@@ -52,4 +53,22 @@ public class OrderMemberController extends BaseController<OrderMemberDetailBiz,O
return ObjectRestResponse.succ(bo.getOrder()); return ObjectRestResponse.succ(bo.getOrder());
} }
/**
* 会员订单列表
*
* @param memberOrderFindDTO
* @return
*/
@PostMapping("/page")
@ResponseBody
public ObjectRestResponse<MemberOrderPageVo> listMemberOrderPage(@RequestBody MemberOrderFindDTO memberOrderFindDTO) {
MemberOrderPageVo memberOrderPageVo = orderMemberService.listMemberOrderPage(memberOrderFindDTO);
return ObjectRestResponse.succ(memberOrderPageVo);
}
@PostMapping("/export")
@ResponseBody
public void exportMemberOrders(@RequestBody MemberOrderFindDTO memberOrderFindDTO, HttpServletResponse response){
// orderMemberService.exportMemberOrderData(memberOrderFindDTO);
}
} }
\ No newline at end of file
package com.xxfc.platform.order.service; package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.github.wxiaoqi.security.admin.bo.UserBo;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface; import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.excel.ExcelExport;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem; import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.dto.MemberOrderStatisticsBo;
import com.xxfc.platform.order.pojo.order.MemberBO; import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.price.OrderPriceVO; import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import com.xxfc.platform.order.pojo.vo.MemberOrderPageVo;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.FileOutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.time.Instant;
import java.util.HashMap; import java.time.LocalDate;
import java.util.HashSet; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
...@@ -51,6 +69,12 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -51,6 +69,12 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
@Autowired @Autowired
ThirdFeign thirdFeign; ThirdFeign thirdFeign;
@Autowired
private BaseOrderBiz baseOrderBiz;
@Autowired
private UserFeign userFeign;
private static Integer IS_CHILD = 1; private static Integer IS_CHILD = 1;
private static Integer LEVEL_DEFAULT = 0; private static Integer LEVEL_DEFAULT = 0;
...@@ -73,7 +97,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -73,7 +97,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
public HttpServletRequest request; public HttpServletRequest request;
@PostConstruct @PostConstruct
public void init(){ public void init() {
this.orderTypeEnum = OrderTypeEnum.MEMBER; this.orderTypeEnum = OrderTypeEnum.MEMBER;
} }
...@@ -82,8 +106,8 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -82,8 +106,8 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
super.initDetail(bo); super.initDetail(bo);
initDictionary(); initDictionary();
BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel()); BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel());
if(!bo.getMemberLevelId().equals(buml.getId())) { if (!bo.getMemberLevelId().equals(buml.getId())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>(){{ throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>() {{
add("MemberLevelId 和 MemberLevel不对称"); add("MemberLevelId 和 MemberLevel不对称");
}}); }});
} }
...@@ -94,7 +118,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -94,7 +118,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
public void initDictionary() { public void initDictionary() {
dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_MEMBER).getDetail()); this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ACT_MEMBER).getDetail());
} }
@Override @Override
...@@ -110,7 +134,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -110,7 +134,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
BigDecimal amount = memberItem.getTotalAmount(); BigDecimal amount = memberItem.getTotalAmount();
//如果有使用优惠券,则扣减 //如果有使用优惠券,则扣减
if(BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) { if (BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) {
activityFeign.use(bo.getOrder().getUserId(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE); activityFeign.use(bo.getOrder().getUserId(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE);
} }
...@@ -144,9 +168,9 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -144,9 +168,9 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
goodsAmount = goodsAmount.add(memberOrderItem.getCalculateAmount(Boolean.TRUE)); goodsAmount = goodsAmount.add(memberOrderItem.getCalculateAmount(Boolean.TRUE));
//vehicleAmount 优惠券处理 //vehicleAmount 优惠券处理
if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) { if (null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
couponAmount = activityFeign.use(detail.getOrder().getUserId(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE); couponAmount = activityFeign.use(detail.getOrder().getUserId(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE);
if(couponAmount.compareTo(BigDecimal.ZERO) > 0) { if (couponAmount.compareTo(BigDecimal.ZERO) > 0) {
detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(","))); detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(",")));
detail.getOrder().setHasDiscount(SYS_TRUE); detail.getOrder().setHasDiscount(SYS_TRUE);
memberOrderItem.handleCouponAmount(couponAmount); memberOrderItem.handleCouponAmount(couponAmount);
...@@ -167,4 +191,219 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -167,4 +191,219 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
return opv; return opv;
} }
/**
* 导出数据
* @param memberOrderFindDTO
*/
public void exportMemberOrderData(MemberOrderFindDTO memberOrderFindDTO) throws Exception{
MemberOrderPageVo memberOrderPageVo = listMemberOrderPage(memberOrderFindDTO);
List<MemberOrderBo> memberOrderBoList = memberOrderPageVo.getMemberOrderPage().getData();
MemberOrderStatisticsBo memberOrderStatisticsBo = memberOrderPageVo.getMemberOrderStatisticsBo();
FileOutputStream fileOutputStream = new FileOutputStream("ts.xlsx");
ExcelExport excelExport = new ExcelExport();
Workbook workbook = excelExport.getWorkbook();
Sheet sheet = workbook.createSheet();
CellStyle cellStyleHeader01 = workbook.createCellStyle();
cellStyleHeader01.setAlignment(HorizontalAlignment.CENTER);
sheet.autoSizeColumn(9);
Row row1 = sheet.createRow(0);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYYMMddHHmmss");
createHeader(row1,0,new String[]{dateTimeFormatter.format(LocalDateTime.now())+"会员订单列表"},cellStyleHeader01);
CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,0,9);
sheet.addMergedRegion(cellRangeAddress);
Row row2 = sheet.createRow(1);
Cell row2_cell1 = row2.createCell(0);
row2_cell1.setCellValue("统计");
row2_cell1.setCellStyle(cellStyleHeader01);
CellRangeAddress cellRangeAddress2 = new CellRangeAddress(1,2,0,0);
sheet.addMergedRegion(cellRangeAddress2);
String[] header2 = new String[]{"会员订单总数(单)","会员订单总额(元)","钻石会员订单(单)","钻石会员订单总额(元)","黄金会员订单(单)","黄金会员订单总额(元)","普通会员订单(单)","普通会员订单总额(元)"};
createHeader(row2,1,header2,cellStyleHeader01);
String[] countData = getData(memberOrderStatisticsBo);
Row row4 = sheet.createRow(2);
createCellCount(row4,1,countData,cellStyleHeader01);
Row row5 = sheet.createRow(4);
String[] header3 = new String[]{"订单号","创建时间","订单状态","名称","用户姓名","手机号","上级姓名/手机号","促成人姓名/手机号","订单价格(元)","优惠金额(元)","实付金额(元)","支付时间"};
CellRangeAddress cellRangeAddress3 = new CellRangeAddress(3,3,0,header3.length);
sheet.addMergedRegion(cellRangeAddress3);
createHeader(row5,0,header3,cellStyleHeader01);
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();
}
private String[] getData(MemberOrderStatisticsBo memberOrderStatisticsBo){
String totalAmount = String.valueOf(memberOrderStatisticsBo.getTotalAmount());
String totalDiamondAmount = String.valueOf(memberOrderStatisticsBo.getDiamondOrderNum());
String totalGoldAmount = String.valueOf(memberOrderStatisticsBo.getTotalGoldAmount());
String totalGeneralAmount = String.valueOf(memberOrderStatisticsBo.getTotalGeneralAmount());
return new String[]{totalAmount,totalDiamondAmount,totalGoldAmount,totalGeneralAmount};
}
private void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle){
for (int i =0 ;i<header.length;i++){
Cell cell = row.createCell(cellStartIndex);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex+=1;
}
}
private void createCellCount(Row row,int CellStartIndex,String[] data,CellStyle cellStyle){
for(int i=CellStartIndex,y=0;i<data.length;i++,y++){
Cell cell = row.createCell(i);
cell.setCellValue(Objects.toString(data[y]));
cell.setCellStyle(cellStyle);
}
}
public MemberOrderPageVo listMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO) {
MemberOrderPageVo memberOrderPageVo = new MemberOrderPageVo();
MemberOrderStatisticsBo memberOrderStatisticsBo = new MemberOrderStatisticsBo();
List<Integer> userIds = new ArrayList<>();
PageDataVO<MemberOrderBo> pageDataVO= new PageDataVO<>();
pageDataVO.setPageNum(memberOrderFindDTO.getPage());
pageDataVO.setPageSize(memberOrderFindDTO.getLimit());
pageDataVO.setData(Collections.EMPTY_LIST);
String name = memberOrderFindDTO.getLevel()==null?"":memberOrderFindDTO.getLevel()==1?"普通":memberOrderFindDTO.getLevel()==2?"黄金":memberOrderFindDTO.getLevel()==3?"钻石":null;
memberOrderFindDTO.setLevelName(name);
if (Objects.nonNull(memberOrderFindDTO.getEndPayTime())){
Long payEndTime = memberOrderFindDTO.getEndPayTime()+(1000*60*60*24);
memberOrderFindDTO.setEndPayTime(payEndTime);
}
boolean isNoNullUserName = StringUtils.isNotEmpty(memberOrderFindDTO.getName()) && memberOrderFindDTO.getName().trim().length() > 0;
boolean isNoNullPhone = StringUtils.isNotEmpty(memberOrderFindDTO.getPhone()) && memberOrderFindDTO.getPhone().trim().length() > 0;
boolean isNoNullLeaderPhone = StringUtils.isNotEmpty(memberOrderFindDTO.getLeaderPhone()) && memberOrderFindDTO.getLeaderPhone().trim().length() > 0;
if (isNoNullLeaderPhone || isNoNullPhone || isNoNullUserName) {
userIds = userFeign.findAppUserIds(memberOrderFindDTO.getPhone(),memberOrderFindDTO.getLeaderPhone(),memberOrderFindDTO.getName());
if (CollectionUtils.isEmpty(userIds)){
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
return memberOrderPageVo;
}
}
if (memberOrderFindDTO.getPage() == 1){
memberOrderFindDTO.setUserIds(userIds);
memberOrderFindDTO.setIsPay(true);
List<MemberOrderBo> baseOrders = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
memberOrderStatisticsBo = getMemberOrderStatisticsBo(baseOrders);
}
memberOrderFindDTO.setIsPay(false);
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
List<MemberOrderBo> memberOrderBoList;
if (!memberOrderFindDTO.getIsExport()){
memberOrderFindDTO.setUserIds(userIds);
pageDataVO = baseOrderBiz.findMemberOrderPage(memberOrderFindDTO);
memberOrderBoList = pageDataVO.getData();
if (CollectionUtils.isEmpty(memberOrderBoList)){
memberOrderPageVo.setMemberOrderStatisticsBo(memberOrderStatisticsBo);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
return memberOrderPageVo;
}
}else {
memberOrderFindDTO.setUserIds(userIds);
memberOrderBoList = baseOrderBiz.findMemberOrders(memberOrderFindDTO);
}
memberOrderBoList = getUserBos(memberOrderBoList);
pageDataVO.setData(memberOrderBoList);
memberOrderPageVo.setMemberOrderPage(pageDataVO);
return memberOrderPageVo;
}
private List<MemberOrderBo> getUserBos(List<MemberOrderBo> memberOrderBoList) {
List<UserBo> userBos = memberOrderBoList.stream().map(x -> {
UserBo userBo = new UserBo();
userBo.setUserId(x.getUserId());
userBo.setOrderNo(x.getOrderNo());
userBo.setFacilitateId(x.getFacilitateId());
return userBo;
}).collect(Collectors.toList());
List<UserBo> userDTOList = userFeign.findUserDetailByUserBo(userBos);
Map<String, UserBo> userBoMap = userDTOList.stream().collect(Collectors.toMap(UserBo::getOrderNo, Function.identity()));
for (MemberOrderBo memberOrderBo : memberOrderBoList) {
UserBo userBo = userBoMap.get(memberOrderBo.getOrderNo());
if(Objects.nonNull(userBo)) {
memberOrderBo.setUserName(userBo.getName());
memberOrderBo.setPhone(userBo.getPhone());
memberOrderBo.setLeaderName(userBo.getLeaderName());
memberOrderBo.setLeaderPhone(userBo.getLeaderPhone());
memberOrderBo.setFacilitateName(userBo.getFacilitateName());
memberOrderBo.setCouponAmount(memberOrderBo.getCouponAmount() == null ? BigDecimal.ZERO : memberOrderBo.getCouponAmount());
memberOrderBo.setRealAmount(memberOrderBo.getRealAmount() == null ? BigDecimal.ZERO : memberOrderBo.getRealAmount());
}
}
return memberOrderBoList;
}
private MemberOrderStatisticsBo getMemberOrderStatisticsBo(List<MemberOrderBo> baseOrders){
MemberOrderStatisticsBo memberOrderStatisticsBo = new MemberOrderStatisticsBo();
baseOrders.stream().peek(x->{
if(x.getName().contains("黄金")){
x.setDesc("黄金");
}
if (x.getName().contains("钻石")){
x.setDesc("钻石");
}
if (x.getName().contains("普通")){
x.setDesc("普通");
}
}).count();
Map<String, List<MemberOrderBo>> baseOrderMap = baseOrders.stream().collect(Collectors.groupingBy(MemberOrderBo::getDesc, Collectors.toList()));
Map<String, List<MemberOrderBo>> baseOrderHasPayMap = baseOrders.stream().filter(x->x.getHasPay()==1).collect(Collectors.groupingBy(MemberOrderBo::getDesc, Collectors.toList()));
memberOrderStatisticsBo.setOrderNum(baseOrders.size());
BigDecimal totalAmount = baseOrders.stream().filter(x->x.getHasPay()==1).map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalAmount(totalAmount);
List<MemberOrderBo> diamondOrders = baseOrderMap.get(levelEnum.DIAMOND.getDesc());
memberOrderStatisticsBo.setDiamondOrderNum(diamondOrders==null?0:diamondOrders.size());
List<MemberOrderBo> diamondHashPayOrders = baseOrderHasPayMap.get(levelEnum.DIAMOND.getDesc());
diamondHashPayOrders = diamondHashPayOrders==null?Collections.EMPTY_LIST:diamondHashPayOrders;
BigDecimal diamondAmount = diamondHashPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
memberOrderStatisticsBo.setTotalDiamondAmount(diamondAmount);
List<MemberOrderBo> goldOrders = baseOrderMap.get(levelEnum.GOLD.getDesc());
memberOrderStatisticsBo.setGoldOrderNum(goldOrders==null?0:goldOrders.size());
List<MemberOrderBo> goldHasPayOrders = baseOrderHasPayMap.get(levelEnum.GOLD.getDesc());
goldHasPayOrders = goldHasPayOrders==null?Collections.EMPTY_LIST:goldHasPayOrders;
BigDecimal goldAmount = goldHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGoldAmount(goldAmount);
List<MemberOrderBo> generalOrders = baseOrderMap.get(levelEnum.GENERAL.getDesc());
memberOrderStatisticsBo.setGeneralOrderNum(generalOrders==null?0:generalOrders.size());
List<MemberOrderBo> generalHasPayOrders = baseOrderMap.get(levelEnum.GENERAL.getDesc());
generalHasPayOrders = generalHasPayOrders==null?Collections.EMPTY_LIST:generalHasPayOrders;
BigDecimal generalAmount = generalHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGeneralAmount(generalAmount);
return memberOrderStatisticsBo;
}
private enum levelEnum{
DIAMOND("钻石"),
GOLD("黄金"),
GENERAL("普通");
levelEnum(String desc) {
this.desc = desc;
}
private String desc;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
} }
...@@ -153,7 +153,8 @@ ...@@ -153,7 +153,8 @@
or t.start_time between #{startTime} and #{endTime}) or t.start_time between #{startTime} and #{endTime})
</if> </if>
<if test="vehicleIds != null and vehicleIds.size() > 0"> <if test="vehicleIds != null and vehicleIds.size() > 0">
AND r.vehicle_id IN <foreach collection="vehicleIds" item="vehicleId" open="(" close=")" separator=","> AND r.vehicle_id IN
<foreach collection="vehicleIds" item="vehicleId" open="(" close=")" separator=",">
#{vehicleId} #{vehicleId}
</foreach> </foreach>
</if> </if>
...@@ -282,4 +283,64 @@ ...@@ -282,4 +283,64 @@
and r.start_time between #{startTime} and #{endTime} and r.start_time between #{startTime} and #{endTime}
</if> </if>
</select> </select>
<select id="findMemberOrders" resultType="com.xxfc.platform.order.pojo.dto.MemberOrderBo">
SELECT
`id`,
`no` AS `orderNo`,
`name`,
`status`,
`goods_amount` AS `goodsAmount`,
`real_amount` AS `realAmount`,
`order_amount` AS `orderAmount`,
`crt_time` AS `creatTime`,
`pay_time` AS `payTime`,
`coupon_amount` AS `couponAmount`,
`user_id` AS `userId`,
`has_pay` AS `hasPay`,
`member_level` AS `memberLevel`,
`facilitate_id` AS `facilitateId`,
`facilitate_phone` AS `facilitatePhone`
FROM
`base_order`
WHERE
type = 3
<if test="orderNo!=null and orderNo!=''">
and `no`=#{orderNo}
</if>
<if test="state!=null">
and `status`=#{state}
</if>
<if test="facilitatePhone!=null and facilitatePhone!=''">
and `facilitate_phone`=#{facilitatePhone}
</if>
<if test="startOrderTime!=null and endOrderTime!=null">
and `crt_time` between #{startOrderTime} and #{endOrderTime}
</if>
<if test="startOrderTime!=null and endOrderTime==null">
and `crt_time` <![CDATA[>=#{startOrderTime}]]>
</if>
<if test="endOrderTime!=null and startOrderTime==null">
and `crt_time` <![CDATA[<=#{endOrderTime}]]>
</if>
<if test="startPayTime!=null and endPayTime!=null">
and `pay_time` between #{startPayTime} and #{endPayTime}
</if>
<if test="startPayTime!=null and endPayTime==null">
and `pay_time` <![CDATA[>=#{startPayTime}]]>
</if>
<if test="endPayTime!=null and startPayTime==null">
and `pay_time` <![CDATA[<=#{endPayTime}]]>
</if>
<if test="levelName!=null and levelName!=''">
and `name` like CONCAT('%',#{levelName},'%')
</if>
<if test="userIds!=null and userIds.size()>0">
and `user_id` IN
<foreach collection="userIds" item="userId" separator="," open="(" close=")">
#{userId}
</foreach>
</if>
ORDER BY `crt_time` DESC
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -225,7 +225,7 @@ public class VehicleCataController extends VehicleBaseController<VehiclePlatCata ...@@ -225,7 +225,7 @@ public class VehicleCataController extends VehicleBaseController<VehiclePlatCata
try { try {
vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class); vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class);
UserDTO userDTO = userFeign.userinfoByToken(userAuthConfig.getToken(request)).getData(); UserBo userDTO = userFeign.userinfoByToken(userAuthConfig.getToken(request)).getData();
if (userDTO != null) { if (userDTO != null) {
if (userDTO.getDataAll() == 2) { if (userDTO.getDataAll() == 2) {
List<Integer> companyList = vehicleBiz.dataCompany(userDTO.getDataZone(), userDTO.getDataCompany()); List<Integer> companyList = vehicleBiz.dataCompany(userDTO.getDataZone(), userDTO.getDataCompany());
......
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