From 9eedbf29db49a67ad33083bc0e6da4fbdb14f889 Mon Sep 17 00:00:00 2001 From: kami <605128600@qq.com> Date: Tue, 3 Dec 2024 17:32:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E6=A8=A1=E5=9E=8B=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=8A=BD=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervisiondata/config/db/Wdpc.java | 64 ++++++++++ .../mapper/wdpc/WdpcJJDAiMapper.java | 12 ++ .../pojo/entity/wdpc/WdpcJJDAi.java | 43 +++++++ .../repository/WdpcJJDAiRepository.java | 15 +++ .../supervisiondata/rest/ApiController.java | 109 +++++++++++++++++- .../service/impl/GBaseJJDServiceImpl.java | 3 + src/main/resources/application.yml | 12 ++ 7 files changed, 252 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/biutag/supervisiondata/config/db/Wdpc.java create mode 100644 src/main/java/com/biutag/supervisiondata/mapper/wdpc/WdpcJJDAiMapper.java create mode 100644 src/main/java/com/biutag/supervisiondata/pojo/entity/wdpc/WdpcJJDAi.java create mode 100644 src/main/java/com/biutag/supervisiondata/repository/WdpcJJDAiRepository.java diff --git a/src/main/java/com/biutag/supervisiondata/config/db/Wdpc.java b/src/main/java/com/biutag/supervisiondata/config/db/Wdpc.java new file mode 100644 index 0000000..5db4c10 --- /dev/null +++ b/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; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/wdpc/WdpcJJDAiMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/wdpc/WdpcJJDAiMapper.java new file mode 100644 index 0000000..dc11271 --- /dev/null +++ b/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 { +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/wdpc/WdpcJJDAi.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/wdpc/WdpcJJDAi.java new file mode 100644 index 0000000..9d53eed --- /dev/null +++ b/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; +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/WdpcJJDAiRepository.java b/src/main/java/com/biutag/supervisiondata/repository/WdpcJJDAiRepository.java new file mode 100644 index 0000000..6868961 --- /dev/null +++ b/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 { +} diff --git a/src/main/java/com/biutag/supervisiondata/rest/ApiController.java b/src/main/java/com/biutag/supervisiondata/rest/ApiController.java index 3b9169d..e29607d 100644 --- a/src/main/java/com/biutag/supervisiondata/rest/ApiController.java +++ b/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 aiList = new ArrayList<>(); + Map group = new WeakHashMap<>(); + List idCodes = new ArrayList<>(); + List 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 wrapper = new LambdaQueryWrapper(); + 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 xxList = repository.list(wrapper); + Map xxMap = new WeakHashMap<>(); + Map> 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 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 score(@PathVariable Integer modelId) { System.out.println("开始执行模型" + modelId); diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java index f4abac5..7c094ed 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/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("完成缓存"); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cff040e..968d8dd 100644 --- a/src/main/resources/application.yml +++ b/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