Commit 68e5cc146e94eff0982cdbc1c1db234843498fa9

Authored by zhangmeiyang
1 parent 370056a9

feat(storage): 新增业务关键字配置功能

- 添加批量保存和查询业务关键字接口- 定义业务关键字相关实体类和传输对象
- 实现业务关键字数据访问层逻辑- 更新导入包路径使用通配符简化代码
- 修改单据类型字段为字符串类型以支持更多场景
tax-storage/src/main/java/com/diligrp/tax/storage/controller/TaxPipelineBusinessConfigController.java
@@ -2,10 +2,7 @@ package com.diligrp.tax.storage.controller; @@ -2,10 +2,7 @@ package com.diligrp.tax.storage.controller;
2 2
3 import com.diligrp.tax.central.message.Valid; 3 import com.diligrp.tax.central.message.Valid;
4 import com.diligrp.tax.central.message.Message; 4 import com.diligrp.tax.central.message.Message;
5 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessCO;  
6 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessConfigCO;  
7 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessExtCO;  
8 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessExtDefaultDataCO; 5 +import com.diligrp.tax.storage.model.co.*;
9 import com.diligrp.tax.storage.service.TaxPipelineBusinessConfigService; 6 import com.diligrp.tax.storage.service.TaxPipelineBusinessConfigService;
10 import jakarta.annotation.Resource; 7 import jakarta.annotation.Resource;
11 import org.springframework.validation.annotation.Validated; 8 import org.springframework.validation.annotation.Validated;
@@ -14,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestBody; @@ -14,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestBody;
14 import org.springframework.web.bind.annotation.RequestMapping; 11 import org.springframework.web.bind.annotation.RequestMapping;
15 import org.springframework.web.bind.annotation.RestController; 12 import org.springframework.web.bind.annotation.RestController;
16 13
  14 +import java.util.List;
  15 +
17 /** 16 /**
18 * @Author: zhangmeiyang 17 * @Author: zhangmeiyang
19 * @CreateTime: 2025-11-13 15:12 18 * @CreateTime: 2025-11-13 15:12
@@ -145,4 +144,27 @@ public class TaxPipelineBusinessConfigController { @@ -145,4 +144,27 @@ public class TaxPipelineBusinessConfigController {
145 taxPipelineBusinessConfigService.refreshBusinessExtData(co); 144 taxPipelineBusinessConfigService.refreshBusinessExtData(co);
146 return Message.success(); 145 return Message.success();
147 } 146 }
  147 +
  148 + /**
  149 + * 批量保存业务关键字
  150 + *
  151 + * @param cos 对象列表
  152 + * @return {@link Message }<{@link ? }>
  153 + */
  154 + @RequestMapping("/keyword/batchSaveBusinessKeyword")
  155 + public Message<?> batchSaveBusinessKeyword(@RequestBody @Validated(value = Valid.Create.class) List<TaxPipelineBusinessKeywordCO> cos) {
  156 + taxPipelineBusinessConfigService.batchSaveBusinessKeyword(cos);
  157 + return Message.success();
  158 + }
  159 +
  160 + /**
  161 + * 列表业务关键字
  162 + *
  163 + * @param co 公司
  164 + * @return {@link Message }<{@link ? }>
  165 + */
  166 + @RequestMapping("/keyword/listBusinessKeyword")
  167 + public Message<?> listBusinessKeyword(@RequestBody @Validated(value = Valid.Read.class) TaxPipelineBusinessKeywordCO co) {
  168 + return Message.success(taxPipelineBusinessConfigService.listBusinessKeyword(co));
  169 + }
148 } 170 }
tax-storage/src/main/java/com/diligrp/tax/storage/domain/TaxPipelineBusinessKeyword.java
@@ -5,13 +5,16 @@ import com.baomidou.mybatisplus.annotation.TableField; @@ -5,13 +5,16 @@ import com.baomidou.mybatisplus.annotation.TableField;
5 import com.baomidou.mybatisplus.annotation.TableId; 5 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 6 import com.baomidou.mybatisplus.annotation.TableName;
7 import lombok.Data; 7 import lombok.Data;
  8 +import lombok.Getter;
  9 +import lombok.Setter;
8 10
9 /** 11 /**
10 * 12 *
11 * @TableName tax_pipeline_business_keyword 13 * @TableName tax_pipeline_business_keyword
12 */ 14 */
13 @TableName(value ="tax_pipeline_business_keyword") 15 @TableName(value ="tax_pipeline_business_keyword")
14 -@Data 16 +@Getter
  17 +@Setter
