武汉cockpit发运防错按照散件方式写入

master
jun 5 months ago
parent 642bb9a285
commit 0850df7369

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import io.swagger.annotations.ApiOperation;
@ -16,6 +17,9 @@ import java.util.List;
**/
public interface IMesJisShippingService {
@ApiOperation(value = "发运结果回传")
MesJisShipping getMesJisShipping(MesShippingOrderManagement orderManagement,MesShippingOrderManagementDetail detail, String srcLocateNo, MesWorkOrderPart orderPart, String userName);
@ApiOperation(value = "构筑发运报工数据")
List<MesJisShipping> getJisShipping(MesShippingOrderManagement orderManagement, List<MesShippingOrderManagementDetail> orderManagementDetailList,String userName);
}

@ -15,8 +15,8 @@ import java.util.List;
public interface IMesMoveRuleService {
@ApiOperation("根据规则代码查询移库规则")
List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(String code, String organizeCode);
List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(String code, String organizeCode,Integer groupType);
@ApiOperation("根据规则代码查询移库规则")
List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(List<String> codeList, String organizeCode);
List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(List<String> codeList, String organizeCode,Integer groupType);
}

@ -30,6 +30,12 @@ public interface IMesProduceSnExtService {
@ApiOperation(value = "根据零件条码查询零件条码信息")
Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList);
@ApiOperation(value = "根据零件客户条码查询零件条码信息")
List<MesProduceSn> findProduceSnByCustSn(String organizeCode, List<String> custSnList);
@ApiOperation(value = "根据零件客户条码查询零件条码信息")
Map<String, List<MesProduceSn>> getProduceSnByCustSnMap(String organizeCode, List<String> custSnList);
@ApiOperation(value = "根据生产工单,生产线,工位查询工位队列信息")
List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo);

@ -27,6 +27,9 @@ public interface IMesProductionRecordService {
@ApiOperation(value = "根据零件条码,物料编码,工序代码,工艺代码查询加工记录信息")
List<MesProductionRecord> findProductionRecordList(String organizeCode, String productSn, String partNo, String craftCode);
@ApiOperation(value = "根据工单,汇报状态查询加工记录信息")
List<MesProductionRecord> findProductionRecordList(String organizeCode, List<String> orderNoList, Integer reportStatus);
void updateProductionRecord(String organizeCode, String userName, String sn);
void updateProductionRecord(String organizeCode, String userName, Long id, String errorMsg);
@ -36,4 +39,5 @@ public interface IMesProductionRecordService {
@ApiOperation(value = "更新加工记录")
void updateProductionRecord(List<MesProductionRecord> recordList,String userName,Integer reportStatus,String msg);
}

@ -30,7 +30,7 @@ public interface IMesSortShippingCheckService {
MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org);
@ApiOperation("保存发运数据")
List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName);
List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,List<MesShippingOrderManagementDetail> shippingOrderManagementDetails,String userName);
void update(MesShippingOrderManagement item);

@ -47,4 +47,7 @@ public interface IMesWorkOrderExtService {
@ApiOperation(value = "根据工单或者客户条码 查询生产工单信息(排序)")
BaseBean getWorkOrderSort(String organizeCode, String sn, Boolean isBackOrder);
@ApiOperation(value = "根据工单更新工单状态")
void updateMesWorkOrderOrderStatusShippingByWorkOrderNo(String organizeCode, List<String> workOrderNoList,String userName);
}

