package com.stylefeng.guns.modular.system.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.stylefeng.guns.core.util.DateUtil;
|
import com.stylefeng.guns.modular.system.controller.resp.TAppUserResp;
|
import com.stylefeng.guns.modular.system.dao.TCouponMapper;
|
import com.stylefeng.guns.modular.system.dao.TOrderMapper;
|
import com.stylefeng.guns.modular.system.dao.TUserToCouponMapper;
|
import com.stylefeng.guns.modular.system.enums.CouponStatusEnum;
|
import com.stylefeng.guns.modular.system.enums.OrderStateEnum;
|
import com.stylefeng.guns.modular.system.enums.StatusEnum;
|
import com.stylefeng.guns.modular.system.model.TAppUser;
|
import com.stylefeng.guns.modular.system.dao.TAppUserMapper;
|
import com.stylefeng.guns.modular.system.model.TCoupon;
|
import com.stylefeng.guns.modular.system.model.TOrder;
|
import com.stylefeng.guns.modular.system.model.TUserToCoupon;
|
import com.stylefeng.guns.modular.system.service.ITAppUserService;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.ui.Model;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 用户基础信息 服务实现类
|
* </p>
|
*
|
* @author stylefeng
|
* @since 2023-02-14
|
*/
|
@Service
|
public class TAppUserServiceImpl extends ServiceImpl<TAppUserMapper, TAppUser> implements ITAppUserService {
|
|
@Autowired
|
private TAppUserMapper tAppUserMapper;
|
@Autowired
|
private TCouponMapper tCouponMapper;
|
@Autowired
|
private TOrderMapper tOrderMapper;
|
@Autowired
|
private TUserToCouponMapper tUserToCouponMapper;
|
|
@Override
|
public void detail(Integer tAppUserId, Model model) {
|
// 用户资料
|
TAppUser tAppUser = tAppUserMapper.selectById(tAppUserId);
|
model.addAttribute("avatar",tAppUser.getAvatar());
|
model.addAttribute("status",tAppUser.getStatus());
|
model.addAttribute("id",tAppUser.getId());
|
model.addAttribute("nickname",tAppUser.getNickname());
|
model.addAttribute("remark",tAppUser.getRemark());
|
model.addAttribute("createTime",DateUtil.formatDate(tAppUser.getCreateTime()));
|
// todo 客户渠道
|
model.addAttribute("customerChannel","");
|
|
// 消费信息:优惠券数据
|
// List<TCoupon> tCoupons = tCouponMapper.selectList(new EntityWrapper<TCoupon>().eq("user_id", tAppUserId));
|
// List<TCoupon> notUsedList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.NOT_USED.getCode())).collect(Collectors.toList());
|
// List<TCoupon> usedList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.USED.getCode())).collect(Collectors.toList());
|
// List<TCoupon> expiredList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.EXPIRED.getCode())).collect(Collectors.toList());
|
// 查询当前用户优惠券数量
|
List<TUserToCoupon> tUserToCoupons = tUserToCouponMapper.selectList(new EntityWrapper<TUserToCoupon>().eq("userId", tAppUser.getId()));
|
|
int couponTotal = tUserToCoupons.stream().mapToInt(TUserToCoupon::getCouponTotal).sum();
|
int validCount = tUserToCoupons.stream().mapToInt(TUserToCoupon::getValidCount).sum();
|
int expireCount = tUserToCoupons.stream().mapToInt(TUserToCoupon::getExpireCount).sum();
|
model.addAttribute("couponSum",couponTotal);
|
model.addAttribute("notUsedCount",validCount);
|
model.addAttribute("usedCount",couponTotal-validCount-expireCount);
|
model.addAttribute("expiredCount",expireCount);
|
// 查询订单数据
|
List<TOrder> orders = tOrderMapper.selectList(new EntityWrapper<TOrder>().eq("userId", tAppUserId).orderBy(true,"createTime",false));
|
if(!CollectionUtils.isEmpty(orders)){
|
// 下单次数
|
model.addAttribute("numberOfOrder",orders.size());
|
// 取消次数
|
List<TOrder> collect = orders.stream().filter(order->Objects.nonNull(order.getState()))
|
.filter(order -> OrderStateEnum.CANCELED.getCode() == order.getState()).collect(Collectors.toList());
|
model.addAttribute("canceledNumber",collect.size());
|
|
TOrder tOrder = orders.get(0);
|
// 最近消费时间
|
model.addAttribute("latelyTime",DateUtil.formatDate(tOrder.getCreateTime()));
|
// 最近消费金额
|
model.addAttribute("latelyPrice",tOrder.getPayMoney());
|
|
// 总消费次数
|
List<TOrder> collect1 = orders.stream().filter(order->Objects.nonNull(order.getState()))
|
.filter(order -> OrderStateEnum.WAIT_EVALUATED.getCode() == order.getState() ||
|
OrderStateEnum.FINISH.getCode() == order.getState()).collect(Collectors.toList());
|
if(!CollectionUtils.isEmpty(collect1)){
|
model.addAttribute("consumeSum",collect1.size());
|
// 总消费金额
|
collect1.stream().map(TOrder::getPayMoney).reduce(BigDecimal::add)
|
.ifPresent(consumePrice -> model.addAttribute("consumePrice", consumePrice));
|
}else {
|
// 总消费次数
|
model.addAttribute("consumeSum",0);
|
// 总消费金额
|
model.addAttribute("consumePrice", 0);
|
}
|
}else {
|
// 下单次数
|
model.addAttribute("numberOfOrder",0);
|
// 取消次数
|
model.addAttribute("canceledNumber",0);
|
// 最近消费时间
|
model.addAttribute("latelyTime","");
|
// 最近消费金额
|
model.addAttribute("latelyPrice",0);
|
// 总消费次数
|
model.addAttribute("consumeSum",0);
|
// 总消费金额
|
model.addAttribute("consumePrice", 0);
|
}
|
}
|
|
@Override
|
public EntityWrapper<TAppUser> getUserListWrapper(String createTime, String nickname, String phone, Integer id, Integer status) {
|
EntityWrapper<TAppUser> wrapper = new EntityWrapper<>();
|
// 昵称
|
if(StringUtils.hasLength(nickname)){
|
wrapper.like("nickname",nickname);
|
}
|
// 手机号
|
if(StringUtils.hasLength(phone)){
|
wrapper.like("phone",phone);
|
}
|
// id
|
if(Objects.nonNull(id)){
|
wrapper.eq("id",id);
|
}
|
// 开始,结束时间
|
if(StringUtils.hasLength(createTime)){
|
String[] split = createTime.split(" - ");
|
Date startTime = DateUtil.getDate_str3(split[0]+" 00:00:00");
|
Date endTime = DateUtil.getDate_str3(split[1]+" 23:59:59");
|
wrapper.between("createtime",startTime,endTime);
|
}
|
// if(Objects.nonNull(startTime) && Objects.nonNull(endTime)){
|
// wrapper.between("createtime",startTime,endTime);
|
// }
|
// 状态
|
if(Objects.nonNull(status)){
|
wrapper.eq("status",status);
|
}
|
wrapper.ne("status", StatusEnum.DELETE.getCode());
|
return wrapper;
|
}
|
|
@Override
|
public List<TAppUserResp> getTAppUserResp(List<TAppUser> tAppUsers) {
|
List<TAppUserResp> tAppUserRespList = new ArrayList<>(tAppUsers.size());
|
for (TAppUser tAppUser : tAppUsers) {
|
TAppUserResp tAppUserResp = new TAppUserResp();
|
BeanUtils.copyProperties(tAppUser,tAppUserResp);
|
|
// 查询当前用户优惠券数量
|
List<TUserToCoupon> tUserToCoupons = tUserToCouponMapper.selectList(new EntityWrapper<TUserToCoupon>().eq("userId", tAppUser.getId()));
|
|
int couponTotal = tUserToCoupons.stream().mapToInt(TUserToCoupon::getCouponTotal).sum();
|
int validCount = tUserToCoupons.stream().mapToInt(TUserToCoupon::getValidCount).sum();
|
|
// List<TCoupon> tCoupons = tCouponService.selectList(new EntityWrapper<TCoupon>().eq("user_id", tAppUser.getId()));
|
// List<TCoupon> notUsedList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.NOT_USED.getCode())).collect(Collectors.toList());
|
tAppUserResp.setCouponSum(couponTotal);
|
tAppUserResp.setNotUsedCount(validCount);
|
List<TOrder> orders = tOrderMapper.selectList(new EntityWrapper<TOrder>().eq("userId", tAppUser.getId()).orderBy(true,"createTime",false));
|
if(!CollectionUtils.isEmpty(orders)){
|
// 最后一次消费时间
|
tAppUserResp.setLastConsumptionTime(orders.get(0).getCreateTime());
|
List<TOrder> collect1 = orders.stream().filter(order->Objects.nonNull(order.getState()))
|
.filter(order -> OrderStateEnum.WAIT_EVALUATED.getCode() == order.getState() ||
|
OrderStateEnum.FINISH.getCode() == order.getState()).collect(Collectors.toList());
|
if(!CollectionUtils.isEmpty(collect1)) {
|
tAppUserResp.setConsumeSum(collect1.size());
|
// 总消费金额
|
collect1.stream().map(TOrder::getPayMoney).reduce(BigDecimal::add)
|
.ifPresent(tAppUserResp::setConsumePrice);
|
}
|
}
|
tAppUserRespList.add(tAppUserResp);
|
}
|
return tAppUserRespList;
|
}
|
}
|