@ -1,14 +1,9 @@
package com.hw.mes.service.impl ;
package com.hw.mes.service.impl ;
import java.math.BigDecimal ;
import java.math.BigDecimal ;
import java.util.ArrayList ;
import java.util.* ;
import java.util.Date ;
import java.util.List ;
import com.hw.common.core.constant.Constants ;
import com.hw.common.core.constant.* ;
import com.hw.common.core.constant.MesConstants ;
import com.hw.common.core.constant.QmsConstants ;
import com.hw.common.core.constant.SecurityConstants ;
import com.hw.common.core.domain.R ;
import com.hw.common.core.domain.R ;
import com.hw.common.core.exception.ServiceException ;
import com.hw.common.core.exception.ServiceException ;
import com.hw.common.core.utils.DateUtils ;
import com.hw.common.core.utils.DateUtils ;
@ -17,6 +12,9 @@ import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.security.utils.SecurityUtils ;
import com.hw.common.security.utils.SecurityUtils ;
import com.hw.mes.api.domain.MesBaseBarcodeInfo ;
import com.hw.mes.api.domain.MesBaseBarcodeInfo ;
import com.hw.mes.api.domain.MesBaseMaterialInfo ;
import com.hw.mes.api.domain.MesBaseMaterialInfo ;
import com.hw.mes.api.domain.MesOrderBind ;
import com.hw.mes.api.domain.MesSaleOrderRelate ;
import com.hw.mes.config.MesConfig ;
import com.hw.mes.domain.* ;
import com.hw.mes.domain.* ;
import com.hw.mes.domain.vo.MesBindBarcodeVo ;
import com.hw.mes.domain.vo.MesBindBarcodeVo ;
import com.hw.mes.mapper.* ;
import com.hw.mes.mapper.* ;
@ -27,6 +25,7 @@ import com.hw.printer.api.RemotePrinterService;
import com.hw.printer.api.domain.vo.PrintContentVo ;
import com.hw.printer.api.domain.vo.PrintContentVo ;
import com.hw.printer.api.domain.vo.PrinterVo ;
import com.hw.printer.api.domain.vo.PrinterVo ;
import com.hw.wms.api.RemoteWmsService ;
import com.hw.wms.api.RemoteWmsService ;
import com.hw.wms.api.domain.WmsWarehouseMaterial ;
import com.hw.wms.api.domain.vo.WmsProductStockVo ;
import com.hw.wms.api.domain.vo.WmsProductStockVo ;
import com.hw.wms.api.domain.vo.WmsRawStockVo ;
import com.hw.wms.api.domain.vo.WmsRawStockVo ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.beans.factory.annotation.Autowired ;
@ -72,6 +71,21 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Autowired
@Autowired
private MesProductPlanDetailMapper mesProductPlanDetailMapper ;
private MesProductPlanDetailMapper mesProductPlanDetailMapper ;
@Autowired
private MesPurchaseOrderMapper mesPurchaseOrderMapper ;
@Autowired
private MesSaleOrderMapper mesSaleOrderMapper ;
@Autowired
private MesMaterialBomMapper mesMaterialBomMapper ;
@Autowired
private MesSaleOrderRelateMapper mesSaleOrderRelateMapper ;
@Autowired
private MesConfig mesConfig ;
@Resource
@Resource
private RemoteWmsService remoteWmsService ;
private RemoteWmsService remoteWmsService ;
@ -180,7 +194,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
if ( canBindAmount . compareTo ( BigDecimal . ONE ) > = 0 ) {
if ( canBindAmount . compareTo ( BigDecimal . ONE ) > = 0 ) {
for ( int i = 0 ; i < canBindAmount . intValue ( ) ; i + + ) {
for ( int i = 0 ; i < canBindAmount . intValue ( ) ; i + + ) {
// 生成数量条的不同条码内容
// 生成数量条的不同条码内容
toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , batchCode, userName , currentDate ) ;
toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , Seq. getId ( Seq . mesBarcodeSeqType , Seq . mesBarcodeCode ) , batchCode, userName , currentDate ) ;
toInsertedBarcodeInfo . setSaleOrderId ( mesOrderBind . getSaleOrderId ( ) ) ;
toInsertedBarcodeInfo . setSaleOrderId ( mesOrderBind . getSaleOrderId ( ) ) ;
toInsertedBarcodeInfo . setSaleorderCode ( mesOrderBind . getSaleOrderCode ( ) ) ;
toInsertedBarcodeInfo . setSaleorderCode ( mesOrderBind . getSaleOrderCode ( ) ) ;
@ -202,7 +216,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
String batchCode = Seq . getId ( Seq . mesBatchCodeSeqType , Seq . mesBatchCodeCode ) ;
String batchCode = Seq . getId ( Seq . mesBatchCodeSeqType , Seq . mesBatchCodeCode ) ;
for ( long i = 0 ; i < barcodeAmount . intValue ( ) ; i + + ) {
for ( long i = 0 ; i < barcodeAmount . intValue ( ) ; i + + ) {
// 生成条码数量的不同条码内容
// 生成条码数量的不同条码内容
toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , batchCode, userName , currentDate ) ;
toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , Seq. getId ( Seq . mesBarcodeSeqType , Seq . mesBarcodeCode ) , batchCode, userName , currentDate ) ;
toInsertedBarcodeInfo . setSaleOrderId ( 0 L ) ;
toInsertedBarcodeInfo . setSaleOrderId ( 0 L ) ;
toInsertedBarcodeInfo . setSafeFlag ( MesConstants . MES_ORDER_BIND_SAFE_FLAG_YES ) ;
toInsertedBarcodeInfo . setSafeFlag ( MesConstants . MES_ORDER_BIND_SAFE_FLAG_YES ) ;
mesBaseBarcodeInfoMapper . insertMesBaseBarcodeInfo ( toInsertedBarcodeInfo ) ;
mesBaseBarcodeInfoMapper . insertMesBaseBarcodeInfo ( toInsertedBarcodeInfo ) ;
@ -247,7 +261,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
String batchCode = Seq . getId ( Seq . mesBatchCodeSeqType , Seq . mesBatchCodeCode ) ;
String batchCode = Seq . getId ( Seq . mesBatchCodeSeqType , Seq . mesBatchCodeCode ) ;
for ( long i = 0 ; i < barcodeAmount . intValue ( ) ; i + + ) {
for ( long i = 0 ; i < barcodeAmount . intValue ( ) ; i + + ) {
// 生成数量条的不同条码内容
// 生成数量条的不同条码内容
toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , batchCode, userName , currentDate ) ;
toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , Seq. getId ( Seq . mesBarcodeSeqType , Seq . mesBarcodeCode ) , batchCode, userName , currentDate ) ;
toInsertedBarcodeInfo . setSafeFlag ( MesConstants . MES_ORDER_BIND_SAFE_FLAG_YES ) ;
toInsertedBarcodeInfo . setSafeFlag ( MesConstants . MES_ORDER_BIND_SAFE_FLAG_YES ) ;
toInsertedBarcodeInfo . setSaleOrderId ( 0 L ) ;
toInsertedBarcodeInfo . setSaleOrderId ( 0 L ) ;
toInsertedBarcodeInfos . add ( toInsertedBarcodeInfo ) ;
toInsertedBarcodeInfos . add ( toInsertedBarcodeInfo ) ;
@ -493,14 +507,14 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
}
}
public MesBaseBarcodeInfo getInsertedBarcodeInfo ( MesBaseBarcodeInfo mesBaseBarcodeInfo , String ba tchCode, String userName , Date currentDate ) {
public MesBaseBarcodeInfo getInsertedBarcodeInfo ( MesBaseBarcodeInfo mesBaseBarcodeInfo , String ba rcodeInfo, String ba tchCode, String userName , Date currentDate ) {
MesBaseBarcodeInfo toInsertedBarcodeInfo = new MesBaseBarcodeInfo ( ) ;
MesBaseBarcodeInfo toInsertedBarcodeInfo = new MesBaseBarcodeInfo ( ) ;
//同一批次的批次代码相同
//同一批次的批次代码相同
toInsertedBarcodeInfo . setBatchCode ( batchCode ) ;
toInsertedBarcodeInfo . setBatchCode ( batchCode ) ;
toInsertedBarcodeInfo . setPurchaseOrderId ( mesBaseBarcodeInfo . getPurchaseOrderId ( ) ) ;
toInsertedBarcodeInfo . setPurchaseOrderId ( mesBaseBarcodeInfo . getPurchaseOrderId ( ) ) ;
toInsertedBarcodeInfo . setPoNo ( mesBaseBarcodeInfo . getPoNo ( ) ) ;
toInsertedBarcodeInfo . setPoNo ( mesBaseBarcodeInfo . getPoNo ( ) ) ;
toInsertedBarcodeInfo . setBarcodeType ( MesConstants . MES_BARCODE_TYPE_RAW ) ;
toInsertedBarcodeInfo . setBarcodeType ( MesConstants . MES_BARCODE_TYPE_RAW ) ;
toInsertedBarcodeInfo . setBarcodeInfo ( Seq. getId ( Seq . mesBarcodeSeqType , Seq . mesBarcodeCode ) ) ;
toInsertedBarcodeInfo . setBarcodeInfo ( barcodeInfo ) ;
toInsertedBarcodeInfo . setMaterialId ( mesBaseBarcodeInfo . getMaterialId ( ) ) ;
toInsertedBarcodeInfo . setMaterialId ( mesBaseBarcodeInfo . getMaterialId ( ) ) ;
toInsertedBarcodeInfo . setProductionDate ( mesBaseBarcodeInfo . getProductionDate ( ) ) ;
toInsertedBarcodeInfo . setProductionDate ( mesBaseBarcodeInfo . getProductionDate ( ) ) ;
toInsertedBarcodeInfo . setLastOutstockDate ( mesBaseBarcodeInfo . getLastOutstockDate ( ) ) ;
toInsertedBarcodeInfo . setLastOutstockDate ( mesBaseBarcodeInfo . getLastOutstockDate ( ) ) ;
@ -1114,4 +1128,450 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
return updateSize > 0 ;
return updateSize > 0 ;
}
}
/ * *
* 合 并 采 购 订 单 生 成 原 材 料 条 码
*
* @param mesBaseBarcodeInfo 条 码 信 息
* /
@Override
@Transactional ( rollbackFor = Exception . class )
public int generateMergeRawBarcode ( MesBaseBarcodeInfo mesBaseBarcodeInfo ) {
Date currentDate = new Date ( ) ;
String userName = SecurityUtils . getUsername ( ) ;
List < MesSaleOrderRelate > mesSaleOrderRelateList = mesBaseBarcodeInfo . getMesSaleOrderRelateList ( ) ;
List < MesMaterialBom > toUpdatedMaterialBoms = new ArrayList < > ( ) ;
StringBuilder errorMsgBuilder = new StringBuilder ( ) ;
for ( MesSaleOrderRelate mesSaleOrderRelate : mesSaleOrderRelateList ) {
Long orderBindId = mesSaleOrderRelate . getOrderBindId ( ) ;
MesOrderBind dbOrderBind = mesOrderBindMapper . selectMesOrderBindByOrderBindId ( orderBindId ) ;
if ( dbOrderBind . getBindAmount ( ) . compareTo ( BigDecimal . ONE ) ! = 0 ) {
errorMsgBuilder . append ( String . format ( "序号%s: 订单绑定数量需要为1" , mesSaleOrderRelate . getIndex ( ) ) ) ;
}
if ( dbOrderBind . getBarcodeAmount ( ) . compareTo ( BigDecimal . ONE ) > = 0 ) {
errorMsgBuilder . append ( String . format ( "序号%s: 已经生成条码, 不能再次选择" , mesSaleOrderRelate . getIndex ( ) ) ) ;
}
Long relateSaleOrderId = mesSaleOrderRelate . getRelateSaleOrderId ( ) ;
MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate ( ) ;
querySaleOrderRelate . setRelateSaleOrderId ( relateSaleOrderId ) ;
List < MesSaleOrderRelate > mesSaleOrderRelates = mesSaleOrderRelateMapper . selectMesSaleOrderRelateList ( querySaleOrderRelate ) ;
if ( mesSaleOrderRelates ! = null & & ! mesSaleOrderRelates . isEmpty ( ) ) {
errorMsgBuilder . append ( String . format ( "序号%s: 销售订单已经关联过;" , mesSaleOrderRelate . getIndex ( ) ) ) ;
}
MesSaleOrder saleOrder = mesSaleOrderMapper . selectMesSaleOrderBySaleOrderId ( relateSaleOrderId ) ;
BigDecimal saleOrderAmount = saleOrder . getOrderAmount ( ) ;
BigDecimal availableAmount = mesSaleOrderRelate . getRelateSaleOrderAmount ( ) ;
if ( availableAmount . compareTo ( BigDecimal . ONE ) ! = 0 ) {
errorMsgBuilder . append ( String . format ( "序号%s: 需要选择可用数量为1的信息;" , mesSaleOrderRelate . getIndex ( ) ) ) ;
}
if ( ! saleOrder . getIsRelease ( ) . equals ( MesConstants . MES_SALE_ORDER_IS_RELEASE_TO_PUBLISH ) ) {
errorMsgBuilder . append ( String . format ( "序号%s: 销售订单已经发布工单, 不能合并;" , mesSaleOrderRelate . getIndex ( ) ) ) ;
}
if ( saleOrderAmount . compareTo ( availableAmount ) ! = 0 ) {
errorMsgBuilder . append ( String . format ( "序号%s: 需要选择销售订单数量为1的信息;" , mesSaleOrderRelate . getIndex ( ) ) ) ;
}
Long erpMaterialId = saleOrder . getMaterialId ( ) ;
MesMaterialBom queryMaterialBom = new MesMaterialBom ( ) ;
queryMaterialBom . setErpMaterialId ( erpMaterialId ) ;
queryMaterialBom . setActiveFlag ( MesConstants . MES_MATERIAL_BOM_ACTIVE_FLAG_NORMAL ) ;
queryMaterialBom . setParentId ( 0 L ) ;
List < MesMaterialBom > mesMaterialBoms = mesMaterialBomMapper . selectMesMaterialBomList ( queryMaterialBom ) ;
if ( mesMaterialBoms = = null | | mesMaterialBoms . isEmpty ( ) ) {
errorMsgBuilder . append ( "序号" ) . append ( mesSaleOrderRelate . getIndex ( ) ) . append ( ": 销售订单成品没有配置bom信息[成品编号:" )
. append ( mesSaleOrderRelate . getProductCode ( ) ) . append ( "成品名称:" ) . append ( mesSaleOrderRelate . getProductName ( ) )
. append ( "成品规格" ) . append ( mesSaleOrderRelate . getProductSpec ( ) ) ;
} else if ( mesMaterialBoms . size ( ) > 1 ) {
errorMsgBuilder . append ( "序号" ) . append ( mesSaleOrderRelate . getIndex ( ) ) . append ( ": 销售订单成品配置bom信息多余一条[成品编号:" )
. append ( mesSaleOrderRelate . getProductCode ( ) ) . append ( "成品名称:" ) . append ( mesSaleOrderRelate . getProductName ( ) )
. append ( "成品规格" ) . append ( mesSaleOrderRelate . getProductSpec ( ) ) ;
} else {
MesMaterialBom mesMaterialBom = mesMaterialBoms . get ( 0 ) ;
toUpdatedMaterialBoms . add ( mesMaterialBom ) ;
}
//更新采购订单和销售订单绑定信息的条码数量
dbOrderBind . setBarcodeAmount ( dbOrderBind . getBarcodeAmount ( ) . add ( availableAmount ) ) ;
dbOrderBind . setUpdateTime ( currentDate ) ;
dbOrderBind . setUpdateBy ( userName ) ;
mesOrderBindMapper . updateMesOrderBind ( dbOrderBind ) ;
// materialCodes.add(mesPurchaseOrderVo.getMaterialCode());
}
if ( errorMsgBuilder . length ( ) > 0 ) {
throw new ServiceException ( errorMsgBuilder . toString ( ) ) ;
}
//新建虚拟物料
String barcodeInfo = Seq . getId ( Seq . mesBarcodeSeqType , Seq . mesBarcodeCode ) ;
Long materialId = this . insertNewVirtualMaterial ( barcodeInfo , userName , currentDate ) ;
//创建虚拟销售订单,保存对应的销售订单列表
MesSaleOrder virtualSaleOrder = this . insertNewVirtualSaleOrder ( materialId , barcodeInfo , mesSaleOrderRelateList , userName , currentDate ) ;
//创建虚拟bom, 并合并销售订单的bom信息
this . insertVirtualMaterialBom ( materialId , barcodeInfo , toUpdatedMaterialBoms , userName , currentDate ) ;
//生成条码
String batchCode = Seq . getId ( Seq . mesBatchCodeSeqType , Seq . mesBatchCodeCode ) ;
mesBaseBarcodeInfo . setBatchFlag ( MesConstants . NOT_IS_BATCH ) ;
MesBaseBarcodeInfo toInsertedBarcodeInfo = getInsertedBarcodeInfo ( mesBaseBarcodeInfo , barcodeInfo , batchCode , userName , currentDate ) ;
toInsertedBarcodeInfo . setPurchaseOrderId ( - 1L ) ;
toInsertedBarcodeInfo . setMaterialId ( materialId ) ;
toInsertedBarcodeInfo . setSaleOrderId ( virtualSaleOrder . getSaleOrderId ( ) ) ;
toInsertedBarcodeInfo . setSaleorderCode ( virtualSaleOrder . getSaleorderCode ( ) ) ;
toInsertedBarcodeInfo . setSafeFlag ( MesConstants . MES_ORDER_BIND_SAFE_FLAG_NO ) ;
// toInsertedBarcodeInfo.setBarcodeSpec(materialCodes.toString());
mesBaseBarcodeInfoMapper . insertMesBaseBarcodeInfo ( toInsertedBarcodeInfo ) ;
//更新warehouse配置
WmsWarehouseMaterial warehouseMaterial = new WmsWarehouseMaterial ( ) ;
warehouseMaterial . setWarehouseId ( mesConfig . getFifthCabinetWarehouseId ( ) ) ;
warehouseMaterial . setWarehouseFloor ( 5 ) ;
warehouseMaterial . setStorageType ( WmsConstants . WMS_WAREHOUSE_MATERIAL_STORAGE_TYPE_MATERIAL ) ;
warehouseMaterial . setStorageId ( materialId ) ;
R < Boolean > isAllocateMaterial = remoteWmsService . allocateVirtualMaterial ( warehouseMaterial , SecurityConstants . INNER ) ;
if ( ! isAllocateMaterial . getData ( ) ) {
throw new RuntimeException ( "仓库配置物料失败,请重试或联系管理员" ) ;
}
return 1 ;
}
public long insertNewVirtualMaterial ( String barcodeInfo , String userName , Date currentDate ) {
//虚拟成品和虚拟原材料用一个物料
MesBaseMaterialInfo mesBaseMaterialInfo = new MesBaseMaterialInfo ( ) ;
mesBaseMaterialInfo . setMaterialCode ( barcodeInfo ) ;
mesBaseMaterialInfo . setMaterialName ( barcodeInfo ) ;
mesBaseMaterialInfo . setBatchFlag ( MesConstants . NOT_IS_BATCH ) ;
// mesBaseMaterialInfo.setMaterialCategories(MesConstants.MES_MATERIAL_CATEGORIES_RAW);
mesBaseMaterialInfo . setActiveFlag ( MesConstants . MES_MATERIAL_ALWAYS_FLAG_NO ) ;
mesBaseMaterialInfo . setMaterialClassfication ( MesConstants . MES_MATERIAL_CLASSFICATION_VIRTUAL ) ;
mesBaseMaterialInfo . setActiveFlag ( MesConstants . MES_MATERIAL_ACTIVE_FLAG_NORMAL ) ;
mesBaseMaterialInfo . setApplyFlag ( MesConstants . MES_MATERIAL_APPLY_FLAG_YES ) ;
mesBaseMaterialInfo . setCreateBy ( userName ) ;
mesBaseMaterialInfo . setCreateTime ( currentDate ) ;
mesBaseMaterialInfoMapper . insertMesBaseMaterialInfo ( mesBaseMaterialInfo ) ;
return mesBaseMaterialInfo . getMaterialId ( ) ;
}
public MesSaleOrder insertNewVirtualSaleOrder ( Long materialId , String barcodeInfo ,
List < MesSaleOrderRelate > mesSaleOrderRelates , String userName , Date currentDate ) {
// Optional<MesSaleOrderRelate> minMesSaleOrderRelate = mesSaleOrderRelates.stream()
// .filter(msor -> msor.getPlanDeliveryDate() != null)
// .min((obj1, obj2) -> obj1.getPlanDeliveryDate().compareTo(obj2.getPlanDeliveryDate()));
MesSaleOrder mesSaleOrder = new MesSaleOrder ( ) ;
mesSaleOrder . setMaterialId ( materialId ) ;
mesSaleOrder . setMaterialCode ( barcodeInfo ) ;
mesSaleOrder . setMaterialName ( barcodeInfo ) ;
mesSaleOrder . setOrderAmount ( BigDecimal . ONE ) ;
mesSaleOrder . setSaleorderCode ( Seq . getId ( Seq . mesVirtualSaleOrderSeqType , Seq . mesVirtualSaleOrderCode ) ) ;
mesSaleOrder . setIsRelease ( MesConstants . MES_SALE_ORDER_IS_RELEASE_TO_PUBLISH ) ;
// mesSaleOrder.setPlanDeliveryDate();
mesSaleOrder . setSaleOrderClassfication ( MesConstants . MES_SALE_ORDER_CLASSFICATION_VIRTUAL ) ;
mesSaleOrder . setCreateBy ( userName ) ;
mesSaleOrder . setCreateTime ( currentDate ) ;
mesSaleOrderMapper . insertMesSaleOrder ( mesSaleOrder ) ;
mesSaleOrderRelates . forEach ( msor - > {
msor . setSaleOrderId ( mesSaleOrder . getSaleOrderId ( ) ) ;
msor . setBarcodeInfo ( barcodeInfo ) ;
} ) ;
mesSaleOrderRelateMapper . batchMesSaleOrderRelate ( mesSaleOrderRelates ) ;
return mesSaleOrder ;
}
public void insertVirtualMaterialBom ( Long materialId , String barcodeInfo , List < MesMaterialBom > toUpdatedMaterialBoms , String userName , Date currentDate ) {
MesMaterialBom virtualMaterialBom = new MesMaterialBom ( ) ;
virtualMaterialBom . setMaterialBomDesc ( barcodeInfo ) ;
virtualMaterialBom . setParentId ( 0 L ) ;
virtualMaterialBom . setAncestors ( "0" ) ;
virtualMaterialBom . setMaterialClassfication ( MesConstants . MES_MATERIAL_CLASSFICATION_VIRTUAL ) ;
virtualMaterialBom . setErpMaterialId ( 0 L ) ;
virtualMaterialBom . setMaterialId ( materialId ) ;
virtualMaterialBom . setMaterialName ( barcodeInfo ) ;
virtualMaterialBom . setStandardAmount ( BigDecimal . ONE ) ;
virtualMaterialBom . setTopFlag ( MesConstants . MES_MATERIAL_BOM_TOP_FLAG_YES ) ;
virtualMaterialBom . setCheckType ( MesConstants . MES_MATERIAL_BOM_CHECK_TYPE_NO ) ;
virtualMaterialBom . setActiveFlag ( MesConstants . MES_MATERIAL_ACTIVE_FLAG_NORMAL ) ;
virtualMaterialBom . setCreateBy ( userName ) ;
virtualMaterialBom . setCreateTime ( currentDate ) ;
mesMaterialBomMapper . insertMesMaterialBom ( virtualMaterialBom ) ;
toUpdatedMaterialBoms . forEach ( umb - > {
umb . setParentId ( virtualMaterialBom . getMaterialBomId ( ) ) ;
umb . setAncestors ( umb . getAncestors ( ) + "," + umb . getParentId ( ) ) ;
umb . setTopFlag ( MesConstants . MES_MATERIAL_BOM_TOP_FLAG_NO ) ;
umb . setUpdateBy ( userName ) ;
umb . setUpdateTime ( currentDate ) ;
mesMaterialBomMapper . updateMesMaterialBom ( umb ) ;
} ) ;
}
// public MesPurchaseOrder insertVirtualPurchaseOrder(Long materialId, String barcodeInfo, BigDecimal sumOrderAmount,
// List<MesPurchaseOrderRelate> mesPurchaseOrderRelates,String userName, Date currentDate) {
// MesPurchaseOrder virtualPurchaseOrder = new MesPurchaseOrder();
// virtualPurchaseOrder.setMaterialId(materialId);
// virtualPurchaseOrder.setMaterialCode(barcodeInfo);
// virtualPurchaseOrder.setMaterialName(barcodeInfo);
// virtualPurchaseOrder.setOrderAmount(sumOrderAmount);
// virtualPurchaseOrder.setPoNo(Seq.getId(Seq.mesVirtualPurchaseOrderSeqType,Seq.mesVirtualPurchaseOrderCode));
// virtualPurchaseOrder.setIsFlag(MesConstants.MES_PURCHASE_ORDER_IS_FLAG_BIND_FINISHEED);
// virtualPurchaseOrder.setOrderStatus(MesConstants.MES_PURCHASE_ORDER_STATUS_TOPURCHASE);
// virtualPurchaseOrder.setPurchaseOrderClassfication(MesConstants.MES_PURCHASE_ORDER_CLASSFICATION_VIRTUAL);
//
// virtualPurchaseOrder.setCreateBy(userName);
// virtualPurchaseOrder.setCreateTime(currentDate);
//
//
// long purchaseOrderId = mesPurchaseOrderMapper.insertMesPurchaseOrder(virtualPurchaseOrder);
// virtualPurchaseOrder.setPurchaseOrderId(purchaseOrderId);
//
// mesPurchaseOrderRelates.forEach(mpor -> {
// mpor.setPurchaseOrderId(purchaseOrderId);
// });
//
// mesPurchaseOrderRelateMapper.batchMesPurchaseOrderRelate(mesPurchaseOrderRelates);
//
// return virtualPurchaseOrder;
//
// }
// @Transactional(rollbackFor = Exception.class)
// public void generateMergeRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
// Date currentDate = new Date();
// String userName = SecurityUtils.getUsername();
// List<MesPurchaseOrderVo> purchaseOrderVoList = mesBaseBarcodeInfo.getPurchaseOrderVoList();
//// MesPurchaseOrderVo firstPurchaseOrderVo = purchaseOrderVoList.get(0);
//
//// List<Map<String, MesOrderBind>> allMesOrderBindsMap = new ArrayList<>();
//
// List<String> materialCodes = new ArrayList<>();
// for (MesPurchaseOrderVo mesPurchaseOrderVo : purchaseOrderVoList) {
// Long purchaseOrderId = mesPurchaseOrderVo.getPurchaseOrderId();
//// MesOrderBind queryOrderBind = new MesOrderBind();
//// queryOrderBind.setPurchaseOrderId(purchaseOrderId);
//// List<MesOrderBind> mesOrderBinds = mesOrderBindMapper.selectMesOrderBindList(queryOrderBind);
//// if (mesOrderBinds == null || mesOrderBinds.isEmpty()) {
//// throw new ServiceException("请将选择的所有采购订单明细都绑定销售订单");
//// }
// //根据采购订单号来分组
//// Map<String, MesOrderBind> mesOrderBindsMap = mesOrderBinds.stream().filter(ob ->
//// ob.getBindAmount().compareTo(ob.getBarcodeAmount()) > 0)
//// .collect(Collectors.toMap(MesOrderBind::getPoNo, e -> e));
////
//// allMesOrderBindsMap.add(mesOrderBindsMap);
//
// Long erpMaterialId = mesPurchaseOrderVo.getMaterialId();
// materialCodes.add(mesPurchaseOrderVo.getMaterialCode());
//
// MesPurchaseOrder queryPurchaseOrder = new MesPurchaseOrder();
// queryPurchaseOrder.setPurchaseOrderId(purchaseOrderId);
// List<MesPurchaseOrder> dbPurchaseOrders = mesPurchaseOrderMapper.selectPurchaseOrderBindList(queryPurchaseOrder);
// MesPurchaseOrder dbPurchaseOrder = dbPurchaseOrders.get(0);
//
// MesPurchaseOrder mesPurchaseOrder = new MesPurchaseOrder();
// mesPurchaseOrder.setPurchaseOrderId(purchaseOrderId);
// mesPurchaseOrder.setOrderAmount(mesPurchaseOrderVo.getOrderAmount());
// mesPurchaseOrder.setOrderBindBarcodeAmount(mesPurchaseOrderVo.getOrderBindBarcodeAmount());
// mesPurchaseOrder.setSafeBindBarcodeAmount(mesPurchaseOrderVo.getSafeBindBarcodeAmount());
//
// if (!mesPurchaseOrder.equals(dbPurchaseOrder)) {
// throw new ServiceException("数据有变化,请重新更新");
// }
//
// }
//
// // 收集Map的key集合
//// List<Set<String>> allSaleOrderCodeSets = new ArrayList<>();
//// for (Map<String, MesOrderBind> allMesOrderBindMap : allMesOrderBindsMap) {
//// allSaleOrderCodeSets.add(allMesOrderBindMap.keySet());
//// }
//
// //取saleordercode的交集, saleordercode相同, 但是saleorderid可以不相同
//// Set<String> saleOrderCodeIntersection = allSaleOrderCodeSets.stream()
//// .reduce((set1, set2) -> {
//// set1.retainAll(set2); // 保留交集部分
//// return set1;
//// })
//// .orElse(Collections.emptySet()); // 如果没有交集,则返回一个空集合
////
//// if (saleOrderCodeIntersection.isEmpty()) {
//// throw new ServiceException("选择的采购订单信息没有绑定同一销售订单号");
//// }
//
//
// //更新绑定信息的条码数量
//// Long saleOrderId = saleOrderIdIntersection.stream().findFirst().get();
// String saleorderCode = "", safeFlag = "";
// for (Map<Long, MesOrderBind> allMesOrderBindMap : allMesOrderBindsMap) {
// MesOrderBind toUpdatedMesOrderBind = allMesOrderBindMap.get(saleOrderId);
// saleorderCode = toUpdatedMesOrderBind.getSaleOrderCode();
// safeFlag = toUpdatedMesOrderBind.getSafeFlag();
// toUpdatedMesOrderBind.setBarcodeAmount(toUpdatedMesOrderBind.getBarcodeAmount().add(BigDecimal.ONE));
// toUpdatedMesOrderBind.setUpdateBy(userName);
// toUpdatedMesOrderBind.setUpdateTime(currentDate);
// mesOrderBindMapper.updateMesOrderBind(toUpdatedMesOrderBind);
// }
//
// //新建物料
// String barcodeInfo = Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode);
// Long materialId = this.insertNewVirtualMaterial(barcodeInfo, userName, currentDate);
//
//
// //合并采购订单
//
//
// //生成条码
// String batchCode = Seq.getId(Seq.mesBatchCodeSeqType, Seq.mesBatchCodeCode);
// mesBaseBarcodeInfo.setBatchFlag(MesConstants.NOT_IS_BATCH);
// MesBaseBarcodeInfo toInsertedBarcodeInfo = getInsertedBarcodeInfo(mesBaseBarcodeInfo, barcodeInfo, batchCode, userName, currentDate);
//// toInsertedBarcodeInfo.setPurchaseOrderId();
//// toInsertedBarcodeInfo.setPoNo();
// toInsertedBarcodeInfo.setMaterialId(materialId);
// toInsertedBarcodeInfo.setSaleOrderId(saleOrderId);
// toInsertedBarcodeInfo.setSaleorderCode(saleorderCode);
// toInsertedBarcodeInfo.setSafeFlag(safeFlag);
// toInsertedBarcodeInfo.setBarcodeSpec(materialCodes.toString());
//
// mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(toInsertedBarcodeInfo);
//
// //更新warehouse配置
//
// }
// /**
// * 合并采购订单生成原材料条码
// * @param mesBaseBarcodeInfo 条码信息
// */
// @Override
// @Transactional(rollbackFor = Exception.class)
// public int generateMergeRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
// Date currentDate = new Date();
// String userName = SecurityUtils.getUsername();
// List<MesOrderBind> mesOrderBinds = mesBaseBarcodeInfo.getMesOrderBinds();
//
// List<String> materialCodes = new ArrayList<>();
// List<MesSaleOrderRelate> toInsertSaleOrderRelates = new ArrayList<>();
//
// for (MesOrderBind mesOrderBind : mesOrderBinds) {
// Long purchaseOrderId = mesPurchaseOrderVo.getPurchaseOrderId();
//
//// Long erpMaterialId = mesPurchaseOrderVo.getMaterialId();
// materialCodes.add(mesPurchaseOrderVo.getMaterialCode());
//
// MesPurchaseOrder queryPurchaseOrder = new MesPurchaseOrder();
// queryPurchaseOrder.setPurchaseOrderId(purchaseOrderId);
// List<MesPurchaseOrder> dbPurchaseOrders = mesPurchaseOrderMapper.selectPurchaseOrderBindList(queryPurchaseOrder);
// MesPurchaseOrder dbPurchaseOrder = dbPurchaseOrders.get(0);
// dbPurchaseOrder.setSafeBindBarcodeAmount("");
// MesPurchaseOrder mesPurchaseOrder = new MesPurchaseOrder();
// mesPurchaseOrder.setPurchaseOrderId(purchaseOrderId);
//
// mesPurchaseOrder.setOrderAmount(mesPurchaseOrderVo.getOrderAmount());
// mesPurchaseOrder.setOrderBindBarcodeAmount(mesPurchaseOrderVo.getOrderBindBarcodeAmount());
// mesPurchaseOrder.setSafeBindBarcodeAmount("");
//
// if (!mesPurchaseOrder.equals(dbPurchaseOrder)) {
// throw new ServiceException("数据有变化,请重新更新");
// }
//
// //只生成采购订单绑定销售订单的,安全库存的不绑定
// MesOrderBind queryOrderBind = new MesOrderBind();
// queryOrderBind.setPurchaseOrderId(purchaseOrderId);
// List<MesOrderBind> mesOrderBinds = mesOrderBindMapper.selectMesOrderBindList(queryOrderBind);
// if (mesOrderBinds == null || mesOrderBinds.isEmpty()) {
// throw new ServiceException("请将选择的所有采购订单明细都绑定销售订单");
// }
//
// mesOrderBinds.stream().filter(mob -> mob.getBindAmount().compareTo(mob.getBarcodeAmount()) > 0 && mob.getSaleOrderId() > 0)
// .forEach(filterMob -> {
// Long saleOrderId = filterMob.getSaleOrderId();
// MesSaleOrder saleOrder = mesSaleOrderMapper.selectMesSaleOrderBySaleOrderId(saleOrderId);
// BigDecimal saleOrderAmount = saleOrder.getOrderAmount();
// BigDecimal barcodeAmount = filterMob.getBindAmount().subtract(filterMob.getBarcodeAmount());
// if (saleOrderAmount.compareTo(barcodeAmount) < 0) {
// throw new ServiceException(String.format("销售订单数量[%s]小于可用采购绑定数量[%s],请通知管理员修改采购订单绑定销售订单信息", saleOrderAmount, barcodeAmount));
// }
//
//
// //校验对应的销售订单合并后的销售数量
//// MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate();
//// querySaleOrderRelate.setRelateSaleOrderId(saleOrderId);
//// List<MesSaleOrderRelate> mesSaleOrderRelates = mesSaleOrderRelateMapper.selectMesSaleOrderRelateList(querySaleOrderRelate);
//
// MesSaleOrderRelate mesSaleOrderRelate = new MesSaleOrderRelate();
// mesSaleOrderRelate.setRelateSaleOrderId(saleOrderId);
// mesSaleOrderRelate.setRelateSaleOrderAmout(barcodeAmount);
// mesSaleOrderRelate.setPurchaseOrderId(purchaseOrderId);
// mesSaleOrderRelate.setPlanDeliveryDate(saleOrder.getPlanDeliveryDate());
//
// toInsertSaleOrderRelates.add(mesSaleOrderRelate);
//
// filterMob.setBarcodeAmount(filterMob.getBindAmount());
// filterMob.setUpdateTime(currentDate);
// filterMob.setUpdateBy(userName);
//
// mesOrderBindMapper.updateMesOrderBind(filterMob);
// });
//
//
////
// }
//
//
// //新建虚拟物料
// String barcodeInfo = Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode);
// Long materialId = this.insertNewVirtualMaterial(barcodeInfo, userName, currentDate);
//
// //创建虚拟销售订单,保存对应的销售订单列表
// BigDecimal sumOrderAmount =
// toInsertSaleOrderRelates.stream()
// .map(MesSaleOrderRelate::getRelateSaleOrderAmout)
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// MesSaleOrder virtualSaleOrder = this.insertNewVirtualSaleOrder(materialId, barcodeInfo,sumOrderAmount, toInsertSaleOrderRelates, userName, currentDate);
//
//
// //生成条码
// String batchCode = Seq.getId(Seq.mesBatchCodeSeqType, Seq.mesBatchCodeCode);
// mesBaseBarcodeInfo.setBatchFlag(MesConstants.NOT_IS_BATCH);
// MesBaseBarcodeInfo toInsertedBarcodeInfo = getInsertedBarcodeInfo(mesBaseBarcodeInfo, barcodeInfo, batchCode, userName, currentDate);
// toInsertedBarcodeInfo.setPurchaseOrderId(0L);
// toInsertedBarcodeInfo.setMaterialId(materialId);
// toInsertedBarcodeInfo.setSaleOrderId(virtualSaleOrder.getSaleOrderId());
// toInsertedBarcodeInfo.setSaleorderCode(virtualSaleOrder.getSaleorderCode());
// toInsertedBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_NO);
// toInsertedBarcodeInfo.setBarcodeSpec(materialCodes.toString());
//
// mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(toInsertedBarcodeInfo);
//
// //更新warehouse配置
//
// return 1;
// }
}
}