15 public class TaxPipelineBusinessKeyword { 18 public class TaxPipelineBusinessKeyword {
16 /** 19 /**
17 * 20 *
@@ -29,7 +32,7 @@ public class TaxPipelineBusinessKeyword { @@ -29,7 +32,7 @@ public class TaxPipelineBusinessKeyword {
29 * 单据类型 32 * 单据类型
30 */ 33 */
31 @TableField(value = "document_type") 34 @TableField(value = "document_type")
32 - private Integer documentType; 35 + private String documentType;
33 36
34 /** 37 /**
35 * 单据字段 38 * 单据字段
tax-storage/src/main/java/com/diligrp/tax/storage/model/co/TaxPipelineBusinessKeywordCO.java 0 → 100644
  1 +package com.diligrp.tax.storage.model.co;
  2 +
  3 +import com.diligrp.tax.central.message.Valid;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Getter;
  7 +import lombok.Setter;
  8 +
  9 +/**
  10 + * @Author: zhangmeiyang
  11 + * @CreateTime: 2025-11-17 16:32
  12 + * @Version: todo
  13 + */
  14 +@Getter
  15 +@Setter
  16 +public class TaxPipelineBusinessKeywordCO {
  17 +
  18 + private Integer id;
  19 + /**
  20 + * 业务id
  21 + */
  22 + @NotNull(groups = {Valid.Create.class, Valid.Read.class})
  23 + private Long taxPipelineBusinessId;
  24 + /**
  25 + * 单据类型
  26 + */
  27 + @NotEmpty(groups = {Valid.Create.class})
  28 + private String documentType;
  29 +
  30 + /**
  31 + * 文档字段
  32 + */
  33 + @NotEmpty(groups = {Valid.Create.class})
  34 + private String documentField;
  35 +
  36 + /**
  37 + * 文档值方式
  38 + */
  39 + @NotNull(groups = {Valid.Create.class})
  40 + private Integer documentValueWay;
  41 +
  42 + /**
  43 + * 文档值内容
  44 + */
  45 + @NotEmpty(groups = {Valid.Create.class})
  46 + private String documentValueContent;
  47 +}
tax-storage/src/main/java/com/diligrp/tax/storage/model/vo/TaxPipelineBusinessKeywordVO.java 0 → 100644
  1 +package com.diligrp.tax.storage.model.vo;
  2 +
  3 +import lombok.Getter;
  4 +import lombok.Setter;
  5 +
  6 +/**
  7 + * @Author: zhangmeiyang
  8 + * @CreateTime: 2025-11-17 16:32
  9 + * @Version: todo
  10 + */
  11 +@Getter
  12 +@Setter
  13 +public class TaxPipelineBusinessKeywordVO {
  14 +
  15 + private Integer id;
  16 + /**
  17 + * 业务id
  18 + */
  19 + private Long taxPipelineBusinessId;
  20 + /**
  21 + * 单据类型
  22 + */
  23 + private String documentType;
  24 +
  25 + /**
  26 + * 文档字段
  27 + */
  28 + private String documentField;
  29 +
  30 + /**
  31 + * 文档值方式
  32 + */
  33 + private Integer documentValueWay;
  34 +
  35 + /**
  36 + * 文档值内容
  37 + */
  38 + private String documentValueContent;
  39 +}
tax-storage/src/main/java/com/diligrp/tax/storage/service/TaxPipelineBusinessConfigService.java
@@ -8,21 +8,13 @@ import com.diligrp.tax.central.type.DocumentType; @@ -8,21 +8,13 @@ import com.diligrp.tax.central.type.DocumentType;
8 import com.diligrp.tax.central.type.TaxSystemType; 8 import com.diligrp.tax.central.type.TaxSystemType;
9 import com.diligrp.tax.central.utils.JsonUtils; 9 import com.diligrp.tax.central.utils.JsonUtils;
10 import com.diligrp.tax.storage.api.response.PipelineBusinessResponse; 10 import com.diligrp.tax.storage.api.response.PipelineBusinessResponse;
11 -import com.diligrp.tax.storage.domain.TaxPipelineBusiness;  
12 -import com.diligrp.tax.storage.domain.TaxPipelineBusinessConfig;  
13 -import com.diligrp.tax.storage.domain.TaxPipelineBusinessExt;  
14 -import com.diligrp.tax.storage.domain.TaxPipelineBusinessExtData;  
15 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessCO;  
16 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessConfigCO;  
17 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessExtCO;  
18 -import com.diligrp.tax.storage.model.co.TaxPipelineBusinessExtDefaultDataCO; 11 +import com.diligrp.tax.storage.domain.*;
  12 +import com.diligrp.tax.storage.model.co.*;
19 import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessConfigVO; 13 import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessConfigVO;
20 import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessExtVO; 14 import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessExtVO;
  15 +import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessKeywordVO;
21 import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessVO; 16 import com.diligrp.tax.storage.model.vo.TaxPipelineBusinessVO;
22 -import com.diligrp.tax.storage.repo.TaxPipelineBusinessConfigRepository;  
23 -import com.diligrp.tax.storage.repo.TaxPipelineBusinessExtDataRepository;  
24 -import com.diligrp.tax.storage.repo.TaxPipelineBusinessExtRepository;  
25 -import com.diligrp.tax.storage.repo.TaxPipelineBusinessRepository; 17 +import com.diligrp.tax.storage.repo.*;
26 import jakarta.annotation.Resource; 18 import jakarta.annotation.Resource;
27 import org.springframework.stereotype.Service; 19 import org.springframework.stereotype.Service;
28 import org.springframework.transaction.annotation.Transactional; 20 import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +42,9 @@ public class TaxPipelineBusinessConfigService { @@ -50,6 +42,9 @@ public class TaxPipelineBusinessConfigService {
50 @Resource 42 @Resource
51 private TaxPipelineBusinessExtDataRepository taxPipelineBusinessExtDataRepository; 43 private TaxPipelineBusinessExtDataRepository taxPipelineBusinessExtDataRepository;
52 44
  45 + @Resource
  46 + private TaxPipelineBusinessKeywordRepository taxPipelineBusinessKeywordRepository;
  47 +
53 /** 48 /**
54 * 保存业务类型 49 * 保存业务类型
55 * 50 *
@@ -261,4 +256,37 @@ public class TaxPipelineBusinessConfigService { @@ -261,4 +256,37 @@ public class TaxPipelineBusinessConfigService {
261 pipelineBusinessResponse.setBusinessExt(taxPipelineBusinessExts.stream().map(item -> JsonUtils.convertValue(item, TaxPipelineBusinessExtVO.class)).toList()); 256 pipelineBusinessResponse.setBusinessExt(taxPipelineBusinessExts.stream().map(item -> JsonUtils.convertValue(item, TaxPipelineBusinessExtVO.class)).toList());
262 return pipelineBusinessResponse; 257 return pipelineBusinessResponse;
263 } 258 }
  259 +
  260 + /**
  261 + * 批量保存业务关键字
  262 + *
  263 + * @param cos 因为
  264 + */
  265 + @Transactional
  266 + public void batchSaveBusinessKeyword(List<TaxPipelineBusinessKeywordCO> cos) {
  267 + Optional.ofNullable(cos).ifPresent(ts -> {
  268 + Long taxPipelineBusinessId = ts.getFirst().getTaxPipelineBusinessId();
  269 + LambdaQueryWrapper<TaxPipelineBusinessKeyword> queryWrapper = new LambdaQueryWrapper<>();
  270 + queryWrapper.eq(TaxPipelineBusinessKeyword::getTaxPipelineBusinessId, taxPipelineBusinessId);
  271 + taxPipelineBusinessKeywordRepository.delete(queryWrapper);
  272 + ts.forEach(co -> {
  273 + DocumentType.validateDocumentType(co.getDocumentType());
  274 + TaxPipelineBusinessKeyword taxPipelineBusinessKeyword = JsonUtils.convertValue(co, TaxPipelineBusinessKeyword.class);
  275 + taxPipelineBusinessKeywordRepository.insert(taxPipelineBusinessKeyword);
  276 + });
  277 + }
  278 + );
  279 + }
  280 +
  281 + /**
  282 + * 列表业务关键字
  283 + *
  284 + * @param co 公司
  285 + * @return {@link List }<{@link TaxPipelineBusinessKeywordVO }>
  286 + */
  287 + public List<TaxPipelineBusinessKeywordVO> listBusinessKeyword(TaxPipelineBusinessKeywordCO co) {
  288 + LambdaQueryWrapper<TaxPipelineBusinessKeyword> queryWrapper = new LambdaQueryWrapper<>();
  289 + queryWrapper.eq(TaxPipelineBusinessKeyword::getTaxPipelineBusinessId, co.getTaxPipelineBusinessId());
  290 + return taxPipelineBusinessKeywordRepository.selectList(queryWrapper).stream().map(item -> JsonUtils.convertValue(item, TaxPipelineBusinessKeywordVO.class)).toList();
  291 + }
264 } 292 }
tax-storage/src/main/java/com/diligrp/tax/storage/service/TaxPipelineBusinessKeywordService.java deleted 100644 → 0
1 -package com.diligrp.tax.storage.service;  
2 -  
3 -import com.diligrp.tax.storage.repo.TaxPipelineBusinessKeywordRepository;  
4 -import jakarta.annotation.Resource;  
5 -import org.springframework.stereotype.Service;  
6 -  
7 -/**  
8 - * @Author: zhangmeiyang  
9 - * @CreateTime: 2025-11-17 16:05  
10 - * @Version: todo  
11 - */  
12 -@Service  
13 -public class TaxPipelineBusinessKeywordService {  
14 -  
15 - @Resource  
16 - private TaxPipelineBusinessKeywordRepository taxPipelineBusinessKeywordRepository;  
17 -  
18 -  
19 -}