CN117312222A - 一种基于spi的政府采购方法、系统、设备和介质 - Google Patents

一种基于spi的政府采购方法、系统、设备和介质 Download PDF

Info

Publication number
CN117312222A
CN117312222A CN202311609159.9A CN202311609159A CN117312222A CN 117312222 A CN117312222 A CN 117312222A CN 202311609159 A CN202311609159 A CN 202311609159A CN 117312222 A CN117312222 A CN 117312222A
Authority
CN
China
Prior art keywords
spi
class
service mode
mode
interface
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202311609159.9A
Other languages
English (en)
Other versions
CN117312222B (zh
Inventor
林登钰
刘佳
田德彪
王建徽
罗梦伟
赵博文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bosi Data Mining Technology Co ltd
Original Assignee
Bosi Data Mining Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Bosi Data Mining Technology Co ltd filed Critical Bosi Data Mining Technology Co ltd
Priority to CN202311609159.9A priority Critical patent/CN117312222B/zh
Publication of CN117312222A publication Critical patent/CN117312222A/zh
Application granted granted Critical
Publication of CN117312222B publication Critical patent/CN117312222B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/08Logistics, e.g. warehousing, loading or distribution; Inventory or stock management
    • G06Q10/087Inventory or stock management, e.g. order filling, procurement or balancing against orders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
    • G06Q50/10Services
    • G06Q50/26Government or public services
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Tourism & Hospitality (AREA)
  • Data Mining & Analysis (AREA)
  • Economics (AREA)
  • Development Economics (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Marketing (AREA)
  • Human Resources & Organizations (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Computational Linguistics (AREA)
  • Operations Research (AREA)
  • Quality & Reliability (AREA)
  • Finance (AREA)
  • Software Systems (AREA)
  • Accounting & Taxation (AREA)
  • Educational Administration (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Primary Health Care (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供一种基于SPI的政府采购方法、系统、设备和介质,方法包括:通过SPI接口实现容器注册机制,读取出带自定义注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,将不同业务模式类的实例化的Bean对象注入至Spring的注解集中;根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;根据设定的采购模式,从所述数据库配置表获取对应的业务模式的Bean实例,实现采购的配置,并进行采购信息发布;实现一键式配置进行采购,大大提高效率。

Description

一种基于SPI的政府采购方法、系统、设备和介质
技术领域
本发明涉及商品采购技术领域,特别涉及一种基于SPI的政府采购方法、系统、设备和介质。
背景技术
现有的政府采购类的商城的品目种类繁多,各个省、市政府采购类的商城部分服务类品目业务需求个性化要求高,不能进行简单的业务模式管理。
现框架采购系统的服务类项目交易模式有三种,分别为:直接选定、二次竞价、顺序轮候。山东省服务类项目针对车辆加油和车辆保险品目新增了车辆加油和车辆保险直接选定项目的特殊业务模式,而山西省、四川省服务类项目关于车辆加油和车辆保险品目直接选定业务模式为普通模式,两者业务流程、程序实现上相差巨大。
以车辆加油直接选定流程举例:山西省车辆加油直接选定项目是由采购人发起,新增选择一阶段项目需求明细,然后发布项目,供应商进行项目响应报价,最后由采购人确认项目结果,生成项目订单;山东省车辆加油直接选定项目是由采购人发起,选择加油主卡,录入加油充值金额及充值人信息,然后发布项目,供应商进行项目的确认,无需报价,确认后生成项目订单。可以看出业务流程、程序实现上的巨大差异性。
现有代码渐渐出现业务模式判断逻辑,程序接口和实现逐渐冗余。随着后续不同商城其他品目的个性化需求下达,如山东省的车辆维修、车辆租赁品目,且支持的交易模式不再止于直接选定;程序代码通过对品目的不同项目模式进行特定判断,进行特殊业务流转。对于各个品目的交易模式处理扩展性不高,容易造成代码可维护性变差。
发明内容
本发明要解决的技术问题,在于提供一种基于SPI的政府采购方法、系统、设备和介质,实现一键式配置进行采购,大大提高效率。
第一方面,本发明提供了一种基于SPI的政府采购方法,包括:
步骤1、通过SPI接口实现容器注册机制,读取出带自定义注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,将不同业务模式类的实例化的Bean对象注入至Spring的注解集中;
步骤2、根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;
步骤3、根据设定的采购模式,从所述数据库配置表获取对应的业务模式的Bean实例,实现采购的配置,并进行采购信息发布。
进一步地,所述步骤1进一步具体为:将自定义注解设置为@Spi;之后通过SPI接口实现容器注册机制,读取出带@Spi注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,所述业务模式类包括直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类,根据设定需求,分别将直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类进行实例化成Bean对象,将所有的Bean对象注入至Spring容器的注解集中。
进一步地,所述SPI接口实现容器注册机制具体包括:Spring容器提供ImportBeanDefinitionRegistrar接口,所述ImportBeanDefinitionRegistrar接口提供registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)接口和registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry)接口;实现上述两个接口,并重写任意一个接口方法,用于定义新Bean对象的注册扫描器,并定义SPI中的Bean名称生成的命名规则,将@Spi注解注册到Spring容器注解集中。
进一步地,所述步骤3进一步具体为:根据设定的采购模式,通过可视化界面从所述数据库配置表获取对应的业务模式的Bean实例,并录入采购需求,实现采购的配置,并进行采购信息发布。
第二方面,本发明提供了一种基于SPI的政府采购系统,包括:
注册模块,通过SPI接口实现容器注册机制,读取出带自定义注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,将不同业务模式类的实例化的Bean对象注入至Spring的注解集中;
存储模块,根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;
配置采购模块,根据设定的采购模式,从所述数据库配置表获取对应的业务模式的Bean实例,实现采购的配置,并进行采购信息发布。
进一步地,所述注册模块进一步具体为:将自定义注解设置为@Spi;之后通过SPI接口实现容器注册机制,读取出带@Spi注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,所述业务模式类包括直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类,根据设定需求,分别将直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类进行实例化成Bean对象,将所有的Bean对象注入至Spring容器的注解集中。
进一步地,所述SPI接口实现容器注册机制具体包括:Spring容器提供ImportBeanDefinitionRegistrar接口,所述ImportBeanDefinitionRegistrar接口提供registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)接口和registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry)接口;实现上述两个接口,并重写任意一个接口方法,用于定义新Bean对象的注册扫描器,并定义SPI中的Bean名称生成的命名规则,将@Spi注解注册到Spring容器注解集中。
进一步地,所述配置采购模块进一步具体为:根据设定的采购模式,通过可视化界面从所述数据库配置表获取对应的业务模式的Bean实例,并录入采购需求,实现采购的配置,并进行采购信息发布。
第三方面,本发明提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述的方法。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
通过基于SPI技术,梳理业务模式,设计模式配置,重构优化现程序代码,达到对于不同区划的各个服务类品目的交易方式支持模式化配置,一键式配置,前后端动态切换应用所配模式。业务代码层面实现公用逻辑统一管理,逻辑逐一解耦,代码扩展性高、可读性好、维护性强。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明实施例一中方法中的流程图;
图2为本发明实施例二中系统的结构示意图;
图3为本发明具体实施的原理图;
图4为本发明具体实施的配置表示意图;
图5为本发明具体实施业务中SPI实现结构示意图。
具体实施方式
本申请实施例中的技术方案,总体思路如下:
SPI全称是Service Provider Interface,是一种动态加载实现扩展点的机制,通过 SPI 技术可以动态获取接口的实现类,实际上是基于接口的编程+策略模式+配置文件组合实现的动态加载机制。SPI的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类;在运行时,动态为接口替换实现类。基于服务提供接口SPI机制通过接口适配获取业务类型,所述业务类型包括标准业务和特殊业务;当获取到特殊业务时,通过SPI的接口文件加载所述特殊业务的路径,并将所述特殊业务的扩展类注册到Spring框架以实现动态创建服务接口。
1、本发明提出通过SPI技术:一种用于实现某种服务、功能、面向的是服务实现方的技术。本发明技术的方案区别于传统的SPI技术,在程序代码层面依据SPI接口的约定以及标准化,在不同的业务模式下,实现其特殊的业务模式代码,通过设计的SPI接口实现容器注册机制会读取出相关带@Spi注解的业务模式类将其全类名信息设置到业务模式配置表中,将不同业务模式类的Bean实例注入至Spring容器中,实现了业务模式的自动注入。随后在系统层面即可页面化的配置相关站点的相关品目所对应的业务模式,将其站点品目业务模式配置存储在相关数据库表中,采购人进行业务交易时,前端请求获取站点品目业务模式配置后,后续项目交易流程其业务模式得到确认,进行相关操作时程序会自动获取相关业务模式bean实例,进行相关模式的业务处理。实现了页面业务模式配置动态生效,无需重启服务,即达到实时的效果。如:车辆加油品目,在山东省需要进行直接选定车辆加油特殊模式交易,山西省为直接选定普通模式交易,系统管理员进行页面化的配置,配置山东省站点车辆加油品目直接选定为车辆加油模式,山西省无需配置默认为直接选定普通模式交易即可。其山东省采购人进行该品目的交易即为特殊模式,山西省交易为普通模式。
具体实现方式分以下几个步骤:
一、SPI接口的约定以及标准化
在整个业务实现过程中,业务逻辑处理实现对象统一被Spring容器托管,需要被注解@Contoller、@Service、@Component等标记,将业务对象注册为Spring的Bean对象并将生命周期托管至Spring容器管理,这样在整个应用中可以获取到Bean对象进行相应的业务处理,同样为了接入SPI机制,且能够注入Bean对象,必须将SPI对象通过一种动态机制注册到Spring容器中,为了区分与普通业务Bean对象,需要为SPI对象制定一套约束以及标准,本发明针对应用中的SPI对象需要标注自定义的@Spi注解(且不需要标注普通Bean),此注解不能省略,同时约定对于SPI接口和实现类命名统一以Spi结尾(非必需,约定)。
二、SPI接口实现容器注册机制
在整个应用的Spring容器中,针对Spring原生的Bean对象注解,Spring容器可以将其自动注册为容器对象并管理他们的生命周期,但是无法识别自定义@Spi注解,需要进行扩展将其被纳入Spring容器的注解集中,并能够被Spring容器发现识别,将标注@Spi的类实例化成Bean对象并进行生命周期托管,技术解决思路如下:
Spring容器提供ImportBeanDefinitionRegistrar接口,其中提供两个registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)和registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry)接口。
代码如下:
package org, springframework. context,annotation;
import ...
pubLic interface ImportBeanDefinitionRegistrar {
default void registerBeanDefinitions(AnnotationMetadataimportingCLassMetadata, BeanDefinitionRegistry registry, BeanNameGeneratorimportBeanNameGenerator) {
this.registerBeanDefinitions(importingCLassMetadata, registry);
default void registerBeanDefinitions(AnnotationMetadataimportingCLassMetadata, BeanDefinitionRegistry registry)
需要实现以上接口,并重写任意一个接口方法,将@Spi注解注册到Spring容器注解集中,关键代码如下所示:
SpiClassPathBeanDefinitionScanner scanner = new SpiClassPathBeanDefinitionScanner(registry, false);//定义新的bean对象的注册扫描器,并不使用默认的扫描过滤机制
scanner.setResourceLoader(resourceLoader);// 设置类加载器
scanner.registerFilters();
MergedAnnotation<EnableSpi> enableSpiMergedAnnotation = importingClassMetadata.getAnnotations().get(EnableSpi.class);//启动Spi截止
EnableSpi enableSpi = enableSpiMergedAnnotation.synthesize();
String[] basePackages = enableSpi.value(); //进行Spi的Bean扫描
AssertUtils.notEmpty(basePackages,"缺少SPI扫描包配置:{}",basePackages);
log.info("======启动SPI机制,配置值为:{}======", Arrays.toString(basePackages));
scanner.doScan(basePackages);
其中SpiClassPathBeanDefinitionScanner类的代码如下所示:
package com. bosssoft. gpmall. Spi.context;
import ...
public class SpiClassPathBeanDefinitionScanner extendsCLassPathBeanDefinitionScanner {
public SpiClassPathBeanDefinitionScanner(BeanDefinitionRegistryregistry, booLean useDefaultFilters) {
super (registry, useDefaultFilters);
this.setBeanNameGenerator(new UniqueNameGenerator();
protected void registerFilters() { addIncLudeFilter(newAnnotationTypeFilter(Spi.cLass); }
/**
*重写类扫描包路径加载器,调用父类受保护的扫描方法doScan
*@param bosePackages
*@return
*/
@Override
protected Set<BeanDefinitionHolder> doScan(String... basePackages) {return super . doScan(basePackages); }
}
以上重新定义注册扫描器,并定义SPI的Bean名称生成的命名规则,解决SPI的相同接口有多个实现类且Bean名称一样导致容器启动无法正常运行的问题。
三、SPI接口使用场景和说明
服务类项目模式配置:
如图3所示,在服务类项目模式接入SPI中站点对应服务类项目业务模式的配置设计,通过站点配置,之后将服务类项目业务模式进行配置,选择了服务类品目之后配置交易方式,根据设定可以选择顺序轮候、直接选定或者二次竞价;之后每种方式中再进行模式配置,直接选定和二次竞价中提供了基础模式;顺序轮候中分别为基础模式、车辆加油模式以及车辆保险模式,根据规定的要求进行选择;
如图4所示,针对服务类项目业务模式关键配置需要存储在磁盘或者缓存中,因为配置相对稳定,所以考虑采用缓存+数据库对双存储机制,数据库关键配置表(gpfa_spm_business_config)结构如下:
主要配置属性:站点ID、项目类型、业务类型、实现类全类名、品目ID;
站点ID:站点配置的站点标识符,业务接入通过前端接口head请求头或Cookie中区划编码,获取其对应站 点ID标识符;
项目类型:现有服务类项目类型:直接选定、二次竞价、顺序轮候;
业务类型:根据项目类型,展示现支持的业务模式供与用户选择配置;
具体业务模式代码处理类的全类名路径,可根据项目类型、业务类型进行配置绑定,用户只需按钮式配置项目模式即可。
品目ID:服务类品目ID,业务接入在发起具体项目时获取到该站点下、该交易方式、品目对应的业务模式;
通过配置,得到了直接选定基础模式和车辆加油模式配置信息;
SPI接入实现
业务服务引入基础框架SPI依赖,主启动类 @EnableSpi 标识开启SPI模式,并配置SPI实现类包路径:
@EnabLeHystrix
@EnabLeAsync
@EnableSpi("com.bosssoft.gpfa.spm.spi")
pubLic class GpfaSpmBootstrap extends SpringBootServletInitializer{
pubLic static void main(String[] args) { SpringApplication. run(GpfaSpmBootstrap.class, args); };
如图5所示,为业务中SPI实现结构;
SPI实现类使用@Spi注解标识:
/**
* @author luomengwei
* @program gpfa- spm
* adescription 直接选定车辆加油模式
* acreate 2023-04-11 16:45
@SLf4j
@Spi
public class SpiDirectSeLectVehicleRefuelingHandLer extendsSpiDirectSeLectHandLer {
@Autowired
private RefuelingRecordService refuelingRecordService;};
注入基础框架给到的 SpiBeanFactory SPI实现类工厂,通过其给的方法getBean(new SpmKey()), 传递具体条件获取站点服务模式配置的具体模式实现类:
@Autowi red
private Spi BeanFactory spi BeanFactory;
/**
*通过SPM参数获取项目spi处理handler
*@param goodsClassGuid 品目ID
*@param projectType 项目类型
*@param businessType 业务类型
*@return Spi服务类handler
* @author 1uomengwei
* @date 2023-4-12 16:05
*/
public SpiAbstractCommonHandler getSpi Hand1erBySpmKey(StringgoodsClassGuid ,Integer projectType, String busi nessType) {
businessType = StringUtils. i sNotBlank(businessType) ? businessType:ProjectBusi nessTypeEnums . COMMON_ _TYPE . getCode() ;
//获取
Spi AbstractCommonHandler spi AbstractCommonHandler=
spi BeanFactory.getBean(new SpmKey(goodsClassGuid, projectType,
businessType));
1og. info("通过SPM参数获取项目spi :品目ID-{},项目类型-{},业务类型-{},获取到的handler:{}",goodsClassGuid, projectType, businessType,
spi AbstractCommonHandler . getClass() . getTypeName());
return spiAbstractCommonHandler;
}
业务模式业务架构设计:业务代码通过模板模式、策略模式,对各个业务模式实现分阶段自顶向下公用逻辑统一实现、最终业务模块实现特殊业务逻辑。业务模式处理类交予基础框架进行初始化和管理,基础框架通过站点服务类业务模式配置进行业务模式处理类的返回。
业务模式代码结构如下:
基础公共抽象模板类,删除服务类项目公共逻辑及特殊处理:
/**
*[调用]删除服务类项目
* @parom projectGuid项目ID
*@author luomengwei
* @date 2023-4-11 20:06
public void removeServiceProject(String projectGuid) {
//获取用户
UserContext userContext = UserContextHolder.getContextThrowNULl();
// verify :该操作只能是采购人操作
Assertutils.isTrue(userContext.isPurchaser(,GLobaLErrorCodeEnuns.USER_ INFO_ ,ERROR);
ProjectEntity projectEntity = projectService.getProjectEntityCheckNulL(projectGuid);
// verify :项目在未发布之前的阶段都可以删除,即草稿状态成持发布状态
AssertUtils. isTrue( expression: ServiceProjectStatusEnums . DRAFT.getCode() .equals(projectEntity.getProjectStatus()) II erviceProjectStatust
//删除需求
List<ProjectRequirementEntity> lastProjectRequirenentEntityList =projectRequirenentService .removeByProjectGuid(projectGuid) ;
//删除商务需求
projectotherBusinessService . renoveByProjectGuid(projectGuid) ;
//删除掉旧的需求与计划明细关系列表
List<RequirementToItemEntity> lastRequirementToItemEntities =requirementToItemService . removeRequirementItemByProjectGuid(project6uid);
//删除项目的操作
this. doDeLSpecialoperation(projectEntity);//根据交易方式及业务模式进行处理
//删除项目
projectService .removeById(project6uid);
删除项目的操作,定义为抽象方法,继承基础公共抽象模板类的子类可对其进行实现:
/**
*删除项目的操作
* @param projectEntity 项目
*@author luomengwei
* adate 2023-4-12 10:43
public abstract void doDelSpecialoperation(ProjectEntityprojectEntity);
直接选定基础模式业务类,无删除操作,即可为空:
/**
*删除项目的操作
* @param projectEntity 项目
* @author luomengwei
* adate 2023-4-12 10:43
*/
@override
pubLic void doDelSpeciaLOperation(ProjectEntity projectEntity) {
}
直接选定车辆加油模式业务类,删除车辆加油记录信息:
/**
*删除项目的操作
* @param projectEntity 项目
* @author luomengwei
* @date 2023-4-12 10:43
Qoverride
pubLic void doDelSpeciaLoperation(ProjectEntity projectEntity) {
// query :查询是否开启计划多次使用
Boolean pLanMuLtipleUseFlag = Boolean. TRUE;
//删除车辆加油纪录
refuelingRecordService . removeRefuelingRecordByrojectGuid(projectEntity . getProjectGuid(), pLanMultipleUseFLag);
}
直接选定车辆保险模式业务类,删除车辆保险需求信息:
/★*
*删除项目的操作
* @param projectEntity 项目
*@author Luomengwei
*@date 2023-4-12 10:43
*/
@Override
public void doDelSpeciaLoperation(ProjectEntity projectEntity) {
// query :查询是否开启计划多次使用
BooLean planMuttipLeUseFlag = Boolean. TRUE;
//删除车辆保险纪录
vehicLeInsuranceRecordService . delVehicleInsuranceRecordWithItemByProjectGuid(projectEntity. getProjectGuid(), pLanMultipleUseFlag)
}
通过上述的方式,使得直接选定方式下,同一品目配置基础模式或车辆加油模式可以动态切换至所配置模式。
实施例一
如图1所示,本实施例提供一种基于SPI的政府采购方法,包括:
步骤1、将自定义注解设置为@Spi;之后通过SPI接口实现容器注册机制,读取出带@Spi注解的业务模式类(该业务模式类为已经实例化成Bean对象的类),将业务模式类的全类名信息设置到业务模式配置表中,所述业务模式类包括直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类,根据设定需求,分别将直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类进行实例化成Bean对象,将所有的Bean对象注入至Spring容器的注解集中,所述SPI接口实现容器注册机制具体包括:Spring容器提供ImportBeanDefinitionRegistrar接口,所述ImportBeanDefinitionRegistrar接口提供registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)接口和registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)接口;实现上述两个接口,并重写任意一个接口方法,用于定义新Bean对象的注册扫描器,并定义SPI中的Bean名称生成的命名规则,将@Spi注解注册到Spring容器注解集中;
步骤2、根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;
步骤3、根据设定的采购模式,通过可视化界面从所述数据库配置表获取对应的业务模式的Bean实例,并录入采购需求,实现采购的配置,并进行采购信息发布。
基于同一发明构思,本申请还提供了与实施例一中的方法对应的系统,详见实施例二。
实施例二
如图2所示,在本实施例中提供了一种基于SPI的政府采购系统,包括:
注册模块,将自定义注解设置为@Spi;之后通过SPI接口实现容器注册机制,读取出带@Spi注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,所述业务模式类包括直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类,根据设定需求,分别将直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类进行实例化成Bean对象,将所有的Bean对象注入至Spring容器的注解集中,所述SPI接口实现容器注册机制具体包括:Spring容器提供ImportBeanDefinitionRegistrar接口,所述ImportBeanDefinitionRegistrar接口提供registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)接口和registerBeanDefinitions(AnnotationMetadata importingClassMetadata,BeanDefinitionRegistry registry)接口;实现上述两个接口,并重写任意一个接口方法,用于定义新Bean对象的注册扫描器,并定义SPI中的Bean名称生成的命名规则,将@Spi注解注册到Spring容器注解集中;
存储模块,根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;
配置采购模块,根据设定的采购模式,通过可视化界面从所述数据库配置表获取对应的业务模式的Bean实例,并录入采购需求,实现采购的配置,并进行采购信息发布。
由于本发明实施例二所介绍的系统,为实施本发明实施例一的方法所采用的系统,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该系统的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的系统都属于本发明所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的电子设备实施例,详见实施例三。
实施例三
本实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,可以实现实施例一中任一实施方式。
由于本实施例所介绍的电子设备为实施本申请实施例一中方法所采用的设备,故而基于本申请实施例一中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的存储介质,详见实施例四。
实施例四
本实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,可以实现实施例一中任一实施方式。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

Claims (10)

1.一种基于SPI的政府采购方法,其特征在于,包括:
步骤1、通过SPI接口实现容器注册机制,读取出带自定义注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,将不同业务模式类的实例化的Bean对象注入至Spring的注解集中;
步骤2、根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;
步骤3、根据设定的采购模式,从所述数据库配置表获取对应的业务模式的Bean实例,实现采购的配置,并进行采购信息发布。
2.根据权利要求1所述的一种基于SPI的政府采购方法,其特征在于,所述步骤1进一步具体为:将自定义注解设置为@Spi;之后通过SPI接口实现容器注册机制,读取出带@Spi注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,所述业务模式类包括直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类,根据设定需求,分别将直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类进行实例化成Bean对象,将所有的Bean对象注入至Spring容器的注解集中。
3.根据权利要求1或2所述的一种基于SPI的政府采购方法,其特征在于,所述SPI接口实现容器注册机制具体包括:Spring容器提供ImportBeanDefinitionRegistrar接口,所述ImportBeanDefinitionRegistrar接口提供registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)接口和registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)接口;实现上述两个接口,并重写任意一个接口方法,用于定义新Bean对象的注册扫描器,并定义SPI中的Bean名称生成的命名规则,将@Spi注解注册到Spring容器注解集中。
4.根据权利要求1所述的一种基于SPI的政府采购方法,其特征在于,所述步骤3进一步具体为:根据设定的采购模式,通过可视化界面从所述数据库配置表获取对应的业务模式的Bean实例,并录入采购需求,实现采购的配置,并进行采购信息发布。
5.一种基于SPI的政府采购系统,其特征在于,包括:
注册模块,通过SPI接口实现容器注册机制,读取出带自定义注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,将不同业务模式类的实例化的Bean对象注入至Spring的注解集中;
存储模块,根据业务模式配置表配置站点的所有品目所对应的业务模式,并将站点所有品目业务模式配置存储至数据库配置表中;
配置采购模块,根据设定的采购模式,从所述数据库配置表获取对应的业务模式的Bean实例,实现采购的配置,并进行采购信息发布。
6.根据权利要求5所述的一种基于SPI的政府采购系统,其特征在于,所述注册模块进一步具体为:将自定义注解设置为@Spi;之后通过SPI接口实现容器注册机制,读取出带@Spi注解的业务模式类,将业务模式类的全类名信息设置到业务模式配置表中,所述业务模式类包括直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类,根据设定需求,分别将直接选定公共抽象模板类、二次竞价公共抽象模板类以及顺序轮候公共抽象模板类进行实例化成Bean对象,将所有的Bean对象注入至Spring容器的注解集中。
7.根据权利要求5或6所述的一种基于SPI的政府采购系统,其特征在于,所述SPI接口实现容器注册机制具体包括:Spring容器提供ImportBeanDefinitionRegistrar接口,所述ImportBeanDefinitionRegistrar接口提供registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator)接口和registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)接口;实现上述两个接口,并重写任意一个接口方法,用于定义新Bean对象的注册扫描器,并定义SPI中的Bean名称生成的命名规则,将@Spi注解注册到Spring容器注解集中。
8.根据权利要求5所述的一种基于SPI的政府采购系统,其特征在于,所述配置采购模块进一步具体为:根据设定的采购模式,通过可视化界面从所述数据库配置表获取对应的业务模式的Bean实例,并录入采购需求,实现采购的配置,并进行采购信息发布。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至4任一项所述的方法。
CN202311609159.9A 2023-11-29 2023-11-29 一种基于spi的政府采购方法、系统、设备和介质 Active CN117312222B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311609159.9A CN117312222B (zh) 2023-11-29 2023-11-29 一种基于spi的政府采购方法、系统、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311609159.9A CN117312222B (zh) 2023-11-29 2023-11-29 一种基于spi的政府采购方法、系统、设备和介质

