diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java index 7f05ea66..ab5b53b6 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java @@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Map; + /** * sap服务 * @@ -30,7 +32,7 @@ public interface RemoteSapService { /**回传sap母工单**/ @PostMapping("/sap/sapCreateOrder") - public R> SapCreateOrder(@RequestBody List sapCreateOrderList); + public R>> SapCreateOrder(@RequestBody List sapCreateOrderList); /**关闭订单**/ @PostMapping("/sap/sapCloseOrder") diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/dto/MesPrepareDetailDTO.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/dto/MesPrepareDetailDTO.java index 98e02a0a..6f566e3c 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/domain/dto/MesPrepareDetailDTO.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/dto/MesPrepareDetailDTO.java @@ -83,6 +83,15 @@ public class MesPrepareDetailDTO extends BaseEntity { private String needDate; private String recoil; private String buyFlag; + private String parentWorkOrder; + + public String getParentWorkOrder() { + return parentWorkOrder; + } + + public void setParentWorkOrder(String parentWorkOrder) { + this.parentWorkOrder = parentWorkOrder; + } public String getBuyFlag() { return buyFlag; diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java index 8ecd24e5..a89735e0 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java @@ -10,6 +10,7 @@ import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Map; public class RemoteSapFallbackFactory implements FallbackFactory { private static final Logger log = LoggerFactory.getLogger(RemoteSapFallbackFactory.class); @@ -33,7 +34,7 @@ public class RemoteSapFallbackFactory implements FallbackFactory> SapCreateOrder(List sapCreateOrderList) { + public R>> SapCreateOrder(List sapCreateOrderList) { return R.fail("回传sap工单失败:" + throwable.getMessage()); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java index d7191c56..3d0b6137 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java @@ -565,9 +565,9 @@ public class ProOrderServiceImpl implements IProOrderService { if (checkResult.isSuccess()) { String info = syncImportFunc(orderList); return success("信息导入完成。其中导入失败订单:"+info); + }else{ + return checkResult; } - // 校验失败 - return checkResult; } @Override diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java index 5140d41f..2a586e4c 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java @@ -266,22 +266,32 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { whiteOrder.setUpdateTime(DateUtils.getNowDate()); return proOrderWorkorderMapper.updateWhiteWorkOrder(whiteOrder); } else if (whiteOrder != null && !"white".equals(whiteOrder.getProdType())) { - List pcodes = new ArrayList<>();//一起下发用 + List wids = new ArrayList<>();//一起下发用 List wcodes = new ArrayList<>();//领料单用 - //成品的母工单//查上一级工单 + List ordercodes = new ArrayList<>();//关闭订单用 + + wids.add(whiteOrder.getWorkorderId()); + wcodes.add(whiteOrder.getWorkorderCode()); + ordercodes.add(whiteOrder.getOrderCode()); Boolean isTop = true; + //成品的母工单//查上一级工单 while(isTop) { - pcodes.add(whiteOrder.getWorkorderId()); - wcodes.add(whiteOrder.getWorkorderCode()); //查上一级工单 whiteOrder.setWorkorderCode(whiteOrder.getParentOrder()); ProOrderWorkorder pWorkOrder = proOrderWorkorderMapper.getPWorkOrder(whiteOrder); - if(pWorkOrder == null || "0".equals(pWorkOrder.getParentOrder())){ - isTop = false; - }else{ + if(pWorkOrder != null ){ + wids.add(pWorkOrder.getWorkorderId()); + wcodes.add(pWorkOrder.getWorkorderCode()); + ordercodes.add(pWorkOrder.getOrderCode()); + } + if("0".equals(pWorkOrder.getParentOrder())){ BeanUtils.copyProperties(pWorkOrder,whiteOrder); + isTop = false; } } + //顺序母子 + Collections.reverse(wids); + Collections.reverse(wcodes); sapList = new ArrayList<>(); SapCreateOrder sap = new SapCreateOrder(); sap.setWerks(whiteOrder.getFactoryCode());//工厂编码 @@ -301,36 +311,46 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { sysSapLog.setCreateTime(DateUtils.getNowDate()); proOrderMapper.addSapLog(sysSapLog); - R> r = remoteSapService.SapCreateOrder(sapList); + R>> r = remoteSapService.SapCreateOrder(sapList); logger.info("sap工单回传:" + r.getMsg()); if (500 == r.getCode()) { logger.error("sap工单回传:" + r.getMsg()); return 0; } - List returnCodes = r.getData(); + List> returnMaps = r.getData(); + List returnCodes = new ArrayList<>(); + for(Map mapdto:returnMaps){ + returnCodes.add(mapdto.get("LEAD_AUFNR")); + returnCodes.add(mapdto.get("AUFNR")); + } Date updateTime = DateUtils.getNowDate(); if (!CollectionUtils.isEmpty(returnCodes)) { logger.info("sap工单回传sap虚拟工单号:" + StringUtils.join(returnCodes, ",")); + //按照母子顺序进行更新 for (int m=0;m returnCodes = new ArrayList<>(); +// returnCodes.add("000100305879"); +// returnCodes.add("000100305878"); //获取领料单 - Collections.reverse(wcodes); this.getMesPrepare(returnCodes,wcodes); - //关闭订单//母订单的订单编码 - R closeR= remoteSapService.sapCloseOrder(whiteOrder.getOrderCode()); - logger.info("下发工单后关闭订单"+whiteOrder.getOrderCode()+":"+closeR.getMsg()); - + //关闭订单//订单的订单编码 + for(String orderCode:ordercodes){ + R closeR= remoteSapService.sapCloseOrder(orderCode); + logger.info(workorderId+"下发工单后关闭母订单"+orderCode+":"+closeR.getMsg()); + } //下达工单 - String[] idsArrayAll = (String[])pcodes.toArray(new String[pcodes.size()]); + String[] idsArrayAll = (String[])wids.toArray(new String[wids.size()]); return proOrderWorkorderMapper.downWorkorders(idsArrayAll); } } @@ -349,8 +369,9 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { } public void getMesPrepare(List sapWorkOrders,List workOrders) { - for(String sapWorkOrder:sapWorkOrders){ - logger.info("获取sap领料单:" + sapWorkOrder+"开始"); + Date createDate = DateUtils.getNowDate(); + for (int m = 0;m sapMaterialPreparationList = remoteSapService.materialPreparation(sapWorkOrder).getData(); + List sapMaterialPreparationList = remoteSapService.materialPreparation(sapWorkOrders.get(m)).getData(); if (CollectionUtils.isEmpty(sapMaterialPreparationList)) { System.out.println("sap无领料单数据"); } //取出各领料单 - List orderCodes = sapMaterialPreparationList.stream().map(SapMaterialPreparation::getAUFNR).collect(Collectors.toList()); - Date createDate = DateUtils.getNowDate(); - for (int m = 0;m details = new ArrayList<>(); - - MesPrepareDetailDTO detail = null; - for (SapMaterialPreparation sap : sapMaterialPreparationList) { - detail = new MesPrepareDetailDTO(); - detail.setPrepareId(mesPrepareId); - detail.setRecordId(IdUtils.fastSimpleUUID()); - detail.setAttr1(sap.getRSPOS());//预留/相关需求的项目编号 - detail.setMaterialCode(sap.getMATNR());//物料号 - detail.setMaterailName(sap.getMAKTX());//物料描述(短文本) - detail.setFactoryCode(sap.getWERKS());//工厂 - detail.setLocator(sap.getLGORT());//库存地点 - detail.setNeedDate(sap.getBDTER());//组件的需求日期 - detail.setQuantity(sap.getBDMNG());////需求量 - detail.setFundQuanlity(sap.getZQLSL());//欠料数量 - detail.setUnit(sap.getMEINS());//基本计量单位 - detail.setRecoil(sap.getRGEKZ());//反冲标识 - detail.setBuyFlag(sap.getDBSKZ());//直接采购标识 - detail.setCreateBy(SecurityUtils.getUsername()); - detail.setCreateTime(createDate); - details.add(detail); - logger.info("领料单内容detail:"+sap.getRSPOS()+","+sap.getMATNR()+","+ - sap.getMAKTX()+","+sap.getWERKS()+","+ sap.getLGORT()+","+ - sap.getBDTER()+","+sap.getBDMNG()+","+sap.getZQLSL()+","+ - sap.getMEINS()+","+sap.getRGEKZ()+","+sap.getDBSKZ() - ); - } - proOrderWorkorderMapper.insertMesPrepareDetails(details); - logger.info("获取sap领料单:" + sapWorkOrder+"结束"); + String orderCode = sapWorkOrders.get(m); + logger.info("sap虚拟工单码:"+orderCode); + /**mes_prepare**/ + String mesPrepareId = IdUtils.fastSimpleUUID(); + MesPrepareDTO mesPrepare0 = new MesPrepareDTO(); + mesPrepare0.setPrepareId(mesPrepareId); + mesPrepare0.setWorkorderCode(workOrders.get(m)); + mesPrepare0.setWorkorderName(orderCode);//工单(子) + mesPrepare0.setCreateTime(createDate); + mesPrepare0.setCreateBy(SecurityUtils.getUsername()); + mesPrepare0.setStatus("L0");//默认待确认 + proOrderWorkorderMapper.insertMesPrepare(mesPrepare0); + /**mes_prepare_detail**/ + List details = new ArrayList<>(); + + MesPrepareDetailDTO detail = null; + for (SapMaterialPreparation sap : sapMaterialPreparationList) { + detail = new MesPrepareDetailDTO(); + detail.setPrepareId(mesPrepareId); + detail.setRecordId(IdUtils.fastSimpleUUID()); + detail.setAttr1(sap.getRSPOS());//预留/相关需求的项目编号 + detail.setMaterialCode(sap.getMATNR());//物料号 + detail.setMaterailName(sap.getMAKTX());//物料描述(短文本) + detail.setFactoryCode(sap.getWERKS());//工厂 + detail.setLocator(sap.getLGORT());//库存地点 + detail.setNeedDate(sap.getBDTER());//组件的需求日期 + detail.setQuantity(sap.getBDMNG());////需求量 + detail.setFundQuanlity(sap.getZQLSL());//欠料数量 + detail.setUnit(sap.getMEINS());//基本计量单位 + detail.setRecoil(sap.getRGEKZ());//反冲标识 + detail.setBuyFlag(sap.getDBSKZ());//直接采购标识 + detail.setCreateBy(SecurityUtils.getUsername()); + detail.setCreateTime(createDate); + detail.setParentWorkOrder(workOrders.get(0)); + details.add(detail); + logger.info("领料单内容detail:"+sap.getRSPOS()+","+sap.getMATNR()+","+ + sap.getMAKTX()+","+sap.getWERKS()+","+ sap.getLGORT()+","+ + sap.getBDTER()+","+sap.getBDMNG()+","+sap.getZQLSL()+","+ + sap.getMEINS()+","+sap.getRGEKZ()+","+sap.getDBSKZ() + ); } + proOrderWorkorderMapper.insertMesPrepareDetails(details); + logger.info("获取sap领料单:" + sapWorkOrders.get(m)+"结束"); } } @@ -773,18 +791,11 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { if (splitOrderDTO.getRouteCode() != null) { proOrderWorkorder.setRouteCode(splitOrderDTO.getRouteCode()); } -// // 白坯工单返修-车数 -// if (proOrderWorkorder.getProdType().equals("white")) { -// if (splitOrderDTO.getCarNum() != null) { -// proOrderWorkorder.setCarNum(splitOrderDTO.getCarNum()); -// } -// } proOrderWorkorderMapper.updateProOrderWorkorder(proOrderWorkorder); // 删除工单下对应批次信息 proOrderWorkorderBatchMapper.deleteProOrderWorkorderBatchByWorkorderId(proOrderWorkorder.getWorkorderId()); -// System.out.println("这里是workorderCode------------》"+proOrderWorkorder.getWorkorderCode()); // 生成对应批次表 workBatch.setWorkorderId(proOrderWorkorder.getWorkorderId()); @@ -840,13 +851,6 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { if (!(proOrderWorkorder.getStatus().equals("w0") || proOrderWorkorder.getStatus().equals("w1"))) { return error("工单已生产,不可变更!"); } -// // 白坯工单所在湿料计划下发不允许变更 -// if (proOrderWorkorder.getProdType().equals("white")) { -// ProWetMaterialPlan plan = proWetMaterialPlanMapper.selectProWetMaterialPlanByWorkId(proOrderWorkorder.getWorkorderId()); -// if (plan != null) { -// return error("工单所在湿料计划已下发,不允许变更!"); -// } -// } return success(); } @@ -1081,5 +1085,12 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { } return success("变更成功"); } - + public static void main(String args[]){ + List wcodes =new ArrayList<>(); + wcodes.add("aaa"); + wcodes.add("bbb"); + wcodes.add("ccc"); + Collections.reverse(wcodes); + System.out.println(StringUtils.join(wcodes, ",")); + } } diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml index 894489c0..3528ec14 100644 --- a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml @@ -457,13 +457,13 @@ INSERT INTO mes_prepare_detail ( record_id,prepare_id,material_code,material_name,unit, quantity,create_by,create_time,factory_code,status, - locator,need_date,recoil,fund_quanlity,buy_flag + locator,need_date,recoil,fund_quanlity,buy_flag,parent_work_order )VALUES ( #{d.recordId},#{d.prepareId},#{d.materialCode},#{d.materailName},#{d.unit}, #{d.quantity},#{d.createBy},#{d.createTime},#{d.factoryCode},#{d.status}, - #{d.locator},#{d.needDate},#{d.recoil},#{d.fundQuanlity},#{d.buyFlag} + #{d.locator},#{d.needDate},#{d.recoil},#{d.fundQuanlity},#{d.buyFlag},#{d.parentWorkOrder} )