排序工单下发逻辑调整

tags/yfai-mes-ext-v2.3
jun 6 months ago
parent 96459e9c41
commit 478aada794

@ -170,149 +170,45 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
// 数据校验
ValidatorBean.checkNotNull(bean.getWorkOrderType(), "工单类型不能为空");
ValidatorBean.checkNotNull(bean.getWorkCenterCode(), "产线不能为空");
ValidatorBean.checkNotNull(bean.getPartNo(), "零件号不能为空");
ValidatorBean.checkNotNull(bean.getShiftCode(), "班次不能为空");
//校验产线与工位的关系
boolean relationResult = checkWorkCenterPartRelation(bean.getWorkCenterCode(), bean.getPartNo());
if (!relationResult && (StringUtil.isEmpty(bean.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag()))){
MesException.throwMesBusiException(String.format("工单产线【%s】与工单零件【%s】没有维护产线零件关系",bean.getWorkCenterCode(),bean.getPartNo()));
}
//获取相同类型 相同标识 生产序号最大值的
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean);
MesWorkOrder result = baseRDao.getByProperty(orderPackBean);
//排序生成个数 默认1数量为生成工单的个数
Double generateQty = bean.getQty();
//插入前构造数据
onInsertBean(bean);
//若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1
MesWorkCenter mesWorkCenter = workCenterService.getWorkCenterDb(bean.getOrganizeCode(), bean.getWorkCenterCode());
if (Objects.isNull(mesWorkCenter)) {
MesException.throwMesBusiException("产线【%s】不存在", bean.getWorkCenterCode());
}
bean.setErpWorkCenter(mesWorkCenter.getErpWorkCenter());
bean.setAreaCode(mesWorkCenter.getAreaCode());
//客户物料信息
if (StringUtil.isEmpty(bean.getCustPartNo())) {
getCustomerPart(bean);
}
//排序
if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) {
Long productSeq = 0L;
if (null != result && result.getProductSeq() != null) {
productSeq = (long) Math.toIntExact(result.getProductSeq().toString().endsWith("9") ? result.getProductSeq() + 1 : result.getProductSeq());
}
MesWorkOrder copyMesWorkOrder = new MesWorkOrder();
BeanUtils.copyProperties(bean, copyMesWorkOrder);
copyMesWorkOrder.setProductSeq((long) (productSeq + 1));
copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelInitialize(copyMesWorkOrder, bean.getCreateUser());
baseRDao.insert(copyMesWorkOrder);
workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty());
insertSortWorkOrderNo(bean, mesWorkCenter);
//生成数量大于1
if (generateQty > 1) {
insertBatchWorkOrder(copyMesWorkOrder, generateQty);
}
return bean;
} else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) {
Long productSeq = 0L;
if (null != result && result.getProductSeq() != null) {
productSeq = (long) Math.toIntExact(result.getProductSeq());
insertBatchWorkOrder(bean, generateQty);
}
bean.setProductSeq(productSeq + 1);
GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ);
List<String> resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList();
bean.setWorkOrderSeq(resultList.get(0));
//非排序
} else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
insertUnSortWorkOrder(bean, mesWorkCenter);
//bto
} else {
insertBtoWorkOrder(bean, mesWorkCenter);
}
bean.setQty(bean.getQty());
bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelInitialize(bean, bean.getCreateUser());
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
bean = baseRDao.insert(bean);
return bean;
}
private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) {
//查询数据
List<MesWorkOrderAssembly> orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderPart> orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderToWms> toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderLog> orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(),workOrder.getCustSn());
//数据处理
List<MesWorkOrder> newWrkOrderList = new ArrayList<>();
List<MesWorkOrderAssembly> newOrderAssemblyList = new ArrayList<>();
List<MesWorkOrderPart> newOrderPartList = new ArrayList<>();
List<MesWorkOrderToWms> newToWmsList = new ArrayList<>();
List<MesWorkOrderLog> newOrderLogList = new ArrayList<>();
List<MesProduceSn> newProduceSnList = new ArrayList<>();
MesWorkOrderAssembly newOrderAssembly = null;
MesWorkOrderPart newOrderPart = null;
MesWorkOrderToWms newOrderPartToWms = null;
MesWorkOrderLog orderLog = null;
MesProduceSn newProduceSn = null;
for (int i = 1; i < generateQty ; i++) {
//工单
MesWorkOrder newWorkOrder = new MesWorkOrder();
BeanUtils.copyProperties(workOrder,newWorkOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newWorkOrder.setWorkOrderNo(getOrderNo(workOrder));
newWorkOrder.setProductSeq(workOrder.getProductSeq()+i);
newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(),workOrder.getCreateUser()));
newWrkOrderList.add(newWorkOrder);
//工单装配件
if(!CollectionUtils.isEmpty(orderAssemblyList)){
for (MesWorkOrderAssembly assembly : orderAssemblyList) {
newOrderAssembly = new MesWorkOrderAssembly();
BeanUtils.copyProperties(assembly,newOrderAssembly,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderAssemblyList.add(newOrderAssembly);
}
}
//工单零件
if(!CollectionUtils.isEmpty(orderPartList)){
for (MesWorkOrderPart part : orderPartList) {
newOrderPart = new MesWorkOrderPart();
BeanUtils.copyProperties(part,newOrderPart,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderPartList.add(newOrderPart);
}
}
//工单发送给WMS数据
if(!CollectionUtils.isEmpty(toWmsList)){
for (MesWorkOrderToWms toWms : toWmsList) {
newOrderPartToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(toWms,newOrderPartToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newToWmsList.add(newOrderPartToWms);
}
}
//生产工单日志
if(!CollectionUtils.isEmpty(orderLogList)){
for (MesWorkOrderLog mesWorkOrderLog : orderLogList) {
orderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrderLog,orderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderLogList.add(orderLog);
}
}
//产品条码表
if(!Objects.isNull(mesProduceSn)){
newProduceSn = new MesProduceSn();
BeanUtils.copyProperties(mesProduceSn,newProduceSn,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newProduceSn.setCustSn(newWorkOrder.getCustSn());
newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo());
newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo());
newProduceSnList.add(newProduceSn);
}
}
//数据持久化
baseRDao.saveAll(newWrkOrderList);
if(!CollectionUtils.isEmpty(newOrderAssemblyList)){
mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList);
}
if(!CollectionUtils.isEmpty(newOrderPartList)){
mesWorkOrderPartService.insertBatch(newOrderPartList);
}
if(!CollectionUtils.isEmpty(newOrderLogList)){
workOrderLogService.insertBatch(newOrderLogList);
}
if(!CollectionUtils.isEmpty(newToWmsList)){
mesWorkOrderToWmsService.insertBatch(newToWmsList);
}
}
@Override
public MesWorkOrder update(MesWorkOrder bean) {
MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode());
@ -386,7 +282,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(), "planStartTime", packBean);
DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(), "planEndTime", packBean);
DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(), "planEndTime", packBean);
packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,workOrderNo asc ");
packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,productSeq asc,workOrderNo asc ");
}
@Override
@ -409,131 +305,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
@Override
protected void onInsertBean(MesWorkOrder item) {
// 数据校验
ValidatorBean.checkNotNull(item.getWorkOrderType(), "工单类型不能为空");
ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线不能为空");
ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空");
ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空");
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter)) {
MesException.throwMesBusiException("产线【%s】不存在", item.getWorkCenterCode());
}
item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter());
//客户物料信息
if (StringUtil.isEmpty(item.getCustPartNo())) {
getCustomerPart(item);
}
//校验标识
//若工单类型为排序
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) {
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空");
//校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) {
MesException.throwMesBusiException("产线【%s】类型为【%s】请选择排序产线", mesWorkCenter.getWorkCenterCode(),
MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType()));
}
//若工单类型为排序 标识为 N E P S
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(item.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识",
item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()
, MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(),
MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),
MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue()));
}
//校验VIN号是否重复
if (!StringUtil.isEmpty(item.getVinCode())) {
//校验vin号是否重复
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getVinCode(), "vinCode", ddlPackBean);
if (baseRDao.isExitByHql(ddlPackBean)) {
MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode());
}
}
//排序工单数量为1
item.setQty(1d);
//发送工单给WMS
List<MesWorkOrderPart> orderPartList = sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms);
//生成工单号
item.setWorkOrderNo(getOrderNo(item));
//生成客户条码
item.setCustSn(getCustSn(item.getCustPartNo(), item.getOrganizeCode(),item.getCreateUser()));
//生成工单零件 工单装配件
insertMesWorkOrder(item, orderPartList);
} else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0");
}
//校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) {
MesException.throwMesBusiException("产线【%s】类型为【%s】请选择非排序产线", mesWorkCenter.getWorkCenterCode(),
MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType()));
}
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识",
item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()
, MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(),
MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue()));
}
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
//非试制单
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空");
//校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(item);
item.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
//获取bom信息
List<MesBom> bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS
saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList));
}
} else {
ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空");
ValidatorBean.checkNotNull(item.getPlanEndTime(), "计划结束时间不能为空");
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0");
}
//发送工单给WMS
sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms);
}
//生成工单号
if(StringUtil.isEmpty(item.getWorkOrderNo())){
item.setWorkOrderNo(getOrderNo(item));
}
//物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode());
item.setPartName(mesPart.getPartName());
item.setUnit(mesPart.getUnit());
//生产时间新增取当天
if (StringUtil.isEmpty(item.getProduceTime())) {
item.setProduceTime(TimeTool.getToday());
item.setProductTime(item.getProduceTime());
}
item.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
item.setUnCompleteQty(item.getQty());
item.setFid(UUID.randomUUID().toString());
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(item.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
}
private String getOrderNo(MesWorkOrder item) {
String orderNo;
if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()){
@ -663,7 +434,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
Map<String, List<MesWorkOrderAssembly>> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode));
for (String cellCode : cellCodeList) {
MesQueueOrder mesQueueOrder = new MesQueueOrder();
BeanUtils.copyProperties(item,mesQueueOrder,"id");
BeanUtils.copyProperties(item,mesQueueOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesQueueOrder.setWorkCellCode(cellCode);
mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq());
mesQueueOrder.setSerialNumber(item.getWorkOrderNo());
@ -709,6 +480,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息
bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
item.setBomCode(bomList.iterator().next().getBomCode());
}
//是否自动发布
return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion);
@ -718,8 +490,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesPartProdGroup mesPartProdGroup = null;
if(StringUtil.isEmpty(item.getPartProdGroupCode())){
mesPartProdGroup = getMesPartProdGroup(item);
item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode());
item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName());
}else{
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean);
@ -728,6 +498,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesException.throwMesBusiException("零件生产组【%s】信息不存在",item.getPartProdGroupCode());
}
}
item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode());
item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName());
item.setCustCode(mesPartProdGroup.getCustCode());
//自动发布
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
@ -894,7 +667,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
baseRDao.insert(copyMesWorkOrder);
//保存记录
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(item, workOrderLog, "id");
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderLogList.add(workOrderLog);
// 如果工单为发布状态则新增打印队列
@ -916,7 +689,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
index++;
//保存记录
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(item, workOrderLog, "id");
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderLogList.add(workOrderLog);
}
//保存发送WMS数据
@ -1647,7 +1420,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private List<MesWorkOrder> getMesWorkOrderList(Long[] ids, String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackArray(ids,"id",packBean);
DdlPreparedPack.getInPackArray(ids,MesExtConstWords.ID,packBean);
List<MesWorkOrder> mesWorkOrderList = baseRDao.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(mesWorkOrderList)) {
MesException.throwMesBusiException("选择工单信息不存在");
@ -1827,7 +1600,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id","systemSyncStatus");
BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName());
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
@ -2051,13 +1824,171 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return mesWorkOrderList;
}
private void insertSortWorkOrderNo(MesWorkOrder bean, MesWorkCenter mesWorkCenter) {
ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空");
ValidatorBean.checkNotNull(bean.getCustPartNo(), "客户物料号不能为空");
//校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) {
MesException.throwMesBusiException("产线【%s】类型为【%s】请选择排序产线", mesWorkCenter.getWorkCenterCode(),
MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType()));
}
//若工单类型为排序 标识为 N E P S
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(bean.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) {
MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识",
bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()
, MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(),
MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),
MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue()));
}
//校验VIN号是否重复
if (!StringUtil.isEmpty(bean.getVinCode())) {
//校验vin号是否重复
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getVinCode(), "vinCode", ddlPackBean);
if (baseRDao.isExitByHql(ddlPackBean)) {
MesException.throwMesBusiException("vin号【%s】重复", bean.getVinCode());
}
}
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
//排序工单数量为1
bean.setQty(1d);
//生成工单号
bean.setWorkOrderNo(getOrderNo(bean));
//发送工单给WMS
List<MesWorkOrderPart> orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms);
//顺序号
bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean));
//生成客户条码
bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser()));
//生成工单零件 工单装配件
insertMesWorkOrder(bean, orderPartList);
//物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
bean.setPartName(mesPart.getPartName());
bean.setUnit(mesPart.getUnit());
//生产时间新增取当天
if (StringUtil.isEmpty(bean.getProduceTime())) {
bean.setProduceTime(TimeTool.getToday());
bean.setProductTime(bean.getProduceTime());
}
bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
bean.setUnCompleteQty(bean.getQty());
bean.setFid(UUID.randomUUID().toString());
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
baseRDao.insert(bean);
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
}
private void insertUnSortWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) {
ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空");
if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0");
}
//校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) {
MesException.throwMesBusiException("产线【%s】类型为【%s】请选择非排序产线", mesWorkCenter.getWorkCenterCode(),
MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType()));
}
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) &&
!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) {
MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识",
bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()
, MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(),
MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue()));
}
bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
//非试制单
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) {
ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空");
//校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(bean);
bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
//获取bom信息
List<MesBom> bomList = mesBomService.findMesBomByPartNoAndBomVersion(bean.getPartNo(), bean.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS
saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(bean, bomList));
}
//物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
bean.setPartName(mesPart.getPartName());
bean.setUnit(mesPart.getUnit());
//生产时间新增取当天
if (StringUtil.isEmpty(bean.getProduceTime())) {
bean.setProduceTime(TimeTool.getToday());
bean.setProductTime(bean.getProduceTime());
}
bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
bean.setUnCompleteQty(bean.getQty());
bean.setFid(UUID.randomUUID().toString());
bean.setWorkOrderNo(getOrderNo(bean));
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
baseRDao.insert(bean);
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
}
private void insertBtoWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) {
ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空");
ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空");
if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0");
}
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
//顺序号
bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean));
//生成工单号
bean.setWorkOrderNo(getOrderNo(bean));
//发送工单给WMS
sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms);
//物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
bean.setPartName(mesPart.getPartName());
bean.setUnit(mesPart.getUnit());
//生产时间新增取当天
if (StringUtil.isEmpty(bean.getProduceTime())) {
bean.setProduceTime(TimeTool.getToday());
bean.setProductTime(bean.getProduceTime());
}
bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
bean.setUnCompleteQty(bean.getQty());
bean.setFid(UUID.randomUUID().toString());
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
//生成WorkOrderSeq
GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ);
List<String> resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList();
bean.setWorkOrderSeq(resultList.get(0));
baseRDao.insert(bean);
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
}
public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) {
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
MesWorkOrderToWms mesWorkOrderToWms = null;
for (MesBom mesBom : mesBomList) {
mesWorkOrderToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id");
BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderToWms.setUnit(mesBom.getUnit());
mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo());
mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName());
@ -2142,7 +2073,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) {
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id");
BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderLogRepository.insert(workOrderLog);
}
public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) {
@ -2469,4 +2400,156 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return workOrderAssemblyList;
}
private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) {
//查询数据
List<MesWorkOrderAssembly> orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderPart> orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderToWms> toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderLog> orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesQueueOrder> queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn());
MesPrintQueue printQueue = getMesPrintQuanOrder(workOrder.getOrganizeCode(), workOrder.getCustSn());
//数据处理
List<MesWorkOrder> newWrkOrderList = new ArrayList<>();
List<MesWorkOrderAssembly> newOrderAssemblyList = new ArrayList<>();
List<MesWorkOrderPart> newOrderPartList = new ArrayList<>();
List<MesWorkOrderToWms> newToWmsList = new ArrayList<>();
List<MesWorkOrderLog> newOrderLogList = new ArrayList<>();
List<MesProduceSn> newProduceSnList = new ArrayList<>();
List<MesQueueOrder> newQueueOrderList = new ArrayList<>();
List<MesPrintQueue> newPrintQueueList = new ArrayList<>();
MesWorkOrderAssembly newOrderAssembly = null;
MesWorkOrderPart newOrderPart = null;
MesWorkOrderToWms newOrderPartToWms = null;
MesWorkOrderLog orderLog = null;
MesProduceSn newProduceSn = null;
MesQueueOrder newQueueOrder = null;
MesPrintQueue newPrintQueue = null;
for (int i = 1; i < generateQty; i++) {
//工单
MesWorkOrder newWorkOrder = new MesWorkOrder();
BeanUtils.copyProperties(workOrder, newWorkOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newWorkOrder.setWorkOrderNo(getOrderNo(newWorkOrder));
newWorkOrder.setProductSeq(newWorkOrder.getProductSeq() + i);
newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(), workOrder.getCreateUser()));
newWorkOrder.setFid(UUID.randomUUID().toString());
newWrkOrderList.add(newWorkOrder);
//
//工单装配件
if (!CollectionUtils.isEmpty(orderAssemblyList)) {
for (MesWorkOrderAssembly assembly : orderAssemblyList) {
newOrderAssembly = new MesWorkOrderAssembly();
BeanUtils.copyProperties(assembly, newOrderAssembly, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderAssembly.setProductSn(newWorkOrder.getWorkOrderNo());
newOrderAssemblyList.add(newOrderAssembly);
}
}
//工单零件
if (!CollectionUtils.isEmpty(orderPartList)) {
for (MesWorkOrderPart part : orderPartList) {
newOrderPart = new MesWorkOrderPart();
BeanUtils.copyProperties(part, newOrderPart, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderPartList.add(newOrderPart);
}
}
//工单发送给WMS数据
if (!CollectionUtils.isEmpty(toWmsList)) {
for (MesWorkOrderToWms toWms : toWmsList) {
newOrderPartToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(toWms, newOrderPartToWms, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newToWmsList.add(newOrderPartToWms);
}
}
//生产工单日志
if (!CollectionUtils.isEmpty(orderLogList)) {
for (MesWorkOrderLog mesWorkOrderLog : orderLogList) {
orderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrderLog, orderLog, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
orderLog.setFid(UUID.randomUUID().toString());
newOrderLogList.add(orderLog);
}
}
//生产队列主表
if (!CollectionUtils.isEmpty(queueOrderList)) {
for (MesQueueOrder queueOrder : queueOrderList) {
newQueueOrder = new MesQueueOrder();
BeanUtils.copyProperties(queueOrder, newQueueOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newQueueOrder.setCustSn(newWorkOrder.getCustSn());
newQueueOrder.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newQueueOrder.setSerialNumber(newWorkOrder.getWorkOrderNo());
newQueueOrder.setProductSn(newWorkOrder.getWorkOrderNo());
newQueueOrder.setProductSeq(newWorkOrder.getProductSeq());
newQueueOrderList.add(newQueueOrder);
}
}
//产品条码表
if (!Objects.isNull(mesProduceSn)) {
newProduceSn = new MesProduceSn();
BeanUtils.copyProperties(mesProduceSn, newProduceSn, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newProduceSn.setCustSn(newWorkOrder.getCustSn());
newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo());
newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo());
newProduceSn.setFid(UUID.randomUUID().toString());
newProduceSnList.add(newProduceSn);
}
//装配目视单打印
if (!Objects.isNull(printQueue)) {
newPrintQueue = new MesPrintQueue();
BeanUtils.copyProperties(printQueue, newPrintQueue, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newPrintQueue.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newPrintQueueList.add(newPrintQueue);
}
}
//数据持久化
baseRDao.saveAll(newWrkOrderList);
if (!CollectionUtils.isEmpty(newOrderAssemblyList)) {
mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList);
}
if (!CollectionUtils.isEmpty(newOrderPartList)) {
mesWorkOrderPartService.insertBatch(newOrderPartList);
}
if (!CollectionUtils.isEmpty(newOrderLogList)) {
workOrderLogService.insertBatch(newOrderLogList);
}
if (!CollectionUtils.isEmpty(newToWmsList)) {
mesWorkOrderToWmsService.insertBatch(newToWmsList);
}
if (!CollectionUtils.isEmpty(newQueueOrderList)) {
queueOrderRao.saveAll(newQueueOrderList);
}
if (!CollectionUtils.isEmpty(newProduceSnList)) {
mesProduceSnService.insertBatch(newProduceSnList);
}
if (!CollectionUtils.isEmpty(newPrintQueueList)) {
printQueueRepository.saveAll(newPrintQueueList);
}
}
public List<MesQueueOrder> findMesQueueOrder(String workOrderNo, String organizeCode) {
if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean);
return queueOrderRao.findByHqlWhere(packBean);
}
public MesPrintQueue getMesPrintQuanOrder(String workOrderNo, String organizeCode) {
if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean);
return printQueueRepository.getByProperty(packBean);
}
private Long getMaxMesWorkOrderProductSeq(MesWorkOrder bean) {
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", orderPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean);
MesWorkOrder workOrder = baseRDao.getByProperty(orderPackBean);
return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1));
}
}

Loading…
Cancel
Save