Browse Source

综合首页

wucl 1 year ago
parent
commit
254e612821
25 changed files with 255 additions and 105 deletions
  1. 43 0
      biz-base/src/main/java/com/dayou/controller/LuceneSearchController.java
  2. 4 74
      biz-base/src/main/java/com/dayou/controller/PersonalController.java
  3. 1 0
      biz-base/src/main/java/com/dayou/controller/WorkFlowLogController.java
  4. 3 3
      biz-base/src/main/resources/application-local.yml
  5. 1 0
      biz-base/src/main/resources/application-prod.yml
  6. 1 0
      biz-base/src/main/resources/application-test.yml
  7. 2 0
      dao/src/main/java/com/dayou/mapper/WorkFlowLogMapper.java
  8. 1 0
      dao/src/main/resources/mapper/WorkFlowLogMapper.xml
  9. 16 0
      domain/src/main/java/com/dayou/annotation/LuceneResource.java
  10. 13 0
      domain/src/main/java/com/dayou/annotation/LuceneSearchable.java
  11. 5 4
      domain/src/main/java/com/dayou/entity/Department.java
  12. 7 3
      domain/src/main/java/com/dayou/entity/FinanceInvoice.java
  13. 10 3
      domain/src/main/java/com/dayou/entity/FinanceRealFund.java
  14. 8 4
      domain/src/main/java/com/dayou/entity/Item.java
  15. 11 3
      domain/src/main/java/com/dayou/entity/MajorProduction.java
  16. 3 0
      domain/src/main/java/com/dayou/entity/PersonalTarget.java
  17. 5 3
      domain/src/main/java/com/dayou/entity/Post.java
  18. 4 3
      domain/src/main/java/com/dayou/entity/User.java
  19. 6 1
      domain/src/main/java/com/dayou/enums/MainBusinessEnum.java
  20. 30 0
      domain/src/main/java/com/dayou/vo/WorkLogVO.java
  21. 8 0
      service/src/main/java/com/dayou/processor/AppBootProcessor.java
  22. 7 2
      service/src/main/java/com/dayou/service/ILuceneSearchService.java
  23. 62 2
      service/src/main/java/com/dayou/service/impl/LuceneSearchServiceImpl.java
  24. 2 0
      service/src/main/java/com/dayou/service/workflow/IWorkFlowLogService.java
  25. 2 0
      service/src/main/java/com/dayou/service/workflow/WorkFlowLogServiceImpl.java

+ 43 - 0
biz-base/src/main/java/com/dayou/controller/LuceneSearchController.java

@@ -0,0 +1,43 @@
+package com.dayou.controller;
+
+
+import com.dayou.common.RestResponse;
+import com.dayou.exception.ErrorCode;
+import com.dayou.service.ILuceneSearchService;
+import com.dayou.vo.LuceneSearchVO;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Lucene 全文搜索
+ *
+ * @author wucl
+ * @since 2023-01-10
+ */
+@RestController
+@RequestMapping("global/search")
+@Slf4j
+public class LuceneSearchController extends BaseController {
+
+    @Autowired
+    private ILuceneSearchService luceneSearchService;
+
+
+
+    @GetMapping("/{businessType}/{keyword}")
+    public RestResponse<List<LuceneSearchVO>> globalSearch(@PathVariable("businessType") String businessType,@PathVariable("keyword") String keyword) {
+
+        try {
+            List<LuceneSearchVO> result = luceneSearchService.globalSearch(businessType,keyword);
+            return RestResponse.data(result);
+        } catch (Exception e) {
+            return RestResponse.error(ErrorCode.DEFAULTERROR.getErrorMsg(),400);
+        }
+    }
+
+}
+

+ 4 - 74
biz-base/src/main/java/com/dayou/controller/PersonalController.java

@@ -1,57 +1,26 @@
 package com.dayou.controller;
 
-import cn.hutool.core.util.StrUtil;
-import com.dayou.annotation.IgnoreAuth;
+
 import com.dayou.dto.TaskRecordDTO;
 import com.dayou.dto.WorkNodeCommit;
