package com.dsh.course.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.entity.*; import com.dsh.course.entity.TAppUser; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.StudentClient; import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Student; import com.dsh.course.feignclient.account.model.TCourseInfoRecord; import com.dsh.course.feignclient.account.model.TStudent; import com.dsh.course.feignclient.model.*; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.CoursePackageSchedulingMapper; import com.dsh.course.mapper.CoursePackageStudentMapper; import com.dsh.course.mapper.TCoursePackageMapper; import com.dsh.course.model.*; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.CourseDetailRequest; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.*; import com.dsh.course.model.vo.response.*; import com.dsh.course.service.*; import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.obs.services.internal.ServiceException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @Api @CrossOrigin @RestController @RequestMapping("") public class CoursePackagePaymentController { private Logger logger = LoggerFactory.getLogger("business-log"); @Autowired private TCoursePackagePaymentService packagePaymentService; @Resource private CoursePackageStudentMapper cpsMapper; @Autowired private ICoursePackageOrderService coursePackageOrderService; @Autowired private TCoursePackageService tcpService; @Autowired private TCoursePackageDiscountService tcpdService; @Autowired private ICoursePackagePaymentConfigService icppcService; @Autowired private UserVideoDetailsService uvdsService; @Autowired private TCourseService tcService; @Resource private StudentClient studentClient; @Autowired private TCoursePackageTypeService coursePackageTypeService; @Autowired private TokenUtil tokenUtil; @Autowired private CancelledClassesService cancelledClassesService; @Resource private CoursePackageStudentService cspsService; @Autowired private PayMoneyUtil payMoneyUtil; @Resource private AppUserClient auClitn; @Resource private StoreClient sreClient; @Resource private AppUserClient appUserClient; @Autowired private RestTemplate internalRestTemplate; @Resource private StoreClient storeClient; @Autowired private TCoursePackageDiscountService discountService; @Resource private CoursePackageSchedulingMapper coursePackageSchedulingMapper; @Autowired private ICoursePackageSchedulingService coursePackageSchedulingService; @Autowired private CoursePackageStudentService coursePackageStudentService; @Autowired private TOrderService orderService; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @Autowired private ICoursePackageOrderStudentService coursePackageOrderStudentService; @Autowired private ALiSendSms aLiSendSms; @Resource private AppUserClient appuClient; /** * 查询学员入学时间 根据第一次购买课包的时间 * * @return */ @RequestMapping("/base/coursePackagePayment/getTime") public String getTime(@RequestBody Integer studentId) { List list = packagePaymentService.list(new QueryWrapper() .eq("studentId", studentId) .orderByDesc("insertTime") .last("LIMIT 1")); if (list.size() > 0) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date insertTime = list.get(0).getInsertTime(); String format1 = format.format(list.get(0).getInsertTime()); return format1; } return ""; } /** * 添加购课记录-后台 * * @return */ @RequestMapping("/base/coursePackagePayment/add") public Object addCoursePackagePayment(@RequestBody TCoursePackagePayment packagePayment) { //校验是否已经报满 Integer cpId = Integer.valueOf((int) packagePayment.getCoursePackageId()); Integer integer = coursePackagePaymentService.queryCountNumber(cpId); TCoursePackage course = coursePackageService.getById(packagePayment.getCoursePackageId()); if (course.getType() != 3) { if (integer + 1 > course.getMaxSubscribeNumber()) { return 5001; } } CoursePackageOrder coursePackageOrder = new CoursePackageOrder(); coursePackageOrder.setAppUserId(packagePayment.getAppUserId()); coursePackageOrder.setStudentIds(String.valueOf(packagePayment.getStudentId())); coursePackageOrder.setCoursePackageId(packagePayment.getCoursePackageId()); coursePackageOrder.setClassHours(packagePayment.getClassHours()); coursePackageOrder.setOriginalPrice(packagePayment.getOriginalPrice()); coursePackageOrder.setCashPayment(packagePayment.getCashPayment()); coursePackageOrder.setPlayPaiCoin(packagePayment.getPlayPaiCoin()); coursePackageOrder.setCode(packagePayment.getCode()); coursePackageOrder.setPayStatus(1); coursePackageOrder.setStatus(1); coursePackageOrder.setState(1); coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setSalesName(packagePayment.getSalesName()); coursePackageOrderService.save(coursePackageOrder); // 生成排课数据 return 200; } /** * 手动支付 * * @return */ @RequestMapping("/base/coursePackagePayment/changeState") public Object changeState(@RequestBody CoursePackagePayDTO dto) { String ids = dto.getIds(); Long aLong = Long.valueOf(ids); CoursePackageOrder byId1 = coursePackageOrderService.getById(aLong); TCoursePackage byId = coursePackageService.getById(byId1.getCoursePackageId()); if (byId.getType()==1){ // 如果重复购买 累加课时 CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService .getOne(new QueryWrapper().eq("studentId", Integer.valueOf(byId1.getStudentIds())) .eq("coursePackageId", byId1.getCoursePackageId()).eq("status", 1).eq("state", 1)); if (null == coursePackageOrderStudent) { coursePackageOrderStudent = new CoursePackageOrderStudent(); coursePackageOrderStudent.setAppUserId(byId1.getAppUserId()); coursePackageOrderStudent.setStudentId(Integer.valueOf(byId1.getStudentIds())); coursePackageOrderStudent.setCoursePackageId(byId1.getCoursePackageId()); coursePackageOrderStudent.setTotalClassHours(byId1.getClassHours()); coursePackageOrderStudent.setLaveClassHours(byId1.getClassHours()); coursePackageOrderStudent.setAbsencesNumber(0); coursePackageOrderStudent.setStatus(1); coursePackageOrderStudent.setState(1); coursePackageOrderStudent.setInsertTime(new Date()); // 判断这个订单购买的是哪一个课时规格 CoursePackagePaymentConfig one1 = icppcService.getOne(new QueryWrapper() .eq("coursePackageId", byId.getId()) .eq("classHours", byId1.getClassHours())); // 判断当前购买的课包有没有赠送课时 TCoursePackageDiscount one = tcpdService.getOne(new QueryWrapper().eq("coursePackageId", byId.getId()) .eq("type", 4).eq("auditStatus", 2).eq("status", 1) .eq("coursePackagePaymentConfigId",one1.getId())); if (one!=null){ Integer giftClassHours = getGiftClassHours(one,null); coursePackageOrderStudent.setGiftClassHours(giftClassHours); coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours()+giftClassHours); coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours()+giftClassHours); }else{ coursePackageOrderStudent.setGiftClassHours(0); } Integer validDays = byId.getValidDays(); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays); coursePackageOrderStudent.setUseTime(calendar.getTime()); coursePackageOrderStudent.setInsertTime(new Date()); coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent); Integer studentId = Integer.valueOf(byId1.getStudentIds()); //开始排课 addPackageStudent1(byId, byId1.getAppUserId(), studentId, byId1, coursePackageOrderStudent); } else { Date useTime = coursePackageOrderStudent.getUseTime(); coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + byId1.getClassHours()); coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + byId1.getClassHours()); Integer validDays = byId.getValidDays(); Calendar calendar = Calendar.getInstance(); calendar.setTime(useTime.compareTo(new Date()) < 0 ? new Date() : useTime); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays); coursePackageOrderStudent.setUseTime(calendar.getTime()); // 判断这个订单购买的是哪一个课时规格 CoursePackagePaymentConfig one1 = icppcService.getOne(new QueryWrapper() .eq("coursePackageId", byId.getId()) .eq("classHours", byId1.getClassHours())); // 判断当前购买的课包有没有赠送课时 TCoursePackageDiscount one = tcpdService.getOne(new QueryWrapper().eq("coursePackageId", byId.getId()) .eq("type", 4).eq("auditStatus", 2).eq("status", 1) .eq("coursePackagePaymentConfigId",one1.getId())); if (one!=null){ Integer giftClassHours = getGiftClassHours(one,null); coursePackageOrderStudent.setGiftClassHours(giftClassHours); }else{ coursePackageOrderStudent.setGiftClassHours(0); } // 获取常规课的有效期 计算是哪一天 Calendar calendar9 = Calendar.getInstance(); calendar9.add(Calendar.DAY_OF_MONTH, byId.getValidDays()); Date time = calendar9.getTime(); coursePackageOrderStudent.setUseTime(time); coursePackageOrderStudent.setInsertTime(new Date()); coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent); Integer studentId = Integer.valueOf(byId1.getStudentIds()); //中间断课,没有连续续费的情况需要重新排课 if (useTime.compareTo(new Date()) < 0) { addPackageStudent1(byId, byId1.getAppUserId(), studentId, byId1, coursePackageOrderStudent); } } } if(byId.getType() == 2){ addPackageStudent1(byId, byId1.getAppUserId(), Integer.valueOf(byId1.getStudentIds()), byId1, null); } return packagePaymentService.changeState(dto); } @GetMapping("/coursePackagePayment/courseStore/{appUserId}/{coursePackageId}") public List getByUserIdAndCoursePackageId(@PathVariable("appUserId") Integer appUserId, @PathVariable("coursePackageId") Integer coursePackageId) { List list = coursePackageOrderStudentService.list(new QueryWrapper() .eq("appUserId", appUserId) .eq("coursePackageId", coursePackageId)); return list; } /** * 获取购课记录 */ @ResponseBody @RequestMapping("/coursePackagePayment/listAll") public List listAll(@RequestBody CoursePackagePaymentQuery query) { List res = packagePaymentService.listAll(query); List result = new ArrayList<>(); for (CoursePackagePaymentVO re : res) { // 判断这条记录有没有赠送课时 Integer coursePackageId = re.getCoursePackageId(); Integer classHours = re.getClassHours(); CoursePackagePaymentConfig one = icppcService.getOne(new QueryWrapper() .eq("coursePackageId", coursePackageId) .eq("classHours", classHours)); if (one!=null){ TCoursePackageDiscount one1 = discountService.getOne(new QueryWrapper().eq("coursePackageId", coursePackageId) .eq("coursePackagePaymentConfigId", one.getId()) .eq("auditStatus",2).eq("status",1).eq("type",4)); if (one1 == null){ re.setGiftClassHours(0); }else{ Integer giftClassHours = getGiftClassHours(one1,re.getInsertTime()); re.setGiftClassHours(giftClassHours); } }else{ re.setGiftClassHours(0); } if (re.getCashPayment() == null) { if (re.getPlayPaiCoin() != null) { String value = String.valueOf(re.getPlayPaiCoin()); re.setCashPayment(new BigDecimal(value)); } } Store store = storeClient.queryStoreById(re.getStoreId()); TAppUser appUser = appUserClient.queryAppUser1(re.getAppUserId()); String studentId = re.getStudentId(); String[] split = studentId.split(";"); StringBuilder stringBuilder = new StringBuilder(""); for (String s : split) { Student student = studentClient.queryStudentById(Integer.valueOf(s)); stringBuilder.append(student.getName()+","); } String string = stringBuilder.toString(); if (string.length() > 0) { String stringWithoutLastCharacter = string.substring(0, string.length() - 1); re.setPayStudent(stringWithoutLastCharacter); } re.setPayUser(appUser.getName()); re.setPhone(appUser.getPhone()); re.setStoreName(store.getName()); if (query.getPayUser() == null || query.getPayUser().equals("")) { } else { List appUsers = appUserClient.queryAppUserListByName(query.getPayUser()); for (AppUser user : appUsers) { if (appUser.getName().equals(user.getName())) { if (query.getPayStudent() == null || query.getPayStudent().equals("")) { } else { List students = studentClient.queryStudentListByName(query.getPayStudent()); for (Student student1 : students) { if (string.contains(student1.getName())) { result.add(re); } } } } } } if (re.getPayType() != null) { if (re.getPayType() == 1) { re.setBuyTypeName("微信支付"); } else if (re.getPayType() == 2) { re.setBuyTypeName("支付宝支付"); } else if (re.getPayType() == 3) { re.setBuyTypeName("玩湃币支付"); } else if (re.getPayType() == 4) { re.setBuyTypeName("积分支付"); } else if (re.getPayType() == 5) { re.setBuyTypeName("积分+微信支付"); } else if (re.getPayType() == 6) { re.setBuyTypeName("积分+支付宝支付"); } else if (re.getPayType() == 7) { re.setBuyTypeName("手动支付" + "-" + re.getBuyTypeName()); } } // 如果支付用户类型为管理员 则购买方式则为1线下购买 if (re.getPayUserType() != null) { if (re.getPayUserType() == 2) { re.setBuyType(1); } else { // 如果当前课包有折扣 则为3折扣购买 if (discountService.list(new QueryWrapper() .eq("coursePackageId", re.getCoursePackageId()).eq("auditStatus", 2)).size() > 0) { re.setBuyType(3); re.setDiscountAmount(re.getOriginalPrice().subtract(re.getCashPayment())); } else { re.setBuyType(2); } } } if (re.getCashPayment() == null) { BigDecimal bigDecimal = new BigDecimal("0.00"); re.setDiscountAmount(bigDecimal); continue; } BigDecimal subtract = re.getOriginalPrice().subtract(re.getCashPayment()); re.setDiscountAmount(subtract); } if (query.getPayStudent() == null || query.getPayStudent().equals("")) { if (query.getPayUser() == null || query.getPayUser().equals("")) { return res; } else { return result; } } else { return result; } } /** * 获取报名订单记录列表 */ @ResponseBody @RequestMapping("/registerOrder/listAllRegister") public List listAllRegister(@RequestBody RegisterOrderQuery query) { if (query.getStudentName() != null) { if (!query.getStudentName().equals("")) { List students1 = studentClient.queryTStudentListByName(query.getStudentName()); List studentIds = students1.stream().map(TStudent::getId).collect(Collectors.toList()); query.setStudentIds(studentIds); if (students1.size() == 0) { return new ArrayList<>(); } } } List res = packagePaymentService.listAllRegister(query); // 该运营商下没有门店 if (query.getInsertType() == 2) { if (query.getStoresIds() != null) { if (query.getStoresIds().size() == 0) { List registerOrderVOS = new ArrayList<>(); return registerOrderVOS; } } else { List registerOrderVOS = new ArrayList<>(); return registerOrderVOS; } } List result = new ArrayList<>(); Iterator iterator = res.iterator(); while (iterator.hasNext()) { RegisterOrderVO re = iterator.next(); if (re.getSalesName() == null) { re.setSalesName("无"); } if (re.getPayType() != null) { if (re.getPayType() == 3) { re.setPayMoneyAndType(re.getPlayPaiCoin() + "玩湃币"); } else { re.setPayMoneyAndType("¥" + re.getMoney()); } } if (re.getStoreId() != null) { Store store = storeClient.queryStoreById(re.getStoreId()); if (store != null) { re.setStoreName(store.getName()); } } TAppUser appUser = appUserClient.queryAppUser1(re.getAppUserId()); String[] split = re.getStudentIds().split(","); Student student = studentClient.queryStudentById(Integer.valueOf(split[0])); re.setPayStudent(student.getName()); re.setPayUser(appUser.getName()); re.setPhone(appUser.getPhone()); } return res; } /** * 获取 没有学员信息的图片配置 * * @param stuId 学员id * @return 课包列表 */ @ResponseBody @PostMapping("/base/coursePack/queryPayment") public List getStuCoursePackagePayment(@RequestBody Integer stuId) { List resps = new ArrayList<>(); Student student = studentClient.queryStudentById(stuId); List byUserId = coursePackageOrderStudentService.list(new QueryWrapper() .eq("appUserId", student.getAppUserId()) .eq("studentId", stuId)); Date date = new Date(); if (byUserId.size() > 0) { for (CoursePackageOrderStudent tCoursePackagePayment : byUserId) { TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); if (tCoursePackagePayment.getUseTime() != null) { if (tCoursePackagePayment.getUseTime().after(date)) { date = tCoursePackagePayment.getUseTime(); } } if (tCoursePackage.getType() == 3) { continue; } StuCourseResp resp = new StuCourseResp(); resp.setCourseId(tCoursePackage.getId()); resp.setId(tCoursePackagePayment.getId()); resp.setCourseName(tCoursePackage.getName()); resp.setTotalCourseNums(tCoursePackagePayment.getTotalClassHours()); resp.setResidueNums(tCoursePackagePayment.getLaveClassHours()); resp.setDeductionNums(tCoursePackagePayment.getTotalClassHours() - tCoursePackagePayment.getLaveClassHours()); resp.setCourseType(tCoursePackage.getType()); if (tCoursePackage.getType() != 1 || tCoursePackage.getState() == 2) { resp.setIsAble(0); } else { resp.setIsAble(1); } if (tCoursePackagePayment.getUseTime() != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String str = sdf.format(tCoursePackagePayment.getUseTime()); resp.setPeriodOfValidity(str); } resps.add(resp); } } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String str = sdf.format(date); for (StuCourseResp resp : resps) { resp.setPeriodOfValidity(str); } return resps; } /** * 获取发布的 课包列表 */ @ResponseBody @PostMapping("/base/coursePack/storeOfCourse") public List getStuCourseWithStores(@RequestBody WeeksOfCourseRest courseRest) { List course = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date parse = simpleDateFormat.parse(courseRest.getTime()); List list = packagePaymentService.list(new QueryWrapper() .eq("appUserId", courseRest.getAppUserId()) .eq("studentId", courseRest.getStuId()) .eq("payStatus", 2) .eq("status", 1) .eq("state", 1) .groupBy("coursePackageId")); if (list.size() > 0) { for (TCoursePackagePayment tCoursePackagePayment : list) { List packageStudent = cspsService.list(new LambdaQueryWrapper() .eq(CoursePackageStudent::getAppUserId, courseRest.getAppUserId()) .eq(CoursePackageStudent::getStudentId, courseRest.getStuId()) .eq(CoursePackageStudent::getCoursePackagePaymentId, tCoursePackagePayment.getId()) .eq(CoursePackageStudent::getCoursePackageId, tCoursePackagePayment.getCoursePackageId())); if (ToolUtil.isEmpty(packageStudent) || (ToolUtil.isNotEmpty(packageStudent) && packageStudent.get(0).getReservationStatus() == 1)) { // 没有预约过的/已经取消了的 TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); CoursePackagePaymentConfig paymentConfig = icppcService.getOne(new QueryWrapper() .eq("coursePackageId", tCoursePackage.getId()) .eq("classHours", tCoursePackagePayment.getClassHours())); // 获取课程有效结束时间,判断 查询的日期parse 是否在有效期范围内 Date expirationDate = DateTimeHelper.getExpirationDate(tCoursePackagePayment.getInsertTime(), tCoursePackage.getValidDays()); System.out.println(expirationDate.after(parse)); String classWeeks = tCoursePackage.getClassWeeks(); System.out.println(StrUtils.dealStrToList(classWeeks).contains(DateTimeHelper.getDayOfWeek(parse))); if (expirationDate.after(parse) && StrUtils.dealStrToList(classWeeks).contains(DateTimeHelper.getDayOfWeek(parse))) { CourseOfStoreVo storeVo = new CourseOfStoreVo(); storeVo.setCourseId(tCoursePackagePayment.getId()); storeVo.setCourseName(tCoursePackage.getName()); storeVo.setClassStartTime(tCoursePackage.getClassStartTime()); storeVo.setClassEndTime(tCoursePackage.getClassEndTime()); storeVo.setStoreId(tCoursePackage.getStoreId()); Store store = sreClient.queryStoreById(tCoursePackage.getStoreId()); storeVo.setStoreAddress(store.getAddress()); storeVo.setLat(store.getLat()); storeVo.setLon(store.getLon()); storeVo.setCoursePrice(ToolUtil.isEmpty(paymentConfig.getCashPayment()) ? (double) paymentConfig.getPlayPaiCoin() : paymentConfig.getCashPayment()); storeVo.setStatus(1); // 2.0 storeVo.setAllNum(tCoursePackagePayment.getTotalClassHours()); storeVo.setLastNum(tCoursePackagePayment.getLaveClassHours()); storeVo.setUseNum(tCoursePackagePayment.getTotalClassHours() - tCoursePackagePayment.getLaveClassHours()); course.add(storeVo); } } } } System.out.println(course); return course; } catch (ParseException e) { return null; } } @Autowired private ICoursePackageOrderStudentService orderStudentService; /** * 课程名称列表 */ @PostMapping("/base/coursePack/sessionNames") public List getStuSessionList(@RequestBody CourseDetailRequest request) { List detailsVos = new ArrayList<>(); List byUserId = orderStudentService.list(new QueryWrapper() .between("insertTime", request.getStartTime(), request.getEndTime()) .eq("appUserId", request.getAppUserId()) .eq("studentId", request.getStuId())); if (byUserId.size() > 0) { List collect = byUserId.stream().map(CoursePackageOrderStudent::getCoursePackageId).collect(Collectors.toList()); List list = tcpService.list(new QueryWrapper() .in("id", collect)); byUserId.forEach(vo -> { StuSessionDetailsVo detVo = new StuSessionDetailsVo(); detVo.setSessionid(vo.getCoursePackageId()); TCoursePackage byId = coursePackageService.getById(vo.getCoursePackageId()); detVo.setSessionName(byId.getName()); // String afterDayDate = DateUtil.getAfterDayDate2(vo.getInsertTime(), vo.getValidDays() + ""); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String format1 = simpleDateFormat.format(vo.getUseTime()); detVo.setPeriodOfValidity(format1); detVo.setTotalNums(vo.getTotalClassHours()); detVo.setDeductedNums(vo.getTotalClassHours() - vo.getLaveClassHours()); detVo.setRemainingNums(vo.getLaveClassHours()); detailsVos.add(detVo); }); // list.forEach(vo -> { // StuSessionDetailsVo detVo = new StuSessionDetailsVo(); // if (vo.getType()!=2) { // detVo.setSessionid(vo.getId()); // detVo.setSessionName(vo.getName()); // String afterDayDate = DateUtil.getAfterDayDate2(vo.getInsertTime(), vo.getValidDays() + ""); // detVo.setPeriodOfValidity(afterDayDate); // // detVo.setTotalNums(ToolUtil.isEmpty(tCoursePackagePayment.getTotalCourseNums()) ? 0 : tCoursePackagePayment.getTotalCourseNums()); // detVo.setDeductedNums(ToolUtil.isEmpty(tCoursePackagePayment.getDeductionNums()) ? 0 : tCoursePackagePayment.getDeductionNums()); // detVo.setRemainingNums(ToolUtil.isEmpty(tCoursePackagePayment.getResidueNums())? 0 : tCoursePackagePayment.getResidueNums()); // // detailsVos.add(detVo); // } // }); } return detailsVos; } @PostMapping("/base/coursePack/paymentCourse") public List queryCourseDetails(@RequestBody GetStuSessionList sessionList) { List purchaseRecordVos = new ArrayList<>(); List coursePackage = packagePaymentService.list(new QueryWrapper() .between("insertTime", sessionList.getStartTime(), sessionList.getEndTime()) .eq("appUserId", sessionList.getAppUserId()) .eq("studentId", sessionList.getStuId())); if (coursePackage.size() > 0) { coursePackage.forEach(cspackage -> { PurchaseRecordVo recordVo = new PurchaseRecordVo(); recordVo.setPurchaseAmount("+" + cspackage.getClassHours()); recordVo.setPurchaseTime(format.format(cspackage.getInsertTime())); recordVo.setPurchaseType("购买课包"); purchaseRecordVos.add(recordVo); }); } return purchaseRecordVos; } @Autowired private CourseCounsumService courseCounsumService; @Autowired private TCoursePackagePaymentService coursePackagePaymentService; @PostMapping("/base/coursePack/getRecord") public List getRecord(@RequestBody RecordTimeRequest recordTimeRequest) { // List list = new ArrayList<>(); Integer[] changes = {1, 0}; // if (recordTimeRequest.getType() == null) { // list = coursePackageOrderStudentService.list(new QueryWrapper().eq("studentId", recordTimeRequest.getStuId()).eq("coursePackageId", recordTimeRequest.getLessionId()).orderByDesc("insertTime")); // } else { // // list = coursePackageOrderStudentService.list(new QueryWrapper().eq("studentId", recordTimeRequest.getStuId()).eq("coursePackageId", recordTimeRequest.getLessionId()).orderByDesc("insertTime")); // } // List appUserIds = list.stream().map(CoursePackageOrderStudent::getAppUserId).collect(Collectors.toList()); List list1 = coursePackageOrderStudentService.list(new QueryWrapper() .eq("studentId", recordTimeRequest.getStuId()) .eq("coursePackageId", recordTimeRequest.getLessionId()) .eq("state", 1) ); List collect = list1.stream().map(CoursePackageOrderStudent::getId).collect(Collectors.toList()); QueryWrapper in = new QueryWrapper().in("paymentId", collect).in("changeType", changes); if (recordTimeRequest.getType() != null) { if (recordTimeRequest.getType() == 2) { recordTimeRequest.setType(0); } in.eq("changeType", recordTimeRequest.getType()); } List paymentId = courseCounsumService.list(in); List recordVos = new ArrayList<>(); for (CourseCounsum courseCounsum : paymentId) { PurchaseRecordVo purchaseRecordVo = new PurchaseRecordVo(); if (courseCounsum.getChangeType() == 0) { purchaseRecordVo.setPurchaseAmount("-" + courseCounsum.getNum()); purchaseRecordVo.setPurchaseType(courseCounsum.getReason()); SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm"); String formattedDate = sdf.format(courseCounsum.getInsertTime()); purchaseRecordVo.setPurchaseTime(formattedDate); } else { purchaseRecordVo.setPurchaseAmount("+" + courseCounsum.getNum()); purchaseRecordVo.setPurchaseType(courseCounsum.getReason()); SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm"); String formattedDate = sdf.format(courseCounsum.getInsertTime()); purchaseRecordVo.setPurchaseTime(formattedDate); } recordVos.add(purchaseRecordVo); } return recordVos; } @PostMapping("/base/coursePack/stuOfCourses") public StuWithCoursesListVo getStuOfCoursesDetails(@RequestBody GetStuOfCoursesDetails getStuOfCoursesDetails) { StuWithCoursesListVo lisco = new StuWithCoursesListVo(); Integer totalNu = 0; Integer dedutNu = 0; Integer remainNu = 0; List byUserId = coursePackageOrderStudentService.list(new QueryWrapper() .eq("appUserId", getStuOfCoursesDetails.getAppUserId()) .eq("studentId", getStuOfCoursesDetails.getStuId())); if (byUserId.size() > 0) { for (CoursePackageOrderStudent tCoursePackagePayment : byUserId) { totalNu = totalNu + tCoursePackagePayment.getTotalClassHours(); dedutNu = dedutNu + tCoursePackagePayment.getLaveClassHours(); remainNu = remainNu + (tCoursePackagePayment.getTotalClassHours() - tCoursePackagePayment.getLaveClassHours()); } lisco.setTotalNums(totalNu); lisco.setDeductedNums(remainNu); lisco.setRemainingNums(dedutNu); } return lisco; } @PostMapping("/base/coursePack/continuingCourse") public StudentOfCourseVo getStudentCourse(@RequestBody GetStudentCourse getStudentCourse) { StudentOfCourseVo courseVo = new StudentOfCourseVo(); List tCoursePackagePayments = packagePaymentService.list(new QueryWrapper() .eq("appUserId", getStudentCourse.getAppUserId()) .eq("coursePackageId", getStudentCourse.getCourseId()) .eq("studentId", getStudentCourse.getStuId())); if (tCoursePackagePayments.size() > 0) { List typeList = new ArrayList<>(); tCoursePackagePayments.forEach(cou -> { CourseHoursType hoursType = new CourseHoursType(); hoursType.setCourseConfigId(cou.getId()); hoursType.setCourseHourNums(cou.getClassHours()); typeList.add(hoursType); }); TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0); courseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); courseVo.setTypeList(typeList); TCoursePackage coursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); courseVo.setPackageImg(coursePackage.getCoverDrawing()); courseVo.setCourseName(coursePackage.getName()); courseVo.setCoachId(coursePackage.getCoachId()); String classWeeks = coursePackage.getClassWeeks(); List integers = StrUtils.dealStrToList(classWeeks); if (integers.size() > 0) { StringBuilder courWeeks = new StringBuilder("每"); for (Integer integer : integers) { courWeeks.append(integer).append("、"); } if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == '、') { courWeeks.deleteCharAt(courWeeks.length() - 1); } courseVo.setCourseWeek(courWeeks.toString()); } courseVo.setCourseTime(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime()); Integer payType = tCoursePackagePayment.getPayType(); BigDecimal cashPayment = tCoursePackagePayment.getCashPayment(); double cashPaymentValue = cashPayment.doubleValue(); Integer playPaiCoin = tCoursePackagePayment.getPlayPaiCoin(); TCoursePackageDiscount coursePackageDiscount = tcpdService.getOne(new QueryWrapper() .eq("coursePackageId", coursePackage.getId()) .eq("type", 1) .eq("auditStatus", 2)); ObjectMapper objectMapper = new ObjectMapper(); String content = coursePackageDiscount.getContent(); double discountMember = 0.0; DiscountJsonDto discountJsonDto = null; try { discountJsonDto = objectMapper.readValue(content, DiscountJsonDto.class); discountMember = discountJsonDto.getDiscountMember(); } catch (JsonProcessingException e) { throw new RuntimeException(e); } switch (payType) { case 1: case 2: courseVo.setAmount(cashPaymentValue); courseVo.setVipAmount(discountMember); break; case 3: courseVo.setWpGold(playPaiCoin); break; } courseVo.setStoreId(coursePackage.getStoreId()); } return courseVo; } @PostMapping("/base/coursePack/afterCourseTwos") public List getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId) { List videoVos = new ArrayList<>(); List list = uvdsService.list(new QueryWrapper() .eq("appUserId", appUserId) .eq("state", 1)); if (list.size() > 0) { List courseIds = list.stream().map(UserVideoDetails::getCourseId).collect(Collectors.toList()); List courseList = tcService.list(new QueryWrapper() .in("id", courseIds) .eq("type", 1) .eq("state", 1) .last("ORDER BY insertTime desc LIMIT 2")); for (TCourse tCourse : courseList) { AfterVideoVo videoVo = new AfterVideoVo(); videoVo.setCourseId(tCourse.getId()); videoVo.setCourseUrl(tCourse.getCourseVideo()); videoVos.add(videoVo); } } return videoVos; } @PostMapping("/base/coursePack/allPaymentCourseList") @ResponseBody public List getAppuserCourseList(@RequestBody Integer appUserId) { List paymentVos = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // List list = packagePaymentService.list(new QueryWrapper() // .eq("appUserId", appUserId) // .eq("payType", 3) // .eq("payStatus", 2) // .eq("state", 1)); List list = coursePackageOrderService.list(new QueryWrapper().eq("appUserId", appUserId).eq("payType", 3) .eq("payStatus", 2) .eq("state", 1)); if (list.size() > 0) { for (CoursePackageOrder tCoursePackagePayment : list) { CouponPaymentVo couponPaymentVo = new CouponPaymentVo(); couponPaymentVo.setTime(simpleDateFormat.format(tCoursePackagePayment.getInsertTime())); couponPaymentVo.setAmount(tCoursePackagePayment.getPlayPaiCoin()); paymentVos.add(couponPaymentVo); } } return paymentVos; } @ResponseBody @PostMapping("/base/coursePack/allAmountPayRecordOfUser") public BillingRequestVo getAmountPayRecord(@RequestBody BillingDataRequestVo billingDataRequestVo) { BillingRequestVo requestVo = new BillingRequestVo(); List billingRequests = packagePaymentService.queryAmountDatas(billingDataRequestVo.getAppUserId(), billingDataRequestVo.getMonthStart(), billingDataRequestVo.getMonthEnd()); if (billingRequests.size() > 0) { requestVo.setRequests(billingRequests); } return requestVo; } @ResponseBody @PostMapping("/api/course/queryArrangeCourseList") @ApiOperation(value = "课后练习-获取布置课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ }) public ResultUtil> queryArrangePackageType() { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } List tCoursePackagePayments = packagePaymentService.list(new QueryWrapper() .eq("appUserId", appUserId)); List list = new ArrayList<>(); tCoursePackagePayments.forEach(c -> { BaseVo baseVo = new BaseVo(); baseVo.setId(c.getCoursePackageId()); TCoursePackage coursePackage = tcpService.getById(c.getCoursePackageId()); baseVo.setName(coursePackage.getName()); list.add(baseVo); }); Set set = new HashSet<>(list); List back = new ArrayList<>(set); return ResultUtil.success(back); } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); } } /** * 课后视频课表 */ @ResponseBody @PostMapping("/api/startCource/afterSourceList") @ApiOperation(value = "课后练习-课后视频列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil> queryAfterSourceList(CourseOfAfterRequest search) throws Exception { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } QueryWrapper queryWrapper1 = new QueryWrapper().eq("studentId", search.getStuId()); if (ToolUtil.isNotEmpty(search.getCourseTypeId())) { queryWrapper1.eq("coursePackageId", search.getCourseTypeId()); } List list = coursePackageStudentService.list(queryWrapper1); List longs = new ArrayList<>(); for (CoursePackageStudent coursePackageStudent : list) { longs.add(coursePackageStudent.getCoursePackageSchedulingId()); } System.out.println("======longs========" + longs); List coursePackageSchedulings1 = coursePackageSchedulingService.queryAll(longs); if (search.getSearch() != null) { List filteredList = new ArrayList<>(); for (AppUserVideoResponse response : coursePackageSchedulings1) { if (response.getVideoName().contains(search.getSearch())) { filteredList.add(response); } } return ResultUtil.success(filteredList); } return ResultUtil.success(coursePackageSchedulings1); } /** * 课后视频详情 */ @ResponseBody @PostMapping("/api/startCource/afterSourceDetail") @ApiOperation(value = "课后练习-课后视频详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil queryAfterSourceDetails(CourseWithDetailsRequest detailsRequest) { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryVideoDetails(detailsRequest, appUserId)); } catch (Exception e) { return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/startCource/payCourseInfo") @ApiOperation(value = "课后练习-购课详情(用于购课)", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil payCourseInfo(Integer courseId) { try { PayCourseInfoReq payCourseInfoReq = packagePaymentService.payCourseInfo(courseId); // Arrays.sort(payCourseInfoReq.getDay(), (a, b) -> a.compareTo(b)); Collections.sort(payCourseInfoReq.getDay(), Comparator.comparing(String::toString)); return ResultUtil.success(payCourseInfoReq); } catch (Exception e) { return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/startCource/getMyCourseList") @ApiOperation(value = "课后练习-可支付课程列表(用于购课)", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil> getMyCourseList(Integer storeId) { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.getMyCourseList(storeId, appUserId)); } catch (Exception e) { return ResultUtil.runErr(); } } // 2.0 @ResponseBody @PostMapping("/api/startCource/payCourse") @ApiOperation(value = "课后练习-确认购课", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil payCourse(PayCourseReq req) { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } return packagePaymentService.payCourse(req, appUserId); } catch (Exception e) { return ResultUtil.runErr(); } } /** * 更新课后视频学习状态 */ @ResponseBody @PostMapping("/api/startCource/updateVideoStatus") @ApiOperation(value = "更新课后视频学习状态", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest) { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.updateVideoStatus(detailsRequest, appUserId)); } catch (Exception e) { return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/course/getCourseAppUserDetails") @ApiOperation(value = "已报名课程-获取课程类型列表", tags = {"APP-课程列表"}) @ApiImplicitParams({ }) public ResultUtil> queryCoursePackageType() { try { List coursePackageTypes = coursePackageTypeService.list(new QueryWrapper().eq("state", 1)); List list = new ArrayList<>(); coursePackageTypes.forEach(c -> { BaseVo baseVo = new BaseVo(); BeanUtils.copyProperties(c, baseVo); list.add(baseVo); }); return ResultUtil.success(list); } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); } } /** * 已报名课程列表 */ @ResponseBody @PostMapping("/api/startCource/registeredCourses") @ApiOperation(value = "已报名课程-课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil> queryRegisteredCoursesDetails(CourseOfAfterRequest courseTypeId) { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } return ResultUtil.success(coursePackageOrderService.queryRegisteredCourseList(courseTypeId, appUserId)); } catch (Exception e) { return ResultUtil.runErr(); } } /** * 已报名课程详情 */ @ResponseBody @PostMapping("/api/startCource/RegisteredData") @ApiOperation(value = "已报名课程详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "经度", name = "lon", dataType = "string", required = false), @ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = false), @ApiImplicitParam(name = "coursePayId", value = "课包记录id", dataType = "long"), @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "int") }) public ResultUtil getRegisteredData(Long coursePayId, String lon, String lat) { try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } CourseDetailsResponse courseDetailsResponse = packagePaymentService.queryRegisteredCourseDetails(coursePayId, appUserId, lon, lat); // // if (orderId != null) { // TOrder byId = orderService.getById(orderId); // courseDetailsResponse.setAmount(byId.getPrice()); // } return ResultUtil.success(courseDetailsResponse); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } } /** * 已报名课程-支付 */ @ResponseBody @PostMapping("/api/startCource/payment") @ApiOperation(value = "已报名课程-支付", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil continuationOperation(ClasspaymentRequest request) { try { Integer userId = tokenUtil.getUserIdFormRedis(); if (null == userId) { return ResultUtil.tokenErr(); } Integer couponId = request.getConponId(); if (couponId == null || couponId == 0) { request.setConponId(null); } return packagePaymentService.ContinuationOrpaymentCourse(userId, request); } catch (Exception e) { return ResultUtil.runErr(); } } /** * 课包续课支付宝支付回调接口 */ @PostMapping("/base/coursePackage/alipayRegisteredCoursesCallback") public void alipayCallback(HttpServletRequest request, HttpServletResponse response) { try { Map map = payMoneyUtil.alipayCallback(request); if (null != map) { String out_trade_no = map.get("out_trade_no"); String transaction_id = map.get("transaction_id"); ResultUtil resultUtil = packagePaymentService.insertVipPaymentCallback(out_trade_no, transaction_id); if (resultUtil.getCode() == 200) { PrintWriter out = response.getWriter(); out.write("success"); out.flush(); out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 课包续课微信支付回调接口 */ @PostMapping("/base/coursePackage/wechatRegisteredCoursesCallback") public void weChatCallback(HttpServletRequest request, HttpServletResponse response) { try { Map map = payMoneyUtil.weixinpayCallback(request); if (null != map) { String out_trade_no = map.get("out_trade_no"); String transaction_id = map.get("transaction_id"); String result = map.get("result"); ResultUtil resultUtil = packagePaymentService.insertVipPaymentCallback(out_trade_no, transaction_id); if (resultUtil.getCode() == 200) { PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 获取学员剩余课时 * * @param id * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryResidueClassHour") public Integer queryResidueClassHour(@RequestBody Integer id) { try { List list = packagePaymentService.list(new QueryWrapper().eq("studentId", id).eq("payStatus", 2) .eq("status", 1).eq("state", 1).gt("laveClassHours", 0)); Integer total = 0; for (TCoursePackagePayment coursePackagePayment : list) { total += coursePackagePayment.getLaveClassHours(); } return total; } catch (Exception e) { e.printStackTrace(); return 0; } } /** * 获取学员剩余课时 * * @param id * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryResidueClassHourById") public Integer queryResidueClassHourById(@RequestBody Long id) { try { CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getById(id); return coursePackageOrderStudent.getLaveClassHours(); } catch (Exception e) { e.printStackTrace(); return 0; } } public static Date[] generateDateArray(int numDays, Date date) { // LocalDate tomorrow = LocalDate.now().plusDays(1); LocalDate tomorrow = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1); Date[] dates = new Date[numDays]; for (int i = 0; i < numDays; i++) { LocalDate currentDate = tomorrow.plusDays(i); dates[i] = Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return dates; } @Autowired private TCoursePackageService packageService; @Autowired CoursePackageStudentService studentService; /** * 课程用于支付进行扣减 * * @param paymentDeductionClassHour */ @ResponseBody @PostMapping("/coursePackagePayment/paymentDeductionClassHour") public void paymentDeductionClassHour(@RequestBody PaymentDeductionClassHour paymentDeductionClassHour) { try { // 2.0 用id进行查询 // TCoursePackagePayment coursePackagePayment = packagePaymentService.getOne(new QueryWrapper().eq("id", paymentDeductionClassHour.getCourseId()).eq("payStatus", 2) // .eq("status", 1).eq("state", 1).gt("laveClassHours", 0)); // Integer classHour = paymentDeductionClassHour.getClassHour(); // for (TCoursePackagePayment coursePackagePayment : list) { CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getById(paymentDeductionClassHour.getCourseId()); // if (paymentDeductionClassHour.getClassHour() > coursePackageOrderStudent.getLaveClassHours()) { // return ResultUtil.error("当前课包课时数不足"); // } TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId()); coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() - paymentDeductionClassHour.getClassHour()); coursePackageOrderStudentService.updateById(coursePackageOrderStudent); Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); if(3 >= laveClassHours){ AppUser appUser = appuClient.queryAppUser(coursePackageOrderStudent.getAppUserId()); //发送短信提醒 aLiSendSms.sendSms(appUser.getPhone(), "SMS_463646317", ""); } //判断剩余课时是否已经全部进行排课,如果排课需要删除已经排好的记录 List list1 = coursePackageSchedulingService.list(new QueryWrapper() .eq("studentId", coursePackageOrderStudent.getStudentId()).eq("status", 1) .eq("type", 1).orderByDesc("classDate")); //已经排课但没有使用的课时数量 int number = list1.size() * coursePackage.getNeedNum(); Integer laveClassHours1 = coursePackageOrderStudent.getLaveClassHours(); //需要删除多余的排课记录 if(number > laveClassHours1){ int n = number - laveClassHours1; for (int i = 0; i < n; i++) { CoursePackageScheduling coursePackageScheduling = list1.get(i); coursePackageSchedulingService.getBaseMapper().deleteById(coursePackageScheduling.getId()); coursePackageStudentService.getBaseMapper().delete(new QueryWrapper() .eq("coursePackageSchedulingId", coursePackageScheduling.getId())); } } // if (coursePackagePayment.getLaveClassHours().compareTo(classHour) >= 0) { // coursePackagePayment.setLaveClassHours(coursePackagePayment.getLaveClassHours() - classHour); // coursePackagePayment.setAppUserId(null); // packagePaymentService.updateById(coursePackagePayment); // // CourseCounsum courseCounsum = new CourseCounsum(); // courseCounsum.setPaymentId(coursePackagePayment.getId()); // courseCounsum.setChangeType(0); // courseCounsum.setNum(classHour); // courseCounsum.setInsertTime(new Date()); // courseCounsum.setReason("报名赛事"); // courseCounsumService.save(courseCounsum); // // // List studentCourse = coursePackageStudentService.list(new QueryWrapper().eq("studentId", coursePackagePayment.getStudentId()).eq("coursePackageId", coursePackagePayment.getCoursePackageId())); // List collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); // coursePackageSchedulingService.remove(new QueryWrapper().in("id", collect)); // coursePackageStudentService.remove(new QueryWrapper().eq("studentId", paymentDeductionClassHour.getId()).eq("coursePackageId", coursePackagePayment.getCoursePackageId())); // // // TCoursePackage tCoursePackage = packageService.getById(coursePackagePayment.getCoursePackageId()); // String classWeeks = tCoursePackage.getClassWeeks(); // List week = week(classWeeks); // // TCoursePackagePayment pay = packagePaymentService.getOne(new QueryWrapper().eq("coursePackageId", coursePackagePayment.getCoursePackageId()).eq("studentId", coursePackagePayment.getStudentId())); // // Date today = new Date(); // Calendar calendar = Calendar.getInstance(); // calendar.add(Calendar.DATE, -1); // today = calendar.getTime(); // // // Integer laveClassHours = pay.getLaveClassHours(); // Integer codeTime = tCoursePackage.getCodeTime(); // Integer can = laveClassHours / codeTime; // // int count = 0; // String[] split = tCoursePackage.getClassStartTime().split(","); // String[] split1 = tCoursePackage.getClassEndTime().split(","); // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // // Date[] dates = generateDateArray(14, today); // for (Date date : dates) { // if (count == can) { // break; // } // int wei = cn.hutool.core.date.DateUtil.dayOfWeek(date); // if (week.contains(wei)) { // for (int i1 = 0; i1 < split.length; i1++) { // if (count == can) { // break; // } // CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); // coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); // Date parse = format1.parse(format.format(date) + " " + split[i1]); // Date parse1 = format1.parse(format.format(date) + " " + split1[i1]); // coursePackageScheduling.setClassDate(parse); // coursePackageScheduling.setEndDate(parse1); // coursePackageScheduling.setStatus(1); // coursePackageSchedulingService.save(coursePackageScheduling); // CoursePackageStudent student1 = new CoursePackageStudent(); // student1.setAppUserId(pay.getAppUserId()); // student1.setStudentId(pay.getStudentId()); // student1.setCoursePackageId(pay.getCoursePackageId()); // student1.setCoursePackagePaymentId(pay.getId()); // student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); // student1.setSignInOrNot(1); // student1.setReservationStatus(1); // student1.setInsertTime(new Date()); // studentService.save(student1); // count++; // } // } // } // // // // 2.0 少于3课时 推送 // if (coursePackagePayment.getLaveClassHours() <= 3) { // Integer appUserId = coursePackagePayment.getAppUserId(); // // //调用推送 // HttpHeaders headers = new HttpHeaders(); // // 以表单的方式提交 // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // String s1 = appUserId + "_" + "Three"; // //定时修改排课状态 // String s = internalRestTemplate.getForObject("http://mb-cloud-gateway/netty/sendMsgToClient?id=" + s1, String.class); // JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); // if (jsonObject1.getIntValue("code") != 200) { // System.err.println(jsonObject1.getString("msg")); // } // } // // CancelledClasses cancelledClasses = new CancelledClasses(); // cancelledClasses.setType(2); // cancelledClasses.setVoucher(paymentDeductionClassHour.getCode()); // cancelledClasses.setCoursePackageId(coursePackagePayment.getCoursePackageId()); // cancelledClasses.setCoursePackagePaymentId(coursePackagePayment.getId()); // cancelledClasses.setCancelledClassesNumber(classHour); // cancelledClasses.setInsertTime(new Date()); // cancelledClassesService.save(cancelledClasses); // // } else { // CancelledClasses cancelledClasses = new CancelledClasses(); // cancelledClasses.setType(2); // cancelledClasses.setVoucher(paymentDeductionClassHour.getCode()); // cancelledClasses.setCoursePackageId(coursePackagePayment.getCoursePackageId()); // cancelledClasses.setCoursePackagePaymentId(coursePackagePayment.getId()); // cancelledClasses.setCancelledClassesNumber(coursePackagePayment.getLaveClassHours()); // cancelledClasses.setInsertTime(new Date()); // cancelledClassesService.save(cancelledClasses); // // coursePackagePayment.setLaveClassHours(0); // packagePaymentService.updateById(coursePackagePayment); // // classHour -= cancelledClasses.getCancelledClassesNumber(); // } // } } catch (Exception e) { e.printStackTrace(); } } private List week(String week) { String[] split = week.split(";"); ArrayList integers = new ArrayList<>(); for (String s : split) { switch (s) { case "周一": integers.add(1); break; case "周二": integers.add(2); break; case "周三": integers.add(3); break; case "周四": integers.add(4); break; case "周五": integers.add(5); break; case "周六": integers.add(6); break; case "周日": integers.add(7); break; } } return integers; } /** * 取消赛事回退支付课时 * * @param paymentDeductionClassHour */ @ResponseBody @PostMapping("/coursePackagePayment/rollbackPaymentDeductionClassHour") public void rollbackPaymentDeductionClassHour(@RequestBody PaymentDeductionClassHour paymentDeductionClassHour) { try { List voucher = cancelledClassesService.list(new QueryWrapper().eq("voucher", paymentDeductionClassHour.getCode())); for (CancelledClasses cancelledClasses : voucher) { TCoursePackagePayment coursePackagePayment = packagePaymentService.getById(cancelledClasses.getCoursePackagePaymentId()); coursePackagePayment.setLaveClassHours(coursePackagePayment.getLaveClassHours() + cancelledClasses.getCancelledClassesNumber()); coursePackagePayment.setAppUserId(null); packagePaymentService.updateById(coursePackagePayment); cancelledClassesService.removeById(cancelledClasses.getId()); } } catch (Exception e) { e.printStackTrace(); } } @Resource private TCoursePackageMapper tcpmapper; /** * 找出符合门店的课包 * * @param s * @return */ @ResponseBody @PostMapping("/coursePackagePayment/paymentCompetitionCourseList") public List paymentCompetitionCourseList(@RequestBody String s) { ArrayList objects = new ArrayList<>(); String[] split = s.split("_"); // 用户id Integer integer = Integer.valueOf(split[0]); String s1 = split[1]; // 门店id String[] split1 = s1.split(","); ArrayList storeIds = new ArrayList<>(); for (String s2 : split1) { storeIds.add(Integer.valueOf(s2)); } // List list = packagePaymentService.list(new LambdaQueryWrapper().eq(TCoursePackagePayment::getAppUserId, integer).ge(TCoursePackagePayment::getLaveClassHours, 0).eq(TCoursePackagePayment::getStatus, 1).eq(TCoursePackagePayment::getState, 1)); // for (TCoursePackagePayment tCoursePackagePayment : list) { // Integer coursePackageId = tCoursePackagePayment.getCoursePackageId(); // TCoursePackage byId = tcpService.getById(coursePackageId); // if (byId.getType() == 3) { // continue; // } // if (storeIds.contains(byId.getStoreId())) { // PayCourseRes payCourseRes = new PayCourseRes(); // payCourseRes.setCourseNum(tCoursePackagePayment.getLaveClassHours()); // payCourseRes.setId(tCoursePackagePayment.getId()); // payCourseRes.setName(byId.getName()); // objects.add(payCourseRes); // } // } List tCoursePackagePayments = coursePackageOrderStudentService.list(new LambdaQueryWrapper().eq(CoursePackageOrderStudent::getAppUserId, integer)); // ArrayList payCourseRes = new ArrayList<>(); for (CoursePackageOrderStudent tCoursePackagePayment : tCoursePackagePayments) { TCoursePackage tCoursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); if (tCoursePackage.getType() != 1) { continue; } if (storeIds.contains(tCoursePackage.getStoreId())) { PayCourseRes payCourseRes = new PayCourseRes(); payCourseRes.setCourseNum(tCoursePackagePayment.getLaveClassHours()); payCourseRes.setId(tCoursePackagePayment.getId()); payCourseRes.setName(tCoursePackage.getName()); objects.add(payCourseRes); } } return objects; } @ResponseBody @PostMapping("/coursePackagePayment/isHave") public Integer isHave(@RequestBody String ids) { String[] split = ids.split(","); return coursePackagePaymentService.count(new QueryWrapper().in("studentId", split)); } /** * 课包续费玩湃币支付 * * @param */ @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay") public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage) { try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if (null == userIdFormRedis) { return 2; } CoursePackagePaymentConfig paymentConfig = icppcService.getById(coursePackage.getCoursePayConfigId()); AppUser appUser = auClitn.queryAppUser(userIdFormRedis); if (appUser.getPlayPaiCoins() < paymentConfig.getPlayPaiCoin()) { return 3; } TCoursePackagePayment packagePayment = packagePaymentService.getOne(new QueryWrapper() .eq("code", coursePackage.getCode())); packagePayment.setPayStatus(2); packagePayment.setPayUserId(userIdFormRedis); packagePayment.setClassHours(paymentConfig.getClassHours()); packagePayment.setPlayPaiCoin(paymentConfig.getPlayPaiCoin()); packagePayment.setTotalClassHours(paymentConfig.getClassHours()); packagePayment.setLaveClassHours(paymentConfig.getClassHours()); packagePaymentService.updateById(packagePayment); appUser.setPlayPaiCoins(appUser.getPlayPaiCoins() - paymentConfig.getPlayPaiCoin()); auClitn.updateAppUser(appUser); // 2.0 TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord(); tCourseInfoRecord.setUserId(userIdFormRedis); tCourseInfoRecord.setCourseId(coursePackage.getCoursePackageId()); tCourseInfoRecord.setName("续课"); tCourseInfoRecord.setTime(new Date()); tCourseInfoRecord.setType(1); tCourseInfoRecord.setNum(paymentConfig.getClassHours()); auClitn.addCourseInfoRecord(tCourseInfoRecord); CourseCounsum courseCounsum = new CourseCounsum(); courseCounsum.setPaymentId(packagePayment.getId()); courseCounsum.setChangeType(1); courseCounsum.setNum(packagePayment.getClassHours()); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("购买课包"); courseCounsumService.save(courseCounsum); } catch (Exception e) { return 4; } return 1; } @PostMapping("/base/coursePack/getPaymentCoursePackage") public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String code) { return packagePaymentService.getOne(new QueryWrapper() .eq("code", code)); } @PostMapping("/base/coursePack/getCoursePackagePaymentById") public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Long id) { TCoursePackagePayment byId = packagePaymentService.getById(id); System.out.println("======byId==========" + byId); return byId; } @PostMapping("/base/coursePack/delPaymentCoursePackage") public boolean delPaymentCoursePackage(@RequestBody Integer payId) { return packagePaymentService.removeById(payId); } @PostMapping("/base/coursePack/updatePaymentCoursePackage") public boolean updatePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment) { boolean id = packagePaymentService.update(packagePayment, new QueryWrapper() .eq("id", packagePayment.getId())); if (id) { // 2.0 TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord(); tCourseInfoRecord.setNum(packagePayment.getTotalClassHours()); tCourseInfoRecord.setName("续课"); tCourseInfoRecord.setCourseId(packagePayment.getCoursePackageId()); tCourseInfoRecord.setUserId(packagePayment.getAppUserId()); tCourseInfoRecord.setType(1); tCourseInfoRecord.setTime(new Date()); id = appUserClient.addCourseInfoRecord(tCourseInfoRecord); CourseCounsum courseCounsum = new CourseCounsum(); courseCounsum.setPaymentId(packagePayment.getId()); courseCounsum.setChangeType(1); courseCounsum.setNum(packagePayment.getClassHours()); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("续课"); courseCounsumService.save(courseCounsum); } return id; } @PostMapping("/base/coursePack/savePaymentCoursePackage") public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment) { return packagePaymentService.save(packagePayment); } @PostMapping("/base/coursePack/orderClass") public void orderClass(@RequestBody OrderDto orderDto) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); String[] split = orderDto.getStuIds().split(","); for (String s : split) { TCoursePackagePayment coursePackagePaymentServiceOne = coursePackagePaymentService.getOne(new QueryWrapper().eq("studentId", s).eq("coursePackageId", orderDto.getClassId())); if (coursePackagePaymentServiceOne == null) { TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment(); coursePackagePayment.setCode(code); coursePackagePayment.setAppUserId(orderDto.getAppUserId()); coursePackagePayment.setStudentId(Integer.valueOf(s)); coursePackagePayment.setCoursePackageId(orderDto.getClassId()); coursePackagePayment.setPayType(4); coursePackagePayment.setClassHours(orderDto.getClassHours()); coursePackagePayment.setTotalClassHours(orderDto.getClassHours()); coursePackagePayment.setLaveClassHours(orderDto.getClassHours()); coursePackagePayment.setAbsencesNumber(0); coursePackagePayment.setPayUserType(1); coursePackagePayment.setPayStatus(2); coursePackagePayment.setPayUserId(orderDto.getAppUserId()); coursePackagePayment.setStatus(1); coursePackagePayment.setState(1); coursePackagePayment.setInsertTime(new Date()); coursePackagePaymentService.save(coursePackagePayment); Integer sId = null; Student student = studentClient.queryDefaultStudent(orderDto.getAppUserId()); if (student != null) { sId = student.getId(); } addPackageStudent(orderDto.getClassId(), orderDto.getAppUserId(), Integer.valueOf(s), coursePackagePayment, coursePackagePayment.getId()); CourseCounsum courseCounsum = new CourseCounsum(); courseCounsum.setPaymentId(coursePackagePayment.getId()); courseCounsum.setChangeType(1); courseCounsum.setNum(orderDto.getClassHours()); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("积分兑换"); courseCounsumService.save(courseCounsum); } else { coursePackagePaymentServiceOne.setClassHours(coursePackagePaymentServiceOne.getClassHours() + orderDto.getClassHours()); coursePackagePaymentServiceOne.setTotalClassHours(coursePackagePaymentServiceOne.getTotalClassHours() + orderDto.getClassHours()); coursePackagePaymentServiceOne.setLaveClassHours(coursePackagePaymentServiceOne.getLaveClassHours() + orderDto.getClassHours()); coursePackagePaymentServiceOne.setAppUserId(null); coursePackagePaymentService.updateById(coursePackagePaymentServiceOne); Integer sId = null; Student student = studentClient.queryDefaultStudent(orderDto.getAppUserId()); if (student != null) { sId = student.getId(); } addPackageStudent(orderDto.getClassId(), orderDto.getAppUserId(), Integer.valueOf(s), coursePackagePaymentServiceOne, coursePackagePaymentServiceOne.getId()); CourseCounsum courseCounsum = new CourseCounsum(); courseCounsum.setPaymentId(coursePackagePaymentServiceOne.getId()); courseCounsum.setChangeType(1); courseCounsum.setNum(orderDto.getClassHours()); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("积分兑换"); courseCounsum.setInsertTime(new Date()); courseCounsumService.save(courseCounsum); } } } public static Date[] generateDateArray1(Date startDate, Date endDate) { List dateList = new ArrayList<>(); Calendar calendar = Calendar.getInstance(); calendar.setTime(startDate); while (!calendar.getTime().after(endDate)) { Date currentDate = calendar.getTime(); dateList.add(currentDate); calendar.add(Calendar.DAY_OF_MONTH, 1); } return dateList.toArray(new Date[0]); } public Integer getGiftClassHours(TCoursePackageDiscount one,Date insertTime){ if (insertTime!=null){ // 判断购买时间 是否满足折扣规则 char c = one.getContent().charAt(0); String value1 = String.valueOf(c); JSONObject jsonObject ; if (value1.equals("[")){ jsonObject = JSONObject.fromObject(one.getContent() .substring(1,one.getContent().length() - 1)); }else{ jsonObject = JSONObject.fromObject(one.getContent()); } // 赠送课时 判断当前课包有没有赠送课时 String weeks = jsonObject.getString("weeks"); Calendar calendar = Calendar.getInstance(); calendar.setTime(insertTime); // 获取星期几,星期日是1,星期一是2,以此类推 int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 将星期日(Calendar定义为1)转换为7 if (dayOfWeek == Calendar.SUNDAY) { dayOfWeek = 7; } else { // 其他星期减一即可得到1-6的数字表示 dayOfWeek -= 1; } if (weeks.contains(String.valueOf(dayOfWeek))){ // 限时折扣判断是否在有效期 try { // 判断当日时间是否能享受到折扣 String startTime = jsonObject.getString("startTime"); String endTime = jsonObject.getString("endTime"); // 定义时间格式 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // 解析开始时间和结束时间为Date对象 Date startTime1 = sdf.parse(startTime); Date endTime1 = sdf.parse(endTime); Date date1 = new Date(); date1.setHours(startTime1.getHours()); date1.setMinutes(startTime1.getMinutes()); date1.setSeconds(startTime1.getSeconds()); Date date2 = new Date(); date2.setHours(endTime1.getHours()); date2.setMinutes(endTime1.getMinutes()); date2.setSeconds(endTime1.getSeconds()); // 检查当前时间是否在开始时间和结束时间之间 if (insertTime.after(date1) && insertTime.before(date2)) { System.out.println("当前时间在开始时间和结束时间之间。"); String hour = jsonObject.getString("hour"); return Integer.valueOf(hour); } else { System.out.println("当前时间不在开始时间和结束时间之间。"); return 0; } } catch (ParseException e) { e.printStackTrace(); } } } // 判断购买时间 是否满足折扣规则 char c = one.getContent().charAt(0); String value1 = String.valueOf(c); JSONObject jsonObject ; if (value1.equals("[")){ jsonObject = JSONObject.fromObject(one.getContent() .substring(1,one.getContent().length() - 1)); }else{ jsonObject = JSONObject.fromObject(one.getContent()); } // 赠送课时 判断当前课包有没有赠送课时 String weeks = jsonObject.getString("weeks"); // 判断当前周几 是否满足折扣规则 // 获取当前日期 LocalDate currentDate = LocalDate.now(); // 获取当前日期是星期几的数字表示 int dayOfWeekAsNumber = currentDate.getDayOfWeek().getValue(); if (weeks.contains(String.valueOf(dayOfWeekAsNumber))){ // 限时折扣判断是否在有效期 try { // 判断当日时间是否能享受到折扣 String startTime = jsonObject.getString("startTime"); String endTime = jsonObject.getString("endTime"); // 获取当前时间 Date currentTime = new Date(); // 定义时间格式 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // 解析开始时间和结束时间为Date对象 Date startTime1 = sdf.parse(startTime); Date endTime1 = sdf.parse(endTime); Date date1 = new Date(); date1.setHours(startTime1.getHours()); date1.setMinutes(startTime1.getMinutes()); date1.setSeconds(startTime1.getSeconds()); Date date2 = new Date(); date2.setHours(endTime1.getHours()); date2.setMinutes(endTime1.getMinutes()); date2.setSeconds(endTime1.getSeconds()); // 检查当前时间是否在开始时间和结束时间之间 if (currentTime.after(date1) && currentTime.before(date2)) { System.out.println("当前时间在开始时间和结束时间之间。"); String hour = jsonObject.getString("hour"); return Integer.valueOf(hour); } else { System.out.println("当前时间不在开始时间和结束时间之间。"); return 0; } } catch (ParseException e) { e.printStackTrace(); } } return 0; } @Autowired private TCoursePackageService coursePackageService; private void addPackageStudent1(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrder coursePackageOrder, CoursePackageOrderStudent coursePackageOrderStudent) { try { //1常规 2假期 3体验 if (tCoursePackage.getType() == 1) { //上课星期 String classWeeks = tCoursePackage.getClassWeeks(); List week = week(classWeeks); //上课时段 String[] split = tCoursePackage.getClassStartTime().split(","); String[] split1 = tCoursePackage.getClassEndTime().split(","); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //剩余课时 Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); //扣除课时数 Integer codeTime = tCoursePackage.getCodeTime(); //排课 本周+下周,课时不够扣则直接剩余不排课 Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); int day_week = calendar.get(Calendar.DAY_OF_WEEK); day_week = day_week - 1 == 0 ? 7 : day_week - 1; int num = 8 - day_week + 7; Date useTime = coursePackageOrderStudent.getUseTime(); for (int i = 0; i < num; i++) { Date time = calendar.getTime(); //判断当天是否在排课星期内 int day = calendar.get(Calendar.DAY_OF_WEEK); day = day - 1 == 0 ? 7 : day - 1; if (!week.contains(day)) { calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); continue; } //大于有效期不进行排课 if (calendar.getTimeInMillis() >= useTime.getTime()) { break; } for (int j = 0; j < split.length; j++) { //剩余数量不足以排课 if (laveClassHours.compareTo(codeTime) < 0) { break; } laveClassHours -= codeTime; CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); coursePackageScheduling.setType(tCoursePackage.getType()); coursePackageScheduling.setAppUserId(userId); coursePackageScheduling.setStudentId(sId); coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); Date parse = format1.parse(format.format(time) + " " + split[j]); Date parse1 = format1.parse(format.format(time) + " " + split1[j]); coursePackageScheduling.setClassDate(parse); coursePackageScheduling.setEndDate(parse1); coursePackageScheduling.setStatus(1); coursePackageSchedulingService.save(coursePackageScheduling); CoursePackageStudent student1 = new CoursePackageStudent(); student1.setAppUserId(userId); student1.setStudentId(sId); student1.setCoursePackageId(tCoursePackage.getId()); student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId()); student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); student1.setInsertTime(new Date()); cpsMapper.insert(student1); } //增加日期,用于判断 calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); } } if (tCoursePackage.getType() == 2) { //上课星期 String classWeeks = tCoursePackage.getClassWeeks(); List week = week(classWeeks); //上课时段 String[] split = tCoursePackage.getClassStartTime().split(","); String[] split1 = tCoursePackage.getClassEndTime().split(","); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date startTime = tCoursePackage.getStartTime(); Date endTime = tCoursePackage.getEndTime(); //排课 本周+下周,课时不够扣则直接剩余不排课 Calendar calendar = Calendar.getInstance(); //假期开始使用当前时间为起始时间进行排课 calendar.setTime(startTime.getTime() > System.currentTimeMillis() ? startTime : new Date()); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); while (true) { Date time = calendar.getTime(); //判断当天是否在排课星期内 int day = calendar.get(Calendar.DAY_OF_WEEK); day = day - 1 == 0 ? 7 : day - 1; if (!week.contains(day)) { calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); continue; } //大于有效期不进行排课 if (calendar.getTimeInMillis() > endTime.getTime()) { break; } for (int j = 0; j < split.length; j++) { CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); coursePackageScheduling.setType(tCoursePackage.getType()); coursePackageScheduling.setAppUserId(userId); coursePackageScheduling.setStudentId(sId); coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); Date parse = format1.parse(format.format(time) + " " + split[j]); Date parse1 = format1.parse(format.format(time) + " " + split1[j]); coursePackageScheduling.setClassDate(parse); coursePackageScheduling.setEndDate(parse1); coursePackageScheduling.setStatus(1); coursePackageSchedulingService.save(coursePackageScheduling); CoursePackageStudent student1 = new CoursePackageStudent(); student1.setAppUserId(userId); student1.setStudentId(sId); student1.setCoursePackageId(tCoursePackage.getId()); student1.setCoursePackagePaymentId(null); student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); student1.setInsertTime(new Date()); cpsMapper.insert(student1); } //增加日期,用于判断 calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); } } } catch (Exception e) { e.printStackTrace(); } } private void addPackageStudent(Integer courseId, Integer userId, Integer sId, TCoursePackagePayment coursePackagePayment, Long paymentId) throws ParseException { // 课包 TCoursePackage tCoursePackage = coursePackageService.getById(courseId); if (tCoursePackage.getType() == 1) { String classWeeks = tCoursePackage.getClassWeeks(); List week = week(classWeeks); String[] split = tCoursePackage.getClassStartTime().split(","); String[] split1 = tCoursePackage.getClassEndTime().split(","); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //查出当前用户当前学员当前课包最后一天的排课数据 List studentCourse = coursePackageStudentService.list(new QueryWrapper().eq("studentId", sId).eq("coursePackageId", courseId)); List collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); //拿到最后一天的排课记录 if (collect.size() > 0) { coursePackageSchedulingService.remove(new QueryWrapper().in("id", collect)); coursePackageStudentService.remove(new QueryWrapper().eq("studentId", sId).eq("coursePackageId", courseId)); } Date today = new Date(); TCoursePackagePayment pay = coursePackagePaymentService.getById(paymentId); Integer laveClassHours = pay.getLaveClassHours(); Integer codeTime = tCoursePackage.getCodeTime(); Integer can = 0; int count = 0; // 本周周几 Date[] dates = generateDateArray(14, today); if (tCoursePackage.getType() == 1) { can = laveClassHours / codeTime; } if (tCoursePackage.getType() == 2) { Date startDate = tCoursePackage.getStartTime(); Date endDate = tCoursePackage.getEndTime(); dates = generateDateArray1(startDate, endDate); can = 999; } for (Date date : dates) { if (count == can) { break; } int wei = cn.hutool.core.date.DateUtil.dayOfWeek(date); if (week.contains(wei)) { for (int i1 = 0; i1 < split.length; i1++) { if (count == can) { break; } CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); Date parse = format1.parse(format.format(date) + " " + split[i1]); Date parse1 = format1.parse(format.format(date) + " " + split1[i1]); coursePackageScheduling.setClassDate(parse); coursePackageScheduling.setEndDate(parse1); coursePackageScheduling.setStatus(1); coursePackageSchedulingService.save(coursePackageScheduling); CoursePackageStudent student1 = new CoursePackageStudent(); student1.setAppUserId(userId); student1.setStudentId(sId); student1.setCoursePackageId(tCoursePackage.getId()); student1.setCoursePackagePaymentId(paymentId); student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); student1.setInsertTime(new Date()); coursePackageStudentService.save(student1); count++; } } } } else if (tCoursePackage.getType() == 2) { String classWeeks = tCoursePackage.getClassWeeks(); List week = week(classWeeks); Date today = new Date(); Date startTime = tCoursePackage.getStartTime(); Date endTime = tCoursePackage.getEndTime(); LocalDate startDate = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate endDate = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); Period period = Period.between(startDate, endDate); int days = period.getDays() + 1; Integer can = 999; int count = 0; String[] split = tCoursePackage.getClassStartTime().split(","); String[] split1 = tCoursePackage.getClassEndTime().split(","); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Calendar calendar = Calendar.getInstance(); calendar.setTime(startTime); calendar.add(Calendar.DAY_OF_MONTH, -1); TCoursePackagePayment pay = coursePackagePaymentService.getById(paymentId); Date[] dates = generateDateArray(days, calendar.getTime()); for (Date date : dates) { if (count == can) { break; } int wei = cn.hutool.core.date.DateUtil.dayOfWeek(date) - 1; if (wei == 0) { wei = 7; } if (week.contains(wei)) { for (int i1 = 0; i1 < split.length; i1++) { if (count == can) { break; } CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); Date parse = format1.parse(format.format(date) + " " + split[i1]); Date parse1 = format1.parse(format.format(date) + " " + split1[i1]); coursePackageScheduling.setClassDate(parse); coursePackageScheduling.setEndDate(parse1); coursePackageScheduling.setStatus(1); coursePackageSchedulingService.save(coursePackageScheduling); CoursePackageStudent student1 = new CoursePackageStudent(); student1.setAppUserId(userId); student1.setStudentId(sId); student1.setCoursePackageId(tCoursePackage.getId()); student1.setCoursePackagePaymentId(pay.getId()); student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); student1.setInsertTime(new Date()); coursePackageStudentService.save(student1); count++; } } } } // 2.0 TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord(); tCourseInfoRecord.setUserId(userId); tCourseInfoRecord.setCourseId(courseId); tCourseInfoRecord.setName("报名运动营"); tCourseInfoRecord.setNum(tCoursePackage.getNeedNum()); tCourseInfoRecord.setTime(new Date()); tCourseInfoRecord.setType(2); appUserClient.addCourseInfoRecord(tCourseInfoRecord); } @ResponseBody @PostMapping("/base/coursePack/obtainStudentClassDetails") public List obtainStudentClassDetailsData(@RequestBody WeeksOfCourseRest stuId) { // try { return coursePackageOrderStudentService.obtainStuClassDetails(stuId.getStuId(), stuId.getAppUserId(), stuId.getPageNum()); // }catch (Exception e){ // e.printStackTrace(); // throw new RuntimeException(); // } } @PostMapping("/base/coursePack/getCoursePackageConfig") public List getCourseConfigList(@RequestBody Integer coursePackageId) { return icppcService.list(new QueryWrapper() .eq("coursePackageId", coursePackageId)); } @PostMapping("/base/coursePack/getCoursePackagePaymentOfCode") public List getCoursePackagePaymentOfCode(@RequestBody String code) { return packagePaymentService.list(new QueryWrapper() .eq("code", code)); } // 2.0 送课时 @PostMapping("/base/coursePack/sendHours") public Integer sendHours(@RequestBody String s) throws ParseException { String[] split2 = s.split("_"); TCoursePackagePayment byId = packagePaymentService.getById(Long.valueOf(split2[0])); byId.setTotalClassHours(byId.getTotalClassHours() + Integer.valueOf(split2[2])); boolean b = packagePaymentService.updateHoursById(byId, Integer.valueOf(split2[2])); CourseCounsum courseCounsum = new CourseCounsum(); courseCounsum.setPaymentId(byId.getId()); courseCounsum.setChangeType(1); courseCounsum.setNum(Integer.valueOf(split2[2])); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("介绍有礼"); courseCounsumService.save(courseCounsum); List studentCourse = coursePackageStudentService.list(new QueryWrapper().eq("studentId", byId.getStudentId()).eq("coursePackageId", byId.getCoursePackageId())); List collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); coursePackageSchedulingService.remove(new QueryWrapper().in("id", collect)); coursePackageStudentService.remove(new QueryWrapper().eq("studentId", byId.getStudentId()).eq("coursePackageId", byId.getCoursePackageId())); TCoursePackage tCoursePackage = packageService.getById(byId.getCoursePackageId()); String classWeeks = tCoursePackage.getClassWeeks(); List week = week(classWeeks); TCoursePackagePayment pay = packagePaymentService.getOne(new QueryWrapper().eq("coursePackageId", byId.getCoursePackageId()).eq("studentId", byId.getStudentId())); Date today = new Date(); Integer laveClassHours = pay.getLaveClassHours(); Integer codeTime = tCoursePackage.getCodeTime(); Integer can = laveClassHours / codeTime; int count = 0; String[] split = tCoursePackage.getClassStartTime().split(","); String[] split1 = tCoursePackage.getClassEndTime().split(","); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date[] dates = generateDateArray(14, today); for (Date date : dates) { if (count == can) { break; } int wei = cn.hutool.core.date.DateUtil.dayOfWeek(date); if (week.contains(wei)) { for (int i1 = 0; i1 < split.length; i1++) { if (count == can) { break; } CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); Date parse = format1.parse(format.format(date) + " " + split[i1]); Date parse1 = format1.parse(format.format(date) + " " + split1[i1]); coursePackageScheduling.setClassDate(parse); coursePackageScheduling.setEndDate(parse1); coursePackageScheduling.setStatus(1); coursePackageSchedulingService.save(coursePackageScheduling); CoursePackageStudent student1 = new CoursePackageStudent(); student1.setAppUserId(pay.getAppUserId()); student1.setStudentId(pay.getStudentId()); student1.setCoursePackageId(pay.getCoursePackageId()); student1.setCoursePackagePaymentId(pay.getId()); student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); student1.setInsertTime(new Date()); studentService.save(student1); count++; } } } if (b) { return 1; } else { return 0; } } /** * 查询课时 * * @param courseConfigId * @return */ @PostMapping("/base/coursePack/getClassHour") public Integer getClassHour(@RequestBody Integer courseConfigId) { CoursePackagePaymentConfig byId = icppcService.getById(courseConfigId); return byId.getClassHours(); } /** * 获取课包报名信息列表 * * @param queryRegistrationRecord * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryRegistrationRecord") public Page> queryRegistrationRecord(@RequestBody QueryRegistrationRecord queryRegistrationRecord) { Page> page = new PageFactory>().defaultPage(queryRegistrationRecord.getLimit(), queryRegistrationRecord.getOffset(), queryRegistrationRecord.getSort(), queryRegistrationRecord.getOrder()); Page> mapPage = page.setRecords(packagePaymentService.queryRegistrationRecord(page, queryRegistrationRecord)); return mapPage; } /** * 获取未预约排课学员列表 * * @param queryWalkInStudentList * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryWalkInStudentList") public Page> queryWalkInStudentList(@RequestBody QueryWalkInStudentList queryWalkInStudentList) { Page> page = new PageFactory>().defaultPage(queryWalkInStudentList.getLimit(), queryWalkInStudentList.getOffset(), queryWalkInStudentList.getSort(), queryWalkInStudentList.getOrder()); Page> mapPage = page.setRecords(packagePaymentService.queryWalkInStudentList(page, queryWalkInStudentList)); return mapPage; } /** * 根据id获取数据 * * @param id * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryCoursePackagePaymentById") public TCoursePackagePayment queryCoursePackagePaymentById(@RequestParam("id") Long id) { return packagePaymentService.getById(id); } @ResponseBody @PostMapping("/coursePackagePayment/queryCoursePackagePaymentById1") public CoursePackageOrderStudent queryCoursePackagePaymentById1(@RequestParam("id") Long id) { return coursePackageOrderStudentService.getById(id); } // @Autowired // private ICoursePackageOrderStudentService orderStudentService; @ResponseBody @PostMapping("/coursePackagePayment/consumeCourse") public Integer consumeCourse(@RequestBody Integer coursePackagePaymentId) { CoursePackageOrderStudent coursePackageOrderStudent = orderStudentService.getById(coursePackagePaymentId); TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId()); if (coursePackageOrderStudent.getLaveClassHours()= laveClassHours){ AppUser appUser = appuClient.queryAppUser(coursePackageOrderStudent.getAppUserId()); //发送短信提醒 aLiSendSms.sendSms(appUser.getPhone(), "SMS_463646317", ""); } CourseCounsum courseCounsum = new CourseCounsum(); courseCounsum.setPaymentId(coursePackageOrderStudent.getId()); courseCounsum.setChangeType(0); courseCounsum.setNum(coursePackage.getNeedNum()); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("补课"); courseCounsumService.save(courseCounsum); return 2; } @ResponseBody @PostMapping("/coursePackagePayment/CountqueryByClassId") public Integer CountqueryByClassId(@RequestBody Integer id) { int coursePackageId = coursePackageOrderStudentService.count(new QueryWrapper().eq("coursePackageId", id)); return coursePackageId; } /** * 修改数据 * * @param coursePackagePayment */ @ResponseBody @PostMapping("/coursePackagePayment/editCoursePackagePayment") public void editCoursePackagePayment(TCoursePackagePayment coursePackagePayment) { coursePackagePayment.setAppUserId(null); packagePaymentService.updateById(coursePackagePayment); } /** * 修改数据 * * @param coursePackagePayment */ @ResponseBody @PostMapping("/coursePackagePayment/editCoursePackagePayment1") public void editCoursePackagePayment1(@RequestBody TCoursePackagePayment coursePackagePayment) { System.out.println("editCoursePackagePayment1====coursePackagePayment" + coursePackagePayment); // coursePackagePayment.setCoursePackageId(null); packagePaymentService.updateBytime(coursePackagePayment); } @ResponseBody @PostMapping("/coursePackagePayment/editCoursePackagePayment2") public void editCoursePackagePayment2(@RequestBody CoursePackageOrderStudent coursePackageOrderStudent) { System.out.println("editCoursePackagePayment1====coursePackagePayment" + coursePackageOrderStudent); // coursePackagePayment.setCoursePackageId(null); // packagePaymentService.updateBytime(coursePackagePayment); coursePackageOrderStudentService.updateById(coursePackageOrderStudent); } /** * 上课主页-预约操作 */ @ResponseBody @PostMapping("/api/startCource/reverse") @ApiOperation(value = "上课主页-预约操作--2.0改请假操作", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "课包id", name = "courseID", required = true, dataType = "String"), @ApiImplicitParam(value = "时间 yyyy-MM-dd", name = "time", required = true, dataType = "String"), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil reverse(String courseID, String time, Integer stuId) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } List packagePayment = coursePackageOrderStudentService.list(new QueryWrapper() .eq("coursePackageId", courseID) .eq("appUserId", appUserId) .eq("studentId", stuId) ); if (ToolUtil.isEmpty(packagePayment) || packagePayment.size() == 0) { return ResultUtil.error("该用户未购买该课包"); } List coursePackageSchedulings = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper() .eq(CoursePackageScheduling::getCoursePackageId, Integer.valueOf(courseID)) .like(CoursePackageScheduling::getClassDate, time) ); List coursePackageStudent = cspsService.list(new LambdaQueryWrapper() .in(CoursePackageStudent::getCoursePackagePaymentId, packagePayment.stream().map(CoursePackageOrderStudent::getId).collect(Collectors.toList())) .in(CoursePackageStudent::getCoursePackageSchedulingId, coursePackageSchedulings.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList())) .eq(CoursePackageStudent::getCoursePackageId, courseID) .eq(CoursePackageStudent::getStudentId, stuId) .eq(CoursePackageStudent::getAppUserId, appUserId) ); if (ToolUtil.isNotEmpty(coursePackageStudent)) { for (CoursePackageStudent packageStudent : coursePackageStudent) { if (packageStudent.getReservationStatus() == 1) { packageStudent.setSignInOrNot(2); cspsService.updateSignInOrNotById(packageStudent.getId()); } } } else { } return ResultUtil.success(); } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/coursePack/getConsumes") List getConsumes(@RequestBody BillingDataRequestVo requestVo) { Integer[] integers = {2, 3}; QueryWrapper courseCounsumQueryWrapper = new QueryWrapper().in("changeType", integers).eq("appUserId", requestVo.getAppUserId()); if (requestVo.getMonthEnd() != null) { courseCounsumQueryWrapper.ge("insertTime", requestVo.getMonthStart()); courseCounsumQueryWrapper.le("insertTime", requestVo.getMonthEnd()); } return courseCounsumService.list(courseCounsumQueryWrapper); } @ResponseBody @PostMapping("/base/coursePack/weeksOfCourseDetailsList") public HashMap weeksOfCourseDetailsList(@RequestBody CourseDetailReq courseDetailReq) { HashMap map = new HashMap<>(); ArrayList objects = new ArrayList<>(); String time = courseDetailReq.getTime(); Date parse = null; try { parse = new SimpleDateFormat("yyyy-MM-dd").parse(time); } catch (ParseException e) { throw new RuntimeException(e); } int i = cn.hutool.core.date.DateUtil.dayOfWeek(parse) - 1; String week = week(i); Store store = sreClient.queryStoreById(courseDetailReq.getStoreId()); String lat = store.getLat(); String lon = store.getLon(); Map distance = GeodesyUtil.getDistance(courseDetailReq.getLon() + "," + courseDetailReq.getLat(), lon + "," + lat); double wgs84 = distance.get("WGS84") / 1000; map.put("distance", wgs84); map.put("name", store.getName()); map.put("lon", lon); map.put("lat", lat); // 找出门店的所有课程 排出体验 List list = tcpService.list(new LambdaQueryWrapper() .eq(TCoursePackage::getStoreId, courseDetailReq.getStoreId()).ne(TCoursePackage::getType, 3) .eq(TCoursePackage::getState, 1).like(TCoursePackage::getClassWeeks, week)); List collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList()); if (collect.size() == 0) { collect.add(-1); } List list8 = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper() .eq(CoursePackageScheduling::getAppUserId, courseDetailReq.getAppUserId()) .eq(CoursePackageScheduling::getStudentId, courseDetailReq.getStuId()) .in(CoursePackageScheduling::getCoursePackageId, collect) ); List collect1 = list8.stream().map(CoursePackageScheduling::getCoursePackageId).collect(Collectors.toList()); for (TCoursePackage tCoursePackage : list) { DetailsListVo detailsListVo = new DetailsListVo(); detailsListVo.setId(tCoursePackage.getId()); detailsListVo.setName(tCoursePackage.getName()); detailsListVo.setCourseType(tCoursePackage.getType()); String classStartTime = tCoursePackage.getClassStartTime(); String[] split = classStartTime.split(","); String classEndTime = tCoursePackage.getClassEndTime(); String[] split1 = classEndTime.split(","); ArrayList strings = new ArrayList<>(); if (ToolUtil.isNotEmpty(classStartTime)) { for (int i1 = 0; i1 < split.length; i1++) { String s = split[i1].substring(0, 5) + "-" + split1[i1].substring(0, 5); strings.add(s); } } if (detailsListVo.getCourseType() == 1) { detailsListVo.setTime(strings); } else { Date startTime = tCoursePackage.getStartTime(); Date endTime = tCoursePackage.getEndTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String formattedStartTime = sdf.format(startTime); String formattedEndTime = sdf.format(endTime); String result = formattedStartTime + "至" + formattedEndTime; List stringLists = new ArrayList<>(); stringLists.add(result); detailsListVo.setTime(stringLists); } //价格 List list2 = icppcService.list(new LambdaQueryWrapper().eq(CoursePackagePaymentConfig::getCoursePackageId, tCoursePackage.getId()).orderByAsc(CoursePackagePaymentConfig::getCashPayment)); if (list2.size() > 0) { Double cashPayment = list2.get(0).getCashPayment(); detailsListVo.setMoney(cashPayment); } detailsListVo.setNum(tCoursePackage.getNeedNum()); if (collect1.contains(tCoursePackage.getId())) { // 找出排课记录 List list3 = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper() .eq(CoursePackageScheduling::getCoursePackageId, tCoursePackage.getId()) .like(CoursePackageScheduling::getClassDate, courseDetailReq.getTime()) ); if (list3.isEmpty()) { detailsListVo.setType(2); objects.add(detailsListVo); continue; } //排课的ids List collect2 = list3.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList()); if (collect2.isEmpty()){ collect2.add(-1l); } List list4 = cspsService.list(new LambdaQueryWrapper() .eq(CoursePackageStudent::getAppUserId, courseDetailReq.getAppUserId()) .eq(CoursePackageStudent::getStudentId, courseDetailReq.getStuId()) .eq(CoursePackageStudent::getCoursePackageId, tCoursePackage.getId()) .in(CoursePackageStudent::getCoursePackageSchedulingId, collect2) ); List list5 = cspsService.list(new QueryWrapper().eq("studentId", courseDetailReq.getStuId()).eq("coursePackageId", tCoursePackage.getId())); if (list5.size() > 0 && list4.size() > 0) { Integer signInOrNot = list4.get(0).getSignInOrNot(); detailsListVo.setType(1); if (signInOrNot == 2) { detailsListVo.setType(3); } detailsListVo.setIsType(list4.get(0).getType()); for (CoursePackageStudent coursePackageStudent : list4) { CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingMapper.selectById(coursePackageStudent.getCoursePackageSchedulingId()); if (coursePackageScheduling.getStatus()==4){ detailsListVo.setIsType(3); } Integer signInOrNot1 = coursePackageStudent.getSignInOrNot(); detailsListVo.setType(1); if (signInOrNot1 == 2) { detailsListVo.setType(3); } //体验购课去掉按钮 if(coursePackageScheduling.getType() == 3){ detailsListVo.setCourseType(3); detailsListVo.setType(2); } detailsListVo.setIsType(coursePackageStudent.getType()); Date classDate = coursePackageScheduling.getClassDate(); Date endDate = coursePackageScheduling.getEndDate(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); String formattedClassDate = sdf.format(classDate); String formattedEndDate = sdf.format(endDate); String result = formattedClassDate + "-" + formattedEndDate; List strings1 = new ArrayList<>(); strings1.add(result); detailsListVo.setTime(strings1); DetailsListVo detailsListVo1 = new DetailsListVo(); // detailsListVo1.setId(coursePackageStudent.getId()); BeanUtils.copyProperties(detailsListVo, detailsListVo1); objects.add(detailsListVo1); } } else { detailsListVo.setType(2); objects.add(detailsListVo); } } else { detailsListVo.setType(2); objects.add(detailsListVo); } //课程暂停 if(tCoursePackage.getState() == 4){ detailsListVo.setType(4); } } map.put("data", objects); return map; } private String week(int i) { String a = ""; switch (i) { case 1: a = "周一"; break; case 2: a = "周二"; break; case 3: a = "周三"; break; case 4: a = "周四"; break; case 5: a = "周五"; break; case 6: a = "周六"; break; case 7: a = "周日"; break; } return a; } @ResponseBody @PostMapping("/coursePackagePayment/queryCourseData") public List> queryCourseData(@RequestBody List ids) { // 找出课程类型 找出剩余的课时数 List list = coursePackageTypeService.list(); if (ids.size() == 0) { ids.add(-1); } List list1 = packagePaymentService.listOne(ids); // List collect = list1.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); // if (collect.size() == 0) { // collect.add(-1); // } // List list2 = tcpService.list(new LambdaQueryWrapper().in(TCoursePackage::getId, collect)); // for (TCoursePackagePayment tCoursePackagePayment : list1) { // for (TCoursePackage tCoursePackage : list2) { // if (tCoursePackagePayment.getCoursePackageId().equals(tCoursePackage.getId())) { // tCoursePackagePayment.setType(tCoursePackage.getType()); // } // } // } List> mapList = new ArrayList<>(); for (TCoursePackageType tCoursePackageType : list) { HashMap map = new HashMap<>(); map.put("name", tCoursePackageType.getName()); int a = 0; for (TCoursePackagePayment tCoursePackagePayment : list1) { if (null != tCoursePackagePayment.getType() && tCoursePackagePayment.getType().equals(tCoursePackageType.getId())) { a += tCoursePackagePayment.getLaveClassHours(); } } map.put("value", a); mapList.add(map); } return mapList; } @ResponseBody @PostMapping("/coursePackagePayment/coursePt") HashMap coursePt(@RequestBody List userPt) { if (userPt.size() == 0) { userPt.add(-1); } HashMap map = new HashMap<>(); List tCoursePackagePayments = packagePaymentService.listOne(userPt); int sum = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getTotalClassHours).sum(); int sum1 = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getLaveClassHours).sum(); // 查询介绍有礼课时数量 map.put("allCourse",sum-sum1); //所有课包 List coursePackages = tcpService.list(); // 年 List list = cspsService.list(new LambdaQueryWrapper().in(CoursePackageStudent::getAppUserId, userPt)); for (CoursePackageStudent coursePackageStudent : list) { for (TCoursePackage coursePackage : coursePackages) { if (coursePackageStudent.getCoursePackageId().equals(coursePackage.getId())) { if (ToolUtil.isEmpty(coursePackage.getNeedNum())) { coursePackageStudent.setNeedNum(0); } else { coursePackageStudent.setNeedNum(coursePackage.getNeedNum()); } } } } ArrayList integers = new ArrayList<>(); int year = cn.hutool.core.date.DateUtil.year(new Date()); for (int i = 0; i < 10; i++) { integers.add(year - i); } List collect = integers.stream().sorted().collect(Collectors.toList()); // 年 ArrayList years = new ArrayList<>(); for (Object o : collect) { String s = o.toString(); List collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList()); int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum(); years.add(sum2); } map.put("yearData", years); ArrayList months = new ArrayList<>(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 月 for (int i = 1; i <= 12; i++) { String m = i + ""; if (i < 10) { m = "0" + i; } String s = year + "-" + m; List collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList()); int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum(); months.add(sum2); } map.put("monthData", months); // 周 // 获取最近四周 LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); // 周度数据 LocalDateTime s1 = minNow.minusDays(6); LocalDateTime s2 = maxNow; LocalDateTime s3 = minNow.minusDays(13); LocalDateTime s4 = maxNow.minusDays(6); LocalDateTime s5 = minNow.minusDays(20); LocalDateTime s6 = maxNow.minusDays(13); LocalDateTime s7 = minNow.minusDays(27); LocalDateTime s8 = maxNow.minusDays(20); ArrayList weekData = new ArrayList<>(); int count = 0; int count1 = 0; int count2 = 0; int count3 = 0; for (CoursePackageStudent coursePackageStudent : list) { if (coursePackageStudent.getNeedNum() == null) { continue; } // 如果到课状态为否 则不计算 if (coursePackageStudent.getSignInOrNot() != 0) { Date insertTime = coursePackageStudent.getInsertTime(); Instant instant = insertTime.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime(); if (dateTime.isAfter(s1) && dateTime.isBefore(s2)) { count += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s3) && dateTime.isBefore(s4)) { count1 += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s5) && dateTime.isBefore(s6)) { count2 += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s7) && dateTime.isBefore(s8)) { count3 += coursePackageStudent.getNeedNum(); } } } weekData.add(count3); weekData.add(count2); weekData.add(count1); weekData.add(count); map.put("weekData", weekData); LocalDateTime currentDateTime = LocalDateTime.now(); List amountByDay = new ArrayList<>(Collections.nCopies(7, 0)); for (CoursePackageStudent coursePackageStudent : list) { Date insertTime = coursePackageStudent.getInsertTime(); // 将 Date 转换为 LocalDateTime LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault()); // 计算日期与当前日期的差距 long daysDifference = ChronoUnit.DAYS.between(insertDateTime.toLocalDate(), currentDateTime.toLocalDate()); // 如果日期在七天内,累加金额 if (daysDifference >= 0 && daysDifference < 7) { int index = (int) (6 - daysDifference); // 计算对应的索引位置 Integer needNum = coursePackageStudent.getNeedNum(); if (needNum != null) { int i = amountByDay.get(index) + needNum; amountByDay.set(index, i); } } } map.put("dayData", amountByDay); return map; } @ResponseBody @PostMapping("/coursePackagePayment/courseYys") HashMap courseYys(@RequestBody List userPt) { if (userPt.size() == 0) { userPt.add(-1); } HashMap map = new HashMap<>(); List tCoursePackagePayments = packagePaymentService.listOne(userPt); int sum = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getTotalClassHours).sum(); int sum1 = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getLaveClassHours).sum(); map.put("allCourse", sum - sum1); //所有课包 List coursePackages = tcpService.list(); // 年 List list = cspsService.list(new LambdaQueryWrapper().in(CoursePackageStudent::getAppUserId, userPt)); for (CoursePackageStudent coursePackageStudent : list) { for (TCoursePackage coursePackage : coursePackages) { if (coursePackageStudent.getCoursePackageId().equals(coursePackage.getId())) { if (ToolUtil.isEmpty(coursePackage.getNeedNum())) { coursePackageStudent.setNeedNum(0); } else { coursePackageStudent.setNeedNum(coursePackage.getNeedNum()); } } } } ArrayList integers = new ArrayList<>(); int year = cn.hutool.core.date.DateUtil.year(new Date()); for (int i = 0; i < 10; i++) { integers.add(year - i); } List collect = integers.stream().sorted().collect(Collectors.toList()); // 年 ArrayList years = new ArrayList<>(); for (Object o : collect) { String s = o.toString(); List collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList()); int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum(); years.add(sum2); } map.put("yearData", years); ArrayList months = new ArrayList<>(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 月 for (int i = 1; i <= 12; i++) { String m = i + ""; if (i < 10) { m = "0" + i; } String s = year + "-" + m; List collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList()); int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum(); months.add(sum2); } map.put("monthData", months); // 周 // 获取最近四周 LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); // 周度数据 LocalDateTime s1 = minNow.minusDays(6); LocalDateTime s2 = maxNow; LocalDateTime s3 = minNow.minusDays(13); LocalDateTime s4 = maxNow.minusDays(6); LocalDateTime s5 = minNow.minusDays(20); LocalDateTime s6 = maxNow.minusDays(13); LocalDateTime s7 = minNow.minusDays(27); LocalDateTime s8 = maxNow.minusDays(20); ArrayList weekData = new ArrayList<>(); int count = 0; int count1 = 0; int count2 = 0; int count3 = 0; for (CoursePackageStudent coursePackageStudent : list) { if (coursePackageStudent.getNeedNum() == null) { continue; } // 如果到课状态为否 则不计算 if (coursePackageStudent.getSignInOrNot() != 0) { Date insertTime = coursePackageStudent.getInsertTime(); Instant instant = insertTime.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime(); if (dateTime.isAfter(s1) && dateTime.isBefore(s2)) { count += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s3) && dateTime.isBefore(s4)) { count1 += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s5) && dateTime.isBefore(s6)) { count2 += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s7) && dateTime.isBefore(s8)) { count3 += coursePackageStudent.getNeedNum(); } } } weekData.add(count3); weekData.add(count2); weekData.add(count1); weekData.add(count); map.put("weekData", weekData); LocalDateTime currentDateTime = LocalDateTime.now(); List amountByDay = new ArrayList<>(Collections.nCopies(7, 0)); for (CoursePackageStudent coursePackageStudent : list) { Date insertTime = coursePackageStudent.getInsertTime(); // 将 Date 转换为 LocalDateTime LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault()); // 计算日期与当前日期的差距 long daysDifference = ChronoUnit.DAYS.between(insertDateTime.toLocalDate(), currentDateTime.toLocalDate()); // 如果日期在七天内,累加金额 if (daysDifference >= 0 && daysDifference < 7) { int index = (int) (6 - daysDifference); // 计算对应的索引位置 Integer needNum = coursePackageStudent.getNeedNum(); if (needNum != null) { int i = amountByDay.get(index) + needNum; amountByDay.set(index, i); } } } map.put("dayData", amountByDay); return map; } @ResponseBody @PostMapping("/coursePackagePayment/courseStore") HashMap courseStore(@RequestBody List userPt) { if (userPt.size() == 0) { userPt.add(-1); } HashMap map = new HashMap<>(); List tCoursePackagePayments = packagePaymentService.listOne(userPt); int sum = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getTotalClassHours).sum(); int sum1 = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getLaveClassHours).sum(); map.put("allCourse", sum - sum1); //所有课包 List coursePackages = tcpService.list(); // 年 List list = cspsService.list(new LambdaQueryWrapper().in(CoursePackageStudent::getAppUserId, userPt)); for (CoursePackageStudent coursePackageStudent : list) { for (TCoursePackage coursePackage : coursePackages) { if (coursePackageStudent.getCoursePackageId().equals(coursePackage.getId())) { if (ToolUtil.isEmpty(coursePackage.getNeedNum())) { coursePackageStudent.setNeedNum(0); } else { coursePackageStudent.setNeedNum(coursePackage.getNeedNum()); } } } } ArrayList integers = new ArrayList<>(); int year = cn.hutool.core.date.DateUtil.year(new Date()); for (int i = 0; i < 10; i++) { integers.add(year - i); } List collect = integers.stream().sorted().collect(Collectors.toList()); // 年 ArrayList years = new ArrayList<>(); for (Object o : collect) { String s = o.toString(); List collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList()); int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum(); years.add(sum2); } map.put("yearData", years); ArrayList months = new ArrayList<>(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 月 for (int i = 1; i <= 12; i++) { String m = i + ""; if (i < 10) { m = "0" + i; } String s = year + "-" + m; List collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList()); int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum(); months.add(sum2); } map.put("monthData", months); // 周 // 获取最近四周 LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); // 周度数据 LocalDateTime s1 = minNow.minusDays(6); LocalDateTime s2 = maxNow; LocalDateTime s3 = minNow.minusDays(13); LocalDateTime s4 = maxNow.minusDays(6); LocalDateTime s5 = minNow.minusDays(20); LocalDateTime s6 = maxNow.minusDays(13); LocalDateTime s7 = minNow.minusDays(27); LocalDateTime s8 = maxNow.minusDays(20); ArrayList weekData = new ArrayList<>(); int count = 0; int count1 = 0; int count2 = 0; int count3 = 0; for (CoursePackageStudent coursePackageStudent : list) { if (coursePackageStudent.getNeedNum() == null) { continue; } // 如果到课状态为否 则不计算 if (coursePackageStudent.getSignInOrNot() != 0) { Date insertTime = coursePackageStudent.getInsertTime(); Instant instant = insertTime.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime(); if (dateTime.isAfter(s1) && dateTime.isBefore(s2)) { count += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s3) && dateTime.isBefore(s4)) { count1 += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s5) && dateTime.isBefore(s6)) { count2 += coursePackageStudent.getNeedNum(); } else if (dateTime.isAfter(s7) && dateTime.isBefore(s8)) { count3 += coursePackageStudent.getNeedNum(); } } } weekData.add(count3); weekData.add(count2); weekData.add(count1); weekData.add(count); map.put("weekData", weekData); LocalDateTime currentDateTime = LocalDateTime.now(); List amountByDay = new ArrayList<>(Collections.nCopies(7, 0)); for (CoursePackageStudent coursePackageStudent : list) { Date insertTime = coursePackageStudent.getInsertTime(); // 将 Date 转换为 LocalDateTime LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault()); // 计算日期与当前日期的差距 long daysDifference = ChronoUnit.DAYS.between(insertDateTime.toLocalDate(), currentDateTime.toLocalDate()); // 如果日期在七天内,累加金额 if (daysDifference >= 0 && daysDifference < 7) { int index = (int) (6 - daysDifference); // 计算对应的索引位置 Integer needNum = coursePackageStudent.getNeedNum(); if (needNum != null) { int i = amountByDay.get(index) + needNum; amountByDay.set(index, i); } } } map.put("dayData", amountByDay); return map; } @ResponseBody @PostMapping("/coursePackagePayment/queryPaymentCoursePackage") public List queryPaymentCoursePackage(@RequestBody List storeIds){ if(storeIds.size() == 0){ return new ArrayList<>(); } List list = coursePackageService.list(new QueryWrapper().eq("auditStatus", 2) .ne("status", 4).eq("state", 1).in("storeId", storeIds)); List collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList()); if(collect.size() == 0){ return new ArrayList<>(); } List list1 = coursePackageOrderService.list(new QueryWrapper().in("coursePackageId", collect).eq("payStatus", 2).eq("status", 1)); return list1.stream().map(CoursePackageOrder::getAppUserId).collect(Collectors.toList()); } }