From 75b60332f174363cfe67f61dea87832be708ac15 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 04 七月 2023 08:37:46 +0800
Subject: [PATCH] 更新部分接口

---
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java |  195 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 194 insertions(+), 1 deletions(-)

diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
index 2245525..ebc9270 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -1,13 +1,35 @@
 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.feignclient.account.AppUserClient;
+import com.dsh.course.feignclient.account.model.AppUser;
+import com.dsh.course.feignclient.other.StoreClient;
+import com.dsh.course.feignclient.other.model.Store;
 import com.dsh.course.mapper.TCoursePackageMapper;
 import com.dsh.course.feignclient.model.CourseOfStoreVo;
+import com.dsh.course.model.CoursePackageList;
+import com.dsh.course.model.CoursePackageListVo;
+import com.dsh.course.service.ICoursePackagePaymentConfigService;
+import com.dsh.course.service.TCoursePackageDiscountService;
+import com.dsh.course.service.TCoursePackagePaymentService;
 import com.dsh.course.service.TCoursePackageService;
+import com.dsh.course.util.GDMapGeocodingUtil;
+import com.dsh.course.util.GeodesyUtil;
+import com.dsh.course.util.ToolUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -20,8 +42,179 @@
 @Service
 public class TCoursePackageServiceImpl extends ServiceImpl<TCoursePackageMapper, TCoursePackage> implements TCoursePackageService {
 
+    @Resource
+    private StoreClient storeClient;
+
+    @Autowired
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+    @Autowired
+    private TCoursePackagePaymentService coursePackagePaymentService;
+
+    @Autowired
+    private ICoursePackagePaymentConfigService coursePackagePaymentConfigService;
+
+    @Autowired
+    private TCoursePackageDiscountService coursePackageDiscountService;
+
+    @Resource
+    private AppUserClient appUserClient;
+
+
+
+
     @Override
     public List<CourseOfStoreVo> queryStoreOfCourse() {
         return this.baseMapper.queryStoreOfCourse();
     }
+
+
+    /**
+     * 获取课程列表
+     * @param coursePackageList
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<CoursePackageListVo> queryCourseList(Integer uid, CoursePackageList coursePackageList) throws Exception {
+        AppUser appUser = appUserClient.queryAppUser(uid);
+        Map<String, String> geocode = gdMapGeocodingUtil.geocode(coursePackageList.getLon(), coursePackageList.getLat());
+        String provinceCode = geocode.get("provinceCode");
+        String cityCode = geocode.get("cityCode");
+        QueryWrapper<TCoursePackage> wrapper = new QueryWrapper<TCoursePackage>().in("status", Arrays.asList(1, 2))
+                .eq("auditStatus", 2).eq("state", 1).eq("provinceCode", provinceCode).eq("cityCode", cityCode);
+        if(null != coursePackageList.getCoursePackageTypeId()){
+            wrapper.eq("coursePackageTypeId", coursePackageList.getCoursePackageTypeId());
+        }
+        if(null != coursePackageList.getStoreId()){
+            wrapper.eq("storeId", coursePackageList.getStoreId());
+        }
+        if(null != coursePackageList.getStoreId()){
+            wrapper.eq("storeId", coursePackageList.getStoreId());
+        }
+        if(ToolUtil.isNotEmpty(coursePackageList.getSearch())){
+            wrapper.like("name", coursePackageList.getSearch());
+            List<Store> stores = storeClient.queryStoreListByName(coursePackageList.getSearch());
+            List<Integer> collect = stores.stream().map(Store::getId).collect(Collectors.toList());
+            if(collect.size() > 0){
+                wrapper.or().in("id", collect);
+            }
+        }
+        List<TCoursePackage> list = this.list(wrapper.last(" order by sort, insertTime desc"));
+        List<CoursePackageListVo> listVos = new ArrayList<>();
+        for (TCoursePackage coursePackage : list) {
+            Store store = storeClient.queryStoreById(coursePackage.getStoreId());
+            Integer integer = coursePackagePaymentService.queryCountNumber(coursePackage.getId());
+            CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>()
+                    .eq("coursePackageId", coursePackage.getId()).last(" order by if(payType = 1, cashPayment, playPaiCoin)"));
+            CoursePackageListVo coursePackageListVo = new CoursePackageListVo();
+            coursePackageListVo.setId(coursePackage.getId());
+            coursePackageListVo.setName(coursePackage.getName());
+            coursePackageListVo.setStoreName(null != store ? store.getName() : "");
+            coursePackageListVo.setCoverDrawing(coursePackage.getCoverDrawing());
+            coursePackageListVo.setClassStartTime(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime());
+            coursePackageListVo.setApplicantsNumber(integer);
+
+            coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getPayType() == 1 ? coursePackagePaymentConfig.getCashPayment() : coursePackagePaymentConfig.getPlayPaiCoin().doubleValue());
+            TCoursePackageDiscount coursePackageDiscount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", coursePackage.getId()).eq("auditStatus", 2).eq("type", 1));
+            if(1 == appUser.getIsVip() && null != coursePackageDiscount){
+                //{"num1":100}
+                JSONObject jsonObject = JSON.parseObject(coursePackageDiscount.getContent());
+                coursePackageListVo.setVipPrice(jsonObject.getDouble("num1"));
+            }
+            coursePackageDiscount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", coursePackage.getId()).eq("auditStatus", 2).eq("type", 3));
+            if(null == coursePackageDiscount){
+                coursePackageListVo.setPaymentPrice(coursePackageListVo.getOriginalPrice());
+            }else{
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                /**
+                 * [{
+                 * 	"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
+                 * }]
+                 */
+                JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent());
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject jsonObject = jsonArray.getJSONObject(i);
+                    String startDate = jsonObject.getString("startDate");
+                    String endDate = jsonObject.getString("endDate");
+                    String startTime = jsonObject.getString("startTime");
+                    String endTime = jsonObject.getString("endTime");
+                    List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
+                    Double cashPayment = jsonObject.getDouble("cashPayment");
+                    Date startDate_date = sdf.parse(startDate);
+                    Date endDate_date = sdf.parse(endDate);
+                    long timeMillis = System.currentTimeMillis();
+                    if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){
+                        Date date = new Date();
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(date);
+                        int week = calendar.get(Calendar.DAY_OF_WEEK);
+                        boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
+                        if(isFirstSunday){
+                            week = week - 1;
+                            if(week == 0){
+                                week = 7;
+                            }
+                        }
+                        if(!weeks.contains(week)){
+                            continue;
+                        }
+
+                        String[] split = startTime.split(":");
+                        Integer hour1 = Integer.valueOf(split[0]);
+                        Calendar s = Calendar.getInstance();
+                        s.setTime(date);
+                        s.set(Calendar.HOUR_OF_DAY, hour1);
+                        s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
+                        s.set(Calendar.SECOND, Integer.valueOf(split[2]));
+
+                        String[] split1 = endTime.split(":");
+                        Integer hour2 = Integer.valueOf(split1[0]);
+                        Calendar e = Calendar.getInstance();
+                        e.setTime(date);
+                        e.set(Calendar.HOUR_OF_DAY, hour2);
+                        e.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
+                        e.set(Calendar.SECOND, Integer.valueOf(split1[2]));
+
+                        if(hour1 > hour2){
+                            if(s.getTimeInMillis() > date.getTime()){
+                                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
+                            }else{
+                                e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
+                            }
+                        }
+                        if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis()){
+                            coursePackageListVo.setPaymentPrice(cashPayment);
+                        }
+                    }
+                }
+            }
+            Map<String, Double> distance = GeodesyUtil.getDistance(coursePackageList.getLon() + "," + coursePackageList.getLat(), store.getLon() + "," + store.getLat());
+            coursePackageListVo.setDistance(distance.get("WGS84") / 1000);
+            listVos.add(coursePackageListVo);
+        }
+
+        //销量排行
+        if(ToolUtil.isNotEmpty(coursePackageList.getSalesRanking())){
+            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
+                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
+                    return Integer.compare(s1.getApplicantsNumber(), s2.getApplicantsNumber());
+                }
+            });
+        }
+        //距离排行
+        if(ToolUtil.isNotEmpty(coursePackageList.getDistanceSort())){
+            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
+                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
+                    return Double.compare(s1.getDistance(), s2.getDistance());
+                }
+            });
+        }
+        return listVos;
+    }
 }

--
Gitblit v1.7.1