-import com.dayou.vo.LuceneSearchVO;
 import com.dayou.vo.PersonalVO;
 import com.dayou.vo.TaskTodoVO;
 import com.dayou.workflow.annotation.FinishTask;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
-import org.apache.lucene.queryparser.classic.ParseException;
-import org.apache.lucene.queryparser.classic.QueryParser;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.ScoreDoc;
-import org.apache.lucene.search.TopDocs;
-import org.apache.lucene.search.highlight.*;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.FSDirectory;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.web.bind.annotation.RestController;
-import com.dayou.controller.BaseController;
 import com.dayou.service.IPersonalService;
 import com.dayou.entity.Personal;
 import com.dayou.common.RestResponse;
 import org.springframework.web.bind.annotation.*;
-import com.dayou.utils.ConvertUtil;
-import com.dayou.utils.HttpKit;
-import com.dayou.exception.ErrorCode;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.nio.file.FileSystems;
-import java.util.ArrayList;
-import java.util.Date;
+
 import java.util.List;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.http.MediaType;
-import org.springframework.web.multipart.MultipartFile;
-import org.wltea.analyzer.lucene.IKAnalyzer;
 
 import javax.validation.Valid;
 
+
 /**
  * 个贷业务订单
  *
@@ -182,45 +151,6 @@ public class PersonalController extends BaseController {
         return RestResponse.data(pages);
     }
 
-    @IgnoreAuth
-    @GetMapping("/search/{keyword}")
-    public RestResponse<List<LuceneSearchVO>> searchText(@PathVariable("keyword") String keyword) throws IOException, ParseException, InvalidTokenOffsetsException {
-
-        Directory directory = FSDirectory.open(FileSystems.getDefault().getPath("G:\\luceneIndex"));
-        DirectoryReader reader = DirectoryReader.open(directory);
-        IndexSearcher indexSearcher = new IndexSearcher(reader);
-        QueryParser parser = new QueryParser ("result", new IKAnalyzer());
-        Query query = parser.parse(keyword);
-        TopDocs topDocs = indexSearcher.search(query, 15);
-
-        //加入高亮显示的
-        SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<span style='color:red'>", "</span>");
-        Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
-        //高亮后的段落范围在100字内
-        Fragmenter fragmenter = new SimpleFragmenter(50);
-        highlighter.setTextFragmenter(fragmenter);
-
-
-        log.info("本次搜索共找到" + topDocs.totalHits + "条数据");
-        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
-        List<LuceneSearchVO> results = new ArrayList<>();
-        for (ScoreDoc scoreDoc :scoreDocs){
-            LuceneSearchVO luceneSearchVO = new LuceneSearchVO();
-            // 取出文档编号
-            int docId = scoreDoc.doc;
-            Document doc = reader.document(docId);
-            luceneSearchVO.setId(doc.get("id"));
-            String result = doc.get("result");
-            if (StrUtil.isNotBlank(result)){
-                result = highlighter.getBestFragment(new IKAnalyzer(), "result", result);
-            }
-            luceneSearchVO.setResult(result);
-            luceneSearchVO.setBusinessEnum(doc.get("businessEnum"));
-            luceneSearchVO.setMenuName(doc.get("menuName"));
-            luceneSearchVO.setUrl(doc.get("url"));
-            results.add(luceneSearchVO);
-        }
-        return RestResponse.data(results);
-    }
+
 }
 

+ 1 - 0
biz-base/src/main/java/com/dayou/controller/WorkFlowLogController.java

@@ -1,5 +1,6 @@
 package com.dayou.controller;
 
+import com.dayou.vo.WorkLogVO;
 import com.dayou.vo.WorkflowLogVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;

+ 3 - 3
biz-base/src/main/resources/application-local.yml

@@ -19,10 +19,10 @@ spring:
 
 
 dfs:
-  path: /opt/dfs
-  domain: /dfs
+  path: G:\upload
+  domain: G:\upload
   domainName: https://kps.scdayou.com/dfs
-  code: /code
+  code: G:\code
   domainRoot: localhost
   luceneDir: G:\luceneIndex
 

+ 1 - 0
biz-base/src/main/resources/application-prod.yml

@@ -24,6 +24,7 @@ dfs:
   domainName: https://kps.scdayou.com/dfs
   code: /code
   domainRoot: https://kps.scdayou.com/admin
+  luceneDir: /luceneDir
 
 
 #系统配置

+ 1 - 0
biz-base/src/main/resources/application-test.yml

@@ -24,6 +24,7 @@ dfs:
   domainName: https://kps.scdayou.com/dfs
   code: /code
   domainRoot: http://kps.scdayou.com:81/admin-test
+  luceneDir: /luceneDir
 
 #系统配置
 system:

+ 2 - 0
dao/src/main/java/com/dayou/mapper/WorkFlowLogMapper.java

@@ -2,6 +2,7 @@ package com.dayou.mapper;
 
 import com.dayou.entity.WorkFlowLog;
 import com.dayou.dao.CustomBaseMapper;
+import com.dayou.vo.WorkLogVO;
 import com.dayou.vo.WorkflowLogVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,4 +20,5 @@ public interface WorkFlowLogMapper extends CustomBaseMapper<WorkFlowLog> {
 
     List<WorkflowLogVO> getList(@Param("businessId") Long businessId, @Param("businessSubId") String businessSubId,
                                 @Param("businessMinId") String businessMinId,@Param("businessType") String businessType);
+
 }

+ 1 - 0
dao/src/main/resources/mapper/WorkFlowLogMapper.xml

@@ -62,4 +62,5 @@
         ORDER BY
             wfl.created DESC
     </select>
+
 </mapper>

+ 16 - 0
domain/src/main/java/com/dayou/annotation/LuceneResource.java

@@ -16,6 +16,10 @@ import java.lang.annotation.*;
 @Documented
 public @interface LuceneResource {
 
+    /**
+     * 业务类型
+     * @return
+     */
     MainBusinessEnum value() ;
 
     /**
@@ -24,9 +28,21 @@ public @interface LuceneResource {
      */
     String serviceImplClassName();
 
