|
@@ -1,27 +1,51 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
|
|
|
+
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import com.ym.mec.biz.dal.dao.*;
|
|
|
-import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
|
|
|
-import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
|
|
|
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
|
|
|
-import com.ym.mec.util.collection.MapUtil;
|
|
|
-
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
|
|
|
+import com.ym.mec.biz.dal.dao.OrganizationDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SubjectChangeDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SubjectDao;
|
|
|
+import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
+import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
|
|
|
+import com.ym.mec.biz.dal.entity.Goods;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
|
|
|
+import com.ym.mec.biz.dal.entity.Organization;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentRegistration;
|
|
|
+import com.ym.mec.biz.dal.entity.SubjectChange;
|
|
|
import com.ym.mec.biz.dal.enums.DealStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
|
|
|
import com.ym.mec.biz.service.GoodsService;
|
|
|
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
|
|
|
import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
|
|
|
+import com.ym.mec.biz.service.StudentPaymentOrderService;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
+import com.ym.mec.util.collection.MapUtil;
|
|
|
|
|
|
@Service
|
|
|
public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrderDetail> implements StudentPaymentOrderDetailService {
|
|
@@ -51,6 +75,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
|
|
|
@Autowired
|
|
|
private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private StudentPaymentOrderService studentPaymentOrderService;
|
|
|
+
|
|
|
@Override
|
|
|
public BaseDAO<Long, StudentPaymentOrderDetail> getDAO() {
|
|
|
return studentPaymentOrderDetailDao;
|
|
@@ -248,86 +275,123 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
|
|
|
|
|
|
@Override
|
|
|
public List<MusicalListDetailDto> getMusicalListDetail(String musicGroupId, Integer studentId) {
|
|
|
- List<MusicalListDetailDto> musicalListDetailDtos = studentPaymentOrderDetailDao.getMusicalListDetail(musicGroupId, studentId);
|
|
|
- if (musicalListDetailDtos.size() <= 0) {
|
|
|
- return musicalListDetailDtos;
|
|
|
- }
|
|
|
- List<Long> paymentOrderNo = musicalListDetailDtos.stream().map(MusicalListDetailDto::getPaymentOrderId).collect(Collectors.toList());
|
|
|
- List<Integer> userIds = musicalListDetailDtos.stream().distinct().map(MusicalListDetailDto::getUserId).collect(Collectors.toList());
|
|
|
- //商品名称
|
|
|
+
|
|
|
+ List<String> musicGroupIdList = new ArrayList<String>();
|
|
|
+ musicGroupIdList.add(musicGroupId);
|
|
|
+
|
|
|
+ List<StudentRegistration> studentRegistrationList = studentRegistrationDao.findByMusicGroupIds(musicGroupIdList,StudentMusicGroupStatusEnum.NORMAL);
|
|
|
+
|
|
|
+ List<Integer> userIds = studentRegistrationList.stream().distinct().map(StudentRegistration::getUserId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<SubjectChange> subjectChangeList = subjectChangeDao.getStudentGoods(musicGroupId);
|
|
|
+ Map<Integer,SubjectChange> subjectChangeMap = subjectChangeList.stream().collect(Collectors.toMap(SubjectChange :: getStudentId, t -> t));
|
|
|
+
|
|
|
+ List<MusicalListDetailDto> musicalListDetailDtos = new ArrayList<MusicalListDetailDto>();
|
|
|
+ SubjectChange subjectChange = null;
|
|
|
+
|
|
|
MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
|
|
|
Organization organization = organizationDao.get(musicGroup.getOrganId());
|
|
|
- Map<Long, String> goodsNameMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsNames(paymentOrderNo));
|
|
|
Map<Integer, String> usernameMap = MapUtil.convertIntegerMap(teacherDao.queryUsernameByIds(userIds));
|
|
|
- Map<Long, BigDecimal> expectAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDao.queryExpectAmount(paymentOrderNo));
|
|
|
- Map<Long, BigDecimal> musicalAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsPrice(paymentOrderNo, "MUSICAL"));
|
|
|
- Map<Long, BigDecimal> accessoriesAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsPrice(paymentOrderNo, "ACCESSORIES"));
|
|
|
- String courseTypes = Arrays.stream(CourseSchedule.CourseScheduleType.values()).map(CourseSchedule.CourseScheduleType::getCode).collect(Collectors.joining(",")) + ",COURSE";
|
|
|
- Map<Long, BigDecimal> courseAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsPrice(paymentOrderNo, courseTypes));
|
|
|
- Map<Long, String> purchaseTypeMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryPurchaseTypeMap(paymentOrderNo));
|
|
|
Map<Integer, String> userSubjectMap = subjectDao.getRegisterSubject(musicGroupId, userIds).stream().collect(Collectors.toMap(StudentRegistration::getUserId, StudentRegistration::getSubjectName));
|
|
|
- List<StudentPaymentOrderDetail> details = studentPaymentOrderDetailDao.getOrderGoodies(paymentOrderNo);
|
|
|
-
|
|
|
- musicalListDetailDtos.forEach(e -> {
|
|
|
- e.setGoodsNames(goodsNameMap.get(e.getPaymentOrderId()));
|
|
|
- e.setMusicGroupName(musicGroup.getName());
|
|
|
- e.setUsername(usernameMap.get(e.getUserId()));
|
|
|
- e.setOrganName(organization.getName());
|
|
|
- e.setMusicalAmount(musicalAmountMap.get(e.getPaymentOrderId()));
|
|
|
- e.setAccessoriesAmount(accessoriesAmountMap.get(e.getPaymentOrderId()));
|
|
|
- e.setOrderAmount(expectAmountMap.get(e.getPaymentOrderId()));
|
|
|
- e.setCourseAmount(courseAmountMap.get(e.getPaymentOrderId()));
|
|
|
- e.setSubjectName(userSubjectMap.get(e.getUserId()));
|
|
|
- String s = purchaseTypeMap.get(e.getPaymentOrderId());
|
|
|
- if (StringUtils.isNotEmpty(s)) {
|
|
|
- e.setKitGroupPurchaseTypeEnum(KitGroupPurchaseTypeEnum.valueOf(purchaseTypeMap.get(e.getPaymentOrderId())));
|
|
|
- }
|
|
|
- SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(e.getUserId(), musicGroupId);
|
|
|
- if (studentLastChange != null) {
|
|
|
- studentLastChange.setOriginalKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
|
|
|
- }
|
|
|
+ Integer userId = null;
|
|
|
+
|
|
|
+ for(StudentRegistration studentRegistration : studentRegistrationList){
|
|
|
+
|
|
|
+ MusicalListDetailDto dto = new MusicalListDetailDto();
|
|
|
+
|
|
|
+ userId = studentRegistration.getUserId();
|
|
|
+
|
|
|
+ List<StudentPaymentOrder> studentPaymentOrderList = new ArrayList<StudentPaymentOrder>();
|
|
|
+
|
|
|
+ if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
|
|
|
+ StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
|
|
|
+ if (studentPaymentOrder != null) {
|
|
|
+ studentPaymentOrderList.add(studentPaymentOrder);
|
|
|
+ }
|
|
|
|
|
|
- List<Goods> accessories = new ArrayList<>();
|
|
|
- for (StudentPaymentOrderDetail detail : details) {
|
|
|
- if (!e.getPaymentOrderId().equals(detail.getPaymentOrderId())) continue;
|
|
|
- if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
|
|
|
- e.setMusicalName(detail.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining(",")));
|
|
|
- } else {
|
|
|
- accessories.addAll(detail.getGoodsList());
|
|
|
- }
|
|
|
- }
|
|
|
- accessories.sort(Comparator.comparing(Goods::getId));
|
|
|
- e.setAccessoriesName(accessories.stream().map(Goods::getName).collect(Collectors.joining(",")));
|
|
|
- });
|
|
|
- List<SubjectChange> studentGoodies = subjectChangeDao.getStudentGoods(musicGroupId);
|
|
|
- if (studentGoodies.size() <= 0) {
|
|
|
- return musicalListDetailDtos;
|
|
|
- }
|
|
|
- List<SubjectChange> margins = subjectChangeDao.getMargin(musicGroupId);
|
|
|
-
|
|
|
- for (MusicalListDetailDto musicalListDetailDto : musicalListDetailDtos) {
|
|
|
- for (SubjectChange studentGoods : studentGoodies) {
|
|
|
- if (!musicalListDetailDto.getUserId().equals(studentGoods.getStudentId())) continue;
|
|
|
- musicalListDetailDto.setMusicalName("");
|
|
|
- if (studentGoods.getChangeMusicalGoods() != null) {
|
|
|
- musicalListDetailDto.setMusicalName(studentGoods.getChangeMusicalGoods().getName());
|
|
|
- }
|
|
|
- musicalListDetailDto.setAccessoriesName("");
|
|
|
- if (studentGoods.getChangeAccessoriesGoods() != null) {
|
|
|
- List<Goods> changeAccessoriesGoods = studentGoods.getChangeAccessoriesGoods();
|
|
|
- changeAccessoriesGoods.sort(Comparator.comparing(Goods::getId));
|
|
|
- String accessoriesNames = changeAccessoriesGoods.stream().map(Goods::getName).collect(Collectors.joining(","));
|
|
|
- musicalListDetailDto.setAccessoriesName(accessoriesNames);
|
|
|
- }
|
|
|
- musicalListDetailDto.setMusicalAmount(studentGoods.getChangeMusicalPrice());
|
|
|
- musicalListDetailDto.setAccessoriesAmount(studentGoods.getChangeAccessoriesPrice());
|
|
|
- musicalListDetailDto.setKitGroupPurchaseTypeEnum(studentGoods.getKitGroupPurchaseType());
|
|
|
- }
|
|
|
- for (SubjectChange margin : margins) {
|
|
|
- if (!musicalListDetailDto.getUserId().equals(margin.getStudentId())) continue;
|
|
|
- musicalListDetailDto.setOrderAmount(musicalListDetailDto.getOrderAmount().add(margin.getGoodsMargin()));
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(userId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
|
|
|
+ DealStatusEnum.SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> paymentOrderIdList = studentPaymentOrderList.stream().map(t -> t.getId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ Long minPaymentOrderId = Collections.min(paymentOrderIdList);
|
|
|
+
|
|
|
+ List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
|
|
|
+
|
|
|
+ Map<OrderDetailTypeEnum,BigDecimal> userOrderTypeMap = new HashMap<OrderDetailTypeEnum, BigDecimal>();;
|
|
|
+
|
|
|
+ BigDecimal amount = BigDecimal.ZERO;
|
|
|
+ KitGroupPurchaseTypeEnum kitGroupPurchaseType = null;
|
|
|
+ String goodsId = null ,accessoriesId = null ;
|
|
|
+ for(StudentPaymentOrderDetail spod : orderDetailList){
|
|
|
+
|
|
|
+ if (spod.getType() == OrderDetailTypeEnum.COURSE || spod.getType() == OrderDetailTypeEnum.HIGH_ONLINE_COURSE
|
|
|
+ || spod.getType() == OrderDetailTypeEnum.SINGLE || spod.getType() == OrderDetailTypeEnum.VIP
|
|
|
+ || spod.getType() == OrderDetailTypeEnum.HIGH || spod.getType() == OrderDetailTypeEnum.COURSE
|
|
|
+ || spod.getType() == OrderDetailTypeEnum.DEMO || spod.getType() == OrderDetailTypeEnum.COMPREHENSIVE
|
|
|
+ || spod.getType() == OrderDetailTypeEnum.ENLIGHTENMENT || spod.getType() == OrderDetailTypeEnum.TRAINING_SINGLE
|
|
|
+ || spod.getType() == OrderDetailTypeEnum.TRAINING_MIX || spod.getType() == OrderDetailTypeEnum.HIGH_ONLINE
|
|
|
+ || spod.getType() == OrderDetailTypeEnum.MUSIC_NETWORK || spod.getType() == OrderDetailTypeEnum.CLASSROOM) {
|
|
|
+ spod.setType(OrderDetailTypeEnum.COURSE);
|
|
|
+ }else if(spod.getType() == OrderDetailTypeEnum.MUSICAL){
|
|
|
+ kitGroupPurchaseType = spod.getKitGroupPurchaseType();
|
|
|
+ goodsId = spod.getGoodsIdList();
|
|
|
+ }else if(spod.getType() == OrderDetailTypeEnum.ACCESSORIES){
|
|
|
+ accessoriesId = spod.getGoodsIdList();
|
|
|
+ }
|
|
|
+
|
|
|
+ amount = userOrderTypeMap.get(spod.getType());
|
|
|
+ if(amount != null){
|
|
|
+ amount = amount.add(spod.getPrice());
|
|
|
+ }else{
|
|
|
+ amount = spod.getPrice();
|
|
|
+ }
|
|
|
+ userOrderTypeMap.put(spod.getType(), amount);
|
|
|
+ }
|
|
|
+
|
|
|
+ subjectChange = subjectChangeMap.get(studentRegistration.getUserId());
|
|
|
+ if(subjectChange != null && minPaymentOrderId <= subjectChange.getOriginalOrderId()){
|
|
|
+ dto.setAccessoriesAmount(subjectChange.getChangeAccessoriesPrice());
|
|
|
+ dto.setAccessoriesName(subjectChange.getChangeAccessoriesGoods().stream().map(Goods::getName).collect(Collectors.joining(",")));
|
|
|
+
|
|
|
+ dto.setCourseAmount(userOrderTypeMap.get(OrderDetailTypeEnum.COURSE));
|
|
|
+ //dto.setGoodsNames(goodsNames);
|
|
|
+ dto.setKitGroupPurchaseTypeEnum(subjectChange.getKitGroupPurchaseType());
|
|
|
+ dto.setMusicalAmount(subjectChange.getChangeMusicalPrice());
|
|
|
+ dto.setMusicalName(subjectChange.getChangeMusicalGoods().getName());
|
|
|
+ dto.setMusicGroupName(musicGroup.getName());
|
|
|
+ dto.setOrganName(organization.getName());
|
|
|
+ //dto.setOrderAmount(orderAmount);
|
|
|
+ dto.setUserId(userId);
|
|
|
+ dto.setSubjectName(userSubjectMap.get(userId));
|
|
|
+ dto.setUsername(usernameMap.get(userId));
|
|
|
+ }else{
|
|
|
+
|
|
|
+ if(StringUtils.isNoneBlank(accessoriesId)){
|
|
|
+ dto.setAccessoriesName(goodsService.findGoodsByIds(accessoriesId).stream().map(Goods::getName).collect(Collectors.joining(",")));
|
|
|
+ }
|
|
|
+
|
|
|
+ dto.setAccessoriesAmount(userOrderTypeMap.get(OrderDetailTypeEnum.ACCESSORIES));
|
|
|
+ dto.setCourseAmount(userOrderTypeMap.get(OrderDetailTypeEnum.COURSE));
|
|
|
+ dto.setMusicalAmount(userOrderTypeMap.get(OrderDetailTypeEnum.MUSICAL));
|
|
|
+
|
|
|
+ //dto.setGoodsNames(goodsNames);
|
|
|
+ dto.setKitGroupPurchaseTypeEnum(kitGroupPurchaseType);
|
|
|
+ if(StringUtils.isNoneBlank(goodsId)){
|
|
|
+ dto.setMusicalName(goodsService.findGoodsByIds(goodsId).stream().map(Goods::getName).collect(Collectors.joining(",")));
|
|
|
+ }
|
|
|
+ dto.setMusicGroupName(musicGroup.getName());
|
|
|
+ dto.setOrganName(organization.getName());
|
|
|
+ //dto.setOrderAmount(orderAmount);
|
|
|
+ dto.setUserId(userId);
|
|
|
+ dto.setSubjectName(userSubjectMap.get(userId));
|
|
|
+ dto.setUsername(usernameMap.get(userId));
|
|
|
+ }
|
|
|
+ musicalListDetailDtos.add(dto);
|
|
|
}
|
|
|
+
|
|
|
return musicalListDetailDtos;
|
|
|
}
|
|
|
|