@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. gitee模拟备份

    这个作业的要求在哪里 作业要求 团队名称 欢天喜地七仙女 团队成员 王玮晗.林鑫宇. 黄龙骏.陈少龙.何一山.崔亚明.陆桂莺 这个作业的目标 按照要求进行编码,按要求新建码云仓库.上传文件.拍摄视频 ...

  2. vue回调接口

    1.微博回调接口 1.1oauth/urls.py 中添加路由 urlpatterns = [ path('weibo/callback/', views.OauthWeiboCallback.as_ ...

  3. Zookeeper(5)---分布式锁

    基于临时序号节点来实现分布式锁 为什么要用临时节点呢?如果拿到锁的服务宕机了,会话失效ZK自己也会删除掉临时的序号节点,这样也不会阻塞其他服务. 流程: 1.在一个持久节点下面创建临时的序号节点作为锁 ...

  4. PyQt(Python+Qt)学习随笔:QListView的modelColumn属性及困惑

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.modelColumn介绍 QListView的modelColumn属性用于控制视图中展现mo ...

  5. Python基础知识学习随笔

    Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量 Python学习随笔:获取当前主机名和用户名的方法 博客地址:https://blog.csdn.net/LaoYuanPyt ...

  6. 基础篇——怎么使用PowerDesigner进行数据库初始化

    1.使用PowerDesigner打开设计好的 .pdm文件 2.点击工具栏中的Database-->Database Generation-->Preview,就可以看到生成的创建数据库 ...

  7. 性能测试学习之路 (二)jmeter详解(jmeter执行顺序 && 作用域 && 断言 && 事务 &&集合点 )

    1 Jmeter 工作区介绍 jmeter工作区分为3个部分:目录树.测试计划编辑区域.菜单栏. 2 Jmeter 执行顺序规则 Jmeter执行顺序规则如下: 配置元件 前置处理器 定时器 采样器s ...

  8. P5838 [USACO19DEC]Milk Visits G

    发现是一道比较裸的树上莫队,于是就开始刚,然后发现好像是最难的一道题--(本题解用于作者加深算法理解,也欢迎各位的阅读) 题意 给你一棵树,树有点权,询问一条路径上是否有点权为 \(c\) 的点. 题 ...

  9. sql语句执行次序

    from→on→join→where→group by→having→select→distinct→order by→limit

  10. docker容器之间通过bridge进行通信

    创建用户自定义bridge docker network create my-net # 创建了一个名为"my-net"的网络 将容器加入到"my-net"中 ...