+    /**
+     * 跳转的URL
+     * @return
+     */
     String url () default "";
 
+    /**
+     * 菜单名称
+     * @return
+     */
     String menuName() default "";
 
+    /**
+     * 需要检查的业务字段,值不一样,跳转的url和菜单为@luceneSearchable 指定的url 和菜单名称
+     * @return
+     */
     String checkField() default "";
 }

+ 13 - 0
domain/src/main/java/com/dayou/annotation/LuceneSearchable.java

@@ -16,9 +16,22 @@ import java.lang.annotation.Target;
 @Target(ElementType.FIELD)
 public @interface LuceneSearchable {
 
+    /**
+     * DB中的字段(若是驼峰类型,必指定DB字段)
+     * @return
+     */
     String value() default "";
 
+    /**
+     * 跳转的URL
+     * @return
+     */
     String url() default "";
+
+    /**
+     * 菜单名称
+     * @return
+     */
     String menuName() default "";
 
 

+ 5 - 4
domain/src/main/java/com/dayou/entity/Department.java

@@ -1,10 +1,11 @@
 package com.dayou.entity;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
+
+import static com.dayou.enums.MainBusinessEnum.SETTING_MANAGEMENT;
+
 /**
  * <p>
  * 机构
@@ -15,7 +16,7 @@ import com.dayou.annotation.ImportCell;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@ExcelSheet(sheetName = "机构")
+@ExcelSheet(sheetName = "部门")
 public class Department extends BaseEntity {
 
     private static final long serialVersionUID=1L;

+ 7 - 3
domain/src/main/java/com/dayou/entity/FinanceInvoice.java

@@ -2,13 +2,14 @@ package com.dayou.entity;
 import java.math.BigDecimal;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 import java.time.LocalDate;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
+
+import static com.dayou.enums.MainBusinessEnum.FINANCE_MANAGEMENT;
+
 /**
  * <p>
  * 财务开票
@@ -20,6 +21,7 @@ import com.dayou.annotation.ImportCell;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "财务开票")
+@LuceneResource(value = FINANCE_MANAGEMENT,serviceImplClassName = "financeInvoiceServiceImpl",menuName = "开票审批",url = "/finance/invoice/check")
 public class FinanceInvoice extends BaseEntity {
 
     private static final long serialVersionUID=1L;
@@ -34,6 +36,7 @@ public class FinanceInvoice extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "发票抬头")
+    @LuceneSearchable
     private String title;
 
     /**
@@ -48,6 +51,7 @@ public class FinanceInvoice extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "税号")
+    @LuceneSearchable("tax_no")
     private String taxNo;
 
     /**

+ 10 - 3
domain/src/main/java/com/dayou/entity/FinanceRealFund.java

@@ -2,6 +2,7 @@ package com.dayou.entity;
 import java.math.BigDecimal;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 
 import java.time.LocalDate;
@@ -10,9 +11,9 @@ import java.util.Date;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
+
+import static com.dayou.enums.MainBusinessEnum.FINANCE_MANAGEMENT;
+
 /**
  * <p>
  * 财务实收款
@@ -24,6 +25,7 @@ import com.dayou.annotation.ImportCell;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "财务实收款")
+@LuceneResource(value = FINANCE_MANAGEMENT,serviceImplClassName = "financeRealFundServiceImpl",menuName = "实收款管理",url = "/finance/real/fund")
 public class FinanceRealFund extends BaseEntity {
 
     private static final long serialVersionUID=1L;
@@ -33,6 +35,7 @@ public class FinanceRealFund extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "付款方")
+    @LuceneSearchable
     private String payer;
 
     /**
@@ -40,6 +43,7 @@ public class FinanceRealFund extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "付款银行")
+    @LuceneSearchable("payer_bank")
     private String payerBank;
 
     /**
@@ -47,6 +51,7 @@ public class FinanceRealFund extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "付款账号")
+    @LuceneSearchable("payer_account")
     private String payerAccount;
 
     /**
@@ -54,6 +59,7 @@ public class FinanceRealFund extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "付款金额")
+    @LuceneSearchable
     private BigDecimal amount;
 
     /**
@@ -68,6 +74,7 @@ public class FinanceRealFund extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "备注")
+    @LuceneSearchable
     private String remark;
 
     /**

+ 8 - 4
domain/src/main/java/com/dayou/entity/Item.java

@@ -3,17 +3,16 @@ import java.math.BigDecimal;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.dayou.annotation.Excel;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 import java.time.LocalDate;
 
+import com.dayou.enums.MainBusinessEnum;
 import com.github.liangbaika.validate.annations.AbcValidate;
 import com.github.liangbaika.validate.enums.Check;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
+
 /**
  * <p>
  * 项目信息表
@@ -25,6 +24,7 @@ import com.dayou.annotation.ImportCell;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "项目信息表")
+@LuceneResource(value = MainBusinessEnum.ITEM_BUSINESS,serviceImplClassName = "itemServiceImpl",menuName = "项目列表",url = "/item/list")
 public class Item extends BaseEntity {
 
     private static final long serialVersionUID=1L;
@@ -33,6 +33,7 @@ public class Item extends BaseEntity {
      * 项目名称
      */
     @Excel(name = "项目名称",width=40)
+    @LuceneSearchable
     private String name;
 
     /**
@@ -45,6 +46,7 @@ public class Item extends BaseEntity {
      * 公司OA流水号(项目编号)
      */
     @Excel(name = "项目编号")
+    @LuceneSearchable("ao_no")
     private String oaNo;
 
     /**
@@ -69,12 +71,14 @@ public class Item extends BaseEntity {
      * 委托单位
      */
     @Excel(name = "委托单位")
+    @LuceneSearchable("client_unit")
     private String clientUnit;
 
     /**
      * 客户名字
      */
     @Excel(name = "客户名字")
+    @LuceneSearchable("client_name")
     private String clientName;
 
     /**

+ 11 - 3
domain/src/main/java/com/dayou/entity/MajorProduction.java

@@ -2,18 +2,17 @@ package com.dayou.entity;
 import java.math.BigDecimal;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.ProductionEnum;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
 import org.apache.poi.ss.formula.functions.T;
 
 /**
@@ -27,6 +26,8 @@ import org.apache.poi.ss.formula.functions.T;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "大中型产品")
+@LuceneResource(value = MainBusinessEnum.MAJOR_BUSINESS,serviceImplClassName = "majorProductionServiceImpl",
+        menuName="已归档产品",url="/major/saveFileDone",checkField="ifSaveFile")
 public class MajorProduction extends BaseEntity {
 
     private static final long serialVersionUID=1L;
@@ -38,6 +39,7 @@ public class MajorProduction extends BaseEntity {
     /**
      * 报告号
      */
+    @LuceneSearchable("report_no")
     private String reportNo;
 
     /**
@@ -45,6 +47,7 @@ public class MajorProduction extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "产品类型")
+    @LuceneSearchable
     private String production;
 
     /**
@@ -56,6 +59,7 @@ public class MajorProduction extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "项目名称")
+    @LuceneSearchable
     private String name;
 
     /**
@@ -63,6 +67,7 @@ public class MajorProduction extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "委托方名称")
+    @LuceneSearchable("client_name")
     private String clientName;
 
     /**
@@ -77,6 +82,7 @@ public class MajorProduction extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "委托方地址")
+    @LuceneSearchable("client_address")
     private String clientAddress;
 
     /**
@@ -84,6 +90,7 @@ public class MajorProduction extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "产权人")
+    @LuceneSearchable
     private String owner;
 
     /**
@@ -174,6 +181,7 @@ public class MajorProduction extends BaseEntity {
     /**
      *是否归档
      */
+    @LuceneSearchable(value="if_save_file",menuName = "待归档产品",url="/major/saveFile/waiting")
     private Boolean ifSaveFile;
 
     /**

+ 3 - 0
domain/src/main/java/com/dayou/entity/PersonalTarget.java

@@ -1,6 +1,9 @@
 package com.dayou.entity;
 import java.math.BigDecimal;
+
+import com.dayou.annotation.LuceneResource;
 import com.dayou.common.BaseEntity;
+import com.dayou.enums.MainBusinessEnum;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import com.dayou.annotation.ExcelSheet;

+ 5 - 3
domain/src/main/java/com/dayou/entity/Post.java

@@ -1,11 +1,13 @@
 package com.dayou.entity;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
+
+import static com.dayou.enums.MainBusinessEnum.FINANCE_MANAGEMENT;
+import static com.dayou.enums.MainBusinessEnum.SETTING_MANAGEMENT;
+
 /**
  * <p>
  * 岗位

+ 4 - 3
domain/src/main/java/com/dayou/entity/User.java

@@ -1,6 +1,7 @@
 package com.dayou.entity;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.dayou.annotation.*;
 import com.dayou.common.BaseEntity;
 import java.time.LocalDate;
 import java.util.Date;
@@ -11,11 +12,11 @@ import com.github.liangbaika.validate.annations.AbcValidate;
 import com.github.liangbaika.validate.enums.Check;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.dayou.annotation.ExcelSheet;
-import com.dayou.annotation.ExportCell;
-import com.dayou.annotation.ImportCell;
 import org.hibernate.validator.constraints.Length;
 
+import static com.dayou.enums.MainBusinessEnum.FINANCE_MANAGEMENT;
+import static com.dayou.enums.MainBusinessEnum.SETTING_MANAGEMENT;
+
 /**
  * <p>
  * 基础用户

+ 6 - 1
domain/src/main/java/com/dayou/enums/MainBusinessEnum.java

@@ -9,11 +9,16 @@ package com.dayou.enums;
  */
 public enum MainBusinessEnum implements CodeMsgEnumInterface<String,String> {
 
+    ITEM_BUSINESS("ITEM_BUSINESS","土规业务"),
+
     MAJOR_BUSINESS("MAJOR_BUSINESS","大中型业务"),
 
     PERSONAL_BUSINESS("PERSONAL_BUSINESS","个贷业务"),
-
     ASSET_BUSINESS("ASSET_BUSINESS","资产业务"),
+
+    FINANCE_MANAGEMENT("FINANCE_MANAGEMENT","财务管理"),
+
+    SETTING_MANAGEMENT("SETTING_MANAGEMENT","综合设置"),
     ALL_BUSINESS("ALL_BUSINESS","全局业务"),
     ;
 

+ 30 - 0
domain/src/main/java/com/dayou/vo/WorkLogVO.java

@@ -0,0 +1,30 @@
+package com.dayou.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/4/28
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class WorkLogVO {
+
+    private Long id;
+
+    private String businessType;
+
+    private String reportNo;
+
+    private String nodeName;
+
+    private String handlerName;
+
+    private String state;
+
+    private Date created;
+}

+ 8 - 0
service/src/main/java/com/dayou/processor/AppBootProcessor.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.bo.PrivilegeTreeBO;
 import com.dayou.brokerage.validator.BrokerageValidator;
 import com.dayou.common.BaseEntity;
+import com.dayou.configuration.AsyncManager;
 import com.dayou.entity.*;
 import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.enums.SexEnum;
@@ -68,6 +69,9 @@ public class AppBootProcessor implements BeanPostProcessor, CommandLineRunner {
     @Autowired
     private IGlobalConfigService globalConfigService;
 
+    @Autowired
+    private ILuceneSearchService luceneSearchService;
+
 
     private Gson gson = new Gson();
 
@@ -78,6 +82,10 @@ public class AppBootProcessor implements BeanPostProcessor, CommandLineRunner {
         log.info("【initialize admin begin...】");
         initializeAdmin();
         loadBrokerageData();
+        AsyncManager.me().execute(()->{
+            luceneSearchService.initializeIndex();
+        });
+
     }
 
 

+ 7 - 2
service/src/main/java/com/dayou/service/ILuceneSearchService.java

@@ -1,7 +1,10 @@
 package com.dayou.service;
 
 import com.dayou.vo.LuceneSearchVO;
+import org.apache.lucene.queryparser.classic.ParseException;
+import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -13,17 +16,20 @@ import java.util.List;
  */
 public interface ILuceneSearchService {
 
+
     /**
      * 初始化Lucene索引
      */
     void initializeIndex();
 
+
     /**
      * 搜索
      * @param keyword
      * @return
      */
-    List<LuceneSearchVO> queryIndex(String keyword);
+    List<LuceneSearchVO> globalSearch(String businessType, String keyword) throws IOException, ParseException, InvalidTokenOffsetsException;
+
 
     /**
      * 添加索引
@@ -35,5 +41,4 @@ public interface ILuceneSearchService {
      */
     void removeIndex();
 
-
 }

+ 62 - 2
service/src/main/java/com/dayou/service/impl/LuceneSearchServiceImpl.java

@@ -17,8 +17,14 @@ import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.StringField;
 import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
+import org.apache.lucene.queryparser.classic.ParseException;
+import org.apache.lucene.queryparser.classic.QueryParser;
+import org.apache.lucene.search.*;
+import org.apache.lucene.search.highlight.*;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.poi.ss.formula.functions.T;
@@ -91,14 +97,67 @@ public class LuceneSearchServiceImpl implements ILuceneSearchService {
                 }
 
             }
+            log.info("=========>LUCENE索引文件初始化完成...");
         }
     }
 
     @Override
