package com.dsh.account.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.dsh.account.entity.TAppUser;
|
import com.dsh.account.entity.TStudent;
|
import com.dsh.account.feignclient.activity.MerChandiseClient;
|
import com.dsh.account.feignclient.course.CoursePaymentClient;
|
import com.dsh.account.feignclient.course.model.CourseOfStoreVo;
|
import com.dsh.account.feignclient.course.model.QueryStoreList;
|
import com.dsh.account.feignclient.course.model.StuCourseResp;
|
import com.dsh.account.feignclient.other.ImgConfigClient;
|
import com.dsh.account.feignclient.other.StoreClient;
|
import com.dsh.account.feignclient.other.model.Store;
|
import com.dsh.account.feignclient.other.model.TImgConfig;
|
import com.dsh.account.mapper.TAppUserMapper;
|
import com.dsh.account.mapper.TStudentMapper;
|
import com.dsh.account.model.AddAppUserVo;
|
import com.dsh.account.model.JoinPlayPaiVo;
|
import com.dsh.account.model.LoginSMSCodeVo;
|
import com.dsh.account.model.LoginWeChatVo;
|
import com.dsh.account.model.vo.classDetails.CourseVenue;
|
import com.dsh.account.model.vo.classDetails.ExerciseVideo;
|
import com.dsh.account.model.vo.classDetails.RegisteredCourse;
|
import com.dsh.account.model.vo.classDetails.WeekedCourse;
|
import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo;
|
import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo;
|
import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo;
|
import com.dsh.account.service.TAppUserService;
|
import com.dsh.account.util.*;
|
import com.dsh.account.util.akeylogin.Md5Util;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 用户信息 服务实现类
|
* </p>
|
*
|
* @author administrator
|
* @since 2023-06-14
|
*/
|
@Service
|
public class TAppUserServiceImpl extends ServiceImpl<TAppUserMapper, TAppUser> implements TAppUserService {
|
|
|
@Resource
|
private TStudentMapper tsmapper;
|
|
@Resource
|
private ImgConfigClient configClient;
|
|
@Autowired
|
private ALiSendSms aLiSendSms;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Autowired
|
private GDMapGeocodingUtil gdMapGeocodingUtil;
|
|
@Autowired
|
private JwtTokenUtil jwtTokenUtil;
|
|
@Resource
|
private CoursePaymentClient paymentClient;
|
|
@Resource
|
private StoreClient storeClient;
|
|
@Autowired
|
private MerChandiseClient mcClient;
|
|
|
@Autowired
|
private ImgConfigClient icfgClient;
|
|
@Override
|
public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) {
|
TAppUser tAppUser = this.baseMapper.selectById(id);
|
ClassInfoVo classInfoVo = new ClassInfoVo();
|
if (ToolUtil.isNotEmpty(tAppUser)){
|
List<TStudent> tStudents = tsmapper.selectList(new QueryWrapper<TStudent>()
|
.eq("appUserId",tAppUser.getId())
|
.eq("state",1)
|
.eq("isDefault",1));
|
if (tStudents.size() > 0 ){
|
TStudent tStudent = tStudents.get(0);
|
classInfoVo.setStuId(tStudent.getId());
|
classInfoVo.setIsThere(1);
|
classInfoVo.setStuImg(tStudent.getHeadImg());
|
classInfoVo.setStuSex(tStudent.getSex());
|
classInfoVo.setStuAge(DateUtil.age(tStudent.getBirthday()));
|
classInfoVo.setStuName(tStudent.getName());
|
classInfoVo.setHeight(tStudent.getHeight());
|
classInfoVo.setWeight(tStudent.getWeight());
|
classInfoVo.setBmi(tStudent.getBmi());
|
|
List<RegisteredCourse> courseList = new ArrayList<>();
|
// 总学时数
|
int total = 0;
|
// 已扣数
|
int deduct = 0;
|
// 剩余数
|
int remain = 0;
|
List<StuCourseResp> stuCoursePayment = paymentClient.getStuCoursePayment();
|
if (stuCoursePayment.size() > 0){
|
for (StuCourseResp tCoursePackagePayment : stuCoursePayment) {
|
RegisteredCourse course = new RegisteredCourse();
|
course.setCourseId(tCoursePackagePayment.getCourseId());
|
course.setCourseName(tCoursePackagePayment.getCourseName());
|
total = total + (ToolUtil.isEmpty(tCoursePackagePayment.getTotalCourseNums()) ? 0 : tCoursePackagePayment.getTotalCourseNums());
|
deduct = deduct + (ToolUtil.isEmpty(tCoursePackagePayment.getDeductionNums()) ? 0 : tCoursePackagePayment.getDeductionNums());
|
remain = remain + (ToolUtil.isEmpty(tCoursePackagePayment.getResidueNums())? 0 : tCoursePackagePayment.getResidueNums());
|
courseList.add(course);
|
}
|
}
|
classInfoVo.setCourseList(courseList);
|
|
classInfoVo.setTotalNums(total);
|
classInfoVo.setDeductedNums(deduct);
|
classInfoVo.setRemainingNums(remain);
|
|
List<CourseOfStoreVo> storeOfCourses = paymentClient.getStoreOfCourses();
|
classInfoVo.setWeekCourseList(dealDatas(storeOfCourses,longitude,latitude));
|
|
List<ExerciseVideo> videos = new ArrayList<>();
|
|
classInfoVo.setExerciseVideoList(videos);
|
}else {
|
classInfoVo.setIsThere(2);
|
List<TImgConfig> tImgConfigs = configClient.getNoneStuImgs();
|
if (tImgConfigs.size() > 0){
|
classInfoVo.setImgs(tImgConfigs.get(0).getContent());
|
}
|
}
|
}
|
return classInfoVo;
|
}
|
|
/**
|
* 处理数据
|
* @param storeOfCourses
|
* @param longitude
|
* @param latitude
|
* @return
|
*/
|
public List<WeekedCourse> dealDatas(List<CourseOfStoreVo> storeOfCourses,String longitude ,@RequestBody String latitude){
|
List<WeekedCourse> weekedCourses = new ArrayList<>();
|
for (int i = 1; i < 8; i++) {
|
WeekedCourse weekedCourse = new WeekedCourse();
|
List<CourseVenue> courseVenues = new ArrayList<>();
|
Map<Integer, List<CourseOfStoreVo>> map = storeOfCourses.stream().collect(Collectors.groupingBy(CourseOfStoreVo::getStoreId));
|
for (Map.Entry<Integer, List<CourseOfStoreVo>> integerListEntry : map.entrySet()) {
|
List<CourseOfStoreVo> value = integerListEntry.getValue();
|
CourseVenue courseVenue = new CourseVenue();
|
courseVenue.setStoreId(value.get(0).getStoreId());
|
courseVenue.setAreaName(value.get(0).getStoreName());
|
courseVenue.setSiteDistance(LonlatUtils.distance(Double.parseDouble(longitude), Double.parseDouble(latitude),
|
Double.parseDouble(value.get(0).getLon()), Double.parseDouble(value.get(0).getLat())) + "");
|
|
List<CourseVenue.CouList> courses = new ArrayList<>();
|
for (CourseOfStoreVo courseOfStoreVo : value) {
|
CourseVenue.CouList couList = new CourseVenue.CouList();
|
couList.setCourseID(courseOfStoreVo.getCourseId());
|
couList.setCourseName(courseOfStoreVo.getCourseName());
|
couList.setTimeStr(courseOfStoreVo.getClassStartTime() + "-" + courseOfStoreVo.getClassEndTime());
|
couList.setDetail("");
|
courses.add(couList);
|
}
|
courseVenue.setCourses(courses);
|
courseVenues.add(courseVenue);
|
}
|
weekedCourse.setDetails(courseVenues);
|
weekedCourses.add(weekedCourse);
|
}
|
return weekedCourses;
|
}
|
|
|
/**
|
* 获取短信验证码
|
* @param type 1:登录,2:注册,3:修改密码,4:忘记密码
|
* @param phone
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil getSMSCode(Integer type, String phone) throws Exception {
|
if(type == 2){
|
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
|
if(null != tAppUser){
|
return ResultUtil.error("账号已存在");
|
}
|
}
|
String numberRandom = UUIDUtil.getNumberRandom(6);
|
String templateCode = "";
|
if(type == 1 || type == 2){
|
templateCode = "SMS_161275250";
|
}
|
if(type == 3 || type == 4){
|
templateCode = "SMS_160960014";
|
}
|
aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + numberRandom + "\"}");
|
redisUtil.setStrValue(phone, numberRandom, 300);
|
return ResultUtil.success();
|
}
|
|
|
/**
|
* 注册用户
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil addAppUser(AddAppUserVo addAppUserVo) throws Exception {
|
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", addAppUserVo.getPhone()).ne("state", 3));
|
if(null != tAppUser){
|
return ResultUtil.error("账号已存在");
|
}
|
String value = redisUtil.getValue(addAppUserVo.getPhone());
|
if(ToolUtil.isEmpty(value) || !value.equals(addAppUserVo.getCode())){
|
return ResultUtil.error("验证码无效");
|
}
|
|
tAppUser = new TAppUser();
|
tAppUser.setPhone(addAppUserVo.getPhone());
|
tAppUser.setPassword(Md5Util.MD5Encode(addAppUserVo.getPassword(), null));
|
tAppUser.setIsVip(0);
|
tAppUser.setState(1);
|
if(ToolUtil.isNotEmpty(addAppUserVo.getLatitude()) && ToolUtil.isNotEmpty(addAppUserVo.getLongitude())){
|
Map<String, String> geocode = gdMapGeocodingUtil.geocode(addAppUserVo.getLongitude(), addAppUserVo.getLatitude());
|
if(null != geocode){
|
String province = geocode.get("province");
|
String provinceCode = geocode.get("provinceCode");
|
String city = geocode.get("city");
|
String cityCode = geocode.get("cityCode");
|
tAppUser.setProvince(province);
|
tAppUser.setProvinceCode(provinceCode);
|
tAppUser.setCity(city);
|
tAppUser.setCityCode(cityCode);
|
}
|
}
|
tAppUser.setInsertTime(new Date());
|
this.baseMapper.insert(tAppUser);
|
return ResultUtil.success();
|
}
|
|
|
/**
|
* 账号密码登录
|
* @param phone
|
* @param password
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil loginPassword(String phone, String password) throws Exception {
|
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
|
if(null == tAppUser){
|
return ResultUtil.error("请先注册", "");
|
}
|
if(tAppUser.getState() == 2){
|
return ResultUtil.error("您的账号已被冻结", "");
|
}
|
password = Md5Util.MD5Encode(password, null);
|
if(!tAppUser.getPassword().equals(password)){
|
return ResultUtil.error("账号密码错误", "");
|
}
|
String token = getToken(tAppUser);
|
return ResultUtil.success(token);
|
}
|
|
|
/**
|
* 验证码登录
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil loginSMSCode(LoginSMSCodeVo loginSMSCodeVo) throws Exception {
|
String value = redisUtil.getValue(loginSMSCodeVo.getPhone());
|
if(ToolUtil.isEmpty(value) || !value.equals(loginSMSCodeVo.getCode())){
|
return ResultUtil.error("验证码无效");
|
}
|
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", loginSMSCodeVo.getPhone()).ne("state", 3));
|
if(null == tAppUser){
|
tAppUser = new TAppUser();
|
tAppUser.setPhone(loginSMSCodeVo.getPhone());
|
tAppUser.setPassword(Md5Util.MD5Encode("111111", null));
|
tAppUser.setIsVip(0);
|
tAppUser.setState(1);
|
if(ToolUtil.isNotEmpty(loginSMSCodeVo.getLatitude()) && ToolUtil.isNotEmpty(loginSMSCodeVo.getLongitude())){
|
Map<String, String> geocode = gdMapGeocodingUtil.geocode(loginSMSCodeVo.getLongitude(), loginSMSCodeVo.getLatitude());
|
if(null != geocode){
|
String province = geocode.get("province");
|
String provinceCode = geocode.get("provinceCode");
|
String city = geocode.get("city");
|
String cityCode = geocode.get("cityCode");
|
tAppUser.setProvince(province);
|
tAppUser.setProvinceCode(provinceCode);
|
tAppUser.setCity(city);
|
tAppUser.setCityCode(cityCode);
|
}
|
}
|
this.baseMapper.insert(tAppUser);
|
}
|
if(tAppUser.getState() == 2){
|
return ResultUtil.error("您的账号已被冻结", "");
|
}
|
String token = getToken(tAppUser);
|
return ResultUtil.success(token);
|
}
|
|
|
/**
|
* 微信登录
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil loginWechat(LoginWeChatVo loginWechatVo) throws Exception {
|
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("openid", loginWechatVo.getOpenId()).ne("state", 3));
|
if(null == tAppUser){
|
tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", loginWechatVo.getPhone()).ne("state", 3));
|
if(null == tAppUser){
|
tAppUser = new TAppUser();
|
tAppUser.setOpenid(loginWechatVo.getOpenId());
|
tAppUser.setPhone(loginWechatVo.getPhone());
|
tAppUser.setPassword(Md5Util.MD5Encode("111111", null));
|
tAppUser.setIsVip(0);
|
tAppUser.setState(1);
|
if(ToolUtil.isNotEmpty(loginWechatVo.getLatitude()) && ToolUtil.isNotEmpty(loginWechatVo.getLongitude())){
|
Map<String, String> geocode = gdMapGeocodingUtil.geocode(loginWechatVo.getLongitude(), loginWechatVo.getLatitude());
|
if(null != geocode){
|
String province = geocode.get("province");
|
String provinceCode = geocode.get("provinceCode");
|
String city = geocode.get("city");
|
String cityCode = geocode.get("cityCode");
|
tAppUser.setProvince(province);
|
tAppUser.setProvinceCode(provinceCode);
|
tAppUser.setCity(city);
|
tAppUser.setCityCode(cityCode);
|
}
|
}
|
tAppUser.setInsertTime(new Date());
|
this.baseMapper.insert(tAppUser);
|
}
|
}
|
if(tAppUser.getState() == 2){
|
return ResultUtil.error("您的账号已被冻结", "");
|
}
|
|
if(ToolUtil.isNotEmpty(tAppUser.getOpenid())){
|
tAppUser.setOpenid(loginWechatVo.getOpenId());
|
}
|
if(ToolUtil.isNotEmpty(tAppUser.getPhone())){
|
tAppUser.setPhone(loginWechatVo.getPhone());
|
}
|
this.updateById(tAppUser);
|
|
String token = getToken(tAppUser);
|
return ResultUtil.success(token);
|
}
|
|
|
/**
|
* 获取JWT token和存储个人信息
|
* @param appUser
|
* @return
|
*/
|
private String getToken(TAppUser appUser){
|
String randomKey = jwtTokenUtil.getRandomKey();
|
String token = jwtTokenUtil.generateToken(appUser.getId().toString(), randomKey);
|
redisUtil.setStrValue(token.substring(token.length() - 32), String.valueOf(appUser.getId()), 7 * 24 * 60 * 60);
|
redisUtil.setStrValue("USER_" + appUser.getPhone(), token.substring(token.length() - 32));
|
redisUtil.setStrValue("USER_" + appUser.getId(), token);
|
return token;
|
}
|
|
|
/**
|
* 修改密码
|
* @param phone
|
* @param code
|
* @param password
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil updatePassword(String phone, String code, String password) throws Exception {
|
String value = redisUtil.getValue(phone);
|
if(ToolUtil.isEmpty(value) || !value.equals(code)){
|
return ResultUtil.error("验证码无效");
|
}
|
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
|
if(tAppUser.getState() == 2){
|
return ResultUtil.error("您的账号已被冻结", "");
|
}
|
tAppUser.setPassword(Md5Util.MD5Encode(password, null));
|
this.updateById(tAppUser);
|
return ResultUtil.success();
|
}
|
|
|
/**
|
* 定时任务修改到期会员的状态
|
*/
|
@Override
|
public void membershipEnd() {
|
this.baseMapper.membershipEnd();
|
}
|
|
|
/**
|
* 获取加入玩湃首页数据
|
* @param lon
|
* @param lat
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public JoinPlayPaiVo queryJoinPlayPai(Integer uid, String lon, String lat) throws Exception {
|
TAppUser appUser = this.getById(uid);
|
JoinPlayPaiVo joinPlayPaiVo = new JoinPlayPaiVo();
|
joinPlayPaiVo.setIsVip(appUser.getIsVip());
|
|
Map<String, String> geocode = gdMapGeocodingUtil.geocode(lon, lat);
|
if(null != geocode){
|
String provinceCode = geocode.get("provinceCode");
|
String cityCode = geocode.get("cityCode");
|
List<Store> stores = storeClient.queryStoreList(new QueryStoreList(provinceCode, cityCode));
|
Store s = null;
|
Double d = 0D;
|
for (Store store : stores) {
|
Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat());
|
Double wgs84 = distance.get("WGS84");
|
if(s == null || d.compareTo(wgs84) < 0){
|
s = store;
|
d = wgs84;
|
}
|
}
|
joinPlayPaiVo.setName(s.getName());
|
joinPlayPaiVo.setLon(s.getLon());
|
joinPlayPaiVo.setLat(s.getLat());
|
joinPlayPaiVo.setStoreId(s.getId());
|
}
|
return joinPlayPaiVo;
|
}
|
|
@Override
|
public IndexOfUserBenefirVo queryBenefitDetails(Integer appUserId) {
|
IndexOfUserBenefirVo benefirVo = new IndexOfUserBenefirVo();
|
|
TAppUser appUser = this.getById(appUserId);
|
benefirVo.setUserHeadImg(appUser.getHeadImg());
|
benefirVo.setUserName(appUser.getName());
|
if (appUser.getIsVip() == 1){
|
benefirVo.setIsMember("年度会员");
|
}else {
|
benefirVo.setIsMember("普通用户");
|
}
|
benefirVo.setCommodities(mcClient.getConvertibleGoods());
|
benefirVo.setImage(icfgClient.getImageConfig());
|
return benefirVo;
|
}
|
|
@Override
|
public BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId) {
|
System.out.println("账单传参:yearMonth"+yearMonth+"|"+"recordId"+recordId);
|
// TODO: 2023/7/4
|
return null;
|
}
|
}
|