@ -61,8 +61,11 @@ public class MesPartServiceImpl implements IMesPartService {
public List<MesPart> findMesPartByPartNo(List<String> partNoList, String organizeCode) {
if(StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(partNoList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if(partNoList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(),"partNo",packBean);
DdlPreparedPack.getInPackList(partNoList,"partNo",packBean);
if (partNoList.size() == MesPcnExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(), "partNo", packBean);
} else {
DdlPreparedPack.getInPackList(partNoList, "partNo", packBean);
}
return mesPartRDao.findByHqlWhere(packBean);
}
@ -82,8 +85,11 @@ public class MesPartServiceImpl implements IMesPartService {
public List<MesPartSap> findMesPartSapByPartNo(List<String> partNoList, String organizeCode) {
if(StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(partNoList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if(partNoList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(),"partNo",packBean);
DdlPreparedPack.getInPackList(partNoList,"partNo",packBean);
if(partNoList.size() == MesPcnExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(),"partNo",packBean);
}else{
DdlPreparedPack.getInPackList(partNoList,"partNo",packBean);
}
return mesPartSapRDao.findByHqlWhere(packBean);
}
}

@ -10,18 +10,21 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* @Description :
@ -40,7 +43,38 @@ public class MesJisShippingServiceImpl implements IMesJisShippingService {
@Autowired
private IMesConfigService configService;
@Override
public MesJisShipping getMesJisShipping(MesShippingOrderManagement orderManagement,MesShippingOrderManagementDetail detail, String srcLocateNo, MesWorkOrderPart orderPart, String userName) {
MesJisShipping jisShipping = new MesJisShipping();
BeanUtils.copyProperties(orderManagement, jisShipping, MesPcnExtConstWords.BASE_BEAN_FIELDS);
BeanUtils.copyProperties(detail, jisShipping, MesPcnExtConstWords.BASE_BEAN_FIELDS);
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 List<MesJisShipping> getJisShipping(MesShippingOrderManagement orderManagement, List<MesShippingOrderManagementDetail> orderManagementDetailList,String userName) {
orderManagementDetailList = CollectionUtils.isEmpty(orderManagementDetailList) ? orderManagementDetailList : orderManagementDetailList.stream().filter(t -> CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == t.getSaveFlag()).collect(Collectors.toList());
if (CollectionUtils.isEmpty(orderManagementDetailList)) return null;
MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode());
String warerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(orderManagement.getOrganizeCode(), MesPcnExtConstWords.ERP_WARERHOUSE) : mesPartShippingGroup.getSrcWarerhouse();
String erpWarehous = configService.getCfgValue(orderManagement.getOrganizeCode(), MesPcnExtConstWords.ERP_WAREHOUS);

@ -29,19 +29,24 @@ public class MesMoveRuleServiceImpl implements IMesMoveRuleService {
private IMesMoveRuleRepository mesMoveRuleRepository;
@Override
public List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(String code, String organizeCode) {
public List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(String code, String organizeCode,Integer groupType) {
if (StringUtils.isEmpty(code) || StringUtils.isEmpty(organizeCode)) return null;
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(groupType, "groupType", ddlPackBean);
DdlPreparedPack.getStringEqualPack(code, "code", ddlPackBean);
return mesMoveRuleRepository.findByHqlWhere(ddlPackBean);
}
@Override
public List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(List<String> codeList, String organizeCode) {
public List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(List<String> codeList, String organizeCode,Integer groupType) {
if (CollectionUtils.isEmpty(codeList) || StringUtils.isEmpty(organizeCode)) return null;
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
if (codeList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(codeList.iterator().next(), "code", ddlPackBean);
DdlPreparedPack.getInPackList(codeList, "code", ddlPackBean);
DdlPreparedPack.getNumEqualPack(groupType, "groupType", ddlPackBean);
if (codeList.size() == MesPcnExtConstWords.ONE){
DdlPreparedPack.getStringEqualPack(codeList.iterator().next(), "code", ddlPackBean);
}else{
DdlPreparedPack.getInPackList(codeList, "code", ddlPackBean);
}
return mesMoveRuleRepository.findByHqlWhere(ddlPackBean);
}
}

@ -102,6 +102,31 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
}
@Override
public List<MesProduceSn> findProduceSnByCustSn(String organizeCode, List<String> custSnList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(custSnList)) return null;
custSnList = custSnList.size() == MesPcnExtConstWords.ONE ? custSnList : custSnList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (custSnList.size() == MesPcnExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(custSnList.get(MesPcnExtConstWords.ZERO), MesPcnExtConstWords.CUST_SN, packBean);
} else {
DdlPreparedPack.getInPackList(custSnList, MesPcnExtConstWords.CUST_SN, packBean);
}
return produceSnRepository.findByHqlWhere(packBean);
}
@Override
public Map<String, List<MesProduceSn>> getProduceSnByCustSnMap(String organizeCode, List<String> custSnList) {
List<MesProduceSn> produceSnList = findProduceSnByCustSn(organizeCode, custSnList);
if(CollectionUtils.isEmpty(produceSnList)) return null;
//先排序再分组
produceSnList = produceSnList.stream().sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
return produceSnList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesProduceSn::getCustSn));
}
//根据生产工单,生产线,工位查询工位队列信息
@Override
public List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo) {

@ -51,8 +51,11 @@ public class MesProductVersionServiceImpl implements IMesProductVersionService {
public List<MesProductVersion> findMesProductVersionByPartNo(String organizeCode, List<String> partNoList) {
if (CollectionUtils.isEmpty(partNoList) || StringUtils.isEmpty(organizeCode)) return null;
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
if (partNoList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(), "partNo", ddlPackBean);
DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean);
if (partNoList.size() == MesPcnExtConstWords.ONE){
DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(), "partNo", ddlPackBean);
}else{
DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean);
}
return mesProductVersionRepository.findByHqlWhere(ddlPackBean);
}
}

@ -84,6 +84,19 @@ public class MesProductionRecordService implements IMesProductionRecordService {
}
@Override
public List<MesProductionRecord> findProductionRecordList(String organizeCode, List<String> orderNoList, Integer reportStatus) {
if(StringUtils.isEmpty(orderNoList) || CollectionUtils.isEmpty(orderNoList) || Objects.isNull(reportStatus)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if(orderNoList.size() == MesPcnExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(orderNoList.iterator().next(),MesPcnExtConstWords.WORK_ORDER_NO,packBean);
} else{
DdlPreparedPack.getInPackList(orderNoList,MesPcnExtConstWords.WORK_ORDER_NO,packBean);
}
DdlPreparedPack.getNumEqualPack(reportStatus,MesPcnExtConstWords.REPORT_TYPE,packBean);
return productionRecordRepository.findByHqlWhere(packBean);
}
@Override
public void updateProductionRecord(String organizeCode, String userName, String sn) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);

@ -12,6 +12,7 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail;
@ -385,9 +386,16 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
//关闭装发运单明细
List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), shippingCodeList);
if (!CollectionUtils.isEmpty(mesShippingOrderManagementList)) {
List<MesJisShipping> shippingList = new ArrayList<>();
//发送数据给wms
for (MesShippingOrderManagement mesShippingOrderManagement : mesShippingOrderManagementList) {
jisShippingRepository.saveAll(mesSortShippingCheckService.getMesJisShippings(mesShippingOrderManagement, userName));
List<MesJisShipping> mesJisShippings = mesSortShippingCheckService.getMesJisShippings(mesShippingOrderManagement, null, userName);
if (!CollectionUtils.isEmpty(mesJisShippings)) {
shippingList.addAll(mesJisShippings);
}
}
if (!CollectionUtils.isEmpty(shippingList)) {
jisShippingRepository.saveAll(shippingList);
}
//关闭发运单明细
closeShippingOrderDetails(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()));

