采购订单写入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);
		}
	}

  

posted @ 2020-09-28 15:06  红尘沙漏  阅读(387)  评论(0编辑  收藏  举报