Browse Source

大模型信息抽取

master
kami 1 year ago
parent
commit
9eedbf29db
  1. 64
      src/main/java/com/biutag/supervisiondata/config/db/Wdpc.java
  2. 12
      src/main/java/com/biutag/supervisiondata/mapper/wdpc/WdpcJJDAiMapper.java
  3. 43
      src/main/java/com/biutag/supervisiondata/pojo/entity/wdpc/WdpcJJDAi.java
  4. 15
      src/main/java/com/biutag/supervisiondata/repository/WdpcJJDAiRepository.java
  5. 109
      src/main/java/com/biutag/supervisiondata/rest/ApiController.java
  6. 3
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  7. 12
      src/main/resources/application.yml

64
src/main/java/com/biutag/supervisiondata/config/db/Wdpc.java

@ -0,0 +1,64 @@
package com.biutag.supervisiondata.config.db;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @author kami on 2024-12-03 16:41:58
* @version 0.0.1
* @since 1.8
*/
@Configuration
@MapperScan(basePackages = {"com.biutag.supervisiondata.mapper.wdpc"},
sqlSessionFactoryRef = "wdpcSqlSessionFactory")
public class Wdpc {
@Bean(name = "wdpcBean")
@ConfigurationProperties(prefix = "spring.datasource.wdpc")
public DataSource dwdDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean(name = "wdpcTransactionManager")
public DataSourceTransactionManager dwdTransactionManager() {
return new DataSourceTransactionManager(dwdDataSource());
}
@Bean(name = "wdpcSqlSessionFactory")
public SqlSessionFactory dwdSqlSessionFactory(@Qualifier("wdpcBean") DataSource mysqlDataSource,
@Qualifier("wdpcInterceptor") MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception {
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setPlugins(mybatisPlusInterceptor);
sessionFactory.setDataSource(mysqlDataSource);
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
sessionFactory.setGlobalConfig(globalConfig);
return sessionFactory.getObject();
}
/**
* mp分页配置
* @return MybatisPlusInterceptor
*/
@Bean(name = "wdpcInterceptor")
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.GBASE));
return interceptor;
}
}

12
src/main/java/com/biutag/supervisiondata/mapper/wdpc/WdpcJJDAiMapper.java

@ -0,0 +1,12 @@
package com.biutag.supervisiondata.mapper.wdpc;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcJJDAi;
/**
* @author kami on 2024-12-03 16:47:43
* @version 0.0.1
* @since 1.8
*/
public interface WdpcJJDAiMapper extends BaseMapper<WdpcJJDAi> {
}

43
src/main/java/com/biutag/supervisiondata/pojo/entity/wdpc/WdpcJJDAi.java

@ -0,0 +1,43 @@
package com.biutag.supervisiondata.pojo.entity.wdpc;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @author kami on 2024-12-03 16:44:32
* @version 0.0.1
* @since 1.8
*/
@Data
@TableName("`wdpc_jjd_ai`")
public class WdpcJJDAi {
@TableId(value = "id",type = IdType.AUTO)
Integer id;
@TableField("jjdbh")
String jjdbh;
@TableField("name")
String name;
@TableField("id_code")
String idCode;
@TableField("mobile")
String mobile;
@TableField("reason")
String reason;
@TableField("`group`")
Integer group;
@TableField("bjsj")
Date bjsj;
@TableField("syrk_name")
String syrkName;
@TableField("syrk_id_code")
String syrkIdCode;
@TableField("syrk_mobile")
String syrkMobile;
}

15
src/main/java/com/biutag/supervisiondata/repository/WdpcJJDAiRepository.java

@ -0,0 +1,15 @@
package com.biutag.supervisiondata.repository;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.supervisiondata.mapper.wdpc.WdpcJJDAiMapper;
import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcJJDAi;
import org.springframework.stereotype.Service;
/**
* @author kami on 2024-12-03 16:48:30
* @version 0.0.1
* @since 1.8
*/
@Service
public class WdpcJJDAiRepository extends ServiceImpl<WdpcJJDAiMapper, WdpcJJDAi> {
}

109
src/main/java/com/biutag/supervisiondata/rest/ApiController.java

