From e04a66daca197f818eff26e1dfe598799c4efbc9 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Thu, 11 Apr 2024 10:52:23 +0800 Subject: [PATCH 01/44] =?UTF-8?q?feat(REQ-2106):=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/enums/MaterialTargetUserTypeEnum.java | 2 +- .../nanopart/api/request/CreateBannerReq.java | 6 +- .../api/request/CreateMaterialPutLogReq.java | 40 ++++ .../request/ListMaterialByBannerCodeReq.java | 5 +- .../server/controller/MaterialController.java | 6 +- .../server/domain/MaterialPutLog.java | 53 +++++ .../server/mapper/MaterialPutLogDao.java | 14 ++ .../server/service/MaterialPutLogService.java | 13 ++ .../server/service/MaterialService.java | 2 +- .../service/impl/BannerServiceImpl.java | 17 +- .../impl/MaterialPutLogServiceImpl.java | 35 ++++ .../service/impl/MaterialServiceImpl.java | 194 +++++++++++++----- .../cn/axzo/nanopart/NanopartApplication.java | 22 +- .../src/main/resources/application.yml | 2 +- 14 files changed, 327 insertions(+), 84 deletions(-) create mode 100644 banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialPutLogReq.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/MaterialPutLog.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/MaterialPutLogDao.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialPutLogService.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialPutLogServiceImpl.java 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 38fa3299..3597c7cc 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 @@ -54,7 +54,7 @@ public enum MaterialTargetUserTypeEnum { private final String desc; /** - * 是否需要投放 + * 根据目标人权类型确认是否需要投放 * * @param workspaceIds 配置的投放项目部 * @param ouIds 配置的投放单位 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 1942f586..34014e0f 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 @@ -4,7 +4,6 @@ import cn.axzo.nanopart.api.dto.AspectRatioDto; import cn.axzo.nanopart.api.enums.CarouselStatusEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; -import com.alibaba.fastjson.JSONArray; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -17,6 +16,7 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.time.LocalTime; +import java.util.List; /** * @author chenwenjian @@ -33,6 +33,8 @@ public class CreateBannerReq { /** * 广告位名称 */ + @Length(max = 20) + @NotBlank(message = "广告位名称不能为空") private String name; /** @@ -52,7 +54,7 @@ public class CreateBannerReq { /** * 标签,内置标签:“弹窗”,“banner” */ - private JSONArray tag; + private List tag; /** * 轮播状态,取值:OPENED, CLOSED,默认为ClOSED diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialPutLogReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialPutLogReq.java new file mode 100644 index 00000000..448d924b --- /dev/null +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateMaterialPutLogReq.java @@ -0,0 +1,40 @@ +package cn.axzo.nanopart.api.request; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/11 10:38 + */ +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class CreateMaterialPutLogReq { + + /** + * 请求id + */ + private String requestId; + + /** + * 用户personId + */ + private Long personId; + + /** + * 广告位编码 + */ + private String bannerCode; + + /** + * 投放的素材id列表 + */ + private List materialIds; +} 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 87103b14..d49c8748 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 @@ -6,7 +6,9 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.util.List; /** @@ -30,7 +32,8 @@ public class ListMaterialByBannerCodeReq { /** * 当前登录人的personId */ - // @NotNull(message = "personId不能为空") + @NotNull(message = "personId不能为空") + @Min(value = 1, message = "请传入正确的personId") private Long personId; /** 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 f6a12d2f..684d40a5 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 @@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -31,6 +32,8 @@ public class MaterialController implements MaterialApi { private final MaterialService materialService; + private final HttpServletRequest request; + @Override public ApiPageResult page(PageMaterialReq req) { Page pageData = materialService.page(req); @@ -61,6 +64,7 @@ public class MaterialController implements MaterialApi { @Override public ApiResult> listMaterialByBannerCode(ListMaterialByBannerCodeReq req) { - return ApiResult.ok(materialService.listMaterialByBannerCode(req)); + String traceId = request.getHeader("traceId"); + return ApiResult.ok(materialService.listMaterialByBannerCode(req,traceId)); } } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/MaterialPutLog.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/MaterialPutLog.java new file mode 100644 index 00000000..8b228394 --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/MaterialPutLog.java @@ -0,0 +1,53 @@ +package cn.axzo.nanopart.server.domain; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.pokonyan.config.mybatisplus.type.LongListTypeHandler; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 素材投放日志记录 + * + * @author chenwenjian + * @version 1.0 + * @date 2024/4/10 18:36 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "material_put_log", autoResultMap = true) +public class MaterialPutLog extends BaseEntity { + + /** + * 请求id + */ + @TableField(value = "request_id") + private String requestId; + + /** + * 用户personId + */ + @TableField(value = "person_id") + private Long personId; + + /** + * 广告位编码 + */ + @TableField(value = "banner_code") + private String bannerCode; + + /** + * 投放的素材id列表 + */ + @TableField(value = "material_ids", typeHandler = LongListTypeHandler.class) + private List materialIds; +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/MaterialPutLogDao.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/MaterialPutLogDao.java new file mode 100644 index 00000000..0e28378d --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/MaterialPutLogDao.java @@ -0,0 +1,14 @@ +package cn.axzo.nanopart.server.mapper; + +import cn.axzo.nanopart.server.domain.MaterialPutLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/10 18:40 + */ +@Mapper +public interface MaterialPutLogDao extends BaseMapper { +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialPutLogService.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialPutLogService.java new file mode 100644 index 00000000..5dd70ab0 --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialPutLogService.java @@ -0,0 +1,13 @@ +package cn.axzo.nanopart.server.service; + +import cn.axzo.nanopart.api.request.CreateMaterialPutLogReq; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/10 18:41 + */ +public interface MaterialPutLogService { + + Long create(CreateMaterialPutLogReq req); +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialService.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialService.java index 49b812de..4a993d32 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialService.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/MaterialService.java @@ -28,7 +28,7 @@ public interface MaterialService { * @param req {@link ListMaterialByBannerCodeReq} * @return 根据优先级(priority)升序,创建时间(createAt)降序排序后的列表 */ - List listMaterialByBannerCode(ListMaterialByBannerCodeReq req); + List listMaterialByBannerCode(ListMaterialByBannerCodeReq req,String traceId); Page page(PageMaterialReq req); 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 371b1112..cc050208 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 @@ -10,14 +10,14 @@ import cn.axzo.nanopart.api.request.UpdateBannerReq; import cn.axzo.nanopart.api.request.UpdateStatusReq; import cn.axzo.nanopart.api.response.DetailBannerResp; import cn.axzo.nanopart.api.response.PageBannerResp; -import cn.axzo.nanopart.server.mapper.BannerDao; import cn.axzo.nanopart.server.domain.Banner; +import cn.axzo.nanopart.server.mapper.BannerDao; import cn.axzo.nanopart.server.service.BannerOperationLogService; import cn.axzo.nanopart.server.service.BannerService; import cn.axzo.pokonyan.dao.converter.PageConverter; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,10 +49,10 @@ public class BannerServiceImpl extends ServiceImpl implements */ @Override public Page page(PageBannerReq req) { - LambdaQueryChainWrapper pageLambdaQueryChain = buildPageLambdaQueryChain(req); + LambdaQueryWrapper pageLambdaQueryWrapper = buildPageLambdaQueryWrapper(req); - Page bannerPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), pageLambdaQueryChain); - if (bannerPage.getTotal() == 0) { + Page bannerPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), pageLambdaQueryWrapper); + if (Objects.isNull(bannerPage) || bannerPage.getTotal() == 0) { return new Page<>(); } return PageConverter.convert(bannerPage, record -> BeanUtil.toBean(record, PageBannerResp.class)); @@ -217,10 +217,11 @@ public class BannerServiceImpl extends ServiceImpl implements * 构建分页查询条件 * * @param req {@link PageBannerReq} - * @return {@link LambdaQueryChainWrapper} + * @return {@link LambdaQueryWrapper} */ - private LambdaQueryChainWrapper buildPageLambdaQueryChain(PageBannerReq req) { - return lambdaQuery() + private LambdaQueryWrapper buildPageLambdaQueryWrapper(PageBannerReq req) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + return lambdaQueryWrapper .like(StringUtils.isNotEmpty(req.getName()), Banner::getName, req.getName()) .eq(Objects.nonNull(req.getTerminal()), Banner::getTerminal, req.getTerminal()) .eq(Objects.nonNull(req.getStatus()), Banner::getStatus, req.getStatus()) diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialPutLogServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialPutLogServiceImpl.java new file mode 100644 index 00000000..1700f916 --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/MaterialPutLogServiceImpl.java @@ -0,0 +1,35 @@ +package cn.axzo.nanopart.server.service.impl; + +import cn.axzo.nanopart.api.request.CreateMaterialPutLogReq; +import cn.axzo.nanopart.server.domain.MaterialPutLog; +import cn.axzo.nanopart.server.mapper.MaterialPutLogDao; +import cn.axzo.nanopart.server.service.MaterialPutLogService; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/10 18:41 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class MaterialPutLogServiceImpl extends ServiceImpl implements MaterialPutLogService { + + /** + * 创建 + * + * @param req {@link CreateMaterialPutLogReq} + * @return {@link Long} + */ + @Override + public Long create(CreateMaterialPutLogReq req) { + MaterialPutLog materialPutLog = BeanUtil.copyProperties(req, MaterialPutLog.class); + save(materialPutLog); + return materialPutLog.getId(); + } +} 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 f6d2430b..17d7c3d3 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 @@ -11,6 +11,7 @@ import cn.axzo.nanopart.api.enums.MaterialDisplayFrequencyTypeEnum; import cn.axzo.nanopart.api.enums.RecodeTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq; +import cn.axzo.nanopart.api.request.CreateMaterialPutLogReq; import cn.axzo.nanopart.api.request.CreateMaterialReq; import cn.axzo.nanopart.api.request.DetailMaterialReq; import cn.axzo.nanopart.api.request.ListMaterialByBannerCodeReq; @@ -27,27 +28,37 @@ import cn.axzo.nanopart.server.rpc.OrganizationalJobGateway; import cn.axzo.nanopart.server.rpc.OrganizationalNodeUserGateway; import cn.axzo.nanopart.server.service.BannerOperationLogService; import cn.axzo.nanopart.server.service.BannerService; +import cn.axzo.nanopart.server.service.MaterialPutLogService; import cn.axzo.nanopart.server.service.MaterialService; +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 com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.time.LocalDateTime; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -57,6 +68,7 @@ import java.util.stream.Collectors; */ @Slf4j @Service +@RefreshScope @RequiredArgsConstructor public class MaterialServiceImpl extends ServiceImpl implements MaterialService { @@ -64,13 +76,20 @@ public class MaterialServiceImpl extends ServiceImpl impl private final BannerOperationLogService bannerOperationLogService; + private final MaterialPutLogService materialPutLogService; + private final OrganizationalNodeUserGateway organizationalNodeUserGateway; private final OrganizationalJobGateway organizationalJobGateway; private final CooperateShipGateway cooperateShipGateway; - // private final + /** + * 素材投放频次缓存key有效期, + * 单位:天,默认为90天 + */ + @Value("${materialDisplayFrequencyKeyTtl: 90}") + private Long materialDisplayFrequencyKeyTtl; /** * 根据广告位编码(bannerCode)查询素材 @@ -81,15 +100,12 @@ public class MaterialServiceImpl extends ServiceImpl impl * @param req {@link ListMaterialByBannerCodeReq} * @return 根据优先级(priority)升序,创建时间(createAt)降序排序后的列表 */ + @Transactional(rollbackFor = Exception.class) @Override - public List listMaterialByBannerCode(ListMaterialByBannerCodeReq req) { + public List listMaterialByBannerCode(ListMaterialByBannerCodeReq req, String traceId) { // 获取广告位并校验 - Banner banner = bannerService.selectByCode(req.getBannerCode()); - if (Objects.isNull(banner)) { - throw new ServiceException("广告位不存在"); - } - if (banner.getStatus() != StatusEnum.ONLINE) { - throw new ServiceException("广告位已停用"); + if (Objects.isNull(validateBanner(req.getBannerCode()))) { + return Collections.emptyList(); } // 获取该广告位下已上架且在有效期内的所有素材 @@ -105,44 +121,30 @@ public class MaterialServiceImpl extends ServiceImpl impl throw new ServiceException("数据异常"); } - // 根据素材投放人群和投放规则频次进行过滤 + // 根据素材投放规则进行过滤 List list = materialList.stream() .filter(m -> { - m.getTargetUserType().isDeliverRequired(m.getWorkspaceIds(), m.getOuIds(), m.getJobCodes(), personJoinedWorkspaceOuJob); - - // 频次过滤,这个人 - // RedisClient.KeyOps.hasKey(); - return false; + // 投放人群过滤 + return m.getTargetUserType().isDeliverRequired(m.getWorkspaceIds(), m.getOuIds(), m.getJobCodes(), personJoinedWorkspaceOuJob) + && + filterByDisplayFrequency(req, m); }) .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(list)) { + return Collections.emptyList(); + } + + // 记录素材投放日志 + CreateMaterialPutLogReq materialPutLogReq = new CreateMaterialPutLogReq(); + materialPutLogReq.setRequestId(traceId) + .setPersonId(req.getPersonId()) + .setBannerCode(req.getBannerCode()) + .setMaterialIds(list.stream().map(Material::getId).collect(Collectors.toList())); + materialPutLogService.create(materialPutLogReq); return BeanUtil.copyToList(list, MaterialResp.class); } - /** - * 构建素材投放频次记录缓存key - * - *

- * 1.含义:指定素材给指定人按照投放频次类型投放次数 - * 2.组成:namespace:bannerCode:materialId:personId:频次类型转换后的值 - * 3.频次类型转换规则示例:投放频次类型参考{@link MaterialDisplayFrequencyTypeEnum} - * 有效期内:VALIDITY_PERIOD -> 有效期 - * 每天:EVERY_DAY -> 当天 - * 每周:EVERY_WEEK -> 当周第一天 - * 每月:EVERY_MONTH -> 当月第一天 - *

- * - * @param material 素材信息 - * @param personId 投放人Id - * @return key - */ - public static String buildMaterialDisplayFrequencyKey(Material material, Long personId) { - LocalDateTime now = LocalDateTime.now(); - - // return String.format("nanopart:%s:%s", materialId, bannerId); - return null; - } - /** * 分页查询 * @@ -151,7 +153,7 @@ public class MaterialServiceImpl extends ServiceImpl impl */ @Override public Page page(PageMaterialReq req) { - LambdaQueryChainWrapper pageQueryLambdaWrapper = buildPageQueryLambdaWrapper(req); + LambdaQueryWrapper pageQueryLambdaWrapper = buildPageQueryLambdaWrapper(req); Page materialPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), pageQueryLambdaWrapper); if (materialPage.getTotal() == 0) { @@ -266,14 +268,68 @@ public class MaterialServiceImpl extends ServiceImpl impl return BeanUtil.copyProperties(getById(req.getId()), MaterialResp.class); } + /** + * 对于给定bannerCode校验其存在性和状态有效性 + * + * @param bannerCode 广告位code + * @return 若存在且有效返回广告位对象,否则否则返回null + */ + private Banner validateBanner(String bannerCode) { + if (StringUtils.isEmpty(bannerCode)) { + return null; + } + Banner banner = bannerService.selectByCode(bannerCode); + if (Objects.isNull(banner)) { + log.warn("广告位不存在,广告位code:{}", bannerCode); + return null; + } + if (banner.getStatus() != StatusEnum.ONLINE) { + log.warn("广告位已停用,广告位code:{}", bannerCode); + return null; + } + LocalTime now = LocalTime.now(); + // 当前不在广告位配置的展示时间范围内 + if (now.isBefore(banner.getStartTime()) || now.isAfter(banner.getEndTime())) { + log.warn("当前时间不在广告位配置的展示时间范围内,广告位code:{},当前时间:{},广告位开始时间:{},广告位结束时间:{}", bannerCode, now, banner.getStartTime(), banner.getEndTime()); + return null; + } + return banner; + } + + /** + * 根据素材投放频次规则进行过滤 + * + * @param req {@link ListMaterialByBannerCodeReq} + * @param m {@link Material} + * @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)); + displayFrequencyFilter = frequency < m.getMaxDisplayFrequency(); + if (displayFrequencyFilter) { + // 本次需要投放 + RedisClient.StringOps.incrBy(key, 1L); + } + } else { + displayFrequencyFilter = true; + RedisClient.StringOps.set(key, String.valueOf(1)); + RedisClient.KeyOps.expire(key, materialDisplayFrequencyKeyTtl, TimeUnit.DAYS); + } + return displayFrequencyFilter; + } + /** * 构建分页查询条件 * * @param req {@link PageMaterialReq} - * @return {@link LambdaQueryChainWrapper} + * @return {@link LambdaQueryWrapper} */ - private LambdaQueryChainWrapper buildPageQueryLambdaWrapper(PageMaterialReq req) { - return lambdaQuery() + private LambdaQueryWrapper buildPageQueryLambdaWrapper(PageMaterialReq req) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + return lambdaQueryWrapper .eq(Material::getIsDelete, 0) .eq(StringUtils.isNotEmpty(req.getBannerCode()), Material::getBannerCode, req.getBannerCode()) .like(StringUtils.isNotEmpty(req.getName()), Material::getName, req.getName()) @@ -289,16 +345,17 @@ public class MaterialServiceImpl extends ServiceImpl impl * 构建通过BannerCode查询素材的wrapper * * @param req {@link ListMaterialByBannerCodeReq} - * @return {@link LambdaQueryChainWrapper} + * @return {@link LambdaQueryWrapper} */ - private LambdaQueryChainWrapper buildListByBannerCodeQueryWrapper(ListMaterialByBannerCodeReq req) { + private LambdaQueryWrapper buildListByBannerCodeQueryWrapper(ListMaterialByBannerCodeReq req) { Date now = new Date(System.currentTimeMillis()); - return lambdaQuery() + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + return lambdaQueryWrapper .eq(Material::getIsDelete, 0) .eq(Material::getBannerCode, req.getBannerCode()) .eq(Material::getStatus, StatusEnum.ONLINE) - .ge(Material::getStartTime, now) - .le(Material::getEndTime, now) + .le(Material::getStartTime, now) + .ge(Material::getEndTime, now) .orderByAsc(Material::getPriority) .orderByDesc(Material::getCreateAt); } @@ -384,4 +441,43 @@ public class MaterialServiceImpl extends ServiceImpl impl return new JoinedWorkspaceOuJob(workspaceToJobCodeMap, ouIdToJobCodeMap); } + /** + * 构建素材投放频次记录缓存key + * + *

+ * 1.含义:指定素材给指定人按照投放频次类型投放次数 + * 2.组成:namespace:bannerCode:materialId:personId:频次类型转换后的值 + * 3.频次类型转换规则示例:投放频次类型参考{@link MaterialDisplayFrequencyTypeEnum} + * 有效期内:VALIDITY_PERIOD -> 有效期 + * 每天:EVERY_DAY -> 当天 + * 每周:EVERY_WEEK -> 当周第一天 + * 每月:EVERY_MONTH -> 当月第一天 + *

+ * + * @param material 素材信息 + * @param personId 投放人Id + * @return key + */ + public static String buildMaterialDisplayFrequencyKey(Material material, Long personId) { + String prefix = String.format("nanopart:%s:%s:%s:", material.getBannerCode(), material.getId(), personId); + String datePattern = "yyyy_MM_dd"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(datePattern); + LocalDate now = LocalDate.now(); + String suffix = ""; + switch (material.getDisplayFrequencyType()) { + case VALIDITY_PERIOD: + suffix = String.join("_", "P", DateUtil.format(material.getStartTime(), datePattern), DateUtil.format(material.getEndTime(), datePattern)); + break; + case EVERY_DAY: + suffix = String.join("_", "D", now.format(formatter)); + break; + case EVERY_WEEK: + suffix = String.join("_", "W", now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(formatter)); + break; + case EVERY_MONTH: + suffix = String.join("_", "M", now.with(TemporalAdjusters.firstDayOfMonth()).format(formatter)); + } + return prefix + suffix; + } + } diff --git a/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java b/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java index 3481d504..63d7b540 100644 --- a/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java +++ b/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java @@ -6,37 +6,19 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.Import; -import org.springframework.core.env.Environment; @Slf4j @MapperScan(value = {"cn.axzo.**.mapper"}) @SpringBootApplication @EnableFeignClients(basePackages = { - "cn.axzo.nanopart.api" + "cn.axzo" }) @EnableAspectJAutoProxy() @Import(RocketMQEventConfiguration.class) public class NanopartApplication { public static void main(String[] args) { - ConfigurableApplicationContext run = SpringApplication.run(NanopartApplication.class, args); - Environment env = run.getEnvironment(); - log.info( - "--------------------------------------------------------------------------------------------------------------------\n" + - "Application 【{}】 is running on 【{}】 environment!\n" + - "Api Local: \thttp://127.0.0.1:{}\n" + - "Mysql: \t{}\t username:{}\n" + - "Redis: \t{}:{}\t database:{}\n", - env.getProperty("spring.application.name"), - env.getProperty("spring.profiles.active"), - env.getProperty("server.port"), - env.getProperty("spring.datasource.url"), - env.getProperty("spring.datasource.username"), - env.getProperty("spring.redis.host"), - env.getProperty("spring.redis.port"), - env.getProperty("spring.redis.database") + - "\n----------------------------------------------------------"); + SpringApplication.run(NanopartApplication.class, args); } } diff --git a/nanopart-server/src/main/resources/application.yml b/nanopart-server/src/main/resources/application.yml index 1fd01c81..644e549c 100644 --- a/nanopart-server/src/main/resources/application.yml +++ b/nanopart-server/src/main/resources/application.yml @@ -21,7 +21,7 @@ mybatis-plus: logic-delete-value: id #逻辑已删除值(默认为 1) logic-not-delete-value: 0 #逻辑未删除值(默认为 0) logic-delete-field: isDelete #逻辑删除字段 - type-enums-package: cn.axzo.nanopart.api.constant.enums,cn.axzo.nanopart.api.enums + type-enums-package: cn.axzo.nanopart.api.constant.enums;cn.axzo.nanopart.api.enums logging: level: From f70fb17dd1da752ce20037aa7380246c71895707 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Thu, 11 Apr 2024 19:02:20 +0800 Subject: [PATCH 02/44] =?UTF-8?q?feat(REQ-2106):=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=87=AA=E6=B5=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/nanopart/api/dto/AspectRatioDto.java | 3 + .../request/CreateApplicationVersionReq.java | 15 +++- .../nanopart/api/request/CreateBannerReq.java | 7 +- .../api/request/CreateMaterialReq.java | 5 ++ .../GetApplicationVersionReadLogReq.java | 41 ++++++++++ .../GetVersionUpdateRemindContentResp.java | 5 ++ .../BannerOperationLogController.java | 14 +++- .../domain/ApplicationVersionReadLog.java | 62 ++++++++++++++ .../mapper/ApplicationVersionReadLogDao.java | 14 ++++ .../ApplicationVersionReadLogService.java | 9 +++ .../service/ApplicationVersionService.java | 1 + .../service/BannerOperationLogService.java | 5 ++ .../ApplicationVersionReadLogServiceImpl.java | 21 +++++ .../impl/ApplicationVersionServiceImpl.java | 80 ++++++++++++++++++- .../impl/BannerOperationLogServiceImpl.java | 40 +++++++++- .../service/impl/BannerServiceImpl.java | 15 ++-- .../service/impl/MaterialServiceImpl.java | 4 +- 17 files changed, 324 insertions(+), 17 deletions(-) create mode 100644 banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/GetApplicationVersionReadLogReq.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/ApplicationVersionReadLogDao.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/AspectRatioDto.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/AspectRatioDto.java index 4b194606..d321f84d 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/AspectRatioDto.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/dto/AspectRatioDto.java @@ -39,6 +39,9 @@ public class AspectRatioDto { if (this.getWidth() <= 0 || this.getWidth() > 100) { throw new ServiceException("请设置合适的占位图宽高比例"); } + }else { + this.setWidth(0); + this.setHeight(0); } } } \ No newline at end of file diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java index d4f38a20..9c2e8805 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java @@ -46,7 +46,7 @@ public class CreateApplicationVersionReq { /** * 发布时间 */ - @NotNull(message ="发版时间不能为空") + @NotNull(message = "发版时间不能为空") private Date releaseTime; /** @@ -57,8 +57,17 @@ public class CreateApplicationVersionReq { /** * 跳转地址 - * eg: { - * "H5": "http://www.baidu.com/defalut.html" + * eg: + * { + * "PC": { + * "H5": "http://www.baidu.com/defalut.html", + * "Web": "http://www.baidu.com/default.html" + * }, + * "APP": { + * "H5": "http://www.baidu.com/defalut.html", + * "iOS": "http://www.baidu.com/default.html", + * "Android": "http://www.baidu.com/default.html" + * } * } */ private JSONObject jumpUrl; 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 34014e0f..b27380f4 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 @@ -14,6 +14,7 @@ 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; import java.time.LocalTime; import java.util.List; @@ -33,14 +34,14 @@ public class CreateBannerReq { /** * 广告位名称 */ - @Length(max = 20) + @Length(max = 50) @NotBlank(message = "广告位名称不能为空") private String name; /** * 广告位编码 */ - @Length(max = 8) + @Length(max = 20) @NotBlank(message = "站点code不能为空") private String code; @@ -54,12 +55,14 @@ public class CreateBannerReq { /** * 标签,内置标签:“弹窗”,“banner” */ + @NotEmpty(message = "标签不能为空") private List tag; /** * 轮播状态,取值:OPENED, CLOSED,默认为ClOSED * {@link CarouselStatusEnum} */ + @NotNull(message = "轮播状态不能为空") private CarouselStatusEnum carouselStatus; /** 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 33d3bdc9..7c7bd68f 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 @@ -46,11 +46,13 @@ public class CreateMaterialReq { /** * 有效期-开始时间 */ + @NotNull(message = "有效期-开始时间不能为空") private Date startTime; /** * 有效期-结束时间 */ + @NotNull(message = "有效期-结束时间不能为空") private Date endTime; /** @@ -112,6 +114,7 @@ public class CreateMaterialReq { * 目标投放对象类型呢,取值:ALL_USER, PROJECT, UNIT * {@link MaterialTargetUserTypeEnum} */ + @NotNull(message = "目标投放对象类型不能为空") private MaterialTargetUserTypeEnum targetUserType; /** @@ -133,11 +136,13 @@ public class CreateMaterialReq { * 单用户显示频次类型,有效期内:VALIDITY_PERIOD,每天:EVERY_DAY,每周:EVERY_WEEK,每月:EVERY_MONTH * {@link MaterialDisplayFrequencyTypeEnum} */ + @NotNull(message = "单用户显示频次类型不能为空") private MaterialDisplayFrequencyTypeEnum displayFrequencyType; /** * 最大显示频次数量,0不限制 */ + @Min(value = 1, message = "最大显示频次数量不能小于1") private int maxDisplayFrequency; /** diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/GetApplicationVersionReadLogReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/GetApplicationVersionReadLogReq.java new file mode 100644 index 00000000..e416be7d --- /dev/null +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/GetApplicationVersionReadLogReq.java @@ -0,0 +1,41 @@ +package cn.axzo.nanopart.api.request; + +import cn.axzo.nanopart.api.enums.PlatformTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/11 14:18 + */ +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class GetApplicationVersionReadLogReq { + + /** + * 阅读人 + */ + private Long personId; + + /** + * 版本id + */ + private Long versionId; + + /** + * 版本号 + */ + private String version; + + /** + * 平台 + */ + private PlatformTypeEnum platform; +} diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java index aa013e33..4113bce8 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java @@ -48,4 +48,9 @@ public class GetVersionUpdateRemindContentResp { * 版本描述 */ private String description; + + /** + * 图片地址url + */ + private String imageUrl; } 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 b77fbd98..ca3e9f05 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 @@ -4,6 +4,8 @@ import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.nanopart.api.BannerOperationLogApi; import cn.axzo.nanopart.api.request.PageBannerOperationLogReq; import cn.axzo.nanopart.api.response.PageBannerOperationLogResp; +import cn.axzo.nanopart.server.service.BannerOperationLogService; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; @@ -17,8 +19,18 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor public class BannerOperationLogController implements BannerOperationLogApi { + + private final BannerOperationLogService bannerOperationLogService; + + /** + * 分页查询 + * + * @param req {@link PageBannerOperationLogReq} + * @return 按照时间倒序排序后的列表 + */ @Override public ApiPageResult page(PageBannerOperationLogReq req) { - return null; + Page pageData = bannerOperationLogService.page(req); + return ApiPageResult.ok(pageData); } } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java new file mode 100644 index 00000000..b483bff1 --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java @@ -0,0 +1,62 @@ +package cn.axzo.nanopart.server.domain; + +import cn.axzo.nanopart.api.enums.PlatformTypeEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/11 14:10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "application_version_read_log", autoResultMap = true) +public class ApplicationVersionReadLog extends BaseEntity { + + /** + * 阅读人 + */ + @TableField(value = "person_id") + private Long personId; + + /** + * 版本id + */ + @TableField(value = "version_id") + private Long versionId; + + /** + * 版本号 + */ + @TableField(value = "version") + private String version; + + /** + * 平台 + */ + @TableField(value = "platform") + private PlatformTypeEnum platform; + + /** + * 创建人 + */ + @TableField(value = "create_by") + private Long createBy; + + /** + * 更新人 + */ + @TableField(value = "update_by") + private Long updateBy; + +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/ApplicationVersionReadLogDao.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/ApplicationVersionReadLogDao.java new file mode 100644 index 00000000..da87e7fc --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/mapper/ApplicationVersionReadLogDao.java @@ -0,0 +1,14 @@ +package cn.axzo.nanopart.server.mapper; + +import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/11 14:14 + */ +@Mapper +public interface ApplicationVersionReadLogDao extends BaseMapper { +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java new file mode 100644 index 00000000..78791c27 --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java @@ -0,0 +1,9 @@ +package cn.axzo.nanopart.server.service; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/11 14:15 + */ +public interface ApplicationVersionReadLogService { +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionService.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionService.java index 169dd283..4118d7f4 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionService.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionService.java @@ -23,4 +23,5 @@ public interface ApplicationVersionService { Page page(PageApplicationVersionReq req); GetVersionUpdateRemindContentResp getVersionUpdateRemindContent(GetVersionUpdateRemindContentReq req); + } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/BannerOperationLogService.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/BannerOperationLogService.java index 0bb491c2..b08f6af9 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/BannerOperationLogService.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/BannerOperationLogService.java @@ -1,6 +1,9 @@ package cn.axzo.nanopart.server.service; import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq; +import cn.axzo.nanopart.api.request.PageBannerOperationLogReq; +import cn.axzo.nanopart.api.response.PageBannerOperationLogResp; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * @author chenwenjian @@ -10,4 +13,6 @@ import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq; public interface BannerOperationLogService { Long create(CreateBannerOperationLogReq req); + + Page page(PageBannerOperationLogReq req); } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java new file mode 100644 index 00000000..6746c92d --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java @@ -0,0 +1,21 @@ +package cn.axzo.nanopart.server.service.impl; + +import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog; +import cn.axzo.nanopart.server.mapper.ApplicationVersionReadLogDao; +import cn.axzo.nanopart.server.service.ApplicationVersionReadLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/11 14:15 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ApplicationVersionReadLogServiceImpl extends ServiceImpl implements ApplicationVersionReadLogService { + +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java index 078c6802..944d3152 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.nanopart.server.service.impl; +import cn.axzo.framework.domain.ServiceException; import cn.axzo.nanopart.api.request.CreateApplicationVersionReq; import cn.axzo.nanopart.api.request.GetVersionUpdateRemindContentReq; import cn.axzo.nanopart.api.request.PageApplicationVersionReq; @@ -9,12 +10,18 @@ import cn.axzo.nanopart.api.response.PageApplicationVersionResp; import cn.axzo.nanopart.server.mapper.ApplicationVersionDao; import cn.axzo.nanopart.server.domain.ApplicationVersion; import cn.axzo.nanopart.server.service.ApplicationVersionService; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.util.Objects; + /** * @author chenwenjian * @version 1.0 @@ -25,14 +32,24 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class ApplicationVersionServiceImpl extends ServiceImpl implements ApplicationVersionService { + /** + * 创建版本信息 + * + * @param req {@link CreateApplicationVersionReq} + * @return 版本信息id + */ @Override public Long create(CreateApplicationVersionReq req) { - return null; + checkDuplicateVersion(req); + ApplicationVersion version = BeanUtil.copyProperties(req, ApplicationVersion.class); + save(version); + return version.getId(); } @Override public void update(UpdateApplicationVersionReq req) { - + LambdaUpdateWrapper lambdaUpdateWrapper = buildLambdaUpdateWrapper(req); + update(lambdaUpdateWrapper); } @Override @@ -45,8 +62,67 @@ public class ApplicationVersionServiceImpl extends ServiceImpl + * 版本号+平台+操作系统,不可重复 + *

+ * + * @param req {@link CreateApplicationVersionReq} + */ + private void checkDuplicateVersion(CreateApplicationVersionReq req) { + ApplicationVersion version = lambdaQuery() + .eq(ApplicationVersion::getVersion, req.getVersion()) + .eq(ApplicationVersion::getPlatform, req.getPlatform()) + .eq(ApplicationVersion::getOpSystem, req.getOpSystem()) + .eq(ApplicationVersion::getIsDelete, 0) + .apply("limit 1") + .one(); + if (Objects.nonNull(version)) { + throw new ServiceException("版本号重复"); + } + } + + /** + * 构建更新条件 + * + * @param req {@link UpdateApplicationVersionReq} + * @return {@link LambdaUpdateWrapper} + */ + private LambdaUpdateWrapper buildLambdaUpdateWrapper(UpdateApplicationVersionReq req) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + return lambdaUpdateWrapper + .eq(ApplicationVersion::getIsDelete, 0) + .eq(ApplicationVersion::getId, req.getId()) + .set(ApplicationVersion::getVersion, req.getVersion()) + .set(ApplicationVersion::getReleaseTime, req.getReleaseTime()) + .set(ApplicationVersion::getDescription, req.getDescription()) + .set(ApplicationVersion::getJumpUrl, JSONUtil.toJsonStr(req.getJumpUrl())) + .set(ApplicationVersion::getRemind, req.getRemind()); + } } 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 4c16b8a9..4d5b78dd 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,15 +1,22 @@ package cn.axzo.nanopart.server.service.impl; import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq; -import cn.axzo.nanopart.server.mapper.BannerOperationLogDao; +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.service.BannerOperationLogService; +import cn.axzo.pokonyan.dao.converter.PageConverter; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.Objects; + /** * @author chenwenjian * @version 1.0 @@ -25,4 +32,35 @@ public class BannerOperationLogServiceImpl extends ServiceImpl page(PageBannerOperationLogReq req) { + LambdaQueryWrapper pageLambdaQueryWrapper = buildPageLambdaQueryWrapper(req); + Page logPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), pageLambdaQueryWrapper); + if (Objects.isNull(logPage) || logPage.getTotal() == 0) { + return new Page<>(); + } + return PageConverter.convert(logPage, record -> BeanUtil.copyProperties(record, PageBannerOperationLogResp.class)); + } + + /** + * 构建分页查询条件 + * + * @param req {@link PageBannerOperationLogReq} + * @return {@link LambdaQueryWrapper} + */ + private LambdaQueryWrapper buildPageLambdaQueryWrapper(PageBannerOperationLogReq req) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + return lambdaQueryWrapper + .eq(BannerOperationLog::getIsDelete, 0) + .eq(Objects.nonNull(req.getRecodeType()), BannerOperationLog::getRecodeType, req.getRecodeType()) + .eq(Objects.nonNull(req.getRecodeId()), BannerOperationLog::getRecodeId, req.getRecodeId()) + .between(Objects.nonNull(req.getStartTime()) && Objects.nonNull(req.getEndTime()), BannerOperationLog::getCreateAt, req.getStartTime(), req.getEndTime()); + } } 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 cc050208..5170c181 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 @@ -16,8 +16,10 @@ import cn.axzo.nanopart.server.service.BannerOperationLogService; import cn.axzo.nanopart.server.service.BannerService; import cn.axzo.pokonyan.dao.converter.PageConverter; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -39,7 +41,7 @@ import java.util.Objects; @RequiredArgsConstructor public class BannerServiceImpl extends ServiceImpl implements BannerService { - private BannerOperationLogService bannerOperationLogService; + private final BannerOperationLogService bannerOperationLogService; /** * 分页查询banner @@ -74,8 +76,8 @@ public class BannerServiceImpl extends ServiceImpl implements return; } - LambdaUpdateChainWrapper updateLambdaQueryChain = buildUpdateLambdaQueryChain(req); - update(updateLambdaQueryChain); + LambdaUpdateWrapper lambdaUpdateWrapper = buildUpdateLambdaQueryWrapper(req); + update(lambdaUpdateWrapper); Banner newBanner = this.selectById(req.getId()); @@ -235,8 +237,9 @@ public class BannerServiceImpl extends ServiceImpl implements * @param req {@link UpdateBannerReq} * @return {@link LambdaUpdateChainWrapper} */ - private LambdaUpdateChainWrapper buildUpdateLambdaQueryChain(UpdateBannerReq req) { - return lambdaUpdate() + private LambdaUpdateWrapper buildUpdateLambdaQueryWrapper(UpdateBannerReq req) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + return lambdaUpdateWrapper .eq(Banner::getId, req.getId()) .set(StringUtils.isNotBlank(req.getName()), Banner::getName, req.getName()) .set(Objects.nonNull(req.getStatus()), Banner::getStatus, req.getStatus()) @@ -245,7 +248,7 @@ public class BannerServiceImpl extends ServiceImpl implements .set(Banner::getPlayDuration, req.getPlayDuration()) .set(Banner::getStartTime, req.getStartTime()) .set(Banner::getEndTime, req.getEndTime()) - .set(Banner::getAspectRatio, req.getAspectRatio()) + .set(Banner::getAspectRatio, JSONUtil.toJsonStr(req.getAspectRatio())) .set(Banner::getUpdateBy, req.getUpdateBy()); } } 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 17d7c3d3..0009a2d1 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 @@ -205,7 +205,7 @@ public class MaterialServiceImpl extends ServiceImpl impl @Override public void update(UpdateMaterialReq req) { Material oldMaterial = this.getById(req.getId()); - if (Objects.isNull(oldMaterial) || oldMaterial.getIsDelete() == 0) { + if (Objects.isNull(oldMaterial) || oldMaterial.getIsDelete() != 0) { throw new ServiceException("素材不存在"); } @@ -244,7 +244,7 @@ public class MaterialServiceImpl extends ServiceImpl impl Material newMaterial = this.getById(req.getId()); // 记录操作日志 CreateBannerOperationLogReq updateLogReq = new CreateBannerOperationLogReq() - .setRecodeType(RecodeTypeEnum.BANNER) + .setRecodeType(RecodeTypeEnum.MATERIAL) .setRecodeId(req.getId()) .setOperationType("updateStatus") .setOldData((JSONObject) JSONObject.toJSON(oldMaterial)) From 254f8e9ecc6a7220249877e60ffba3a73f576e46 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 12 Apr 2024 11:01:32 +0800 Subject: [PATCH 03/44] =?UTF-8?q?feat(REQ-2106):=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E7=A4=BA=E5=B7=B2=E8=AF=BB=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nanopart/api/ApplicationVersionApi.java | 4 +- .../CreateApplicationVersionReadLogReq.java | 53 +++++++++++ .../domain/ApplicationVersionReadLog.java | 8 ++ .../ApplicationVersionReadLogService.java | 7 ++ .../ApplicationVersionReadLogServiceImpl.java | 16 ++++ .../impl/ApplicationVersionServiceImpl.java | 93 +++++++++++++++++-- 6 files changed, 173 insertions(+), 8 deletions(-) create mode 100644 banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReadLogReq.java 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 8c10e616..752ac608 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 @@ -52,7 +52,7 @@ public interface ApplicationVersionApi { * @return void */ @GetMapping("/api/applicationVersion/delete") - ApiResult deleteById(@RequestParam("id") Long id, @RequestParam("personId") Long personId); + ApiResult deleteById(@RequestParam("id") Long id, @RequestParam(value = "personId") Long personId); /** * 分页查询 @@ -71,7 +71,7 @@ public interface ApplicationVersionApi { * - 对于app,根据版本号和操作系统,看该版本号是否配置了弹窗提示 * 2. 检查当前用户是否已经提示 * - 若已提示则不再提示,直接返回null - * - 若还没有提示,则返回该条提示内容记录 + * - 若还没有提示,则返回该条提示内容记录并记录为已提示 *

* * @param req {@link GetVersionUpdateRemindContentReq} diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReadLogReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReadLogReq.java new file mode 100644 index 00000000..77b0ef56 --- /dev/null +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReadLogReq.java @@ -0,0 +1,53 @@ +package cn.axzo.nanopart.api.request; + +import cn.axzo.nanopart.api.enums.OpSystemTypeEnum; +import cn.axzo.nanopart.api.enums.PlatformTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/12 10:15 + */ +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class CreateApplicationVersionReadLogReq { + + /** + * 阅读人 + */ + @NotNull(message = "阅读人不能为空") + private Long personId; + + /** + * 版本id + */ + @NotNull(message = "版本记录id不能为空") + private Long versionId; + + /** + * 版本号 + */ + private String version; + + /** + * 平台 + * {@link PlatformTypeEnum} + */ + private PlatformTypeEnum platform; + + /** + * 操作系统 + * {@link OpSystemTypeEnum} + */ + private OpSystemTypeEnum opSystem; +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java index b483bff1..80e4b66b 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersionReadLog.java @@ -1,5 +1,6 @@ package cn.axzo.nanopart.server.domain; +import cn.axzo.nanopart.api.enums.OpSystemTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; @@ -47,6 +48,13 @@ public class ApplicationVersionReadLog extends BaseEntity implements ApplicationVersionReadLogService { + @Override + public Long create(CreateApplicationVersionReadLogReq req) { + ApplicationVersionReadLog versionReadLog = BeanUtil.copyProperties(req, ApplicationVersionReadLog.class); + save(versionReadLog); + return versionReadLog.getId(); + } + + @Override + public ApplicationVersionReadLog getById(Long id) { + return lambdaQuery() + .eq(ApplicationVersionReadLog::getIsDelete, 0) + .eq(ApplicationVersionReadLog::getId, id) + .one(); + } } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java index 944d3152..4b41059e 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java @@ -1,23 +1,31 @@ package cn.axzo.nanopart.server.service.impl; import cn.axzo.framework.domain.ServiceException; +import cn.axzo.nanopart.api.enums.PlatformTypeEnum; +import cn.axzo.nanopart.api.request.CreateApplicationVersionReadLogReq; import cn.axzo.nanopart.api.request.CreateApplicationVersionReq; import cn.axzo.nanopart.api.request.GetVersionUpdateRemindContentReq; import cn.axzo.nanopart.api.request.PageApplicationVersionReq; import cn.axzo.nanopart.api.request.UpdateApplicationVersionReq; import cn.axzo.nanopart.api.response.GetVersionUpdateRemindContentResp; import cn.axzo.nanopart.api.response.PageApplicationVersionResp; -import cn.axzo.nanopart.server.mapper.ApplicationVersionDao; import cn.axzo.nanopart.server.domain.ApplicationVersion; +import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog; +import cn.axzo.nanopart.server.mapper.ApplicationVersionDao; +import cn.axzo.nanopart.server.service.ApplicationVersionReadLogService; import cn.axzo.nanopart.server.service.ApplicationVersionService; +import cn.axzo.pokonyan.dao.converter.PageConverter; import cn.hutool.core.bean.BeanUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; import java.util.Objects; @@ -29,9 +37,18 @@ import java.util.Objects; */ @Slf4j @Service +@RefreshScope @RequiredArgsConstructor public class ApplicationVersionServiceImpl extends ServiceImpl implements ApplicationVersionService { + private final ApplicationVersionReadLogService applicationVersionReadLogService; + + @Value("${versionRemindImg.app}") + private String appVersionRemindImage; + + @Value("${versionRemindImg.cms}") + private String cmsVersionRemindImage; + /** * 创建版本信息 * @@ -46,20 +63,42 @@ public class ApplicationVersionServiceImpl extends ServiceImpl lambdaUpdateWrapper = buildLambdaUpdateWrapper(req); update(lambdaUpdateWrapper); } + /** + * 删除版本信息记录 + * + * @param id 版本记录id + * @param personId 操作人personId + */ @Override public void deleteById(Long id, Long personId) { - + update(buildDeleteLambdaUpdateWrapper(id, personId)); } + /** + * 分页查询版本信息 + * + * @param req {@link PageApplicationVersionReq} + * @return 按照版本记录倒排的记录列表 + */ @Override public Page page(PageApplicationVersionReq req) { - return null; + LambdaQueryWrapper lambdaQueryWrapper = buildPageLambdaQueryWrapper(req); + Page versionPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), lambdaQueryWrapper); + if (Objects.isNull(versionPage) || versionPage.getTotal() == 0) { + return new Page<>(); + } + return PageConverter.convert(versionPage, record -> BeanUtil.copyProperties(record, PageApplicationVersionResp.class)); } /** @@ -84,6 +123,20 @@ public class ApplicationVersionServiceImpl extends ServiceImpl buildLambdaUpdateWrapper(UpdateApplicationVersionReq req) { - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - return lambdaUpdateWrapper + return new LambdaUpdateWrapper() .eq(ApplicationVersion::getIsDelete, 0) .eq(ApplicationVersion::getId, req.getId()) .set(ApplicationVersion::getVersion, req.getVersion()) @@ -125,4 +177,33 @@ public class ApplicationVersionServiceImpl extends ServiceImpl buildPageLambdaQueryWrapper(PageApplicationVersionReq req) { + return new LambdaQueryWrapper() + .eq(ApplicationVersion::getIsDelete, 0) + .eq(Objects.nonNull(req.getPlatform()), ApplicationVersion::getPlatform, req.getPlatform()) + .eq(Objects.nonNull(req.getOpSystem()), ApplicationVersion::getOpSystem, req.getOpSystem()) + .eq(StringUtils.isNotBlank(req.getVersion()), ApplicationVersion::getVersion, req.getVersion()) + .orderByDesc(ApplicationVersion::getVersion); + } + + /** + * 构建删除版本信息的条件 + * + * @param id 版本记录id + * @param personId 操作人personId + * @return 删除条件 + */ + private LambdaUpdateWrapper buildDeleteLambdaUpdateWrapper(Long id, Long personId) { + return new LambdaUpdateWrapper() + .eq(ApplicationVersion::getId, id) + .set(ApplicationVersion::getCreateBy, personId) + .set(ApplicationVersion::getIsDelete, 1); + } } From e1847e5fe5e0aeafc8f44952113c602ee8e09e97 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 12 Apr 2024 11:01:38 +0800 Subject: [PATCH 04/44] =?UTF-8?q?feat(REQ-2106):=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E7=A4=BA=E5=B7=B2=E8=AF=BB=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nanopart/api/request/ListMaterialByBannerCodeReq.java | 4 ---- .../axzo/nanopart/server/controller/MaterialController.java | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) 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 d49c8748..2203cab5 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 @@ -6,9 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.util.List; /** @@ -32,8 +30,6 @@ public class ListMaterialByBannerCodeReq { /** * 当前登录人的personId */ - @NotNull(message = "personId不能为空") - @Min(value = 1, message = "请传入正确的personId") private Long personId; /** 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 684d40a5..226e6f05 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 @@ -1,5 +1,6 @@ package cn.axzo.nanopart.server.controller; +import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.api.MaterialApi; @@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.List; +import java.util.Objects; /** * @author chenwenjian @@ -65,6 +67,9 @@ public class MaterialController implements MaterialApi { @Override public ApiResult> listMaterialByBannerCode(ListMaterialByBannerCodeReq req) { String traceId = request.getHeader("traceId"); + if (Objects.isNull(req.getPersonId()) || req.getPersonId() == 0L){ + throw new ServiceException("personId不能为空"); + } return ApiResult.ok(materialService.listMaterialByBannerCode(req,traceId)); } } From d547a76cc302d5aab4a952c046e652b3b8b14940 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 12 Apr 2024 13:41:38 +0800 Subject: [PATCH 05/44] =?UTF-8?q?feat(REQ-2106):=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AE=B0=E5=BD=95personId=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/response/PageApplicationVersionResp.java | 2 ++ .../server/controller/ApplicationVersionController.java | 6 ++++++ .../server/service/ApplicationVersionReadLogService.java | 2 +- .../impl/ApplicationVersionReadLogServiceImpl.java | 6 ++++-- .../service/impl/ApplicationVersionServiceImpl.java | 9 ++++++--- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java index 5688270f..1cdef1ef 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java @@ -23,6 +23,8 @@ import java.util.Date; @AllArgsConstructor public class PageApplicationVersionResp { + private Long id; + /** * 版本号 */ 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 ba539929..ddffbc96 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 @@ -1,5 +1,6 @@ package cn.axzo.nanopart.server.controller; +import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.api.ApplicationVersionApi; @@ -15,6 +16,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; +import java.util.Objects; + /** * @author chenwenjian * @version 1.0 @@ -52,6 +55,9 @@ public class ApplicationVersionController implements ApplicationVersionApi { @Override public ApiResult getVersionUpdateRemindContent(GetVersionUpdateRemindContentReq req) { + 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/service/ApplicationVersionReadLogService.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java index 78aa3dce..1ec38e73 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/ApplicationVersionReadLogService.java @@ -12,5 +12,5 @@ public interface ApplicationVersionReadLogService { Long create(CreateApplicationVersionReadLogReq req); - ApplicationVersionReadLog getById(Long id); + ApplicationVersionReadLog getByIdWithPersonId(Long personId, Long id); } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java index 3538ca58..2ee6f45c 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionReadLogServiceImpl.java @@ -28,10 +28,12 @@ public class ApplicationVersionReadLogServiceImpl extends ServiceImpl Date: Fri, 12 Apr 2024 18:21:49 +0800 Subject: [PATCH 06/44] =?UTF-8?q?feat(REQ-2106):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=B9=BF=E5=91=8A=E4=BD=8D=E5=B1=95=E7=A4=BA=E6=97=B6=E9=97=B4?= =?UTF-8?q?=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/constant/NanopartConstant.java | 5 +++ .../api/enums/DisplayTimeTypeEnum.java | 43 +++++++++++++++++++ .../nanopart/api/request/CreateBannerReq.java | 13 ++++-- .../nanopart/api/request/UpdateBannerReq.java | 15 +++++-- .../api/response/DetailBannerResp.java | 12 ++++-- .../server/controller/MaterialController.java | 3 +- .../axzo/nanopart/server/domain/Banner.java | 15 +++++-- .../service/impl/BannerServiceImpl.java | 38 ++++++++++++++++ .../service/impl/MaterialServiceImpl.java | 2 +- 9 files changed, 130 insertions(+), 16 deletions(-) create mode 100644 banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java index 8cab11ce..191d17d1 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java @@ -10,4 +10,9 @@ package cn.axzo.nanopart.api.constant; public class NanopartConstant { public static final String BASIC_FEIGN_PACKAGE = "cn.axzo"; + + /** + * 请求上下文日志ID + */ + public static final String CONTEXT_TRACE_ID = "ctxLogId"; } \ No newline at end of file diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java new file mode 100644 index 00000000..03156b11 --- /dev/null +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java @@ -0,0 +1,43 @@ +package cn.axzo.nanopart.api.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +import java.sql.Time; +import java.util.Arrays; + +/** + * 广告位展示时间段类型 + * + * @author chenwenjian + * @version 1.0 + * @date 2024/4/12 17:17 + */ +@Getter +@AllArgsConstructor +public enum DisplayTimeTypeEnum { + + ALL_DAY("ALL_DAY", "全天", Time.valueOf("00:00:00"), Time.valueOf("23:59:59")), + WORKING("WORKING", "上班时间(5:00-18:00)", Time.valueOf("05:00:00"), Time.valueOf("18:00:00")), + BREAKING("BREAKING", "休息时间(18:00-22:00)", Time.valueOf("18:00:00"), Time.valueOf("22:00:00")), + CUSTOM("CUSTOM", "自定义", null, null); + + private final String name; + + private final String desc; + + private final Time startTime; + + private final Time endTime; + + public static DisplayTimeTypeEnum getType(String name) { + if (StringUtils.isEmpty(name)) { + return null; + } + return Arrays.stream(values()) + .filter(item -> item.name.equals(name)) + .findFirst() + .orElse(null); + } +} 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 b27380f4..c0cb5eb6 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 @@ -2,6 +2,7 @@ package cn.axzo.nanopart.api.request; import cn.axzo.nanopart.api.dto.AspectRatioDto; import cn.axzo.nanopart.api.enums.CarouselStatusEnum; +import cn.axzo.nanopart.api.enums.DisplayTimeTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; import lombok.AllArgsConstructor; @@ -16,7 +17,7 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import java.time.LocalTime; +import java.sql.Time; import java.util.List; /** @@ -90,17 +91,23 @@ public class CreateBannerReq { @Max(value = 120) private float playDuration; + /** + * 展示时间段类型,取值:全天:ALL_DAY,上班时间:WORKING,休息时间:BREAKING,自定义:CUSTOM,默认全天 + */ + @NotNull(message = "展示时间段类型不能为空") + private DisplayTimeTypeEnum displayTimeType = DisplayTimeTypeEnum.ALL_DAY; + /** * 展示时间段-开始时间 */ @NotNull(message = "展示时间段不能为空") - private LocalTime startTime; + private Time startTime; /** * 展示时间段-结束时间 */ @NotNull(message = "展示时间段不能为空") - private LocalTime endTime; + private Time endTime; /** * 长宽比,默认选择不限制,即limit=false 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 959e4576..2dc0ef1b 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 @@ -2,18 +2,20 @@ package cn.axzo.nanopart.api.request; import cn.axzo.nanopart.api.dto.AspectRatioDto; import cn.axzo.nanopart.api.enums.CarouselStatusEnum; +import cn.axzo.nanopart.api.enums.DisplayTimeTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; 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; -import java.time.LocalTime; +import java.sql.Time; /** * @author chenwenjian @@ -36,6 +38,7 @@ public class UpdateBannerReq { /** * 广告位名称 */ + @Length(max = 50) @NotBlank(message = "广告位名称不能为空") private String name; @@ -60,17 +63,23 @@ public class UpdateBannerReq { @Max(value = 120) private float playDuration; + /** + * 展示时间段类型,取值:全天:ALL_DAY,上班时间:WORKING,休息时间:BREAKING,自定义:CUSTOM,默认全天 + */ + @NotNull(message = "展示时间段类型不能为空") + private DisplayTimeTypeEnum displayTimeType = DisplayTimeTypeEnum.ALL_DAY; + /** * 展示时间段-开始时间 */ @NotNull(message = "展示时间段不能为空") - private LocalTime startTime; + private Time startTime; /** * 展示时间段-结束时间 */ @NotNull(message = "展示时间段不能为空") - private LocalTime endTime; + private Time endTime; /** * 长宽比 diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java index 3d89f62e..e534b7d0 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java @@ -1,14 +1,13 @@ package cn.axzo.nanopart.api.response; import cn.axzo.nanopart.api.enums.CarouselStatusEnum; +import cn.axzo.nanopart.api.enums.DisplayTimeTypeEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import java.time.LocalTime; - /** * @author chenwenjian * @version 1.0 @@ -37,14 +36,19 @@ public class DetailBannerResp extends PageBannerResp { */ private float playDuration; + /** + * 展示时间段类型,取值:全天:ALL_DAY,上班时间:WORKING,休息时间:BREAKING,自定义:CUSTOM,默认全天 + */ + private DisplayTimeTypeEnum displayTimeType; + /** * 展示时间段-开始时间 */ - private LocalTime startTime; + private String startTime; /** * 展示时间段-结束时间 */ - private LocalTime endTime; + private String endTime; } 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 226e6f05..35519565 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 @@ -4,6 +4,7 @@ import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.api.MaterialApi; +import cn.axzo.nanopart.api.constant.NanopartConstant; import cn.axzo.nanopart.api.request.CreateMaterialReq; import cn.axzo.nanopart.api.request.DetailMaterialReq; import cn.axzo.nanopart.api.request.ListMaterialByBannerCodeReq; @@ -66,7 +67,7 @@ public class MaterialController implements MaterialApi { @Override public ApiResult> listMaterialByBannerCode(ListMaterialByBannerCodeReq req) { - String traceId = request.getHeader("traceId"); + String traceId = request.getHeader(NanopartConstant.CONTEXT_TRACE_ID); if (Objects.isNull(req.getPersonId()) || req.getPersonId() == 0L){ throw new ServiceException("personId不能为空"); } diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Banner.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Banner.java index f92bb340..90c67baa 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Banner.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Banner.java @@ -1,8 +1,9 @@ package cn.axzo.nanopart.server.domain; -import cn.axzo.nanopart.api.enums.StatusEnum; import cn.axzo.nanopart.api.enums.CarouselStatusEnum; +import cn.axzo.nanopart.api.enums.DisplayTimeTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; +import cn.axzo.nanopart.api.enums.StatusEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -17,7 +18,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; -import java.time.LocalTime; +import java.sql.Time; /** * 运营广告位 @@ -66,17 +67,23 @@ public class Banner extends BaseEntity { @TableField(value = "status") private StatusEnum status; + /** + * 展示时间段类型,取值:全天:ALL_DAY,上班时间:WORKING,休息时间:BREAKING,自定义:CUSTOM + */ + @TableField(value = "display_time_type") + private DisplayTimeTypeEnum displayTimeType; + /** * 展示时间段-开始时间 */ @TableField(value = "start_time") - private LocalTime startTime; + private Time startTime; /** * 展示时间段-结束时间 */ @TableField(value = "end_time") - private LocalTime endTime; + private Time endTime; /** * 轮播状态,取值:OPENED, CLOSED 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 5170c181..0b0e869c 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 @@ -1,6 +1,7 @@ package cn.axzo.nanopart.server.service.impl; import cn.axzo.framework.domain.ServiceException; +import cn.axzo.nanopart.api.enums.DisplayTimeTypeEnum; import cn.axzo.nanopart.api.enums.RecodeTypeEnum; import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq; import cn.axzo.nanopart.api.request.CreateBannerReq; @@ -71,6 +72,9 @@ public class BannerServiceImpl extends ServiceImpl implements // 校验占位图宽高比例 req.getAspectRatio().checkAspectRatio(); + // 展示时间段类型校验 + checkDisplayTimeType(req); + Banner oldBanner = this.selectById(req.getId()); if (Objects.isNull(oldBanner)) { return; @@ -148,6 +152,9 @@ public class BannerServiceImpl extends ServiceImpl implements // 对站点code进行校重 checkBannerCodeDuplicate(req.getCode()); + // 展示时间段类型校验 + checkDisplayTimeType(req); + // 校验占位图宽高比例 req.getAspectRatio().checkAspectRatio(); @@ -215,6 +222,37 @@ public class BannerServiceImpl extends ServiceImpl implements } } + /** + * 校验展示时间段类型 + *

+ * 此处不抽取Create和Update共同类型,所以这么写 + *

+ * + * @param obj {@link CreateBannerReq} 或 {@link UpdateBannerReq}} + */ + private void checkDisplayTimeType(Object obj) { + if (obj instanceof CreateBannerReq) { + CreateBannerReq req = (CreateBannerReq) obj; + if (Objects.equals(req.getDisplayTimeType().getName(), DisplayTimeTypeEnum.CUSTOM.getName())) { + if (Objects.isNull(req.getStartTime()) || Objects.isNull(req.getEndTime())) { + throw new RuntimeException("请设置展示时间段"); + } + } + req.setStartTime(req.getDisplayTimeType().getStartTime()); + req.setEndTime(req.getDisplayTimeType().getEndTime()); + } else if (obj instanceof UpdateBannerReq) { + UpdateBannerReq req = (UpdateBannerReq) obj; + if (Objects.equals(req.getDisplayTimeType().getName(), DisplayTimeTypeEnum.CUSTOM.getName())) { + if (Objects.isNull(req.getStartTime()) || Objects.isNull(req.getEndTime())) { + throw new RuntimeException("请设置展示时间段"); + } + return; + } + req.setStartTime(req.getDisplayTimeType().getStartTime()); + req.setEndTime(req.getDisplayTimeType().getEndTime()); + } + } + /** * 构建分页查询条件 * 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 0009a2d1..6da42125 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 @@ -289,7 +289,7 @@ public class MaterialServiceImpl extends ServiceImpl impl } LocalTime now = LocalTime.now(); // 当前不在广告位配置的展示时间范围内 - if (now.isBefore(banner.getStartTime()) || now.isAfter(banner.getEndTime())) { + if (now.isBefore(banner.getStartTime().toLocalTime()) || now.isAfter(banner.getEndTime().toLocalTime())) { log.warn("当前时间不在广告位配置的展示时间范围内,广告位code:{},当前时间:{},广告位开始时间:{},广告位结束时间:{}", bannerCode, now, banner.getStartTime(), banner.getEndTime()); return null; } From 60a0df3447812907cdbeb807b9b10323d1d19e1e Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 15 Apr 2024 11:45:08 +0800 Subject: [PATCH 07/44] =?UTF-8?q?feat(REQ-2106):=20=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=96=B0=E5=A2=9EmaterialType=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/nanopart/api/request/CreateMaterialReq.java | 6 ++++++ .../java/cn/axzo/nanopart/api/response/MaterialResp.java | 2 +- .../main/java/cn/axzo/nanopart/server/domain/Material.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) 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 7c7bd68f..cc6ea55a 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 @@ -2,6 +2,7 @@ package cn.axzo.nanopart.api.request; import cn.axzo.nanopart.api.enums.MaterialDisplayFrequencyTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTargetUserTypeEnum; +import cn.axzo.nanopart.api.enums.MaterialTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -68,6 +69,11 @@ public class CreateMaterialReq { */ private StatusEnum status; + /** + * 素材类型,取值:IMAGE, VIDEO, APPLET + */ + private MaterialTypeEnum materialType; + /** * 占位图,支持jpg、jpeg、png、gif,限定大小为200k * eg: { 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 cd5047db..0588993d 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 @@ -27,7 +27,7 @@ import java.util.List; public class MaterialResp extends PageMaterialResp { /** - * 素材类型,取值:IMAGE, VIDEO, APPLET + * 素材类型,取值:IMAGE, VIDEO, AUDIO */ private MaterialTypeEnum materialType; diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java index 801c60d4..2008d0e9 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java @@ -72,7 +72,7 @@ public class Material extends BaseEntity { private StatusEnum status; /** - * 素材类型,取值:IMAGE, VIDEO, APPLET + * 素材类型,取值:IMAGE, VIDEO, AUDIO */ @TableField(value = "material_type") private MaterialTypeEnum materialType; From 9cc2c60ca9818d9e289e4a63f6fa9002e0c702e2 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Tue, 16 Apr 2024 12:32:42 +0800 Subject: [PATCH 08/44] =?UTF-8?q?feat(REQ-2106):=20=E8=B0=83=E6=95=B4jumpU?= =?UTF-8?q?rl=E7=B1=BB=E5=9E=8B=E5=92=8C=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JSONObject->JSONArray --- .../request/CreateApplicationVersionReq.java | 25 +++++++-------- .../api/request/CreateMaterialReq.java | 32 ++++++++----------- .../request/UpdateApplicationVersionReq.java | 17 +++++++--- .../nanopart/api/response/MaterialResp.java | 28 ++++++++-------- .../response/PageApplicationVersionResp.java | 18 ++++++++--- .../server/domain/ApplicationVersion.java | 17 +++++++--- .../axzo/nanopart/server/domain/Material.java | 28 ++++++++-------- 7 files changed, 90 insertions(+), 75 deletions(-) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java index 9c2e8805..8c25823d 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/CreateApplicationVersionReq.java @@ -2,7 +2,7 @@ package cn.axzo.nanopart.api.request; import cn.axzo.nanopart.api.enums.OpSystemTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSONArray; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -58,19 +58,18 @@ public class CreateApplicationVersionReq { /** * 跳转地址 * eg: - * { - * "PC": { - * "H5": "http://www.baidu.com/defalut.html", - * "Web": "http://www.baidu.com/default.html" - * }, - * "APP": { - * "H5": "http://www.baidu.com/defalut.html", - * "iOS": "http://www.baidu.com/default.html", - * "Android": "http://www.baidu.com/default.html" - * } - * } + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 更新后是否弹窗提醒,0不提醒,1提醒,默认0 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 cc6ea55a..9b71dadc 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 @@ -2,8 +2,8 @@ package cn.axzo.nanopart.api.request; import cn.axzo.nanopart.api.enums.MaterialDisplayFrequencyTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTargetUserTypeEnum; -import cn.axzo.nanopart.api.enums.MaterialTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import lombok.Builder; @@ -70,8 +70,7 @@ public class CreateMaterialReq { private StatusEnum status; /** - * 素材类型,取值:IMAGE, VIDEO, APPLET - */ + * 素材类型,取值:IMAGE, VIDEO, AUDIO private MaterialTypeEnum materialType; /** @@ -99,22 +98,19 @@ public class CreateMaterialReq { /** * 跳转地址 - * eg: { - * "APP": { - * "Android": "http://www.baidu.com/defalut.html", - * "iOS": "http://www.baidu.com/defalut.html", - * "h5": "http://www.baidu.com/defalut.html" - * }, - * "Applet": { - * "applet": "http://www.baidu.com/defalut.html", - * "h5": "http://www.baidu.com/defalut.html" - * }, - * "PC": { - * "h5": "http://www.baidu.com/defalut.html" - * } - * } + * eg: + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 目标投放对象类型呢,取值:ALL_USER, PROJECT, UNIT diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateApplicationVersionReq.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateApplicationVersionReq.java index 7e2f51ab..d9d2eec3 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateApplicationVersionReq.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/request/UpdateApplicationVersionReq.java @@ -1,6 +1,6 @@ package cn.axzo.nanopart.api.request; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSONArray; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -46,11 +46,18 @@ public class UpdateApplicationVersionReq { /** * 跳转地址 - * eg: { - * "H5": "http://www.baidu.com/defalut.html" - * } + * eg: [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 更新后是否弹窗提醒,0不提醒,1提醒,默认0 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 0588993d..fbdd46a2 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 @@ -3,6 +3,7 @@ package cn.axzo.nanopart.api.response; import cn.axzo.nanopart.api.enums.MaterialDisplayFrequencyTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTargetUserTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTypeEnum; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import lombok.Builder; @@ -53,22 +54,19 @@ public class MaterialResp extends PageMaterialResp { /** * 跳转地址 - * eg: { - * "APP": { - * "Android": "http://www.baidu.com/defalut.html", - * "iOS": "http://www.baidu.com/defalut.html", - * "h5": "http://www.baidu.com/defalut.html" - * }, - * "Applet": { - * "applet": "http://www.baidu.com/defalut.html", - * "h5": "http://www.baidu.com/defalut.html" - * }, - * "PC": { - * "h5": "http://www.baidu.com/defalut.html" - * } - * } + * eg: + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 目标投放对象类型呢,取值:ALL_USER, PROJECT, UNIT diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java index 1cdef1ef..8dae672a 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java @@ -2,7 +2,7 @@ package cn.axzo.nanopart.api.response; import cn.axzo.nanopart.api.enums.OpSystemTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSONArray; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -54,11 +54,19 @@ public class PageApplicationVersionResp { /** * 跳转地址 - * eg: { - * "H5": "http://www.baidu.com/defalut.html" - * } + * eg: + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 更新后是否弹窗提醒,0不提醒,1提醒,默认0 diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersion.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersion.java index 18232ccb..eefe4e14 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersion.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/ApplicationVersion.java @@ -3,6 +3,7 @@ package cn.axzo.nanopart.server.domain; import cn.axzo.nanopart.api.enums.OpSystemTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -64,12 +65,20 @@ public class ApplicationVersion extends BaseEntity { /** * 跳转地址 - * eg: { - * "H5": "http://www.baidu.com/defalut.html" - * } + * eg: + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ @TableField(value = "jump_url", typeHandler = FastjsonTypeHandler.class) - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 更新后是否弹窗提醒,0不提醒,1提醒,默认0 diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java index 2008d0e9..54b40a3c 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/domain/Material.java @@ -6,6 +6,7 @@ import cn.axzo.nanopart.api.enums.MaterialTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.pokonyan.config.mybatisplus.type.LongListTypeHandler; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -103,23 +104,20 @@ public class Material extends BaseEntity { /** * 跳转地址 - * eg: { - * "APP": { - * "Android": "http://www.baidu.com/defalut.html", - * "iOS": "http://www.baidu.com/defalut.html", - * "h5": "http://www.baidu.com/defalut.html" - * }, - * "Applet": { - * "applet": "http://www.baidu.com/defalut.html", - * "h5": "http://www.baidu.com/defalut.html" - * }, - * "PC": { - * "h5": "http://www.baidu.com/defalut.html" - * } - * } + * eg: + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ @TableField(value = "jump_url", typeHandler = FastjsonTypeHandler.class) - private JSONObject jumpUrl; + private JSONArray jumpUrl; /** * 目标投放对象类型呢,取值:ALL_USER, PROJECT, UNIT From 74789207bc57a53ee9c72dae0609b40b0d2b513e Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Tue, 16 Apr 2024 14:18:31 +0800 Subject: [PATCH 09/44] =?UTF-8?q?feat(REQ-2106):=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E7=A4=BA=E8=BF=94=E5=9B=9EjumpUrl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetVersionUpdateRemindContentResp.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java index 4113bce8..8b08c237 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/GetVersionUpdateRemindContentResp.java @@ -2,6 +2,7 @@ package cn.axzo.nanopart.api.response; import cn.axzo.nanopart.api.enums.OpSystemTypeEnum; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; +import com.alibaba.fastjson.JSONArray; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -49,6 +50,22 @@ public class GetVersionUpdateRemindContentResp { */ private String description; + /** + * 跳转地址 + * eg: + * [ + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] + */ + private JSONArray jumpUrl; + /** * 图片地址url */ From cfafafe137609dfe0860852c91ecaf2d8948a8d3 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Tue, 16 Apr 2024 15:05:20 +0800 Subject: [PATCH 10/44] =?UTF-8?q?feat(REQ-2106):=20=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=89=88=E6=9C=AC=E6=9E=9A=E4=B8=BE=E5=80=BC?= =?UTF-8?q?=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/enums/OpSystemTypeEnum.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/OpSystemTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/OpSystemTypeEnum.java index 004f6042..094aa5b7 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/OpSystemTypeEnum.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/OpSystemTypeEnum.java @@ -17,9 +17,9 @@ import java.util.Arrays; @AllArgsConstructor public enum OpSystemTypeEnum { - ANDROID("Android", "安卓"), + ANDROID("ANDROID", "安卓"), - IOS("iOS", "苹果"), + IOS("IOS", "苹果"), PC("PC", "电脑"); From cfed4d69fdf4a775275b364c4df6f5ad15b4a2a0 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 13:04:31 +0800 Subject: [PATCH 11/44] =?UTF-8?q?feat(REQ-2106):=20=E8=81=94=E8=B0=83?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. banner详情展示时间段格式调整 2. 素材详情展示终端字段返回 --- .../java/cn/axzo/nanopart/api/MaterialApi.java | 3 --- .../nanopart/api/response/DetailBannerResp.java | 6 ++++-- .../axzo/nanopart/api/response/MaterialResp.java | 16 ++++++++++++++++ .../server/service/impl/BannerServiceImpl.java | 4 ++++ .../server/service/impl/MaterialServiceImpl.java | 15 ++++++++++++++- 5 files changed, 38 insertions(+), 6 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 ec3a44d8..ebe5528c 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 @@ -73,9 +73,6 @@ public interface MaterialApi { /** * 根据广告位编码(bannerCode)查询素材 *

- * 对于cms和cmp需要传入当前登录人所在的workspaceId,ouId和所担任的jobCode - *

- *

* 1. 通过广告位code获取该广告位下的所有素材(默认查询上架状态且在有效期范围内的素材) * 2. 根据广告位投放人群进行过滤 * 3. 根据广告位投放规则频次进行过滤 diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java index e534b7d0..b1c4e18f 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java @@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.sql.Time; + /** * @author chenwenjian * @version 1.0 @@ -44,11 +46,11 @@ public class DetailBannerResp extends PageBannerResp { /** * 展示时间段-开始时间 */ - private String startTime; + private Time startTime; /** * 展示时间段-结束时间 */ - private String endTime; + private Time endTime; } 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 fbdd46a2..2e44a4be 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 @@ -3,6 +3,7 @@ package cn.axzo.nanopart.api.response; import cn.axzo.nanopart.api.enums.MaterialDisplayFrequencyTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTargetUserTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTypeEnum; +import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -12,6 +13,7 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.Date; import java.util.List; /** @@ -111,4 +113,18 @@ public class MaterialResp extends PageMaterialResp { */ private Long updateBy; + /** + * 所属终端,取值:CMS:安心筑CMS,CM,CMP:安心筑工人端APP,安心筑管理端APP + *

+ * 素材 + *

+ * {@link PlatformTypeEnum} + */ + private PlatformTypeEnum terminal; + + /** + * 创建时间 + */ + protected Date createAt; + } 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 0b0e869c..223d2a66 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 @@ -233,11 +233,14 @@ public class BannerServiceImpl extends ServiceImpl implements private void checkDisplayTimeType(Object obj) { if (obj instanceof CreateBannerReq) { CreateBannerReq req = (CreateBannerReq) obj; + // 为自定义时间段 if (Objects.equals(req.getDisplayTimeType().getName(), DisplayTimeTypeEnum.CUSTOM.getName())) { if (Objects.isNull(req.getStartTime()) || Objects.isNull(req.getEndTime())) { throw new RuntimeException("请设置展示时间段"); } + return; } + // 此处为防止选定展示时间段类型后又手动设置了起止时间 req.setStartTime(req.getDisplayTimeType().getStartTime()); req.setEndTime(req.getDisplayTimeType().getEndTime()); } else if (obj instanceof UpdateBannerReq) { @@ -248,6 +251,7 @@ public class BannerServiceImpl extends ServiceImpl implements } return; } + // 此处为防止选定展示时间段类型后又手动设置了起止时间 req.setStartTime(req.getDisplayTimeType().getStartTime()); req.setEndTime(req.getDisplayTimeType().getEndTime()); } 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 6da42125..52f1595a 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 @@ -265,7 +265,20 @@ public class MaterialServiceImpl extends ServiceImpl impl if (Objects.isNull(req.getId()) || req.getId() == 0) { return null; } - return BeanUtil.copyProperties(getById(req.getId()), MaterialResp.class); + + Material material = getById(req.getId()); + if (Objects.isNull(material)){ + return null; + } + // 获取所属广告位 + Banner banner = bannerService.selectByCode(material.getBannerCode()); + if (Objects.isNull(banner)){ + log.warn("广告位不存在,广告位code:{},素材id:{}", material.getBannerCode(),material.getId()); + throw new ServiceException("数据异常"); + } + MaterialResp materialResp = BeanUtil.copyProperties(material, MaterialResp.class); + materialResp.setTerminal(banner.getTerminal()); + return materialResp; } /** From 29c0fb950d8e2412aa2c77ec42690826595b5449 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 13:36:20 +0800 Subject: [PATCH 12/44] feat(REQ-2106): Time->Long --- .../cn/axzo/nanopart/api/response/DetailBannerResp.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java index b1c4e18f..e358c351 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/DetailBannerResp.java @@ -8,8 +8,6 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import java.sql.Time; - /** * @author chenwenjian * @version 1.0 @@ -46,11 +44,11 @@ public class DetailBannerResp extends PageBannerResp { /** * 展示时间段-开始时间 */ - private Time startTime; + private Long startTime; /** * 展示时间段-结束时间 */ - private Time endTime; + private Long endTime; } From 67bd674bcaed3fff04e3519fec7088923fe702ee Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 19:32:16 +0800 Subject: [PATCH 13/44] feat(REQ-2106): Time->Long --- .../axzo/nanopart/api/enums/DisplayTimeTypeEnum.java | 10 +++++----- .../cn/axzo/nanopart/api/request/CreateBannerReq.java | 7 ++----- .../cn/axzo/nanopart/api/request/UpdateBannerReq.java | 7 ++----- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java index 03156b11..97fdd80c 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/DisplayTimeTypeEnum.java @@ -18,18 +18,18 @@ import java.util.Arrays; @AllArgsConstructor public enum DisplayTimeTypeEnum { - ALL_DAY("ALL_DAY", "全天", Time.valueOf("00:00:00"), Time.valueOf("23:59:59")), - WORKING("WORKING", "上班时间(5:00-18:00)", Time.valueOf("05:00:00"), Time.valueOf("18:00:00")), - BREAKING("BREAKING", "休息时间(18:00-22:00)", Time.valueOf("18:00:00"), Time.valueOf("22:00:00")), + ALL_DAY("ALL_DAY", "全天", Time.valueOf("00:00:00").getTime(), Time.valueOf("23:59:59").getTime()), + WORKING("WORKING", "上班时间(5:00-18:00)", Time.valueOf("05:00:00").getTime(), Time.valueOf("18:00:00").getTime()), + BREAKING("BREAKING", "休息时间(18:00-22:00)", Time.valueOf("18:00:00").getTime(), Time.valueOf("22:00:00").getTime()), CUSTOM("CUSTOM", "自定义", null, null); private final String name; private final String desc; - private final Time startTime; + private final Long startTime; - private final Time endTime; + private final Long endTime; public static DisplayTimeTypeEnum getType(String name) { if (StringUtils.isEmpty(name)) { 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 c0cb5eb6..ee205877 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 @@ -17,7 +17,6 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import java.sql.Time; import java.util.List; /** @@ -100,14 +99,12 @@ public class CreateBannerReq { /** * 展示时间段-开始时间 */ - @NotNull(message = "展示时间段不能为空") - private Time startTime; + private Long startTime; /** * 展示时间段-结束时间 */ - @NotNull(message = "展示时间段不能为空") - private Time endTime; + private Long endTime; /** * 长宽比,默认选择不限制,即limit=false 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 2dc0ef1b..7264def1 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 @@ -15,7 +15,6 @@ import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; -import java.sql.Time; /** * @author chenwenjian @@ -72,14 +71,12 @@ public class UpdateBannerReq { /** * 展示时间段-开始时间 */ - @NotNull(message = "展示时间段不能为空") - private Time startTime; + private Long startTime; /** * 展示时间段-结束时间 */ - @NotNull(message = "展示时间段不能为空") - private Time endTime; + private Long endTime; /** * 长宽比 From 82cafe61af28d417a750072fd8640125a8424076 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 20:11:23 +0800 Subject: [PATCH 14/44] =?UTF-8?q?feat(REQ-2106):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=BA=BA=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../response/PageBannerOperationLogResp.java | 2 +- banner/banner-server/pom.xml | 5 ++ .../nanopart/server/rpc/ProfileGateway.java | 63 +++++++++++++++++++ .../impl/BannerOperationLogServiceImpl.java | 23 ++++++- .../service/impl/BannerServiceImpl.java | 5 +- 5 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/rpc/ProfileGateway.java 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 a7d42bd2..c01c969f 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,7 @@ public class PageBannerOperationLogResp { /** * 操作人 */ - private Long updateBy; + private String updateBy; /** * 操作类型 diff --git a/banner/banner-server/pom.xml b/banner/banner-server/pom.xml index 64eb92b9..639ccf06 100644 --- a/banner/banner-server/pom.xml +++ b/banner/banner-server/pom.xml @@ -74,5 +74,10 @@ cn.axzo.maokai maokai-api + + + cn.axzo.basics + basics-profiles-api + diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/rpc/ProfileGateway.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/rpc/ProfileGateway.java new file mode 100644 index 00000000..6843625a --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/rpc/ProfileGateway.java @@ -0,0 +1,63 @@ +package cn.axzo.nanopart.server.rpc; + +import cn.axzo.basics.profiles.api.UserProfileServiceApi; +import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; +import cn.azxo.framework.common.logger.MethodAroundLog; +import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.collection.CollectionUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @author chenwenjian + * @version 1.0 + * @date 2024/4/17 19:39 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ProfileGateway { + + private final UserProfileServiceApi userProfileServiceApi; + + /** + * 通过personId获取用户档案 + * + * @param personId + * @return + */ + @MethodAroundLog(target = "pudge", source = "nanopart", value = "获取用户档案") + public PersonProfileDto getProfile(Long personId) { + if (Objects.isNull(personId)) { + return null; + } + CommonResponse personProfile = userProfileServiceApi.getPersonProfile(personId); + if (Objects.nonNull(personProfile) && personProfile.getCode() == 200) { + return personProfile.getData(); + } + return null; + } + + /** + * 通过personId获取用户档案 + * + * @param personIds + * @return + */ + @MethodAroundLog(target = "pudge", source = "nanopart", value = "获取用户档案") + public List getProfiles(List personIds) { + if (CollectionUtil.isEmpty(personIds)) { + return Collections.emptyList(); + } + CommonResponse> personProfiles = userProfileServiceApi.getPersonProfiles(personIds); + if (Objects.nonNull(personProfiles) && personProfiles.getCode() == 200) { + return personProfiles.getData(); + } + return Collections.emptyList(); + } +} 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 4d5b78dd..74564d62 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,10 +1,14 @@ 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; @@ -15,7 +19,11 @@ 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 @@ -26,6 +34,9 @@ import java.util.Objects; @Service @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); @@ -46,7 +57,17 @@ public class BannerOperationLogServiceImpl extends ServiceImpl(); } - return PageConverter.convert(logPage, record -> BeanUtil.copyProperties(record, PageBannerOperationLogResp.class)); + 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()); + })); } /** 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 223d2a66..f805e38c 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 @@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.sql.Time; import java.util.Objects; /** @@ -288,8 +289,8 @@ 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::getStartTime, req.getStartTime()) - .set(Banner::getEndTime, req.getEndTime()) + .set(Banner::getStartTime, new Time(req.getStartTime())) + .set(Banner::getEndTime, new Time(req.getEndTime())) .set(Banner::getAspectRatio, JSONUtil.toJsonStr(req.getAspectRatio())) .set(Banner::getUpdateBy, req.getUpdateBy()); } From 15b49b18ca47221095dd7ace3548228ecc6eeaa3 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 20:47:43 +0800 Subject: [PATCH 15/44] =?UTF-8?q?feat(REQ-2106):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=BA=BA=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constant/NanopartConstant.java | 5 ++++ .../response/PageApplicationVersionResp.java | 2 +- .../common/ApplicationVersionValidator.java | 29 +++++++++++++++++++ .../impl/ApplicationVersionServiceImpl.java | 23 ++++++++++++++- .../service/impl/BannerServiceImpl.java | 7 +++++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 banner/banner-server/src/main/java/cn/axzo/nanopart/server/common/ApplicationVersionValidator.java diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java index 191d17d1..633285d6 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java @@ -15,4 +15,9 @@ public class NanopartConstant { * 请求上下文日志ID */ public static final String CONTEXT_TRACE_ID = "ctxLogId"; + + /** + * 版本号简单校验正则表达式 + */ + public static final String VERSION_SIMPLE_PATTERN = "^\\d+\\.\\d+\\.\\d+$"; } \ No newline at end of file diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java index 8dae672a..30380e15 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/response/PageApplicationVersionResp.java @@ -81,5 +81,5 @@ public class PageApplicationVersionResp { /** * 更新人 */ - private Long updateBy; + private String updateBy; } 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 new file mode 100644 index 00000000..45007398 --- /dev/null +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/common/ApplicationVersionValidator.java @@ -0,0 +1,29 @@ +package cn.axzo.nanopart.server.common; + +import cn.axzo.framework.domain.ServiceException; +import cn.axzo.nanopart.api.constant.NanopartConstant; +import org.apache.commons.lang3.StringUtils; + +/** + * TODO 待统一优化,需要统一版本号命名规则 + * 版本号规则校验器 + * + * @author chenwenjian + * @version 1.0 + * @date 2024/4/17 20:21 + */ +public class ApplicationVersionValidator { + + /** + * 对给定版本号进行简单正则校验 + * + * @param version 版本号 + */ + public static void checkVersionSimple(String version) { + if (StringUtils.isNotBlank(version)) { + if (!NanopartConstant.VERSION_SIMPLE_PATTERN.matches(version)) { + throw new ServiceException("请输入正确的版本号"); + } + } + } +} diff --git a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java index 9aa4174b..e18ba6d5 100644 --- a/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java +++ b/banner/banner-server/src/main/java/cn/axzo/nanopart/server/service/impl/ApplicationVersionServiceImpl.java @@ -1,5 +1,8 @@ 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.framework.domain.ServiceException; import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import cn.axzo.nanopart.api.request.CreateApplicationVersionReadLogReq; @@ -12,6 +15,7 @@ import cn.axzo.nanopart.api.response.PageApplicationVersionResp; import cn.axzo.nanopart.server.domain.ApplicationVersion; import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog; import cn.axzo.nanopart.server.mapper.ApplicationVersionDao; +import cn.axzo.nanopart.server.rpc.ProfileGateway; import cn.axzo.nanopart.server.service.ApplicationVersionReadLogService; import cn.axzo.nanopart.server.service.ApplicationVersionService; import cn.axzo.pokonyan.dao.converter.PageConverter; @@ -29,7 +33,11 @@ import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author chenwenjian @@ -44,6 +52,8 @@ public class ApplicationVersionServiceImpl extends ServiceImpl(); } - return PageConverter.convert(versionPage, record -> BeanUtil.copyProperties(record, PageApplicationVersionResp.class)); + + List personIds = versionPage.getRecords().stream() + .map(ApplicationVersion::getUpdateBy) + .distinct() + .collect(Collectors.toList()); + + List profiles = profileGateway.getProfiles(personIds); + Map personProfileDtoMap = profiles.stream().collect(Collectors.toMap(BasicDto::getId, Function.identity())); + return PageConverter.convert(versionPage, record -> BeanMapper.copyBean(record, PageApplicationVersionResp.class, (source, target) -> { + PersonProfileDto person = personProfileDtoMap.get(source.getUpdateBy()); + target.setUpdateBy(Objects.isNull(person.getRealName())? "-" : person.getRealName()); + })); } /** 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 f805e38c..e04d924d 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 @@ -2,6 +2,7 @@ package cn.axzo.nanopart.server.service.impl; import cn.axzo.framework.domain.ServiceException; import cn.axzo.nanopart.api.enums.DisplayTimeTypeEnum; +import cn.axzo.nanopart.api.enums.PlatformTypeEnum; import cn.axzo.nanopart.api.enums.RecodeTypeEnum; import cn.axzo.nanopart.api.request.CreateBannerOperationLogReq; import cn.axzo.nanopart.api.request.CreateBannerReq; @@ -11,6 +12,7 @@ import cn.axzo.nanopart.api.request.UpdateBannerReq; import cn.axzo.nanopart.api.request.UpdateStatusReq; import cn.axzo.nanopart.api.response.DetailBannerResp; import cn.axzo.nanopart.api.response.PageBannerResp; +import cn.axzo.nanopart.server.common.ApplicationVersionValidator; import cn.axzo.nanopart.server.domain.Banner; import cn.axzo.nanopart.server.mapper.BannerDao; import cn.axzo.nanopart.server.service.BannerOperationLogService; @@ -156,6 +158,11 @@ public class BannerServiceImpl extends ServiceImpl implements // 展示时间段类型校验 checkDisplayTimeType(req); + if (PlatformTypeEnum.CM.getName().equals(req.getTerminal().getName()) || PlatformTypeEnum.CMP.getName().equals(req.getTerminal().getName())){ + ApplicationVersionValidator.checkVersionSimple(req.getIosVersion()); + ApplicationVersionValidator.checkVersionSimple(req.getAndroidVersion()); + } + // 校验占位图宽高比例 req.getAspectRatio().checkAspectRatio(); From 978f8761d11a1179ff73543bcef6077d6f559529 Mon Sep 17 00:00:00 2001 From: jinhaiyang Date: Wed, 17 Apr 2024 21:35:43 +0800 Subject: [PATCH 16/44] fix --- .../cn/axzo/nanopart/api/request/UpdateBannerReq.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 7264def1..d74c0108 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 @@ -78,6 +78,16 @@ public class UpdateBannerReq { */ private Long endTime; + /** + * iOS适配版本,搭配展示终端(terminal)为APP时使用 + */ + private String iosVersion; + + /** + * Android适配版本,搭配展示终端(terminal)为APP时使用 + */ + private String androidVersion; + /** * 长宽比 */ From e6ee938c9a4dfaa52d86028ea93df3b2efe92805 Mon Sep 17 00:00:00 2001 From: jinhaiyang Date: Wed, 17 Apr 2024 21:46:32 +0800 Subject: [PATCH 17/44] fix --- .../cn/axzo/nanopart/api/enums/RecodeTypeEnum.java | 4 ++-- .../api/response/PageBannerOperationLogResp.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/RecodeTypeEnum.java b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/RecodeTypeEnum.java index bd8ab20c..032d14b5 100644 --- a/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/RecodeTypeEnum.java +++ b/banner/banner-api/src/main/java/cn/axzo/nanopart/api/enums/RecodeTypeEnum.java @@ -15,9 +15,9 @@ import java.util.Arrays; @AllArgsConstructor public enum RecodeTypeEnum { - BANNER("BANNER", "广告位操作类型"), + BANNER("BANNER", "广告"), - MATERIAL("MATERIAL", "素材操作类型"), + MATERIAL("MATERIAL", "素材"), ; private final String type; 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 c01c969f..4bdafede 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 @@ -58,4 +58,14 @@ public class PageBannerOperationLogResp { * 旧数据 */ private JSONObject oldData; + + /** + * 操作类型 + */ + private String operationTypeDesc; + + /** + * 操作内容 + */ + private String operationContent; } From beb9bcbca46938b4bca2f5b6ae30e8e234e0e37e Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 21:51:46 +0800 Subject: [PATCH 18/44] =?UTF-8?q?feat(REQ-2106):=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=83=A8=E6=88=96=E5=B2=97=E4=BD=8D=E5=AD=97=E6=AE=B5=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/nanopart/api/response/MaterialResp.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 2e44a4be..20b21fee 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 @@ -125,6 +125,16 @@ public class MaterialResp extends PageMaterialResp { /** * 创建时间 */ - protected Date createAt; + private Date createAt; + + /** + * 目标投放项目部或企业 + */ + private String targetWorkspaceOrUnit; + + /** + * 目标投放岗位 + */ + private String targetUserJobCode; } From 403303289e51fd8bbfa6d4f5ce7681a042605bb2 Mon Sep 17 00:00:00 2001 From: jinhaiyang Date: Wed, 17 Apr 2024 21:55:35 +0800 Subject: [PATCH 19/44] fix --- .../cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) 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 e04d924d..d37dc697 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 @@ -299,6 +299,8 @@ public class BannerServiceImpl extends ServiceImpl implements .set(Banner::getStartTime, new Time(req.getStartTime())) .set(Banner::getEndTime, new Time(req.getEndTime())) .set(Banner::getAspectRatio, JSONUtil.toJsonStr(req.getAspectRatio())) + .set(Banner::getIosVersion, JSONUtil.toJsonStr(req.getIosVersion())) + .set(Banner::getAndroidVersion, JSONUtil.toJsonStr(req.getAndroidVersion())) .set(Banner::getUpdateBy, req.getUpdateBy()); } } From eaacd4c79bb75e145b7f42fa6c9c63c5fd881349 Mon Sep 17 00:00:00 2001 From: jinhaiyang Date: Wed, 17 Apr 2024 22:05:22 +0800 Subject: [PATCH 20/44] buildUpdateLambdaQueryWrapper --- .../nanopart/server/service/impl/BannerServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 d37dc697..812cd8dc 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,9 +298,9 @@ public class BannerServiceImpl extends ServiceImpl implements .set(Banner::getPlayDuration, req.getPlayDuration()) .set(Banner::getStartTime, new Time(req.getStartTime())) .set(Banner::getEndTime, new Time(req.getEndTime())) - .set(Banner::getAspectRatio, JSONUtil.toJsonStr(req.getAspectRatio())) - .set(Banner::getIosVersion, JSONUtil.toJsonStr(req.getIosVersion())) - .set(Banner::getAndroidVersion, JSONUtil.toJsonStr(req.getAndroidVersion())) + .set(Banner::getAspectRatio, req.getAspectRatio()) + .set(Banner::getIosVersion, req.getIosVersion()) + .set(Banner::getAndroidVersion, req.getAndroidVersion()) .set(Banner::getUpdateBy, req.getUpdateBy()); } } From e9abf89e2c710b6a990eb8f6594043d399b202d0 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 22:09:27 +0800 Subject: [PATCH 21/44] feat(REQ-2106): materialType --- .../api/request/CreateMaterialReq.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) 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 9b71dadc..1c6056ae 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 @@ -2,6 +2,7 @@ package cn.axzo.nanopart.api.request; import cn.axzo.nanopart.api.enums.MaterialDisplayFrequencyTypeEnum; import cn.axzo.nanopart.api.enums.MaterialTargetUserTypeEnum; +import cn.axzo.nanopart.api.enums.MaterialTypeEnum; import cn.axzo.nanopart.api.enums.StatusEnum; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -71,6 +72,7 @@ public class CreateMaterialReq { /** * 素材类型,取值:IMAGE, VIDEO, AUDIO + */ private MaterialTypeEnum materialType; /** @@ -100,15 +102,15 @@ public class CreateMaterialReq { * 跳转地址 * eg: * [ - * { - * "label": "H5", - * "value": "http://www.baidu.com/defalut.html" - * }, - * { - * "label": "iOS", - * "value": "http://www.baidu.com/defalut.html" - * } - * ] + * { + * "label": "H5", + * "value": "http://www.baidu.com/defalut.html" + * }, + * { + * "label": "iOS", + * "value": "http://www.baidu.com/defalut.html" + * } + * ] */ private JSONArray jumpUrl; From 9199677115398b0670579dea381f469e91f963b4 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 22:22:48 +0800 Subject: [PATCH 22/44] feat(REQ-2106): aspectRatio --- .../cn/axzo/nanopart/server/service/impl/BannerServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 812cd8dc..4ab77627 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,7 +298,7 @@ public class BannerServiceImpl extends ServiceImpl implements .set(Banner::getPlayDuration, req.getPlayDuration()) .set(Banner::getStartTime, new Time(req.getStartTime())) .set(Banner::getEndTime, new Time(req.getEndTime())) - .set(Banner::getAspectRatio, req.getAspectRatio()) + .set(Banner::getAspectRatio, JSONUtil.toJsonStr(req.getAspectRatio())) .set(Banner::getIosVersion, req.getIosVersion()) .set(Banner::getAndroidVersion, req.getAndroidVersion()) .set(Banner::getUpdateBy, req.getUpdateBy()); From 47928d8a667c726bab2b666cfe2684b638100c23 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 17 Apr 2024 22:39:08 +0800 Subject: [PATCH 23/44] feat(REQ-2106): TatgetUserEnum --- .../cn/axzo/nanopart/api/enums/MaterialTargetUserTypeEnum.java | 2 +- 1 file changed, 1 insertion(+), 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 3597c7cc..4be9226b 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 @@ -22,7 +22,7 @@ import java.util.stream.Collectors; @AllArgsConstructor public enum MaterialTargetUserTypeEnum { - ALL("ALL_USER", "全部用户") { + ALL("ALL", "全部用户") { @Override public boolean isDeliverRequired(List workspaceIds, List ouIds, List jobCodes, JoinedWorkspaceOuJob workspaceOuJob) { return true; From abd891330f11642ba98f4ec7a5914ff033459ce1 Mon Sep 17 00:00:00 2001 From: chenwenjian 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;