From ee43cbeaa8bee2af8adf6a394907e3cd0868aa53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Wed, 8 Apr 2026 11:14:12 +0800
Subject: [PATCH 01/59] =?UTF-8?q?fix(=E8=B5=84=E6=BA=90=E5=AE=A1=E6=A0=B8)?=
=?UTF-8?q?:=20=E4=B8=93=E5=8C=BA=E4=BC=9A=E5=91=98=E5=8F=91=E5=B8=83?=
=?UTF-8?q?=E7=9A=84=E5=BE=85=E5=AE=A1=E6=A0=B8=E8=B5=84=E6=BA=90=E5=87=BA?=
=?UTF-8?q?=E7=8E=B0=E5=9C=A8=E4=BA=86=E8=B5=84=E6=BA=90=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E4=B8=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
问题定位:公开接口获取资源列表时未筛选资源审核状态
---
.../zone/resource/domain/vo/ZoneResourceOpenSearchVo.java | 3 +++
.../src/main/resources/mapper/zone/ZoneResourceMapper.xml | 8 ++++++++
2 files changed, 11 insertions(+)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceOpenSearchVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceOpenSearchVo.java
index 6d12c59e0..a95c4f6b9 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceOpenSearchVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceOpenSearchVo.java
@@ -53,6 +53,9 @@ public class ZoneResourceOpenSearchVo extends BaseEntity {
@ApiModelProperty(value = "是否根据下载次数降序排序(与orderByColumn互斥,该属性优先级更高)")
private Boolean orderByDownloadCount = false;
+ @ApiModelProperty(value = "审核状态(0:待审核,1:审核通过 2:审核不通过)")
+ private String auditStatus;
+
public ZoneResource toZoneResource() {
ZoneResource target = new ZoneResource();
BeanUtils.copyProperties(this, target);
diff --git a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneResourceMapper.xml b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneResourceMapper.xml
index e894836df..c667ee632 100644
--- a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneResourceMapper.xml
+++ b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneResourceMapper.xml
@@ -156,6 +156,14 @@
and zr.id in (select resource_id from zone_resource_to_type where type_id=#{searchTypeId})
+
+
+ and zr.audit_status = #{auditStatus}
+
+
+ and zr.audit_status = '1'
+
+
${params.dataScope}
From 27bd86998c32b2a69b6a52e0bc7ee9946f18c112 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Fri, 10 Apr 2026 10:31:26 +0800
Subject: [PATCH 02/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=89=8D=E5=8F=B0=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1. 新增查询我的项目列表接口
2. 新增查询我的项目详情接口
3. 新增前台新增项目聚合接口
4. 新增前台编辑项目聚合接口
5. 新增前台删除项目聚合接口
---
.../common/controller/FrontController.java | 62 +++++++++++++++++++
.../domain/vo/ZoneProjectUpdateVo.java | 4 ++
.../project/service/IZoneProjectService.java | 25 ++++++++
.../service/impl/ZoneProjectServiceImpl.java | 49 +++++++++++++++
.../mapper/zone/ZoneProjectMapper.xml | 1 +
5 files changed, 141 insertions(+)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
index 33816d408..a893c8357 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
@@ -10,6 +10,11 @@ import com.microservices.common.security.annotation.RequiresPermissions;
import com.microservices.common.security.utils.SecurityUtils;
import com.microservices.zone.detail.domain.vo.ZoneFrontRoleVo;
import com.microservices.zone.detail.service.IZoneDetailService;
+import com.microservices.zone.project.domain.vo.ZoneProjectDataVo;
+import com.microservices.zone.project.domain.vo.ZoneProjectInputVo;
+import com.microservices.zone.project.domain.vo.ZoneProjectSearchVo;
+import com.microservices.zone.project.domain.vo.ZoneProjectUpdateVo;
+import com.microservices.zone.project.service.IZoneProjectService;
import com.microservices.zone.resource.domain.ZoneResource;
import com.microservices.zone.resource.domain.vo.ZoneResourceDataVo;
import com.microservices.zone.resource.domain.vo.ZoneResourceInputVo;
@@ -32,6 +37,9 @@ public class FrontController extends BaseController {
@Autowired
private IZoneResourceService zoneResourceService;
+ @Autowired
+ private IZoneProjectService zoneProjectService;
+
@Autowired
private IZoneDetailService zoneDetailService;
@@ -91,6 +99,60 @@ public class FrontController extends BaseController {
return toAjax(zoneResourceService.deleteMyZoneResourceByIds(ids));
}
+ /**
+ * 查询我的项目列表
+ */
+ @RequiresPermissions("zone:front:project:myList")
+ @GetMapping("/myProjectList")
+ @ApiOperation(value = "查询我的项目列表")
+ public GenericsTableDataInfo myProjectList(ZoneProjectSearchVo zoneProjectSearchVo) {
+ zoneProjectSearchVo.setCreateBy(SecurityUtils.getUsername());
+ return zoneProjectService.selectMyZoneProjectList(zoneProjectSearchVo);
+ }
+
+ /**
+ * 查询我的项目详情
+ */
+ @RequiresPermissions("zone:front:project:query")
+ @GetMapping("/myProject/{id}")
+ @ApiOperation(value = "查询我的项目详情")
+ public GenericsAjaxResult myProject(@PathVariable("id") Long id) {
+ return genericsSuccess(zoneProjectService.selectZoneProjectDataById(id));
+ }
+
+ /**
+ * 新增项目
+ */
+ @RequiresPermissions("zone:front:project:add")
+ @Log(title = "专区前台项目操作", businessType = BusinessType.INSERT)
+ @PostMapping("/addProject")
+ @ApiOperation(value = "新增项目")
+ public AjaxResult addProject(@RequestBody ZoneProjectInputVo zoneProjectInputVo) {
+ return success(zoneProjectService.insertZoneProject(zoneProjectInputVo));
+ }
+
+ /**
+ * 编辑项目
+ */
+ @RequiresPermissions("zone:front:project:edit")
+ @Log(title = "专区前台项目操作", businessType = BusinessType.UPDATE)
+ @PutMapping("/editProject")
+ @ApiOperation(value = "编辑项目")
+ public AjaxResult editProject(@RequestBody ZoneProjectUpdateVo zoneProjectUpdateVo) {
+ return success(zoneProjectService.updateMyZoneProject(zoneProjectUpdateVo.getId(), zoneProjectUpdateVo));
+ }
+
+ /**
+ * 删除项目
+ */
+ @RequiresPermissions("zone:front:project:remove")
+ @Log(title = "专区前台项目操作", businessType = BusinessType.DELETE)
+ @DeleteMapping("/removeProject/{ids}")
+ @ApiOperation(value = "删除项目")
+ public AjaxResult removeProject(@PathVariable Long[] ids) {
+ return toAjax(zoneProjectService.deleteMyZoneProjectByIds(ids));
+ }
+
/**
* 检查当前登录用户在当前专区下角色
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java
index 31eaa2814..01c987584 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java
@@ -14,6 +14,10 @@ import javax.validation.constraints.NotNull;
@Data
@ApiModel("项目聚合更新对象")
public class ZoneProjectUpdateVo {
+ @ApiModelProperty(value = "项目Id", required = true)
+ @NotNull
+ private Long id;
+
@ApiModelProperty(value = "聚合项目类型")
@NotNull
private Long projectTypeId;
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
index 7dce19372..6891173d8 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
@@ -112,4 +112,29 @@ public interface IZoneProjectService {
Integer selectHomepageCount(Long zoneId);
List selectZoneProjectByScoreList(ZoneProjectSearchVo zoneProjectSearchVo, boolean isOpen);
+
+ /**
+ * 查询我的项目列表
+ *
+ * @param zoneProjectSearchVo 查询条件
+ * @return 项目列表
+ */
+ GenericsTableDataInfo selectMyZoneProjectList(ZoneProjectSearchVo zoneProjectSearchVo);
+
+ /**
+ * 批量删除我的项目(校验创建者)
+ *
+ * @param ids 需要删除的项目主键集合
+ * @return 结果
+ */
+ int deleteMyZoneProjectByIds(Long[] ids);
+
+ /**
+ * 修改我的项目(校验创建者)
+ *
+ * @param id 项目主键
+ * @param zoneProjectUpdateVo 更新数据
+ * @return 结果
+ */
+ int updateMyZoneProject(Long id, ZoneProjectUpdateVo zoneProjectUpdateVo);
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
index 9dc5da87b..81df66074 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
@@ -385,9 +385,17 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
public int insertZoneProject(ZoneProjectInputVo zoneProjectInputVo) {
ZoneDetail zoneDetail = zoneDetailService.selectZoneDetailById(zoneProjectInputVo.getZoneId());
zoneProjectTypeService.selectZoneProjectTypeByIdAndZoneId(zoneProjectInputVo.getProjectTypeId(), zoneProjectInputVo.getZoneId());
+ ZoneProject existingProject = zoneProjectMapper.selectZoneProjectByGitLinkProjectIdAndZoneId(
+ zoneProjectInputVo.getGitlinkProjectId(), zoneProjectInputVo.getZoneId());
+ if (existingProject != null) {
+ throw new ServiceException("该GitLink项目已存在于专区中,不可重复添加");
+ }
JSONObject gitLinkProject = getGitLinkProjectById(zoneProjectInputVo.getGitlinkProjectId());
ZoneProject zoneProject = zoneProjectInputVo.toZoneProject();
zoneProject.setCreateTime(DateUtils.getNowDate());
+ if (StringUtils.isEmpty(zoneProject.getCreateBy())) {
+ zoneProject.setCreateBy(SecurityUtils.getUsername());
+ }
zoneProject.setDeptId(zoneDetail.getDeptId());
zoneProject.setDeptId(zoneDetail.getDeptId());
JSONObject author = gitLinkProject.getJSONObject("author");
@@ -633,6 +641,47 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
return zoneProjectMapper.selectHomepageCount(zoneId);
}
+ @Override
+ public GenericsTableDataInfo selectMyZoneProjectList(ZoneProjectSearchVo zoneProjectSearchVo) {
+ if (zoneProjectSearchVo == null || zoneProjectSearchVo.getZoneId() == null) {
+ throw new ServiceException("获取我的项目列表时必须传入专区Id");
+ }
+ zoneDetailService.selectZoneDetailById(zoneProjectSearchVo.getZoneId());
+ startPage();
+ List zoneProjectList = zoneProjectMapper.selectZoneProjectList(zoneProjectSearchVo);
+ return PageUtils.toListPage(zoneProjectList, this::toZoneProjectDataVoList);
+ }
+
+ @Override
+ public int deleteMyZoneProjectByIds(Long[] ids) {
+ for (Long id : ids) {
+ ZoneProject zoneProject = zoneProjectMapper.selectZoneProjectById(id);
+ if (zoneProject == null) {
+ throw new ServiceException("该项目不存在(项目Id[" + id + "])");
+ }
+ if (!zoneProject.getCreateBy().equals(SecurityUtils.getUsername())) {
+ throw new ServiceException("仅允许删除自身创建的项目");
+ }
+ }
+ int success = 0;
+ for (Long id : ids) {
+ success += deleteZoneProjectById(id);
+ }
+ return success;
+ }
+
+ @Override
+ public int updateMyZoneProject(Long id, ZoneProjectUpdateVo zoneProjectUpdateVo) {
+ ZoneProject zoneProject = zoneProjectMapper.selectZoneProjectById(id);
+ if (zoneProject == null) {
+ throw new ServiceException("该项目不存在(项目Id[" + id + "])");
+ }
+ if (!zoneProject.getCreateBy().equals(SecurityUtils.getUsername())) {
+ throw new ServiceException("仅允许编辑自身创建的项目");
+ }
+ return updateZoneProject(id, zoneProjectUpdateVo);
+ }
+
@Override
public List selectZoneProjectByScoreList(ZoneProjectSearchVo zoneProjectSearchVo, boolean isOpen) {
if (zoneProjectSearchVo.getProjectTypeId() == null) {
diff --git a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml
index b735f8d6e..f2d13d1ad 100644
--- a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml
+++ b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml
@@ -114,6 +114,7 @@
and zp.project_type_id = #{projectTypeId}
and zp.zone_id = #{zoneId}
+ and zp.create_by = #{createBy}
and zp.is_homepage = #{isHomepage}
From 33ff6795d1b5adf2ea93c97fdd0f430724815471 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Fri, 10 Apr 2026 14:36:20 +0800
Subject: [PATCH 03/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=20=20-=E6=96=B0=E5=A2=9E=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=8A=B6=E6=80=81=E5=B8=B8=E9=87=8F=EF=BC=88?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87/=E4=B8=8D=E9=80=9A?=
=?UTF-8?q?=E8=BF=87/=E5=BE=85=E5=AE=A1=E6=A0=B8=EF=BC=89=20=20-ZoneDetail?=
=?UTF-8?q?=E6=96=B0=E5=A2=9EprojectNeedAudit=E5=AD=97=E6=AE=B5=E6=8E=A7?=
=?UTF-8?q?=E5=88=B6=E4=B8=93=E5=8C=BA=E6=98=AF=E5=90=A6=E5=BC=80=E5=90=AF?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=AE=A1=E6=A0=B8=20=20-ZoneProject=E6=96=B0?=
=?UTF-8?q?=E5=A2=9EauditStatus/auditTime/auditBy=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=20=20-=E6=96=B0=E5=A2=9EZoneProjectAuditVo?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8=E8=AF=B7=E6=B1=82=E5=AF=B9=E8=B1=A1=20=20-?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=90=8E=E5=8F=B0=E5=AE=A1=E6=A0=B8=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3PUT/project/audit=20=20-=E5=89=8D=E5=8F=B0=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E/=E7=BC=96=E8=BE=91=E9=A1=B9=E7=9B=AE=E6=97=B6?=
=?UTF-8?q?=EF=BC=8C=E4=B8=93=E5=8C=BA=E5=BC=80=E5=90=AF=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=88=99=E8=87=AA=E5=8A=A8=E8=AE=BE=E7=BD=AE=E5=BE=85=E5=AE=A1?=
=?UTF-8?q?=E6=A0=B8=E7=8A=B6=E6=80=81=20=20-=E5=89=8D=E5=8F=B0=E5=85=AC?=
=?UTF-8?q?=E5=BC=80=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E8=BF=87=E6=BB=A4=E4=BB=85=E6=98=BE=E7=A4=BA=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E9=80=9A=E8=BF=87=E7=9A=84=E9=A1=B9=E7=9B=AE=20=20-"=E6=88=91?=
=?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8"=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E6=89=80=E6=9C=89=E5=AE=A1=E6=A0=B8=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../zone/detail/domain/ZoneDetail.java | 5 ++
.../detail/domain/vo/ZoneDetailDataVo.java | 6 +++
.../detail/domain/vo/ZoneDetailUpdateVo.java | 6 +++
.../controller/ZoneProjectController.java | 11 ++++
.../zone/project/domain/ZoneProject.java | 13 +++++
.../project/domain/vo/ZoneProjectDataVo.java | 9 ++++
.../domain/vo/ZoneProjectSearchVo.java | 2 +
.../project/service/IZoneProjectService.java | 8 +++
.../service/impl/ZoneProjectServiceImpl.java | 53 ++++++++++++++++++-
.../zone/utils/ZoneConstants.java | 13 +++++
.../mapper/zone/ZoneDetailMapper.xml | 6 +++
.../mapper/zone/ZoneProjectMapper.xml | 21 +++++++-
12 files changed, 151 insertions(+), 2 deletions(-)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/ZoneDetail.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/ZoneDetail.java
index 795a05090..7cd52081e 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/ZoneDetail.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/ZoneDetail.java
@@ -190,6 +190,11 @@ public class ZoneDetail extends BaseEntity {
@ApiModelProperty(value = "资源是否需要审核(0:不需要审核,1:需要审核)")
private Integer resourceNeedAudit;
+ /**
+ * 项目是否需要审核(0:不需要,1:需要)
+ */
+ @ApiModelProperty(value = "项目是否需要审核(0:不需要审核,1:需要审核)")
+ private Integer projectNeedAudit;
/**
* 资讯是否锁定中(0:未锁定,1:锁定)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java
index 7a1fe28d2..8517331fb 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java
@@ -155,6 +155,12 @@ public class ZoneDetailDataVo extends BaseEntity {
@ApiModelProperty(value = "资源是否需要审核(0:不需要审核,1:需要审核)")
private Integer resourceNeedAudit;
+ /**
+ * 项目是否需要审核(0:不需要,1:需要)
+ */
+ @ApiModelProperty(value = "项目是否需要审核(0:不需要审核,1:需要审核)")
+ private Integer projectNeedAudit;
+
/**
* 资讯是否锁定中(0:未锁定,1:锁定)
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailUpdateVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailUpdateVo.java
index a6554d6be..414d4f622 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailUpdateVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailUpdateVo.java
@@ -123,6 +123,12 @@ public class ZoneDetailUpdateVo {
@ApiModelProperty(value = "资源是否需要审核(0:不需要审核,1:需要审核)")
private Integer resourceNeedAudit;
+ /**
+ * 项目是否需要审核(0:不需要,1:需要)
+ */
+ @ApiModelProperty(value = "项目是否需要审核(0:不需要审核,1:需要审核)")
+ private Integer projectNeedAudit;
+
/**
* 资讯是否锁定中(0:未锁定,1:锁定)
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectController.java
index 3ec4b74a1..30eee393b 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectController.java
@@ -135,4 +135,15 @@ public class ZoneProjectController extends BaseController {
public AjaxResult updateHomepageShow(@PathVariable Long id) {
return toAjax(zoneProjectService.updateZoneProjectHomePageShow(id));
}
+
+ /**
+ * 审核特色专区项目
+ */
+ @RequiresPermissions("zone:project:audit")
+ @Log(title = "审核特色专区项目", businessType = BusinessType.UPDATE)
+ @PutMapping("/audit")
+ @ApiOperation("审核特色专区项目")
+ public AjaxResult audit(@RequestBody @Validated ZoneProjectAuditVo zoneProjectAuditVo) {
+ return toAjax(zoneProjectService.auditZoneProject(zoneProjectAuditVo));
+ }
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/ZoneProject.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/ZoneProject.java
index bfd1c3463..feffe145b 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/ZoneProject.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/ZoneProject.java
@@ -3,9 +3,12 @@ package com.microservices.zone.project.domain;
import com.microservices.common.core.annotation.Excel;
import com.microservices.common.core.web.domain.BaseEntity;
import com.microservices.system.api.domain.SysDept;
+import io.swagger.annotations.ApiModelProperty;
import com.microservices.zone.project.domain.vo.ZoneProjectDataVo;
import lombok.Data;
+import java.util.Date;
+
/**
* 特色专区项目聚合对象 zone_project
*
@@ -83,6 +86,13 @@ public class ZoneProject extends BaseEntity {
*/
private String isHomepage;
+ @ApiModelProperty(value = "审核状态(0:待审核,1:审核通过 2:审核不通过)")
+ private String auditStatus;
+ @ApiModelProperty(value = "审核时间")
+ private Date auditTime;
+ @ApiModelProperty(value = "审核人")
+ private String auditBy;
+
public ZoneProjectDataVo toZoneProjectDataVo() {
ZoneProjectDataVo zoneProjectDataVo = new ZoneProjectDataVo();
zoneProjectDataVo.setId(this.getId());
@@ -93,6 +103,9 @@ public class ZoneProject extends BaseEntity {
zoneProjectDataVo.setZoneId(this.getZoneId());
zoneProjectDataVo.setSort(this.getSort());
zoneProjectDataVo.setGitlinkProjectId(this.getGitlinkProjectId());
+ zoneProjectDataVo.setAuditStatus(this.getAuditStatus());
+ zoneProjectDataVo.setAuditTime(this.getAuditTime());
+ zoneProjectDataVo.setAuditBy(this.getAuditBy());
return zoneProjectDataVo;
}
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectDataVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectDataVo.java
index 6f77549d7..c4574c9da 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectDataVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectDataVo.java
@@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.util.Date;
+
/**
* @author otto
*/
@@ -40,6 +42,13 @@ public class ZoneProjectDataVo implements Comparable {
@Excel(name = "gitlink项目Id")
private Long gitlinkProjectId;
+ @ApiModelProperty(value = "审核状态(0:待审核,1:审核通过 2:审核不通过)")
+ private String auditStatus;
+ @ApiModelProperty(value = "审核时间")
+ private Date auditTime;
+ @ApiModelProperty(value = "审核人")
+ private String auditBy;
+
@Override
public int compareTo(ZoneProjectDataVo zoneProjectDataVo) {
// 重写Comparable接口的compareTo方法,根据年龄升序排列,降序修改相减顺序即可
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java
index 3d1a7405b..0fde19510 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java
@@ -13,4 +13,6 @@ import lombok.Data;
public class ZoneProjectSearchVo extends ZoneProjectOpenSearchVo {
@ApiModelProperty(value = "所属专区")
private Long zoneId;
+ @ApiModelProperty(value = "审核状态(0:待审核,1:审核通过 2:审核不通过)")
+ private String auditStatus;
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
index 6891173d8..3b77f5b15 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
@@ -137,4 +137,12 @@ public interface IZoneProjectService {
* @return 结果
*/
int updateMyZoneProject(Long id, ZoneProjectUpdateVo zoneProjectUpdateVo);
+
+ /**
+ * 审核项目
+ *
+ * @param zoneProjectAuditVo 审核数据
+ * @return 结果
+ */
+ int auditZoneProject(ZoneProjectAuditVo zoneProjectAuditVo);
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
index 81df66074..2bd3e34f1 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
@@ -12,8 +12,10 @@ import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.common.datascope.annotation.DataScope;
import com.microservices.common.httpClient.util.GitLinkRequestHelper;
import com.microservices.common.redis.service.RedisService;
+import com.microservices.common.security.auth.AuthUtil;
import com.microservices.common.security.utils.DictUtils;
import com.microservices.common.security.utils.SecurityUtils;
+import com.microservices.common.core.enums.SystemRole;
import com.microservices.system.api.domain.SysDictData;
import com.microservices.zone.common.service.IZoneAsyncService;
import com.microservices.zone.detail.domain.ZoneDetail;
@@ -113,6 +115,9 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
throw new ServiceException("查询项目列表时,请指定专区Id");
}
zoneDetailService.selectZoneDetailById(zoneProjectSearchVo.getZoneId());
+ if (isOpen) {
+ zoneProjectSearchVo.setAuditStatus(ZoneConstants.PROJECT_AUDIT_PASS);
+ }
startPage();
zoneProjectSearchVo.setIsOpen(isOpen);
List zoneProjectList = zoneProjectMapper.selectZoneProjectList(zoneProjectSearchVo);
@@ -403,6 +408,12 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
zoneProject.setName(author.getString("name") + "/" + gitLinkProject.getString("name"));
zoneProject.setFullName(author.getString("login") + "/" + gitLinkProject.getString("identifier"));
}
+ // 专区开启项目审核后,专区会员和专区运营人员新增项目都需要审核
+ if (projectNeedAudit(zoneDetail)) {
+ zoneProject.setAuditStatus(ZoneConstants.PROJECT_NOT_AUDIT);
+ } else {
+ zoneProject.setAuditStatus(ZoneConstants.PROJECT_AUDIT_PASS);
+ }
//设置排序值为当前最大的排序值+1
Integer maxSort = zoneProjectMapper.selectMaxSortByZoneId(zoneProjectInputVo.getZoneId());
if (maxSort == null) {
@@ -679,7 +690,15 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
if (!zoneProject.getCreateBy().equals(SecurityUtils.getUsername())) {
throw new ServiceException("仅允许编辑自身创建的项目");
}
- return updateZoneProject(id, zoneProjectUpdateVo);
+ ZoneDetail zoneDetail = zoneDetailService.selectZoneDetailById(zoneProject.getZoneId());
+ int result = updateZoneProject(id, zoneProjectUpdateVo);
+ if (projectNeedAudit(zoneDetail)) {
+ ZoneProject updateProject = new ZoneProject();
+ updateProject.setId(id);
+ updateProject.setAuditStatus(ZoneConstants.PROJECT_NOT_AUDIT);
+ zoneProjectMapper.updateZoneProject(updateProject);
+ }
+ return result;
}
@Override
@@ -729,4 +748,36 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
}
return zoneProjectJSONList;
}
+
+ private boolean projectNeedAudit(ZoneDetail zoneDetail) {
+ if (1 == zoneDetail.getProjectNeedAudit()) {
+ boolean isOperator = AuthUtil.hasUserIdentity(zoneDetail.getDeptId(), SystemRole.ZONE_OPERATOR.getRoleKey());
+ boolean isMember = AuthUtil.hasUserIdentity(zoneDetail.getDeptId(), SystemRole.ZONE_MEMBER.getRoleKey());
+ if (isOperator || isMember) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int auditZoneProject(ZoneProjectAuditVo zoneProjectAuditVo) {
+ ZoneProject zoneProject = zoneProjectMapper.selectZoneProjectById(zoneProjectAuditVo.getId());
+ if (zoneProject == null) {
+ throw new ServiceException("该项目不存在(项目Id[" + zoneProjectAuditVo.getId() + "])");
+ }
+ zoneDetailService.checkZoneDataScope(zoneProject.getZoneId());
+ if (!ZoneConstants.PROJECT_AUDIT_PASS.equals(zoneProjectAuditVo.getAuditStatus())
+ && !ZoneConstants.PROJECT_AUDIT_FAILED.equals(zoneProjectAuditVo.getAuditStatus())) {
+ throw new ServiceException("审核状态仅允许设置为审核通过和审核不通过");
+ }
+ if (!ZoneConstants.PROJECT_NOT_AUDIT.equals(zoneProject.getAuditStatus())) {
+ throw new ServiceException("该项目当前未处于待审核状态,不允许进行审核操作");
+ }
+ zoneProject.setAuditTime(DateUtils.getNowDate());
+ zoneProject.setAuditBy(SecurityUtils.getUsername());
+ zoneProject.setAuditStatus(zoneProjectAuditVo.getAuditStatus());
+ zoneProject.setRemark(zoneProjectAuditVo.getRemark());
+ return zoneProjectMapper.updateZoneProject(zoneProject);
+ }
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java
index 2a90253bb..65c85cb08 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java
@@ -66,6 +66,19 @@ public class ZoneConstants {
* 资源审核状态-待审核
*/
public final static String RESOURCE_NOT_AUDIT = "0";
+
+ /**
+ * 项目审核状态-审核通过
+ */
+ public final static String PROJECT_AUDIT_PASS = "1";
+ /**
+ * 项目审核状态-审核未通过
+ */
+ public final static String PROJECT_AUDIT_FAILED = "2";
+ /**
+ * 项目审核状态-待审核
+ */
+ public final static String PROJECT_NOT_AUDIT = "0";
/**
* 前台权限-管理者
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml
index c7cddd80d..b53997f14 100644
--- a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml
+++ b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml
@@ -44,6 +44,7 @@
+
@@ -101,6 +102,7 @@
template,
is_lock_cms,
resource_need_audit,
+ project_need_audit,
doc_need_audit,
section_cms_show,
section_project_show,
@@ -159,6 +161,7 @@
z.template,
z.is_lock_cms,
z.resource_need_audit,
+ z.project_need_audit,
z.doc_need_audit,
z.section_cms_show,
z.section_project_show,
@@ -273,6 +276,7 @@
helper_show,
doc_need_audit,
resource_need_audit,
+ project_need_audit,
is_lock_cms,
section_cms_show,
section_project_show,
@@ -327,6 +331,7 @@
#{helperShow},
#{docNeedAudit},
#{resourceNeedAudit},
+ #{projectNeedAudit},
#{isLockCms},
#{sectionCmsShow},
#{sectionProjectShow},
@@ -390,6 +395,7 @@
helper_title = #{helperTitle},
doc_need_audit = #{docNeedAudit},
resource_need_audit = #{resourceNeedAudit},
+ project_need_audit = #{projectNeedAudit},
is_lock_cms = #{isLockCms},
section_cms_show = #{sectionCmsShow},
section_project_show = #{sectionProjectShow},
diff --git a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml
index f2d13d1ad..80079a6ed 100644
--- a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml
+++ b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneProjectMapper.xml
@@ -19,6 +19,9 @@
+
+
+
@@ -75,6 +81,9 @@
zp.update_time,
zp.project_type_id,
zp.is_homepage,
+ zp.audit_status,
+ zp.audit_time,
+ zp.audit_by,
d.dept_id,
d.parent_id,
d.ancestors,
@@ -115,6 +124,7 @@
and zp.project_type_id = #{projectTypeId}
and zp.zone_id = #{zoneId}
and zp.create_by = #{createBy}
+ and zp.audit_status = #{auditStatus}
and zp.is_homepage = #{isHomepage}
@@ -188,6 +198,9 @@
create_time,
update_by,
update_time,
+ audit_status,
+ audit_time,
+ audit_by,
#{name},
@@ -202,6 +215,9 @@
#{createTime},
#{updateBy},
#{updateTime},
+ #{auditStatus},
+ #{auditTime},
+ #{auditBy},
@@ -219,6 +235,9 @@
update_time = #{updateTime},
sort = #{sort},
is_homepage = #{isHomepage},
+ audit_status = #{auditStatus},
+ audit_time = #{auditTime},
+ audit_by = #{auditBy},
where id = #{id}
From 930197590036ad30719ee162045410535b32ccf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Fri, 10 Apr 2026 14:36:24 +0800
Subject: [PATCH 04/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=20=20-=E6=96=B0=E5=A2=9E=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=8A=B6=E6=80=81=E5=B8=B8=E9=87=8F=EF=BC=88?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87/=E4=B8=8D=E9=80=9A?=
=?UTF-8?q?=E8=BF=87/=E5=BE=85=E5=AE=A1=E6=A0=B8=EF=BC=89=20=20-ZoneDetail?=
=?UTF-8?q?=E6=96=B0=E5=A2=9EprojectNeedAudit=E5=AD=97=E6=AE=B5=E6=8E=A7?=
=?UTF-8?q?=E5=88=B6=E4=B8=93=E5=8C=BA=E6=98=AF=E5=90=A6=E5=BC=80=E5=90=AF?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=AE=A1=E6=A0=B8=20=20-ZoneProject=E6=96=B0?=
=?UTF-8?q?=E5=A2=9EauditStatus/auditTime/auditBy=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=20=20-=E6=96=B0=E5=A2=9EZoneProjectAuditVo?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8=E8=AF=B7=E6=B1=82=E5=AF=B9=E8=B1=A1=20=20-?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=90=8E=E5=8F=B0=E5=AE=A1=E6=A0=B8=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3PUT/project/audit=20=20-=E5=89=8D=E5=8F=B0=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E/=E7=BC=96=E8=BE=91=E9=A1=B9=E7=9B=AE=E6=97=B6?=
=?UTF-8?q?=EF=BC=8C=E4=B8=93=E5=8C=BA=E5=BC=80=E5=90=AF=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=88=99=E8=87=AA=E5=8A=A8=E8=AE=BE=E7=BD=AE=E5=BE=85=E5=AE=A1?=
=?UTF-8?q?=E6=A0=B8=E7=8A=B6=E6=80=81=20=20-=E5=89=8D=E5=8F=B0=E5=85=AC?=
=?UTF-8?q?=E5=BC=80=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E8=BF=87=E6=BB=A4=E4=BB=85=E6=98=BE=E7=A4=BA=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E9=80=9A=E8=BF=87=E7=9A=84=E9=A1=B9=E7=9B=AE=20=20-"=E6=88=91?=
=?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8"=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E6=89=80=E6=9C=89=E5=AE=A1=E6=A0=B8=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../project/domain/vo/ZoneProjectAuditVo.java | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectAuditVo.java
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectAuditVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectAuditVo.java
new file mode 100644
index 000000000..519b89163
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectAuditVo.java
@@ -0,0 +1,22 @@
+package com.microservices.zone.project.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("项目审核对象")
+public class ZoneProjectAuditVo {
+ @ApiModelProperty(value = "项目Id", required = true)
+ @NotNull
+ private Long id;
+
+ @ApiModelProperty(value = "审核状态(1:审核通过 2:审核不通过)", required = true)
+ @NotNull
+ private String auditStatus;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+}
From 9f1d89da49d2d3508736229d0de0ffb25bbc1ef5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Fri, 10 Apr 2026 16:36:48 +0800
Subject: [PATCH 05/59] =?UTF-8?q?feat(=E5=A4=A7=E6=96=87=E4=BB=B6=E5=88=86?=
=?UTF-8?q?=E7=89=87=E4=B8=8A=E4=BC=A0):=20=E4=BC=98=E5=8C=96=E6=96=AD?=
=?UTF-8?q?=E7=82=B9=E7=BB=AD=E4=BC=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
检查秒传时用查询数据库是否存在相同的 fileSignature 且状态为上传中或者合并中的会话,返回该会话的id,前端可以根据该会话id继续完成上传,如果该会话为上传中则返回已上传分片的number,前端可以仅上传未上传的分片,如果为合并中,前端可以调用查询进度接口获取合并进度
---
.../file/domain/vo/CheckInstantUploadVo.java | 25 ++++++++++++++++++-
.../CheckInstantUploadResponseVo.java | 17 +++++++++++++
.../file/mapper/FileUploadSessionMapper.java | 6 +++--
.../impl/ChunkedUploadServiceImpl.java | 25 ++++++++++++++++++-
.../mapper/file/FileUploadSessionMapper.xml | 9 ++++++-
5 files changed, 77 insertions(+), 5 deletions(-)
diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/CheckInstantUploadVo.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/CheckInstantUploadVo.java
index ed128df3d..9bce894b0 100644
--- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/CheckInstantUploadVo.java
+++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/CheckInstantUploadVo.java
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
+import java.util.List;
@Data
@ApiModel("检查秒传返回")
@@ -13,7 +14,10 @@ public class CheckInstantUploadVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("是否可以秒传")
- private Boolean canInstantUpload;
+ private Boolean canInstantUpload = false;
+
+ @ApiModelProperty("是否可以断点续传")
+ private Boolean canResumingUpload = false;
@ApiModelProperty("已存在文件ID(秒传时)")
private Long existingFileId;
@@ -30,6 +34,15 @@ public class CheckInstantUploadVo implements Serializable {
@ApiModelProperty("已存在文件大小(秒传时)")
private String existingFileSize;
+ @ApiModelProperty("已存在未上传完成的会话Id(断点续传时)")
+ private Long resumingSessionId;
+
+ @ApiModelProperty("已上传的分片Id列表(断点续传时)-当状态为合并中时该值为null,请直接调用进度接口查看进度")
+ private List completedUploadChunkedNumberList;
+
+ @ApiModelProperty("已存在未上传完成的会话状态(断点续传时)")
+ private String resumingSessionStatus;
+
@ApiModelProperty("消息")
private String message;
@@ -45,6 +58,16 @@ public class CheckInstantUploadVo implements Serializable {
return vo;
}
+ public static CheckInstantUploadVo resumingSuccess(Long sessionId, List completedUploadChunkedIdList,String resumingSessionStatus) {
+ CheckInstantUploadVo vo = new CheckInstantUploadVo();
+ vo.setCanResumingUpload(true);
+ vo.setResumingSessionId(sessionId);
+ vo.setCompletedUploadChunkedNumberList(completedUploadChunkedIdList);
+ vo.setResumingSessionStatus(resumingSessionStatus);
+ vo.setMessage("断点续传成功");
+ return vo;
+ }
+
public static CheckInstantUploadVo needUpload(String message) {
CheckInstantUploadVo vo = new CheckInstantUploadVo();
vo.setCanInstantUpload(false);
diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/response/CheckInstantUploadResponseVo.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/response/CheckInstantUploadResponseVo.java
index 13c0244b1..cb3039ac4 100644
--- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/response/CheckInstantUploadResponseVo.java
+++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/domain/vo/response/CheckInstantUploadResponseVo.java
@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
+import java.util.List;
@Data
@ApiModel("检查秒传响应")
@@ -16,6 +17,9 @@ public class CheckInstantUploadResponseVo implements Serializable {
@ApiModelProperty("是否可以秒传")
private Boolean canInstantUpload;
+ @ApiModelProperty("是否可以断点续传")
+ private Boolean canResumingUpload;
+
@ApiModelProperty("已存在文件ID")
private Long existingFileId;
@@ -31,17 +35,30 @@ public class CheckInstantUploadResponseVo implements Serializable {
@ApiModelProperty("已存在文件大小")
private String existingFileSize;
+ @ApiModelProperty("已存在未上传完成的会话Id(断点续传时)")
+ private Long resumingSessionId;
+
+ @ApiModelProperty("已上传的分片Id列表(断点续传时)-当状态为合并中时该值为null,请直接调用进度接口查看进度")
+ private List completedUploadChunkedNumberList;
+
+ @ApiModelProperty("已存在未上传完成的会话状态(断点续传时)")
+ private String resumingSessionStatus;
+
@ApiModelProperty("消息")
private String message;
public static CheckInstantUploadResponseVo from(CheckInstantUploadVo vo) {
CheckInstantUploadResponseVo response = new CheckInstantUploadResponseVo();
response.setCanInstantUpload(vo.getCanInstantUpload());
+ response.setCanResumingUpload(vo.getCanResumingUpload());
response.setExistingFileId(vo.getExistingFileId());
response.setExistingFileName(vo.getExistingFileName());
response.setExistingFilePath(vo.getExistingFilePath());
response.setExistingFileUrl(vo.getExistingFileUrl());
response.setExistingFileSize(vo.getExistingFileSize());
+ response.setResumingSessionId(vo.getResumingSessionId());
+ response.setCompletedUploadChunkedNumberList(vo.getCompletedUploadChunkedNumberList());
+ response.setResumingSessionStatus(vo.getResumingSessionStatus());
response.setMessage(vo.getMessage());
return response;
}
diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/mapper/FileUploadSessionMapper.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/mapper/FileUploadSessionMapper.java
index 6583dd7a2..e6109c5a5 100644
--- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/mapper/FileUploadSessionMapper.java
+++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/mapper/FileUploadSessionMapper.java
@@ -80,11 +80,11 @@ public interface FileUploadSessionMapper {
/**
* 根据文件哈希和哈希类型查询已完成的会话
*
- * @param fileHash 文件哈希
+ * @param fileSignature 文件哈希
* @param hashType 哈希类型
* @return 文件分片上传会话
*/
- FileUploadSession selectCompletedByFileSignatureAndType(@Param("fileHash") String fileHash, @Param("hashType") String hashType);
+ FileUploadSession selectCompletedByFileSignatureAndType(@Param("fileSignature") String fileSignature, @Param("hashType") String hashType);
/**
* 更新会话状态
@@ -102,4 +102,6 @@ public interface FileUploadSessionMapper {
* @return 结果
*/
int incrementUploadedChunks(String uploadId);
+
+ FileUploadSession selectUploadingOrMergingByFileSignatureAndType(@Param("fileSignature") String fileSignature, @Param("hashType") String hashType);
}
diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/ChunkedUploadServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/ChunkedUploadServiceImpl.java
index 539230b13..f5b03890d 100644
--- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/ChunkedUploadServiceImpl.java
+++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/ChunkedUploadServiceImpl.java
@@ -124,7 +124,7 @@ public class ChunkedUploadServiceImpl implements IChunkedUploadService {
// 校验文件大小
if (input.getFileSize() > maxFileSize) {
- throw new ServiceException("文件大小超过限制: %s(%d字节) ",FileUtils.calcFileSize(maxFileSize),maxFileSize);
+ throw new ServiceException("文件大小超过限制: %s(%d字节) ", FileUtils.calcFileSize(maxFileSize), maxFileSize);
}
// 2. 计算分片信息(使用服务端动态计算的分片大小)
@@ -225,6 +225,29 @@ public class ChunkedUploadServiceImpl implements IChunkedUploadService {
);
}
}
+ // 3. 检查断点续传:查询数据库是否存在相同的 fileSignature 且状态为上传中或者合并中
+ FileUploadSession uploadingOrMergingSession = sessionMapper.selectUploadingOrMergingByFileSignatureAndType(fileSignature, session.getHashType());
+ if (uploadingOrMergingSession != null && uploadingOrMergingSession.getFileSignature() != null) {
+ // ========== 断点续传成功 ==========
+ // 删除当前会话及其分片记录
+ chunkMapper.deleteByUploadId(uploadId);
+ sessionMapper.deleteByUploadId(uploadId);
+ // 清理临时文件
+ cleanupTempFiles(session);
+ List completedUploadChunkedIdList = null;
+ if (FileUploadSession.Status.UPLOADING.getCode().equals(uploadingOrMergingSession.getStatus())) {
+ List chunkList = chunkMapper.selectByUploadId(uploadingOrMergingSession.getUploadId());
+ completedUploadChunkedIdList = chunkList.stream()
+ .filter(x -> FileUploadChunk.Status.UPLOADED.getCode().equals(x.getStatus()))
+ .map(FileUploadChunk::getChunkNumber).collect(Collectors.toList());
+ }
+
+ // 返回已存在文件信息
+ return CheckInstantUploadVo.resumingSuccess(
+ uploadingOrMergingSession.getSessionId(),
+ completedUploadChunkedIdList,
+ uploadingOrMergingSession.getStatus());
+ }
// ========== 不能秒传,存储哈希值 ==========
session.setFileSignature(fileSignature);
diff --git a/microservices-modules/microservices-modules-file/src/main/resources/mapper/file/FileUploadSessionMapper.xml b/microservices-modules/microservices-modules-file/src/main/resources/mapper/file/FileUploadSessionMapper.xml
index cf4b71c5c..bf6c7ef5e 100644
--- a/microservices-modules/microservices-modules-file/src/main/resources/mapper/file/FileUploadSessionMapper.xml
+++ b/microservices-modules/microservices-modules-file/src/main/resources/mapper/file/FileUploadSessionMapper.xml
@@ -85,12 +85,19 @@
+
From 8f2ff93dcac819da371d6571446ed713aa8619f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Mon, 13 Apr 2026 11:18:35 +0800
Subject: [PATCH 06/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=89=8D=E5=8F=B0=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1. 新增前台查询项目聚合分类接口
2. 调整前台新增/编辑项目逻辑:不允许调整排序字段
---
.../common/controller/FrontController.java | 44 ++++++++++++++-----
.../domain/vo/ZoneProjectFrontUpdateVo.java | 28 ++++++++++++
.../project/domain/vo/ZoneProjectInputVo.java | 11 ++---
.../domain/vo/ZoneProjectSearchVo.java | 5 ++-
.../domain/vo/ZoneProjectUpdateVo.java | 13 ++----
.../domain/vo/ZoneResourceSearchVo.java | 5 ++-
6 files changed, 75 insertions(+), 31 deletions(-)
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectFrontUpdateVo.java
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
index a893c8357..c1fa3a300 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
@@ -1,5 +1,6 @@
package com.microservices.zone.common.controller;
+import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.web.controller.BaseController;
import com.microservices.common.core.web.domain.AjaxResult;
import com.microservices.common.core.web.domain.GenericsAjaxResult;
@@ -10,11 +11,10 @@ import com.microservices.common.security.annotation.RequiresPermissions;
import com.microservices.common.security.utils.SecurityUtils;
import com.microservices.zone.detail.domain.vo.ZoneFrontRoleVo;
import com.microservices.zone.detail.service.IZoneDetailService;
-import com.microservices.zone.project.domain.vo.ZoneProjectDataVo;
-import com.microservices.zone.project.domain.vo.ZoneProjectInputVo;
-import com.microservices.zone.project.domain.vo.ZoneProjectSearchVo;
-import com.microservices.zone.project.domain.vo.ZoneProjectUpdateVo;
+import com.microservices.zone.project.domain.ZoneProjectType;
+import com.microservices.zone.project.domain.vo.*;
import com.microservices.zone.project.service.IZoneProjectService;
+import com.microservices.zone.project.service.IZoneProjectTypeService;
import com.microservices.zone.resource.domain.ZoneResource;
import com.microservices.zone.resource.domain.vo.ZoneResourceDataVo;
import com.microservices.zone.resource.domain.vo.ZoneResourceInputVo;
@@ -23,9 +23,12 @@ import com.microservices.zone.resource.domain.vo.ZoneResourceUpdateVo;
import com.microservices.zone.resource.service.IZoneResourceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
/**
* @author otto
*/
@@ -43,6 +46,9 @@ public class FrontController extends BaseController {
@Autowired
private IZoneDetailService zoneDetailService;
+ @Autowired
+ private IZoneProjectTypeService zoneProjectTypeService;
+
/**
* 查询我的资源列表
*/
@@ -99,12 +105,26 @@ public class FrontController extends BaseController {
return toAjax(zoneResourceService.deleteMyZoneResourceByIds(ids));
}
+ /**
+ * 查询特色专区项目分类列表
+ */
+ @GetMapping("/zone/{zoneId}/projectTypeList")
+ @ApiOperation("查询特色专区项目分类列表")
+ public GenericsTableDataInfo projectTypeList(
+ @ApiParam(name = "zoneId", value = "专区Id") @PathVariable Long zoneId) {
+ startPage();
+ ZoneProjectType zoneProjectType = new ZoneProjectType();
+ zoneProjectType.setZoneId(zoneId);
+ List list = zoneProjectTypeService.selectZoneProjectTypeList(zoneProjectType);
+ return getGenericsDataTable(list);
+ }
+
/**
* 查询我的项目列表
*/
@RequiresPermissions("zone:front:project:myList")
@GetMapping("/myProjectList")
- @ApiOperation(value = "查询我的项目列表")
+ @ApiOperation(value = "查询我的项目聚合列表")
public GenericsTableDataInfo myProjectList(ZoneProjectSearchVo zoneProjectSearchVo) {
zoneProjectSearchVo.setCreateBy(SecurityUtils.getUsername());
return zoneProjectService.selectMyZoneProjectList(zoneProjectSearchVo);
@@ -115,7 +135,7 @@ public class FrontController extends BaseController {
*/
@RequiresPermissions("zone:front:project:query")
@GetMapping("/myProject/{id}")
- @ApiOperation(value = "查询我的项目详情")
+ @ApiOperation(value = "查询我的项目聚合详情")
public GenericsAjaxResult myProject(@PathVariable("id") Long id) {
return genericsSuccess(zoneProjectService.selectZoneProjectDataById(id));
}
@@ -126,7 +146,7 @@ public class FrontController extends BaseController {
@RequiresPermissions("zone:front:project:add")
@Log(title = "专区前台项目操作", businessType = BusinessType.INSERT)
@PostMapping("/addProject")
- @ApiOperation(value = "新增项目")
+ @ApiOperation(value = "新增项目聚合")
public AjaxResult addProject(@RequestBody ZoneProjectInputVo zoneProjectInputVo) {
return success(zoneProjectService.insertZoneProject(zoneProjectInputVo));
}
@@ -136,10 +156,10 @@ public class FrontController extends BaseController {
*/
@RequiresPermissions("zone:front:project:edit")
@Log(title = "专区前台项目操作", businessType = BusinessType.UPDATE)
- @PutMapping("/editProject")
- @ApiOperation(value = "编辑项目")
- public AjaxResult editProject(@RequestBody ZoneProjectUpdateVo zoneProjectUpdateVo) {
- return success(zoneProjectService.updateMyZoneProject(zoneProjectUpdateVo.getId(), zoneProjectUpdateVo));
+ @PutMapping("/editProject/{projectId}")
+ @ApiOperation(value = "编辑项目聚合")
+ public AjaxResult editProject(@PathVariable("projectId") Long projectId,@RequestBody ZoneProjectFrontUpdateVo zoneProjectFrontUpdateVo) {
+ return success(zoneProjectService.updateMyZoneProject(projectId, zoneProjectFrontUpdateVo.toZoneProjectUpdateVo()));
}
/**
@@ -148,7 +168,7 @@ public class FrontController extends BaseController {
@RequiresPermissions("zone:front:project:remove")
@Log(title = "专区前台项目操作", businessType = BusinessType.DELETE)
@DeleteMapping("/removeProject/{ids}")
- @ApiOperation(value = "删除项目")
+ @ApiOperation(value = "删除项目聚合")
public AjaxResult removeProject(@PathVariable Long[] ids) {
return toAjax(zoneProjectService.deleteMyZoneProjectByIds(ids));
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectFrontUpdateVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectFrontUpdateVo.java
new file mode 100644
index 000000000..e1c93b6bf
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectFrontUpdateVo.java
@@ -0,0 +1,28 @@
+package com.microservices.zone.project.domain.vo;
+
+import com.microservices.common.core.utils.bean.BeanUtils;
+import com.microservices.zone.project.domain.ZoneProject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author otto
+ */
+
+@Data
+@ApiModel("项目聚合前台更新对象")
+public class ZoneProjectFrontUpdateVo {
+ @ApiModelProperty(value = "聚合项目类型")
+ @NotNull
+ protected Long projectTypeId;
+
+
+ public ZoneProjectUpdateVo toZoneProjectUpdateVo() {
+ ZoneProjectUpdateVo zoneProjectUpdateVo = new ZoneProjectUpdateVo();
+ BeanUtils.copyProperties(this, zoneProjectUpdateVo);
+ return zoneProjectUpdateVo;
+ }
+}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectInputVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectInputVo.java
index e0977a679..faaa66f4a 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectInputVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectInputVo.java
@@ -14,19 +14,16 @@ import javax.validation.constraints.NotNull;
@Data
@ApiModel("项目聚合输入对象")
-public class ZoneProjectInputVo {
+public class ZoneProjectInputVo {
@ApiModelProperty(value = "gitlink项目Id", required = true)
@NotNull
- private Long gitlinkProjectId;
+ protected Long gitlinkProjectId;
@ApiModelProperty(value = "聚合项目类型", required = true)
@NotNull
- private Long projectTypeId;
+ protected Long projectTypeId;
@ApiModelProperty(value = "所属专区", required = true)
@NotNull
- private Long zoneId;
-
- @ApiModelProperty(value = "排序")
- private Integer sort;
+ protected Long zoneId;
public ZoneProject toZoneProject() {
ZoneProject zoneProject = new ZoneProject();
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java
index 0fde19510..bf2e4a07b 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectSearchVo.java
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotNull;
+
/**
* @author otto
*/
@@ -11,7 +13,8 @@ import lombok.Data;
@Data
@ApiModel("项目聚合搜索对象")
public class ZoneProjectSearchVo extends ZoneProjectOpenSearchVo {
- @ApiModelProperty(value = "所属专区")
+ @ApiModelProperty(value = "所属专区",required = true)
+ @NotNull
private Long zoneId;
@ApiModelProperty(value = "审核状态(0:待审核,1:审核通过 2:审核不通过)")
private String auditStatus;
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java
index 01c987584..e01e29333 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/ZoneProjectUpdateVo.java
@@ -13,22 +13,15 @@ import javax.validation.constraints.NotNull;
@Data
@ApiModel("项目聚合更新对象")
-public class ZoneProjectUpdateVo {
- @ApiModelProperty(value = "项目Id", required = true)
- @NotNull
- private Long id;
-
- @ApiModelProperty(value = "聚合项目类型")
- @NotNull
- private Long projectTypeId;
-
+public class ZoneProjectUpdateVo extends ZoneProjectFrontUpdateVo{
@ApiModelProperty(value = "顺序")
private Integer order;
public ZoneProject toZoneProject(Long id) {
ZoneProject zoneProject = new ZoneProject();
zoneProject.setId(id);
- zoneProject.setProjectTypeId(projectTypeId);
+ zoneProject.setProjectTypeId(super.projectTypeId);
+ zoneProject.setSort(order);
return zoneProject;
}
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceSearchVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceSearchVo.java
index d7243e811..69766752f 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceSearchVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/domain/vo/ZoneResourceSearchVo.java
@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotNull;
+
/**
* @author otto
*/
@@ -12,7 +14,8 @@ import lombok.Data;
@ApiModel("资源搜索对象")
public class ZoneResourceSearchVo extends ZoneResourceOpenSearchVo {
- @ApiModelProperty(value = "所属专区")
+ @ApiModelProperty(value = "所属专区",required = true)
+ @NotNull
private Long zoneId;
@ApiModelProperty(value = "审核状态(0:待审核,1:审核通过 2:审核不通过)")
From 481c3ddfbdd1e93ddc74519a0824c5061a5a7111 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Tue, 14 Apr 2026 08:55:33 +0800
Subject: [PATCH 07/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=89=8D=E5=8F=B0=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
删除前台获取项目聚合分类列表接口,共用后台管理接口,取消后台获取分类列表权限限制
---
.../zone/common/controller/FrontController.java | 14 --------------
.../controller/ZoneProjectTypeController.java | 1 -
2 files changed, 15 deletions(-)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
index c1fa3a300..3210cc011 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
@@ -105,20 +105,6 @@ public class FrontController extends BaseController {
return toAjax(zoneResourceService.deleteMyZoneResourceByIds(ids));
}
- /**
- * 查询特色专区项目分类列表
- */
- @GetMapping("/zone/{zoneId}/projectTypeList")
- @ApiOperation("查询特色专区项目分类列表")
- public GenericsTableDataInfo projectTypeList(
- @ApiParam(name = "zoneId", value = "专区Id") @PathVariable Long zoneId) {
- startPage();
- ZoneProjectType zoneProjectType = new ZoneProjectType();
- zoneProjectType.setZoneId(zoneId);
- List list = zoneProjectTypeService.selectZoneProjectTypeList(zoneProjectType);
- return getGenericsDataTable(list);
- }
-
/**
* 查询我的项目列表
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectTypeController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectTypeController.java
index 3d7ff90dc..475b60caf 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectTypeController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/controller/ZoneProjectTypeController.java
@@ -35,7 +35,6 @@ public class ZoneProjectTypeController extends BaseController {
/**
* 查询特色专区项目分类列表
*/
- @RequiresPermissions("zone:projectType:list")
@GetMapping("/list")
@ApiOperation("查询特色专区项目分类列表")
public GenericsTableDataInfo list(ZoneProjectType zoneProjectType) {
From e80a0ded7afcc05faa20258822c2d26d2800d2f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Tue, 14 Apr 2026 15:09:43 +0800
Subject: [PATCH 08/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=89=8D=E5=8F=B0=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
新增查询专区下我的GitLink项目列表:支持会员查询我的项目或者我是owner权限的组织下的项目
---
.../common/controller/FrontController.java | 12 ++++
.../domain/vo/GitLinkProjectSearchVo.java | 30 ++--------
.../project/service/IZoneProjectService.java | 2 +
.../service/impl/ZoneProjectServiceImpl.java | 55 ++++++++++++-------
.../zone/utils/ZoneConstants.java | 4 ++
.../zone/utils/ZoneGitLinkRequestUrl.java | 7 +++
6 files changed, 63 insertions(+), 47 deletions(-)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
index 3210cc011..078b2745a 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
@@ -105,6 +105,18 @@ public class FrontController extends BaseController {
return toAjax(zoneResourceService.deleteMyZoneResourceByIds(ids));
}
+
+ /**
+ * 查询GitLink项目列表
+ */
+ @GetMapping("/zone/{zoneId}/myGitlinkProjectList")
+ @ApiOperation("查询专区下我的GitLink项目列表")
+ public GenericsTableDataInfo selectMyGitlinkProjectListByZone(
+ @ApiParam(name = "zoneId", value = "专区Id") @PathVariable Long zoneId
+ , MyGitLinkProjectSearchVo myGitLinkProjectSearchVo) {
+ return zoneProjectService.selectMyGitlinkProjectListByZone(zoneId, myGitLinkProjectSearchVo);
+ }
+
/**
* 查询我的项目列表
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/GitLinkProjectSearchVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/GitLinkProjectSearchVo.java
index 6d4c81e55..c210c0599 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/GitLinkProjectSearchVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/GitLinkProjectSearchVo.java
@@ -11,37 +11,15 @@ import lombok.Data;
@Data
@ApiModel("GitLink项目搜索对象")
-public class GitLinkProjectSearchVo {
+public class GitLinkProjectSearchVo extends MyGitLinkProjectSearchVo {
@ApiModelProperty(value = "项目语言")
private Long languageId;
- @ApiModelProperty(value = "项目排序")
- private String sortBy;
- @ApiModelProperty(value = "搜索关键字")
- private String search;
- @ApiModelProperty(value = "页码")
- private Long page;
- @ApiModelProperty(value = "每页数量")
- private Long limit;
public String genQueryString() {
- StringBuilder stringBuilder = new StringBuilder("?");
- if (page == null) {
- page = 1L;
- }
- if (limit == null) {
- limit = 15L;
- }
- stringBuilder.append("page=").append(page);
- stringBuilder.append("&limit=").append(limit);
+ StringBuilder queryString = super.genBaseQueryString();
if (languageId != null) {
- stringBuilder.append("&language_id=").append(languageId);
+ queryString.append("&language_id=").append(languageId);
}
- if (StringUtils.isNotEmpty(sortBy)) {
- stringBuilder.append("&sort_by=").append(sortBy);
- }
- if (StringUtils.isNotEmpty(search)) {
- stringBuilder.append("&search=").append(search);
- }
- return stringBuilder.toString();
+ return queryString.toString();
}
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
index 3b77f5b15..7778128e3 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/IZoneProjectService.java
@@ -145,4 +145,6 @@ public interface IZoneProjectService {
* @return 结果
*/
int auditZoneProject(ZoneProjectAuditVo zoneProjectAuditVo);
+
+ GenericsTableDataInfo selectMyGitlinkProjectListByZone(Long zoneId, MyGitLinkProjectSearchVo myGitLinkProjectSearchVo);
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
index 2bd3e34f1..7a0345bea 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
@@ -1,5 +1,6 @@
package com.microservices.zone.project.service.impl;
+import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.constant.CacheConstants;
@@ -567,27 +568,7 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
JSONObject result = gitLinkRequestHelper.doGet(
ZoneGitLinkRequestUrl.PROJECTS(gitLinkProjectSearchVo.genQueryString())
);
- List list = result.getList(ZoneConstants.GITLINK_RESPONSE_PROJECTS_KEY, JSONObject.class);
- if (list == null) {
- throw new ServiceException("Gitlink项目列表获取失败");
- }
- ZoneProjectSearchVo zoneProjectSearchVo = new ZoneProjectSearchVo();
- zoneProjectSearchVo.setZoneId(zoneId);
- List zoneProjectList = zoneProjectMapper.selectZoneProjectList(zoneProjectSearchVo);
- List gitlinkProjectList = new ArrayList<>();
- for (JSONObject gitlinkProject : list) {
- if (zoneId != null) {
- boolean isChoose = zoneProjectList.stream().anyMatch(x -> x.getGitlinkProjectId().equals(gitlinkProject.getLong("id")));
- if (isChoose) {
- gitlinkProject.put("isChoose", true);
- } else {
- gitlinkProject.put("isChoose", false);
- }
- }
- gitlinkProjectList.add(gitlinkProject);
- }
- Long size = result.getLong(ZoneConstants.GITLINK_RESPONSE_TOTAL_COUNT_KEY);
- return PageUtils.toPage(gitlinkProjectList, size);
+ return execGitlinkProjectsSearch(zoneId, result,ZoneConstants.GITLINK_RESPONSE_TOTAL_COUNT_KEY);
}
@Override
@@ -780,4 +761,36 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
zoneProject.setRemark(zoneProjectAuditVo.getRemark());
return zoneProjectMapper.updateZoneProject(zoneProject);
}
+
+ @Override
+ public GenericsTableDataInfo selectMyGitlinkProjectListByZone(Long zoneId, MyGitLinkProjectSearchVo gitLinkProjectSearchVo) {
+ JSONObject result = gitLinkRequestHelper.doGet(
+ ZoneGitLinkRequestUrl.MY_OWNER_PROJECTS(SecurityUtils.getUsername(), gitLinkProjectSearchVo.myProjectsQueryString())
+ );
+ return execGitlinkProjectsSearch(zoneId, result,ZoneConstants.GITLINK_RESPONSE_COUNT_KEY);
+ }
+
+ private GenericsTableDataInfo execGitlinkProjectsSearch(Long zoneId, JSONObject result,String totalKey) {
+ List list = result.getList(ZoneConstants.GITLINK_RESPONSE_PROJECTS_KEY, JSONObject.class);
+ if (list == null) {
+ throw new ServiceException("Gitlink项目列表获取失败");
+ }
+ ZoneProjectSearchVo zoneProjectSearchVo = new ZoneProjectSearchVo();
+ zoneProjectSearchVo.setZoneId(zoneId);
+ List zoneProjectList = zoneProjectMapper.selectZoneProjectList(zoneProjectSearchVo);
+ List gitlinkProjectList = new ArrayList<>();
+ for (JSONObject gitlinkProject : list) {
+ if (zoneId != null) {
+ boolean isChoose = zoneProjectList.stream().anyMatch(x -> x.getGitlinkProjectId().equals(gitlinkProject.getLong("id")));
+ if (isChoose) {
+ gitlinkProject.put("isChoose", true);
+ } else {
+ gitlinkProject.put("isChoose", false);
+ }
+ }
+ gitlinkProjectList.add(gitlinkProject);
+ }
+ Long size = result.getLong(totalKey);
+ return PageUtils.toPage(gitlinkProjectList, size);
+ }
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java
index 65c85cb08..47273b936 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneConstants.java
@@ -28,6 +28,10 @@ public class ZoneConstants {
* GitLink响应总数Key
*/
public final static String GITLINK_RESPONSE_TOTAL_COUNT_KEY = "total_count";
+ /**
+ * GitLink响应总数Key
+ */
+ public final static String GITLINK_RESPONSE_COUNT_KEY = "count";
/**
* GitLink项目列表Key
*/
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneGitLinkRequestUrl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneGitLinkRequestUrl.java
index 382aad989..bd65e46cb 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneGitLinkRequestUrl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/utils/ZoneGitLinkRequestUrl.java
@@ -22,6 +22,13 @@ public class ZoneGitLinkRequestUrl extends GitLinkRequestUrl {
return getOpenGitLinkRequestUrl(String.format("/api/projects.json%s", query));
}
+ /**
+ * 搜索项目列表
+ */
+ public static GitLinkRequestUrl MY_OWNER_PROJECTS(String username,String query) {
+ return getOpenGitLinkRequestUrl(String.format("/api/users/%s/projects.json%s",username, query));
+ }
+
/**
* 获取项目贡献者
From 77cd5bbc3a2c3c8eb39e9a0711d006fc3f5b6eb6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Tue, 14 Apr 2026 15:11:54 +0800
Subject: [PATCH 09/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=89=8D=E5=8F=B0=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
新增查询专区下我的GitLink项目列表:支持会员查询我的项目或者我是owner权限的组织下的项目
---
.../domain/vo/MyGitLinkProjectSearchVo.java | 48 +++++++++++++++++++
1 file changed, 48 insertions(+)
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/MyGitLinkProjectSearchVo.java
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/MyGitLinkProjectSearchVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/MyGitLinkProjectSearchVo.java
new file mode 100644
index 000000000..02056e6c7
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/domain/vo/MyGitLinkProjectSearchVo.java
@@ -0,0 +1,48 @@
+package com.microservices.zone.project.domain.vo;
+
+import com.microservices.common.core.utils.StringUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author otto
+ */
+
+@Data
+@ApiModel("GitLink项目搜索对象")
+public class MyGitLinkProjectSearchVo {
+ @ApiModelProperty(value = "项目排序")
+ private String sortBy;
+ @ApiModelProperty(value = "搜索关键字")
+ private String search;
+ @ApiModelProperty(value = "页码")
+ private Long page;
+ @ApiModelProperty(value = "每页数量")
+ private Long limit;
+
+ protected StringBuilder genBaseQueryString() {
+ StringBuilder stringBuilder = new StringBuilder("?");
+ if (page == null) {
+ page = 1L;
+ }
+ if (limit == null) {
+ limit = 15L;
+ }
+ stringBuilder.append("page=").append(page);
+ stringBuilder.append("&limit=").append(limit);
+ if (StringUtils.isNotEmpty(sortBy)) {
+ stringBuilder.append("&sort_by=").append(sortBy);
+ }
+ if (StringUtils.isNotEmpty(search)) {
+ stringBuilder.append("&search=").append(search);
+ }
+ return stringBuilder;
+ }
+
+ public String myProjectsQueryString() {
+ StringBuilder stringBuilder = genBaseQueryString();
+ stringBuilder.append("&category=admin&is_public=public");
+ return stringBuilder.toString();
+ }
+}
From 4f5f9a283c6e712ffa5c6b6905396fb6e23963ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Tue, 14 Apr 2026 15:38:46 +0800
Subject: [PATCH 10/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=89=8D=E5=8F=B0=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
前台会员新增项目聚合接口调整为支持批量新增
---
.../zone/common/controller/FrontController.java | 5 +++--
.../zone/project/service/impl/ZoneProjectServiceImpl.java | 4 +---
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
index 078b2745a..b0ca529da 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/FrontController.java
@@ -25,6 +25,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -145,8 +146,8 @@ public class FrontController extends BaseController {
@Log(title = "专区前台项目操作", businessType = BusinessType.INSERT)
@PostMapping("/addProject")
@ApiOperation(value = "新增项目聚合")
- public AjaxResult addProject(@RequestBody ZoneProjectInputVo zoneProjectInputVo) {
- return success(zoneProjectService.insertZoneProject(zoneProjectInputVo));
+ public AjaxResult addProject(@RequestBody @Validated List zoneProjectInputVoList) {
+ return success(zoneProjectService.insertBatchZoneProject(zoneProjectInputVoList));
}
/**
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
index 7a0345bea..995a7a809 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
@@ -734,9 +734,7 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
if (1 == zoneDetail.getProjectNeedAudit()) {
boolean isOperator = AuthUtil.hasUserIdentity(zoneDetail.getDeptId(), SystemRole.ZONE_OPERATOR.getRoleKey());
boolean isMember = AuthUtil.hasUserIdentity(zoneDetail.getDeptId(), SystemRole.ZONE_MEMBER.getRoleKey());
- if (isOperator || isMember) {
- return true;
- }
+ return isOperator || isMember;
}
return false;
}
From aff24c83d25f9d3bfc426d5ae3a6a874d63c7df7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Wed, 15 Apr 2026 13:54:04 +0800
Subject: [PATCH 11/59] =?UTF-8?q?feat(=E5=85=A8=E5=B1=80=E6=90=9C=E7=B4=A2?=
=?UTF-8?q?):=20=E5=AE=9E=E7=8E=B0=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?=E5=85=A8=E5=B1=80=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 实现MySQL全文检索:基于MATCH...AGAINST NATURAL LANGUAGE MODE
搜索范围覆盖文档标题(name)和摘要(summary)双字段
结果按全文相关度降序+更新时间降序双重排序
仅检索已审核通过且非目录类型的文档
- 实现项目全文检索:基于MATCH...AGAINST搜索zone_project.name字段
仅返回已审核项目(audit_status='1'),按相关度+更新时间排序
- 实现资源全文检索:搜索资源名称(name)+关键词(keywords)复合字段
创新性支持附件文件名全文匹配(通过EXISTS子查询关联sys_file_info表)
资源结果附带匹配附件信息(文件ID、文件名、文件大小),存储于extendData
通过RemoteFileService远程调用获取附件详情,支持大小写不敏感匹配
- 引入Redis缓存策略:第一页搜索结果缓存5分钟
---
.../microservices-modules-cms/pom.xml | 6 +
.../cms/doc/controller/OpenController.java | 42 +++
.../cms/doc/mapper/CmsDocMapper.java | 21 ++
.../cms/project/mapper/CmsProjectMapper.java | 22 ++
.../cms/search/dto/DocSearchRequest.java | 43 +++
.../cms/search/dto/DocSearchResponse.java | 63 ++++
.../cms/search/dto/DocSearchResult.java | 70 +++++
.../search/service/IGlobalSearchService.java | 20 ++
.../service/impl/GlobalSearchServiceImpl.java | 189 ++++++++++++
.../resources/mapper/cms/CmsDocMapper.xml | 28 ++
.../resources/mapper/cms/CmsProjectMapper.xml | 34 +++
.../microservices-modules-zone/pom.xml | 6 +
.../common/controller/OpenController.java | 44 +++
.../project/mapper/ZoneProjectMapper.java | 24 ++
.../resource/mapper/ZoneResourceMapper.java | 23 ++
.../zone/search/dto/GlobalSearchRequest.java | 51 ++++
.../zone/search/dto/GlobalSearchResponse.java | 63 ++++
.../zone/search/dto/GlobalSearchResult.java | 82 +++++
.../search/service/IGlobalSearchService.java | 20 ++
.../service/impl/GlobalSearchServiceImpl.java | 280 ++++++++++++++++++
.../mapper/zone/ZoneProjectMapper.xml | 44 +++
.../mapper/zone/ZoneResourceMapper.xml | 66 +++++
22 files changed, 1241 insertions(+)
create mode 100644 microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchRequest.java
create mode 100644 microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResponse.java
create mode 100644 microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResult.java
create mode 100644 microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/IGlobalSearchService.java
create mode 100644 microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/impl/GlobalSearchServiceImpl.java
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchRequest.java
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResponse.java
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResult.java
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/IGlobalSearchService.java
create mode 100644 microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/impl/GlobalSearchServiceImpl.java
diff --git a/microservices-modules/microservices-modules-cms/pom.xml b/microservices-modules/microservices-modules-cms/pom.xml
index ec4598e09..e9e2e1236 100644
--- a/microservices-modules/microservices-modules-cms/pom.xml
+++ b/microservices-modules/microservices-modules-cms/pom.xml
@@ -126,6 +126,12 @@
3.6.2
compile
+
+ com.microservices
+ microservices-common-search
+ 3.6.2
+ compile
+
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/controller/OpenController.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/controller/OpenController.java
index 423a042dd..61f465a64 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/controller/OpenController.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/controller/OpenController.java
@@ -9,8 +9,12 @@ import com.microservices.common.core.web.controller.BaseController;
import com.microservices.common.core.web.domain.AjaxResult;
import com.microservices.common.core.web.domain.GenericsAjaxResult;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
+import com.microservices.common.core.web.page.TableDataInfo;
import com.microservices.common.log.annotation.Log;
import com.microservices.common.log.enums.BusinessType;
+import com.microservices.cms.search.dto.DocSearchRequest;
+import com.microservices.cms.search.dto.DocSearchResponse;
+import com.microservices.cms.search.service.IGlobalSearchService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -35,6 +39,44 @@ public class OpenController extends BaseController {
@Autowired
private ICmsWechatService cmsWechatService;
+ @Autowired
+ private IGlobalSearchService globalSearchService;
+
+ /**
+ * 文章搜索接口
+ *
+ * @param keyword 搜索关键词
+ * @param zoneId 专区ID
+ * @param pageNum 页码
+ * @param pageSize 每页数量
+ * @return 搜索结果
+ */
+ @ApiOperation("文章搜索")
+ @GetMapping("/search")
+ public TableDataInfo docSearchGet(
+ @ApiParam("搜索关键词") @RequestParam String keyword,
+ @ApiParam("专区ID") @RequestParam Long zoneId,
+ @ApiParam("页码") @RequestParam(defaultValue = "1") Integer pageNum,
+ @ApiParam("每页数量") @RequestParam(defaultValue = "20") Integer pageSize) {
+
+ DocSearchRequest request = new DocSearchRequest();
+ request.setKeyword(keyword);
+ request.setZoneId(zoneId);
+ request.setPageNum(pageNum);
+ request.setPageSize(pageSize);
+
+ logger.info("文章搜索请求(GET): keyword={}", keyword);
+
+ DocSearchResponse response = globalSearchService.docSearch(request);
+
+ TableDataInfo dataInfo = new TableDataInfo();
+ dataInfo.setCode(200);
+ dataInfo.setMsg("查询成功");
+ dataInfo.setRows(response.getResults());
+ dataInfo.setTotal(response.getTotal());
+ return dataInfo;
+ }
+
/**
* 查询栏目列表
*/
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/mapper/CmsDocMapper.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/mapper/CmsDocMapper.java
index aacb21b3e..64d165429 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/mapper/CmsDocMapper.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/mapper/CmsDocMapper.java
@@ -192,4 +192,25 @@ public interface CmsDocMapper {
List selectCmsDocAndDirListByDept(Long deptId);
void updateCmsDocShaByPathAndDeptId(@Param("sha") String sha, @Param("filePath") String filePath, @Param("deptId") Long deptId);
+
+ /**
+ * 全局搜索 - 全文索引查询
+ *
+ * @param keyword 搜索关键词
+ * @param deptId 组织ID(可选)
+ * @param offset 偏移量
+ * @param pageSize 每页数量
+ * @return 搜索结果列表
+ */
+ List globalSearch(@Param("keyword") String keyword, @Param("deptId") Long deptId,
+ @Param("offset") int offset, @Param("pageSize") int pageSize);
+
+ /**
+ * 全局搜索结果计数
+ *
+ * @param keyword 搜索关键词
+ * @param deptId 组织ID(可选)
+ * @return 结果数量
+ */
+ Long globalSearchCount(@Param("keyword") String keyword, @Param("deptId") Long deptId);
}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/mapper/CmsProjectMapper.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/mapper/CmsProjectMapper.java
index 377b04816..a7c9495eb 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/mapper/CmsProjectMapper.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/mapper/CmsProjectMapper.java
@@ -2,6 +2,7 @@ package com.microservices.cms.project.mapper;
import com.microservices.cms.project.domain.CmsProject;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -64,4 +65,25 @@ public interface CmsProjectMapper {
CmsProject selectCmsProjectByDeptId(Long deptId);
CmsProject selectCmsProjectByIdentifier(String identifier);
+
+ /**
+ * 全局搜索 - 全文索引查询
+ *
+ * @param keyword 搜索关键词
+ * @param deptId 组织ID(可选)
+ * @param offset 偏移量
+ * @param pageSize 每页数量
+ * @return 搜索结果列表
+ */
+ List globalSearch(@Param("keyword") String keyword, @Param("deptId") Long deptId,
+ @Param("offset") int offset, @Param("pageSize") int pageSize);
+
+ /**
+ * 全局搜索结果计数
+ *
+ * @param keyword 搜索关键词
+ * @param deptId 组织ID(可选)
+ * @return 结果数量
+ */
+ Long globalSearchCount(@Param("keyword") String keyword, @Param("deptId") Long deptId);
}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchRequest.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchRequest.java
new file mode 100644
index 000000000..ec491aa4d
--- /dev/null
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchRequest.java
@@ -0,0 +1,43 @@
+package com.microservices.cms.search.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文章搜索请求对象
+ *
+ * @author microservices
+ */
+@Data
+@ApiModel("文章搜索请求对象")
+public class DocSearchRequest implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 搜索关键词
+ */
+ @ApiModelProperty(value = "搜索关键词", required = true)
+ private String keyword;
+
+ /**
+ * 专区ID
+ */
+ @ApiModelProperty(value = "专区ID")
+ private Long zoneId;
+
+ /**
+ * 页码
+ */
+ @ApiModelProperty(value = "页码")
+ private Integer pageNum = 1;
+
+ /**
+ * 每页数量
+ */
+ @ApiModelProperty(value = "每页数量")
+ private Integer pageSize = 20;
+}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResponse.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResponse.java
new file mode 100644
index 000000000..93ecf514c
--- /dev/null
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResponse.java
@@ -0,0 +1,63 @@
+package com.microservices.cms.search.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 全局搜索响应对象
+ *
+ * @author microservices
+ */
+@Data
+@ApiModel("文章搜索响应对象")
+public class DocSearchResponse implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 总结果数
+ */
+ @ApiModelProperty(value = "总结果数")
+ private Long total;
+
+ /**
+ * 搜索结果列表
+ */
+ @ApiModelProperty(value = "搜索结果列表")
+ private List results;
+
+ /**
+ * 各类型结果数量统计
+ */
+ @ApiModelProperty(value = "各类型结果数量统计")
+ private Map typeCounts;
+
+ /**
+ * 搜索耗时(毫秒)
+ */
+ @ApiModelProperty(value = "搜索耗时(毫秒)")
+ private Long searchTime;
+
+ /**
+ * 搜索关键词
+ */
+ @ApiModelProperty(value = "搜索关键词")
+ private String keyword;
+
+ /**
+ * 当前页码
+ */
+ @ApiModelProperty(value = "当前页码")
+ private Integer pageNum;
+
+ /**
+ * 每页数量
+ */
+ @ApiModelProperty(value = "每页数量")
+ private Integer pageSize;
+}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResult.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResult.java
new file mode 100644
index 000000000..5415b77da
--- /dev/null
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/dto/DocSearchResult.java
@@ -0,0 +1,70 @@
+package com.microservices.cms.search.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 文章搜索结果对象
+ *
+ * @author microservices
+ */
+@Data
+@ApiModel("文章搜索结果对象")
+public class DocSearchResult implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value = "ID")
+ private Long id;
+
+ /**
+ * 标题
+ */
+ @ApiModelProperty(value = "标题")
+ private String title;
+
+ /**
+ * 内容摘要
+ */
+ @ApiModelProperty(value = "内容摘要")
+ private String content;
+
+ /**
+ * 高亮片段
+ */
+ @ApiModelProperty(value = "高亮片段")
+ private String highlight;
+
+ /**
+ * 组织ID
+ */
+ @ApiModelProperty(value = "组织ID")
+ private Long deptId;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+
+ /**
+ * 相关度评分
+ */
+ @ApiModelProperty(value = "相关度评分")
+ private Double score;
+
+ /**
+ * 扩展数据(JSON格式)
+ */
+ @ApiModelProperty(value = "扩展数据")
+ private String extendData;
+}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/IGlobalSearchService.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/IGlobalSearchService.java
new file mode 100644
index 000000000..3231b5caa
--- /dev/null
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/IGlobalSearchService.java
@@ -0,0 +1,20 @@
+package com.microservices.cms.search.service;
+
+import com.microservices.cms.search.dto.DocSearchRequest;
+import com.microservices.cms.search.dto.DocSearchResponse;
+
+/**
+ * 全局搜索服务接口
+ *
+ * @author microservices
+ */
+public interface IGlobalSearchService {
+
+ /**
+ * 全局搜索
+ *
+ * @param request 搜索请求
+ * @return 搜索响应
+ */
+ DocSearchResponse docSearch(DocSearchRequest request);
+}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/impl/GlobalSearchServiceImpl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/impl/GlobalSearchServiceImpl.java
new file mode 100644
index 000000000..eca4bb2ea
--- /dev/null
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/search/service/impl/GlobalSearchServiceImpl.java
@@ -0,0 +1,189 @@
+package com.microservices.cms.search.service.impl;
+
+import com.microservices.cms.doc.domain.CmsDoc;
+import com.microservices.cms.doc.mapper.CmsDocMapper;
+import com.microservices.cms.doc.service.ICmsDocService;
+import com.microservices.cms.search.service.IGlobalSearchService;
+import com.microservices.common.core.utils.StringUtils;
+import com.microservices.common.redis.service.RedisService;
+import com.microservices.cms.search.dto.DocSearchRequest;
+import com.microservices.cms.search.dto.DocSearchResponse;
+import com.microservices.cms.search.dto.DocSearchResult;
+import com.microservices.common.security.utils.SecurityUtils;
+import com.microservices.system.api.model.LoginUser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 全局搜索服务实现
+ *
+ * @author microservices
+ */
+@Service
+public class GlobalSearchServiceImpl implements IGlobalSearchService {
+
+ private static final Logger logger = LoggerFactory.getLogger(GlobalSearchServiceImpl.class);
+
+ @Autowired
+ private CmsDocMapper cmsDocMapper;
+ @Autowired
+ private RedisService redisService;
+ @Autowired
+ private ICmsDocService cmsDocService;
+
+ private static final String SEARCH_CACHE_PREFIX = "search:cache:";
+ private static final Long CACHE_EXPIRE_SECONDS = 300L; // 5分钟
+
+ @Override
+ public DocSearchResponse docSearch(DocSearchRequest request) {
+ long startTime = System.currentTimeMillis();
+
+ // 参数校验
+ if (StringUtils.isEmpty(request.getKeyword())) {
+ return buildEmptyResponse(request);
+ }
+
+ // 1. 尝试从缓存获取(仅第一页)
+ if (request.getPageNum() == 1) {
+ String cacheKey = buildCacheKey(request);
+
+ DocSearchResponse cached = redisService.getCacheObject(SEARCH_CACHE_PREFIX + cacheKey);
+ if (cached != null) {
+ cached.setSearchTime(System.currentTimeMillis() - startTime);
+ return cached;
+ }
+ }
+
+ // 2. 并行搜索各类型
+ List allResults = new ArrayList<>();
+ Map typeCounts = new HashMap<>();
+
+ // 获取当前用户信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+
+ // 搜索CMS文章
+ List docResults = searchDocs(request);
+ allResults.addAll(docResults);
+ typeCounts.put("doc", (long) docResults.size());
+
+ // 3. 按相关度评分排序
+ allResults.sort((a, b) -> {
+ if (b.getScore() != null && a.getScore() != null) {
+ return b.getScore().compareTo(a.getScore());
+ }
+ return 0;
+ });
+
+ // 4. 分页
+ int total = allResults.size();
+ int start = (request.getPageNum() - 1) * request.getPageSize();
+ int end = Math.min(start + request.getPageSize(), total);
+ List pagedResults = start < total ?
+ allResults.subList(start, end) : new ArrayList<>();
+
+ // 5. 构建响应
+ DocSearchResponse response = new DocSearchResponse();
+ response.setTotal((long) total);
+ response.setResults(pagedResults);
+ response.setTypeCounts(typeCounts);
+ response.setKeyword(request.getKeyword());
+ response.setPageNum(request.getPageNum());
+ response.setPageSize(request.getPageSize());
+ response.setSearchTime(System.currentTimeMillis() - startTime);
+
+ // 6. 缓存结果(仅第一页)
+ if (request.getPageNum() == 1) {
+ String cacheKey = buildCacheKey(request);
+ redisService.setCacheObject(SEARCH_CACHE_PREFIX + cacheKey, response, CACHE_EXPIRE_SECONDS, TimeUnit.SECONDS);
+ }
+
+ // 7. 记录搜索日志
+ recordSearchLog(request, response, loginUser);
+
+ return response;
+ }
+
+ /**
+ * 记录搜索日志
+ */
+ private void recordSearchLog(DocSearchRequest request, DocSearchResponse response, LoginUser loginUser) {
+ Long userId = loginUser != null ? loginUser.getUserId() : null;
+ String searchTypes = "文章";
+ Long deptId = cmsDocService.getDeptIdByZoneId(request.getZoneId());
+ logger.info("全局搜索 - 关键词: {}, 用户ID: {}, 耗时: {}ms, 结果数: {}, 类型: {}, 专区Id: {}, 组织ID: {}",
+ request.getKeyword(),
+ userId,
+ response.getSearchTime(),
+ response.getTotal(),
+ searchTypes,
+ request.getZoneId(),
+ deptId
+ );
+ }
+
+ /**
+ * 搜索CMS文章
+ */
+ private List searchDocs(DocSearchRequest request) {
+ List results = new ArrayList<>();
+ try {
+ // 使用部门ID参数
+ Long deptId = cmsDocService.getDeptIdByZoneId(request.getZoneId());
+
+ List docs = cmsDocMapper.globalSearch(
+ request.getKeyword(),
+ deptId,
+ (request.getPageNum() - 1) * request.getPageSize(),
+ request.getPageSize()
+ );
+
+ for (CmsDoc doc : docs) {
+ DocSearchResult result = new DocSearchResult();
+ result.setId(doc.getId());
+ result.setTitle(doc.getName());
+ result.setContent(doc.getSummary());
+ result.setDeptId(doc.getDeptId());
+ result.setCreateTime(doc.getCreateTime());
+ result.setScore(1.0); // MySQL全文索引默认相关度
+ results.add(result);
+ }
+ } catch (Exception e) {
+ // 记录错误但继续处理其他类型
+ System.err.println("搜索CMS文章失败: " + e.getMessage());
+ }
+ return results;
+ }
+
+ /**
+ * 构建缓存键
+ */
+ private String buildCacheKey(DocSearchRequest request) {
+ Long deptId = cmsDocService.getDeptIdByZoneId(request.getZoneId());
+ StringBuilder key = new StringBuilder(request.getKeyword());
+ key.append(":").append(String.join(",", "Doc"));
+ if (deptId != null) {
+ key.append(":dept=").append(deptId);
+ }
+ return key.toString();
+ }
+
+ /**
+ * 构建空响应
+ */
+ private DocSearchResponse buildEmptyResponse(DocSearchRequest request) {
+ DocSearchResponse response = new DocSearchResponse();
+ response.setTotal(0L);
+ response.setResults(new ArrayList<>());
+ response.setTypeCounts(new HashMap<>());
+ response.setKeyword(request.getKeyword());
+ response.setPageNum(request.getPageNum());
+ response.setPageSize(request.getPageSize());
+ response.setSearchTime(0L);
+ return response;
+ }
+}
diff --git a/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsDocMapper.xml b/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsDocMapper.xml
index c67f642be..d66f99632 100644
--- a/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsDocMapper.xml
+++ b/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsDocMapper.xml
@@ -494,4 +494,32 @@
#{id}
+
+
+
+
+
\ No newline at end of file
diff --git a/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsProjectMapper.xml b/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsProjectMapper.xml
index 1c99f7f0d..4684628ec 100644
--- a/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsProjectMapper.xml
+++ b/microservices-modules/microservices-modules-cms/src/main/resources/mapper/cms/CmsProjectMapper.xml
@@ -159,4 +159,38 @@
item="id" collection="array" open="(" separator="," close=")">#{id}
+
+
+
+
+
\ No newline at end of file
diff --git a/microservices-modules/microservices-modules-zone/pom.xml b/microservices-modules/microservices-modules-zone/pom.xml
index b92340783..f784ef1cd 100644
--- a/microservices-modules/microservices-modules-zone/pom.xml
+++ b/microservices-modules/microservices-modules-zone/pom.xml
@@ -133,6 +133,12 @@
3.6.2
compile
+
+ com.microservices
+ microservices-common-search
+ 3.6.2
+ compile
+
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/OpenController.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/OpenController.java
index 9cfbcd91a..67fe49506 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/OpenController.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/common/controller/OpenController.java
@@ -6,6 +6,7 @@ import com.microservices.common.core.web.controller.BaseController;
import com.microservices.common.core.web.domain.AjaxResult;
import com.microservices.common.core.web.domain.GenericsAjaxResult;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
+import com.microservices.common.core.web.page.TableDataInfo;
import com.microservices.common.log.annotation.Log;
import com.microservices.common.log.enums.BusinessType;
import com.microservices.system.api.domain.SysUser;
@@ -37,6 +38,10 @@ import com.microservices.zone.resource.domain.vo.ZoneResourceOpenSearchVo;
import com.microservices.zone.resource.service.IZoneResourceDomainService;
import com.microservices.zone.resource.service.IZoneResourceService;
import com.microservices.zone.resource.service.IZoneResourceTypeService;
+import com.microservices.zone.search.dto.GlobalSearchRequest;
+import com.microservices.zone.search.dto.GlobalSearchResponse;
+import com.microservices.zone.search.dto.GlobalSearchResult;
+import com.microservices.zone.search.service.IGlobalSearchService;
import com.microservices.zone.specialProject.domain.ZoneSpecialProject;
import com.microservices.zone.specialProject.domain.ZoneSpecialProjectRelevancy;
import com.microservices.zone.specialProject.domain.ZoneSpecialProjectReport;
@@ -411,4 +416,43 @@ public class OpenController extends BaseController {
List list = zoneSpecialProjectReportService.selectZoneSpecialProjectReportList(zoneSpecialProjectReportSearchVo.toZoneSpecialProjectReport());
return getGenericsDataTable(list);
}
+
+ @Autowired
+ private IGlobalSearchService globalSearchService;
+
+ /**
+ * 全局搜索接口(GET方法)
+ *
+ * @param keyword 搜索关键词
+ * @param types 搜索类型(逗号分隔)
+ * @param zoneId 专区ID
+ * @param pageNum 页码
+ * @param pageSize 每页数量
+ * @return 搜索结果
+ */
+ @ApiOperation("全局搜索(GET)")
+ @GetMapping("/global")
+ public GenericsTableDataInfo globalSearchGet(
+ @ApiParam("搜索关键词") @RequestParam String keyword,
+ @ApiParam("搜索类型") @RequestParam(required = false) String types,
+ @ApiParam("专区ID") @RequestParam Long zoneId,
+ @ApiParam("页码") @RequestParam(defaultValue = "1") Integer pageNum,
+ @ApiParam("每页数量") @RequestParam(defaultValue = "20") Integer pageSize) {
+
+ GlobalSearchRequest request = new GlobalSearchRequest();
+ request.setKeyword(keyword);
+ request.setPageNum(pageNum);
+ request.setPageSize(pageSize);
+ request.setZoneId(zoneId);
+
+ if (types != null && !types.isEmpty()) {
+ request.setTypes(java.util.Arrays.asList(types.split(",")));
+ }
+
+ logger.info("全局搜索请求(GET): keyword={}, types={}", keyword, types);
+
+ GlobalSearchResponse response = globalSearchService.globalSearch(request);
+
+ return new GenericsTableDataInfo<>(response.getResults(),response.getTotal());
+ }
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/mapper/ZoneProjectMapper.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/mapper/ZoneProjectMapper.java
index 91e1bae05..95f34dc3b 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/mapper/ZoneProjectMapper.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/mapper/ZoneProjectMapper.java
@@ -155,4 +155,28 @@ public interface ZoneProjectMapper {
* @return
*/
int deleteZoneProjectByZoneId(Long zoneId);
+
+ /**
+ * 全局搜索 - 全文索引查询
+ *
+ * @param keyword 搜索关键词
+ * @param zoneId 专区ID(可选)
+ * @param offset 偏移量
+ * @param pageSize 每页数量
+ * @return 搜索结果列表
+ */
+ List globalSearch(@Param("keyword") String keyword, @Param("zoneId") Long zoneId,
+ @Param("offset") int offset,
+ @Param("pageSize") int pageSize);
+
+ /**
+ * 全局搜索结果计数
+ *
+ * @param keyword 搜索关键词
+ * @param zoneId 专区ID(可选)
+ * @param deptId 组织ID(可选)
+ * @return 结果数量
+ */
+ Long globalSearchCount(@Param("keyword") String keyword, @Param("zoneId") Long zoneId,
+ @Param("deptId") Long deptId);
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/mapper/ZoneResourceMapper.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/mapper/ZoneResourceMapper.java
index c1d1b4404..de699cf1e 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/mapper/ZoneResourceMapper.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/resource/mapper/ZoneResourceMapper.java
@@ -95,4 +95,27 @@ public interface ZoneResourceMapper {
* @param zoneId 专区Id
*/
void deleteZoneResourceByZoneId(Long zoneId);
+
+ /**
+ * 全局搜索 - 全文索引查询
+ *
+ * @param keyword 搜索关键词
+ * @param zoneId 专区ID
+ * @param offset 偏移量
+ * @param pageSize 每页数量
+ * @return 搜索结果列表
+ */
+ List globalSearch(@Param("keyword") String keyword, @Param("zoneId") Long zoneId,
+ @Param("offset") int offset,@Param("pageSize") int pageSize);
+
+ /**
+ * 全局搜索结果计数
+ *
+ * @param keyword 搜索关键词
+ * @param zoneId 专区ID(可选)
+ * @param deptId 组织ID(可选)
+ * @return 结果数量
+ */
+ Long globalSearchCount(@Param("keyword") String keyword, @Param("zoneId") Long zoneId,
+ @Param("deptId") Long deptId);
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchRequest.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchRequest.java
new file mode 100644
index 000000000..328caf286
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchRequest.java
@@ -0,0 +1,51 @@
+package com.microservices.zone.search.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 全局搜索请求对象
+ *
+ * @author microservices
+ */
+@Data
+@ApiModel("全局搜索请求对象")
+public class GlobalSearchRequest implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 搜索关键词
+ */
+ @ApiModelProperty(value = "搜索关键词", required = true)
+ private String keyword;
+
+ /**
+ * 搜索类型列表(zone_project, resource, member)
+ * 为空则搜索所有类型
+ */
+ @ApiModelProperty(value = "搜索类型列表")
+ private List types;
+
+ /**
+ * 专区ID
+ */
+ @ApiModelProperty(value = "专区ID")
+ private Long zoneId;
+
+ /**
+ * 页码
+ */
+ @ApiModelProperty(value = "页码")
+ private Integer pageNum = 1;
+
+ /**
+ * 每页数量
+ */
+ @ApiModelProperty(value = "每页数量")
+ private Integer pageSize = 20;
+}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResponse.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResponse.java
new file mode 100644
index 000000000..59550f99f
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResponse.java
@@ -0,0 +1,63 @@
+package com.microservices.zone.search.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 全局搜索响应对象
+ *
+ * @author microservices
+ */
+@Data
+@ApiModel("全局搜索响应对象")
+public class GlobalSearchResponse implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 总结果数
+ */
+ @ApiModelProperty(value = "总结果数")
+ private Long total;
+
+ /**
+ * 搜索结果列表
+ */
+ @ApiModelProperty(value = "搜索结果列表")
+ private List results;
+
+ /**
+ * 各类型结果数量统计
+ */
+ @ApiModelProperty(value = "各类型结果数量统计")
+ private Map typeCounts;
+
+ /**
+ * 搜索耗时(毫秒)
+ */
+ @ApiModelProperty(value = "搜索耗时(毫秒)")
+ private Long searchTime;
+
+ /**
+ * 搜索关键词
+ */
+ @ApiModelProperty(value = "搜索关键词")
+ private String keyword;
+
+ /**
+ * 当前页码
+ */
+ @ApiModelProperty(value = "当前页码")
+ private Integer pageNum;
+
+ /**
+ * 每页数量
+ */
+ @ApiModelProperty(value = "每页数量")
+ private Integer pageSize;
+}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResult.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResult.java
new file mode 100644
index 000000000..f71b97676
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/dto/GlobalSearchResult.java
@@ -0,0 +1,82 @@
+package com.microservices.zone.search.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 全局搜索结果对象
+ *
+ * @author microservices
+ */
+@Data
+@ApiModel("全局搜索结果对象")
+public class GlobalSearchResult implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 结果类型(zone_project, resource, member)
+ */
+ @ApiModelProperty(value = "结果类型")
+ private String type;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value = "ID")
+ private Long id;
+
+ /**
+ * 标题
+ */
+ @ApiModelProperty(value = "标题")
+ private String title;
+
+ /**
+ * 内容摘要
+ */
+ @ApiModelProperty(value = "内容摘要")
+ private String content;
+
+ /**
+ * 高亮片段
+ */
+ @ApiModelProperty(value = "高亮片段")
+ private String highlight;
+
+ /**
+ * 组织ID
+ */
+ @ApiModelProperty(value = "组织ID")
+ private Long deptId;
+
+ /**
+ * 专区ID
+ */
+ @ApiModelProperty(value = "专区ID")
+ private Long zoneId;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+
+ /**
+ * 相关度评分
+ */
+ @ApiModelProperty(value = "相关度评分")
+ private Double score;
+
+ /**
+ * 扩展数据(JSON格式)
+ */
+ @ApiModelProperty(value = "扩展数据")
+ private String extendData;
+}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/IGlobalSearchService.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/IGlobalSearchService.java
new file mode 100644
index 000000000..6b7162cd3
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/IGlobalSearchService.java
@@ -0,0 +1,20 @@
+package com.microservices.zone.search.service;
+
+import com.microservices.zone.search.dto.GlobalSearchRequest;
+import com.microservices.zone.search.dto.GlobalSearchResponse;
+
+/**
+ * 全局搜索服务接口
+ *
+ * @author microservices
+ */
+public interface IGlobalSearchService {
+
+ /**
+ * 全局搜索
+ *
+ * @param request 搜索请求
+ * @return 搜索响应
+ */
+ GlobalSearchResponse globalSearch(GlobalSearchRequest request);
+}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/impl/GlobalSearchServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/impl/GlobalSearchServiceImpl.java
new file mode 100644
index 000000000..ef13d7598
--- /dev/null
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/search/service/impl/GlobalSearchServiceImpl.java
@@ -0,0 +1,280 @@
+package com.microservices.zone.search.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.microservices.common.core.domain.R;
+import com.microservices.common.core.utils.StringUtils;
+import com.microservices.common.redis.service.RedisService;
+import com.microservices.common.security.utils.SecurityUtils;
+import com.microservices.system.api.RemoteFileService;
+import com.microservices.system.api.domain.SysFileInfo;
+import com.microservices.system.api.model.LoginUser;
+import com.microservices.zone.project.domain.ZoneProject;
+import com.microservices.zone.project.mapper.ZoneProjectMapper;
+import com.microservices.zone.resource.domain.ZoneResource;
+import com.microservices.zone.resource.mapper.ZoneResourceMapper;
+import com.microservices.zone.search.dto.GlobalSearchRequest;
+import com.microservices.zone.search.dto.GlobalSearchResponse;
+import com.microservices.zone.search.dto.GlobalSearchResult;
+import com.microservices.zone.search.service.IGlobalSearchService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 全局搜索服务实现
+ *
+ * @author microservices
+ */
+@Service
+public class GlobalSearchServiceImpl implements IGlobalSearchService {
+
+ private static final Logger logger = LoggerFactory.getLogger(GlobalSearchServiceImpl.class);
+
+ @Autowired
+ private ZoneProjectMapper zoneProjectMapper;
+
+ @Autowired
+ private ZoneResourceMapper zoneResourceMapper;
+
+ @Autowired
+ private RemoteFileService remoteFileService;
+
+ @Autowired
+ private RedisService redisService;
+
+ private static final String SEARCH_CACHE_PREFIX = "search:cache:";
+ private static final long CACHE_EXPIRE_SECONDS = 300; // 5分钟
+
+ @Override
+ public GlobalSearchResponse globalSearch(GlobalSearchRequest request) {
+ long startTime = System.currentTimeMillis();
+
+ // 参数校验
+ if (StringUtils.isEmpty(request.getKeyword())) {
+ return buildEmptyResponse(request);
+ }
+
+ // 1. 尝试从缓存获取(仅第一页)
+ if (request.getPageNum() == 1) {
+ String cacheKey = buildCacheKey(request);
+ GlobalSearchResponse cached = redisService.getCacheObject(SEARCH_CACHE_PREFIX + cacheKey);
+ if (cached != null) {
+ cached.setSearchTime(System.currentTimeMillis() - startTime);
+ return cached;
+ }
+ }
+
+ // 2. 并行搜索各类型
+ List allResults = new ArrayList<>();
+ Map typeCounts = new HashMap<>();
+
+ // 获取当前用户信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+
+ // 确定要搜索的类型
+ List searchTypes = request.getTypes();
+ if (searchTypes == null || searchTypes.isEmpty()) {
+ searchTypes = Arrays.asList("zone_project", "resource", "member");
+ }
+
+ // 搜索Zone项目
+ if (searchTypes.contains("zone_project")) {
+ List zoneProjectResults = searchZoneProjects(request);
+ allResults.addAll(zoneProjectResults);
+ typeCounts.put("zone_project", (long) zoneProjectResults.size());
+ }
+
+ // 搜索Zone资源
+ if (searchTypes.contains("resource")) {
+ List resourceResults = searchResources(request);
+ allResults.addAll(resourceResults);
+ typeCounts.put("resource", (long) resourceResults.size());
+ }
+
+ // 3. 按相关度评分排序
+ allResults.sort((a, b) -> {
+ if (b.getScore() != null && a.getScore() != null) {
+ return b.getScore().compareTo(a.getScore());
+ }
+ return 0;
+ });
+
+ // 4. 分页
+ int total = allResults.size();
+ int start = (request.getPageNum() - 1) * request.getPageSize();
+ int end = Math.min(start + request.getPageSize(), total);
+ List pagedResults = start < total ?
+ allResults.subList(start, end) : new ArrayList<>();
+
+ // 5. 构建响应
+ GlobalSearchResponse response = new GlobalSearchResponse();
+ response.setTotal((long) total);
+ response.setResults(pagedResults);
+ response.setTypeCounts(typeCounts);
+ response.setKeyword(request.getKeyword());
+ response.setPageNum(request.getPageNum());
+ response.setPageSize(request.getPageSize());
+ response.setSearchTime(System.currentTimeMillis() - startTime);
+
+ // 6. 缓存结果(仅第一页)
+ if (request.getPageNum() == 1) {
+ String cacheKey = buildCacheKey(request);
+ redisService.setCacheObject(
+ SEARCH_CACHE_PREFIX + cacheKey,
+ response,
+ CACHE_EXPIRE_SECONDS,
+ TimeUnit.SECONDS);
+ }
+
+ // 7. 异步记录搜索日志
+ recordSearchLog(request, response, loginUser);
+
+ return response;
+ }
+
+ /**
+ * 异步记录搜索日志
+ */
+ @Async
+ public void recordSearchLog(GlobalSearchRequest request, GlobalSearchResponse response, LoginUser loginUser) {
+ try {
+ logger.info("全局搜索 - 关键词: {}, 用户ID: {}, 耗时: {}ms, 结果数: {}, 搜索类型: {}, 专区ID: {}",
+ request.getKeyword(),
+ loginUser != null ? loginUser.getUserId() : null,
+ response.getSearchTime(),
+ response.getTotal(),
+ request.getTypes() != null ? String.join(",", request.getTypes()) : null,
+ request.getZoneId()
+ );
+ } catch (Exception e) {
+ logger.error("记录搜索日志失败: {}", e.getMessage());
+ }
+ }
+
+ /**
+ * 搜索Zone项目
+ */
+ private List searchZoneProjects(GlobalSearchRequest request) {
+ List results = new ArrayList<>();
+ try {
+ List projects = zoneProjectMapper.globalSearch(
+ request.getKeyword(),
+ request.getZoneId(),
+ (request.getPageNum() - 1) * request.getPageSize(),
+ request.getPageSize()
+ );
+
+ for (ZoneProject project : projects) {
+ GlobalSearchResult result = new GlobalSearchResult();
+ result.setType("zone_project");
+ result.setId(project.getId());
+ result.setTitle(project.getName());
+ result.setContent(project.getFullName());
+ result.setDeptId(project.getDeptId());
+ result.setZoneId(project.getZoneId());
+ result.setCreateTime(project.getCreateTime());
+ result.setScore(1.0);
+ results.add(result);
+ }
+ } catch (Exception e) {
+ System.err.println("搜索Zone项目失败: " + e.getMessage());
+ }
+ return results;
+ }
+
+ /**
+ * 搜索Zone资源
+ */
+ private List searchResources(GlobalSearchRequest request) {
+ List results = new ArrayList<>();
+ try {
+ List resources = zoneResourceMapper.globalSearch(
+ request.getKeyword(),
+ request.getZoneId(),
+ (request.getPageNum() - 1) * request.getPageSize(),
+ request.getPageSize()
+ );
+
+ for (ZoneResource resource : resources) {
+ GlobalSearchResult result = new GlobalSearchResult();
+ result.setType("resource");
+ result.setId(resource.getId());
+ result.setTitle(resource.getName());
+ result.setContent(resource.getSummary());
+ result.setDeptId(resource.getDeptId());
+ result.setZoneId(resource.getZoneId());
+ result.setCreateTime(resource.getCreateTime());
+ result.setScore(1.0);
+
+ // 查询并过滤匹配的附件
+ if (StringUtils.isNotEmpty(resource.getFileIds())) {
+ try {
+ R> fileResponse = remoteFileService.getFileList(resource.getFileIds());
+ if (fileResponse != null && fileResponse.getCode() == 200 && fileResponse.getData() != null) {
+ List
and zp.is_homepage = #{isHomepage}
@@ -164,8 +170,14 @@
and zp.audit_status != '2'
- and zp.audit_status = #{auditStatus}
- and zp.audit_status = '1'
+
+
+ and zp.audit_status = #{auditStatus}
+
+
+ and zp.audit_status = '1'
+
+
From d882970a32917ecd376de5c4fb07140ae572de31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Wed, 29 Apr 2026 10:54:49 +0800
Subject: [PATCH 51/59] =?UTF-8?q?fix(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA)?=
=?UTF-8?q?:=20=E5=B9=B3=E5=8F=B0=E7=AE=A1=E7=90=86=E5=91=98=E6=B2=A1?=
=?UTF-8?q?=E6=9C=89=E5=89=8D=E5=8F=B0=E8=AE=BF=E9=97=AE=E6=9D=83=E9=99=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../microservices/zone/detail/domain/vo/ZoneFrontRoleVo.java | 3 +++
.../zone/detail/service/impl/ZoneDetailServiceImpl.java | 3 +++
2 files changed, 6 insertions(+)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneFrontRoleVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneFrontRoleVo.java
index 88f74bb9d..c9fb9f985 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneFrontRoleVo.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneFrontRoleVo.java
@@ -23,6 +23,9 @@ public class ZoneFrontRoleVo {
@ApiModelProperty(value = "项目管理访问地址")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String projectManageUrl;
+ @ApiModelProperty(value = "用户访问组织Id")
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private Long deptId;
}
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
index 6b2ae5649..b3840a2a4 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
@@ -663,6 +663,7 @@ public class ZoneDetailServiceImpl implements IZoneDetailService {
zoneFrontRoleVo.setResourceManageUrl(resourceManageUrl + parentDeptUserIdentify.getDeptId());
zoneFrontRoleVo.setDocManageUrl(docManageUrl + parentDeptUserIdentify.getDeptId());
zoneFrontRoleVo.setProjectManageUrl(projectManageUrl + parentDeptUserIdentify.getDeptId());
+ zoneFrontRoleVo.setDeptId(parentDeptUserIdentify.getDeptId());
} else {
zoneFrontRoleVo.setRole(ZoneConstants.FRONT_ROLE_MEMBER);
}
@@ -671,6 +672,7 @@ public class ZoneDetailServiceImpl implements IZoneDetailService {
zoneFrontRoleVo.setResourceManageUrl(resourceManageUrl + currentUserIdentify.getDeptId());
zoneFrontRoleVo.setDocManageUrl(docManageUrl + currentUserIdentify.getDeptId());
zoneFrontRoleVo.setProjectManageUrl(projectManageUrl + currentUserIdentify.getDeptId());
+ zoneFrontRoleVo.setDeptId(currentUserIdentify.getDeptId());
}
return zoneFrontRoleVo;
} else if (parentDeptUserIdentify != null) {
@@ -678,6 +680,7 @@ public class ZoneDetailServiceImpl implements IZoneDetailService {
zoneFrontRoleVo.setResourceManageUrl(resourceManageUrl + parentDeptUserIdentify.getDeptId());
zoneFrontRoleVo.setDocManageUrl(docManageUrl + parentDeptUserIdentify.getDeptId());
zoneFrontRoleVo.setProjectManageUrl(projectManageUrl + parentDeptUserIdentify.getDeptId());
+ zoneFrontRoleVo.setDeptId(parentDeptUserIdentify.getDeptId());
return zoneFrontRoleVo;
}
}
From fcfd415fdcc088d84e798a2b727bc32834a15218 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Wed, 29 Apr 2026 11:05:45 +0800
Subject: [PATCH 52/59] =?UTF-8?q?fix(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA)?=
=?UTF-8?q?:=20=E5=B9=B3=E5=8F=B0=E7=AE=A1=E7=90=86=E5=91=98=E6=B2=A1?=
=?UTF-8?q?=E6=9C=89=E5=89=8D=E5=8F=B0=E8=AE=BF=E9=97=AE=E6=9D=83=E9=99=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../zone/detail/service/impl/ZoneDetailServiceImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
index b3840a2a4..eba425b62 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
@@ -666,6 +666,7 @@ public class ZoneDetailServiceImpl implements IZoneDetailService {
zoneFrontRoleVo.setDeptId(parentDeptUserIdentify.getDeptId());
} else {
zoneFrontRoleVo.setRole(ZoneConstants.FRONT_ROLE_MEMBER);
+ zoneFrontRoleVo.setDeptId(currentUserIdentify.getDeptId());
}
} else {
zoneFrontRoleVo.setRole(ZoneConstants.FRONT_ROLE_MANAGER);
From f1bb7f7b3f1b3d0ac08ece6c4007e19c61b5d39e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Wed, 29 Apr 2026 11:22:44 +0800
Subject: [PATCH 53/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E8=8E=B7=E5=8F=96=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E6=97=B6=EF=BC=8C=E8=8B=A5=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E4=B8=BA=E9=95=9C=E5=83=8F=E9=A1=B9=E7=9B=AE=E5=88=99=E8=BF=94?=
=?UTF-8?q?=E5=9B=9E=E9=A1=B9=E7=9B=AE=E7=9A=84=E9=95=9C=E5=83=8Fowner?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/ZoneProjectServiceImpl.java | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
index 36e65e7ac..cfc6463fa 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
@@ -214,6 +214,24 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
}
}
+ private static String extractFirstPathSegment(String url) {
+ if (url == null || url.isEmpty()) return null;
+
+ // 找到协议后的第一个 '/' 的位置(路径开始)
+ int schemeSep = url.indexOf("://");
+ if (schemeSep == -1) return null;
+
+ int hostStart = schemeSep + 3;
+ int pathStart = url.indexOf('/', hostStart);
+ if (pathStart == -1) return null; // 没有路径
+
+ // 找到下一个 '/' 或结尾
+ int pathEnd = url.indexOf('/', pathStart + 1);
+ if (pathEnd == -1) pathEnd = url.length();
+
+ return url.substring(pathStart + 1, pathEnd);
+ }
+
private ZoneProjectDataVo zoneProjectToZoneProjectDataVo(ZoneProject zoneProject, JSONObject gitLinkProject) {
//每次从GitLink查询项目时自动更新项目名称和项目标识
updateProjectNameAndFullName(gitLinkProject, zoneProject);
@@ -233,6 +251,11 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
projectKeyName.put("name", "项目名称");
projectPropertiesVo.put("fullName", author.getString("login") + "/" + gitLinkProject.getString("identifier"));
projectKeyName.put("fullName", "项目完整地址");
+ projectPropertiesVo.put("fromOwner", author.getString("login"));
+ }
+ String mirrorUrl = gitLinkProject.getString("mirror_url");
+ if (StringUtils.isNotEmpty(mirrorUrl)) {
+ projectPropertiesVo.put("fromOwner", extractFirstPathSegment(mirrorUrl));
}
String description = gitLinkProject.getString("description");
projectPropertiesVo.put("description", description);
From fc6d67b1eda3e7f317e3d38bc0ae451a2b7cbee5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Thu, 7 May 2026 11:21:46 +0800
Subject: [PATCH 54/59] =?UTF-8?q?fix(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA)?=
=?UTF-8?q?:=20=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88=E5=88=87=E6=8D=A2?=
=?UTF-8?q?=E6=98=AF=E5=90=A6=E9=9C=80=E8=A6=81=E5=AE=A1=E6=A0=B8=E6=97=B6?=
=?UTF-8?q?=EF=BC=8C=E9=9C=80=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E5=AD=98?=
=?UTF-8?q?=E5=9C=A8=E6=9C=AA=E5=AE=A1=E6=A0=B8=E9=A1=B9=E7=9B=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../detail/service/impl/ZoneDetailServiceImpl.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
index eba425b62..5ba3e376b 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java
@@ -280,6 +280,16 @@ public class ZoneDetailServiceImpl implements IZoneDetailService {
throw new ServiceException("当前专区下存在待审核资源,需完成审核后才能将专区资源修改为不需要审核(专区名称[%s],待审核资源数量[%d])", oldZoneDetail.getName(), notAuditCount);
}
}
+ // 专区项目聚合审核设置由需要审核修改为不需要审核时,需检查当前专区下是否存在待审核项目聚合,如果存在,需要处理完成后再修改配置
+ if (zoneDetail.getProjectNeedAudit() != null && (0 == zoneDetail.getProjectNeedAudit())) {
+ ZoneProjectSearchVo zoneProjectSearchVo = new ZoneProjectSearchVo();
+ zoneProjectSearchVo.setZoneId(zoneDetail.getId());
+ zoneProjectSearchVo.setAuditStatus(ZoneConstants.PROJECT_NOT_AUDIT);
+ Integer notAuditCount = zoneProjectMapper.selectZoneProjectListCount(zoneProjectSearchVo);
+ if (notAuditCount > 0) {
+ throw new ServiceException("当前专区下存在待审核项目聚合,需完成审核后才能将专区项目聚合修改为不需要审核(专区名称[%s],待审核项目聚合数量[%d])", oldZoneDetail.getName(), notAuditCount);
+ }
+ }
// 专区资讯审核设置由需要审核修改为不需要审核时,需检查当前专区下是否存在待审核资讯,如果存在,需要处理完成后再修改配置
if (zoneDetail.getDocNeedAudit() != null && (0 == zoneDetail.getDocNeedAudit())) {
Long notAuditCount = FeignUtils.getReturnData(
From c734737e32121574e68467a057ef96f9b805bf43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Thu, 7 May 2026 13:58:40 +0800
Subject: [PATCH 55/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E4=B8=93=E5=8C=BA=E9=A1=B9=E7=9B=AE=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96Gitlink=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E6=97=B6=E5=BD=93=E9=A1=B9=E7=9B=AE=E5=B7=B2=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=88=99=E8=BF=94=E5=9B=9E=E9=A1=B9=E7=9B=AE=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E7=8A=B6=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/ZoneProjectServiceImpl.java | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
index cfc6463fa..abf98b7d7 100644
--- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/project/service/impl/ZoneProjectServiceImpl.java
@@ -813,11 +813,21 @@ public class ZoneProjectServiceImpl implements IZoneProjectService {
List gitlinkProjectList = new ArrayList<>();
for (JSONObject gitlinkProject : list) {
if (zoneId != null) {
- boolean isChoose = zoneProjectList.stream().anyMatch(x -> x.getGitlinkProjectId().equals(gitlinkProject.getLong("id")));
- if (isChoose) {
- gitlinkProject.put("isChoose", true);
- } else {
+ ZoneProject isChooseProject = zoneProjectList
+ .stream()
+ .filter(x -> x.getGitlinkProjectId().equals(gitlinkProject.getLong("id")))
+ .findFirst()
+ .orElse(null);
+ if (isChooseProject == null) {
gitlinkProject.put("isChoose", false);
+ gitlinkProject.put("isAudited", false);
+ } else {
+ gitlinkProject.put("isChoose", true);
+ if (isChooseProject.getAuditStatus().equals(ZoneConstants.PROJECT_NOT_AUDIT)) {
+ gitlinkProject.put("isAudited", false);
+ } else {
+ gitlinkProject.put("isAudited", true);
+ }
}
}
gitlinkProjectList.add(gitlinkProject);
From c61346b4d98a03099d04f88b1f08a23d19194124 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Thu, 7 May 2026 17:06:26 +0800
Subject: [PATCH 56/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=BD=93=E7=94=A8=E6=88=B7=E8=A2=AB=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E4=B8=BA=E4=B8=80=E7=BA=A7=E7=BB=84=E7=BB=87=E6=88=96=E8=80=85?=
=?UTF-8?q?=E4=BA=8C=E7=BA=A7=E7=BB=84=E7=BB=87=E7=9A=84=E5=B9=B3=E5=8F=B0?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E6=97=B6=EF=BC=8C=E5=B0=86=E8=AF=A5?=
=?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E5=88=B0=E7=89=B9=E8=89=B2?=
=?UTF-8?q?=E4=B8=93=E5=8C=BA=E5=AF=B9=E5=BA=94=E7=BB=84=E7=BB=87=E7=9A=84?=
=?UTF-8?q?Owner=E5=9B=A2=E9=98=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../system/api/RemoteCmsService.java | 4 +++
.../api/factory/RemoteCmsFallbackFactory.java | 5 +++
.../controller/CmsProjectController.java | 10 ++++++
.../domain/GitlinkOrganizationTeamVo.java | 21 +++++++++++
.../project/service/ICmsProjectService.java | 2 ++
.../service/impl/CmsProjectServiceImpl.java | 35 +++++++++++++++++++
.../cms/utils/CmsGitLinkRequestUrl.java | 11 ++++++
.../impl/SysUserDeptRoleServiceImpl.java | 14 ++++++--
8 files changed, 99 insertions(+), 3 deletions(-)
create mode 100644 microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/domain/GitlinkOrganizationTeamVo.java
diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteCmsService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteCmsService.java
index 0d68a77d0..0fde0212b 100644
--- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteCmsService.java
+++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteCmsService.java
@@ -158,4 +158,8 @@ public interface RemoteCmsService {
@GetMapping("/doc/getJSONObject/{cmsDocId}")
R selectCmsDocJSONObjectById(@PathVariable(value = "cmsDocId") Long cmsDocId
, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+ @PutMapping("/project/changeOrgRole/user/{userId}/operate/{operate}")
+ R changeUserOrgRole(@PathVariable("userId") Long userId, @PathVariable("operate") int operate
+ , @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteCmsFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteCmsFallbackFactory.java
index aa9763708..19fc136ef 100644
--- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteCmsFallbackFactory.java
+++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteCmsFallbackFactory.java
@@ -83,6 +83,11 @@ public class RemoteCmsFallbackFactory implements FallbackFactory selectCmsDocJSONObjectById(Long cmsDocId, String source) {
return R.fail("获取文章JSON对象失败:" + throwable.getMessage());
}
+
+ @Override
+ public R changeUserOrgRole(Long userId, int operate, String source) {
+ return R.fail("更新组织权限失败:" + throwable.getMessage());
+ }
};
}
}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/controller/CmsProjectController.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/controller/CmsProjectController.java
index 08ded4e6f..4b8ed5011 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/controller/CmsProjectController.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/controller/CmsProjectController.java
@@ -49,6 +49,16 @@ public class CmsProjectController extends BaseController {
return R.ok(changeRoleResult);
}
+ @InnerAuth
+ @PutMapping("/changeOrgRole/user/{userId}/operate/{operate}")
+ @ApiOperation(value = "修改用户所在GItLink组织中的权限", hidden = true)
+ public R changeUserOrgRole(@PathVariable("userId") Long userId, @PathVariable("operate") Long operate
+ ) {
+ Boolean changeRoleResult = cmsProjectService.changeUserOrgRole(userId, operate);
+ return R.ok(changeRoleResult);
+ }
+
+
/**
* 查询专区对应项目列表
*/
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/domain/GitlinkOrganizationTeamVo.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/domain/GitlinkOrganizationTeamVo.java
new file mode 100644
index 000000000..d27977c6b
--- /dev/null
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/domain/GitlinkOrganizationTeamVo.java
@@ -0,0 +1,21 @@
+package com.microservices.cms.project.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author otto
+ */
+@Data
+public class GitlinkOrganizationTeamVo implements Serializable {
+ @ApiModelProperty(value = "团队权限")
+ private String authorize;
+ @ApiModelProperty(value = "团队Id")
+ private Long id;
+ @ApiModelProperty(value = "团队名称")
+ private String name;
+ @ApiModelProperty(value = "团队昵称")
+ private String nickname;
+}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/ICmsProjectService.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/ICmsProjectService.java
index ce095be0e..01088a77a 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/ICmsProjectService.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/ICmsProjectService.java
@@ -82,4 +82,6 @@ public interface ICmsProjectService {
boolean initZoneCmsProjectByDept(Long deptId);
CmsProject selectCmsProjectByDeptIdAndNoException(Long deptId);
+
+ Boolean changeUserOrgRole(Long userId, Long operate);
}
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java
index 04d78d57d..f26494088 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java
@@ -6,6 +6,7 @@ import com.microservices.cms.doc.domain.*;
import com.microservices.cms.doc.service.ICmsAsyncService;
import com.microservices.cms.doc.service.ICmsDocService;
import com.microservices.cms.project.domain.CmsProject;
+import com.microservices.cms.project.domain.GitlinkOrganizationTeamVo;
import com.microservices.cms.project.mapper.CmsProjectMapper;
import com.microservices.cms.project.service.ICmsProjectService;
import com.microservices.cms.utils.CmsConstants;
@@ -320,6 +321,40 @@ public class CmsProjectServiceImpl implements ICmsProjectService {
return cmsProjectMapper.selectCmsProjectByDeptId(deptId);
}
+ @Override
+ public Boolean changeUserOrgRole(Long userId, Long operate) {
+ Long gitlinkOrgId = getOrganizationId();
+ SysUser sysUser = FeignUtils.getReturnData(remoteUserService.getSysUserByUserId(userId, SecurityConstants.INNER));
+ if (sysUser == null) {
+ return false;
+ }
+ List gitlinkOrganizationTeamVoList = gitLinkRequestHelper.getAllDataByPage(
+ CmsGitLinkRequestUrl.TEAMS_BY_ORGANIZATION_URL(gitlinkOrgId), "teams", GitlinkOrganizationTeamVo.class
+ );
+ GitlinkOrganizationTeamVo ownerTeam = gitlinkOrganizationTeamVoList.stream().filter(x -> "owner".equals(x.getAuthorize())).findFirst().orElse(null);
+ if (ownerTeam == null) {
+ return false;
+ }
+ if (operate == 1) {
+ JSONObject addUserToTeam = new JSONObject();
+ addUserToTeam.put("username", sysUser.getUserName());
+ gitLinkRequestHelper.doPost(
+ CmsGitLinkRequestUrl.ADD_USER_TO_ORGANIZATION_TEAM(gitLinkOrganization, ownerTeam.getId()), addUserToTeam);
+ }
+ if (operate == 3) {
+ try {
+ gitLinkRequestHelper.doDelete(CmsGitLinkRequestUrl.DELETE_USER_FROM_ORGANIZATION_TEAM(
+ gitLinkOrganization,
+ ownerTeam.getId(),
+ sysUser.getUserName()
+ ));
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ return false;
+ }
+
@Override
public Boolean changeUserRole(Long userId, Long oldDeptId, Long newDeptId, Long oldRoleId, Long newRoleId) {
SysUser sysUser = FeignUtils.getReturnData(remoteUserService.getSysUserByUserId(userId, SecurityConstants.INNER));
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/utils/CmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/utils/CmsGitLinkRequestUrl.java
index c29b9c073..26e8beaa8 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/utils/CmsGitLinkRequestUrl.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/utils/CmsGitLinkRequestUrl.java
@@ -12,6 +12,17 @@ import java.util.Map;
public class CmsGitLinkRequestUrl extends GitLinkRequestUrl {
+ public static GitLinkRequestUrl ADD_USER_TO_ORGANIZATION_TEAM(String orgIdentifier, Long teamId) {
+ return getAdminGitLinkRequestUrl(String.format("/api/organizations/%s/teams/%d/team_users.json", orgIdentifier, teamId));
+ }
+ public static String TEAMS_BY_ORGANIZATION_URL(Long orgId) {
+ return String.format("/api/organizations/%s/teams.json", orgId);
+ }
+
+ public static GitLinkRequestUrl DELETE_USER_FROM_ORGANIZATION_TEAM(String orgIdentifier, Long teamId, String username) {
+ return getAdminGitLinkRequestUrl(String.format("/api/organizations/%s/teams/%d/team_users/%s.json", orgIdentifier, teamId, username));
+ }
+
/**
* 创建项目
*/
diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java
index b18d862c1..074a42b8c 100644
--- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java
+++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java
@@ -124,7 +124,10 @@ public class SysUserDeptRoleServiceImpl implements ISysUserDeptRoleService {
}
for (Long userId : userIds) {
SysUserDeptRole userIdentify = sysUserDeptRoleMapper.selectSysUserDeptRoleByUserIdAndDeptId(userId, deptId);
- updateUserGitLinkRole(userId, deptId, userIdentify.getRoleId(), null, OPERATE_REMOVE);
+ if (userIdentify != null) {
+ updateUserGitLinkRole(userId, deptId, userIdentify.getRoleId(), null, OPERATE_REMOVE);
+ }
+
}
int success = deleteUserIdentityByDeptIdAndUserIds(sysDept, userIds);
for (Long userId : userIds) {
@@ -231,8 +234,13 @@ public class SysUserDeptRoleServiceImpl implements ISysUserDeptRoleService {
if (secondaryDeptIds == null) {
return;
}
-
- if (!secondaryDeptIds.contains(dept.getDeptId())) {
+ SysDept parentDept = sysDeptMapper.selectDeptById(dept.getParentId());
+ if (parentDept == null) {
+ return;
+ }
+ if (dept.getParentId() == 0L || (parentDept.getParentId() == 0L && dept.getDeptType() == CacheConstants.DEPT_TYPE_TSZQ)) {
+ remoteCmsService.changeUserOrgRole(userId, operate, SecurityConstants.INNER);
+ } else if (!secondaryDeptIds.contains(dept.getDeptId())) {
if (secondaryDeptIds.contains(dept.getParentId())) {
switch (dept.getDeptType()) {
case CacheConstants.DEPT_TYPE_TSZQ: {
From f61117526e08f656def2048fc3f05887d18d5930 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Fri, 8 May 2026 11:22:26 +0800
Subject: [PATCH 57/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E8=81=9A=E5=90=88=E5=90=88=E5=B9=B6=E8=AF=B7=E6=B1=82?=
=?UTF-8?q?=E6=97=B6=E5=BA=94=E4=BD=BF=E7=94=A8PR=20Number?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cms/doc/service/impl/CmsAsyncServiceImpl.java | 3 ++-
.../cms/doc/service/impl/CmsDocServiceImpl.java | 6 ++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsAsyncServiceImpl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsAsyncServiceImpl.java
index 0ec0bf09a..f9c4d535b 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsAsyncServiceImpl.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsAsyncServiceImpl.java
@@ -1011,8 +1011,9 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService {
CustomExecutorFactory.threadPoolExecutor.execute(() -> {
for (CmsDoc tmpDoc : tmpDocList) {
//拒绝GitLink合并请求
+ String gitLinkPullRequestNumber = tmpDoc.getAuditPrNumber().split("-")[0];
gitLinkRequestHelper.doPost(
- CmsGitLinkRequestUrl.REFUSE_MERGE_PULL_REQUEST(cmsProject, tmpDoc.getAuditPrNumber()), null);
+ CmsGitLinkRequestUrl.REFUSE_MERGE_PULL_REQUEST(cmsProject, gitLinkPullRequestNumber), null);
gitLinkRequestHelper.doPost(CmsGitLinkRequestUrl.DELETE_BRANCH(cmsProject, tmpDoc.getAuditTmpBranchName()), null);
// 所有删除操作调整为将审核状态设置为已拒绝
tmpDoc.setAuditStatus(DocAuditStatus.AUDIT_FAIL.getAuditCode());
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java
index c6c7f727b..780d83ac3 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java
@@ -455,8 +455,9 @@ public class CmsDocServiceImpl implements ICmsDocService {
}
if (cmsDocAuditVo.getPass() == 0) {
//拒绝GitLink合并请求
+ String gitLinkPullRequestNumber = cmsDoc.getAuditPrNumber().split("-")[0];
JSONObject result = gitLinkRequestHelper.doPost(
- CmsGitLinkRequestUrl.REFUSE_MERGE_PULL_REQUEST(cmsProject, cmsDoc.getAuditPrNumber()), null);
+ CmsGitLinkRequestUrl.REFUSE_MERGE_PULL_REQUEST(cmsProject, gitLinkPullRequestNumber), null);
if (result.containsKey(GitLinkConstants.STATUS_KEY)) {
//2.若拒绝GitLink合并请求操作返回正确的状态值,更新数据库
if (result.getInteger(GitLinkConstants.STATUS_KEY).equals(1)) {
@@ -1341,8 +1342,9 @@ public class CmsDocServiceImpl implements ICmsDocService {
if (DocAuditStatus.TO_BE_AUDIT.getAuditCode().equals(cmsDoc.getAuditStatus())) {
//拒绝GitLink合并请求
+ String gitLinkPullRequestNumber = cmsDoc.getAuditPrNumber().split("-")[0];
gitLinkRequestHelper.doPost(
- CmsGitLinkRequestUrl.REFUSE_MERGE_PULL_REQUEST(cmsProject, cmsDoc.getAuditPrNumber()), null);
+ CmsGitLinkRequestUrl.REFUSE_MERGE_PULL_REQUEST(cmsProject, gitLinkPullRequestNumber), null);
gitLinkRequestHelper.doPost(CmsGitLinkRequestUrl.DELETE_BRANCH(cmsProject, cmsDoc.getAuditTmpBranchName()), null);
return cmsDocMapper.deleteCmsDocById(cmsDoc.getId());
}
From ff38c7a6a00582c361b440a523d572c93b21032c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Fri, 8 May 2026 17:11:26 +0800
Subject: [PATCH 58/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=B0=86=E7=94=A8=E6=88=B7=E4=BB=8EForge=E5=8E=9F?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=B8=AD=E7=A7=BB=E9=99=A4=E6=97=B6,?=
=?UTF-8?q?=E8=8B=A5=E8=B0=83=E7=94=A8Forge=E6=8E=A5=E5=8F=A3=E5=8F=91?=
=?UTF-8?q?=E7=94=9F=E5=BC=82=E5=B8=B8=EF=BC=8C=E4=B8=8D=E6=8A=9B=E5=87=BA?=
=?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=EF=BC=88=E5=9B=A0=E4=B8=BA?=
=?UTF-8?q?=E4=BB=8EForge=E5=8E=9F=E9=A1=B9=E7=9B=AE=E4=B8=AD=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4=E9=9D=9E=E5=BF=85=E8=A6=81=E6=93=8D=E4=BD=9C=EF=BC=8C?=
=?UTF-8?q?=E4=B8=87=E4=B8=80=E5=A4=B1=E8=B4=A5=E4=B8=8D=E5=BA=94=E5=BD=B1?=
=?UTF-8?q?=E5=93=8D=E5=90=8E=E7=BB=AD=E6=B5=81=E7=A8=8B=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cms/project/service/impl/CmsProjectServiceImpl.java | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java
index f26494088..c57be2569 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/project/service/impl/CmsProjectServiceImpl.java
@@ -373,9 +373,10 @@ public class CmsProjectServiceImpl implements ICmsProjectService {
try {
gitLinkRequestHelper.doDelete(CmsGitLinkRequestUrl.REMOVE_USER_FROM_PROJECT(oldCmsProject), requestBody);
} catch (ServiceException e) {
- if (!e.getMessage().contains("用户为组织成员,请到组织下操作")) {
- throw new ServiceException(e.getMessage());
- }
+ log.error("将用户从原项目中移除发生异常:{}", e.getMessage());
+// if (!e.getMessage().contains("用户为组织成员,请到组织下操作")||!e.getMessage().contains("还不是项目成员")) {
+// throw new ServiceException(e.getMessage());
+// }
}
}
//将用户加入新的项目
From da4c832e822afdaf5584084c521fe996ac0317f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AC=A7=E6=B6=9B?= <731554297@qq.com>
Date: Sat, 9 May 2026 08:51:38 +0800
Subject: [PATCH 59/59] =?UTF-8?q?feat(=E8=B6=85=E7=AE=97=E4=B8=93=E5=8C=BA?=
=?UTF-8?q?):=20=E5=B0=86=E7=94=A8=E6=88=B7=E4=BB=8EForge=E5=8E=9F?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=B8=AD=E7=A7=BB=E9=99=A4=E6=97=B6,?=
=?UTF-8?q?=E8=8B=A5=E8=B0=83=E7=94=A8Forge=E6=8E=A5=E5=8F=A3=E5=8F=91?=
=?UTF-8?q?=E7=94=9F=E5=BC=82=E5=B8=B8=EF=BC=8C=E4=B8=8D=E6=8A=9B=E5=87=BA?=
=?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=EF=BC=88=E5=9B=A0=E4=B8=BA?=
=?UTF-8?q?=E4=BB=8EForge=E5=8E=9F=E9=A1=B9=E7=9B=AE=E4=B8=AD=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4=E9=9D=9E=E5=BF=85=E8=A6=81=E6=93=8D=E4=BD=9C=EF=BC=8C?=
=?UTF-8?q?=E4=B8=87=E4=B8=80=E5=A4=B1=E8=B4=A5=E4=B8=8D=E5=BA=94=E5=BD=B1?=
=?UTF-8?q?=E5=93=8D=E5=90=8E=E7=BB=AD=E6=B5=81=E7=A8=8B=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../microservices/cms/doc/service/impl/CmsDocServiceImpl.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java
index 780d83ac3..8adf2ef20 100644
--- a/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java
+++ b/microservices-modules/microservices-modules-cms/src/main/java/com/microservices/cms/doc/service/impl/CmsDocServiceImpl.java
@@ -769,7 +769,7 @@ public class CmsDocServiceImpl implements ICmsDocService {
|| DocAuditStatus.TO_BE_AUDIT.getAuditCode().equals(oldCmsDoc.getAuditStatus())) {
oldCmsDoc.setAuditStatus(DocAuditStatus.TO_BE_AUDIT.getAuditCode());
newDocWithAudit = oldCmsDoc;
- } else
+ } else {
//更新已发布文章
if (oldCmsDoc.getAuditStatus().equals(DocAuditStatus.AUDIT_PASS.getAuditCode())) {
//1.创建一条auditType="update-原文章id",audit_status为2,其余字段与待更新文章一致的新文章数据
@@ -777,6 +777,7 @@ public class CmsDocServiceImpl implements ICmsDocService {
DocAndZoneOperation.OPERATION_UPDATE.getOperationCode() + "-" + id,
DocAuditStatus.TO_BE_AUDIT.getAuditCode());
}
+ }
cmsAsyncService.asyncUpdateBranchAndFileAndCreatePR(newDocWithAudit, cmsDocDto);
return true;
}