5 коммитов

Автор SHA1 Сообщение Дата
  humanleft 58c2cae5cb feat: add --no-rollback flag to deploy script 4 дней назад
  lenovo 0c93311599 Merge remote-tracking branch 'origin/mqy20260511' into mqy20260511 4 дней назад
  lenovo 1518869329 Merge remote-tracking branch 'origin/master' into mqy20260511 4 дней назад
  lenovo e03f53003c docs: update CLAUDE.md with security, MQTT, and lock improvements 4 дней назад
  lenovo 3785254b58 docs: update CLAUDE.md with security, MQTT, and lock improvements 4 дней назад

+ 19
- 6
deploy/deploy.sh Просмотреть файл

@@ -19,6 +19,7 @@ REMOTE_DIR="${REMOTE_DIR:-/opt/iot-platform}"
19 19
 APP_NAME="iot-platform"
20 20
 LOCAL_JAR=""
21 21
 DO_BUILD=false
22
+NO_ROLLBACK=false
22 23
 
23 24
 # 颜色
24 25
 RED='\033[0;31m'
@@ -33,14 +34,19 @@ while [[ $# -gt 0 ]]; do
33 34
             DO_BUILD=true
34 35
             shift
35 36
             ;;
37
+        --no-rollback)
38
+            NO_ROLLBACK=true
39
+            shift
40
+            ;;
36 41
         --jar)
37 42
             LOCAL_JAR="$2"
38 43
             shift 2
39 44
             ;;
40 45
         --help|-h)
41
-            echo "用法: ./deploy.sh [--build] [--jar <path>]"
42
-            echo "  --build     本地执行 mvn clean package"
43
-            echo "  --jar       指定要部署的 jar 文件路径"
46
+            echo "用法: ./deploy.sh [--build] [--no-rollback] [--jar <path>]"
47
+            echo "  --build        本地执行 mvn clean package"
48
+            echo "  --no-rollback  健康检查失败时不自动回滚,保留新版本用于排查"
49
+            echo "  --jar          指定要部署的 jar 文件路径"
44 50
             exit 0
45 51
             ;;
46 52
         *)
@@ -142,10 +148,17 @@ if ssh "${SERVER_USER}@${SERVER_HOST}" "bash ${REMOTE_DIR}/bin/health-check.sh l
142 148
     ssh "${SERVER_USER}@${SERVER_HOST}" "systemctl status ${APP_NAME} --no-pager"
143 149
     exit 0
144 150
 else
145
-    echo -e "${RED}[6/6] 健康检查失败! 执行回滚...${NC}"
151
+    echo -e "${RED}[6/6] 健康检查失败!${NC}"
152
+
153
+    if [ "$NO_ROLLBACK" = true ]; then
154
+        echo -e "${YELLOW}[no-rollback] 已启用不回滚模式,保留新版本用于排查${NC}"
155
+        echo -e "${YELLOW}排查命令:${NC}"
156
+        echo "  ssh ${SERVER_USER}@${SERVER_HOST} 'journalctl -u ${APP_NAME} -f'"
157
+        echo "  ssh ${SERVER_USER}@${SERVER_HOST} 'systemctl status ${APP_NAME}'"
158
+        exit 1
159
+    fi
146 160
 
147
-    # 回滚
148
-    echo -e "${YELLOW}[rollback] 停止服务...${NC}"
161
+    echo -e "${YELLOW}[rollback] 执行回滚...${NC}"
149 162
     ssh "${SERVER_USER}@${SERVER_HOST}" "systemctl stop ${APP_NAME} || true"
150 163
 
151 164
     if ssh "${SERVER_USER}@${SERVER_HOST}" "test -f ${REMOTE_DIR}/backup/${BACKUP_NAME}"; then

+ 1
- 1
iot-platform/pom.xml Просмотреть файл

@@ -195,4 +195,4 @@
195 195
         </plugins>
196 196
         <finalName>${project.artifactId}</finalName>
197 197
     </build>
198
-</project>
198
+</project>

+ 0
- 95
iot-platform/src/main/java/com/iot/platform/domain/SysCompany.java Просмотреть файл

@@ -1,95 +0,0 @@
1
-package com.iot.platform.domain;
2
-
3
-public class SysCompany {
4
-    public String companyId;
5
-    public String companyName;
6
-    public String companyContacts;
7
-    public String companyPhone;
8
-    public String companyDetails;
9
-    public String companyLicense;
10
-    public String companyBalance;
11
-    public String parentId;
12
-    public String ancestors;
13
-    public String companyType;
14
-
15
-    public String getCompanyId() {
16
-        return companyId;
17
-    }
18
-
19
-    public void setCompanyId(String companyId) {
20
-        this.companyId = companyId;
21
-    }
22
-
23
-    public String getCompanyName() {
24
-        return companyName;
25
-    }
26
-
27
-    public void setCompanyName(String companyName) {
28
-        this.companyName = companyName;
29
-    }
30
-
31
-    public String getCompanyContacts() {
32
-        return companyContacts;
33
-    }
34
-
35
-    public void setCompanyContacts(String companyContacts) {
36
-        this.companyContacts = companyContacts;
37
-    }
38
-
39
-    public String getCompanyPhone() {
40
-        return companyPhone;
41
-    }
42
-
43
-    public void setCompanyPhone(String companyPhone) {
44
-        this.companyPhone = companyPhone;
45
-    }
46
-
47
-    public String getCompanyDetails() {
48
-        return companyDetails;
49
-    }
50
-
51
-    public void setCompanyDetails(String companyDetails) {
52
-        this.companyDetails = companyDetails;
53
-    }
54
-
55
-    public String getCompanyLicense() {
56
-        return companyLicense;
57
-    }
58
-
59
-    public void setCompanyLicense(String companyLicense) {
60
-        this.companyLicense = companyLicense;
61
-    }
62
-
63
-    public String getCompanyBalance() {
64
-        return companyBalance;
65
-    }
66
-
67
-    public void setCompanyBalance(String companyBalance) {
68
-        this.companyBalance = companyBalance;
69
-    }
70
-
71
-    public String getParentId() {
72
-        return parentId;
73
-    }
74
-
75
-    public void setParentId(String parentId) {
76
-        this.parentId = parentId;
77
-    }
78
-
79
-    public String getAncestors() {
80
-        return ancestors;
81
-    }
82
-
83
-    public void setAncestors(String ancestors) {
84
-        this.ancestors = ancestors;
85
-    }
86
-
87
-    public String getCompanyType() {
88
-        return companyType;
89
-    }
90
-
91
-    public void setCompanyType(String companyType) {
92
-        this.companyType = companyType;
93
-    }
94
-
95
-}