@ -1,12 +1,14 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -26,12 +28,12 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -100,6 +102,21 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
@Autowired
private MesShippingSnUniqueRepository mesShippingSnUniqueRepository;
@Autowired
private IMesWorkOrderService mesWorkOrderService;
@Autowired
private IMesMoveRuleService mesMoveRuleService;
@Autowired
private IMesPartService mesPartService;
@Autowired
private IMesProductionRecordService mesProductionRecordService;
@Autowired
private IMesProduceSnExtService mesProduceSnExtService;
@Override
public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) {
//校验发运单
@ -449,6 +466,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean);
loadingList = listRepository.getByProperty(packBean);
//反填装车单信息到发运单
if(!Objects.isNull(loadingList)){
orderManagement.setOrderCode(loadingList.getOrderCode());
orderManagement.setLoadingListId(loadingList.getId());
@ -470,28 +488,26 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
List<MesShippingOrderManagementDetail> detailList = model.getDetailList();
Map<Long, List<MesShippingOrderManagementDetail>> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getId));
//获取工单信息
MesSortShippingModel sortShippingModel = getMesSortShippingModel(orderManagement.getShippingGroupCode(), organizeCode, detailList.stream().map(MesShippingOrderManagementDetail::getVisualOrderNo).filter(visualOrderNo -> !StringUtil.isEmptyAndNull(visualOrderNo)).collect(Collectors.toList()));
//查询条码信息
Map<String, List<MesProduceSn>> produceSnByCustSnMap = getProduceSnByCustSnMap(orderManagement.getIsEnableMemory(), organizeCode, detailList.stream().map(MesShippingOrderManagementDetail::getBarcode).filter(barCode -> !StringUtil.isEmptyAndNull(barCode)).collect(Collectors.toList()));
List<MesProduceSn> produceSnList = new ArrayList<>();
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
List<String> workOrderNoList = new ArrayList<>();
List<MesShippingSnUnique> mesShippingSnUniqueList = new ArrayList<>();
List<MesJisShipping> shippingList = new ArrayList<>();
for (MesShippingOrderManagementDetail detail : orderManagementDetailList) {
//根据扫描的条码查询条码是否存在
packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (!Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){
List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getId());
MesShippingOrderManagementDetail managementDetail = mesShippingOrderManagementDetails.get(0);
detail.setRemark(managementDetail.getRemark());
detail.setStatus(managementDetail.getStatus());
detail.setBarcode(managementDetail.getBarcode());
detail.setVisualOrderNo(managementDetail.getVisualOrderNo());
if (!Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
BeanUtils.copyProperties(custInfoSeqMap.get(detail.getId()).iterator().next(), detail);
}
//更新条码信息,更新目视单信息
if(!StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "custSn", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
MesProduceSn produceSn = produceSnRepository.getByProperty(packBean);
if(!Objects.isNull(produceSn)){
if (!Objects.isNull(produceSnByCustSnMap) && produceSnByCustSnMap.containsKey(detail.getBarcode())) {
MesProduceSn produceSn = produceSnByCustSnMap.get(detail.getBarcode()).iterator().next();
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
produceSn.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY);
ConvertBean.serviceModelUpdate(produceSn, userInfo);
produceSnList.add(produceSn);
} else {
@ -500,19 +516,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
}
//更新工单
if(!StringUtils.isEmpty(detail.getVisualOrderNo())){
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(organizeCode, detail.getVisualOrderNo());
if(!Objects.isNull(workOrder)){
workOrder.setShippingTime(TimeTool.getNowTime(true));
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
workOrder.setSystemSyncStatus(CommonEnumUtil.FALSE);
workOrder.setModifyUser(userInfo);
workOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
mesWorkOrderList.add(workOrder);
}
workOrderNoList.add(detail.getVisualOrderNo());
//更新应急件库位管理库存出库
mesEmergencyLocationService.doShippingStockOutOnline(organizeCode, detail.getVisualOrderNo(), userInfo, true);
}
}
//客供品移库
customerSupplyMove(orderManagement, userInfo, sortShippingModel, shippingList, detail);
//条码格式(扫描目视单,扫描条码)
if(!StringUtil.isEmpty(detail.getVisualOrderNo())){
detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString());
@ -529,9 +540,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if(!CollectionUtils.isEmpty(produceSnList)){
produceSnRepository.saveAll(produceSnList);
}
//更新工单
if(!CollectionUtils.isEmpty(mesWorkOrderList)){
mesWorkOrderExtService.saveAll(mesWorkOrderList);
//更新工单状态为已发运
if(!CollectionUtils.isEmpty(workOrderNoList)){
mesWorkOrderExtService.updateMesWorkOrderOrderStatusShippingByWorkOrderNo(organizeCode, workOrderNoList, userInfo);
}
//更新发运单
ConvertBean.serviceModelUpdate(orderManagement,userInfo);
@ -540,12 +551,15 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){
shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList);
}
if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){
if (StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())) {
//发送数据给辊道线
sendShippingFinishedCmd(model, organizeCode);
//保存当前发运单明细报工
jisShippingRepository.saveAll(getMesJisShippings(orderManagement,userInfo));
}else{
//保存当前发运单明细
List<MesJisShipping> mesJisShippings = getMesJisShippings(orderManagement, orderManagementDetailList, userInfo);
if (!CollectionUtils.isEmpty(mesJisShippings)) {
shippingList.addAll(mesJisShippings);
}
} else {
//查询装车单明细
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(orderManagement.getLoadingListId(),"pid",orderManagementPackBean);
@ -557,13 +571,16 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", orderManagementPackBean);
boolean exitByHql = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean);
//2.装车单中所有发运单全部变成发运回传
if(!exitByHql){
if (!exitByHql) {
DdlPackBean jisBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(orderManagement.getOrderCode(), "orderCode", jisBean);
List<MesShippingOrderManagement> shippingOrderManagementList = shippingOrderManagementRepository.findByHqlWhere(jisBean);
for (MesShippingOrderManagement mesShippingOrderManagement : shippingOrderManagementList) {
//保存当前发运单明细报工
jisShippingRepository.saveAll(getMesJisShippings(mesShippingOrderManagement,userInfo));
//保存当前发运单明细
List<MesJisShipping> mesJisShippings = getMesJisShippings(mesShippingOrderManagement, null, userInfo);
if (!CollectionUtils.isEmpty(mesJisShippings)) {
shippingList.addAll(mesJisShippings);
}
}
//更新装车单
if (!StringUtils.isEmpty(loadingList)) {
@ -574,6 +591,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
}
}
}
//发运结果回传
if(!CollectionUtils.isEmpty(shippingList)){
jisShippingRepository.saveAll(shippingList);
}
}
@ -610,12 +631,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
return rule;
}
public List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName) {
DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean);
List<MesShippingOrderManagementDetail> shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean);
public List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,List<MesShippingOrderManagementDetail> shippingOrderManagementDetails,String userName) {
if (CollectionUtils.isEmpty(shippingOrderManagementDetails)) {
DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean);
shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean);
}
//当前装车单所有发运单明细 需要报工的数据
return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails,userName);
return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails, userName);
}
@Override
@ -637,4 +660,50 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean);
}
private MesSortShippingModel getMesSortShippingModel(String shippingGroupCode, String organizeCode, List<String> orderNoList) {
MesSortShippingModel sortShippingModel = new MesSortShippingModel();
if (!CollectionUtils.isEmpty(orderNoList)) {
sortShippingModel.setMesWorkOrderList(mesWorkOrderExtService.getWorkOrderList(organizeCode, orderNoList));
sortShippingModel.setMesWorkOrderPartList(mesWorkOrderService.findMesWorkOrderPartByOrderNo(organizeCode, orderNoList));
sortShippingModel.setMesProductionRecordList(mesProductionRecordService.findProductionRecordList(organizeCode, orderNoList, MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue()));
sortShippingModel.setMesMoveRuleList(mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(shippingGroupCode, organizeCode,MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_10.getValue()));
sortShippingModel.setMesPartList(mesPartService.findMesPartByPartNo(sortShippingModel.getPartNoAllList(), organizeCode));
}
return sortShippingModel;
}
private Map<String, List<MesProduceSn>> getProduceSnByCustSnMap(Integer isEnableMemory, String organizeCode, List<String> custSnList) {
Map<String, List<MesProduceSn>> produceSnByCustSnMap = null;
if (!Objects.equals(isEnableMemory, MesCommonConstant.TRUE_INTEGER)) {
produceSnByCustSnMap = mesProduceSnExtService.getProduceSnByCustSnMap(organizeCode, custSnList);
}
return produceSnByCustSnMap;
}
private void customerSupplyMove(MesShippingOrderManagement orderManagement, String userInfo, MesSortShippingModel sortShippingModel, List<MesJisShipping> shippingList, MesShippingOrderManagementDetail detail) {
if (!StringUtils.isEmpty(detail.getVisualOrderNo()) && !Objects.isNull(sortShippingModel.getMesWorkOrderMap()) && sortShippingModel.getMesWorkOrderMap().containsKey(detail.getVisualOrderNo())) {
MesWorkOrder workOrder = sortShippingModel.getMesWorkOrderMap().get(detail.getVisualOrderNo());
//散件发运
if (!Objects.isNull(sortShippingModel.getMesProductionRecordMap()) && sortShippingModel.getMesProductionRecordMap().containsKey(detail.getVisualOrderNo()) && !Objects.isNull(sortShippingModel.getMesWorkOrderPartMap()) && sortShippingModel.getMesWorkOrderPartMap().containsKey(detail.getVisualOrderNo())) {
//标记为总成不记录回传表
detail.setSaveFlag(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
MesMoveRule moveRule = null;
//移库规则
for (MesWorkOrderPart orderPart : sortShippingModel.getMesWorkOrderPartMap().get(detail.getVisualOrderNo())) {
MesPart itemPart = Objects.isNull(sortShippingModel.getMesPartMap()) || !sortShippingModel.getMesPartMap().containsKey(orderPart.getPartNo()) ? null : sortShippingModel.getMesPartMap().get(orderPart.getPartNo());
if (Objects.isNull(itemPart) || StringUtil.isEmpty(itemPart.getEsd()) || Objects.isNull(sortShippingModel.getMesMoveRuleMap()) || !sortShippingModel.getMesMoveRuleMap().containsKey(itemPart.getEsd())) {
log.info("客供品移库零件【{}】维护的ESD属性未匹配到零件发运组【{}】中的移库规则", orderPart.getPartNo(), workOrder.getPartProdGroupCode());
continue;
}
moveRule = sortShippingModel.getMesMoveRuleMap().get(itemPart.getEsd());
if (Objects.equals(moveRule.getMoveNum(), MesExtEnumUtil.MOVE_RULE_MOVE_NUM.MOVE_RULE_MOVE_NUM_20.getValue()) && MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) {
shippingList.add(jisShippingService.getMesJisShipping(orderManagement, detail, moveRule.getErpSrcLocateNo(), orderPart, userInfo));
} else {
log.info("客供品移库零件【{}】在零件发运组【{}】的移库规则中,汇报类型未维护或不为发运", orderPart.getPartNo(), workOrder.getPartProdGroupCode());
}
}
}
}
}
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -13,6 +14,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -20,6 +22,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -224,6 +227,20 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService {
return isBackOrder ? getWorkOrderSort2Order(organizeCode, sn) : getWorkOrderSort2Ps(organizeCode, sn);
}
@Override
public void updateMesWorkOrderOrderStatusShippingByWorkOrderNo(String organizeCode, List<String> workOrderNoList, String userName) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (workOrderNoList.size() == MesPcnExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(workOrderNoList.iterator().next(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
} else {
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
}
workOrderRepository.updateByProperties(
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.SHIPPING_TIME},
new Object[]{userName, (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue(), TimeTool.getNowTime(true)}, packBean);
}
private MesWorkOrder getWorkOrderSort2Order(String organizeCode, String sn) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn)) return null;
MesProduceSn produceSn;

