项目启动

启动派件线程

启动签收线程

前端页面调用/start.do方法或

每60s检测两个线程是否开启

while轮询

while轮询

派件线程

写线程:
每次从redis的WALKER_HANDON_NEW的key中取200条记录
1.调用soa服务补充派件实体类属性,请求接口 参数orgCode(操作网点)和
employeeCode(收派员编号),调用主数据接口判断是否需要发送短信,
保存散key并添加承诺达标识(1为承诺达0非承诺达)
2.调用handonImport的push方法将数据放到内存linkLink集合的Queue

读线程:

调用handonImport的pop方法每次从队列Queue中取出10条数据


判断是否为null

记录错误日志

一、for循环 
1.请求接口 参数orgCode(操作网点)和url(查询A B网)
2.若请求结果不为null
   根据接口返回数据获取到code
(1)单号为空或者code不存在,放入list(error)队列中
(2)code=8110(直营)放入B网推送队列
(3)code=8130(授权商)若运单中有B、99、M、DB、JY则放入
     B网推送队列,否则放入A网推送队列
(4)code=8140(代派)放入A网推送队列
(5)其他全部放入A网推送队列
3.若请求结果为null
(1)请求接口 参数orgCode(操作网点)和url(查询网点类型)
(2)如果返回message中类型为A,则放入A网推送队列,若类型为B则放
入B网推送队列,其他则放入list(error)推送队列
4.异常补偿方法同3
二、调用行者推送接口
1.post请求A、B队列的list数据
(1)若接口返回成功且返回状态码为1000,则将接口返回的list批量写入数据库中;
若接口返回失败,将本次post请求的list数据全部以错误形式写入数据库中
(2)成功的批量删除redis中的散key
2.写回Queue中
调用handonImport的push方法将数据重新放入内存linkLink集合的Queue中

null

非null

签收线程

写线程:

每次从redis的WALKER_SIGNATURE_NEW的key中取200条记录
for循环
1.转换为ExpappSigninChange实体->删除redis的key(失败重新rpush到redis)
2.deviceType是ios或者android的话(行者)不做其他属性添加,否则添加其他
属性
调用signinImport的push方法将数据放到内存linkLink集合的Queue

读线程:

调用signinImport的pop方法每次从队列Queue中取出10条记录

判断是否为null

一、for循环

(1)请求接口 参数orgCode(操作网点)和url(查询网点类型)
(2)如果返回message中类型为A,则放入A网推送队列,若类型为B则放入B网推送队列,
其他则放入list(error)推送队列
(3)如果list(error)不为null,则调用signinImport的push方法写回到内存中
二、调用行者推送接口
1.post请求A、B队列的list数据
(1)若接口返回成功且返回状态码为1000,则将接口返回的list批量写入数据库中;
若接口返回失败,将本次post请求的list数据全部以错误形式写入数据库中
(2)成功的批量删除redis中的散key

记录错误日志

非null

null

签收派送流程图

签收派送流程图

2019-04-16 20:10:40 0 83
这里是评论

相关推荐