From d2b9ce5ceb7059dfa06e9281661c8c9516686dd0 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期一, 06 十月 2025 19:54:22 +0800
Subject: [PATCH] bug修改

---
 cloud-server-activity/src/main/java/com/dsh/activity/util/GeoFenceChecker.java                                         |   78 ++++++++++++++++++++++++++
 cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js                                      |    6 +
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupCompetitorServiceImpl.java |    7 ++
 cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java                                         |   11 +++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html                                      |   42 +++++++++----
 cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java                                   |    4 -
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html                        |   15 +++++
 7 files changed, 140 insertions(+), 23 deletions(-)

diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/GeoFenceChecker.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/GeoFenceChecker.java
new file mode 100644
index 0000000..e5203c6
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/GeoFenceChecker.java
@@ -0,0 +1,78 @@
+package com.dsh.activity.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GeoFenceChecker {
+    
+    /**
+     * 判断点是否在多边形内
+     * @param polygon 多边形顶点坐标列表
+     * @param point 待检测的点
+     * @return true表示在多边形内,false表示在多边形外
+     */
+    public static boolean isPointInPolygon(List<Point> polygon, Point point) {
+        int intersectCount = 0;
+        int vertexCount = polygon.size();
+        
+        for (int i = 0; i < vertexCount; i++) {
+            Point p1 = polygon.get(i);
+            Point p2 = polygon.get((i + 1) % vertexCount);
+            
+            // 检查水平向右的射线是否与边相交
+            if (rayIntersectsSegment(p1, p2, point)) {
+                intersectCount++;
+            }
+        }
+        
+        // 交点为奇数表示点在多边形内
+        return intersectCount % 2 == 1;
+    }
+    
+    /**
+     * 判断射线是否与线段相交
+     * @param p1 线段端点1
+     * @param p2 线段端点2
+     * @param point 测试点
+     * @return 是否相交
+     */
+    private static boolean rayIntersectsSegment(Point p1, Point p2, Point point) {
+        // 确保p1的y坐标小于等于p2的y坐标
+        if (p1.y > p2.y) {
+            Point temp = p1;
+            p1 = p2;
+            p2 = temp;
+        }
+        
+        // 如果点的y坐标在线段y坐标范围之外,则不相交
+        if (point.y < p1.y || point.y > p2.y) {
+            return false;
+        }
+        
+        // 水平线情况特殊处理
+        if (p1.y == p2.y) {
+            return false;
+        }
+        
+        // 计算交点的x坐标
+        double xIntersection = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;
+        
+        // 如果交点在测试点的右边,则相交
+        return point.x < xIntersection;
+    }
+    
+    /**
+     * 坐标点类
+     */
+    public static class Point {
+        public double x;
+        public double y;
+        
+        public Point(double x, double y) {
+            this.x = x;
+            this.y = y;
+        }
+    }
+    
+
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupCompetitorServiceImpl.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupCompetitorServiceImpl.java
index a9eee9a..d2e1d63 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupCompetitorServiceImpl.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupCompetitorServiceImpl.java
@@ -335,7 +335,12 @@
             }
         }
         // 排序
