采购订单写入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 #抛出自定义的 ...
随机推荐
- 【数据结构】关于前缀树(单词查找树,Trie)
前缀树的说明和用途 前缀树又叫单词查找树,Trie,是一类常用的数据结构,其特点是以空间换时间,在查找字符串时有极大的时间优势,其查找的时间复杂度与键的数量无关,在能找到时,最大的时间复杂度也仅为键的 ...
- Jmeter(三十一) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy4(详解教程)
1.简介 上一篇文章中宏哥给小伙伴或童鞋们介绍讲解了手动添加Variable list的值,而实际工作中Badboy为我们提供了Variable setter工具,让我们不再使用哪一种比较笨拙的方法了 ...
- CSS聚光灯文字(无图片)
Welcome to my admin site! h1 { font-size: 70px; color: rgba(255, 255, 255, 1); padding: 0; margin: 0 ...
- 第15.45节、PyQt输入部件:QKeySequenceEdit快捷键输入部件简介和使用案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.功能简介 Key Sequence Edit输 ...
- 推荐系统实践 0x0c FM系列
逻辑回归(LR) 在介绍FM系列之前,我想首先简单介绍一下逻辑回归.通常来说,逻辑回归模型能够综合利用更多的信息,如用户.物品.上下文等多种不同的特征,生成更为全面的结果.另外,逻辑回归将推荐问题看成 ...
- Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)
1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...
- 你必须知道的MySQL知识点
什么是索引 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构(掌握) 数据结构可视化 前置知识:树的高度越低查询效率越高 二叉树:不能自平衡,极端情况出现倾斜,查询效率和链表类似 红黑 ...
- 软工个人项目 ——wc.exe
1.GitHub项目地址 https://github.com/k8kiw/WordCount 2.PSP预计时间 PSP2.1 Personal Software Process Stages 预估 ...
- CF1320 Div1 D.Reachable Strings 题解
题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...
- 题解-CF1140E Palindrome-less Arrays
CF1140E Palindrome-less Arrays \(n\) 和 \(k\) 和 \(n\) 个数的序列 \(a\).把 \(a\) 中的 \(-1\) 替换成 \([1,k]\) 之间的 ...