@ -1,20 +1,25 @@
package com.biutag.supervisiondata.rest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
import com.biutag.supervisiondata.common.response.RS;
import com.biutag.supervisiondata.config.cache.RedisDao;
import com.biutag.supervisiondata.lock.LocalLock;
import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD;
import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcJJDAi;
import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository;
import com.biutag.supervisiondata.repository.WdpcJJDAiRepository;
import com.biutag.supervisiondata.service.ModelClueService;
import com.biutag.supervisiondata.service.RiskScoreRuleService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
/**
* @author kami on 2024-11-19 15:32:09
@ -59,6 +64,98 @@ public class ApiController {
return (String) RedisDao.getInstance().leftPop("jjd");
}
private final GBaseSYRKXXRepository repository;
private final WdpcJJDAiRepository aiRepository;
@CrossOrigin
@PostMapping("/set/data")
public String setData(@RequestBody JSONObject data) {
String str = (String) RedisDao.getInstance().opsForHashGetByGroupAndKey("jjd_cache", data.getString("id"));
if(str == null) {
return "";
}
GBaseJJD jjd = JSON.parseObject(str, GBaseJJD.class);
String res = data.getString("content");
res = res.replaceFirst("```json","").replaceAll("```", "");
JSONObject jb = JSON.parseObject(res);
JSONArray array = jb.getJSONArray("information");
if(array.isEmpty()) {
return "";
}
List<WdpcJJDAi> aiList = new ArrayList<>();
Map<String, Integer> group = new WeakHashMap<>();
List<String> idCodes = new ArrayList<>();
List<String> mobiles = new ArrayList<>();
for (int i = 0; i < array.size(); i++) {
WdpcJJDAi ai = new WdpcJJDAi();
JSONObject obj = array.getJSONObject(i);
ai.setBjsj(jjd.getBjsj());
ai.setJjdbh(ai.getJjdbh());
ai.setGroup(Optional.of(group.get(obj.getString("group"))).orElse(group.size()));
group.put(obj.getString("group"), group.size());
ai.setMobile(Optional.ofNullable(obj.getString("mobile")).orElse(""));
ai.setName(Optional.ofNullable(obj.getString("name")).orElse(""));
ai.setIdCode(Optional.ofNullable(obj.getString("idCode")).orElse(""));
ai.setReason(obj.getString("reason"));
if(!ai.getIdCode().isEmpty() && !ai.getIdCode().equals("暂无")) {
idCodes.add(ai.getIdCode());
}
if(!ai.getMobile().isEmpty() && !ai.getMobile().equals("暂无")) {
mobiles.add(ai.getMobile());
}
aiList.add(ai);
}
LambdaQueryWrapper<GBaseSYRKXX> wrapper = new LambdaQueryWrapper<GBaseSYRKXX>();
if(!idCodes.isEmpty()) {
wrapper.in(GBaseSYRKXX::getGmsfhm, idCodes);
}
if(!idCodes.isEmpty() && !mobiles.isEmpty()) {
wrapper.or().in(GBaseSYRKXX::getLxdh, mobiles);
} else if(!mobiles.isEmpty()) {
wrapper.in(GBaseSYRKXX::getLxdh, mobiles);
}
List<GBaseSYRKXX> xxList = repository.list(wrapper);
Map<String, GBaseSYRKXX> xxMap = new WeakHashMap<>();
Map<String, List<GBaseSYRKXX>> xxMMap = new WeakHashMap<>();
for (GBaseSYRKXX syrkxx : xxList) {
xxMap.put(syrkxx.getGmsfhm(), syrkxx);
xxMMap.computeIfAbsent(syrkxx.getLxdh(), k -> new ArrayList<>()).add(syrkxx);
}
for (WdpcJJDAi ai : aiList) {
GBaseSYRKXX xx = xxMap.get(ai.getIdCode());
if(xx != null) {
ai.setSyrkMobile(xx.getLxdh());
ai.setSyrkName(Optional.ofNullable(xx.getXm()).orElse(""));
ai.setSyrkIdCode(Optional.ofNullable(xx.getGmsfhm()).orElse(""));
continue;
}
List<GBaseSYRKXX> tmp = xxMMap.get(ai.getMobile());
if(tmp == null || tmp.isEmpty()) {
continue;
}
for (GBaseSYRKXX syrkxx : tmp) {
if(xx == null) {
xx = syrkxx;
continue;
}
if(syrkxx.getXm().equals(ai.getName())) {
xx = syrkxx;
break;
}
}
ai.setSyrkMobile(xx.getLxdh());
ai.setSyrkName(Optional.ofNullable(xx.getXm()).orElse(""));
ai.setSyrkIdCode(Optional.ofNullable(xx.getGmsfhm()).orElse(""));
}
if(!aiList.isEmpty()) {
aiRepository.saveBatch(aiList);
}
return "";
}
@GetMapping("/model/{modelId}")
public RS<Void> score(@PathVariable Integer modelId) {
System.out.println("开始执行模型" + modelId);

3
src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java

@ -1,5 +1,6 @@
package com.biutag.supervisiondata.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
@ -247,12 +248,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
continue;
}
JSONObject ob = new JSONObject();
ob.put("id", gBaseJJD.getJjdbh());
ob.put("name", gBaseJJD.getBjrxm());
ob.put("mobile", gBaseJJD.getBjdh());
ob.put("idCode", Optional.ofNullable(gBaseJJD.getBjrzjhm()).orElse("暂无"));
ob.put("bjnr", Optional.ofNullable(gBaseJJD.getBjnr()).orElse(""));
ob.put("cjqk", Optional.ofNullable(gBaseJJD.getCjqk()).orElse(""));
RedisDao.getInstance().rightPush("jjd", ob.toJSONString());
RedisDao.getInstance().opsForHashSave("jjd_cache", gBaseJJD.getJjdbh(), JSON.toJSONString(gBaseJJD));
}
log.info("完成缓存");
}

12
src/main/resources/application.yml

@ -54,6 +54,18 @@ spring:
max-lifetime: 30000
connection-timeout: 30000
connection-test-query: SELECT 1
wdpc:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.gbase.jdbc.Driver
jdbc-url: jdbc:gbase://65.47.16.209:5258/csga_wdpcdb
username: csga_wdpc
password: csga_wdpc@123
hikari:
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 30000
connection-timeout: 30000
connection-test-query: SELECT 1
dm:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: dm.jdbc.driver.DmDriver

Loading…
Cancel
Save