Publications (2)

Publication Number Publication Date
CN117312222A true CN117312222A (zh) 2023-12-29
CN117312222B CN117312222B (zh) 2024-05-21

Family

ID=89274065

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311609159.9A Active CN117312222B (zh) 2023-11-29 2023-11-29 一种基于spi的政府采购方法、系统、设备和介质

Country Status (1)

Country Link
CN (1) CN117312222B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100764481B1 (ko) * 2007-05-31 2007-10-09 대한민국 입찰관리 시스템 및 방법
CN102004767A (zh) * 2010-11-10 2011-04-06 北京航空航天大学 一种基于抽象业务逻辑的交互式语义Web服务动态组合方法
US20170180346A1 (en) * 2015-12-18 2017-06-22 Amazon Technologies, Inc. Software container registry service
WO2018017248A1 (en) * 2016-07-22 2018-01-25 Intel Corporation Technologies for managing allocation of accelerator resources
CN108369622A (zh) * 2015-12-18 2018-08-03 亚马逊技术股份有限公司 软件容器注册表服务
CN112685020A (zh) * 2020-12-24 2021-04-20 京东数字科技控股股份有限公司 动态创建服务接口的方法、装置、电子设备及存储介质
CN115203212A (zh) * 2022-09-07 2022-10-18 南通全织道家纺科技有限公司 一种基于大数据的家纺客户数据收集系统
CN115829461A (zh) * 2022-11-18 2023-03-21 国网上海市电力公司 一种基于物资采购标准全流程贯通的物资采购方法
CN116108092A (zh) * 2023-01-30 2023-05-12 浪潮通用软件有限公司 基于SpringBatch框架下主数据数据处理方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100764481B1 (ko) * 2007-05-31 2007-10-09 대한민국 입찰관리 시스템 및 방법
CN102004767A (zh) * 2010-11-10 2011-04-06 北京航空航天大学 一种基于抽象业务逻辑的交互式语义Web服务动态组合方法
US20170180346A1 (en) * 2015-12-18 2017-06-22 Amazon Technologies, Inc. Software container registry service
CN108369622A (zh) * 2015-12-18 2018-08-03 亚马逊技术股份有限公司 软件容器注册表服务
WO2018017248A1 (en) * 2016-07-22 2018-01-25 Intel Corporation Technologies for managing allocation of accelerator resources
CN112685020A (zh) * 2020-12-24 2021-04-20 京东数字科技控股股份有限公司 动态创建服务接口的方法、装置、电子设备及存储介质
CN115203212A (zh) * 2022-09-07 2022-10-18 南通全织道家纺科技有限公司 一种基于大数据的家纺客户数据收集系统
CN115829461A (zh) * 2022-11-18 2023-03-21 国网上海市电力公司 一种基于物资采购标准全流程贯通的物资采购方法
CN116108092A (zh) * 2023-01-30 2023-05-12 浪潮通用软件有限公司 基于SpringBatch框架下主数据数据处理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
向军;张一博;: "事业单位采购招标管理模式优化与监督机制研究――以湖北省科技信息研究院为例", 科技创业月刊, no. 24 *

