采购订单写入sap失败后,抛出自定义异常,回滚数据库
@Transactional(rollbackFor = Exception.class)
@Override
public Map<String,Object> getOderInfo(String processInstanceId) {
Map<String,Object> map=new HashMap<String,Object>();
SapOrderAll sapOrderAll=new SapOrderAll();
SapProcessPurchaseOrder sapProcessPurchaseOrder=purchaseOrderMapper.getOderInfo(processInstanceId);
sapOrderAll.setMaster(sapProcessPurchaseOrder);
sapOrderAll.setCompany(sapProcessPurchaseOrder.getCompany());
System.out.println("processInstanceId======"+processInstanceId+"---------sapProcessPurchaseOrder========="+sapProcessPurchaseOrder);
if(null!=sapProcessPurchaseOrder){
String orderNumber=sapProcessPurchaseOrder.getOrderNumber();
//获取采购订单明细
List<SapProcessPurchaseOrderDetail>list=purchaseOrderDetailMapper.getSapOrderDetail(orderNumber);
sapOrderAll.setSlave(list);
}
//先修改采购申请单数据
if(null!=sapOrderAll && null!=sapOrderAll.getSlave()){
List<PurchaseRequestLine> purchaseRequestList=new ArrayList<PurchaseRequestLine>();
List<SapProcessPurchaseOrderDetail>listRequest= sapOrderAll.getSlave();
System.out.println("采购订单信息反馈给采购申请单listRequest================="+listRequest);
if(null!=listRequest && listRequest.size()>0){
for (SapProcessPurchaseOrderDetail OrderDetail :listRequest){
PurchaseRequestLine purchaseRequestLine=new PurchaseRequestLine();
//将数据封装成 采购申请单需要的类型
purchaseRequestLine.setId(OrderDetail.getRequestId());
purchaseRequestLine.setQuantity(new BigDecimal(OrderDetail.getQuantity()));
log.info("采购订单信息反馈给采购申请单purchaseRequestLine================="+purchaseRequestLine);
//将数据放入list中
purchaseRequestList.add(purchaseRequestLine);
}
}
//插入sapc成功后信息返回给 采购申请单
log.info("插入sapc成功后信息返回给purchaseRequestList================="+purchaseRequestList);
boolean msg=purchaseRequestLineService.updateQuantity(purchaseRequestList);
log.info("插入sapc成功后信息返回给 采购申请单msg========="+msg);
//判断反馈给采购申请单是否成功
if(!msg){
throw new RuntimeException("修改采购申请单失败");
}
//数据进入sap
if(msg){
String json=new JSONObject().toJSONString(sapOrderAll);
log.info("json================"+json);
String url = SapConstant.PURCHASEORDER_CREATE;
String itemStr = HttpUtil.doJsonPost(url,json, SapUtil.getReadToken());
log.info("itemStr====================="+itemStr);
map.put("itemStr",itemStr);//将sap返回信息放入map中
//字符串转json
SapReturnResult sapReturnResult = JSONObject.parseObject(itemStr,SapReturnResult.class);
log.info("map=================="+itemStr);
//map.get("data")中有值说明 插入sap成功
if(sapReturnResult.isSuccess()){
updateResult(true,sapOrderAll.getMaster().getOrderNumber(),"写入sap成功,修改采购订单数量成功",sapReturnResult.getData());
}else {
throw new RuntimeException("插入sap失败");
}
}
}else{
map.put("msg",false);
map.put("data","查询要写入sap的数据为空");
map.put("itemStr","");
return map;
}
map.put("msg",true);
map.put("data","写入sap成功");
map.put("itemStr","");
return map;
} /**
* 根据执行结果判断插入采购订单是否成功
*/
public void updateResult(boolean mags,String orderNumber,String hint,String sapData){
log.info("根据执行结果判断插入采购订单是否成功mags====="+mags+"-----orderNumber========="+orderNumber+"--hint====="+hint);
//调用接口修改才有订单的状态值
if(mags){
//返回结果为true
purchaseOrderMapper.updateOderInfo("true"+hint,orderNumber,sapData);
}else {
//返回结果为false
purchaseOrderMapper.updateOderInfo("false"+hint,orderNumber,sapData);
}
}
采购订单写入sap失败后,抛出自定义异常,回滚数据库的更多相关文章
- 浅析调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException
废话不多说,直接进入正题:如何使用JSR303的validate,进行数据校验,失败后直接抛出异常加入流转信息中,并在form页面提示出来. 首先我们为了启用验证,需要向 项目中添加Bean验证的实现 ...
- SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理
最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功.今天终于找到了不错的方法.所以转载并分享给大家. 摘自:http://www.cnblogs.com/scottc ...
- 抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务
Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback:如果发生的异常是checked异常,默认情况下数据库操作还是会 ...
- 日常Bug排查-抛异常不回滚
日常Bug排查-抛异常不回滚 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 最近有人反映java应用操作数据库的时候,抛异 ...
- 解决在SharePoint 2010/2013部署自己的Event Handler后,抛出”不能载入被引用的第三方的程序集"的问题
今天在处理客户的一个问题的时候.我们已经把我们SharePoint EventHandler依赖的第三方的TIBCO.EMS.dll注冊到GAC里面了,可是日志里面还是抛出了不能载入被引用的第三方的程 ...
- Python--day41--事件和信号量之模拟连接数据库并在连接三次后抛出连接超时异常
#事件被创建的时候#False状态 #wait()阻塞#True状态 #wait() 非阻塞#clear 设置状态为False#set 设置状态为True #数据库 --- 文件夹#文件夹里有好多ex ...
- 自定义Exception:MVC抛出自定义异常,并以Json方式返回
相关链接 优点: 可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException().页面展示,controller的错误处理方式一样 节省编 ...
- python7.2抛出自定义异常
pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...
随机推荐
- Jmeter(三十) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy3(详解教程)
1.简介 Badboy为方便自动化数据灵活性,以及脚本的重用,减少工作量:为此提供了脚本参数化的功能,这一篇文章宏哥以度娘搜索的关键字"北京-宏哥"进行参数化为例,宏哥带领你们实战 ...
- SPG-Net: Segmentation Prediction and Guidance Network for Image Inpainting
SPG-Net: Segmentation Prediction and Guidance Network for Image Inpainting pytorch 引言 利用语义分割获取空洞的边缘信 ...
- Springboot结合Jpa的外键使用
当我们写项目的时候,总有些奇奇怪怪的理由,非让你连表查询,其实最好的就是什么都不连,数据库完全解耦 但我们还是要学习下Jpa怎么根据外键查询 (这里说下Jpa+springboot的感觉,刚开始就感觉 ...
- presto 访问kudu 多schemas配置
presto需要访问kudu数据源,但是impala可以直接支持多数据库存储,但是presto不能原生支持,按照presto的官网设置了然而并不起作用. 官方文档: 到官方github提问了,然后并没 ...
- [Windows] Prism 8.0 入门(上):Prism.Core
1. Prism 简介 Prism 是一个用于构建松耦合.可维护和可测试的 XAML 应用的框架,它支持所有还活着的基于 XAML 的平台,包括 WPF.Xamarin Forms.WinUI 和 U ...
- PyQt学习随笔:QTableWidget项sizeHint的作用以及与QHeadView的sectionResizeMode、ResizeToContents的关系
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在学习QTableWidgetItem的sizeHint()方法时,Qt自带材料中介绍sizeHin ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用sortItems进行项排序
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的项可以使用sortItems方法按照指定列进行排序,调用语法: s ...
- 缩减项目代码中的大面积if策略
参考设计模式 - 策略模式我们可以优化if-else代码段,而在Spring(Boot)中,借助ApplicationContext扫描,可以使代码更加干净. 话不多说,亮代码: 首先按照策略模式的写 ...
- element ui中表格table翻页记忆勾选状态
<el-table ref="multipleTable" :data="datalist" style="width:100%" @ ...
- 换种思路写Mock,让单元测试更简单
开篇引入 单元测试中的Mock方法,通常是为了绕开那些依赖外部资源或无关功能的方法调用,使得测试重点能够集中在需要验证和保障的代码逻辑上.在定义Mock方法时,开发者真正关心的只有一件事:" ...