java
2023-06-30 d0fe90adfae626158a431b038395caa908e48e8c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
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.IntroduceRewardsClient;
import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
import com.dsh.account.feignclient.course.CancelListClient;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.CourseRecordClient;
import com.dsh.account.feignclient.course.CourseSessionNameClient;
import com.dsh.account.feignclient.course.model.StuSessionDetailsVo;
import com.dsh.account.feignclient.course.model.StuWithCoursesListVo;
import com.dsh.account.mapper.TAppUserMapper;
import com.dsh.account.mapper.TStudentMapper;
import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo;
import com.dsh.account.model.vo.classDetails.classInsVo.StuDetailsReq;
import com.dsh.account.service.TStudentService;
import com.dsh.account.util.DateTimeHelper;
import com.dsh.account.util.ToolUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * <p>
 * 学员信息 服务实现类
 * </p>
 *
 * @author administrator
 * @since 2023-06-14
 */
@Service
public class TStudentServiceImpl extends ServiceImpl<TStudentMapper, TStudent> implements TStudentService {
 
    @Autowired
    private CourseSessionNameClient sessionNameClient;
 
    @Autowired
    private DeductionCompetitionsClient dcttClient;
 
    @Autowired
    private CancelListClient cancelcClient;
 
    @Autowired
    private IntroduceRewardsClient idrClient;
 
    @Autowired
    private CourseRecordClient crClient;
 
    @Autowired
    private CoursePaymentClient couPayClient;
 
    @Autowired
    private TAppUserMapper tauMapper;
 
    @Override
    public void addStuOfAppUser(StuDetailsReq stu,Integer appUserId) {
        TStudent student = new TStudent();
        student.setAppUserId(appUserId);
        student.setName(stu.getName());
        student.setHeadImg(stu.getHeadImg());
        student.setPhone(ToolUtil.isNotEmpty(stu.getPhone()) ? stu.getPhone() : "");
        student.setSex(stu.getSex());
        student.setIdCard(ToolUtil.isNotEmpty(stu.getIdCard())?stu.getIdCard() : "");
        student.setBirthday(new Date(stu.getBirthday()));
        student.setHeight(stu.getHeight());
        student.setWeight(stu.getWeight());
        BigDecimal bigDecimal = BigDecimal.valueOf(stu.getWeight());
        BigDecimal multiply = bigDecimal.subtract(BigDecimal.valueOf(stu.getHeight())).multiply(bigDecimal.subtract(BigDecimal.valueOf(stu.getHeight())));
        multiply.setScale(2);
        student.setBmi(multiply.doubleValue());
        student.setInsertTime(new Date());
        student.setState(1);
        this.baseMapper.insert(student);
    }
 
    @Override
    public ClassDetailsInsVo querySessionDetailsDt(Integer userIdFormRedis, Integer lessonId, Integer stuId) {
        ClassDetailsInsVo insVo = new ClassDetailsInsVo();
        Date localMonthStart = DateTimeHelper.getCurrentMouthStart();
        Date localMonthEnd = DateTimeHelper.getCurrentMouthEnd();
        List<StuSessionDetailsVo> stuSessionList = sessionNameClient.getStuSessionList(localMonthStart,localMonthEnd,stuId,userIdFormRedis);
        TStudent tStudent = this.baseMapper.selectById(stuId);
        if (ToolUtil.isNotEmpty(tStudent)){
            insVo.setStuId(tStudent.getId());
            insVo.setStuName(tStudent.getName());
            insVo.setStuImage(tStudent.getHeadImg());
 
            List<PurchaseRecordVo> purchaseRecordVoList = new ArrayList<>();
 
            List<PurchaseRecordVo> stuSourseList = dcttClient.getStuSourseList(localMonthStart,localMonthEnd,userIdFormRedis);
            purchaseRecordVoList.addAll(stuSourseList);
            List<PurchaseRecordVo> cancelCourseList = cancelcClient.getCancelCourseList(localMonthStart,localMonthEnd,stuId,userIdFormRedis);
            purchaseRecordVoList.addAll(cancelCourseList);
            List<PurchaseRecordVo> purchaseRecordVos = sessionNameClient.queryCourseDetails(localMonthStart,localMonthEnd,stuId,userIdFormRedis);
            purchaseRecordVoList.addAll(purchaseRecordVos);
            List<TAppUser> tAppUsers = tauMapper.selectList(new QueryWrapper<TAppUser>()
                    .eq("referralUserId",userIdFormRedis )
                    .between("insertTime",localMonthStart ,localMonthEnd));
            List<Integer> userIds = tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList());
            List<PurchaseRecordVo> purchaseRecordVos1 = idrClient.queryAppUsersofIntroduce(localMonthStart, localMonthEnd, userIds);
            purchaseRecordVoList.addAll(purchaseRecordVos1);
            insVo.setSessionNames(stuSessionList);
            insVo.setDetails(dealDataOfTime(purchaseRecordVoList));
            StuWithCoursesListVo stuOfCoursesDetails = couPayClient.getStuOfCoursesDetails(stuId, userIdFormRedis);
            insVo.setTotalNums(stuOfCoursesDetails.getTotalNums());
            insVo.setDeductedNums(stuOfCoursesDetails.getDeductedNums());
            insVo.setRemainingNums(stuOfCoursesDetails.getRemainingNums());
            Integer deductionClassHour = crClient.getDeductionClassHour(lessonId, stuId, userIdFormRedis);
            insVo.setDeductionClassHours(deductionClassHour);
        }
 
        return insVo;
    }
 
 
    public static List<PurchaseRecordVo> dealDataOfTime(List<PurchaseRecordVo> purchaseRecords) {
        Collections.sort(purchaseRecords, new Comparator<PurchaseRecordVo>() {
            @Override
            public int compare(PurchaseRecordVo record1, PurchaseRecordVo record2) {
                SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm");
                Date date1 = null;
                Date date2 = null;
                try {
                    date1 = dateFormat.parse(record1.getPurchaseTime());
                    date2 = dateFormat.parse(record2.getPurchaseTime());
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                // 倒序排序
                return date2.compareTo(date1);
            }
        });
        return purchaseRecords;
    }
 
 
//    public static List<String> dealDataOfTime(List<String> timeStrings) {
//        Collections.sort(timeStrings, new Comparator<String>() {
//            @Override
//            public int compare(String time1, String time2) {
//                String[] parts1 = time1.split(" ");
//                String[] parts2 = time2.split(" ");
//                String[] dateParts1 = parts1[0].split("-");
//                String[] dateParts2 = parts2[0].split("-");
//                String[] timeParts1 = parts1[1].split(":");
//                String[] timeParts2 = parts2[1].split(":");
//                int month1 = Integer.parseInt(dateParts1[0]);
//                int day1 = Integer.parseInt(dateParts1[1]);
//                int hour1 = Integer.parseInt(timeParts1[0]);
//                int minute1 = Integer.parseInt(timeParts1[1]);
//                int month2 = Integer.parseInt(dateParts2[0]);
//                int day2 = Integer.parseInt(dateParts2[1]);
//                int hour2 = Integer.parseInt(timeParts2[0]);
//                int minute2 = Integer.parseInt(timeParts2[1]);
//                // 倒序排序
//                if (month1 != month2) {
//                    return month2 - month1;
//                } else if (day1 != day2) {
//                    return day2 - day1;
//                } else if (hour1 != hour2) {
//                    return hour2 - hour1;
//                } else {
//                    return minute2 - minute1;
//                }
//            }
//        });
//        return timeStrings;
//    }
}