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

相关文章

在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/

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA