Date: Thu, 18 Apr 2024 11:05:27 +0800
Subject: [PATCH 24/44] =?UTF-8?q?feat(REQ-2106):=20=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B1=BB=E5=9E=8B=E6=9E=9A=E4=B8=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/enums/LogOperationTypeEnum.java | 41 +++++++++++++++++++
.../nanopart/api/response/MaterialResp.java | 10 +++++
2 files changed, 51 insertions(+)
create mode 100644 banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
new file mode 100644
index 00000000..28b65ad2
--- /dev/null
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
@@ -0,0 +1,41 @@
+package cn.axzo.nanopart.api.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+
+/**
+ * 素材或广告位操作日志类型
+ *
+ * @author chenwenjian
+ * @version 1.0
+ * @date 2024/4/18 10:39
+ */
+@Getter
+@AllArgsConstructor
+public enum LogOperationTypeEnum {
+
+ CREATE("create", "新增"),
+
+ UPDATE("update", "编辑"),
+
+ DELETE("delete", "删除"),
+
+ UPDATE_STATUS("updateStatus", "更新状态");
+
+ private final String type;
+
+ private final String desc;
+
+ public static LogOperationTypeEnum getLogOperationType(String type) {
+ if (StringUtils.isEmpty(type)) {
+ return null;
+ }
+ return Arrays.stream(values())
+ .filter(item -> item.type.equals(type))
+ .findFirst()
+ .orElse(null);
+ }
+}
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/MaterialResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/MaterialResp.java
index 20b21fee..7e026a24 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/MaterialResp.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/MaterialResp.java
@@ -108,11 +108,21 @@ public class MaterialResp extends PageMaterialResp {
*/
private Long createBy;
+ /**
+ * 创建人姓名
+ */
+ private String createByName;
+
/**
* 更新人
*/
private Long updateBy;
+ /**
+ * 更新人姓名
+ */
+ private String updateByName;
+
/**
* 所属终端,取值:CMS:安心筑CMS,CM,CMP:安心筑工人端APP,安心筑管理端APP
*
From 4b9d1d00711cae4a898f0d9516e7e4291688321b Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Thu, 18 Apr 2024 11:08:29 +0800
Subject: [PATCH 25/44] =?UTF-8?q?feat(REQ-2106):=20=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B1=BB=E5=9E=8B=E6=9E=9A=E4=B8=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
index 28b65ad2..907cff86 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
@@ -17,13 +17,13 @@ import java.util.Arrays;
@AllArgsConstructor
public enum LogOperationTypeEnum {
- CREATE("create", "新增"),
+ CREATE("CREATE", "新增"),
- UPDATE("update", "编辑"),
+ UPDATE("UPDATE", "编辑"),
- DELETE("delete", "删除"),
+ DELETE("DELETE", "删除"),
- UPDATE_STATUS("updateStatus", "更新状态");
+ UPDATE_STATUS("UPDATE_STATUS", "更新状态");
private final String type;
From f6bd654b591bf40cabb4c0a3d967dfafd7a690b0 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Thu, 18 Apr 2024 11:51:45 +0800
Subject: [PATCH 26/44] =?UTF-8?q?feat(REQ-2106):=20=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B1=BB=E5=9E=8B=E6=9E=9A=E4=B8=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
index 907cff86..28b65ad2 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/LogOperationTypeEnum.java
@@ -17,13 +17,13 @@ import java.util.Arrays;
@AllArgsConstructor
public enum LogOperationTypeEnum {
- CREATE("CREATE", "新增"),
+ CREATE("create", "新增"),
- UPDATE("UPDATE", "编辑"),
+ UPDATE("update", "编辑"),
- DELETE("DELETE", "删除"),
+ DELETE("delete", "删除"),
- UPDATE_STATUS("UPDATE_STATUS", "更新状态");
+ UPDATE_STATUS("updateStatus", "更新状态");
private final String type;
From c0f75fbb52aa973aa13a15bb42b3669e245ed8bd Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Thu, 18 Apr 2024 14:08:00 +0800
Subject: [PATCH 27/44] =?UTF-8?q?feat(REQ-2106):=20=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=E5=86=85=E5=AE=B9=E6=8B=BC=E6=8E=A5=E8=B0=83?=
=?UTF-8?q?=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../response/PageBannerOperationLogResp.java | 7 +++++-
.../impl/BannerOperationLogServiceImpl.java | 22 +------------------
2 files changed, 7 insertions(+), 22 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageBannerOperationLogResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageBannerOperationLogResp.java
index 4bdafede..79e1a00a 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageBannerOperationLogResp.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageBannerOperationLogResp.java
@@ -42,7 +42,12 @@ public class PageBannerOperationLogResp {
/**
* 操作人
*/
- private String updateBy;
+ private Long updateBy;
+
+ /**
+ * 操作人名称
+ */
+ private String updateByName;
/**
* 操作类型
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java
index 74564d62..cea28cb0 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java
@@ -1,14 +1,10 @@
package cn.axzo.nanopart.server.service.impl;
-import cn.axzo.basics.common.BeanMapper;
-import cn.axzo.basics.profiles.dto.basic.BasicDto;
-import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq;
import cn.axzo.nanopart.api.request.PageBannerOperationLogReq;
import cn.axzo.nanopart.api.response.PageBannerOperationLogResp;
import cn.axzo.nanopart.server.domain.BannerOperationLog;
import cn.axzo.nanopart.server.mapper.BannerOperationLogDao;
-import cn.axzo.nanopart.server.rpc.ProfileGateway;
import cn.axzo.nanopart.server.service.BannerOperationLogService;
import cn.axzo.pokonyan.dao.converter.PageConverter;
import cn.hutool.core.bean.BeanUtil;
@@ -19,11 +15,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import java.util.List;
-import java.util.Map;
import java.util.Objects;
-import java.util.function.Function;
-import java.util.stream.Collectors;
/**
* @author chenwenjian
@@ -35,8 +27,6 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class BannerOperationLogServiceImpl extends ServiceImpl implements BannerOperationLogService {
- private final ProfileGateway profileGateway;
-
@Override
public Long create(CreateBannerOperationLogReq req) {
BannerOperationLog bannerOperationLog = BeanUtil.copyProperties(req, BannerOperationLog.class);
@@ -57,17 +47,7 @@ public class BannerOperationLogServiceImpl extends ServiceImpl();
}
- List personIds = logPage.getRecords().stream()
- .map(BannerOperationLog::getUpdateBy)
- .distinct()
- .collect(Collectors.toList());
-
- List profiles = profileGateway.getProfiles(personIds);
- Map personProfileDtoMap = profiles.stream().collect(Collectors.toMap(BasicDto::getId, Function.identity()));
- return PageConverter.convert(logPage, record -> BeanMapper.copyBean(record, PageBannerOperationLogResp.class, (source, target) -> {
- PersonProfileDto person = personProfileDtoMap.get(source.getUpdateBy());
- target.setUpdateBy(Objects.isNull(person.getRealName())? "-" : person.getRealName());
- }));
+ return PageConverter.convert(logPage, record -> BeanUtil.copyProperties(record, PageBannerOperationLogResp.class));
}
/**
From f581a72e8406de44de769a500431f5439a4e1990 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Thu, 18 Apr 2024 14:56:22 +0800
Subject: [PATCH 28/44] =?UTF-8?q?feat(REQ-2106):=20=E5=88=9B=E5=BB=BA?=
=?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=B9=BF=E5=91=8A=E4=BD=8D=E5=AD=97?=
=?UTF-8?q?=E6=AE=B5=E6=A0=A1=E9=AA=8C=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java | 2 --
.../main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java | 1 -
2 files changed, 3 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java
index ee205877..284a670a 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java
@@ -62,7 +62,6 @@ public class CreateBannerReq {
* 轮播状态,取值:OPENED, CLOSED,默认为ClOSED
* {@link CarouselStatusEnum}
*/
- @NotNull(message = "轮播状态不能为空")
private CarouselStatusEnum carouselStatus;
/**
@@ -70,7 +69,6 @@ public class CreateBannerReq {
*/
@Min(value = 1, message = "轮播上线数量不能小于1")
@Max(value = 6, message = "轮播上限数量不能超过6")
- @NotNull(message = "轮播上限数量不能为空")
private int maxCarouselLimit;
/**
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java
index d74c0108..acb7d602 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java
@@ -45,7 +45,6 @@ public class UpdateBannerReq {
* 轮播状态,取值:OPENED, CLOSED,默认为ClOSED
* {@link CarouselStatusEnum}
*/
- @NotNull(message = "轮播状态不能为空")
private CarouselStatusEnum carouselStatus;
/**
From 3b6edd3c02635706b478267d98a0109bf49a46b7 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Thu, 18 Apr 2024 16:04:53 +0800
Subject: [PATCH 29/44] =?UTF-8?q?feat(REQ-2106):=20=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E5=8F=B7=E6=A0=A1=E9=AA=8C=E8=B0=83=E6=95=B4=EF=BC=8C=E5=B9=BF?=
=?UTF-8?q?=E5=91=8A=E4=BD=8D=E6=8E=92=E5=BA=8F=E8=A7=84=E5=88=99=E8=B0=83?=
=?UTF-8?q?=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nanopart/server/common/ApplicationVersionValidator.java | 5 ++++-
.../axzo/nanopart/server/service/impl/BannerServiceImpl.java | 2 ++
.../nanopart/server/service/impl/MaterialServiceImpl.java | 4 ++--
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/common/ApplicationVersionValidator.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/common/ApplicationVersionValidator.java
index 45007398..e60ecd36 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/common/ApplicationVersionValidator.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/common/ApplicationVersionValidator.java
@@ -2,6 +2,7 @@ package cn.axzo.nanopart.server.common;
import cn.axzo.framework.domain.ServiceException;
import cn.axzo.nanopart.api.constant.NanopartConstant;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
/**
@@ -12,6 +13,7 @@ import org.apache.commons.lang3.StringUtils;
* @version 1.0
* @date 2024/4/17 20:21
*/
+@Slf4j
public class ApplicationVersionValidator {
/**
@@ -21,7 +23,8 @@ public class ApplicationVersionValidator {
*/
public static void checkVersionSimple(String version) {
if (StringUtils.isNotBlank(version)) {
- if (!NanopartConstant.VERSION_SIMPLE_PATTERN.matches(version)) {
+ if (!version.matches(NanopartConstant.VERSION_SIMPLE_PATTERN)) {
+ log.warn("版本号校验不通过,version = {}",version);
throw new ServiceException("请输入正确的版本号");
}
}
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java
index 4ab77627..45c3c7d2 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java
@@ -278,6 +278,8 @@ public class BannerServiceImpl extends ServiceImpl implements
.eq(Objects.nonNull(req.getTerminal()), Banner::getTerminal, req.getTerminal())
.eq(Objects.nonNull(req.getStatus()), Banner::getStatus, req.getStatus())
.eq(Banner::getIsDelete, 0)
+ .orderByDesc(Banner::getStatus)
+ .orderByDesc(Banner::getCreateAt)
.orderByAsc(Banner::getCode);
}
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
index 52f1595a..69877acf 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
@@ -347,8 +347,8 @@ public class MaterialServiceImpl extends ServiceImpl impl
.eq(StringUtils.isNotEmpty(req.getBannerCode()), Material::getBannerCode, req.getBannerCode())
.like(StringUtils.isNotEmpty(req.getName()), Material::getName, req.getName())
.eq(Objects.nonNull(req.getStatus()), Material::getStatus, req.getStatus())
- .le(Objects.nonNull(req.getStartTime()), Material::getStartTime, req.getStartTime())
- .ge(Objects.nonNull(req.getEndTime()), Material::getEndTime, req.getEndTime())
+ .ge(Objects.nonNull(req.getStartTime()), Material::getStartTime, req.getStartTime())
+ .le(Objects.nonNull(req.getEndTime()), Material::getEndTime, req.getEndTime())
.orderByDesc(Material::getStatus)
.orderByAsc(Material::getPriority)
.orderByDesc(Material::getCreateAt);
From 6a3dd0f82f11e55070342e4c789a15b0b972f9ae Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Fri, 19 Apr 2024 11:46:12 +0800
Subject: [PATCH 30/44] =?UTF-8?q?feat(REQ-2106):=20=E6=8A=95=E6=94=BE?=
=?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nanopart/api/enums/MaterialTargetUserTypeEnum.java | 5 +++++
.../server/service/impl/MaterialServiceImpl.java | 9 ++++++---
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
index 4be9226b..fe0b1991 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
@@ -1,8 +1,10 @@
package cn.axzo.nanopart.api.enums;
import cn.axzo.nanopart.api.dto.JoinedWorkspaceOuJob;
+import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -18,6 +20,7 @@ import java.util.stream.Collectors;
* @version 1.0
* @date 2024/4/9 16:46
*/
+@Slf4j
@Getter
@AllArgsConstructor
public enum MaterialTargetUserTypeEnum {
@@ -34,6 +37,7 @@ public enum MaterialTargetUserTypeEnum {
public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
// 若workspaceIds和jobCodes都为空,则表示不限制,否则需要满足配置的workspaceIds和jobCodes与用户加入的workspaceJob的key,value均存在交集
Map> workspaceJobMap = workspaceOuJob.getWorkspaceJobMap();
+ log.info("投放项目部:{},投放岗位岗位:{},用户加入项目部及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds),JSONUtil.toJsonStr(jobCodes),JSONUtil.toJsonStr(workspaceJobMap));
return CollectionUtils.isEmpty(workspaceIds) ? CollectionUtils.isEmpty(jobCodes) || jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().flatMap(List::stream).distinct().collect(Collectors.toList()).contains(jobCode))
: workspaceIds.stream().anyMatch(workspaceId -> workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
}
@@ -44,6 +48,7 @@ public enum MaterialTargetUserTypeEnum {
public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
// 若workspaceIds和jobCodes都为空,则表示不限制,否则需要满足配置的workspaceIds和jobCodes与用户加入的workspaceJob的key,value均存在交集
Map> ouJobMap = workspaceOuJob.getOuJobMap();
+ log.info("投放单位:{},投放岗位岗位:{},用户加入单位及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds),JSONUtil.toJsonStr(jobCodes),JSONUtil.toJsonStr(ouJobMap));
return CollectionUtils.isEmpty(ouIds) ? CollectionUtils.isEmpty(jobCodes) || jobCodes.stream().anyMatch(jobCode -> ouJobMap.values().stream().flatMap(List::stream).distinct().collect(Collectors.toList()).contains(jobCode))
: ouIds.stream().anyMatch(ouId -> ouJobMap.get(ouId).stream().anyMatch(jobCodes::contains));
}
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
index 69877acf..ebf91b4f 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
@@ -34,6 +34,7 @@ import cn.axzo.pokonyan.config.redis.RedisClient;
import cn.axzo.pokonyan.dao.converter.PageConverter;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -113,6 +114,7 @@ public class MaterialServiceImpl extends ServiceImpl impl
if (CollectionUtils.isEmpty(materialList)) {
return Collections.emptyList();
}
+ log.info("上架且有效广告位:{}", JSONUtil.toJsonStr(materialList));
// 获取当前登录用户加入的所有项目部,单位及其在项目部或在单位下担任的岗位
JoinedWorkspaceOuJob personJoinedWorkspaceOuJob = getPersonJoinedWorkspaceOuJob(req.getPersonId());
@@ -267,13 +269,13 @@ public class MaterialServiceImpl extends ServiceImpl impl
}
Material material = getById(req.getId());
- if (Objects.isNull(material)){
+ if (Objects.isNull(material)) {
return null;
}
// 获取所属广告位
Banner banner = bannerService.selectByCode(material.getBannerCode());
- if (Objects.isNull(banner)){
- log.warn("广告位不存在,广告位code:{},素材id:{}", material.getBannerCode(),material.getId());
+ if (Objects.isNull(banner)) {
+ log.warn("广告位不存在,广告位code:{},素材id:{}", material.getBannerCode(), material.getId());
throw new ServiceException("数据异常");
}
MaterialResp materialResp = BeanUtil.copyProperties(material, MaterialResp.class);
@@ -321,6 +323,7 @@ public class MaterialServiceImpl extends ServiceImpl impl
String key = buildMaterialDisplayFrequencyKey(m, req.getPersonId());
if (RedisClient.KeyOps.hasKey(key)) {
int frequency = Integer.parseInt(RedisClient.StringOps.get(key));
+ log.info("{}已投放次数:{},素材最大投放次数:{}", req.getPersonId(), frequency, m.getMaxDisplayFrequency());
displayFrequencyFilter = frequency < m.getMaxDisplayFrequency();
if (displayFrequencyFilter) {
// 本次需要投放
From 3b989a0246ee0e2e7f3ffde1a39512b0312f36f9 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Fri, 19 Apr 2024 13:42:50 +0800
Subject: [PATCH 31/44] =?UTF-8?q?feat(REQ-2106):=20=E7=B4=A0=E6=9D=90?=
=?UTF-8?q?=E6=8A=95=E6=94=BE=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nanopart/api/enums/MaterialTargetUserTypeEnum.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
index fe0b1991..d1cdd0a6 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
@@ -37,9 +37,9 @@ public enum MaterialTargetUserTypeEnum {
public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
// 若workspaceIds和jobCodes都为空,则表示不限制,否则需要满足配置的workspaceIds和jobCodes与用户加入的workspaceJob的key,value均存在交集
Map> workspaceJobMap = workspaceOuJob.getWorkspaceJobMap();
- log.info("投放项目部:{},投放岗位岗位:{},用户加入项目部及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds),JSONUtil.toJsonStr(jobCodes),JSONUtil.toJsonStr(workspaceJobMap));
+ log.info("投放项目部:{},投放岗位岗位:{},用户加入项目部及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds), JSONUtil.toJsonStr(jobCodes), JSONUtil.toJsonStr(workspaceJobMap));
return CollectionUtils.isEmpty(workspaceIds) ? CollectionUtils.isEmpty(jobCodes) || jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().flatMap(List::stream).distinct().collect(Collectors.toList()).contains(jobCode))
- : workspaceIds.stream().anyMatch(workspaceId -> workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
+ : workspaceIds.stream().anyMatch(workspaceId -> CollectionUtils.isEmpty(jobCodes) || workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
}
},
@@ -48,9 +48,9 @@ public enum MaterialTargetUserTypeEnum {
public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
// 若workspaceIds和jobCodes都为空,则表示不限制,否则需要满足配置的workspaceIds和jobCodes与用户加入的workspaceJob的key,value均存在交集
Map> ouJobMap = workspaceOuJob.getOuJobMap();
- log.info("投放单位:{},投放岗位岗位:{},用户加入单位及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds),JSONUtil.toJsonStr(jobCodes),JSONUtil.toJsonStr(ouJobMap));
+ log.info("投放单位:{},投放岗位岗位:{},用户加入单位及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds), JSONUtil.toJsonStr(jobCodes), JSONUtil.toJsonStr(ouJobMap));
return CollectionUtils.isEmpty(ouIds) ? CollectionUtils.isEmpty(jobCodes) || jobCodes.stream().anyMatch(jobCode -> ouJobMap.values().stream().flatMap(List::stream).distinct().collect(Collectors.toList()).contains(jobCode))
- : ouIds.stream().anyMatch(ouId -> ouJobMap.get(ouId).stream().anyMatch(jobCodes::contains));
+ : ouIds.stream().anyMatch(ouId -> CollectionUtils.isEmpty(jobCodes) || ouJobMap.get(ouId).stream().anyMatch(jobCodes::contains));
}
};
From 77790ffd3ae07bdb12beaa6db2f93de60d97902d Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Fri, 19 Apr 2024 13:56:48 +0800
Subject: [PATCH 32/44] =?UTF-8?q?feat(REQ-2106):=20=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=97=B6=E9=97=B4=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java
index 45c3c7d2..2b0b8312 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java
@@ -298,6 +298,7 @@ public class BannerServiceImpl extends ServiceImpl implements
.set(Objects.nonNull(req.getCarouselStatus()), Banner::getCarouselStatus, req.getCarouselStatus())
.set(Banner::getMaxCarouselLimit, req.getMaxCarouselLimit())
.set(Banner::getPlayDuration, req.getPlayDuration())
+ .set(Banner::getDisplayTimeType,req.getDisplayTimeType())
.set(Banner::getStartTime, new Time(req.getStartTime()))
.set(Banner::getEndTime, new Time(req.getEndTime()))
.set(Banner::getAspectRatio, JSONUtil.toJsonStr(req.getAspectRatio()))
From f1769ae1150b3b55a28fe3ba0fc04b1b0b3b9da0 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Fri, 19 Apr 2024 14:10:09 +0800
Subject: [PATCH 33/44] =?UTF-8?q?feat(REQ-2106):=20=E5=B9=BF=E5=91=8A?=
=?UTF-8?q?=E4=BD=8D=E8=BD=AE=E6=92=AD=E4=B8=8A=E9=99=90=E5=92=8C=E6=92=AD?=
=?UTF-8?q?=E6=94=BE=E6=97=B6=E9=95=BF=E6=94=B9=E4=B8=BA=E9=9D=9E=E5=BF=85?=
=?UTF-8?q?=E5=A1=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/axzo/nanopart/api/request/CreateBannerReq.java | 6 ------
.../java/cn/axzo/nanopart/api/request/UpdateBannerReq.java | 6 ------
2 files changed, 12 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java
index 284a670a..cfb5944b 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateBannerReq.java
@@ -12,8 +12,6 @@ import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@@ -67,8 +65,6 @@ public class CreateBannerReq {
/**
* 最大轮播数量,限制【1-6】
*/
- @Min(value = 1, message = "轮播上线数量不能小于1")
- @Max(value = 6, message = "轮播上限数量不能超过6")
private int maxCarouselLimit;
/**
@@ -84,8 +80,6 @@ public class CreateBannerReq {
/**
* 播放时长,0表示关闭状态,范围【1-120】s
*/
- @Min(value = 0)
- @Max(value = 120)
private float playDuration;
/**
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java
index acb7d602..c608bc3b 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateBannerReq.java
@@ -11,8 +11,6 @@ import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -50,15 +48,11 @@ public class UpdateBannerReq {
/**
* 最大轮播数量,限制【1-6】
*/
- @Min(value = 1)
- @Max(value = 6)
private int maxCarouselLimit;
/**
* 播放时长,0表示关闭状态,范围【1-120】s
*/
- @Min(value = 0)
- @Max(value = 120)
private float playDuration;
/**
From 58accea0154c4b104fec4b1f8fafe95812e33b59 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Fri, 19 Apr 2024 19:57:53 +0800
Subject: [PATCH 34/44] =?UTF-8?q?feat(REQ-2106):=20=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=A2=91=E6=AC=A1=E6=9E=9A=E4=B8=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nanopart/api/enums/MaterialDisplayFrequencyTypeEnum.java | 1 +
.../java/cn/axzo/nanopart/api/request/CreateMaterialReq.java | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialDisplayFrequencyTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialDisplayFrequencyTypeEnum.java
index 01bbb829..861f4ad1 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialDisplayFrequencyTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialDisplayFrequencyTypeEnum.java
@@ -16,6 +16,7 @@ import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum MaterialDisplayFrequencyTypeEnum {
+ NO_LIMIT("NO_LIMIT", "不限制"),
VALIDITY_PERIOD("VALIDITY_PERIOD", "有效期内"),
EVERY_DAY("EVERY_DAY", "每天"),
EVERY_WEEK("EVERY_WEEK", "每周"),
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
index 1c6056ae..c2988d42 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
@@ -137,7 +137,7 @@ public class CreateMaterialReq {
private List ouIds;
/**
- * 单用户显示频次类型,有效期内:VALIDITY_PERIOD,每天:EVERY_DAY,每周:EVERY_WEEK,每月:EVERY_MONTH
+ * 单用户显示频次类型,不限:NO_LIMIT,有效期内:VALIDITY_PERIOD,每天:EVERY_DAY,每周:EVERY_WEEK,每月:EVERY_MONTH
* {@link MaterialDisplayFrequencyTypeEnum}
*/
@NotNull(message = "单用户显示频次类型不能为空")
From 244bae35fc196cbe1341439ea3d2b098456b486d Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Sat, 20 Apr 2024 16:55:35 +0800
Subject: [PATCH 35/44] =?UTF-8?q?feat(REQ-2106):=20=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/dto/JoinedWorkspaceOuJob.java | 11 ++
.../api/enums/MaterialTargetUserTypeEnum.java | 142 +++++++++++++++---
.../request/ListMaterialByBannerCodeReq.java | 11 +-
.../service/impl/MaterialServiceImpl.java | 40 +++--
4 files changed, 166 insertions(+), 38 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/JoinedWorkspaceOuJob.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/JoinedWorkspaceOuJob.java
index 69b2b1c4..e5677c0b 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/JoinedWorkspaceOuJob.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/JoinedWorkspaceOuJob.java
@@ -16,6 +16,7 @@ import java.util.Map;
@NoArgsConstructor
@AllArgsConstructor
public class JoinedWorkspaceOuJob {
+
/**
* 加入的项目部及在该项目部下担任的所有岗位
*/
@@ -26,4 +27,14 @@ public class JoinedWorkspaceOuJob {
*/
private Map> ouJobMap;
+ /**
+ * 加入的单位及在该单位加入的项目部
+ */
+ private Map> ouWorkspaceMap;
+
+ /**
+ * 加入的项目部及在该项目部加入的单位
+ */
+ private Map> workspaceOuMap;
+
}
\ No newline at end of file
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
index d1cdd0a6..030f176c 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
@@ -8,9 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -27,30 +25,130 @@ public enum MaterialTargetUserTypeEnum {
ALL("ALL", "全部用户") {
@Override
- public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
+ public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes,
+ Long loginWorkspaceId, Long loginOuid,
+ JoinedWorkspaceOuJob workspaceOuJob) {
return true;
}
},
PROJECT("PROJECT", "按照项目部") {
@Override
- public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
- // 若workspaceIds和jobCodes都为空,则表示不限制,否则需要满足配置的workspaceIds和jobCodes与用户加入的workspaceJob的key,value均存在交集
+ public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes,
+ Long loginWorkspaceId, Long loginOuid,
+ JoinedWorkspaceOuJob workspaceOuJob) {
+
Map> workspaceJobMap = workspaceOuJob.getWorkspaceJobMap();
- log.info("投放项目部:{},投放岗位岗位:{},用户加入项目部及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds), JSONUtil.toJsonStr(jobCodes), JSONUtil.toJsonStr(workspaceJobMap));
- return CollectionUtils.isEmpty(workspaceIds) ? CollectionUtils.isEmpty(jobCodes) || jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().flatMap(List::stream).distinct().collect(Collectors.toList()).contains(jobCode))
- : workspaceIds.stream().anyMatch(workspaceId -> CollectionUtils.isEmpty(jobCodes) || workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
+ log.info("投放项目部:{},投放岗位岗位:{},当前登录单位:{},用户加入项目部及担任岗位:{},单位加入的项目部:{},项目部下的单位:{}",
+ JSONUtil.toJsonStr(ouIds), JSONUtil.toJsonStr(jobCodes),
+ JSONUtil.toJsonStr(loginOuid),
+ JSONUtil.toJsonStr(workspaceJobMap),
+ JSONUtil.toJsonStr(workspaceOuJob.getOuWorkspaceMap()),
+ JSONUtil.toJsonStr(workspaceOuJob.getWorkspaceOuMap()));
+
+ // 配置全部项目部
+ if (CollectionUtils.isEmpty(workspaceIds)) {
+ // 未加入任何项目部
+ if (Objects.isNull(workspaceJobMap) || workspaceJobMap.isEmpty()){
+ return false;
+ }
+
+ if (Objects.isNull(loginOuid) || loginOuid == 0L){
+ if (CollectionUtils.isEmpty(jobCodes)){
+ return true;
+ }
+ return jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().anyMatch(jobCodeList -> jobCodeList.contains(jobCode)));
+ }else {
+ // 登录了具体的单位且以纯单位身份登录
+ return !CollectionUtils.isEmpty(workspaceOuJob.getOuWorkspaceMap().get(loginOuid));
+ }
+ }
+
+ // 若配置了具体项目部
+ if (Objects.isNull(loginOuid) || loginOuid == 0L) {
+ // 加入的全部项目部与配置的项目部有交集
+ if (workspaceIds.stream().anyMatch(workspaceJobMap::containsKey)){
+ if (CollectionUtils.isEmpty(jobCodes)){
+ return true;
+ }
+ return workspaceIds.stream().anyMatch(workspaceId -> workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
+ }
+ return false;
+ } else {
+ // 给定了具体登录单位
+ // 登录了具体的单位且以纯单位身份登录
+ if (CollectionUtils.isEmpty(workspaceOuJob.getOuWorkspaceMap().get(loginOuid))){
+ return false;
+ }
+ // 以项目部下单位登录
+ // 加入的全部项目部与配置的项目部有交集
+ if (workspaceIds.stream().anyMatch(workspaceJobMap::containsKey)){
+ if (CollectionUtils.isEmpty(jobCodes)){
+ return true;
+ }
+ return workspaceIds.stream().anyMatch(workspaceId -> workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
+ }
+ return false;
+ }
}
},
- UNIT("UNIT", "按照企业") {
+ UNIT("UNIT", "按照单位") {
@Override
- public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) {
- // 若workspaceIds和jobCodes都为空,则表示不限制,否则需要满足配置的workspaceIds和jobCodes与用户加入的workspaceJob的key,value均存在交集
+ public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes,
+ Long loginWorkspaceId, Long loginOuid,
+ JoinedWorkspaceOuJob workspaceOuJob) {
+
Map> ouJobMap = workspaceOuJob.getOuJobMap();
- log.info("投放单位:{},投放岗位岗位:{},用户加入单位及担任岗位:{}", JSONUtil.toJsonStr(workspaceIds), JSONUtil.toJsonStr(jobCodes), JSONUtil.toJsonStr(ouJobMap));
- return CollectionUtils.isEmpty(ouIds) ? CollectionUtils.isEmpty(jobCodes) || jobCodes.stream().anyMatch(jobCode -> ouJobMap.values().stream().flatMap(List::stream).distinct().collect(Collectors.toList()).contains(jobCode))
- : ouIds.stream().anyMatch(ouId -> CollectionUtils.isEmpty(jobCodes) || ouJobMap.get(ouId).stream().anyMatch(jobCodes::contains));
+ log.info("投放单位:{},投放岗位岗位:{},当前登录单位:{},用户加入单位及担任岗位:{}",
+ JSONUtil.toJsonStr(ouIds), JSONUtil.toJsonStr(jobCodes),
+ JSONUtil.toJsonStr(loginOuid),
+ JSONUtil.toJsonStr(ouJobMap));
+ // 判断配置的单位和岗位是否为空
+ if (CollectionUtils.isEmpty(ouIds)) {
+ // 若配置的单位为空(即配置了全部单位)
+ if (CollectionUtils.isEmpty(jobCodes)) {
+ // 若配置的岗位也为空(即配置了所有岗位),则不限制投放
+ return true;
+ } else {
+ // 若配置了具体岗位,检查用户加入的所有单位下的岗位是否包含任一配置岗位
+ if (Objects.isNull(loginOuid) || loginOuid == 0L){
+ return jobCodes.stream().anyMatch(jobCode -> ouJobMap.values().stream()
+ .flatMap(List::stream)
+ .distinct()
+ .collect(Collectors.toList())
+ .contains(jobCode));
+ }else {
+ return jobCodes.stream().anyMatch(jobCode -> ouJobMap.get(loginOuid).stream().anyMatch(jobCodes::contains));
+ }
+
+ }
+ }
+
+ // 若配置了具体单位
+ if (Objects.isNull(loginOuid) || loginOuid == 0L) {
+ // 若登录单位为空(工人APP登录),检查用户加入的单位是否与配置单位有交集
+ if (ouIds.stream().anyMatch(ouJobMap::containsKey)){
+ if (CollectionUtils.isEmpty(jobCodes)){
+ return true;
+ }
+ return ouIds.stream().anyMatch(o -> ouJobMap.get(o).stream().anyMatch(jobCodes::contains));
+ }
+ return false;
+ } else {
+ // 若登录单位不为空(管理APP或CMS登录),检查登录单位是否与配置单位有交集
+ if (!ouIds.contains(loginOuid)) {
+ return false;
+ }
+
+ if (CollectionUtils.isEmpty(jobCodes)) {
+ // 若配置了所有岗位,由于登录单位已满足条件,此时无需再检查岗位
+ return true;
+ } else {
+ // 若配置了具体岗位,检查登录单位下担任的岗位是否包含任一配置岗位
+ return !CollectionUtils.isEmpty(ouJobMap.get(loginOuid)) && jobCodes.stream().anyMatch(jobCode -> ouJobMap.get(loginOuid).stream().anyMatch(jobCodes::contains));
+ }
+ }
}
};
@@ -61,13 +159,17 @@ public enum MaterialTargetUserTypeEnum {
/**
* 根据目标人权类型确认是否需要投放
*
- * @param workspaceIds 配置的投放项目部
- * @param ouIds 配置的投放单位
- * @param jobCodes 配置的投放岗位
- * @param workspaceOuJob 用户参与的项目部和单位及其岗位
+ * @param workspaceIds 配置的投放项目部
+ * @param ouIds 配置的投放单位
+ * @param jobCodes 配置的投放岗位
+ * @param loginWorkspaceId 当前登录的项目部
+ * @param loginOuid 当前登录的单位
+ * @param workspaceOuJob 用户参与的项目部和单位及其岗位
* @return 是否需要投放
*/
- public abstract boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob);
+ public abstract boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes,
+ Long loginWorkspaceId, Long loginOuid,
+ JoinedWorkspaceOuJob workspaceOuJob);
public static MaterialTargetUserTypeEnum getByCode(String code) {
if (StringUtils.isEmpty(code)) {
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/ListMaterialByBannerCodeReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/ListMaterialByBannerCodeReq.java
index 2203cab5..ba4d5766 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/ListMaterialByBannerCodeReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/ListMaterialByBannerCodeReq.java
@@ -7,7 +7,6 @@ import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
-import java.util.List;
/**
* @author chenwenjian
@@ -33,20 +32,20 @@ public class ListMaterialByBannerCodeReq {
private Long personId;
/**
- * 项目部id,用于筛选相关运营素材是否配置给了该项目部人员
+ * 当前登录项目部id,用于筛选相关运营素材是否配置给了该项目部人员
*/
- private List workspaceIds;
+ private Long workspaceId;
/**
- * 单位id,用于筛选相关运营素材是否配置给了该单位人员
+ * 当前登录单位id,用于筛选相关运营素材是否配置给了该单位人员
*/
- private List ouIds;
+ private Long ouId;
/**
* 岗位编码,搭配{@code workspaceIds}或{@code unitIds}使用
* 用于筛选相关运营素材是否配置给了指定项目部下指定岗位人员
* 或指定单位下指定岗位人员
*/
- private List jobCodes;
+ private String jobCode;
}
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
index ebf91b4f..45493b84 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
@@ -104,7 +104,7 @@ public class MaterialServiceImpl extends ServiceImpl impl
@Transactional(rollbackFor = Exception.class)
@Override
public List listMaterialByBannerCode(ListMaterialByBannerCodeReq req, String traceId) {
- // 获取广告位并校验
+ // 获取广告位并校验(是否存在,是否启用,是否在有效期)
if (Objects.isNull(validateBanner(req.getBannerCode()))) {
return Collections.emptyList();
}
@@ -118,17 +118,17 @@ public class MaterialServiceImpl extends ServiceImpl impl
// 获取当前登录用户加入的所有项目部,单位及其在项目部或在单位下担任的岗位
JoinedWorkspaceOuJob personJoinedWorkspaceOuJob = getPersonJoinedWorkspaceOuJob(req.getPersonId());
- if (Objects.isNull(personJoinedWorkspaceOuJob)) {
- // 理论上不会走到这里,因为登录用户必然加入了一个项目部或单位
- throw new ServiceException("数据异常");
- }
// 根据素材投放规则进行过滤
List list = materialList.stream()
.filter(m -> {
// 投放人群过滤
- return m.getTargetUserType().isDeliverRequired(m.getWorkspaceIds(), m.getOuIds(), m.getJobCodes(), personJoinedWorkspaceOuJob)
+ return m.getTargetUserType()
+ .isDeliverRequired(m.getWorkspaceIds(), m.getOuIds(), m.getJobCodes(),
+ req.getWorkspaceId(), req.getOuId(),
+ personJoinedWorkspaceOuJob)
&&
+ // 投放频次过滤
filterByDisplayFrequency(req, m);
})
.collect(Collectors.toList());
@@ -316,15 +316,15 @@ public class MaterialServiceImpl extends ServiceImpl impl
*
* @param req {@link ListMaterialByBannerCodeReq}
* @param m {@link Material}
- * @return true:符合投放规则;false:不符合投放规则
+ * @return true:符合投放规则,即为达到最大投放次数限制;false:不符合投放规则,已到达最大投放次数限制
*/
private boolean filterByDisplayFrequency(ListMaterialByBannerCodeReq req, Material m) {
boolean displayFrequencyFilter;
String key = buildMaterialDisplayFrequencyKey(m, req.getPersonId());
if (RedisClient.KeyOps.hasKey(key)) {
int frequency = Integer.parseInt(RedisClient.StringOps.get(key));
- log.info("{}已投放次数:{},素材最大投放次数:{}", req.getPersonId(), frequency, m.getMaxDisplayFrequency());
- displayFrequencyFilter = frequency < m.getMaxDisplayFrequency();
+ log.info("{素材投放key:{},value:{}", key, frequency);
+ displayFrequencyFilter = MaterialDisplayFrequencyTypeEnum.NO_LIMIT.getCode().equals(m.getDisplayFrequencyType().getCode()) || frequency < m.getMaxDisplayFrequency();
if (displayFrequencyFilter) {
// 本次需要投放
RedisClient.StringOps.incrBy(key, 1L);
@@ -332,7 +332,9 @@ public class MaterialServiceImpl extends ServiceImpl impl
} else {
displayFrequencyFilter = true;
RedisClient.StringOps.set(key, String.valueOf(1));
- RedisClient.KeyOps.expire(key, materialDisplayFrequencyKeyTtl, TimeUnit.DAYS);
+ // key失效时间,有效期天数加上配置的有效期天数
+ long intervalDays = (m.getEndTime().getTime() - m.getStartTime().getTime()) / (1000 * 60 * 60 * 24);
+ RedisClient.KeyOps.expire(key, intervalDays + materialDisplayFrequencyKeyTtl, TimeUnit.DAYS);
}
return displayFrequencyFilter;
}
@@ -430,10 +432,22 @@ public class MaterialServiceImpl extends ServiceImpl impl
// Map>
Map> ouIdToTopNodeIdMap = genericQuery.stream()
- .filter(c -> c.getWorkspaceId() == 1)
+ .filter(c -> c.getWorkspaceType() == 1)
.collect(Collectors.groupingBy(CooperateShipResp::getOrganizationalUnitId,
Collectors.mapping(CooperateShipResp::getOrganizationalNodeId, Collectors.toList())));
+ // 单位加入的项目部,Map>
+ Map> ouIdToWorkspaceMap = genericQuery.stream()
+ .filter(c -> c.getWorkspaceType() == 2)
+ .collect(Collectors.groupingBy(CooperateShipResp::getOrganizationalUnitId,
+ Collectors.mapping(CooperateShipResp::getWorkspaceId, Collectors.toList())));
+
+ // 项目部下的单位 Map
+ Map> workspaceToOuIdMap = genericQuery.stream()
+ .filter(c -> c.getWorkspaceType() == 2)
+ .collect(Collectors.groupingBy(CooperateShipResp::getWorkspaceId,
+ Collectors.mapping(CooperateShipResp::getOrganizationalUnitId, Collectors.toList())));
+
// Map
Map> workspaceToJobCodeMap = workspaceToTopNodeIdMap.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
@@ -454,7 +468,7 @@ public class MaterialServiceImpl extends ServiceImpl impl
.distinct()
.collect(Collectors.toList())));
- return new JoinedWorkspaceOuJob(workspaceToJobCodeMap, ouIdToJobCodeMap);
+ return new JoinedWorkspaceOuJob(workspaceToJobCodeMap, ouIdToJobCodeMap,ouIdToWorkspaceMap,workspaceToOuIdMap);
}
/**
@@ -481,6 +495,8 @@ public class MaterialServiceImpl extends ServiceImpl impl
LocalDate now = LocalDate.now();
String suffix = "";
switch (material.getDisplayFrequencyType()) {
+ case NO_LIMIT:
+ suffix = String.join("_", MaterialDisplayFrequencyTypeEnum.NO_LIMIT.getCode());
case VALIDITY_PERIOD:
suffix = String.join("_", "P", DateUtil.format(material.getStartTime(), datePattern), DateUtil.format(material.getEndTime(), datePattern));
break;
From 91b82bc434e06b1ad1873906a51593b8e9058c59 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Sat, 20 Apr 2024 18:15:18 +0800
Subject: [PATCH 36/44] =?UTF-8?q?feat(REQ-2106):=20=E6=8A=95=E6=94=BE?=
=?UTF-8?q?=E8=A7=84=E5=88=99=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/enums/MaterialTargetUserTypeEnum.java | 32 ++++++++-----------
1 file changed, 14 insertions(+), 18 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
index 030f176c..398c0ea3 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
@@ -28,6 +28,7 @@ public enum MaterialTargetUserTypeEnum {
public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes,
Long loginWorkspaceId, Long loginOuid,
JoinedWorkspaceOuJob workspaceOuJob) {
+ log.info("投放全部用户");
return true;
}
},
@@ -49,26 +50,21 @@ public enum MaterialTargetUserTypeEnum {
// 配置全部项目部
if (CollectionUtils.isEmpty(workspaceIds)) {
// 未加入任何项目部
- if (Objects.isNull(workspaceJobMap) || workspaceJobMap.isEmpty()){
+ if (Objects.isNull(workspaceJobMap) || workspaceJobMap.isEmpty()) {
return false;
}
- if (Objects.isNull(loginOuid) || loginOuid == 0L){
- if (CollectionUtils.isEmpty(jobCodes)){
- return true;
- }
- return jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().anyMatch(jobCodeList -> jobCodeList.contains(jobCode)));
- }else {
- // 登录了具体的单位且以纯单位身份登录
- return !CollectionUtils.isEmpty(workspaceOuJob.getOuWorkspaceMap().get(loginOuid));
+ if (CollectionUtils.isEmpty(jobCodes)) {
+ return true;
}
+ return jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().anyMatch(jobCodeList -> jobCodeList.contains(jobCode)));
}
// 若配置了具体项目部
if (Objects.isNull(loginOuid) || loginOuid == 0L) {
// 加入的全部项目部与配置的项目部有交集
- if (workspaceIds.stream().anyMatch(workspaceJobMap::containsKey)){
- if (CollectionUtils.isEmpty(jobCodes)){
+ if (workspaceIds.stream().anyMatch(workspaceJobMap::containsKey)) {
+ if (CollectionUtils.isEmpty(jobCodes)) {
return true;
}
return workspaceIds.stream().anyMatch(workspaceId -> workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
@@ -77,13 +73,13 @@ public enum MaterialTargetUserTypeEnum {
} else {
// 给定了具体登录单位
// 登录了具体的单位且以纯单位身份登录
- if (CollectionUtils.isEmpty(workspaceOuJob.getOuWorkspaceMap().get(loginOuid))){
+ if (CollectionUtils.isEmpty(workspaceOuJob.getOuWorkspaceMap().get(loginOuid))) {
return false;
}
// 以项目部下单位登录
// 加入的全部项目部与配置的项目部有交集
- if (workspaceIds.stream().anyMatch(workspaceJobMap::containsKey)){
- if (CollectionUtils.isEmpty(jobCodes)){
+ if (workspaceIds.stream().anyMatch(w -> workspaceOuJob.getOuWorkspaceMap().get(loginOuid).stream().anyMatch(w::equals))) {
+ if (CollectionUtils.isEmpty(jobCodes)) {
return true;
}
return workspaceIds.stream().anyMatch(workspaceId -> workspaceJobMap.get(workspaceId).stream().anyMatch(jobCodes::contains));
@@ -112,13 +108,13 @@ public enum MaterialTargetUserTypeEnum {
return true;
} else {
// 若配置了具体岗位,检查用户加入的所有单位下的岗位是否包含任一配置岗位
- if (Objects.isNull(loginOuid) || loginOuid == 0L){
+ if (Objects.isNull(loginOuid) || loginOuid == 0L) {
return jobCodes.stream().anyMatch(jobCode -> ouJobMap.values().stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList())
.contains(jobCode));
- }else {
+ } else {
return jobCodes.stream().anyMatch(jobCode -> ouJobMap.get(loginOuid).stream().anyMatch(jobCodes::contains));
}
@@ -128,8 +124,8 @@ public enum MaterialTargetUserTypeEnum {
// 若配置了具体单位
if (Objects.isNull(loginOuid) || loginOuid == 0L) {
// 若登录单位为空(工人APP登录),检查用户加入的单位是否与配置单位有交集
- if (ouIds.stream().anyMatch(ouJobMap::containsKey)){
- if (CollectionUtils.isEmpty(jobCodes)){
+ if (ouIds.stream().anyMatch(ouJobMap::containsKey)) {
+ if (CollectionUtils.isEmpty(jobCodes)) {
return true;
}
return ouIds.stream().anyMatch(o -> ouJobMap.get(o).stream().anyMatch(jobCodes::contains));
From cd49e8a3261651f3eb39dbad39f33163ee3d290c Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Mon, 22 Apr 2024 11:11:52 +0800
Subject: [PATCH 37/44] =?UTF-8?q?feat(REQ-2106):=20=E6=8A=95=E6=94=BE?=
=?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
index 398c0ea3..cbd8832c 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
@@ -42,7 +42,7 @@ public enum MaterialTargetUserTypeEnum {
Map> workspaceJobMap = workspaceOuJob.getWorkspaceJobMap();
log.info("投放项目部:{},投放岗位岗位:{},当前登录单位:{},用户加入项目部及担任岗位:{},单位加入的项目部:{},项目部下的单位:{}",
JSONUtil.toJsonStr(ouIds), JSONUtil.toJsonStr(jobCodes),
- JSONUtil.toJsonStr(loginOuid),
+ loginOuid,
JSONUtil.toJsonStr(workspaceJobMap),
JSONUtil.toJsonStr(workspaceOuJob.getOuWorkspaceMap()),
JSONUtil.toJsonStr(workspaceOuJob.getWorkspaceOuMap()));
@@ -98,7 +98,7 @@ public enum MaterialTargetUserTypeEnum {
Map> ouJobMap = workspaceOuJob.getOuJobMap();
log.info("投放单位:{},投放岗位岗位:{},当前登录单位:{},用户加入单位及担任岗位:{}",
JSONUtil.toJsonStr(ouIds), JSONUtil.toJsonStr(jobCodes),
- JSONUtil.toJsonStr(loginOuid),
+ loginOuid,
JSONUtil.toJsonStr(ouJobMap));
// 判断配置的单位和岗位是否为空
if (CollectionUtils.isEmpty(ouIds)) {
From aadeaf42d5f428f6840c9b283b49b4f29a3928d1 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Mon, 22 Apr 2024 13:54:28 +0800
Subject: [PATCH 38/44] =?UTF-8?q?feat(REQ-2106):=20=E5=85=A8=E9=83=A8?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=83=A8=E4=B8=8B=E6=8C=87=E5=AE=9A=E5=B2=97?=
=?UTF-8?q?=E4=BD=8D=E7=B4=A0=E6=9D=90=E6=8A=95=E6=94=BE=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nanopart/api/enums/MaterialTargetUserTypeEnum.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
index cbd8832c..1bf47878 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java
@@ -56,8 +56,13 @@ public enum MaterialTargetUserTypeEnum {
if (CollectionUtils.isEmpty(jobCodes)) {
return true;
+ }else {
+ if (Objects.isNull(loginOuid) || loginOuid == 0 || CollectionUtils.isEmpty(workspaceOuJob.getOuWorkspaceMap().get(loginOuid))){
+ return jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().anyMatch(jobCodeList -> jobCodeList.contains(jobCode)));
+ }else {
+ return workspaceOuJob.getOuWorkspaceMap().get(loginOuid).stream().anyMatch(w -> !CollectionUtils.isEmpty(workspaceJobMap.get(w)) && jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.get(w).contains(jobCode)));
+ }
}
- return jobCodes.stream().anyMatch(jobCode -> workspaceJobMap.values().stream().anyMatch(jobCodeList -> jobCodeList.contains(jobCode)));
}
// 若配置了具体项目部
From 965f64342f8a7ff637c06da13d049d0ce8c2b235 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Mon, 22 Apr 2024 14:59:30 +0800
Subject: [PATCH 39/44] =?UTF-8?q?feat(REQ-2106):=20=E5=B9=BF=E5=91=8A?=
=?UTF-8?q?=E4=BD=8D=E5=92=8C=E7=B4=A0=E6=9D=90=E6=93=8D=E4=BD=9C=E6=97=A5?=
=?UTF-8?q?=E5=BF=97=E6=97=B6=E9=97=B4=E7=AD=9B=E9=80=89=E9=80=89=E7=94=A8?=
=?UTF-8?q?updateAt=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../server/service/impl/BannerOperationLogServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java
index cea28cb0..cddcad92 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/BannerOperationLogServiceImpl.java
@@ -62,6 +62,6 @@ public class BannerOperationLogServiceImpl extends ServiceImpl
Date: Mon, 22 Apr 2024 15:47:14 +0800
Subject: [PATCH 40/44] =?UTF-8?q?feat(REQ-2106):=20=E6=B3=A8=E9=87=8A?=
=?UTF-8?q?=E8=A7=84=E8=8C=83=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/axzo/nanopart/api/ApplicationVersionApi.java | 2 ++
.../src/main/java/cn/axzo/nanopart/api/BannerApi.java | 6 +++---
.../java/cn/axzo/nanopart/api/BannerOperationLogApi.java | 2 ++
.../src/main/java/cn/axzo/nanopart/api/MaterialApi.java | 3 ++-
.../server/controller/ApplicationVersionController.java | 4 +++-
.../axzo/nanopart/server/controller/BannerController.java | 4 +++-
.../server/controller/BannerOperationLogController.java | 2 ++
.../axzo/nanopart/server/controller/MaterialController.java | 6 ++++--
8 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/ApplicationVersionApi.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/ApplicationVersionApi.java
index 752ac608..b2fb2369 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/ApplicationVersionApi.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/ApplicationVersionApi.java
@@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.Valid;
/**
+ * 版本记录相关api
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/2 10:21
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerApi.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerApi.java
index 924d71b7..c30edfbf 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerApi.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerApi.java
@@ -16,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
/**
+ * 广告位相关 api
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/2 10:19
@@ -27,7 +29,7 @@ public interface BannerApi {
* 分页查询banner
*
* @param req {@link PageBannerReq}
- * @return 按照站点code(code)自增排序后列表 {@link PageBannerResp}
+ * @return 按照站点code(code)自增排序后列表 {@link PageBannerResp}
*/
@PostMapping("/api/banner/page")
ApiPageResult page(@RequestBody @Valid PageBannerReq req);
@@ -67,6 +69,4 @@ public interface BannerApi {
*/
@PostMapping("/api/banner/detail")
ApiResult detail(@RequestBody @Valid DetailBannerReq req);
-
-
}
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerOperationLogApi.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerOperationLogApi.java
index dc804402..ca1cfa2c 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerOperationLogApi.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/BannerOperationLogApi.java
@@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
/**
+ * 广告位和素材操作日志
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/2 10:21
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java
index ebe5528c..261f1ffa 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java
@@ -18,6 +18,8 @@ import javax.validation.Valid;
import java.util.List;
/**
+ * 素材管理相关 api
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/2 10:20
@@ -84,5 +86,4 @@ public interface MaterialApi {
*/
@PostMapping("/api/material/listByBannerCode")
ApiResult> listMaterialByBannerCode(@RequestBody @Valid ListMaterialByBannerCodeReq req);
-
}
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/ApplicationVersionController.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/ApplicationVersionController.java
index ddffbc96..6dd0da2c 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/ApplicationVersionController.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/ApplicationVersionController.java
@@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.Objects;
/**
+ * 版本记录操作
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/3 16:39
@@ -55,7 +57,7 @@ public class ApplicationVersionController implements ApplicationVersionApi {
@Override
public ApiResult getVersionUpdateRemindContent(GetVersionUpdateRemindContentReq req) {
- if (Objects.isNull(req.getPersonId()) || req.getPersonId() == 0){
+ if (Objects.isNull(req.getPersonId()) || req.getPersonId() == 0) {
throw new ServiceException("personId不能为空");
}
return ApiResult.ok(applicationVersionService.getVersionUpdateRemindContent(req));
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerController.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerController.java
index 75b13590..cffed1c8 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerController.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerController.java
@@ -17,6 +17,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
/**
+ * 广告位操作
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/3 16:30
@@ -30,7 +32,7 @@ public class BannerController implements BannerApi {
@Override
public ApiPageResult page(PageBannerReq req) {
- Page pageData = bannerService.page(req);
+ Page pageData = bannerService.page(req);
return ApiPageResult.ok(pageData);
}
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerOperationLogController.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerOperationLogController.java
index ca3e9f05..44e511a9 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerOperationLogController.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/BannerOperationLogController.java
@@ -11,6 +11,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
/**
+ * 广告位和素材操作日志
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/3 16:40
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java
index 35519565..b95c4ced 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java
@@ -24,6 +24,8 @@ import java.util.List;
import java.util.Objects;
/**
+ * 素材操作
+ *
* @author chenwenjian
* @version 1.0
* @date 2024/4/3 16:31
@@ -68,9 +70,9 @@ public class MaterialController implements MaterialApi {
@Override
public ApiResult> listMaterialByBannerCode(ListMaterialByBannerCodeReq req) {
String traceId = request.getHeader(NanopartConstant.CONTEXT_TRACE_ID);
- if (Objects.isNull(req.getPersonId()) || req.getPersonId() == 0L){
+ if (Objects.isNull(req.getPersonId()) || req.getPersonId() == 0L) {
throw new ServiceException("personId不能为空");
}
- return ApiResult.ok(materialService.listMaterialByBannerCode(req,traceId));
+ return ApiResult.ok(materialService.listMaterialByBannerCode(req, traceId));
}
}
From 77f066c9c1e761ddf1ce9d249143735da19edfca Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Mon, 22 Apr 2024 16:16:36 +0800
Subject: [PATCH 41/44] =?UTF-8?q?feat(REQ-2106):=20=E6=B3=A8=E9=87=8A?=
=?UTF-8?q?=E8=A1=A5=E5=85=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/cn/axzo/nanopart/api/MaterialApi.java | 4 ++--
.../server/controller/MaterialController.java | 12 ++++++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java
index 261f1ffa..eb08ba74 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/MaterialApi.java
@@ -58,7 +58,7 @@ public interface MaterialApi {
* 更新banner状态
*
* @param req {@link UpdateStatusReq}
- * @return void
+ * @return 无
*/
@PostMapping("/api/material/updateStatus")
ApiResult updateStatus(@RequestBody @Valid UpdateStatusReq req);
@@ -76,7 +76,7 @@ public interface MaterialApi {
* 根据广告位编码(bannerCode)查询素材
*
* 1. 通过广告位code获取该广告位下的所有素材(默认查询上架状态且在有效期范围内的素材)
- * 2. 根据广告位投放人群进行过滤
+ * 2. 根据广告位投放人群进行过滤(对于cms/cmp需要根据当前登录人登录企业情况进行过滤)
* 3. 根据广告位投放规则频次进行过滤
* 4. 将最终的素材根据优先级(priority)升序,创建时间(createAt)降序排序
*
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java
index b95c4ced..07bda5ff 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/controller/MaterialController.java
@@ -67,6 +67,18 @@ public class MaterialController implements MaterialApi {
return ApiResult.ok(materialService.detail(req));
}
+ /**
+ * 根据广告位编码(bannerCode)查询素材
+ *
+ * 1. 通过广告位code获取该广告位下的所有素材(默认查询上架状态且在有效期范围内的素材)
+ * 2. 根据广告位投放人群进行过滤(对于cms/cmp需要根据当前登录人登录企业情况进行过滤)
+ * 3. 根据广告位投放规则频次进行过滤
+ * 4. 将最终的素材根据优先级(priority)升序,创建时间(createAt)降序排序
+ *
+ *
+ * @param req {@link ListMaterialByBannerCodeReq}
+ * @return 根据优先级(priority)升序,创建时间(createAt)降序排序后的列表
+ */
@Override
public ApiResult> listMaterialByBannerCode(ListMaterialByBannerCodeReq req) {
String traceId = request.getHeader(NanopartConstant.CONTEXT_TRACE_ID);
From 37160cf5ae9fb807ecf87d33e269210015a17d80 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Mon, 22 Apr 2024 18:05:07 +0800
Subject: [PATCH 42/44] =?UTF-8?q?feat(REQ-2106):=20NO=5FLIMIT=E9=A2=91?=
=?UTF-8?q?=E6=AC=A1key=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../axzo/nanopart/server/service/impl/MaterialServiceImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
index 45493b84..2cd53482 100644
--- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
+++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialServiceImpl.java
@@ -497,6 +497,7 @@ public class MaterialServiceImpl extends ServiceImpl impl
switch (material.getDisplayFrequencyType()) {
case NO_LIMIT:
suffix = String.join("_", MaterialDisplayFrequencyTypeEnum.NO_LIMIT.getCode());
+ break;
case VALIDITY_PERIOD:
suffix = String.join("_", "P", DateUtil.format(material.getStartTime(), datePattern), DateUtil.format(material.getEndTime(), datePattern));
break;
From b37f3b5882d9e55d39fceef7269dbc702fdde321 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Mon, 22 Apr 2024 18:48:32 +0800
Subject: [PATCH 43/44] =?UTF-8?q?feat(REQ-2106):=20=E6=98=BE=E7=A4=BA?=
=?UTF-8?q?=E9=A2=91=E6=AC=A1=E9=99=90=E5=88=B6=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/axzo/nanopart/api/request/CreateMaterialReq.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
index c2988d42..9f5b6825 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
@@ -146,7 +146,6 @@ public class CreateMaterialReq {
/**
* 最大显示频次数量,0不限制
*/
- @Min(value = 1, message = "最大显示频次数量不能小于1")
private int maxDisplayFrequency;
/**
From aeaf05fc68ed1124fad5fe8ff78ed7ac9a92c012 Mon Sep 17 00:00:00 2001
From: chenwenjian
Date: Tue, 23 Apr 2024 10:10:56 +0800
Subject: [PATCH 44/44] =?UTF-8?q?feat(REQ-2106):=20=E7=B4=A0=E6=9D=90?=
=?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=90=8D=E7=A7=B0=E9=95=BF=E5=BA=A6=E9=99=90?=
=?UTF-8?q?=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/axzo/nanopart/api/request/CreateMaterialReq.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
index 9f5b6825..3ef1bfdd 100644
--- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
+++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialReq.java
@@ -35,13 +35,14 @@ public class CreateMaterialReq {
/**
* 广告位编码
*/
- @Length(max = 150, message = "bannerCode长度不能超过150")
+
@NotBlank(message = "bannerCode不能为空")
private String bannerCode;
/**
* 名称
*/
+ @Length(max = 150, message = "素材名称长度不能超过150字")
@NotBlank(message = "素材名称不能为空")
private String name;