@ -6,29 +6,29 @@ import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailD
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException ;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException ;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel ;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel ;
import cn.estsh.i3plus.platform.common.convert.ConvertBean ;
import cn.estsh.i3plus.platform.common.convert.ConvertBean ;
import cn.estsh.i3plus.platform.common.tool.TimeTool ;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean ;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean ;
import cn.estsh.i3plus.pojo.base.bean.ListPager ;
import cn.estsh.i3plus.pojo.base.bean.ListPager ;
import cn.estsh.i3plus.pojo.base.common.Pager ;
import cn.estsh.i3plus.pojo.base.common.Pager ;
import cn.estsh.i3plus.pojo.base.common.PagerHelper ;
import cn.estsh.i3plus.pojo.base.common.PagerHelper ;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil ;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil ;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack ;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack ;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail ;
import cn.estsh.i3plus.pojo.mes.bean.* ;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement ;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail ;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository ;
import cn.estsh.i3plus.pojo.mes.repository.* ;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository ;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil ;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil ;
import cn.estsh.impp.framework.boot.auth.AuthUtil ;
import cn.estsh.impp.framework.boot.util.ResultBean ;
import lombok.extern.slf4j.Slf4j ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.beans.BeanUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import org.springframework.stereotype.Service ;
import org.springframework.util.CollectionUtils ;
import org.springframework.util.CollectionUtils ;
import org.springframework.util.StringUtils ;
import org.springframework.util.StringUtils ;
import java.util.ArrayList ;
import java.util.* ;
import java.util.List ;
import java.util.function.Function ;
import java.util.Map ;
import java.util.Objects ;
import java.util.stream.Collectors ;
import java.util.stream.Collectors ;
@Service
@Service
@ -42,10 +42,27 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
private MesShippingOrderManagementDetailRepository shippingOrderDetailRepository ;
private MesShippingOrderManagementDetailRepository shippingOrderDetailRepository ;
@Autowired
@Autowired
private MesShippingOrderManagementRepository shippingOrderRepository ;
@Autowired
private IMesProduceSnService mesProduceSnService ;
private IMesProduceSnService mesProduceSnService ;
@Autowired
@Autowired
private MesProduceSnRepository mesProduceSnRepository ;
private MesProduceSnRepository mesProduceSnRepository ;
@Autowired
private MesCustomerPartRepository mesCustomerPartRepository ;
@Autowired
private IMesMoveRuleRepository mesMoveRuleRepository ;
@Autowired
private MesCimGmCbrRuleRepository mesCimGmCbrRuleRepository ;
@Autowired
private MesWorkOrderPartRepository mesWorkOrderPartRepository ;
@Autowired
private MesJisShippingRepository jisShippingRepository ;
protected void setPackQueryBean ( MesShippingOrderManagementDetail bean , DdlPackBean packBean ) {
protected void setPackQueryBean ( MesShippingOrderManagementDetail bean , DdlPackBean packBean ) {
DdlPreparedPack . getNumEqualPack ( bean . getPid ( ) , "pid" , packBean ) ;
DdlPreparedPack . getNumEqualPack ( bean . getPid ( ) , "pid" , packBean ) ;
@ -71,6 +88,174 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
}
}
@Override
@Override
public ListPager < MesShippingOrderManagementDetailModel > queryMesShippingErrorDetailsByPager ( MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel , Pager pager ) {
mesShippingOrderManagementDetailModel . setStatus ( MesExtEnumUtil . SHIPPING_ORDER_DETAIL_SHIPPING_STATUS . SKIP . getValue ( ) ) ;
return shippingOrderManagementDetailDao . queryMesShippingDetailsByPager ( mesShippingOrderManagementDetailModel , pager ) ;
}
@Override
public ResultBean supplyBycustPartNo ( Long [ ] ids ) {
String organizeCode = AuthUtil . getOrganizeCode ( ) ;
String userName = AuthUtil . getSessionUser ( ) . getUserName ( ) ;
/ * String organizeCode = "CR01" ;
String userName = "zxw" ; * /
List < MesShippingOrderManagementDetail > detailList = getManagementDetails ( ids , organizeCode , userName ) ;
for ( MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList ) {
DdlPackBean ddlPackBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
DdlPreparedPack . getStringEqualPack ( mesShippingOrderManagementDetail . getCustPartNo ( ) , "custPartNo" , ddlPackBean ) ;
MesCustomerPart mesCustomerPart = mesCustomerPartRepository . getByProperty ( ddlPackBean ) ;
if ( mesCustomerPart = = null ) {
log . info ( "客户零件号不存在:{}" , mesShippingOrderManagementDetail . getCustPartNo ( ) ) ;
return ResultBean . fail ( String . format ( "客户零件号不存在:%s" , mesShippingOrderManagementDetail . getCustPartNo ( ) ) ) ;
}
mesShippingOrderManagementDetail . setPartNo ( mesCustomerPart . getErpPartNo ( ) ) ;
mesShippingOrderManagementDetail . setPartName ( mesCustomerPart . getErpPartName ( ) ) ;
}
shippingOrderDetailRepository . saveAll ( detailList ) ;
return ResultBean . success ( ) . setResultList ( detailList ) ;
}
@Override
public ResultBean supplyByCBR ( Long [ ] ids ) {
/ * String organizeCode = AuthUtil . getOrganizeCode ( ) ;
String userName = AuthUtil . getSessionUser ( ) . getUserName ( ) ; * /
String organizeCode = "CR01" ;
String userName = "zxw" ;
List < MesShippingOrderManagementDetail > detailList = getManagementDetails ( ids , organizeCode , userName ) ;
for ( MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList ) {
DdlPackBean ddlPackBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
DdlPreparedPack . getStringEqualPack ( mesShippingOrderManagementDetail . getCustPartNo ( ) , "custPartNo" , ddlPackBean ) ;
MesCimGmCbrRule mesCimGmCbrRule = mesCimGmCbrRuleRepository . getByProperty ( ddlPackBean ) ;
if ( mesCimGmCbrRule = = null ) {
log . info ( "CBR规则未配置: 客户零件号:{}" , mesShippingOrderManagementDetail . getCustPartNo ( ) ) ;
return ResultBean . fail ( String . format ( "CBR规则未配置:客户零件号:%s" , mesShippingOrderManagementDetail . getCustPartNo ( ) ) ) ;
}
mesShippingOrderManagementDetail . setPartNo ( mesCimGmCbrRule . getErpPartNo ( ) ) ;
mesShippingOrderManagementDetail . setPartName ( mesCimGmCbrRule . getErpPartName ( ) ) ;
}
shippingOrderDetailRepository . saveAll ( detailList ) ;
return ResultBean . success ( ) . setResultList ( detailList ) ;
}
@Override
public ResultBean updateQty ( Long [ ] ids ) {
String organizeCode = AuthUtil . getOrganizeCode ( ) ;
String userName = AuthUtil . getSessionUser ( ) . getUserName ( ) ;
/ * String organizeCode = "CR01" ;
String userName = "zxw" ; * /
List < MesShippingOrderManagementDetail > detailList = getManagementDetails ( ids , organizeCode , userName ) ;
for ( MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList ) {
if ( StringUtils . isEmpty ( mesShippingOrderManagementDetail . getPartNo ( ) ) ) {
log . info ( "发运单明细对应零件号为空" ) ;
return ResultBean . fail ( String . format ( "发运单明细对应零件号为空" ) ) ;
}
mesShippingOrderManagementDetail . setActualQty ( ( int ) mesShippingOrderManagementDetail . getPlanQty ( ) ) ;
ConvertBean . serviceModelUpdate ( mesShippingOrderManagementDetail , userName ) ; }
if ( ! CollectionUtils . isEmpty ( detailList ) ) {
shippingOrderDetailRepository . saveAll ( detailList ) ;
}
return ResultBean . success ( "操作成功" ) ;
}
@Override
public ResultBean syncShip ( Long [ ] ids ) {
String organizeCode = AuthUtil . getOrganizeCode ( ) ;
String userName = AuthUtil . getSessionUser ( ) . getUserName ( ) ;
/ * String organizeCode = "CR01" ;
String userName = "zxw" ; * /
List < MesShippingOrderManagementDetail > detailList = getManagementDetails ( ids , organizeCode , userName ) ;
List < Long > idList = detailList . stream ( ) . map ( MesShippingOrderManagementDetail : : getPid ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
DdlPackBean orderPackBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
DdlPreparedPack . getInPackList ( idList , "id" , orderPackBean ) ;
List < MesShippingOrderManagement > shippingOrderManagements = shippingOrderRepository . findByHqlWhere ( orderPackBean ) ;
Map < Long , MesShippingOrderManagement > orderMap = shippingOrderManagements . stream ( ) . collect ( Collectors . toMap ( MesShippingOrderManagement : : getId , Function . identity ( ) ) ) ;
List < MesJisShipping > mesJisShippings = new ArrayList < > ( ) ;
for ( MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList ) {
MesShippingOrderManagement mesShippingOrderManagement = orderMap . get ( mesShippingOrderManagementDetail . getPid ( ) ) ;
if ( StringUtils . isEmpty ( mesShippingOrderManagementDetail . getPartNo ( ) ) ) {
log . info ( "发运单明细对应零件号为空" ) ;
return ResultBean . fail ( String . format ( "发运单明细对应零件号为空" ) ) ;
}
if ( ( int ) mesShippingOrderManagementDetail . getPlanQty ( ) ! = mesShippingOrderManagementDetail . getActualQty ( ) ) {
log . info ( "计划数量和实际数量不相等" ) ;
return ResultBean . fail ( String . format ( "计划数量和实际数量不相等" ) ) ;
}
mesShippingOrderManagementDetail . setStatus ( MesExtEnumUtil . SHIPPING_ORDER_DETAIL_SHIPPING_STATUS . SHIPPINGED . getValue ( ) ) ;
mesShippingOrderManagementDetail . setRemark ( "手工发运" ) ;
ConvertBean . serviceModelUpdate ( mesShippingOrderManagementDetail , userName ) ;
DdlPackBean ddlPackBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
DdlPreparedPack . getNumEqualPack ( MesExtEnumUtil . MOVE_RULE_GROUP_TYPE . MOVE_RULE_GROUP_TYPE_10 . getValue ( ) , "groupType" , ddlPackBean ) ;
DdlPreparedPack . getStringEqualPack ( mesShippingOrderManagement . getShippingGroupCode ( ) , "code" , ddlPackBean ) ;
MesMoveRule moveRule = mesMoveRuleRepository . getByProperty ( ddlPackBean ) ;
if ( moveRule = = null ) {
log . info ( "移库规则不存在:发运组代码:{}" , mesShippingOrderManagement . getShippingGroupCode ( ) ) ;
return ResultBean . fail ( String . format ( "移库规则不存在:发运单编号:%s,发运组代码:%s," , mesShippingOrderManagement . getShippingCode ( ) , mesShippingOrderManagement . getShippingGroupCode ( ) ) ) ;
}
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
DdlPreparedPack . getStringEqualPack ( mesShippingOrderManagementDetail . getVisualOrderNo ( ) , "workOrderNo" , packBean ) ;
MesWorkOrderPart workOrderPart = mesWorkOrderPartRepository . getByProperty ( packBean ) ;
if ( workOrderPart = = null ) {
log . info ( "工单零件信息不存在:工单号:{}" , mesShippingOrderManagementDetail . getVisualOrderNo ( ) ) ;
return ResultBean . fail ( String . format ( "工单零件信息不存在:工单号:%s" , mesShippingOrderManagementDetail . getVisualOrderNo ( ) ) ) ;
}
mesJisShippings . add ( getMesJisShipping ( mesShippingOrderManagement , mesShippingOrderManagementDetail , moveRule . getErpSrcLocateNo ( ) , workOrderPart , userName ) ) ;
}
if ( ! CollectionUtils . isEmpty ( detailList ) ) {
shippingOrderDetailRepository . saveAll ( detailList ) ;
}
// jis同步
if ( ! CollectionUtils . isEmpty ( mesJisShippings ) ) {
jisShippingRepository . saveAll ( mesJisShippings ) ;
}
return ResultBean . success ( "操作成功" ) ;
}
public MesJisShipping getMesJisShipping ( MesShippingOrderManagement orderManagement , MesShippingOrderManagementDetail detail , String srcLocateNo , MesWorkOrderPart orderPart , String userName ) {
MesJisShipping jisShipping = new MesJisShipping ( ) ;
BeanUtils . copyProperties ( orderManagement , jisShipping ) ;
BeanUtils . copyProperties ( detail , jisShipping ) ;
jisShipping . setFactoryCode ( orderManagement . getCustOrganizeCode ( ) ) ;
jisShipping . setShippingTime ( TimeTool . getNowTime ( true ) ) ;
jisShipping . setErpWarerhouse ( srcLocateNo ) ;
jisShipping . setErpWarehous ( srcLocateNo ) ;
jisShipping . setDock ( orderManagement . getSendDockCode ( ) ) ;
jisShipping . setCusCode ( orderManagement . getCustCode ( ) ) ;
jisShipping . setCusDock ( orderManagement . getCustDockCode ( ) ) ;
jisShipping . setCustOrderNo ( detail . getCustOrderNo ( ) ) ;
// 子零件信息赋值
jisShipping . setPartNo ( orderPart . getPartNo ( ) ) ;
jisShipping . setUnit ( orderPart . getItemUnit ( ) ) ;
// 20241115 没有给carNo赋值
jisShipping . setCarNo ( detail . getVin ( ) ) ;
jisShipping . setSerialNumber ( orderPart . getWorkOrderNo ( ) ) ;
jisShipping . setQuantityPerCar ( orderPart . getItemQty ( ) ) ;
jisShipping . setOffTime ( TimeTool . getNowTime ( true ) ) ;
jisShipping . setShippingOrderCode ( orderManagement . getShippingCode ( ) ) ;
jisShipping . setFid ( UUID . randomUUID ( ) . toString ( ) ) ;
jisShipping . setSystemSyncStatus ( CommonEnumUtil . FALSE ) ;
ConvertBean . serviceModelInitialize ( jisShipping , userName ) ;
return jisShipping ;
}
@Override
public void doShippingBack ( Long [ ] idList , String organizeCode , String userName ) {
public void doShippingBack ( Long [ ] idList , String organizeCode , String userName ) {
List < MesShippingOrderManagementDetail > detailList = getManagementDetails ( idList , organizeCode , userName ) ;
List < MesShippingOrderManagementDetail > detailList = getManagementDetails ( idList , organizeCode , userName ) ;
if ( CollectionUtils . isEmpty ( detailList ) ) MesException . throwMesBusiException ( "选择数据无效,请检查" ) ;
if ( CollectionUtils . isEmpty ( detailList ) ) MesException . throwMesBusiException ( "选择数据无效,请检查" ) ;