@ -568,7 +568,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
}));
if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()) {
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0), productionRecord.getProductSn(), false, map.size()));
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0), productionRecord.getProductSn(), false,false,map.size()));
}
} else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) {
customerSupplyMove(productionRecord, oldMesWorkOrder, mesProductVersion, mesBoms, mesProductOffLineList, mesMoveList, userName);
@ -612,7 +612,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
}
private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom,String reportSn,boolean isItemReport,Integer bomSize) {
private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom,String reportSn,boolean isItemReport,boolean saveProductVersionFlag,Integer bomSize) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
BeanUtils.copyProperties(mesBom, newMesProductOffLine, MesPcnExtConstWords.BASE_BEAN_FIELDS);
@ -661,7 +661,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (Objects.equals(MesExtEnumUtil.ORDER_TYPE.BTO.getValue(), oldMesWorkOrder.getWorkOrderType())){
newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode());
}
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setSapWorkCenter(saveProductVersionFlag ? mesProductVersion.getProductVersion() : mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime());
newMesProductOffLine.setProductionRecordId(productionRecord.getId().toString());
@ -1333,7 +1333,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
public MesWorkOrderSortReportModel initMesWorkOrderSortReportModel(String organizeCode, Integer pageSize, String userName) {
MesWorkOrderSortReportModel model = new MesWorkOrderSortReportModel(organizeCode, userName, mesProductionRecordDao.findMesProductionRecordNoReport(organizeCode, MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue(), pageSize,null));
model.setMesWorkOrderList(workOrderExtService.getWorkOrderList(organizeCode, model.getWorkOrderList()));
model.setMesMoveRuleList(mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(model.getPartProdGroupCodeList(), organizeCode));
model.setMesMoveRuleList(mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(model.getPartProdGroupCodeList(), organizeCode,MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_20.getValue()));
model.setMesWorkOrderPartList(findMesWorkOrderPartByOrderNo(organizeCode, model.getWorkOrderList()));
model.setMesPartList(iMesPartService.findMesPartByPartNo(model.getPartNoAllList(), organizeCode));
model.setMesPartSapList(iMesPartService.findMesPartSapByPartNo(model.getPartNoAllList(), organizeCode));
@ -1363,8 +1363,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) {
shippingList.add(getMesJisShipping(model.getOrganizeCode(), workOrder.getWorkOrderNo(), workOrder.getCustCode(), record.getProductSn(), moveRule.getErpSrcLocateNo(), orderPart, model.getUserName()));
} else {
LOGGER.info("客供品移库零件【{}】在零件生产组【{}】的移库规则中,汇报类型未维护", orderPart.getPartNo(), workOrder.getPartProdGroupCode());
continue;
@ -1385,7 +1383,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
boolean isItemReport;
MesMoveRule moveRule;
//查询零件生产组的移库规则
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode());
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode(),MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_20.getValue());
if(CollectionUtils.isEmpty(moveRules)) {
LOGGER.info("工单:{} 生产组:{}移库规则信息不存在",mesWorkOrder.getWorkOrderNo(),mesWorkOrder.getPartProdGroupCode());
return;
@ -1427,10 +1425,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//bom下的子节汇报
if (!CollectionUtils.isEmpty(bomList)) {
for (MesBom bom : bomList) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, bom, reportSn, true, bomList.size()));
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, bom, reportSn, true, MesPcnExtConstWords.SAVE_PRODUCT_VERSION_FLAG.equals(itemPart.getEsd()), bomList.size()));
}
} else {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, mesBom, reportSn, true, MesPcnExtConstWords.ONE));
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, mesBom, reportSn, true,false, MesPcnExtConstWords.ONE));
}
}
//移库
@ -1448,7 +1446,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//bom下的子节汇报总成也需要汇报
if (!CollectionUtils.isEmpty(mesProductOffLineList)) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom, productionRecord.getProductSn(), false,mesBoms.size()));
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom, productionRecord.getProductSn(), false,false,mesBoms.size()));
}
}
}
@ -1515,9 +1513,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
public List<MesWorkOrderPart> findMesWorkOrderPartByOrderNo(String organizeCode, List<String> workOrderNoList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (workOrderNoList.size() == MesPcnExtConstWords.ONE)
if (workOrderNoList.size() == MesPcnExtConstWords.ONE){
DdlPreparedPack.getStringEqualPack(workOrderNoList.iterator().next(), "workOrderNo", packBean);
DdlPreparedPack.getInPackList(workOrderNoList, "workOrderNo", packBean);
}else{
DdlPreparedPack.getInPackList(workOrderNoList, "workOrderNo", packBean);
}
return mesWorkOrderPartRepository.findByHqlWhere(packBean);
}
@ -1545,26 +1545,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesProdRuleSortCfg;
}
private MesJisShipping getMesJisShipping(String organizeCode, String workOrderNo,String custCode, String productSn, String srcLocateNo, MesWorkOrderPart orderPart,String userName) {
MesJisShipping jisShipping = new MesJisShipping();
jisShipping.setPartNo(orderPart.getPartNo());
jisShipping.setUnit(orderPart.getItemUnit());
jisShipping.setOrganizeCode(organizeCode);
jisShipping.setFactoryCode(organizeCode);
jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setErpWarerhouse(srcLocateNo);
jisShipping.setCusCode(custCode);
jisShipping.setCustOrderNo(workOrderNo);
jisShipping.setShippingOrderCode(workOrderNo);
jisShipping.setSerialNumber(productSn);
jisShipping.setQuantityPerCar(orderPart.getItemQty());
jisShipping.setOffTime(TimeTool.getNowTime(true));
jisShipping.setFid(UUID.randomUUID().toString());
jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelInitialize(jisShipping, userName);
return jisShipping;
}
private MesProductOffLine getMesProductOffLine(MesWorkOrderSortReportModel model, MesProductionRecord record, MesWorkOrder workOrder, MesProductVersion mesProductVersion, MesWorkOrderPart mesWorkOrderPart,boolean isItemReport) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
if(!isItemReport){

@ -32,6 +32,8 @@ import java.util.Comparator;
import java.util.Objects;
import java.util.Optional;
import java.util.StringJoiner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -258,10 +260,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
produceSnExtService.update(produceSn);
}
//更新工单状态为发运
workOrder.setShippingTime(TimeTool.getNowTime(true));
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
ConvertBean.serviceModelUpdate(workOrder, userInfo);
mesWorkOrderExtService.update(workOrder);
mesWorkOrderExtService.updateMesWorkOrderOrderStatusShippingByWorkOrderNo(orderManagement.getOrganizeCode(), Stream.of(workOrder.getWorkOrderNo()).collect(Collectors.toList()), userInfo);
}
}
}