-    public List<LuceneSearchVO> queryIndex(String keyword) {
-        return null;
+    public List<LuceneSearchVO> globalSearch(String businessType, String keyword) throws IOException, ParseException, InvalidTokenOffsetsException {
+        Directory directory = null;
+        DirectoryReader reader = null;
+        Query query = null;
+        List<LuceneSearchVO> results;
+        try {
+            directory = FSDirectory.open(FileSystems.getDefault().getPath(dfsConfig.getLuceneDir()));
+            reader = DirectoryReader.open(directory);
+            IndexSearcher indexSearcher = new IndexSearcher(reader);
+
+            if (!StrUtil.equals("ALL",businessType)){
+                String[] queries = { businessType, keyword };
+                String[] fields = { "businessEnum", "result" };
+                BooleanClause.Occur[] clauses = { BooleanClause.Occur.MUST, BooleanClause.Occur.MUST };
+                query = MultiFieldQueryParser.parse(queries, fields, clauses, new IKAnalyzer());
+            }else {
+                QueryParser parser = new QueryParser("result", new IKAnalyzer());
+                query = parser.parse(keyword);
+            }
+
+            TopDocs topDocs = indexSearcher.search(query, 10);
+            //加入高亮显示的
+            SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<span style='color:red'>", "</span>");
+            Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
+            Fragmenter fragmenter = new SimpleFragmenter(50);
+            highlighter.setTextFragmenter(fragmenter);
+
+
+            log.info("本次搜索共找到" + topDocs.totalHits + "条数据");
+            ScoreDoc[] scoreDocs = topDocs.scoreDocs;
+            results = new ArrayList<>();
+            for (ScoreDoc scoreDoc :scoreDocs){
+                LuceneSearchVO luceneSearchVO = new LuceneSearchVO();
+                // 取出文档编号
+                int docId = scoreDoc.doc;
+                Document doc = reader.document(docId);
+                luceneSearchVO.setId(doc.get("id"));
+                String result = doc.get("result");
+                if (StrUtil.isNotBlank(result)){
+                    result = highlighter.getBestFragment(new IKAnalyzer(), "result", result);
+                }
+                luceneSearchVO.setResult(result);
+                luceneSearchVO.setBusinessEnum(doc.get("businessEnum"));
+                luceneSearchVO.setMenuName(doc.get("menuName"));
+                luceneSearchVO.setUrl(doc.get("url"));
+                results.add(luceneSearchVO);
+            }
+        } finally {
+            directory.close();
+            reader.close();
+        }
+
+        return results;
     }
 
+
     @Override
     public void addIndex() {
 
@@ -141,6 +200,7 @@ public class LuceneSearchServiceImpl implements ILuceneSearchService {
 
     private void doCreatedLuceneIndex(List<Object> luceneData, Collection<Document> docs ) throws NoSuchFieldException {
         Class aClass = luceneData.get(0).getClass();
+        log.info("=========>正在初始化[{}]索引文件...", aClass.getName());
         LuceneResource annotation = (LuceneResource) aClass.getAnnotation(LuceneResource.class);
         String businessType = annotation.value().getMsg();
         String menuName = annotation.menuName();

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/IWorkFlowLogService.java

@@ -3,6 +3,7 @@ import com.dayou.entity.WorkFlowLog;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayou.vo.WorkLogVO;
 import com.dayou.vo.WorkflowLogVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
@@ -26,4 +27,5 @@ public interface IWorkFlowLogService extends IService<WorkFlowLog> {
         Boolean add(WorkFlowLog workFlowLog);
 
     List<WorkflowLogVO> getList(WorkFlowLog workFlowLog);
+
 }

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/WorkFlowLogServiceImpl.java

@@ -4,6 +4,7 @@ import com.dayou.entity.WorkFlowLog;
 import com.dayou.mapper.WorkFlowLogMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.utils.DateUtils;
+import com.dayou.vo.WorkLogVO;
 import com.dayou.vo.WorkflowLogVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -52,4 +53,5 @@ public class WorkFlowLogServiceImpl extends ServiceImpl<WorkFlowLogMapper, WorkF
         return list;
     }
 
+
 }