From 0e658f35b9f4cb28867cd0d53fb8ee6d42517d68 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 6 Aug 2024 16:26:14 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=A0=87=E7=AD=BE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=97=B6=E6=95=88=E6=80=A7=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/model/dto/TargetObjectDTO.java | 6 + .../tag/controller/TagDataController.java | 198 +++++++++++++++++- .../qs/serve/modules/tag/entity/TagData.java | 9 + .../modules/tag/entity/bo/TagInfoBind2Bo.java | 42 ++++ .../modules/tag/entity/bo/TagInfoBo.java | 1 + .../modules/tag/entity/bo/TagItem2Bo.java | 24 +++ .../modules/tag/entity/bo/TagItemBo.java | 31 +++ .../tag/entity/bo/TagTargetObject2Bo.java | 28 +++ .../tag/entity/bo/TagTargetObject3Bo.java | 32 +++ .../tag/entity/bo/TagTargetObjectBo.java | 20 ++ 10 files changed, 383 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBind2Bo.java create mode 100644 src/main/java/com/qs/serve/modules/tag/entity/bo/TagItem2Bo.java create mode 100644 src/main/java/com/qs/serve/modules/tag/entity/bo/TagItemBo.java create mode 100644 src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject2Bo.java create mode 100644 src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject3Bo.java create mode 100644 src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObjectBo.java diff --git a/src/main/java/com/qs/serve/common/model/dto/TargetObjectDTO.java b/src/main/java/com/qs/serve/common/model/dto/TargetObjectDTO.java index f2ea3331..86a52546 100644 --- a/src/main/java/com/qs/serve/common/model/dto/TargetObjectDTO.java +++ b/src/main/java/com/qs/serve/common/model/dto/TargetObjectDTO.java @@ -1,7 +1,11 @@ package com.qs.serve.common.model.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; /** * @author YenHex @@ -9,9 +13,11 @@ import lombok.Data; */ @Data public class TargetObjectDTO { + String targetType; String targetId; String targetCode; String targetName; + } diff --git a/src/main/java/com/qs/serve/modules/tag/controller/TagDataController.java b/src/main/java/com/qs/serve/modules/tag/controller/TagDataController.java index ec3854b7..40dcf424 100644 --- a/src/main/java/com/qs/serve/modules/tag/controller/TagDataController.java +++ b/src/main/java/com/qs/serve/modules/tag/controller/TagDataController.java @@ -3,7 +3,6 @@ package com.qs.serve.modules.tag.controller; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.annotation.SysLog; -import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.TargetObjectDTO; import com.qs.serve.common.model.enums.BizType; @@ -11,7 +10,6 @@ import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.PageUtil; -import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.bms.entity.BmsChannel; import com.qs.serve.modules.bms.entity.BmsChannelPoint; import com.qs.serve.modules.bms.entity.BmsSupplier; @@ -23,23 +21,18 @@ import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tag.TagTypeConst; import com.qs.serve.modules.tag.entity.TagData; import com.qs.serve.modules.tag.entity.TagInfo; -import com.qs.serve.modules.tag.entity.bo.TagInfoApiBindBo; -import com.qs.serve.modules.tag.entity.bo.TagInfoBindBo; -import com.qs.serve.modules.tag.entity.bo.TagInfoBo; +import com.qs.serve.modules.tag.entity.bo.*; import com.qs.serve.modules.tag.entity.so.TagDataSo; -import com.qs.serve.modules.tag.entity.so.TagInfoSo; import com.qs.serve.modules.tag.entity.vo.TagDataVo; import com.qs.serve.modules.tag.service.TagDataService; import com.qs.serve.modules.tag.service.TagInfoService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -86,6 +79,55 @@ public class TagDataController { return R.ok(tagDataVoList); } + /** + * 获取标签数据(PAGE) + * @param query + * @return + */ + @GetMapping("batchQueryPage") + public R queryBatchPage(TagData query){ + PageUtil.startPage(); + List tagDataList = tagDataService.selectList(query); + return R.byPageHelperList(tagDataList); + } + + /** + * Id查询 + * @param id + * @return + */ + @GetMapping("getById/{id}") + public R getById(@PathVariable String id){ + TagData data = tagDataService.getById(id); + return R.ok(data); + } + + /** + * Id更新 + * @param param + * @return + */ + @PostMapping("updateById/{id}") + public R updateById(@RequestBody TagData param){ + TagData data = new TagData(); + data.setId(param.getId()); + data.setStartDate(param.getStartDate()); + data.setEndDate(param.getEndDate()); + tagDataService.updateById(data); + return R.ok(); + } + + /** + * Id更新 + * @param id + * @return + */ + @DeleteMapping("deleteById/{id}") + public R deleteById(@PathVariable String id){ + tagDataService.removeById(id); + return R.ok(); + } + /** * 删除(对接JSL接口) * @param param @@ -267,6 +309,146 @@ public class TagDataController { return R.ok(); } + /** + * 新增(拓展了数据和时间绑定) + * @param param + * @return + */ + @PostMapping("/bind2") + @SysLog(module = SystemModule.Tag, title = "标签信息", biz = BizType.INSERT) + public R save2(@RequestBody @Valid TagInfoBind2Bo param){ + + //移除历史记录时,加载所有业务标签,并排除在外 + List tagInfos = tagInfoService.list(new LambdaQueryWrapper() + .eq(TagInfo::getBusinessFlag,1)); + List businessTagIds = tagInfos.stream() + .map(TagInfo::getId) + .collect(Collectors.toList()); + businessTagIds.add(-999L); + + if(CollUtil.isNotEmpty(param.getSave1Params())){ + List tagDataList = new ArrayList<>(); + for (TagTargetObject3Bo obj : param.getSave1Params()) { + //跳过业务类标签数据 + boolean isBsn = businessTagIds.stream().anyMatch(a->a.equals(obj.getTagId())); + if(isBsn){ + continue; + } + //移除旧数据 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TagData::getTagId,obj.getTagId()) + .eq(TagData::getTargetType,obj.getTargetType()) + .eq(TagData::getTargetId,obj.getTargetId()); + tagDataService.remove(lqw); + //重新保存 + String targetType = obj.getTargetType(); + String targetId = obj.getTargetId(); + TagData data = new TagData(); + //设置target信息 + this.toSetTagData(targetType, targetId, data); + Long tagId = obj.getTagId(); + TagInfo tagInfo = tagInfoService.getById(tagId); + data.setTagId(tagId); + data.setStartDate(obj.getStartDate()); + data.setEndDate(obj.getEndDate()); + if(tagInfo!=null){ + data.setTagName(tagInfo.getTagName()); + data.setTagRemark(tagInfo.getRemark()); + } + tagDataList.add(data); + } + if(CollectionUtil.isNotEmpty(tagDataList)){ + tagDataService.saveBatch(tagDataList); + } + } + else if (CollUtil.isNotEmpty(param.getSave2Params())){ + List tagDataList = new ArrayList<>(); + for (TagItem2Bo obj : param.getSave2Params()) { + Long tagId = obj.getTagId(); + TagInfo tagInfo = tagInfoService.getById(tagId); + if(tagInfo.getBusinessFlag().equals("1")){ + continue; + } + for (TagTargetObject2Bo object2Bo : obj.getTargetList()) { + TagData data = new TagData(); + data.setTagName(tagInfo.getTagName()); + data.setTagId(tagInfo.getId()); + this.toSetTagData(object2Bo.getTargetType(), object2Bo.getTargetId(), data); + tagDataList.add(data); + } + } + //移除历史记录 + List tagIds = param.getSave2Params().stream().map(TagItem2Bo::getTagId).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(tagIds)){ + tagDataService.remove( + new LambdaQueryWrapper() + .in(TagData::getTagId,tagIds) + .notIn(TagData::getTagId,businessTagIds) + ); + } + //重新保存 + if(CollectionUtil.isNotEmpty(tagDataList)){ + tagDataService.saveBatch(tagDataList); + } + }else if (CollUtil.isNotEmpty(param.getSave3Params())){ + List tagDataList = new ArrayList<>(); + for (TagTargetObjectBo objectDTO : param.getSave3Params()) { + //移除历史数据 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TagData::getTargetId,objectDTO.getTargetId()) + .eq(TagData::getTargetType,objectDTO.getTargetType()) + .notIn(TagData::getTagId,businessTagIds); + tagDataService.remove(lqw); + TagData tmpTagData = new TagData(); + this.toSetTagData(objectDTO.getTargetType(), objectDTO.getTargetId(),tmpTagData); + for (TagItemBo item : objectDTO.getTagItems()) { + //跳过业务类型 + boolean isBsn = businessTagIds.stream().anyMatch(a->a.equals(item.getTagId())); + if(isBsn){ + continue; + } + TagInfo tagInfo = tagInfoService.getById(item.getTagId()); + TagData data = CopierUtil.copy(tmpTagData,new TagData()); + data.setTagId(item.getTagId()); + data.setStartDate(item.getStartDate()); + data.setEndDate(item.getEndDate()); + if(tagInfo!=null){ + data.setTagName(tagInfo.getTagName()); + data.setTagRemark(tagInfo.getRemark()); + } + tagDataList.add(data); + } + } + if(CollectionUtil.isNotEmpty(tagDataList)){ + tagDataService.saveBatch(tagDataList); + } + }else { + return R.error2(); + } + return R.ok(); + } + + private void toSetTagData(String targetType, String targetId, TagData data) { + data.setTargetId(targetId); + data.setTargetType(targetType); + if(targetType.equals(TagTypeConst.Customer)){ + BmsSupplier bmsSupplier = bmsSupplierService.getById(targetId); + data.setTargetCode(bmsSupplier.getCode()); + data.setTargetName(bmsSupplier.getName()); + }else if (targetType.equals(TagTypeConst.Channel)){ + BmsChannel channel = bmsChannelService.getById(targetId); + data.setTargetCode(channel.getChannelCode()); + data.setTargetName(channel.getChannelName()); + }else if (targetType.equals(TagTypeConst.Point)){ + BmsChannelPoint point = bmsChannelPointService.getById(targetId); + data.setTargetCode(point.getPointCode()); + data.setTargetName(point.getPointName()); + }else{ + SysUser sysUser = sysUserService.getById(targetId); + data.setTargetCode(sysUser.getCode()); + data.setTargetName(sysUser.getName()); + } + } } diff --git a/src/main/java/com/qs/serve/modules/tag/entity/TagData.java b/src/main/java/com/qs/serve/modules/tag/entity/TagData.java index 0cf6aca0..afe3ee42 100644 --- a/src/main/java/com/qs/serve/modules/tag/entity/TagData.java +++ b/src/main/java/com/qs/serve/modules/tag/entity/TagData.java @@ -58,6 +58,15 @@ public class TagData implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 开始时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate startDate; + + /** 结束时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate endDate; /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBind2Bo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBind2Bo.java new file mode 100644 index 00000000..6d93e81a --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBind2Bo.java @@ -0,0 +1,42 @@ +package com.qs.serve.modules.tag.entity.bo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 标签信息 Bo + * @author YenHex + * @since 2023-04-23 + */ +@Data +public class TagInfoBind2Bo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 0:添加不进行删除 + */ + private List save1Params; + + /** + * 1:以`标签`为参照物,删除历史`目标数据`,并重新添加新的`目标数据` + * */ + private List save2Params; + + + /** + * 2以`目标数据`为参照物,删除历史`标签`,并重新添加新的`标签` + **/ + private List save3Params; + + /** + * 0:添加不进行删除 + * 1:以`标签`为参照物,删除历史`目标数据`,并重新添加新的`目标数据` + * 2:以`目标数据`为参照物,删除历史`标签`,并重新添加新的`标签` + */ + private Integer saveType; + +} + diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBo.java index 13b3024d..46892d10 100644 --- a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBo.java +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagInfoBo.java @@ -45,5 +45,6 @@ public class TagInfoBo implements Serializable { /** 背景颜色 */ private String bgColorVal; + } diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagItem2Bo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagItem2Bo.java new file mode 100644 index 00000000..19463d67 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagItem2Bo.java @@ -0,0 +1,24 @@ +package com.qs.serve.modules.tag.entity.bo; + +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2024/8/5 + */ +@Data +public class TagItem2Bo { + + /** + * 标签ID + */ + private Long tagId; + + /** + * 目标数据。目标类型:customer、point、channel、salesman + */ + List targetList; + +} diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagItemBo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagItemBo.java new file mode 100644 index 00000000..d157f81c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagItemBo.java @@ -0,0 +1,31 @@ +package com.qs.serve.modules.tag.entity.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * @author YenHex + * @since 2024/8/5 + */ +@Data +public class TagItemBo { + + /** + * 标签ID + */ + private Long tagId; + + /** 开始时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate startDate; + + /** 结束时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate endDate; + +} diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject2Bo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject2Bo.java new file mode 100644 index 00000000..382eb800 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject2Bo.java @@ -0,0 +1,28 @@ +package com.qs.serve.modules.tag.entity.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.qs.serve.common.model.dto.TargetObjectDTO; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author YenHex + * @since 2024/8/5 + */ +@Data +public class TagTargetObject2Bo extends TargetObjectDTO { + + /** 开始时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate startDate; + + /** 结束时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate endDate; + +} diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject3Bo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject3Bo.java new file mode 100644 index 00000000..dd86e203 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObject3Bo.java @@ -0,0 +1,32 @@ +package com.qs.serve.modules.tag.entity.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.qs.serve.common.model.dto.TargetObjectDTO; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * @author YenHex + * @since 2024/8/5 + */ +@Data +public class TagTargetObject3Bo extends TargetObjectDTO { + + /** + * 标签ID + */ + private Long tagId; + + /** 开始时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate startDate; + + /** 结束时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate endDate; + +} diff --git a/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObjectBo.java b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObjectBo.java new file mode 100644 index 00000000..b30a24b5 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tag/entity/bo/TagTargetObjectBo.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.tag.entity.bo; + +import com.qs.serve.common.model.dto.TargetObjectDTO; +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2024/8/5 + */ +@Data +public class TagTargetObjectBo extends TargetObjectDTO { + + /** + * 标签列表 + */ + List tagItems; + +}