@ -0,0 +1,65 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.mes.bean.*;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@Data
public class MesSortShippingModel {
@ApiParam("工单")
private List<MesWorkOrder> mesWorkOrderList;
@ApiParam("工单零件")
private List<MesWorkOrderPart> mesWorkOrderPartList;
@ApiParam("加工记录")
private List<MesProductionRecord> mesProductionRecordList;
@ApiParam("移库规则")
private List<MesMoveRule> mesMoveRuleList;
@ApiParam("零件信息")
private List<MesPart> mesPartList;
public Map<String, MesWorkOrder> getMesWorkOrderMap() {
if (CollectionUtils.isEmpty(mesWorkOrderList)) return null;
return mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y));
}
public Map<String, List<MesWorkOrderPart>> getMesWorkOrderPartMap() {
if (CollectionUtils.isEmpty(mesWorkOrderPartList)) return null;
return mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo));
}
public Map<String, MesProductionRecord> getMesProductionRecordMap() {
if (CollectionUtils.isEmpty(mesProductionRecordList)) return null;
return mesProductionRecordList.stream().collect(Collectors.toMap(MesProductionRecord::getWorkOrderNo, Function.identity(), (x, y) -> y));
}
public List<String> getPartNoAllList() {
List<String> partNoList = new ArrayList<>();
if (!CollectionUtils.isEmpty(mesWorkOrderPartList)) partNoList.addAll(this.mesWorkOrderPartList.stream().map(MesWorkOrderPart::getPartNo).distinct().filter(t -> !StringUtils.isEmpty(t)).collect(Collectors.toList()));
return partNoList;
}
public Map<String, MesPart> getMesPartMap() {
if (CollectionUtils.isEmpty(mesPartList)) return null;
return mesPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.toMap(MesPart::getPartNo, Function.identity(), (x, y) -> y));
}
public Map<String, MesMoveRule> getMesMoveRuleMap() {
if (CollectionUtils.isEmpty(mesMoveRuleList)) return null;
return mesMoveRuleList.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.toMap(MesMoveRule::getSrcType, Function.identity(), (x, y) -> y));
}
}

@ -275,6 +275,10 @@ public class MesPcnExtConstWords {
public static final String PULL_CODE = "pullCode";
//拉动单号
public static final String PULLING_ORDER_NO = "pullingOrderNo";
//汇报类型
public static final String REPORT_TYPE = "reportType";
//发运时间
public static final String SHIPPING_TIME = "shippingTime";
//BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
@ -733,4 +737,8 @@ public class MesPcnExtConstWords {
// 工单序号
public static final String WORK_ORDER_SEQ = "workOrderSeq";
//螺钉包保存生产版本标记
public static final String SAVE_PRODUCT_VERSION_FLAG = "ZFBT";
}

Loading…
Cancel
Save