@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失败后,抛出自定义异常,回滚数据库的更多相关文章

  1. 浅析调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException

    废话不多说,直接进入正题:如何使用JSR303的validate,进行数据校验,失败后直接抛出异常加入流转信息中,并在form页面提示出来. 首先我们为了启用验证,需要向 项目中添加Bean验证的实现 ...

  2. SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理

    最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功.今天终于找到了不错的方法.所以转载并分享给大家. 摘自:http://www.cnblogs.com/scottc ...

  3. 抛出自定义异常,spring AOP事务不回滚的解决方案

    spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

  4. 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务

    Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback:如果发生的异常是checked异常,默认情况下数据库操作还是会 ...

  5. 日常Bug排查-抛异常不回滚

    日常Bug排查-抛异常不回滚 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 最近有人反映java应用操作数据库的时候,抛异 ...

  6. 解决在SharePoint 2010/2013部署自己的Event Handler后,抛出”不能载入被引用的第三方的程序集&quot;的问题

    今天在处理客户的一个问题的时候.我们已经把我们SharePoint EventHandler依赖的第三方的TIBCO.EMS.dll注冊到GAC里面了,可是日志里面还是抛出了不能载入被引用的第三方的程 ...

  7. Python--day41--事件和信号量之模拟连接数据库并在连接三次后抛出连接超时异常

    #事件被创建的时候#False状态 #wait()阻塞#True状态 #wait() 非阻塞#clear 设置状态为False#set 设置状态为True #数据库 --- 文件夹#文件夹里有好多ex ...

  8. 自定义Exception:MVC抛出自定义异常,并以Json方式返回

    相关链接 优点: 可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException().页面展示,controller的错误处理方式一样 节省编 ...

  9. python7.2抛出自定义异常

    pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...

随机推荐

  1. VS2019配置C+++mingW32配置

    两个安装教程博客 http://t.sg.cn/yq22mn http://t.sg.cn/wsavo0 基于调试报错,是因为文件夹是中文,贴一个详细的博客:http://t.sg.cn/3j5e4z

  2. docker数据持久化/共享---volume,bind-mount,tmpfs-mount

    一.将Docker数据挂载到容器 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供 ...

  3. 基础篇:JAVA.Stream函数,优雅的数据流操作

    前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stream的概念,它可以让我们把集合数据当做一个个元素在处理,并且提供多线程模式 流的创建 流的各种数 ...

  4. Python正则表达式re.findall("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')的结果为什么是['9']

    在<Python妙用re.sub分析正则表达式匹配过程>中老猿分析了findall函数的返回情况,老猿前一阵子在执行这个语句时: >>> re.findall(" ...

  5. Python正则表达式re.findall一个有趣的现象

    下面通过几个案例来分析一下, 注意:本节的parsematch函数请参考<妙用re.sub分析正则表达式解析匹配过程> 案例一: >>> re.findall(r&quo ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中部件的locale属性

    locale属性用于设置语言环境,包括语言和国家.如果一个部件没有设置语言环境,则使用父对象的语言环境或者默认语言环境(如果这个部件是顶层部件). 可以使用locale()获取部件的语言环境,也可以通 ...

  7. 扩展Linux网络栈

    扩展Linux网络栈 来自Linux内核文档.之前看过这篇文章,一直好奇,问什么一条网络流会固定在一个CPU上进行处理,本文档可以解决这个疑问.为了更好地理解本文章中的功能,将这篇文章穿插入内. 简介 ...

  8. 从go-libp2p开始

    这里是从一系列关于libp2p的go实现教程开始,go-libp2p 我们会讲述go的安装,go模块的设置,启动libp2p节点,并在它们之间发送消息. 安装go go-libp2p推荐使用包含 mo ...

  9. PageRank 算法-Google 如何给网页排名

    公号:码农充电站pro 主页:https://codeshellme.github.io 在互联网早期,随着网络上的网页逐渐增多,如何从海量网页中检索出我们想要的页面,变得非常的重要. 当时著名的雅虎 ...

  10. window启动mongoDB

    windows启动mongo服务 建议使用docker,方便又快捷,可以查看我的其他文章有介绍 创建好日志文件夹后执行以下命令 mongod.exe --logpath "C:\mongod ...