Also Published As

Publication number Publication date
CN117312222B (zh) 2024-05-21

Similar Documents

Publication Publication Date Title
Van Der Aalst et al. Inheritance of workflows: an approach to tackling problems related to change
US9110712B2 (en) Method for encapsulating logical units of work using business objects
US6920456B2 (en) Method, system, and program for maintaining information in database tables and performing operations on data in the database tables
Reggio et al. Towards a rigorous semantics of UML supporting its multiview approach
US20030004771A1 (en) Method, system, and program for executing a workflow
US20030023773A1 (en) Method, system, and program for performing workflow related operations
Hagen et al. Beyond the black box: Event-based inter-process communication in process support systems
CN101546311A (zh) 回收站的数据处理方法及数据处理装置
WO2019062673A1 (zh) 一种基于输入输出语义化实现的管理信息化的方法和系统
CN110659261A (zh) 一种数据挖掘模型发布方法及模型和模型服务管理方法
CN114548833A (zh) 一种一体化智慧运维控制方法、系统及运维平台
CN109960709B (zh) 一种数据库驱动的处理方法、装置、设备及存储介质
Timany et al. Trillium: Unifying refinement and higher-order distributed separation logic
CN117312222B (zh) 一种基于spi的政府采购方法、系统、设备和介质
CN112734387A (zh) 一种单据审批方法、装置、电子设备及存储介质
CN116466915A (zh) 一种基于MVP架构的iOS开发框架构建方法和装置
CN115730022A (zh) 采用事件触发和流程编排的数据处理构建方法及平台系统
US20090007157A1 (en) Mapping Data Sources to a Procedural API
CN116263717A (zh) 基于事件的订单业务处理方法及装置
US11204908B2 (en) Augmentation playback
CN112633825A (zh) 企业促销费用管控系统
CN113220592A (zh) 自动化测试资源的处理方法、装置、服务器及存储介质
CN111930369B (zh) 基于变量盒子的系统工具的设计方法
CN113760226B (zh) 服务构建方法、装置、电子设备以及存储介质
Bashir et al. Object‐oriented integration testing

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant