@ -6,7 +6,6 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesNcProcessingDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingPartAndLotModel ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingViewModel ;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService ;
import cn.estsh.i3plus.platform.common.convert.ConvertBean ;
import cn.estsh.i3plus.platform.common.tool.TimeTool ;
@ -17,6 +16,9 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil ;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack ;
import cn.estsh.i3plus.pojo.mes.bean.* ;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection ;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail ;
import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask ;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel ;
import cn.estsh.i3plus.pojo.mes.repository.* ;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil ;
@ -29,7 +31,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils ;
import org.springframework.util.StringUtils ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import java.util.stream.Collectors ;
@ -74,40 +75,60 @@ public class MesNcProcessingService implements IMesNcProcessingService {
@Autowired
private MesProduceSnRepository produceSnRepository ;
/ * * *
* 查 询 产 品 条 码 或 零 件 号
* @param serialNumber
* @param partNo
* @param lot
* @param org
* @return
* /
@Autowired
private MesPartInspectionRepository partInspectionRepository ;
@Autowired
private MesPartInspectionDetailRepository partInspectionDetailRepository ;
@Autowired
private MesReworkTaskRepository reworkTaskRepository ;
@Override
public MesNcProcessingModel queryProduceSn ( String serialNumber , String partNo , String lot , String org ) {
public ListPager < MesPartInspection > queryPartInspectionByPager ( MesPartInspection partInspection , Pager pager ) {
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( partInspection . getOrganizeCode ( ) ) ;
DdlPreparedPack . getStringEqualPack ( partInspection . getSn ( ) , "sn" , packBean ) ;
DdlPreparedPack . getStringEqualPack ( partInspection . getPartNo ( ) , "partNo" , packBean ) ;
DdlPreparedPack . getStringLikerPack ( partInspection . getPartName ( ) , "partName" , packBean ) ;
DdlPreparedPack . getStringEqualPack ( partInspection . getLot ( ) , "lot" , packBean ) ;
DdlPreparedPack . getNumEqualPack ( partInspection . getQty ( ) , "qty" , packBean ) ;
DdlPreparedPack . getNumEqualPack ( MesExtEnumUtil . PART_INSPECTION_STATUS . FAIL . getValue ( ) , "inspectionStatus" , packBean ) ;
DdlPreparedPack . getOrderByPack ( new Object [ ] { CommonEnumUtil . ASC_OR_DESC . DESC . getValue ( ) } , new String [ ] { "createDatetime" } , packBean ) ;
pager = PagerHelper . getPager ( pager , partInspectionRepository . findByHqlWhereCount ( packBean ) ) ;
List < MesPartInspection > resultList = partInspectionRepository . findByHqlWherePage ( packBean , pager ) ;
if ( ! StringUtils . isEmpty ( serialNumber ) ) {
//检查不良条码
List < MesDefectRecord > defectRecordList = queryDefectRecordBySerialNumber ( serialNumber , org ) ;
return new ListPager < > ( resultList , pager ) ;
}
//检查物料
MesPart part = checkPart ( defectRecordList , org ) ;
@Override
public MesNcProcessingModel queryPartInspection ( MesPartInspection partInspection ) {
//构造返回结果
MesNcProcessingModel model = getModel ( part , defectRecordList , org ) ;
return model ;
} else {
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( partInspection . getOrganizeCode ( ) ) ;
DdlPreparedPack . getNumEqualPack ( partInspection . getId ( ) , "pid" , packBean ) ;
List < MesPartInspectionDetail > detailList = partInspectionDetailRepository . findByHqlWhere ( packBean ) ;
//检查不良条码
List < MesDefectRecord > defectRecordList = queryDefectRecordByPartAndLot ( partNo , lot , org ) ;
//检查物料
MesPart part = null ;
if ( partInspection . getSourceType ( ) = = MesExtEnumUtil . PART_INSPECTION_SOURCE_TYPE . SINGLE . getValue ( ) ) {
//检查条码
MesProduceSn produceSn = checkProduceSn ( partInspection . getSn ( ) , partInspection . getOrganizeCode ( ) ) ;
//检查物料
MesPart part = checkPartByPartNo ( partNo , org ) ;
part = checkPart ( p roduceSn , partInspecti on. getO rganizeCode( ) ) ;
//构造返回结果
MesNcProcessingModel model = getModel ( part , defectRecordList , org ) ;
return model ;
} else {
//检查物料
part = checkPartByPartNo ( partInspection . getPartNo ( ) , partInspection . getOrganizeCode ( ) ) ;
}
//构造返回结果
MesNcProcessingModel model = getModel ( part , detailList , partInspection . getOrganizeCode ( ) ) ;
return model ;
}
@Override
@ -123,58 +144,52 @@ public class MesNcProcessingService implements IMesNcProcessingService {
@Override
public void saveNc ( MesNcProcessingInputModel model , String org ) {
if ( ! StringUtils . isEmpty ( model . getSerialNumber ( ) ) ) {
String serialNumber = model . get SerialNumber ( ) ;
if ( model . getPartInspection ( ) . getSourceType ( ) = = MesExtEnumUtil . PART_INSPECTION_SOURCE_TYPE . SINGLE . getValue ( ) ) {
String serialNumber = model . get PartInspection( ) . getSn ( ) ;
Integer type = model . getType ( ) ;
Integer person = model . getPerson ( ) ;
//检查不良条码
List < MesDefectRecord > defectRecordList = queryDefectRecordBySerialNumber ( serialNumber , org ) ;
//检查物料
MesPart part = checkPartByPartNo ( defectRecordList. get ( 0 ) . getPartNo ( ) , org ) ;
MesPart part = checkPartByPartNo ( model . getPartInspection ( ) . getPartNo ( ) , org ) ;
//保存数据
saveDate ( part, defectRecordLis t, type , person , org ) ;
saveDate ( model, par t, type , person , org ) ;
} else {
String partNo = model . getPart No( ) ;
String lot = model . get Lot( ) ;
String partNo = model . getPart Inspection( ) . getPart No( ) ;
String lot = model . get PartInspection( ) . get Lot( ) ;
Integer type = model . getType ( ) ;
Integer person = model . getPerson ( ) ;
//检查不良条码
List < MesDefectRecord > defectRecordList = queryDefectRecordByPartAndLot ( partNo , lot , org ) ;
//检查物料
MesPart part = checkPartByPartNo ( partNo , org ) ;
//保存数据
saveDate ( part, defectRecordLis t, type , person , org ) ;
saveDate ( model, par t, type , person , org ) ;
}
}
/ * *
* 检 查 物 料
*
* @param defectRecordList
* @param produceSn
* @param org
* @return
* /
private MesPart checkPart ( List< MesDefectRecord > defectRecordList , String org ) {
private MesPart checkPart ( MesProduceSn produceSn , String org ) {
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( org ) ;
DdlPreparedPack . getStringEqualPack ( defectRecordList. get ( 0 ) . getPartNo ( ) , "partNo" , packBean ) ;
DdlPreparedPack . getStringEqualPack ( produceSn . getPartNo ( ) , "partNo" , packBean ) ;
MesPart part = partRepository . getByProperty ( packBean ) ;
//若不存在则提示物料信息不存在
if ( StringUtils . isEmpty ( part ) ) {
throw new ImppBusiException ( String . format ( "【%s】此条码对应【%s】物料号不存在, 请检查数据" , defectRecordList. get ( 0 ) . getSerialNumber ( ) , defectRecordList . get ( 0 ) . getPartNo ( ) ) ) ;
throw new ImppBusiException ( String . format ( "【%s】此条码对应【%s】物料号不存在, 请检查数据" , produceSn. getProductSn ( ) , produceSn . getPartNo ( ) ) ) ;
}
//根据条码查询零件类型( partType)
if ( StringUtils . isEmpty ( part . getPartTypeCode ( ) ) ) {
throw new ImppBusiException ( String . format ( "【%s】此条码对应【%s】物料号未维护零件类型, 请检查数据" , defectRecordList. get ( 0 ) . getSerialNumber ( ) , defectRecordList . get ( 0 ) . getPartNo ( ) ) ) ;
throw new ImppBusiException ( String . format ( "【%s】此条码对应【%s】物料号未维护零件类型, 请检查数据" , produceSn. getProductSn ( ) , produceSn . getPartNo ( ) ) ) ;
}
@ -301,11 +316,11 @@ public class MesNcProcessingService implements IMesNcProcessingService {
* 构 造 返 回 数 据
*
* @param part
* @param de fectRecord List
* @param de tail List
* @param org
* @return
* /
private MesNcProcessingModel getModel ( MesPart part , List < Mes DefectRecord> defectRecord List, String org ) {
private MesNcProcessingModel getModel ( MesPart part , List < Mes PartInspectionDetail> detail List, String org ) {
//todo 图片暂时放空
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture ( part , org ) ;
@ -313,10 +328,10 @@ public class MesNcProcessingService implements IMesNcProcessingService {
//位置
List < MesLocationConfig > locationConfigList = checkLocationConfig ( org ) ;
Map < String , List < Mes DefectRecord> > defectRecordMap = defectRecord List. stream ( ) . collect ( Collectors . groupingBy ( k - > k . getDefectLocation ( ) ) ) ;
Map < String , List < Mes PartInspectionDetail> > defectRecordMap = detail List. stream ( ) . collect ( Collectors . groupingBy ( k - > k . getDefectLocation ( ) ) ) ;
Map < String , List < MesDefectRecord > > defectMap = defectRecordList . stream ( ) . collect ( Collectors . groupingBy ( k - > k . getDefectTypeCode ( ) ) ) ;
// Map<String, List<MesPartInspectionDetail>> defectMap = detailList.stream().collect(Collectors.groupingBy(k -> k.getDefectTypeCode()));
//位置是否标黄Map,key: 位置, value: 标黄标识
locationConfigList . forEach ( k - > {
@ -325,17 +340,17 @@ public class MesNcProcessingService implements IMesNcProcessingService {
}
} ) ;
List < MesNcProcessingViewModel > defectModelList = new ArrayList < > ( ) ;
defectMap . forEach ( ( k , v ) - > {
MesNcProcessingViewModel model = new MesNcProcessingViewModel ( ) ;
model . setDefectTypeCode ( k ) ;
model . setQty ( v . size ( ) ) ;
model . setDefectTypeName ( v . get ( 0 ) . getDefectTypeName ( ) ) ;
defectModelList . add ( model ) ;
} ) ;
// List<MesNcProcessingViewModel> defectModelList = new ArrayList<>();
// defectMap.forEach((k, v) -> {
// MesNcProcessingViewModel model = new MesNcProcessingViewModel();
// model.setDefectTypeCode(k);
// model.setQty(v.size());
// model.setDefectTypeName(v.get(0).getDefectTypeName());
// defectModelList.add(model);
// });
MesNcProcessingModel model = new MesNcProcessingModel ( ) ;
model . setDe fectModelList( defectMode lList) ;
model . setDe tailList( detai lList) ;
model . setPartTypePicture ( partTypePicture ) ;
model . setLocationConfigList ( locationConfigList ) ;
return model ;
@ -345,37 +360,130 @@ public class MesNcProcessingService implements IMesNcProcessingService {
* 保 存 数 据
*
* @param part
* @param defectRecordList
* @param model
* @param type
* @param person
* @param org
* /
private void saveDate ( MesPart part , List < MesDefectRecord > defectRecordList , Integer type , Integer person , String org ) {
GenSerialNoModel serialNoModel = new GenSerialNoModel ( "NC_DEFECT_ZRSUM" ) ;
serialNoModel . setPartNo ( part . getPartNo ( ) ) ;
ResultBean rb = syncFuncService . syncSerialNo ( serialNoModel , AuthUtil . getSessionUser ( ) . getUserName ( ) , org , 1 ) ;
String zrsum = "" ;
if ( null ! = rb & & ! CollectionUtils . isEmpty ( rb . getResultList ( ) ) ) {
zrsum = ( rb . getResultList ( ) . get ( 0 ) ) . toString ( ) ;
}
private void saveDate ( MesNcProcessingInputModel model , MesPart part , Integer type , Integer person , String org ) {
if ( type = = MesExtEnumUtil . NC_TYPE . NORMAL . getValue ( ) ) {
MesProduceSn sn = checkProduceSn ( model . getSn ( ) , org ) ;
sn . setQcStatus ( MesExtEnumUtil . PRODUCE_QC_STATUS . QUALIFIED . getValue ( ) ) ;
ConvertBean . serviceModelUpdate ( sn , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
produceSnRepository . save ( sn ) ;
model . getPartInspection ( ) . setInspectionStatus ( MesExtEnumUtil . PART_INSPECTION_STATUS . QUALIFIED . getValue ( ) ) ;
model . getPartInspection ( ) . setNcStatus ( MesExtEnumUtil . PART_INSPECTION_NC_STATUS . NORMAL . getValue ( ) ) ;
ConvertBean . serviceModelUpdate ( sn , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
partInspectionRepository . save ( model . getPartInspection ( ) ) ;
GenSerialNoModel serialNoModel = new GenSerialNoModel ( "NC_DEFECT_ZRSUM" ) ;
serialNoModel . setPartNo ( part . getPartNo ( ) ) ;
ResultBean rb = syncFuncService . syncSerialNo ( serialNoModel , AuthUtil . getSessionUser ( ) . getUserName ( ) , org , 1 ) ;
String zrsum = "" ;
if ( null ! = rb & & ! CollectionUtils . isEmpty ( rb . getResultList ( ) ) ) {
zrsum = ( rb . getResultList ( ) . get ( 0 ) ) . toString ( ) ;
}
MesMove move = new MesMove ( ) ;
move . setMatnr ( part . getPartNo ( ) ) ;
move . setOrganizeCode ( org ) ;
move . setFactoryCode ( org ) ;
move . setLgort ( configService . getCfgValue ( org , "UMLGO" ) ) ;
move . setUmlgo ( configService . getCfgValue ( org , "LGORT" ) ) ;
move . setMenge ( model . getPartInspection ( ) . getQty ( ) . intValue ( ) ) ;
move . setMeins ( part . getUnit ( ) ) ;
move . setZrsum ( zrsum ) ;
move . setPostDate ( TimeTool . getToday ( ) ) ;
move . setPostTime ( TimeTool . getTimeShortWithColon ( ) ) ;
ConvertBean . serviceModelInitialize ( move , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
moveRepository . save ( move ) ;
} else if ( type = = MesExtEnumUtil . NC_TYPE . REWORK . getValue ( ) ) {
GenSerialNoModel serialNoModel1 = new GenSerialNoModel ( "NC_REWORK" ) ;
serialNoModel1 . setPartNo ( part . getPartNo ( ) ) ;
ResultBean rb1 = syncFuncService . syncSerialNo ( serialNoModel1 , AuthUtil . getSessionUser ( ) . getUserName ( ) , org , 1 ) ;
String rework = "" ;
if ( null ! = rb1 & & ! CollectionUtils . isEmpty ( rb1 . getResultList ( ) ) ) {
rework = ( rb1 . getResultList ( ) . get ( 0 ) ) . toString ( ) ;
}
if ( type = = MesExtEnumUtil . NC_TYPE . NORMAL . getValue ( ) | | type = = MesExtEnumUtil . NC_TYPE . RELEASE . getValue ( ) ) {
MesReworkTask reworkTask = new MesReworkTask ( ) ;
reworkTask . setReworkedQty ( model . getPartInspection ( ) . getQty ( ) ) ;
reworkTask . setSn ( model . getPartInspection ( ) . getSn ( ) ) ;
reworkTask . setReworkOrder ( rework ) ;
reworkTask . setPartNo ( model . getPartInspection ( ) . getPartNo ( ) ) ;
reworkTask . setPartInspectionId ( model . getPartInspection ( ) . getId ( ) ) ;
reworkTask . setOrganizeCode ( org ) ;
reworkTask . setType ( model . getPartInspection ( ) . getSourceType ( ) ) ;
ConvertBean . serviceModelInitialize ( reworkTask , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
reworkTaskRepository . save ( reworkTask ) ;
model . getPartInspection ( ) . setNcStatus ( MesExtEnumUtil . PART_INSPECTION_NC_STATUS . REWORK . getValue ( ) ) ;
model . getPartInspection ( ) . setDefectTypeId ( reworkTask . getId ( ) ) ;
partInspectionRepository . save ( model . getPartInspection ( ) ) ;
} else if ( type = = MesExtEnumUtil . NC_TYPE . SCRAP . getValue ( ) ) {
MesProduceSn sn = checkProduceSn ( model . getSn ( ) , org ) ;
sn . setQcStatus ( MesExtEnumUtil . PRODUCE_QC_STATUS . SCRAP . getValue ( ) ) ;
ConvertBean . serviceModelUpdate ( sn , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
produceSnRepository . save ( sn ) ;
String serialNumber = defectRecordList . get ( 0 ) . getSerialNumber ( ) ;
model . getPartInspection ( ) . setNcStatus ( MesExtEnumUtil . PART_INSPECTION_NC_STATUS . SCRAP . getValue ( ) ) ;
model . getPartInspection ( ) . setRejectQty ( model . getPartInspection ( ) . getQty ( ) ) ;
ConvertBean . serviceModelUpdate ( sn , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
partInspectionRepository . save ( model . getPartInspection ( ) ) ;
GenSerialNoModel serialNoModel = new GenSerialNoModel ( "NC_DEFECT_ZRSUM" ) ;
serialNoModel . setPartNo ( part . getPartNo ( ) ) ;
ResultBean rb = syncFuncService . syncSerialNo ( serialNoModel , AuthUtil . getSessionUser ( ) . getUserName ( ) , org , 1 ) ;
String zrsum = "" ;
if ( null ! = rb & & ! CollectionUtils . isEmpty ( rb . getResultList ( ) ) ) {
zrsum = ( rb . getResultList ( ) . get ( 0 ) ) . toString ( ) ;
}
MesProduceSn sn = checkProduceSn ( serialNumber , org ) ;
MesMove move = new MesMove ( ) ;
move . setMatnr ( part . getPartNo ( ) ) ;
move . setOrganizeCode ( org ) ;
move . setFactoryCode ( org ) ;
move . setLgort ( configService . getCfgValue ( org , "UMLGO" ) ) ;
move . setUmlgo ( configService . getCfgValue ( org , "LGORT" ) ) ;
move . setMenge ( model . getPartInspection ( ) . getQty ( ) . intValue ( ) ) ;
move . setMeins ( part . getUnit ( ) ) ;
move . setZrsum ( zrsum ) ;
move . setPostDate ( TimeTool . getToday ( ) ) ;
move . setPostTime ( TimeTool . getTimeShortWithColon ( ) ) ;
ConvertBean . serviceModelInitialize ( move , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
moveRepository . save ( move ) ;
} else if ( type = = MesExtEnumUtil . NC_TYPE . RELEASE . getValue ( ) ) {
MesProduceSn sn = checkProduceSn ( model . getSn ( ) , org ) ;
sn . setQcStatus ( MesExtEnumUtil . PRODUCE_QC_STATUS . QUALIFIED . getValue ( ) ) ;
sn . setSnStatus ( MesExtEnumUtil . PRODUCE_SN_STATUS . OFFLINE . getValue ( ) ) ;
ConvertBean . serviceModelUpdate ( sn , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
produceSnRepository . save ( sn ) ;
model . getPartInspection ( ) . setInspectionStatus ( MesExtEnumUtil . PART_INSPECTION_STATUS . QUALIFIED . getValue ( ) ) ;
model . getPartInspection ( ) . setNcStatus ( MesExtEnumUtil . PART_INSPECTION_NC_STATUS . RELEASE . getValue ( ) ) ;
ConvertBean . serviceModelUpdate ( sn , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
partInspectionRepository . save ( model . getPartInspection ( ) ) ;
GenSerialNoModel serialNoModel = new GenSerialNoModel ( "NC_DEFECT_ZRSUM" ) ;
serialNoModel . setPartNo ( part . getPartNo ( ) ) ;
ResultBean rb = syncFuncService . syncSerialNo ( serialNoModel , AuthUtil . getSessionUser ( ) . getUserName ( ) , org , 1 ) ;
String zrsum = "" ;
if ( null ! = rb & & ! CollectionUtils . isEmpty ( rb . getResultList ( ) ) ) {
zrsum = ( rb . getResultList ( ) . get ( 0 ) ) . toString ( ) ;
}
MesMove move = new MesMove ( ) ;
move . setMatnr ( part . getPartNo ( ) ) ;
move . setOrganizeCode ( org ) ;
move . setFactoryCode ( org ) ;
move . setLgort ( configService . getCfgValue ( org , "UMLGO" ) ) ;
move . setUmlgo ( configService . getCfgValue ( org , "LGORT" ) ) ;
move . setMenge ( defectRecordList . get ( 0 ) . getQty ( ) . intValue ( ) ) ;
move . setMenge ( model. getPartInspection ( ) . getQty ( ) . intValue ( ) ) ;
move . setMeins ( part . getUnit ( ) ) ;
move . setZrsum ( zrsum ) ;
move . setPostDate ( TimeTool . getToday ( ) ) ;
@ -384,13 +492,6 @@ public class MesNcProcessingService implements IMesNcProcessingService {
moveRepository . save ( move ) ;
}
defectRecordList . forEach ( k - > {
k . setNcType ( type ) ;
k . setPerson ( person ) ;
ConvertBean . serviceModelUpdate ( k , AuthUtil . getSessionUser ( ) . getUserName ( ) ) ;
} ) ;
defectRecordRepository . saveAll ( defectRecordList ) ;
}
private MesProduceSn checkProduceSn ( String serialNumber , String org ) {