diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index d10af34..ac6ffd7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -49,6 +49,7 @@ import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.Query; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalTime; import java.util.*; @@ -290,15 +291,50 @@ public class MesWorkOrderService extends BaseMesService implements closeMesPrintQueue(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName()); } result.setWorkOrderStatus(bean.getWorkOrderStatus()); + //非排序关闭订单 需要关闭kitting + doCloseKittingOrder(bean,bean.getModifyUser()); + } updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); - if (isSavePrintQueue) insertPrintQueue(result); - + if (isSavePrintQueue) { + insertPrintQueue(result); + //发布时 校验是否需要生成拉动单 + List list = new ArrayList<>(); + list.add(result); + doCreateKitting(list,result.getOrganizeCode()); + } return result; } - + private void doCloseKittingOrder(MesWorkOrder mesWorkOrder,String userName){ + String organizeCode = mesWorkOrder.getOrganizeCode(); + DdlPackBean pullOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkOrderNo(),"mesWorkOrder",pullOrderPackBean); + List pullingOrderInfoList = pullingOrderInfoRepository.findByHqlWhere(pullOrderPackBean); + if (pullingOrderInfoList != null && !pullingOrderInfoList.isEmpty()) { + List infoList = pullingOrderInfoList.stream().filter(item -> item.getPullOrderStatus() != MesExtEnumUtil.PULL_ORDER_STATUS.PULL_ORDER_STATUS_50.getValue()).collect(Collectors.toList()); + + if (!infoList.isEmpty()) { + MesPullingOrderInfo info = infoList.get(0); + String pullCode = info.getPullCode(); + //查询出拉动组,判断是否需要关闭拉动单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(pullCode,"pullCode",ddlPackBean); + List mesPartPullList = partPullRao.findByHqlWhere(ddlPackBean); + if (mesPartPullList!= null && !mesPartPullList.isEmpty()) { + MesPartPull mesPartPull = mesPartPullList.get(0); + String pullOrderCloseState = mesPartPull.getPullOrderCloseState(); + if (!StringUtils.isEmpty(pullOrderCloseState)){ + List closeState = Arrays.asList(pullOrderCloseState.split(",")); + if (closeState.contains(mesWorkOrder.getWorkOrderStatus().toString())){ + mesPullingOrderInfoRao.updateByProperties(new String[]{"workOrderNo"}, new Object[]{mesWorkOrder.getWorkOrderNo()}, new String[]{"pullOrderStatus","modifyUser"}, new Object[]{ MesExtEnumUtil.PULL_ORDER_STATUS.PULL_ORDER_STATUS_50,userName}); + } + } + } + } + } + } @Override protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean); @@ -704,7 +740,7 @@ public class MesWorkOrderService extends BaseMesService implements ConvertBean.serviceModelInitialize(copyMesWorkOrder, item.getCreateUser()); index++; baseRDao.insert(copyMesWorkOrder); - workOrderListForKitting.add(copyMesWorkOrder); + //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); @@ -726,6 +762,7 @@ public class MesWorkOrderService extends BaseMesService implements item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); ConvertBean.serviceModelInitialize(item, item.getCreateUser()); baseRDao.insert(item); + workOrderListForKitting.add(item); index++; //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); @@ -775,7 +812,11 @@ public class MesWorkOrderService extends BaseMesService implements //按成套圆整 } else if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_DOOR_PANELS_NUMBER.getValue()) { //按成套圆整 会是同一个拉动组 生成拉动单 - Map> groupCodeMap = workOrderMap.get(workCenterCode).stream().collect(Collectors.groupingBy(MesWorkOrder::getGroupCode)); + List workOrderList1 = workOrderMap.get(workCenterCode); + if (CollectionUtils.isEmpty(workOrderList1)) { + continue; + } + Map> groupCodeMap = workOrderList1.stream().collect(Collectors.groupingBy(MesWorkOrder::getGroupCode)); for (Long l : groupCodeMap.keySet()) { List workOrderList = groupCodeMap.get(l); List mesWorkCenters = workCenterMap.get(workCenterCode); @@ -805,9 +846,13 @@ public class MesWorkOrderService extends BaseMesService implements for (MesWorkOrder mesWorkOrder : workOrderListNew) { List bomList = getPlatBom(null, mesWorkOrder.getPartNo(), TimeTool.getNowTime(true), organizeCode); List collect = bomList.stream().filter(item -> pullPartNoList.contains(item.getItemPartNo())).collect(Collectors.toList()); + mesBomRDao.detachList(collect); collect.forEach(item -> item.setItemQty(item.getItemQty() * mesWorkOrder.getQty())); list.addAll(collect); } + if (list.isEmpty()){ + return; + } // 计算所有拉动单的数量,生成拉动单 String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE"); GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode); @@ -878,18 +923,19 @@ public class MesWorkOrderService extends BaseMesService implements List partNoList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPartNo).collect(Collectors.toList()); //深汕按照数量圆整 if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_BY_QUANTITY.getValue()){ - int packRoundQty = Integer.parseInt(mesPartPull.getPackRoundQty()); + int packRoundQty =(int)Double.parseDouble(mesPartPull.getPackRoundQty()); String partNo = workOrderListNew.get(0).getPartNo(); //打散bom List bomList = getPlatBom(null, partNo, TimeTool.getNowTime(true), organizeCode); //需要生成拉动单的零件 List bomPullList = bomList.stream().filter(item -> partNoList.contains(item.getItemPartNo())).collect(Collectors.toList()); + mesBomRDao.detachList(bomPullList); for (MesWorkOrder mesWorkOrder : workOrderListNew) { Double qty = mesWorkOrder.getQty(); bomPullList.forEach(item -> item.setItemQty(item.getItemQty() * qty)); DoubleSummaryStatistics summaryStatistics = bomPullList.stream().collect(Collectors.summarizingDouble(MesBom::getItemQty)); double max = summaryStatistics.getMax(); - int multiple = Integer.parseInt(String.valueOf(Math.ceil(max / packRoundQty))); //生成的拉动的数量 + int multiple = (int)Math.ceil(max / packRoundQty); //生成的拉动的数量 for (int i = 1; i <= multiple; i++) { insertPullOrderInfo( mesWorkOrder, bomPullList, mesPartPull, mesPartPullDetailList, organizeCode, i, packRoundQty); } @@ -932,6 +978,7 @@ public class MesWorkOrderService extends BaseMesService implements private void insertPullOrderInfo(MesWorkOrder mesWorkOrder,List bomPullList,MesPartPull mesPartPull,List mesPartPullDetailList,String organizeCode,int i, int roundPackQty){ // 计算所有拉动单的数量,生成拉动单 Map pullDetailMap = mesPartPullDetailList.stream().collect(Collectors.toMap(MesPartPullDetail::getPullPartNo, Function.identity())); + List pullDetailPartList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPullPartNo).collect(Collectors.toList()); String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE"); GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode); genSerialNoModel.setDynamicRule(mesPartPull.getPullCode()); @@ -953,10 +1000,13 @@ public class MesWorkOrderService extends BaseMesService implements pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); pullingOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); pullingOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); + ConvertBean.serviceModelInitialize(pullingOrder, AuthUtil.getSessionUser().getUserName()); mesPullingOrderInfoRao.insert(pullingOrder); - for (MesBom mesBom : bomPullList) { + List filterBomList = bomPullList.stream().filter(item -> pullDetailPartList.contains(item.getItemPartNo())).collect(Collectors.toList()); + for (MesBom mesBom : filterBomList) { MesPullingOrderPartInfo detail = new MesPullingOrderPartInfo(); + MesPartPullDetail mesPartPullDetail = pullDetailMap.get(mesBom.getItemPartNo()); detail.setOrganizeCode(organizeCode); detail.setPullCode(pullingOrder.getPullCode()); detail.setPullingOrderNo(pullingOrder.getPullingOrderNo()); @@ -966,12 +1016,15 @@ public class MesWorkOrderService extends BaseMesService implements detail.setPartNo(mesBom.getItemPartNo()); detail.setPartName(mesBom.getItemPartName()); double remainingQty = mesBom.getItemQty() - i * roundPackQty; + if (remainingQty < -roundPackQty){ + continue; + } detail.setPullQty(remainingQty > 0 ? roundPackQty : (mesBom.getItemQty() - (i-1) * roundPackQty)); detail.setCustOrderNo(pullingOrder.getCustOrderNo()); detail.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); detail.setWaterSeq(pullingOrder.getProductSeq()); - detail.setWorkCellCode(mesWorkOrder.getWorkCenterCode()); - detail.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0 + detail.setWorkCellCode(mesPartPullDetail.getWorkCellCode()); +// detail.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0 detail.setCustPartNo(pullingOrder.getCustPartNo()); detail.setCarSeries(pullDetailMap.get(mesBom.getItemPartNo()) == null ? "" : pullDetailMap.get(mesBom.getItemPartNo()).getCarSeries()); detail.setOrderFlag(pullingOrder.getOrderFlag()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties index d72832f..43a2258 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u540D\u79F0 spring.application.name=i3mes #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=docker,cus-docker +spring.profiles.active=6,cus-71 ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C desc.application.name=\u751F\u4EA7\u6267\u884C\u7CFB\u7EDF