-        list = list.stream().sorted(Comparator.comparing(WorldCupRankVo::getIntegral).reversed().thenComparing(WorldCupRankVo::getTotalSession).reversed().thenComparing(WorldCupRankVo::getWinRate).reversed()).collect(Collectors.toList());
+        list = list.stream()
+                .filter(Objects::nonNull)
+                .sorted(Comparator.comparing(WorldCupRankVo::getIntegral, Comparator.nullsLast(Comparator.reverseOrder()))
+                        .thenComparing(WorldCupRankVo::getTotalSession, Comparator.nullsLast(Comparator.reverseOrder()))
+                        .thenComparing(WorldCupRankVo::getWinRate, Comparator.nullsLast(Comparator.reverseOrder())))
+                .collect(Collectors.toList());
         int a = 1;
         for (WorldCupRankVo worldCupRankVo : list) {
             worldCupRankVo.setRank(a);
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html
index 13c42b0..bc35967 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html
@@ -938,7 +938,22 @@
 
             },
             handleRemoveStore(index) {
+                // 先删除表格中的数据
                 this.tableData.splice(index, 1);
+
+                // 同步更新 huiminCard.useIds
+                if (this.huiminCard.useScope === '1') {
+                    // 指定门店
+                    this.huiminCard.useIds = this.tableData.map(item => item.storeId).join(',');
+                } else if (this.huiminCard.useScope === '2') {
+                    // 指定场地
+                    this.huiminCard.useIds = this.tableData.map(item => item.siteId).join(',');
+                }
+
+                // 如果没有数据了,设置为空字符串而不是null
+                if (this.tableData.length === 0) {
+                    this.huiminCard.useIds = '';
+                }
             },
             handleSelectStore() {
                 this.queryParams.pageNum = 1;
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
index d179f30..cd6ef91 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
@@ -125,7 +125,8 @@
                                     accept="."
                                     :file-list="imageUrl2"
                                     :on-success="handleAvatarSuccess"
-                                    :on-remove="handleRemove">
+                                    :on-remove="handleRemove"
+                                    :before-upload="beforeAvatarUpload">
                                 <i class="el-icon-plus"></i>
                             </el-upload>
                             <el-dialog :visible.sync="dialogVisible">
@@ -211,10 +212,14 @@
         },
         methods: {
             handleAvatarSuccess(res, file) {
-                file.url =file.response
+                // 确保文件对象有完整的结构
+                if (file && file.response) {
+                    file.url = file.response;
+                }
                 TCarInfoDlg.goodsPicArray.push(res);
-                console.log(TCarInfoDlg.goodsPicArray)
+                console.log(TCarInfoDlg.goodsPicArray);
             },
+            // 添加 beforeUpload 钩子到 el-upload 组件
             beforeAvatarUpload(file) {
                 const isLt2M = file.size / 1024 / 1024 < 10;
                 if (!isLt2M) {
@@ -222,23 +227,32 @@
                 }
                 return isLt2M;
             },
+            // 修改 handleRemove 方法
             handleRemove(file, fileList) {
+                // 使用更安全的方式过滤
                 TCarInfoDlg.goodsPicArray = TCarInfoDlg.goodsPicArray.filter(item => {
-                    return item.uid != file.uid;
+                    // 如果是文件对象,比较 uid;如果是字符串,比较值
+                    if (typeof item === 'object' && item !== null) {
+                        return item.uid !== file.uid;
+                    } else {
+                        return item !== file.url;
+                    }
                 });
             },
             changeImg(){
-                var i = id.split(",")
-                for (let j = 0; j <i.length; j++) {
-                    let obj={
-                        fileName:i[j],
-                        uuid:i[j],
-                        url:i[j],
-                        response:i[j],
-                    }
-                    this.imageUrl2.push(obj)
+                if (!id) return; // 如果没有图片数据则返回
+
+                var i = id.split(",").filter(url => url.trim() !== ''); // 过滤空字符串
+                for (let j = 0; j < i.length; j++) {
+                    let obj = {
+                        uid: 'existing-' + j + '-' + Date.now(), // 确保 uid 是唯一的字符串
+                        name: 'image-' + j + '.jpg', // 添加 name 属性
+                        url: i[j],
+                        status: 'success' // 标记为已上传状态
+                    };
+                    this.imageUrl2.push(obj);
                 }
-                console.log( this.imageUrl2,111)
+                console.log(this.imageUrl2, 111);
             },
         },
         created() {
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
index 044eba8..f59a69c 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
@@ -566,12 +566,14 @@
         Feng.info("请上传实景图")
         return;
     }
+    console.log("图片")
+    console.log(goodImgs)
     var imgOne ="";
     for (let i = 0; i <goodImgs.length; i++) {
         if(i==goodImgs.length-1){
-            imgOne += (goodImgs[i].response)
+            imgOne += (goodImgs[i])
         }else {
-            imgOne+=(goodImgs[i].response+",")
+            imgOne+=(goodImgs[i]+",")
         }
 
     }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
index f02a264..b38837a 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
@@ -116,10 +116,8 @@
                             storeConfigVo.setBackgroundImage("https://we-park-life.oss-cn-beijing.aliyuncs.com/img/0771fb3bd4de43c08492d0912209e51f.png");
                             break;
                         }
-
                     }
                 }
-
                 listVo.add(storeConfigVo);
             }
 
@@ -136,8 +134,6 @@
                 storeConfigVo.setSort(worldCupStore.getSort());
                 listVo.add(storeConfigVo);
             }
-
-
             //排序
             Collections.sort(listVo, new Comparator<StoreConfigVo>() {
                 @Override
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
index 24c18f3..1020aa5 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
@@ -429,9 +429,16 @@
         try {
             List<TStoreOtherConfigTrue> tStoreOtherConfigTrues = new ArrayList<>();
 
-            List<TStoreOther> list = tStoreOtherService.list(new LambdaQueryWrapper<TStoreOther>().eq(TStoreOther::getStoreId, id).eq(TStoreOther::getState, 1));
+            List<TStoreOther> list = tStoreOtherService
+                    .list(new LambdaQueryWrapper<TStoreOther>().eq(TStoreOther::getStoreId, id)
+                            .eq(TStoreOther::getState, 1));
             if (list.size() > 0) {
-                tStoreOtherConfigTrues = tStoreOtherConfigTrueService.list(new LambdaQueryWrapper<TStoreOtherConfigTrue>().in(TStoreOtherConfigTrue::getPid, list.stream().map(TStoreOther::getId).collect(Collectors.toList())).eq(TStoreOtherConfigTrue::getState, 1));
+                tStoreOtherConfigTrues = tStoreOtherConfigTrueService
+                        .list(new LambdaQueryWrapper<TStoreOtherConfigTrue>()
+                                .in(TStoreOtherConfigTrue::getPid,
+                                        list.stream().map(TStoreOther::getId)
+                                                .collect(Collectors.toList()))
+                                .eq(TStoreOtherConfigTrue::getState, 1));
             }
             for (TStoreOtherConfigTrue tStoreOtherConfigTrue : tStoreOtherConfigTrues) {
                 for (TStoreOther tStoreOther : list) {

--
Gitblit v1.7.1