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

相关文章

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再