|
|
|
@ -26,7 +26,6 @@ import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.DateUtilExt;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.model.wms.WmsProductModel;
|
|
|
|
@ -47,7 +46,6 @@ import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Slf4j
|
|
|
|
@ -75,8 +73,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesCustomerPartRepository mesCustomerPartRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesPartSapService iMesPartSapService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesMoveRuleService mesMoveRuleService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao;
|
|
|
|
@ -106,8 +102,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderLogRepository mesWorkOrderLogRepository;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesBomRepository mesBomRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesPartRepository mesPartRDao;
|
|
|
|
@ -172,6 +166,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesConfigService mesConfigService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProductVersionService mesProductVersionService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesWorkOrder insert(MesWorkOrder bean) {
|
|
|
|
|
// 数据校验
|
|
|
|
@ -208,7 +205,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
insertUnSortWorkOrder(bean, mesWorkCenter);
|
|
|
|
|
//bto
|
|
|
|
|
} else {
|
|
|
|
|
insertBtoWorkOrder(bean, mesWorkCenter);
|
|
|
|
|
insertBtoWorkOrder(bean);
|
|
|
|
|
}
|
|
|
|
|
return bean;
|
|
|
|
|
}
|
|
|
|
@ -253,15 +250,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName());
|
|
|
|
|
}
|
|
|
|
|
result.setWorkOrderStatus(bean.getWorkOrderStatus());
|
|
|
|
|
if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()
|
|
|
|
|
&& bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) {
|
|
|
|
|
//校验物料生产版本是否存在
|
|
|
|
|
MesProductVersion mesProductVersion = checkMesProductVersion(result);
|
|
|
|
|
//获取bom信息
|
|
|
|
|
List<MesBom> bomList = mesBomService.findMesBomByPartNoAndBomVersion(result.getPartNo(), result.getOrganizeCode(), mesProductVersion.getAlternativePartList());
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsService.saveMesWorkOrderToWms(result, bomList));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0);
|
|
|
|
@ -479,23 +467,19 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
mesProduceSnRao.insert(mesProduceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrderPart> sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List<MesWorkOrderToWms> saveMesWorkOrderToWms) {
|
|
|
|
|
private List<MesWorkOrderPart> autoPublish(MesWorkOrder item) {
|
|
|
|
|
//非试制单
|
|
|
|
|
List<MesBom> bomList = null;
|
|
|
|
|
MesProductVersion mesProductVersion = null;
|
|
|
|
|
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
|
|
|
|
|
//获取生产版本
|
|
|
|
|
mesProductVersion = getMesProductVersion(item, mesWorkCenter);
|
|
|
|
|
mesProductVersion = getMesProductVersion(item.getOrganizeCode(),item.getPartNo());
|
|
|
|
|
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);
|
|
|
|
|
return isAuto(item, mesProductVersion);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrderPart> isAuto(MesWorkOrder item, List<MesWorkOrderToWms> saveMesWorkOrderToWms, List<MesBom> bomList,MesProductVersion mesProductVersion) {
|
|
|
|
|
private List<MesWorkOrderPart> isAuto(MesWorkOrder item,MesProductVersion mesProductVersion) {
|
|
|
|
|
MesPartProdGroup mesPartProdGroup = null;
|
|
|
|
|
if(StringUtil.isEmpty(item.getPartProdGroupCode())){
|
|
|
|
|
mesPartProdGroup = getMesPartProdGroup(item);
|
|
|
|
@ -514,14 +498,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//自动发布
|
|
|
|
|
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
|
|
|
|
|
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
if(!Objects.isNull(bomList)){
|
|
|
|
|
saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建工单打印队列
|
|
|
|
|
insertPrintQueue(item);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
}
|
|
|
|
@ -569,32 +547,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion checkMesProductVersion(MesWorkOrder item) {
|
|
|
|
|
DdlPackBean ddlPackBean;
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
//DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(item.getProductVersion(), "productVersion", ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (Objects.isNull(mesProductVersion)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion());
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
//DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
|
|
|
|
|
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (Objects.isNull(mesProductVersion)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
|
|
|
|
|
mesWorkCenter.getErpWorkCenter());
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void packPlanTime(MesWorkOrder item, Map<String, List<MesShift>> mesShiftMap) {
|
|
|
|
|
ValidatorBean.checkNotNull(item.getPlanDate(), "计划日期不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空");
|
|
|
|
@ -644,7 +596,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
public void saveMesWorkOrderExcel(List<MesWorkOrder> mesWorkOrderList) {
|
|
|
|
|
MesWorkOrder next = mesWorkOrderList.iterator().next();
|
|
|
|
|
//属性校验&字段填充
|
|
|
|
|
List<MesWorkOrderToWms> mesWorkOrderToWmsList = checkData(mesWorkOrderList, next.getOrganizeCode());
|
|
|
|
|
checkData(mesWorkOrderList, next.getOrganizeCode());
|
|
|
|
|
//BTO序号
|
|
|
|
|
List<String> seqList = new ArrayList<>();
|
|
|
|
|
if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == next.getWorkOrderType()) {
|
|
|
|
@ -701,17 +653,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
|
|
|
|
|
mesWorkOrderLogList.add(workOrderLog);
|
|
|
|
|
}
|
|
|
|
|
//保存发送WMS数据
|
|
|
|
|
if (CollectionUtils.isNotEmpty(mesWorkOrderToWmsList)) {
|
|
|
|
|
mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList);
|
|
|
|
|
}
|
|
|
|
|
//保存工单记录
|
|
|
|
|
if (CollectionUtils.isNotEmpty(mesWorkOrderLogList)) {
|
|
|
|
|
workOrderLogService.insertBatch(mesWorkOrderLogList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrderToWms> checkData(List<MesWorkOrder> mesWorkOrderList, String organizeCode) {
|
|
|
|
|
private void checkData(List<MesWorkOrder> mesWorkOrderList, String organizeCode) {
|
|
|
|
|
MesWorkOrder next = mesWorkOrderList.iterator().next();
|
|
|
|
|
String nowDate = TimeTool.getNowTime(true);
|
|
|
|
|
//获取产线信息
|
|
|
|
@ -733,7 +681,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
try {
|
|
|
|
|
mesCustomerPartMap = BeanMapUtilsExt.getBeanMap(mesCustomerPartRDao, "erpPartNo", organizeCode, partNoList, "客户物料信息");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
mesCustomerPartMap = null;
|
|
|
|
|
}
|
|
|
|
|
//获取物料信息
|
|
|
|
|
Map<String, MesPartSap> mesPartSapMap = BeanMapUtilsExt.getBeanMap(mesPartSapRDao, "partNo", organizeCode, partNoList, "物料信息");
|
|
|
|
@ -769,15 +716,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
if (baseRDao.isExitByHql(orderPackBean)) {
|
|
|
|
|
MesException.throwMesBusiException("单号已存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//BOM信息
|
|
|
|
|
Map<String, List<MesBom>> mesBomMap = new HashMap<>();
|
|
|
|
|
//vin号
|
|
|
|
|
Map<String, String> vinCodeMap = new HashMap<>();
|
|
|
|
|
//零件生产组
|
|
|
|
|
Map<String, MesPartProdGroup> mesPartProdGroupMap = new HashMap<>();
|
|
|
|
|
//发送wms数据
|
|
|
|
|
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
|
|
|
|
|
int index = 0;
|
|
|
|
|
for (MesWorkOrder item : mesWorkOrderList) {
|
|
|
|
|
item.setWorkOrderNo(orderList.get(index));
|
|
|
|
@ -847,8 +789,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
//排序工单数量为1
|
|
|
|
|
item.setQty(1d);
|
|
|
|
|
//发送wms数据
|
|
|
|
|
sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter);
|
|
|
|
|
//自动发布
|
|
|
|
|
autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter);
|
|
|
|
|
} else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
|
|
|
|
|
ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
|
|
|
|
@ -884,7 +826,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
packPlanTime(item, mesShiftMap);
|
|
|
|
|
//状态已发布
|
|
|
|
|
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
|
|
|
|
|
List<MesBom> mesBomList = null;
|
|
|
|
|
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){
|
|
|
|
|
ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空");
|
|
|
|
|
//校验物料生产版本是否存在
|
|
|
|
@ -898,16 +839,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
MesProductVersion mesProductVersion = versionList.iterator().next();
|
|
|
|
|
item.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
|
|
|
|
|
//获取bom信息
|
|
|
|
|
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
|
|
|
|
|
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
|
|
|
|
|
} else {
|
|
|
|
|
//获取bom信息
|
|
|
|
|
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
|
|
|
|
|
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
|
|
|
|
|
}
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空");
|
|
|
|
@ -915,19 +846,17 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
|
|
|
|
|
MesException.throwMesBusiException("生产数量不能小于等于0");
|
|
|
|
|
}
|
|
|
|
|
//发送wms数据
|
|
|
|
|
sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter);
|
|
|
|
|
//自动发布
|
|
|
|
|
autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter);
|
|
|
|
|
}
|
|
|
|
|
item.setUnCompleteQty(item.getQty());
|
|
|
|
|
item.setFid(UUID.randomUUID().toString());
|
|
|
|
|
index++;
|
|
|
|
|
}
|
|
|
|
|
return mesWorkOrderToWmsList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void sendToWms(Map<String, List<MesProductVersion>> mesProductVersionMap, Map<String, List<MesBom>> mesBomMap, Map<String, MesPartProdGroup> mesPartProdGroupMap, List<MesWorkOrderToWms> mesWorkOrderToWmsList, MesWorkOrder item, MesWorkCenter mesWorkCenter) {
|
|
|
|
|
private void autoPublish(Map<String, List<MesProductVersion>> mesProductVersionMap, Map<String, MesPartProdGroup> mesPartProdGroupMap, MesWorkOrder item, MesWorkCenter mesWorkCenter) {
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
List<MesBom> mesBomList = null;
|
|
|
|
|
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){
|
|
|
|
|
//获取生产版本
|
|
|
|
|
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(item.getPartNo());
|
|
|
|
@ -937,19 +866,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersions.iterator().next();
|
|
|
|
|
item.setProductVersion(mesProductVersion.getProductVersion());
|
|
|
|
|
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
|
|
|
|
|
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
|
|
|
|
|
} else {
|
|
|
|
|
//获取bom信息
|
|
|
|
|
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
|
|
|
|
|
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//是否自动发布
|
|
|
|
|
isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList);
|
|
|
|
|
isAuto(mesPartProdGroupMap, item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void isAuto(Map<String, MesPartProdGroup> mesPartProdGroupMap, List<MesWorkOrderToWms> mesWorkOrderToWmsList, MesWorkOrder item, List<MesBom> mesBomList) {
|
|
|
|
|
private void isAuto(Map<String, MesPartProdGroup> mesPartProdGroupMap, MesWorkOrder item) {
|
|
|
|
|
//校验零件生产组信息
|
|
|
|
|
MesPartProdGroup mesPartProdGroup;
|
|
|
|
|
if (mesPartProdGroupMap.containsKey(item.getWorkCenterCode() + item.getPartNo())) {
|
|
|
|
@ -963,10 +885,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//自动发布
|
|
|
|
|
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
|
|
|
|
|
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
if(!Objects.isNull(mesBomList)){
|
|
|
|
|
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
}
|
|
|
|
@ -993,7 +911,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//查询产线信息
|
|
|
|
|
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
//报工类型
|
|
|
|
@ -1093,7 +1011,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion());
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion());
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
//生成条码
|
|
|
|
@ -1161,7 +1079,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
|
|
|
|
|
//保存报工记录 试制单不报工
|
|
|
|
|
if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) {
|
|
|
|
|
mesProductOffLineList.forEach(t->t.setBomTotalSize(mesProductOffLineList.size()));
|
|
|
|
|
mesProductOffLineList.forEach(t->{
|
|
|
|
|
if(Objects.isNull(t.getBomTotalSize())){
|
|
|
|
|
t.setBomTotalSize(mesProductOffLineList.size());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mesProductOffLineService.insertBatch(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
//保存移库记录
|
|
|
|
@ -1215,7 +1137,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
if (StringUtil.isEmpty(model.getSn())) {
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(model);
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(model.getOrganizeCode(),model.getPartNo());
|
|
|
|
|
//获取bom
|
|
|
|
|
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
//生成流水码
|
|
|
|
@ -1502,17 +1424,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
return newMesProductOffLine;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(WmsProductModel model) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderBy(null, null, ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", model.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime,boolean isSort) {
|
|
|
|
|
boolean isItemMove;
|
|
|
|
|
boolean isItemReport;
|
|
|
|
@ -1550,7 +1461,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size()));
|
|
|
|
|
} else if (isItemReport) {
|
|
|
|
|
String reportSn = String.valueOf(snowflakeIdMaker.nextId());
|
|
|
|
|
MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion());
|
|
|
|
|
MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion());
|
|
|
|
|
List<MesBom> bomList = null;
|
|
|
|
|
try {
|
|
|
|
|
bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList());
|
|
|
|
@ -1559,10 +1470,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//bom下的子节汇报
|
|
|
|
|
if (!CollectionUtils.isEmpty(bomList)) {
|
|
|
|
|
for (MesBom bom : bomList) {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime));
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true,bomList.size(), nowTime));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime));
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//移库
|
|
|
|
@ -1580,7 +1491,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//bom下的子节汇报,总成也需要汇报
|
|
|
|
|
if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) {
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime));
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1611,20 +1522,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
return resultList.iterator().next();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion);
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
|
|
|
|
|
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) {
|
|
|
|
|
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,Integer bomSize,String nowTime) {
|
|
|
|
|
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
|
|
|
|
|
newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
|
|
|
|
@ -1654,6 +1553,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
newMesProductOffLine.setDescription(nowTime);
|
|
|
|
|
newMesProductOffLine.setBomTotalSize(bomSize);
|
|
|
|
|
newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString());
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser());
|
|
|
|
|
return newMesProductOffLine;
|
|
|
|
@ -1817,7 +1717,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
|
|
|
|
|
//校验标识
|
|
|
|
|
//若工单类型为排序
|
|
|
|
|
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
|
|
|
|
|
if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
|
|
|
|
|
//校验产线类型和工单类型是否匹配
|
|
|
|
|
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) {
|
|
|
|
@ -1826,23 +1725,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//校验物料生产版本是否存在
|
|
|
|
|
MesProductVersion mesProductVersion = checkMesProductVersion(item);
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(item.getOrganizeCode(), item.getPartNo(), item.getProductVersion());
|
|
|
|
|
item.setProductVersion(mesProductVersion.getProductVersion());
|
|
|
|
|
//获取bom信息
|
|
|
|
|
List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
|
|
|
|
|
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
item.setFid(UUID.randomUUID().toString());
|
|
|
|
|
ConvertBean.serviceModelInitialize(item, userName);
|
|
|
|
|
MesWorkOrder mesWorkOrder = workOrderRepository.insert(item);
|
|
|
|
|
//保存发送WMS数据
|
|
|
|
|
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
|
|
|
|
|
mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
saveMesWorkOrderLog(mesWorkOrder);
|
|
|
|
|
mesWorkOrderList.add(mesWorkOrder);
|
|
|
|
|
}
|
|
|
|
@ -1880,13 +1771,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
|
|
|
|
|
//排序工单数量为1
|
|
|
|
|
bean.setQty(1d);
|
|
|
|
|
//生成工单号
|
|
|
|
|
bean.setWorkOrderNo(getOrderNo(bean));
|
|
|
|
|
//发送工单给WMS
|
|
|
|
|
List<MesWorkOrderPart> orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms);
|
|
|
|
|
//自动发布
|
|
|
|
|
List<MesWorkOrderPart> orderPartList = autoPublish(bean);
|
|
|
|
|
//顺序号
|
|
|
|
|
bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean));
|
|
|
|
|
//生成客户条码
|
|
|
|
@ -1895,7 +1785,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
insertMesWorkOrder(bean, orderPartList);
|
|
|
|
|
|
|
|
|
|
//物料名称不存在,从物料信息中获取
|
|
|
|
|
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
|
|
|
|
|
MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
|
|
|
|
|
bean.setPartName(mesPart.getPartName());
|
|
|
|
|
bean.setUnit(mesPart.getUnit());
|
|
|
|
|
//生产时间新增取当天
|
|
|
|
@ -1906,11 +1796,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
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());
|
|
|
|
@ -1941,20 +1826,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName());
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(bean.getOrganizeCode(), bean.getPartNo(), bean.getProductVersion());
|
|
|
|
|
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());
|
|
|
|
|
MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
|
|
|
|
|
bean.setPartName(mesPart.getPartName());
|
|
|
|
|
bean.setUnit(mesPart.getUnit());
|
|
|
|
|
//生产时间新增取当天
|
|
|
|
@ -1966,31 +1846,25 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
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) {
|
|
|
|
|
private void insertBtoWorkOrder(MesWorkOrder bean) {
|
|
|
|
|
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);
|
|
|
|
|
//自动发布
|
|
|
|
|
autoPublish(bean);
|
|
|
|
|
//物料名称不存在,从物料信息中获取
|
|
|
|
|
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
|
|
|
|
|
MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
|
|
|
|
|
bean.setPartName(mesPart.getPartName());
|
|
|
|
|
bean.setUnit(mesPart.getUnit());
|
|
|
|
|
//生产时间新增取当天
|
|
|
|
@ -2001,11 +1875,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
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();
|
|
|
|
@ -2014,24 +1883,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
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,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
|
|
|
|
|
mesWorkOrderToWms.setUnit(mesBom.getUnit());
|
|
|
|
|
mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName());
|
|
|
|
|
mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit());
|
|
|
|
|
mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty()));
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser());
|
|
|
|
|
mesWorkOrderToWmsList.add(mesWorkOrderToWms);
|
|
|
|
|
}
|
|
|
|
|
return mesWorkOrderToWmsList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) {
|
|
|
|
|
|
|
|
|
|
//查询物料信息
|
|
|
|
@ -2050,7 +1901,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
|
|
|
|
@ -2095,19 +1946,79 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
mesProductOffLineRDao.saveAll(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) {
|
|
|
|
|
//修改工单,需要重新同步
|
|
|
|
|
mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesWorkOrder, userName);
|
|
|
|
|
workOrderRepository.update(mesWorkOrder);
|
|
|
|
|
//保存记录
|
|
|
|
|
saveMesWorkOrderLog(mesWorkOrder);
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doSendMesWorkOrderToWms(String organizeCode, Integer pageSize, String userName) {
|
|
|
|
|
List<MesWorkOrder> mesWorkOrderListToWms = getMesWorkOrderListToWms(organizeCode, pageSize);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesWorkOrderListToWms)) {
|
|
|
|
|
log.info("工厂:{}不存在未推送的工单", organizeCode);
|
|
|
|
|
}
|
|
|
|
|
//获取物料信息
|
|
|
|
|
Map<String, MesPart> partMap = BeanMapUtilsExt.getBeanMap(mesPartRDao, "partNo", organizeCode, mesWorkOrderListToWms.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()), "物料信息");
|
|
|
|
|
// 根据零件加生产版本分组
|
|
|
|
|
Map<String, List<MesWorkOrder>> mesWorkOrderListToWmsMap = mesWorkOrderListToWms.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).toString()));
|
|
|
|
|
|
|
|
|
|
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
|
|
|
|
|
List<String> workOrderNoList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, List<MesWorkOrder>> workOrderMap : mesWorkOrderListToWmsMap.entrySet()) {
|
|
|
|
|
List<MesBom> bomExpendList = null;
|
|
|
|
|
List<MesBom> bomList = null;
|
|
|
|
|
MesProductVersion productVersion = null;
|
|
|
|
|
try {
|
|
|
|
|
productVersion = getMesProductVersion(organizeCode, workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], workOrderMap.getKey().split(MesExtConstWords.COMMA)[1]);
|
|
|
|
|
bomList = findMesBomByPartNoAndBomVersion(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], organizeCode, productVersion.getAlternativePartList());
|
|
|
|
|
} catch (ImppBusiException e) {
|
|
|
|
|
log.info("工厂:{} 信息{}",organizeCode,e.getErrorDetail());
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//数据处理
|
|
|
|
|
for (MesWorkOrder workOrder : workOrderMap.getValue()) {
|
|
|
|
|
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomList, userName, false));
|
|
|
|
|
workOrderNoList.add(workOrder.getWorkOrderNo());
|
|
|
|
|
//BOT工单只拆一层
|
|
|
|
|
try {
|
|
|
|
|
if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == workOrder.getWorkOrderType() && partMap.containsKey(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0])) {
|
|
|
|
|
bomExpendList = Objects.isNull(bomExpendList) ? findBomList(organizeCode, partMap.get(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]), productVersion.getAlternativePartList()) : bomExpendList;
|
|
|
|
|
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomExpendList, userName, true));
|
|
|
|
|
}else {
|
|
|
|
|
log.info("工厂:{}BTO工单:{}物料:{}信息不存在", organizeCode, workOrder.getWorkOrderNo(), workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]);
|
|
|
|
|
}
|
|
|
|
|
} catch (ImppBusiException e) {
|
|
|
|
|
log.info("工单:{} BOT工单只拆一层异常:{}",workOrder.getWorkOrderNo(),e.getErrorDetail());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//数据持久化
|
|
|
|
|
mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList);
|
|
|
|
|
//更新工单状态为已同步
|
|
|
|
|
updateMesWorkOrder(organizeCode, userName, workOrderNoList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateMesWorkOrder(String organizeCode, String userName, List<String> workOrderNoList) {
|
|
|
|
|
if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return;
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
if (workOrderNoList.size() == MesExtConstWords.ONE) {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
|
} else {
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
|
}
|
|
|
|
|
baseRDao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "syncToWms"}, new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.VALID}, packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
|
|
|
|
|
BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
|
|
|
|
|
mesWorkOrderLogRepository.insert(workOrderLog);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrder> getMesWorkOrderListToWms(String organizeCode, Integer pageSize) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "syncToWms", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean);
|
|
|
|
|
return baseRDao.findByHqlTopWhere(packBean, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) {
|
|
|
|
|
List<MesBom> bomData = new ArrayList<>();
|
|
|
|
|
// 递归展开 BOM
|
|
|
|
@ -2445,7 +2356,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//查询数据
|
|
|
|
|
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());
|
|
|
|
@ -2454,14 +2364,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
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;
|
|
|
|
@ -2495,15 +2403,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
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) {
|
|
|
|
@ -2557,9 +2456,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
if (!CollectionUtils.isEmpty(newOrderLogList)) {
|
|
|
|
|
workOrderLogService.insertBatch(newOrderLogList);
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(newToWmsList)) {
|
|
|
|
|
mesWorkOrderToWmsService.insertBatch(newToWmsList);
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(newQueueOrderList)) {
|
|
|
|
|
queueOrderRao.saveAll(newQueueOrderList);
|
|
|
|
|
}
|
|
|
|
@ -2600,4 +2496,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) {
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion);
|
|
|
|
|
if (Objects.isNull(mesProductVersion)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(String organizeCode, String partNo) {
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, null);
|
|
|
|
|
if (Objects.isNull(mesProductVersion)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", partNo);
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|