From b3d83462040cf78407109bb800c462bd6e41c01b Mon Sep 17 00:00:00 2001 From: yf <770153798@qq.com> Date: Sun, 19 Jan 2025 22:33:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E5=AD=97=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/mybatis/build/FilterItem.java | 2 +- .../admin/keyword/KeywordController.java | 42 +++++ .../handler/AbsBaseKeywordSearchHandler.java | 18 ++ .../admin/keyword/handler/OmsKeywordUtil.java | 30 +++ .../handler/impl/KeywordSearchHandler.java | 65 +++++++ .../admin/keyword/vo/KeywordResultVO.java | 23 +++ .../mysql/productinfo/ProductInfoMapper.java | 2 +- .../module/oms/util/SpringBeanUtil.java | 61 ++++++ .../server/HangtagServerApplication.java | 3 +- hangtag-ui/hangtag-ui-admin/src/locales/en.ts | 4 +- .../hangtag-ui-admin/src/locales/zh-CN.ts | 2 +- .../src/api/base/keyword/index.ts | 18 ++ .../src/components/KeywordSearch/index.vue | 173 ++++++++++++++++++ .../src/components/ProductInfoList/index.vue | 26 ++- hangtag-ui/hangtag-ui-front/src/locales/en.ts | 7 +- .../hangtag-ui-front/src/locales/zh-CN.ts | 5 +- 16 files changed, 462 insertions(+), 19 deletions(-) create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/KeywordController.java create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/AbsBaseKeywordSearchHandler.java create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/OmsKeywordUtil.java create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/impl/KeywordSearchHandler.java create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/vo/KeywordResultVO.java create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/SpringBeanUtil.java create mode 100644 hangtag-ui/hangtag-ui-front/src/api/base/keyword/index.ts create mode 100644 hangtag-ui/hangtag-ui-front/src/components/KeywordSearch/index.vue diff --git a/hangtag-framework/hangtag-spring-boot-starter-mybatis/src/main/java/cn/hangtag/framework/mybatis/build/FilterItem.java b/hangtag-framework/hangtag-spring-boot-starter-mybatis/src/main/java/cn/hangtag/framework/mybatis/build/FilterItem.java index 9dd177f..2efc6bd 100644 --- a/hangtag-framework/hangtag-spring-boot-starter-mybatis/src/main/java/cn/hangtag/framework/mybatis/build/FilterItem.java +++ b/hangtag-framework/hangtag-spring-boot-starter-mybatis/src/main/java/cn/hangtag/framework/mybatis/build/FilterItem.java @@ -10,7 +10,7 @@ import java.io.Serializable; public class FilterItem implements Serializable { /** - * 类型 = > >= < <= != in notIn like likeLef likeRight keyword + * 类型 = > >= < <= != in notIn like likeLef likeRight handler * {@link QueryFilterTypeEnum} */ private String type = QueryFilterTypeEnum.EQ.getValue(); diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/KeywordController.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/KeywordController.java new file mode 100644 index 0000000..496aa18 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/KeywordController.java @@ -0,0 +1,42 @@ +package cn.hangtag.module.oms.base.controller.admin.keyword; + +import cn.hangtag.framework.common.pojo.CommonResult; +import cn.hangtag.framework.common.util.FuncUtil; +import cn.hangtag.module.oms.base.controller.admin.keyword.handler.OmsKeywordUtil; +import cn.hangtag.module.oms.base.controller.admin.keyword.vo.KeywordResultVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +import java.util.List; + +import static cn.hangtag.framework.common.pojo.CommonResult.success; + +@Tag(name = "关键字获取") +@RestController +@RequestMapping("/oms/base/keyword") +@Validated +public class KeywordController { + + /** + * 获取关键字列表 + * + * @param type 类型 关键字的类型 BeanName + * @param count 计数 查询数量 + * @param keyword 关键字 搜索关键字 + * @param filter 滤波器 前置过滤 + * @return {@link CommonResult }<{@link List }<{@link KeywordResultVO }>> + */ + @GetMapping("/list/{type}/{count}") + @Operation(summary = "获取关键字 ") + public CommonResult> getKeywordList(@PathVariable("type") String type, + @PathVariable("count") Long count, + @RequestParam(required = false) String keyword, + @RequestParam(required = false) String filter + ) { + return success(OmsKeywordUtil.search(type, keyword, FuncUtil.tolong(count,10),filter)); + + } +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/AbsBaseKeywordSearchHandler.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/AbsBaseKeywordSearchHandler.java new file mode 100644 index 0000000..0f9c7e0 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/AbsBaseKeywordSearchHandler.java @@ -0,0 +1,18 @@ +package cn.hangtag.module.oms.base.controller.admin.keyword.handler; + +import cn.hangtag.module.oms.base.controller.admin.keyword.vo.KeywordResultVO; + +import java.util.List; + + +/** + * abs基础关键字搜索处理程序 + * + * @author YuanFeng + * @date 2022/12/01 + */ +public abstract class AbsBaseKeywordSearchHandler { + + public abstract List search(String keyword, long maxCount,String filter); + +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/OmsKeywordUtil.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/OmsKeywordUtil.java new file mode 100644 index 0000000..158b34a --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/OmsKeywordUtil.java @@ -0,0 +1,30 @@ +package cn.hangtag.module.oms.base.controller.admin.keyword.handler; + +import cn.hangtag.module.oms.util.SpringBeanUtil; +import cn.hangtag.module.oms.base.controller.admin.keyword.vo.KeywordResultVO; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class OmsKeywordUtil { + private static Map HANDLER_MAP = new HashMap<>(); + + public static void init(){ + // 获取所有实现类 + HANDLER_MAP = SpringBeanUtil.getBeanMap(AbsBaseKeywordSearchHandler.class); + } + + private static AbsBaseKeywordSearchHandler getHandler(String type){ + return HANDLER_MAP.get(type); + } + + public static List search(String type, String keyword,long maxCount,String filter){ + AbsBaseKeywordSearchHandler handler = getHandler(type); + if(handler == null){ + return new ArrayList<>(); + } + return handler.search(keyword,maxCount,filter); + } +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/impl/KeywordSearchHandler.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/impl/KeywordSearchHandler.java new file mode 100644 index 0000000..5fbd923 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/handler/impl/KeywordSearchHandler.java @@ -0,0 +1,65 @@ +package cn.hangtag.module.oms.base.controller.admin.keyword.handler.impl; + +import cn.hangtag.framework.common.util.FuncUtil; +import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; +import cn.hangtag.module.oms.base.controller.admin.keyword.vo.KeywordResultVO; +import cn.hangtag.module.oms.base.controller.admin.keyword.handler.AbsBaseKeywordSearchHandler; +import cn.hangtag.module.oms.dal.dataobject.productinfo.ProductInfoDO; +import cn.hangtag.module.oms.dal.mysql.productinfo.ProductInfoMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.AllArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + + +/** + * 关键字搜索处理器 + * + * @author YuanFeng + * @date 2023/11/27 + */ +@AllArgsConstructor +@Component +public class KeywordSearchHandler { + + private final ProductInfoMapper productInfoMapper; + + /** + * 产品信息 code 关键字搜索处理器 + * + * @return {@link AbsBaseKeywordSearchHandler }<{@link Object }> + */ + @Bean("productInfoCode") + public AbsBaseKeywordSearchHandler productInfoCodeHandler() { + AbsBaseKeywordSearchHandler handler = new AbsBaseKeywordSearchHandler() { + @Override + public List search(String keyword, long maxCount,String filter) { + Page page = new Page(); + page.setSize(maxCount); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if(FuncUtil.isNotEmpty(keyword)){ + queryWrapper.like(ProductInfoDO::getCode, keyword); + } + if(FuncUtil.isNotEmpty(filter)){ + queryWrapper.eq(ProductInfoDO::getBrandId, filter); + } + queryWrapper.eq(BaseDO::getDeleted,false); + queryWrapper.groupBy(ProductInfoDO::getCode); + Page page1 = productInfoMapper.selectPage(page, queryWrapper); + List records = page1.getRecords(); + List res = new ArrayList<>(); + for (ProductInfoDO record : records) { + res.add(new KeywordResultVO(record.getCode(), record.getCode())); + } + return res; + } + }; + return handler; + } + +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/vo/KeywordResultVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/vo/KeywordResultVO.java new file mode 100644 index 0000000..0bd4778 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/base/controller/admin/keyword/vo/KeywordResultVO.java @@ -0,0 +1,23 @@ +package cn.hangtag.module.oms.base.controller.admin.keyword.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 关键字结果vo + * + * @author YuanFeng + */ +@Data +public class KeywordResultVO implements Serializable { + + private String value; + private String label; + private Object data; + + public KeywordResultVO(String value, String label) { + this.value = value; + this.label = label; + } +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productinfo/ProductInfoMapper.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productinfo/ProductInfoMapper.java index c3275ee..744ab9b 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productinfo/ProductInfoMapper.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productinfo/ProductInfoMapper.java @@ -25,7 +25,7 @@ public interface ProductInfoMapper extends BaseMapperX { default PageResult selectPage(ProductInfoPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ProductInfoDO::getCode, reqVO.getCode()) + .likeIfPresent(ProductInfoDO::getCode, reqVO.getCode()) .likeIfPresent(ProductInfoDO::getName, reqVO.getName()) .eqIfPresent(ProductInfoDO::getCover, reqVO.getCover()) .eqIfPresent(ProductInfoDO::getBrandId, reqVO.getBrandId()) diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/SpringBeanUtil.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/SpringBeanUtil.java new file mode 100644 index 0000000..a18dc6f --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/SpringBeanUtil.java @@ -0,0 +1,61 @@ +package cn.hangtag.module.oms.util; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Component +public class SpringBeanUtil implements ApplicationContextAware { + private static ApplicationContext applicationContext; + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + + if(SpringBeanUtil.applicationContext == null) { + SpringBeanUtil.applicationContext = applicationContext; + } + } + + //获取applicationContext + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + //通过name获取 Bean. + public static Object getBean(String name){ + return getApplicationContext().getBean(name); + } + + public static List getBeanList(Class clazz){ + Map beansOfType = getBeanMap(clazz); + Set keySet = beansOfType.keySet(); + List list = new ArrayList<>(); + for (String s : keySet) { + list.add(beansOfType.get(s)); + } + return list; + } + public static Map getBeanMap(Class clazz){ + return getApplicationContext().getBeansOfType(clazz); + } + //通过class获取Bean. + public static T getBean(Class clazz){ + return getApplicationContext().getBean(clazz); + } + + //通过class获取所有Bean. + public static Map getBeansOfType(Class clazz){ + return getApplicationContext().getBeansOfType(clazz); + + } + + //通过name,以及Clazz返回指定的Bean + public static T getBean(String name,Class clazz) { + return getApplicationContext().getBean(name, clazz); + } +} diff --git a/hangtag-server/src/main/java/cn/hangtag/server/HangtagServerApplication.java b/hangtag-server/src/main/java/cn/hangtag/server/HangtagServerApplication.java index 5fd53ef..854807b 100644 --- a/hangtag-server/src/main/java/cn/hangtag/server/HangtagServerApplication.java +++ b/hangtag-server/src/main/java/cn/hangtag/server/HangtagServerApplication.java @@ -1,5 +1,6 @@ package cn.hangtag.server; +import cn.hangtag.module.oms.base.controller.admin.keyword.handler.OmsKeywordUtil; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -15,7 +16,7 @@ public class HangtagServerApplication { // new SpringApplicationBuilder(HangtagServerApplication.class) // .applicationStartup(new BufferingApplicationStartup(20480)) // .run(args); - + OmsKeywordUtil.init(); } diff --git a/hangtag-ui/hangtag-ui-admin/src/locales/en.ts b/hangtag-ui/hangtag-ui-admin/src/locales/en.ts index 9611d4f..f55a39d 100644 --- a/hangtag-ui/hangtag-ui-admin/src/locales/en.ts +++ b/hangtag-ui/hangtag-ui-admin/src/locales/en.ts @@ -562,7 +562,8 @@ export default { "tipsUseProportion": "The total proportion cannot exceed 100. The actual value is", "tipsUseProportion2": "The desired proportion is 100%, but the actual value is", "tipsDuplicate": "Duplicate", - "tipsDataTransmitting": "Data transmitting..." + "tipsDataTransmitting": "Data transmitting...", + "tipsDataChange": "DataChange Click Update Button", }, "createOrder": { "title1": "Order Information", @@ -669,7 +670,6 @@ export default { "labelRemark": "Remark", "viewOrder": "viewOrder", "backHome": "BackHome", - "tipsDataChange": "DataChange Click Update Button", "downloadSuccess": "downloadSuccess", }, "productDialogList": { diff --git a/hangtag-ui/hangtag-ui-admin/src/locales/zh-CN.ts b/hangtag-ui/hangtag-ui-admin/src/locales/zh-CN.ts index a0462ce..1b93a88 100644 --- a/hangtag-ui/hangtag-ui-admin/src/locales/zh-CN.ts +++ b/hangtag-ui/hangtag-ui-admin/src/locales/zh-CN.ts @@ -558,6 +558,7 @@ export default { tipsUseProportion2: '中占比希望是100%,实际是', tipsDuplicate: '重复', tipsDataTransmitting: '数据传输中...', + tipsDataChange: "数据已更新,请点击更新按钮", }, createOrder: { title1: '订单信息', @@ -665,7 +666,6 @@ export default { placeRemark: "请输入备注", viewOrder: "查看订单", backHome: "返回首页", - tipsDataChange: "数据已更新,请点击更新按钮", downloadSuccess: "下载成功", }, productDialogList:{ diff --git a/hangtag-ui/hangtag-ui-front/src/api/base/keyword/index.ts b/hangtag-ui/hangtag-ui-front/src/api/base/keyword/index.ts new file mode 100644 index 0000000..5a8e2fb --- /dev/null +++ b/hangtag-ui/hangtag-ui-front/src/api/base/keyword/index.ts @@ -0,0 +1,18 @@ +import request from '@/config/axios' + + +// 关键字 API +export const KeywordApi = { + + // 查询关键字列表 + list: async (filter: string, type: string, keyword: string, maxCount = 10) => { + return await request.get({ + url: `/oms/base/keyword/list/${type}/${maxCount}`, + params: { + filter: filter, + keyword: keyword, + } + }) + }, + +} diff --git a/hangtag-ui/hangtag-ui-front/src/components/KeywordSearch/index.vue b/hangtag-ui/hangtag-ui-front/src/components/KeywordSearch/index.vue new file mode 100644 index 0000000..b5072b9 --- /dev/null +++ b/hangtag-ui/hangtag-ui-front/src/components/KeywordSearch/index.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/hangtag-ui/hangtag-ui-front/src/components/ProductInfoList/index.vue b/hangtag-ui/hangtag-ui-front/src/components/ProductInfoList/index.vue index 1ec4355..7d0e2dc 100644 --- a/hangtag-ui/hangtag-ui-front/src/components/ProductInfoList/index.vue +++ b/hangtag-ui/hangtag-ui-front/src/components/ProductInfoList/index.vue @@ -26,6 +26,14 @@ + @@ -78,6 +86,7 @@ import {allSchemas} from './config.data' import {ProductInfoApi} from '@/api/oms/productinfo' import DataForm from './DataForm.vue' import {ProductTypeApi} from "@/api/base/producttype"; +import {KeywordApi} from "@/api/base/keyword"; /** 稿件图片库 */ defineOptions({name: 'ProductInfoList'}) @@ -134,10 +143,18 @@ const that = reactive({ showValue: '', visible: false, keyword: '', + codeKeywordList: [ + { + value: 'abc', + label: '请选择' + } + ], typeList: [], selectRow: [], queryInfo: { productTypeId: null, + code: '', + brandId:'', } }) @@ -147,6 +164,7 @@ const getLabel = (id) => { const res = that.typeList.find(item => item.id === id); return res ? res.label : id } + const openDialog = (filter = {}) => { that.queryInfo = { ...that.queryInfo, @@ -248,14 +266,6 @@ const {getList, setSearchParams} = tableMethods /** 添加/修改操作 */ const formRef = ref() -const openForm = (type: string, id?: number) => { - formRef.value.open(type, id) -} - -/** 删除按钮操作 */ -const handleDelete = (id: number) => { - tableMethods.delList(id, false) -} /** 初始化 **/ onMounted(() => { diff --git a/hangtag-ui/hangtag-ui-front/src/locales/en.ts b/hangtag-ui/hangtag-ui-front/src/locales/en.ts index 9b240ff..2da7a73 100644 --- a/hangtag-ui/hangtag-ui-front/src/locales/en.ts +++ b/hangtag-ui/hangtag-ui-front/src/locales/en.ts @@ -54,7 +54,8 @@ export default { updateTime: 'Update Time', copy: 'Copy', copySuccess: 'Copy Success', - copyError: 'Copy Error' + copyError: 'Copy Error', + keywordPlaceholder: 'Please enter a keyword' }, lock: { lockScreen: 'Lock screen', @@ -563,7 +564,8 @@ export default { "tipsUseProportion": "The total proportion cannot exceed 100. The actual value is", "tipsUseProportion2": "The desired proportion is 100%, but the actual value is", "tipsDuplicate": "Duplicate", - "tipsDataTransmitting": "Data transmitting..." + "tipsDataTransmitting": "Data transmitting...", + "tipsDataChange": "DataChange Click Update Button", }, "createOrder": { "title1": "Order Information", @@ -670,7 +672,6 @@ export default { "labelRemark": "Remark", "viewOrder": "viewOrder", "backHome": "BackHome", - "tipsDataChange": "DataChange Click Update Button", "downloadSuccess": "downloadSuccess", }, diff --git a/hangtag-ui/hangtag-ui-front/src/locales/zh-CN.ts b/hangtag-ui/hangtag-ui-front/src/locales/zh-CN.ts index b0cecd9..6521295 100644 --- a/hangtag-ui/hangtag-ui-front/src/locales/zh-CN.ts +++ b/hangtag-ui/hangtag-ui-front/src/locales/zh-CN.ts @@ -54,7 +54,8 @@ export default { updateTime: '更新时间', copy: '复制', copySuccess: '复制成功', - copyError: '复制失败' + copyError: '复制失败', + keywordPlaceholder: '请输入关键字' }, lock: { lockScreen: '锁定屏幕', @@ -559,6 +560,7 @@ export default { tipsUseProportion2: '中占比希望是100%,实际是', tipsDuplicate: '重复', tipsDataTransmitting: '数据传输中...', + tipsDataChange: "数据已更新,请点击更新按钮", }, createOrder: { title1: '订单信息', @@ -666,7 +668,6 @@ export default { placeRemark: "请输入备注", viewOrder: "查看订单", backHome: "返回首页", - tipsDataChange: "数据已更新,请点击更新按钮", downloadSuccess: "下载成功", }, productDialogList:{