项目场景:
NC65中需要通过接口新增客户档案并自动分配至指定组织(业务单元),新增客户档案成功但是分配组织失败并且产品后台没有提示任何报错。
问题描述
NC65中需要通过接口新增客户档案并自动分配至指定组织(业务单元),新增客户档案成功但是分配组织失败并且产品后台没有提示任何报错。
原因分析:
接口调用成功后,发现组织信息页签中没有显示该客户档案所分配的组织信息,但是从客户档案中的查询已分配组织中可以看到该客户已经分配到该组织下,经过代码跟踪发现,产生这个问题的原因是因为客户的分配功能是独立的事务,所以当通过调用接口增加了客户档案后,这个时候的数据并没有真正意义上存储到数据库中,而是在事务中保存了下来,所以当分配功能在另外的事务中查询这个客户信息时并没有查询到,所以产生了以上的分配失败问题。
解决方案:
目前想到的解决方案有三种:遇到同样这种问题的朋友可以以自身的情况进行解决。
方案一、将接口拆成两个,首先第一个接口用来传入客户档案,当这个接口的所有事务都执行完毕后再次调用组织分配接口,这样一来以为在第一个接口执行完毕之后,客户档案已经真实的存入到数据库,所以在分配的时候产品底层是可以找到客户信息的,所以可以分配成功;
方案二:若是方案一无法采用,如调接口的系统不同意等原因,则可以采用后台任务的方式,如每隔一个小时进行一次分配,这样一来,因为在后台任务执行之前,客户档案已经保存到数据库中,所以可以分配成功,注意,此方法适用于组织分配不要求实时分配的情况下使用,若对方系统要求必须在传入档案时就进行分配的话,此方法将不适用;
方案三:若前两种方案都无法解决这个问题时,只能采用最后一种发放,但必须注意,此方法涉及到修改产品底层代码,且本人修改后分配问题确实能够解决,但是其他地方使用时没有经过检验无法得知,所以如果必须采用这种方法时需要慎重且需经过测试,出现的其他问题,我无法负责;具体修改方法如下:
因为问题出现在实现类里,所以我采用的方法是再写一个接口,并通过这个实现类来实现,这样一来,就可以将我在新增客户档案后查询到的VO通过接口放入到产品实现类里面的类变量中,这样一来就避过了产品查询不到客户信息而出现的这个错误,文字可能描写的有些混乱,我把类放到下面各位可以参考。
最后,这个类的名字为:nc.bs.bd.assignservice.AssignToOrgServiceImpl
当然,这些只是我自己想到的方案,各位如果有更好的方案或者方法也可以给我留言,大家可以相互交流。
我的联系方式:VX : yuhang_1997。