+ 0
- 15
iot-platform/src/main/java/com/iot/platform/mapper/SysCompanyMapper.java Просмотреть файл

@@ -1,15 +0,0 @@
1
-package com.iot.platform.mapper;
2
-
3
-
4
-import com.iot.platform.domain.SysCompany;
5
-import org.apache.ibatis.annotations.Mapper;
6
-
7
-import java.util.List;
8
-
9
-@Mapper
10
-public interface SysCompanyMapper {
11
-
12
-    List<SysCompany> selectcompany();
13
-
14
-
15
-}

+ 0
- 18
iot-platform/src/main/java/com/iot/platform/service/SysCompanyService.java Просмотреть файл

@@ -1,18 +0,0 @@
1
-package com.iot.platform.service;
2
-
3
-import com.iot.platform.domain.SysCompany;
4
-import com.iot.platform.mapper.SysCompanyMapper;
5
-import org.springframework.stereotype.Service;
6
-
7
-import javax.annotation.Resource;
8
-import java.util.List;
9
-
10
-@Service
11
-public class SysCompanyService {
12
-    @Resource
13
-    public SysCompanyMapper sysCompanyMapper;
14
-
15
-    public List<SysCompany> selectcompany(){
16
-        return sysCompanyMapper.selectcompany();
17
-    }
18
-}

+ 0
- 3
iot-platform/src/main/java/com/iot/platform/task/VehicleSyncTask.java Просмотреть файл

@@ -40,9 +40,6 @@ public class VehicleSyncTask {
40 40
                            SysrealtimeService sysrealtimeService,
41 41
                            SysDeviceVoService sysDeviceVoService,
42 42
                            SysDeviceControlService sysDeviceControlService,
43
-                           SysWorkorderService sysWorkorderService,
44
-                           SysIndicatorsService sysIndicatorsService,
45
-                           SysCompanyService sysCompanyService,
46 43
                            RestTemplate restTemplate,
47 44
                            IotProperties iotProperties) {
48 45
         this.sysCarService = sysCarService;

+ 0
- 23
iot-platform/src/main/resources/mapper/SysCompanyMapper.xml Просмотреть файл

@@ -1,23 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8" ?>
2
-<!DOCTYPE mapper
3
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
-<mapper namespace="com.iot.platform.mapper.SysCompanyMapper">
6
-    <!-- 通用查询映射结果 -->
7
-    <resultMap id="BaseResultMap" type="com.iot.platform.domain.SysCompany">
8
-        <result column="companyId" property="companyId"/>
9
-        <result column="companyName" property="companyName"/>
10
-        <result column="companyContacts" property="companyContacts"/>
11
-        <result column="companyPhone" property="companyPhone"/>
12
-        <result column="companyDetails" property="companyDetails"/>
13
-        <result column="companyLicense" property="companyLicense"/>
14
-        <result column="companyBalance" property="companyBalance"/>
15
-        <result column="parentId" property="parentId"/>
16
-        <result column="ancestors" property="ancestors"/>
17
-        <result column="companyType" property="companyType"/>
18
-    </resultMap>
19
-
20
-    <select id="selectcompany" resultMap="BaseResultMap">
21
-        select company_id companyId from sys_company where company_type='2'
22
-    </select>
23
-</mapper>

+ 1
- 13
iot-platform/src/test/java/com/iot/platform/task/VehicleSyncTaskTest.java Просмотреть файл

@@ -46,8 +46,7 @@ class VehicleSyncTaskTest {
46 46
     private SysWorkorderService sysWorkorderService;
47 47
     @Mock
48 48
     private SysIndicatorsService sysIndicatorsService;
49
-    @Mock
50
-    private SysCompanyService sysCompanyService;
49
+
51 50
     @Mock
52 51
     private RestTemplate restTemplate;
53 52
     @Mock
@@ -181,17 +180,6 @@ class VehicleSyncTaskTest {
181 180
         verify(sysrealtimeService, never()).createrealtime(anyString());
182 181
     }
183 182
 
184
-//    @Test
185
-//    @DisplayName("insertIndicators: 公司列表为空时不应抛异常")
186
-//    void insertIndicators_emptyCompanyList_noException() {
187
-//        when(valueOps.setIfAbsent(anyString(), eq("1"), anyLong(), any())).thenReturn(true);
188
-//        when(sysCompanyService.selectcompany()).thenReturn(Collections.emptyList());
189
-//        when(stringRedisTemplate.delete(anyString())).thenReturn(true);
190
-//
191
-//        task.insertIndicators();
192
-//
193
-//        verify(sysWorkorderService, never()).selectworkordercount(anyString(), anyString());
194
-//    }
195 183
 
196 184
     @Test
197 185
     @DisplayName("webhook 调用失败时不应中断主流程")

Загрузка…
Отмена
Сохранить