package com.dsh.course.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.CoursePackagePaymentConfig; import com.dsh.course.entity.TCoursePackage; import com.dsh.course.entity.TCoursePackageDiscount; import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.GetDistanceVo; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.CoursePackagePaymentConfigMapper; import com.dsh.course.mapper.TCoursePackageDiscountMapper; import com.dsh.course.mapper.TCoursePackageMapper; import com.dsh.course.mapper.TCoursePackagePaymentMapper; import com.dsh.course.model.vo.response.Details; import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.util.DateTimeHelper; import com.dsh.course.util.LocalDateTimeUtils; import com.dsh.course.util.StrUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** *

* 课包折扣 服务实现类 *

* * @author administrator * @since 2023-06-14 */ @Service public class TCoursePackageDiscountServiceImpl extends ServiceImpl implements TCoursePackageDiscountService { @Resource private TCoursePackageMapper tcpMapper; @Resource private TCoursePackagePaymentMapper tcppMapper; @Resource private CoursePackagePaymentConfigMapper cppcMapper; @Resource private StoreClient sreClient; @Override public List
getWeeksBenefitCourse(Integer appUserId, Integer discountType, String lon, String lat) { Date localTime = DateTimeHelper.getWXTime(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List
list = new ArrayList<>(); QueryWrapper tCoursePackageDiscountQueryWrapper = new QueryWrapper<>(); tCoursePackageDiscountQueryWrapper.eq("auditStatus", 2); List tCoursePackageDiscounts = new ArrayList<>(); int weekStr = LocalDateTimeUtils.getWeekStr(); if (null == discountType || discountType == 1) { tCoursePackageDiscountQueryWrapper.eq("type", 3); tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper); if (tCoursePackageDiscounts.size() > 0) { for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) { TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId()); // 判断预约人数是否已满 Integer maxSubscribeNumber = coursePackage.getMaxSubscribeNumber(); Integer integer = tcppMapper.selectCount(new QueryWrapper() .eq("appUserId",appUserId ) .eq("status",1)); if (integer >= maxSubscribeNumber){ continue; } /** * [{ * "startDate": "2023-01-01 00:00:00", * "endDate": "2023-12-31 23:59:59", * "startTime": "02:00:00", * "endTime": "23:00:00", * "weeks": [1, 2, 7], * "cashPayment": 100 * }] */ try { JSONArray jsonArray = JSON.parseArray(tCoursePackageDiscount.getContent()); JSONObject jsonObject = jsonArray.getJSONObject(0); Date parse1 = null; Date parse2 = null; String startDate = jsonObject.getString("startDate"); String endDate = jsonObject.getString("endDate"); try { parse1 = simpleDateFormat.parse(startDate); parse2 = simpleDateFormat.parse(endDate); } catch (ParseException e) { throw new RuntimeException(e); } List weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); Double cashPayment = jsonObject.getDouble("cashPayment"); Date tomorrowDate = null; if (weekStr != 7) { Calendar calendar = Calendar.getInstance(); calendar.setTime(localTime); calendar.add(Calendar.DAY_OF_WEEK, 1); tomorrowDate = calendar.getTime(); } boolean isWithinRange = false; if (weeks.contains(weekStr)) { isWithinRange = true; } if (isWithinRange) { // 判断当前日期是否在开始时间和结束时间范围内 if (isDateWithinRange(localTime, parse1, parse2)) { Details resde = new Details(); resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); resde.setImage(coursePackage.getCoverDrawing()); resde.setCoursePackageName(coursePackage.getName()); CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId()); resde.setCourseHours(paymentConfig.getClassHours()); resde.setDataTime("今日"); resde.setDate(localTime); resde.setOriginalPrice(paymentConfig.getCashPayment()); resde.setDiscountPrice(cashPayment); resde.setStatus(1); GetDistanceVo distanceVo = new GetDistanceVo(); distanceVo.setLatitude(lat); distanceVo.setLongitude(lon); distanceVo.setStoreId(coursePackage.getStoreId()); resde.setStoreDistance(sreClient.calculateDistance(distanceVo)); list.add(resde); } } Calendar tempCalendar = Calendar.getInstance(); tempCalendar.setTime(localTime); tempCalendar.add(Calendar.DAY_OF_WEEK, 1); while (tempCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { Date tempDate = tempCalendar.getTime(); int weekNumOfDate = DateTimeHelper.getWeekNumOfDate(tempDate); if (isDateWithinRange(tempDate, parse1, parse2) && weeks.contains(weekNumOfDate)) { Details resde = new Details(); resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); resde.setImage(coursePackage.getCoverDrawing()); resde.setCoursePackageName(coursePackage.getName()); CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId()); resde.setCourseHours(paymentConfig.getClassHours()); String weekOfDate = ""; if (weekStr != 7 && tempDate.equals(tomorrowDate)) { weekOfDate = "明日"; } else { weekOfDate = DateTimeHelper.getWeekOfDate(tempDate); } resde.setDataTime(weekOfDate); resde.setDate(tempDate); resde.setOriginalPrice(paymentConfig.getCashPayment()); resde.setDiscountPrice(cashPayment); resde.setStatus(2); GetDistanceVo distanceVo = new GetDistanceVo(); distanceVo.setLatitude(lat); distanceVo.setLongitude(lon); distanceVo.setStoreId(coursePackage.getStoreId()); resde.setStoreDistance(sreClient.calculateDistance(distanceVo)); list.add(resde); } tempCalendar.add(Calendar.DAY_OF_WEEK, 1); } } catch (Exception e) { e.printStackTrace(); } } } else { tCoursePackageDiscountQueryWrapper.eq("type", 4); tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper); if (tCoursePackageDiscounts.size() > 0) { for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) { TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId()); // 判断预约人数是否已满 Integer maxSubscribeNumber = coursePackage.getMaxSubscribeNumber(); Integer integer = tcppMapper.selectCount(new QueryWrapper() .eq("appUserId",appUserId ) .eq("status",1)); if (integer >= maxSubscribeNumber){ continue; } // [{ // "startDate": "2023-01-01 00:00:00", // "endDate": "2023-12-31 23:59:59", // "startTime": "02:00:00", // "endTime": "23:00:00", // "weeks": [1, 2, 7], // "hour": 10 // }] try { JSONArray jsonArray = JSON.parseArray(tCoursePackageDiscount.getContent()); JSONObject jsonObject = jsonArray.getJSONObject(0); Date parse1 = null; Date parse2 = null; String startDate = jsonObject.getString("startDate"); String endDate = jsonObject.getString("endDate"); try { parse1 = simpleDateFormat.parse(startDate); parse2 = simpleDateFormat.parse(endDate); } catch (ParseException e) { throw new RuntimeException(e); } List weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); Integer cashPayment = jsonObject.getInteger("hour"); Date tomorrowDate = null; if (weekStr != 7) { Calendar calendar = Calendar.getInstance(); calendar.setTime(localTime); calendar.add(Calendar.DAY_OF_WEEK, 1); tomorrowDate = calendar.getTime(); } boolean isWithinRange = false; if (weeks.contains(weekStr)) { isWithinRange = true; } if (isWithinRange) { // 判断当前日期是否在开始时间和结束时间范围内 if (isDateWithinRange(localTime, parse1, parse2)) { Details resde = new Details(); resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); resde.setImage(coursePackage.getCoverDrawing()); resde.setCoursePackageName(coursePackage.getName()); CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId()); resde.setCourseHours(paymentConfig.getClassHours()); resde.setDonateHours(cashPayment); resde.setDataTime("今日"); resde.setDate(localTime); resde.setOriginalPrice(paymentConfig.getCashPayment()); resde.setStatus(1); GetDistanceVo distanceVo = new GetDistanceVo(); distanceVo.setLatitude(lat); distanceVo.setLongitude(lon); distanceVo.setStoreId(coursePackage.getStoreId()); resde.setStoreDistance(sreClient.calculateDistance(distanceVo)); list.add(resde); } } Calendar tempCalendar = Calendar.getInstance(); tempCalendar.setTime(localTime); tempCalendar.add(Calendar.DAY_OF_WEEK, 1); while (tempCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { Date tempDate = tempCalendar.getTime(); int weekNumOfDate = DateTimeHelper.getWeekNumOfDate(tempDate); if (isDateWithinRange(tempDate, parse1, parse2) && weeks.contains(weekNumOfDate)) { Details resde = new Details(); resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); resde.setImage(coursePackage.getCoverDrawing()); resde.setCoursePackageName(coursePackage.getName()); CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId()); resde.setCourseHours(paymentConfig.getClassHours()); resde.setDonateHours(cashPayment); String weekOfDate = ""; if (weekStr != 7 && tempDate.equals(tomorrowDate)) { weekOfDate = "明日"; } else { weekOfDate = DateTimeHelper.getWeekOfDate(tempDate); } resde.setDataTime(weekOfDate); resde.setDate(tempDate); resde.setOriginalPrice(paymentConfig.getCashPayment()); resde.setStatus(2); GetDistanceVo distanceVo = new GetDistanceVo(); distanceVo.setLatitude(lat); distanceVo.setLongitude(lon); distanceVo.setStoreId(coursePackage.getStoreId()); resde.setStoreDistance(sreClient.calculateDistance(distanceVo)); list.add(resde); } tempCalendar.add(Calendar.DAY_OF_WEEK, 1); } } catch (Exception e) { e.printStackTrace(); } } } } } return list; } @Override public ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon) { ExchangeCoursePackageResponse packageResponse = new ExchangeCoursePackageResponse(); TCoursePackageDiscount coursePackageDiscount = this.baseMapper.selectById(coursePackageDiscountId); packageResponse.setCoursePackageDiscountId(coursePackageDiscount.getCoursePackageId()); Integer coursePackageId = coursePackageDiscount.getCoursePackageId(); TCoursePackage coursePackage = tcpMapper.selectById(coursePackageId); packageResponse.setCoverDrawing(coursePackage.getCoverDrawing()); packageResponse.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); packageResponse.setCoursePackageName(coursePackage.getName()); Store store = sreClient.queryStoreById(coursePackage.getStoreId()); packageResponse.setStoreNameAddr(store.getName() +"(" +store.getAddress()+")"); GetDistanceVo distanceVo = new GetDistanceVo(); distanceVo.setLatitude(lat); distanceVo.setLongitude(lon); distanceVo.setStoreId(coursePackage.getStoreId()); long l = sreClient.calculateDistance(distanceVo); packageResponse.setDistance(l); JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); JSONObject jsonObject = jsonArray.getJSONObject(0); CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(coursePackageDiscount.getCoursePackagePaymentConfigId()); if (coursePackageDiscount.getType() == 3){ Double cashPayment = jsonObject.getDouble("cashPayment"); packageResponse.setClassHours(paymentConfig.getClassHours()); packageResponse.setCostPrice(paymentConfig.getCashPayment()); packageResponse.setDiscountPrice(cashPayment); }else { packageResponse.setClassHours(paymentConfig.getClassHours()); Integer cashPayment = jsonObject.getInteger("hour"); packageResponse.setFreeClassHours(cashPayment); packageResponse.setCostPrice(paymentConfig.getCashPayment()); TCoursePackageDiscount coursePackageDiscount1 = this.baseMapper.selectOne(new QueryWrapper() .eq("type", 1) .eq("coursePackageId",coursePackage.getId())); String content = coursePackageDiscount1.getContent(); JSONObject jsonObject1 = JSON.parseObject(content); Double vipPrice = jsonObject1.getDouble("num1"); packageResponse.setDiscountPrice(vipPrice); packageResponse.setWanpaiGold(paymentConfig.getPlayPaiCoin()); } List weeks = StrUtils.dealStrToList(coursePackage.getClassWeeks()); if (weeks.size() > 0){ StringBuilder courWeeks = new StringBuilder("每"); for (Integer integer : weeks) { switch (integer){ case 1: courWeeks.append("周一、"); break; case 2: courWeeks.append("周二、"); break; case 3: courWeeks.append("周三、"); break; case 4: courWeeks.append("周四、"); break; case 5: courWeeks.append("周五、"); break; case 6: courWeeks.append("周六、"); break; case 7: courWeeks.append("周末、"); break; default: break; } } if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == ','){ courWeeks.deleteCharAt(courWeeks.length() - 1); } packageResponse.setWeekTime(courWeeks.toString()); } packageResponse.setTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); return packageResponse; } private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) { return date.after(startTime) && date.before(endTime); } }