From eb6b6dbb35a9f029e0b7d269773685c19fd40976 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 11 七月 2024 10:47:51 +0800 Subject: [PATCH] 玩湃微信商户认证代码 --- cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 3237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 3,186 insertions(+), 51 deletions(-) diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java index e26735e..a767089 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java @@ -1,23 +1,56 @@ package com.dsh.course.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.dsh.course.entity.TCoursePackage; -import com.dsh.course.entity.TCoursePackagePayment; -import com.dsh.course.feignclient.model.CourseOfStoreVo; -import com.dsh.course.feignclient.model.StuCourseResp; -import com.dsh.course.feignclient.model.StuSessionDetailsVo; -import com.dsh.course.service.TCoursePackagePaymentService; -import com.dsh.course.service.TCoursePackageService; -import com.dsh.course.util.DateUtil; +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 java.util.ArrayList; -import java.util.List; +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 @@ -25,83 +58,3185 @@ @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<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .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<CoursePackageOrderStudent>().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<CoursePackagePaymentConfig>() + .eq("coursePackageId", byId.getId()) + .eq("classHours", byId1.getClassHours())); + + // 判断当前购买的课包有没有赠送课时 + TCoursePackageDiscount one = tcpdService.getOne(new QueryWrapper<TCoursePackageDiscount>().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<CoursePackagePaymentConfig>() + .eq("coursePackageId", byId.getId()) + .eq("classHours", byId1.getClassHours())); + // 判断当前购买的课包有没有赠送课时 + TCoursePackageDiscount one = tcpdService.getOne(new QueryWrapper<TCoursePackageDiscount>().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<CoursePackageOrderStudent> getByUserIdAndCoursePackageId(@PathVariable("appUserId") Integer appUserId, @PathVariable("coursePackageId") Integer coursePackageId) { + List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .eq("appUserId", appUserId) + .eq("coursePackageId", coursePackageId)); + return list; + } + + /** + * 获取购课记录 + */ + @ResponseBody + @RequestMapping("/coursePackagePayment/listAll") + public List<CoursePackagePaymentVO> listAll(@RequestBody CoursePackagePaymentQuery query) { + List<CoursePackagePaymentVO> res = packagePaymentService.listAll(query); + List<CoursePackagePaymentVO> result = new ArrayList<>(); + for (CoursePackagePaymentVO re : res) { + // 判断这条记录有没有赠送课时 + Integer coursePackageId = re.getCoursePackageId(); + Integer classHours = re.getClassHours(); + CoursePackagePaymentConfig one = icppcService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() + .eq("coursePackageId", coursePackageId) + .eq("classHours", classHours)); + if (one!=null){ + TCoursePackageDiscount one1 = discountService.getOne(new QueryWrapper<TCoursePackageDiscount>().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<AppUser> appUsers = appUserClient.queryAppUserListByName(query.getPayUser()); + for (AppUser user : appUsers) { + if (appUser.getName().equals(user.getName())) { + if (query.getPayStudent() == null || query.getPayStudent().equals("")) { + } else { + List<Student> 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<TCoursePackageDiscount>() + .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<RegisterOrderVO> listAllRegister(@RequestBody RegisterOrderQuery query) { + if (query.getStudentName() != null) { + if (!query.getStudentName().equals("")) { + List<TStudent> students1 = studentClient.queryTStudentListByName(query.getStudentName()); + List<Integer> studentIds = students1.stream().map(TStudent::getId).collect(Collectors.toList()); + query.setStudentIds(studentIds); + if (students1.size() == 0) { + return new ArrayList<>(); + } + } + } + List<RegisterOrderVO> res = packagePaymentService.listAllRegister(query); + // 该运营商下没有门店 + if (query.getInsertType() == 2) { + if (query.getStoresIds() != null) { + if (query.getStoresIds().size() == 0) { + List<RegisterOrderVO> registerOrderVOS = new ArrayList<>(); + return registerOrderVOS; + } + } else { + List<RegisterOrderVO> registerOrderVOS = new ArrayList<>(); + return registerOrderVOS; + } + } + + List<RegisterOrderVO> result = new ArrayList<>(); + Iterator<RegisterOrderVO> 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 课包列表 + * @return 课包列表 */ - @PostMapping("/coursePack/queryPayment") - public List<StuCourseResp> getStuCoursePackagePayment(@RequestBody Integer stuId,@RequestBody Integer appUserId){ + @ResponseBody + @PostMapping("/base/coursePack/queryPayment") + public List<StuCourseResp> getStuCoursePackagePayment(@RequestBody Integer stuId) { List<StuCourseResp> resps = new ArrayList<>(); - List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(stuId,appUserId); - if (byUserId.size() > 0 ){ - for (TCoursePackagePayment tCoursePackagePayment : byUserId) { + Student student = studentClient.queryStudentById(stuId); + List<CoursePackageOrderStudent> byUserId = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .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.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; } /** - * * 获取发布的 课包列表 */ - @PostMapping("/coursePack/storeOfCourse") - public List<CourseOfStoreVo> getStuCourseWithStores(){ - List<CourseOfStoreVo> courseOfStoreVos = tcpService.queryStoreOfCourse(); - if (courseOfStoreVos.size() > 0){ - for (CourseOfStoreVo courseOfStoreVo : courseOfStoreVos) { - String[] split = courseOfStoreVo.getClassWeeks().split(";"); - List<Integer> integers = new ArrayList<>(); - for (String s : split) { - int num = Integer.parseInt(s); - integers.add(num); + @ResponseBody + @PostMapping("/base/coursePack/storeOfCourse") + public List<CourseOfStoreVo> getStuCourseWithStores(@RequestBody WeeksOfCourseRest courseRest) { + List<CourseOfStoreVo> course = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date parse = simpleDateFormat.parse(courseRest.getTime()); + List<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .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<CoursePackageStudent> packageStudent = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>() + .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<CoursePackagePaymentConfig>() + .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); + } + } } - courseOfStoreVo.setClassWeekList(integers); + } + System.out.println(course); + return course; + } catch (ParseException e) { + return null; + } + } + + @Autowired + private ICoursePackageOrderStudentService orderStudentService; + + /** + * 课程名称列表 + */ + @PostMapping("/base/coursePack/sessionNames") + public List<StuSessionDetailsVo> getStuSessionList(@RequestBody CourseDetailRequest request) { + List<StuSessionDetailsVo> detailsVos = new ArrayList<>(); + List<CoursePackageOrderStudent> byUserId = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .between("insertTime", request.getStartTime(), request.getEndTime()) + .eq("appUserId", request.getAppUserId()) + .eq("studentId", request.getStuId())); + if (byUserId.size() > 0) { + List<Integer> collect = byUserId.stream().map(CoursePackageOrderStudent::getCoursePackageId).collect(Collectors.toList()); + List<TCoursePackage> list = tcpService.list(new QueryWrapper<TCoursePackage>() + .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<PurchaseRecordVo> queryCourseDetails(@RequestBody GetStuSessionList sessionList) { + List<PurchaseRecordVo> purchaseRecordVos = new ArrayList<>(); + + List<TCoursePackagePayment> coursePackage = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .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<PurchaseRecordVo> getRecord(@RequestBody RecordTimeRequest recordTimeRequest) { +// List<CoursePackageOrderStudent> list = new ArrayList<>(); + Integer[] changes = {1, 0}; +// if (recordTimeRequest.getType() == null) { +// list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", recordTimeRequest.getStuId()).eq("coursePackageId", recordTimeRequest.getLessionId()).orderByDesc("insertTime")); +// } else { +// +// list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", recordTimeRequest.getStuId()).eq("coursePackageId", recordTimeRequest.getLessionId()).orderByDesc("insertTime")); +// } +// List<Integer> appUserIds = list.stream().map(CoursePackageOrderStudent::getAppUserId).collect(Collectors.toList()); + List<CoursePackageOrderStudent> list1 = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .eq("studentId", recordTimeRequest.getStuId()) + .eq("coursePackageId", recordTimeRequest.getLessionId()) + .eq("state", 1) + ); + List<Long> collect = list1.stream().map(CoursePackageOrderStudent::getId).collect(Collectors.toList()); + + QueryWrapper<CourseCounsum> in = new QueryWrapper<CourseCounsum>().in("paymentId", collect).in("changeType", changes); + + if (recordTimeRequest.getType() != null) { + if (recordTimeRequest.getType() == 2) { + recordTimeRequest.setType(0); + } + in.eq("changeType", recordTimeRequest.getType()); + } + List<CourseCounsum> paymentId = courseCounsumService.list(in); + List<PurchaseRecordVo> 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<CoursePackageOrderStudent> byUserId = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .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<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .eq("appUserId", getStudentCourse.getAppUserId()) + .eq("coursePackageId", getStudentCourse.getCourseId()) + .eq("studentId", getStudentCourse.getStuId())); + if (tCoursePackagePayments.size() > 0) { + List<CourseHoursType> 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<Integer> 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<TCoursePackageDiscount>() + .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<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId) { + List<AfterVideoVo> videoVos = new ArrayList<>(); + List<UserVideoDetails> list = uvdsService.list(new QueryWrapper<UserVideoDetails>() + .eq("appUserId", appUserId) + .eq("state", 1)); + if (list.size() > 0) { + List<Integer> courseIds = list.stream().map(UserVideoDetails::getCourseId).collect(Collectors.toList()); + List<TCourse> courseList = tcService.list(new QueryWrapper<TCourse>() + .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 tcpService.queryStoreOfCourse(); + return videoVos; + } + + @PostMapping("/base/coursePack/allPaymentCourseList") + @ResponseBody + public List<CouponPaymentVo> getAppuserCourseList(@RequestBody Integer appUserId) { + List<CouponPaymentVo> paymentVos = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); +// List<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() +// .eq("appUserId", appUserId) +// .eq("payType", 3) +// .eq("payStatus", 2) +// .eq("state", 1)); + + + List<CoursePackageOrder> list = coursePackageOrderService.list(new QueryWrapper<CoursePackageOrder>().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<BillingRequest> 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<List<BaseVo>> queryArrangePackageType() { + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if (null == appUserId) { + return ResultUtil.tokenErr(); + } + List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .eq("appUserId", appUserId)); + List<BaseVo> 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<BaseVo> set = new HashSet<>(list); + List<BaseVo> 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<List<AppUserVideoResponse>> queryAfterSourceList(CourseOfAfterRequest search) throws Exception { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + + if (null == appUserId) { + return ResultUtil.tokenErr(); + } + QueryWrapper<CoursePackageStudent> queryWrapper1 = new QueryWrapper<CoursePackageStudent>().eq("studentId", search.getStuId()); + if (ToolUtil.isNotEmpty(search.getCourseTypeId())) { + queryWrapper1.eq("coursePackageId", search.getCourseTypeId()); + } + + List<CoursePackageStudent> list = coursePackageStudentService.list(queryWrapper1); + List<Long> longs = new ArrayList<>(); + for (CoursePackageStudent coursePackageStudent : list) { + longs.add(coursePackageStudent.getCoursePackageSchedulingId()); + } + + System.out.println("======longs========" + longs); + List<AppUserVideoResponse> coursePackageSchedulings1 = coursePackageSchedulingService.queryAll(longs); + + if (search.getSearch() != null) { + List<AppUserVideoResponse> 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<CourseOfVideoResponse> 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<PayCourseInfoReq> 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<List<PayCourseRes>> 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<List<BaseVo>> queryCoursePackageType() { + try { + List<TCoursePackageType> coursePackageTypes = coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().eq("state", 1)); + List<BaseVo> 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(); + } } /** - * - * 课程名称列表 + * 已报名课程列表 */ - @PostMapping("/coursePack/sessionNames") - public List<StuSessionDetailsVo> getStuSessionList(@RequestBody Integer stuId,@RequestBody Integer appUserId){ - List<StuSessionDetailsVo> detailsVos = new ArrayList<>(); - List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(stuId,appUserId); - if (byUserId.size() > 0){ - List<Integer> collect = byUserId.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); - List<TCoursePackage> list = tcpService.list(new QueryWrapper<TCoursePackage>() - .in("id", collect)); - list.forEach(vo -> { - StuSessionDetailsVo detVo = new StuSessionDetailsVo(); - detVo.setSessionid(vo.getId()); - detVo.setSessionName(vo.getName()); - String afterDayDate = DateUtil.getAfterDayDate2(vo.getInsertTime(),vo.getValidDays() + ""); - detVo.setPeriodOfValidity(afterDayDate); - detailsVos.add(detVo); - }); + @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<List<RegisterCourseVo>> 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(); } - return detailsVos; + } + + + /** + * 已报名课程详情 + */ + @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<CourseDetailsResponse> 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<String, String> 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<String, String> 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<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().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<TCoursePackagePayment>().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<CoursePackageScheduling> list1 = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>() + .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<CoursePackageStudent>() + .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<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", coursePackagePayment.getStudentId()).eq("coursePackageId", coursePackagePayment.getCoursePackageId())); +// List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); +// coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().in("id", collect)); +// coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", paymentDeductionClassHour.getId()).eq("coursePackageId", coursePackagePayment.getCoursePackageId())); +// +// +// TCoursePackage tCoursePackage = packageService.getById(coursePackagePayment.getCoursePackageId()); +// String classWeeks = tCoursePackage.getClassWeeks(); +// List<Integer> week = week(classWeeks); +// +// TCoursePackagePayment pay = packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().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<Integer> week(String week) { + String[] split = week.split(";"); + ArrayList<Integer> 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<CancelledClasses> voucher = cancelledClassesService.list(new QueryWrapper<CancelledClasses>().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<PayCourseRes> paymentCompetitionCourseList(@RequestBody String s) { + ArrayList<PayCourseRes> objects = new ArrayList<>(); + + String[] split = s.split("_"); + // 用户id + Integer integer = Integer.valueOf(split[0]); + String s1 = split[1]; + // 门店id + String[] split1 = s1.split(","); + ArrayList<Integer> storeIds = new ArrayList<>(); + for (String s2 : split1) { + storeIds.add(Integer.valueOf(s2)); + } +// List<TCoursePackagePayment> list = packagePaymentService.list(new LambdaQueryWrapper<TCoursePackagePayment>().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<CoursePackageOrderStudent> tCoursePackagePayments = coursePackageOrderStudentService.list(new LambdaQueryWrapper<CoursePackageOrderStudent>().eq(CoursePackageOrderStudent::getAppUserId, integer)); +// ArrayList<PayCourseRes> 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<TCoursePackagePayment>().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<TCoursePackagePayment>() + .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<TCoursePackagePayment>() + .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<TCoursePackagePayment>() + .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<TCoursePackagePayment>().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<Date> 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<Integer> 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<Integer> 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<Integer> 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<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", sId).eq("coursePackageId", courseId)); + List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); + //拿到最后一天的排课记录 + if (collect.size() > 0) { + coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().in("id", collect)); + coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().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<Integer> 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<RecordAppoint> 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<CoursePackagePaymentConfig> getCourseConfigList(@RequestBody Integer coursePackageId) { + return icppcService.list(new QueryWrapper<CoursePackagePaymentConfig>() + .eq("coursePackageId", coursePackageId)); + } + + + @PostMapping("/base/coursePack/getCoursePackagePaymentOfCode") + public List<TCoursePackagePayment> getCoursePackagePaymentOfCode(@RequestBody String code) { + return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .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<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", byId.getStudentId()).eq("coursePackageId", byId.getCoursePackageId())); + List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); + coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().in("id", collect)); + coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", byId.getStudentId()).eq("coursePackageId", byId.getCoursePackageId())); + + + TCoursePackage tCoursePackage = packageService.getById(byId.getCoursePackageId()); + String classWeeks = tCoursePackage.getClassWeeks(); + List<Integer> week = week(classWeeks); + + TCoursePackagePayment pay = packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().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<Map<String, Object>> queryRegistrationRecord(@RequestBody QueryRegistrationRecord queryRegistrationRecord) { + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryRegistrationRecord.getLimit(), queryRegistrationRecord.getOffset(), queryRegistrationRecord.getSort(), queryRegistrationRecord.getOrder()); + Page<Map<String, Object>> mapPage = page.setRecords(packagePaymentService.queryRegistrationRecord(page, queryRegistrationRecord)); + return mapPage; + } + + + /** + * 获取未预约排课学员列表 + * + * @param queryWalkInStudentList + * @return + */ + @ResponseBody + @PostMapping("/coursePackagePayment/queryWalkInStudentList") + public Page<Map<String, Object>> queryWalkInStudentList(@RequestBody QueryWalkInStudentList queryWalkInStudentList) { + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryWalkInStudentList.getLimit(), queryWalkInStudentList.getOffset(), queryWalkInStudentList.getSort(), queryWalkInStudentList.getOrder()); + Page<Map<String, Object>> 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()<coursePackage.getNeedNum()){ + return 1; + } + coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours()-coursePackage.getNeedNum()); + orderStudentService.updateById(coursePackageOrderStudent); + Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); + if(3 >= 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<CoursePackageOrderStudent>().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<CoursePackageOrderStudent> packagePayment = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .eq("coursePackageId", courseID) + .eq("appUserId", appUserId) + .eq("studentId", stuId) + ); + + if (ToolUtil.isEmpty(packagePayment) || packagePayment.size() == 0) { + return ResultUtil.error("该用户未购买该课包"); + } + List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper<CoursePackageScheduling>() + .eq(CoursePackageScheduling::getCoursePackageId, Integer.valueOf(courseID)) + .like(CoursePackageScheduling::getClassDate, time) + ); + + List<CoursePackageStudent> coursePackageStudent = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>() + .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<CourseCounsum> getConsumes(@RequestBody BillingDataRequestVo requestVo) { + Integer[] integers = {2, 3}; + QueryWrapper<CourseCounsum> courseCounsumQueryWrapper = new QueryWrapper<CourseCounsum>().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<String, Object> weeksOfCourseDetailsList(@RequestBody CourseDetailReq courseDetailReq) { + HashMap<String, Object> map = new HashMap<>(); + ArrayList<DetailsListVo> 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<String, Double> 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<TCoursePackage> list = tcpService.list(new LambdaQueryWrapper<TCoursePackage>() + .eq(TCoursePackage::getStoreId, courseDetailReq.getStoreId()).ne(TCoursePackage::getType, 3) + .eq(TCoursePackage::getState, 1).like(TCoursePackage::getClassWeeks, week)); + List<Integer> collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList()); + if (collect.size() == 0) { + collect.add(-1); + } + + List<CoursePackageScheduling> list8 = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper<CoursePackageScheduling>() + .eq(CoursePackageScheduling::getAppUserId, courseDetailReq.getAppUserId()) + .eq(CoursePackageScheduling::getStudentId, courseDetailReq.getStuId()) + .in(CoursePackageScheduling::getCoursePackageId, collect) + ); + List<Integer> 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<String> 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<String> stringLists = new ArrayList<>(); + stringLists.add(result); + detailsListVo.setTime(stringLists); + + } + //价格 + List<CoursePackagePaymentConfig> list2 = icppcService.list(new LambdaQueryWrapper<CoursePackagePaymentConfig>().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<CoursePackageScheduling> list3 = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper<CoursePackageScheduling>() + .eq(CoursePackageScheduling::getCoursePackageId, tCoursePackage.getId()) + .like(CoursePackageScheduling::getClassDate, courseDetailReq.getTime()) + ); + + if (list3.isEmpty()) { + detailsListVo.setType(2); + objects.add(detailsListVo); + continue; + } + //排课的ids + List<Long> collect2 = list3.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList()); + if (collect2.isEmpty()){ + collect2.add(-1l); + } + + + List<CoursePackageStudent> list4 = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>() + .eq(CoursePackageStudent::getAppUserId, courseDetailReq.getAppUserId()) + .eq(CoursePackageStudent::getStudentId, courseDetailReq.getStuId()) + .eq(CoursePackageStudent::getCoursePackageId, tCoursePackage.getId()) + .in(CoursePackageStudent::getCoursePackageSchedulingId, collect2) + ); + + List<CoursePackageStudent> list5 = cspsService.list(new QueryWrapper<CoursePackageStudent>().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<String> 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<Map<String, Object>> queryCourseData(@RequestBody List<Integer> ids) { + // 找出课程类型 找出剩余的课时数 + List<TCoursePackageType> list = coursePackageTypeService.list(); + if (ids.size() == 0) { + ids.add(-1); + } + List<TCoursePackagePayment> list1 = packagePaymentService.listOne(ids); +// List<Integer> collect = list1.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); +// if (collect.size() == 0) { +// collect.add(-1); +// } +// List<TCoursePackage> list2 = tcpService.list(new LambdaQueryWrapper<TCoursePackage>().in(TCoursePackage::getId, collect)); +// for (TCoursePackagePayment tCoursePackagePayment : list1) { +// for (TCoursePackage tCoursePackage : list2) { +// if (tCoursePackagePayment.getCoursePackageId().equals(tCoursePackage.getId())) { +// tCoursePackagePayment.setType(tCoursePackage.getType()); +// } +// } +// } + + + List<Map<String, Object>> mapList = new ArrayList<>(); + for (TCoursePackageType tCoursePackageType : list) { + HashMap<String, Object> 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<String, Object> coursePt(@RequestBody List<Integer> userPt) { + if (userPt.size() == 0) { + userPt.add(-1); + } + HashMap<String, Object> map = new HashMap<>(); + List<TCoursePackagePayment> 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<TCoursePackage> coursePackages = tcpService.list(); + + + // 年 + List<CoursePackageStudent> list = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>().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<Object> 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<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Integer> years = new ArrayList<>(); + for (Object o : collect) { + String s = o.toString(); + List<CoursePackageStudent> 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<Integer> 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<CoursePackageStudent> 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<Object> 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<Integer> 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<String, Object> courseYys(@RequestBody List<Integer> userPt) { + if (userPt.size() == 0) { + userPt.add(-1); + } + HashMap<String, Object> map = new HashMap<>(); + List<TCoursePackagePayment> 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<TCoursePackage> coursePackages = tcpService.list(); + + + // 年 + List<CoursePackageStudent> list = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>().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<Object> 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<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Integer> years = new ArrayList<>(); + for (Object o : collect) { + String s = o.toString(); + List<CoursePackageStudent> 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<Integer> 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<CoursePackageStudent> 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<Object> 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<Integer> 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<String, Object> courseStore(@RequestBody List<Integer> userPt) { + if (userPt.size() == 0) { + userPt.add(-1); + } + HashMap<String, Object> map = new HashMap<>(); + List<TCoursePackagePayment> 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<TCoursePackage> coursePackages = tcpService.list(); + + + // 年 + List<CoursePackageStudent> list = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>().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<Object> 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<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Integer> years = new ArrayList<>(); + for (Object o : collect) { + String s = o.toString(); + List<CoursePackageStudent> 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<Integer> 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<CoursePackageStudent> 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<Object> 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<Integer> 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<Integer> queryPaymentCoursePackage(@RequestBody List<Integer> storeIds){ + if(storeIds.size() == 0){ + return new ArrayList<>(); + } + List<TCoursePackage> list = coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("auditStatus", 2) + .ne("status", 4).eq("state", 1).in("storeId", storeIds)); + List<Integer> collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList()); + if(collect.size() == 0){ + return new ArrayList<>(); + } + List<CoursePackageOrder> list1 = coursePackageOrderService.list(new QueryWrapper<CoursePackageOrder>().in("coursePackageId", collect).eq("payStatus", 2).eq("status", 1)); + return list1.stream().map(CoursePackageOrder::getAppUserId).collect(Collectors.toList()); } } -- Gitblit v1.7.1