销售易文件同步
2025-09-03 17:38:34 0 举报
AI智能生成
销售易文件同步
作者其他创作
大纲/内容
1、同步合同文件
2、开启定时任务,
把需要同步文件的合同放入redis map结构中
把需要同步文件的合同放入redis map结构中
详细步骤:每5分钟查询合同表,将未同步状态的合同id和其他字段信息放入redis map结构中,
(不同类型的文件,分别维护一个不同的map,如:合同类型一个map,项目类型一个map)
(为了提升性能,还可以针对合同进行分片,如:根据合同id%10,产生10个map)
(不同类型的文件,分别维护一个不同的map,如:合同类型一个map,项目类型一个map)
(为了提升性能,还可以针对合同进行分片,如:根据合同id%10,产生10个map)
3、调用销售易获取合同文件的接口,
并更新到redis map中
并更新到redis map中
详细步骤:如果接口没有做频率限制,则可以开启多个线程(线程池维护线程生命周期)进行接口的调用,
如果接口做了频率限制,则开启一个线程根据频率限制的时长进行接口的顺序调用。
接口调用成功后,把合同文件的信息放到redis map中。
接口调用失败(超过3次),则更新合同表的status状态为失败,并删除map中的合同记录
如果接口做了频率限制,则开启一个线程根据频率限制的时长进行接口的顺序调用。
接口调用成功后,把合同文件的信息放到redis map中。
接口调用失败(超过3次),则更新合同表的status状态为失败,并删除map中的合同记录
4、启动多线程去拿到map中的数据,
多线程处理下载合同文件并转移到minio中
多线程处理下载合同文件并转移到minio中
4、详细步骤:如果合同的map没分片,则启动一个线程去进行合同文件的下载并转移到minio中,
如果有分片,则根据分片的数量,启动相应数量的线程(线程池维护线程)
进行合同文件的下载并转移到minio中。
(利用redis map的HSCAN功能,类似于分页获取合同数据,然后根据获取的合同的数量
创建相同数量的线程并放入线程池中进行文件的下载并转移到minio中)
(根据文件同步的结果,更新合同表的status状态为同步完成或者失败,更新同步文件表;
如果同步成功,或者超过同步次数但是没有成功,则删除map中的这条合同记录)
如果有分片,则根据分片的数量,启动相应数量的线程(线程池维护线程)
进行合同文件的下载并转移到minio中。
(利用redis map的HSCAN功能,类似于分页获取合同数据,然后根据获取的合同的数量
创建相同数量的线程并放入线程池中进行文件的下载并转移到minio中)
(根据文件同步的结果,更新合同表的status状态为同步完成或者失败,更新同步文件表;
如果同步成功,或者超过同步次数但是没有成功,则删除map中的这条合同记录)
表结构
合同表
主键id
contract_id(合同id)
contract_code(合同编号)
status(状态(0=未同步,1=进行中,2=同步完成,3=同步失败))
syn_count(同步次数)(代码逻辑中可设置超过3次没成功,就算失败,人工介入排查错误)
error_message(同步失败报错信息)
sync_start_time(同步开始时间)
sync_end_time(同步结束时间)
同步文件表
主键id
sync_file_id(文件id)
sync_file_name(文件名称)
sync_file_md5(文件md5值)
minio_file_url(文件url)
sync_id(同步id,关联合同,项目)
sync_code(同步编码,关联合同编码,项目编码)
sync_file_type(文件类型(1=合同,2=项目))
sync_start_time(同步开始时间)
sync_end_time(同步结束时间)
2、同步项目文件(步骤参考:1、同步合同文件)
0 条评论
下一页