TYC项目开发记录

2024-03-19 00:20
文章标签 项目 开发 记录 tyc

本文主要是介绍TYC项目开发记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TYC 开发文档

开发需求

  • 数据库新增字段,日志表web_log存储查询公司,部门,公司id等字段做时实存储
  • 新增数据库表,做消费次数统计
  • 查询分页需求,默认自动分页
  • 重复调用接口,删除之前所查询公司的信息内容

新增工具

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.0.6</version>
</dependency>

HUtoolAPI开发文档

日志信息存储新增内容

  • 新增表字段内容
    在这里插入图片描述
  • 代码说明:
  1. 日志信息监听,获取:
    1. 项目代码使用AOP切面编程
    2. @Aspect注解标注切面程序,做日志统一处理。
    3. @Pointcut注解标注切面的作用范围为所有controller(接口)。
    4. @Around注解标注为环绕通知。
  2. 日志信息存储:
    	Object result = joinPoint.proceed();Signature signature = joinPoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;Method method = methodSignature.getMethod();if (method.isAnnotationPresent(ApiOperation.class)) {ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);hxWebLog.setDescription(apiOperation.value());}long endTime = System.currentTimeMillis();String urlStr = request.getRequestURL().toString();hxWebLog.setBasePath(StrUtil.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));hxWebLog.setIp(request.getRemoteAddr());hxWebLog.setMethod(request.getMethod());hxWebLog.setParameter(getParameter(method, joinPoint.getArgs()).toString());hxWebLog.setResult(result.toString());hxWebLog.setSpendTime((int)(endTime - startTime));hxWebLog.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startTime));hxWebLog.setUri(request.getRequestURI());hxWebLog.setUrl(request.getRequestURL().toString());hxWebLog.setUsername(token);if (StrUtil.isNotBlank(request.getParameter("fileName"))) {hxWebLog.setCompanyName(request.getParameter("fileName"));}if (StrUtil.isNotBlank(request.getParameter("filePathId"))) {hxWebLog.setCompanyId(Integer.parseInt(request.getParameter("filePathId")));}if (StrUtil.isNotBlank(request.getParameter("dept"))) {hxWebLog.setDept(request.getParameter("dept"));}if (StrUtil.isNotBlank(request.getParameter("fillingName"))) {hxWebLog.setFillingName(request.getParameter("fillingName"));}if (StrUtil.isNotBlank(request.getParameter("fillingTime"))) {hxWebLog.setFillingTime(request.getParameter("fillingTime"));}LOGGER.info("{}", JSONUtil.parse(hxWebLog));hxWebLogMapper.insert(hxWebLog);
    
  3. 新增储存信息做统一字符串不为空校验(HUTOOL工具类)

消费次数统计

  • 数据库新增表
CREATE TABLE [dbo].[hx_api_log] ([uid] bigint  IDENTITY(1,1) NOT NULL,[time_stamp] bigint  NULL,[open_id] nvarchar(50) COLLATE Chinese_PRC_CI_AS  NULL,[url] nvarchar(max) COLLATE Chinese_PRC_CI_AS  NULL,[result] nvarchar(max) COLLATE Chinese_PRC_CI_AS  NULL,[count] int  NULL,CONSTRAINT [PK_hx_api_log] PRIMARY KEY CLUSTERED ([uid])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
ON [PRIMARY]
)  
ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GOALTER TABLE [dbo].[hx_api_log] SET (LOCK_ESCALATION = TABLE)
GO
  • 代码说明:
  1. 消费次数分为无分页,默认有分页两种情况。
 	@ApiOperation(value = "查询经营异常")@RequestMapping(value = "/api/v1/abnormal", method = RequestMethod.POST)public BaseResult<Map<String, Integer>> saveAbnormal(@RequestParam Long id, @RequestParam String name, @RequestParam(required = false)Integer pageNum) {return ResultUtil.success(abnormalOperationService.saveAbnormal(id, name, pageNum));}
  1. 根据不叠加冗余的消费次数和代码整体变动内容更改。
	if(BeanUtil.isEmpty(pageNum)){// pageNum 为null  查询全部//记录页码int count = 1;while(true){resultMap = getData(id, name, count, paramNum,timeStamp);if(BeanUtil.isNotEmpty(resultMap)){paramNum = resultMap.get("HxTycAbnormalOperation");count +=1;consumptionCount +=1;}else{break;}}if(consumptionCount!=0){hxApiLog.setCount(consumptionCount);hxApiLogMapper.insert(hxApiLog);}}else{//查询指定页码resultMap = getData(id, name, pageNum, paramNum,timeStamp);if(BeanUtil.isNotEmpty(resultMap)){consumptionCount +=1;}else{return resultMap;}hxApiLog.setCount(consumptionCount);hxApiLogMapper.insert(hxApiLog);}
  1. 所有叠加消费次数,都会根据天眼查所返回的信息是否消费成功来进行叠加。
public static boolean isNotError(String paramStr) {boolean isNotError = true;JSONObject result = JSON.parseObject(paramStr);Integer error_code = result.getInteger("error_code");if (error_code == 0){//throw new BaseException(CodeEnum.SUCCESS, result.toString());if(result.getJSONObject("result").getJSONArray("items") != null){if(BeanUtil.isEmpty(result.getJSONObject("result").getJSONArray("items"))){isNotError = false;}}} else {isNotError = false;}System.out.println(isNotError);return isNotError;}

分页需求,默认自动分页查询全部

  • 代码说明:
  1. 天眼查不提供查询所有页面,做逻辑页码循环,并且记录消费次数
  2. 根据天眼查返回查询信息作为标识,校验是否数据已经查询完成
  3. 循环体内,页码叠加,消费次数叠加

二次调用接口,删除之前信息内容

  • 代码说明:
  1. 二次调用信息重复,会产生过多冗余数据,每次调用返回最新数据内容,删除上次数据。
    public void delDataBefore(long id,String name ){Map<String,Object> delParam =  new HashMap<>();delParam.put("company_id",id);delParam.put("company_name",name);hxTycAbnormalOperationMapper.deleteByMap(delParam);}

这篇关于TYC项目开发记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824178

相关文章

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/