diff --git a/op-common/op-common-core/src/main/java/com/op/common/core/utils/StringUtils.java b/op-common/op-common-core/src/main/java/com/op/common/core/utils/StringUtils.java index a74a28af..c6b43806 100644 --- a/op-common/op-common-core/src/main/java/com/op/common/core/utils/StringUtils.java +++ b/op-common/op-common-core/src/main/java/com/op/common/core/utils/StringUtils.java @@ -481,7 +481,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @param content 内容物 (根据产品,一般为0) * @return */ - public static final List batchAutoCreate(String factoryCode, String lineCode, Date productDate,String version, String content,int batchNum){ + public static final List batchAutoCreate(String factoryCode, String lineCode, Date productDate,String version, String content,int batchNum,char startZM){ SimpleDateFormat targetFormat = new SimpleDateFormat("yyyyMMdd"); // Create a Calendar instance and set it to the current date Calendar calendar = Calendar.getInstance(); @@ -495,7 +495,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { // Format the new date String toValidity = targetFormat.format(futureDate); List batchList=new ArrayList<>(); - for (char letter = 'A'; letter < 'A' + batchNum; letter++) { + + for (char letter = startZM; letter < startZM + batchNum; letter++) { String BatchCode=toValidity+Constants.LJ+targetFormat.format(productDate)+lineCode+factoryCode+letter+Constants.OUTPUT_STATUS_A+content+version; batchList.add(BatchCode); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java index f035cb6c..ca993fdf 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java @@ -341,8 +341,9 @@ public class ProOrderController extends BaseController { /**辅助排产**/ @PostMapping("/autoSplitOrder") - public R autoSplitOrder(@RequestBody ProOrder proOrder) { - return proOrderService.autoSplitOrder(proOrder); + public AjaxResult autoSplitOrder(@RequestBody ProOrder proOrder) { + AjaxResult r= proOrderService.autoSplitOrder(proOrder); + return r; } /**辅助排产取消**/ diff --git a/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java b/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java index 112c0a9c..457f61a7 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java @@ -75,6 +75,15 @@ public class ProOrder extends TreeEntity { private String routeCode; private Integer endFlag; private String belongWorkOrder; + private String shiftId; + + public String getShiftId() { + return shiftId; + } + + public void setShiftId(String shiftId) { + this.shiftId = shiftId; + } public String getBelongWorkOrder() { return belongWorkOrder; diff --git a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java index a12d16ed..c3eb57a4 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java @@ -231,5 +231,7 @@ public interface ProOrderWorkorderMapper { List selectFirWorkOrderCG(String id); List selectChildWorkOrderCG(String workorderCode); + + List getBatchDict(String batchFlag); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java b/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java index 7debc0a6..b0c96781 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java @@ -148,7 +148,7 @@ public interface IProOrderService { ProOrder getCanProductLine(ProOrder proOrder); - R autoSplitOrder(ProOrder proOrder); + AjaxResult autoSplitOrder(ProOrder proOrder); AjaxResult getWorkOrderListCG(String id); 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 32ab6907..6c03eefb 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 @@ -1,6 +1,7 @@ package com.op.plan.service.impl; import java.math.BigDecimal; +import java.math.BigInteger; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; @@ -1318,37 +1319,46 @@ public class ProOrderServiceImpl implements IProOrderService { //所有线体 List lineList = proOrderMapper.getCanProductLine(); dto.setLineList(lineList); + + List proLines = proOrderMapper.getSelectLineLevel1(proOrder); + BigDecimal todayPro = new BigDecimal(BigInteger.ZERO);//当日设备实际产能 + for(ProOrder pLines:proLines){ + todayPro = todayPro.add(pLines.getEfficiency()); + } + + if(todayPro.doubleValue() < proOrder.getQuantity()){ + logger.error("当日设备产能达不到订单要求"); + return null; + } + //推荐线体 - List recommendLineList = getRecommendLines(proOrder); + List recommendLineList = getRecommendLines(proLines,proOrder); dto.setRecommendLineList(recommendLineList); return dto; } @Override @DS("#header.poolName") - public R autoSplitOrder(ProOrder proOrder) { + public AjaxResult autoSplitOrder(ProOrder proOrder) { Date nowTime = DateUtils.getNowDate();//公共时间 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String key = "#header.poolName"; proOrder.setFactoryCode(request.getHeader(key.substring(8)).replace("ds_","")); proOrder.setCreateTime(nowTime); + String shiftId = proOrder.getShiftId(); //订单总量 proOrder.setQuantitySplit(proOrder.getQuantitySplit()==null?0L:proOrder.getQuantitySplit()); Long orderQua = proOrder.getQuantity()-proOrder.getQuantitySplit(); //有几个设备就有几个工单 for(int i=0;i workorders = new ArrayList<>(); proOrder.setLineCode(proOrder.getLineCodes()[i]); ProLine plineInfo = proOrderWorkorderMapper.getLineProductInfo(proOrder);//线体母单产品产能和线体代码 if(plineInfo==null){ logger.error("线体"+proOrder.getLineCodes()[i]+"无法生产"); - return R.fail("线体"+proOrder.getLineCodes()[i]+"无法生产"); + return AjaxResult.error(642,"线体"+proOrder.getLineCodes()[i]+"无法生产"); } Long efficiency = plineInfo.getEfficiency(); if(efficiency < orderQua){ @@ -1365,6 +1375,7 @@ public class ProOrderServiceImpl implements IProOrderService { proOrder.setBelongWorkOrder(belongWorkOrder); proOrder.setWorkerOrder(belongWorkOrder); proOrder.setParentOrder("0"); + proOrder.setShiftId(shiftId); ProOrderWorkorder pworkOrder = getWorkOrderByOrder(proOrder,proOrder);//TODO; //父级 workorders.add(pworkOrder); @@ -1384,6 +1395,7 @@ public class ProOrderServiceImpl implements IProOrderService { sonOrder.setWorkerOrder(sworkOrderCode); sonOrder.setParentOrder(parentWorkOrder); sonOrder.setQuantitySplit(sonOrder.getQuantity()); + sonOrder.setShiftId(shiftId); if(CollectionUtils.isEmpty(sonOrder.getChildren())){ sonOrder.setEndFlag(1); } @@ -1412,7 +1424,16 @@ public class ProOrderServiceImpl implements IProOrderService { /**拆批次**/ proOrder.setProdSpc(plineInfo.getDh());//借用字段 + + + List workorderBatches0 = getBatchList(proOrder);//TODO; + + if(CollectionUtils.isEmpty(workorderBatches0)){ + logger.error("批次太多,请检查【产品批次数量】、【产线产能】、【批次号夜班开始字母】是否设置正常。"); + return AjaxResult.error(642,"批次太多,请检查产品批次数量是否设置正常。"); + } + List workBatchs = new ArrayList<>(); for(int m=0;m100){ - logger.error("批次太多,请检查产品批次数量是否设置正常。"); - return R.fail("批次太多,请检查产品批次数量是否设置正常。"); - } - int pn = proOrderWorkorderBatchMapper.insertWorkorderBatchs(workBatchs); System.out.println("pn:"+pn); } } - return R.ok(); + return AjaxResult.success(); } /** @@ -1507,12 +1522,33 @@ public class ProOrderServiceImpl implements IProOrderService { pworkOrderQua = pworkOrderQua - batchQua0.getBatchQuaStandar().longValue(); } + List batches = proOrderWorkorderMapper.getBatchDict("batch_flag"); + char dayWorkBatchStart = batches.get(0).charAt(0); + char nightWorkBatchStart = batches.get(1).charAt(0); + int dayBatches = nightWorkBatchStart - dayWorkBatchStart; + int nigthBatches = 'Z' - nightWorkBatchStart; + + int maxBatchNum = 0; + char startZM = 'A'; + if("5".equals(proOrder.getShiftId())){//白班 + maxBatchNum = nightWorkBatchStart - dayWorkBatchStart; + startZM = dayWorkBatchStart; + }else if("2".equals(proOrder.getShiftId())){//夜班 + maxBatchNum = 'Z' - nightWorkBatchStart; + startZM = nightWorkBatchStart; + } + + if(workorderBatches.size()>maxBatchNum){ + logger.error("大于工厂字典【batch_flag】推理的的批次数"); + return null; + } + //获取批次号集合 List batchCodes = StringUtils.batchAutoCreate(proOrder.getFactoryCode(), proOrder.getProdSpc(), DateUtils.dateTime("yyyy-MM-dd",proOrder.getProductDate()), proOrder.getAtrr2().substring(proOrder.getAtrr2().length()-1), - "0",workorderBatches.size()); + "0",workorderBatches.size(),startZM); for(int n=0;n getRecommendLines(ProOrder proOrder){ + protected List getRecommendLines(List proLines,ProOrder proOrder){ List lines = new ArrayList<>(); - List proLines = proOrderMapper.getSelectLineLevel1(proOrder); //订单总量 proOrder.setQuantitySplit(proOrder.getQuantitySplit()==null?0L:proOrder.getQuantitySplit()); BigDecimal orderQuality = new BigDecimal(proOrder.getQuantity()).subtract(new BigDecimal(proOrder.getQuantitySplit())); @@ -1547,18 +1582,7 @@ public class ProOrderServiceImpl implements IProOrderService { public static void main(String args[]){ -// String arrayStr = "[[\"GX01\",\"LG1\"],[\"GX01\",\"LG2\"],[\"GX02\",\"S1\"],[\"GX02\",\"S2\"],[\"GX03\",\"HF01\"],[\"GX04\",\"SPJ01\"]]"; -// JSONArray jsonArray = JSONArray.parseArray(arrayStr); -// for(int c=0;c + insert into mes_prepare_detail @@ -778,7 +781,7 @@ product_name,unit,quantity_split,route_code,prod_line_code, product_date,parent_order, status,create_by,create_time, prod_type,factory_code,end_flag,del_flag,sort_no, - belong_work_order + belong_work_order,shift_id )VALUES ( @@ -786,7 +789,7 @@ #{d.productName},#{d.unit},#{d.quantitySplit},#{d.routeCode},#{d.prodLineCode}, #{d.productDate},#{d.parentOrder},#{d.status},#{d.createBy},#{d.createTime}, #{d.prodType}, #{d.factoryCode},#{d.endFlag},'2',#{d.sortNo}, - #{d.belongWorkOrder} + #{d.belongWorkOrder},#{d.shiftId} )