diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/IWCInterfaceServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/IWCInterfaceServiceImpl.java index 7985689a..34e09174 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/IWCInterfaceServiceImpl.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/IWCInterfaceServiceImpl.java @@ -305,6 +305,12 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService { * * 人工 = 管理系统维护的用人数*机器 * * 折旧 = 机器 * * 其它 = 人工 + * * 三层及其以上---------------------------------------- + * * 工单进行报工的时候公式调整如下(数值单位不用管),根据上位机用户真实填的来: + * * 机器=开机时长 + * * 人工 = 人工 + * * 折旧 = 机器 + * * 其它 = 人工 * @param mesReportWork * @return */ @@ -315,7 +321,7 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService { DynamicDataSourceContextHolder.push(mesReportWork.getFactoryCode());// 这是数据源的key } - //根据belong_work_order找到sap工单 + //根据belong_work_order找到sap工单(子子母) List workOrders = mesReportWorkMapper.getSapWorkOrder(mesReportWork.getWorkorderCode()); if (CollectionUtils.isEmpty(workOrders)) { return R.fail("子母工单信息缺失"); @@ -332,7 +338,7 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService { } //子工单报工 logger.info("==========================一层工单报工开始"); - sapRson = this.reportHzToSap(sHzWorks); + sapRson = this.reportHzToSap(sHzWorks,1); logger.info("==========================一层工单报工结束:"+JSONObject.toJSONString(sapRson)); }else if(workOrders.size()==2){ /**(两层报工)子工单先报工,然后母工单报工**/ @@ -345,7 +351,7 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService { } //子工单报工 logger.info("==========================子工单报工开始"); - sapRson = this.reportHzToSap(sHzWorks); + sapRson = this.reportHzToSap(sHzWorks,2); logger.info("==========================子工单报工结束:"+JSONObject.toJSONString(sapRson)); if(sapRson.getCode()== 200){ //一定是子单报工成功返回后,再母单报工 @@ -363,13 +369,38 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService { logger.info("==========================母工单报工开始"); pHzWork.setQuantityFeedback(sHzWorks.getQuantityFeedback()); pHzWork.setSac1(sHzWorks.getSac1()); - R sapR = this.reportHzToSap(pHzWork); + R sapR = this.reportHzToSap(pHzWork,2); logger.info("==========================母工单报工结束"+JSONObject.toJSONString(sapR)); return sapR; } - }else if(workOrders.size()==3){ - //20240301 TODO; + }else if(workOrders.size()>=3){ + for(MesReportWork workOrder:workOrders){ + mesReportWork.setUploadStatus("1");//除了1报工成功的,都需要报工 + mesReportWork.setProdType("prod"); + mesReportWork.setWorkorderCode(workOrder.getWorkorderCode()); + MesReportWork sHzWorks = mesReportWorkMapper.getReportWorkHz1(mesReportWork); + if (sHzWorks == null) { + return R.fail(workOrder.getWorkorderCode()+"未查询到报工单"); + } + //三层以上工单报工 + logger.info("==========================三层以上工单("+sHzWorks.getWorkorderCodeSap()+")报工开始"); + sapRson = this.reportHzToSap(sHzWorks,3); + logger.info("==========================三层以上工单("+sHzWorks.getWorkorderCodeSap()+")报工结束:" + + JSONObject.toJSONString(sapRson)); + if (sapRson.getCode() == 200) { + try { + Thread.sleep(3000); + } catch (Exception e) { + e.printStackTrace(); + } + //最终报工标识且sap报工成功:关闭子母工单 + //MesReportWork endReport = mesReportWorkMapper.getEndReport(pHzWork); + }else{ + //报工不成功跳出循环 + break; + } + } } return sapRson; } @@ -379,15 +410,22 @@ public class IWCInterfaceServiceImpl implements IWCSInterfaceService { * @param workOrder * @return */ - private R reportHzToSap(MesReportWork workOrder) { + private R reportHzToSap(MesReportWork workOrder,int cengji) { Date nowTime = DateUtils.getNowDate(); SapRFW sapRFW = new SapRFW(); sapRFW.setAufnr(workOrder.getWorkorderCodeSap());//虚拟工单号 sapRFW.setGamng(workOrder.getQuantityFeedback().toString());//报工数量 SapRFW.lt_gs ltgs = new SapRFW.lt_gs();//生产订单报工工时修改 ltgs.setConf_activity1(workOrder.getSac1());//机器 - BigDecimal newMan = new BigDecimal(workOrder.getSac1()) - .multiply(new BigDecimal(workOrder.getSac2())); + BigDecimal newMan = null; + if(cengji == 3){ + //订单是三层的情况 + newMan = new BigDecimal(workOrder.getSac2()); + }else{ + //订单是一层、二层的情况 + newMan = new BigDecimal(workOrder.getSac1()) + .multiply(new BigDecimal(workOrder.getSac2())); + } ltgs.setConf_activity2(newMan.toString());//人工 ltgs.setConf_activity3(workOrder.getSac1());//折旧 ltgs.setConf_activity4(newMan.toString());//其它