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

相关文章

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat