|
|
|
@ -7,7 +7,6 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
|
|
|
|
|
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.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
@ -154,8 +153,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean);
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(workOrder.getWorkOrderNo(), "workOrderNo", packBean);
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus())) DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean);
|
|
|
|
|
else DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean);
|
|
|
|
|
if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus()))
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean);
|
|
|
|
|
else
|
|
|
|
|
DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean);
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(workOrder.getStartTimeStart(), "planStartTime", packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(workOrder.getStartTimeEnd(), "planStartTime", packBean);
|
|
|
|
@ -170,31 +171,31 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
public void doProductReport(List<MesProduceSn> mesProduceSnList, String organizeCode, String userName) {
|
|
|
|
|
//新增初始化 todo
|
|
|
|
|
Map<String, List<MesProduceSn>> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo));
|
|
|
|
|
Map<String,MesPart> mesPartMap = new HashMap<>();
|
|
|
|
|
Map<String, MesPart> mesPartMap = new HashMap<>();
|
|
|
|
|
MesPart mesPart;
|
|
|
|
|
//查询工单状态
|
|
|
|
|
Integer[] orderStatus =new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()};
|
|
|
|
|
Integer[] orderStatus = new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()};
|
|
|
|
|
for (Map.Entry<String, List<MesProduceSn>> mesProduceSn : mesWorkOrderMap.entrySet()) {
|
|
|
|
|
List<MesProduceSn> mesWorkOrderList = mesProduceSn.getValue();
|
|
|
|
|
//获取物料信息
|
|
|
|
|
if(mesPartMap.containsKey(mesProduceSn.getKey())){
|
|
|
|
|
if (mesPartMap.containsKey(mesProduceSn.getKey())) {
|
|
|
|
|
mesPart = mesPartMap.get(mesProduceSn.getKey());
|
|
|
|
|
}else{
|
|
|
|
|
} else {
|
|
|
|
|
//查询物料信息
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProduceSn.getKey(), "partNo", ddlPackBean);
|
|
|
|
|
mesPart = mesPartRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if(Objects.isNull(mesPart)){
|
|
|
|
|
if (Objects.isNull(mesPart)) {
|
|
|
|
|
throw new ImppBusiException(String.format("物料【%s】信息不存在", mesProduceSn.getKey()));
|
|
|
|
|
}
|
|
|
|
|
mesPartMap.put(mesProduceSn.getKey(),mesPart);
|
|
|
|
|
mesPartMap.put(mesProduceSn.getKey(), mesPart);
|
|
|
|
|
}
|
|
|
|
|
//根据物料获取已发布的工单
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackArray(orderStatus, "workOrderStatus", ddlPackBean);
|
|
|
|
|
MesWorkOrder oldMesWorkOrder = workOrderRepository.getByProperty(ddlPackBean);
|
|
|
|
|
if(Objects.isNull(oldMesWorkOrder)){
|
|
|
|
|
if (Objects.isNull(oldMesWorkOrder)) {
|
|
|
|
|
throw new ImppBusiException(String.format("物料【%s】状态未已发布的工单信息不存在", mesPart.getPartNo()));
|
|
|
|
|
}
|
|
|
|
|
//查询工作中心
|
|
|
|
@ -238,13 +239,14 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
} else {
|
|
|
|
|
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
|
|
|
|
|
}
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldMesWorkOrder,userName);
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName);
|
|
|
|
|
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
|
|
|
|
|
workOrderExtService.update(oldMesWorkOrder);
|
|
|
|
|
//保存数据
|
|
|
|
|
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
|
for (MesProduceSn produceSn : mesWorkOrderList) {
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
|
|
|
|
@ -266,7 +268,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
newMesProductOffLine.setDescription(nowTime);
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, userName);
|
|
|
|
|
mesProductOffLineList.add(newMesProductOffLine);
|
|
|
|
|
}
|
|
|
|
@ -274,7 +276,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
mesProductOffLineRDao.saveAll(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) {
|
|
|
|
|
|
|
|
|
|
public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName, MesWorkOrder mesWorkOrderDb) {
|
|
|
|
|
|
|
|
|
|
//查询物料信息
|
|
|
|
|
DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
|
|
|
|
@ -294,11 +297,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
|
|
|
|
|
LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo());
|
|
|
|
|
//更新工单
|
|
|
|
|
// updateMesWorkOrder(mesWorkOrderDb, userName );
|
|
|
|
|
// updateMesWorkOrder(mesWorkOrderDb, userName );
|
|
|
|
|
|
|
|
|
|
//保存数据
|
|
|
|
|
// List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
@ -307,7 +310,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
// }
|
|
|
|
|
// mesProductOffLineService.insertBatch(mesProductOffLineList);
|
|
|
|
|
|
|
|
|
|
LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(),mesProductionRecordList.size());
|
|
|
|
|
LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(), mesProductionRecordList.size());
|
|
|
|
|
//保存数据
|
|
|
|
|
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
@ -340,7 +343,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
mesProductOffLineRDao.saveAll(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) {
|
|
|
|
|
|
|
|
|
|
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName) {
|
|
|
|
|
//修改工单,需要重新同步
|
|
|
|
|
mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesWorkOrder, userName);
|
|
|
|
@ -349,11 +353,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
//保存记录
|
|
|
|
|
saveMesWorkOrderLog(mesWorkOrder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
|
|
|
|
|
BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id");
|
|
|
|
|
mesWorkOrderLogRepository.insert(workOrderLog);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) {
|
|
|
|
|
List<MesBom> bomData = new ArrayList<>();
|
|
|
|
|
// 递归展开 BOM
|
|
|
|
@ -391,6 +397,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
// 返回汇总数据
|
|
|
|
|
return new ArrayList<>(summaryBomMap.values());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 递归展开 BOM
|
|
|
|
|
*
|
|
|
|
@ -399,7 +406,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
* @param bomData 存放 BOM 数据的集合
|
|
|
|
|
*/
|
|
|
|
|
private void expendBomChild(String organizeCode, String partNo, String bomVersion, List<MesBom> bomData) {
|
|
|
|
|
List<MesBom> bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion);
|
|
|
|
|
List<MesBom> bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion);
|
|
|
|
|
|
|
|
|
|
for (MesBom item : bomDetails) {
|
|
|
|
|
MesBom newItem = new MesBom();
|
|
|
|
@ -418,6 +425,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
|
|
|
|
@ -432,6 +440,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
//如果存在多个bomCode取最新的一个
|
|
|
|
|
return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
@ -450,11 +459,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean);
|
|
|
|
|
// DdlPreparedPack.getStringEqualPack(sn, "custSn", ddlPackBean);
|
|
|
|
|
productionRecordRao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true)},ddlPackBean);
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true)}, ddlPackBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(propagation= Propagation.REQUIRES_NEW,isolation= Isolation.READ_COMMITTED,readOnly = false,rollbackFor = Exception.class)
|
|
|
|
|
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, rollbackFor = Exception.class)
|
|
|
|
|
public void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) {
|
|
|
|
|
//新增初始化 todo
|
|
|
|
|
// 根据
|
|
|
|
@ -467,7 +476,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", ddlPackBean);
|
|
|
|
|
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "reportStatus"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), productionRecord.getReportStatus()},ddlPackBean);
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), productionRecord.getReportStatus()}, ddlPackBean);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
LOGGER.error("报工条码:{}找不到加工单", productionRecord.getProductSn());
|
|
|
|
@ -476,10 +485,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
report(productionRecord, organizeCode, userName, oldMesWorkOrderList);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e) {
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
String msg = e.getMessage();
|
|
|
|
|
if (e instanceof ImppBusiException) {
|
|
|
|
|
if (e instanceof ImppBusiException) {
|
|
|
|
|
msg = ((ImppBusiException) e).getErrorMsg();
|
|
|
|
|
}
|
|
|
|
|
e.printStackTrace();
|
|
|
|
@ -487,8 +495,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
productionRecordService.updateProductionRecord(organizeCode, userName, productionRecord.getId(), msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(propagation= Propagation.REQUIRES_NEW,isolation= Isolation.READ_COMMITTED,readOnly = false,rollbackFor = Exception.class)
|
|
|
|
|
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, rollbackFor = Exception.class)
|
|
|
|
|
public void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) {
|
|
|
|
|
//新增初始化 todo
|
|
|
|
|
// 根据
|
|
|
|
@ -503,7 +512,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
report(productionRecord, organizeCode, userName, oldMesWorkOrders);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
String msg = e.getMessage();
|
|
|
|
|
if (e instanceof ImppBusiException) {
|
|
|
|
|
if (e instanceof ImppBusiException) {
|
|
|
|
|
msg = ((ImppBusiException) e).getErrorMsg();
|
|
|
|
|
}
|
|
|
|
|
e.printStackTrace();
|
|
|
|
@ -515,6 +524,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取最优的工单
|
|
|
|
|
*
|
|
|
|
|
* @param oldMesWorkOrderList
|
|
|
|
|
* @param mesWorkCenter
|
|
|
|
|
* @return
|
|
|
|
@ -528,13 +538,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
for (MesWorkOrder mesWorkOrder : oldMesWorkOrderList) {
|
|
|
|
|
double reportdQty = MathOperation.add(1, mesWorkOrder.getReportedQty());
|
|
|
|
|
// 如果是允许,则需要判断是否超过比例
|
|
|
|
|
if (reportdQty <= mesWorkOrder.getQty()) {
|
|
|
|
|
if (reportdQty <= mesWorkOrder.getQty()) {
|
|
|
|
|
return mesWorkOrder;
|
|
|
|
|
}
|
|
|
|
|
if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCenter.getIsCheckOrderQty())) {
|
|
|
|
|
if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCenter.getIsCheckOrderQty())) {
|
|
|
|
|
double remainQty = reportdQty - mesWorkOrder.getQty();
|
|
|
|
|
double rate = remainQty / mesWorkOrder.getQty();
|
|
|
|
|
if (rate > mesWorkCenter.getOrderRate()/100) {
|
|
|
|
|
if (rate > mesWorkCenter.getOrderRate() / 100) {
|
|
|
|
|
continue;
|
|
|
|
|
} else {
|
|
|
|
|
return mesWorkOrder;
|
|
|
|
@ -542,10 +552,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List<MesWorkOrder> oldMesWorkOrderList) {
|
|
|
|
|
private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List<MesWorkOrder> oldMesWorkOrderList) {
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean;
|
|
|
|
@ -559,7 +569,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
MesWorkOrder oldMesWorkOrder = getBestWorkOrder(productionRecord, oldMesWorkOrderList, mesWorkCenter);
|
|
|
|
|
if (oldMesWorkOrder == null) {
|
|
|
|
|
LOGGER.error(String.format("未找到匹配的加工单, 条码=%s",productionRecord.getCustSn()));
|
|
|
|
|
LOGGER.error(String.format("未找到匹配的加工单, 条码=%s", productionRecord.getCustSn()));
|
|
|
|
|
return;
|
|
|
|
|
//throw new ImppBusiException(String.format("未找到匹配的加工单"));
|
|
|
|
|
}
|
|
|
|
@ -591,8 +601,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在",
|
|
|
|
|
productionRecord.getPartNo(), mesProductVersion.getProductVersion()));
|
|
|
|
|
}
|
|
|
|
|
oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1);
|
|
|
|
|
LOGGER.info("工单报工原数量【{}】", oldMesWorkOrder.getReportedQty());
|
|
|
|
|
oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1);
|
|
|
|
|
LOGGER.info("工单报工原数量【{}】", oldMesWorkOrder.getReportedQty());
|
|
|
|
|
oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty()));
|
|
|
|
|
if (StringUtils.isEmpty(productionRecord.getWorkOrderNo())) {
|
|
|
|
|
oldMesWorkOrder.setCompleteQty(oldMesWorkOrder.getReportedQty());
|
|
|
|
@ -606,10 +616,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
|
|
|
|
|
if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) {
|
|
|
|
|
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
} else {
|
|
|
|
|
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
|
|
|
|
|
}
|
|
|
|
|
LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty());
|
|
|
|
|
LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty());
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName);
|
|
|
|
|
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
|
|
|
|
|
workOrderExtService.update(oldMesWorkOrder);
|
|
|
|
@ -622,10 +632,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
MesBom bom = new MesBom();
|
|
|
|
|
bom.setPartNo(mesBom.getPartNo());
|
|
|
|
|
bom.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
return bom;
|
|
|
|
|
return bom;
|
|
|
|
|
}));
|
|
|
|
|
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
|
|
|
|
|
MesBom mesBom = entry.getValue().get(0);
|
|
|
|
|
MesBom mesBom = entry.getValue().get(0);
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName());
|
|
|
|
@ -657,20 +667,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", snDdlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", snDdlPackBean);
|
|
|
|
|
|
|
|
|
|
mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()},snDdlPackBean);
|
|
|
|
|
mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()}, snDdlPackBean);
|
|
|
|
|
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", packBean);
|
|
|
|
|
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo", "reportStatus"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()},packBean);
|
|
|
|
|
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo", "reportStatus"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()}, packBean);
|
|
|
|
|
|
|
|
|
|
LOGGER.info("条码【{}】报工成功,报工工单【{}】",productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo());
|
|
|
|
|
LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取对应的工单
|
|
|
|
|
*
|
|
|
|
|
* @param productionRecord
|
|
|
|
|
* @param organizeCode
|
|
|
|
|
* @return
|
|
|
|
@ -695,7 +706,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
|
|
|
|
|
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (Objects.isNull(mesWorkCenter)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode);
|
|
|
|
|
MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<MesShift> shiftList = mesShiftService.queryMesShift(organizeCode, workCenterCode);
|
|
|
|
@ -703,13 +714,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
if (CollectionUtils.isEmpty(shiftList)) {
|
|
|
|
|
MesPcnException.throwFlowException(String.format("班次信息未维护,产线=%s"), workCenterCode);
|
|
|
|
|
}
|
|
|
|
|
List<MesShift> shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList());
|
|
|
|
|
List<MesShift> shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
MesShift currentShift = shifts.stream().filter(mesShift -> Objects.equals(mesShift.getShiftCode(), shiftCode)).findFirst().orElse(null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String orderDate = productionRecord.getLotNo();
|
|
|
|
|
if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0){
|
|
|
|
|
if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) {
|
|
|
|
|
// 如果比0点大,需要找日期前一天的班次的工单号,如果是0点前,date =lotNO 如果是0点后,则找lot的前一天
|
|
|
|
|
int hours = transfer(productionRecord.getCompleteDateTime()).getHours();
|
|
|
|
|
if (hours < 12) {
|
|
|
|
@ -727,8 +738,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
// 如果找不到则再根据计划开始时间找
|
|
|
|
|
if (CollectionUtils.isEmpty(list)) {
|
|
|
|
|
list = oldMesWorkOrders.stream().filter(workOrder ->!StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) &&
|
|
|
|
|
transfer(productionRecord.getCompleteDateTime()).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(productionRecord.getCompleteDateTime()).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
|
|
|
|
|
list = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) &&
|
|
|
|
|
transfer(productionRecord.getCompleteDateTime()).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(productionRecord.getCompleteDateTime()).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
workOrders = list;
|
|
|
|
@ -748,16 +759,16 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
} else {
|
|
|
|
|
date = getDate(productionRecord.getLotNo(), 0);
|
|
|
|
|
}
|
|
|
|
|
String endTime = date + " " +currentShift.getStartTime();
|
|
|
|
|
String startTime = date + " " +currentShift.getEndTime();
|
|
|
|
|
String endTime = date + " " + currentShift.getStartTime();
|
|
|
|
|
String startTime = date + " " + currentShift.getEndTime();
|
|
|
|
|
|
|
|
|
|
workOrders = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) &&
|
|
|
|
|
transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// 早班或者中班 则找当天非当前班次的最早单号
|
|
|
|
|
String startTime = date + " " +currentShift.getEndTime();
|
|
|
|
|
String endTime = getDate(date, 2) + " " +currentShift.getStartTime();
|
|
|
|
|
String startTime = date + " " + currentShift.getEndTime();
|
|
|
|
|
String endTime = getDate(date, 2) + " " + currentShift.getStartTime();
|
|
|
|
|
for (MesWorkOrder workOrder : oldMesWorkOrders) {
|
|
|
|
|
if (transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()) {
|
|
|
|
|
break;
|
|
|
|
@ -799,26 +810,27 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* flag = 1 减少 1天, = 2 加一天
|
|
|
|
|
*
|
|
|
|
|
* @param lotNo
|
|
|
|
|
* @param flag
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String getDate(String lotNo, int flag) {
|
|
|
|
|
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
public String getDate(String lotNo, int flag) {
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
Date d = null;
|
|
|
|
|
try {
|
|
|
|
|
d = df.parse(lotNo);
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
Calendar cal=Calendar.getInstance();
|
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
|
cal.setTime(d);
|
|
|
|
|
if (flag == 1) {
|
|
|
|
|
cal.add(Calendar.DATE, -1); //减1天
|
|
|
|
|
} else if (flag == 2) {
|
|
|
|
|
cal.add(Calendar.DATE, 1); //加1天
|
|
|
|
|
}
|
|
|
|
|
return df.format(cal.getTime()).substring(0, 10);
|
|
|
|
|
return df.format(cal.getTime()).substring(0, 10);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) {
|
|
|
|
@ -834,14 +846,15 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProductionRecord> getUnReportMesProduceSn(String organizeCode) {
|
|
|
|
|
|
|
|
|
|
//1.获取生产加工记录production_record表中,report_status为待汇报状态的工单
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList());
|
|
|
|
|
DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getIsNull("workOrderNo",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackList(statusList, "reportStatus", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getIsNull("workOrderNo", ddlPackBean);
|
|
|
|
|
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(workCenterCodes)) {
|
|
|
|
@ -877,8 +890,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
//1.获取生产加工记录production_record表中,report_status为待汇报状态的工单
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList());
|
|
|
|
|
DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getIsNotNull("workOrderNo",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackList(statusList, "reportStatus", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean);
|
|
|
|
|
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
|
|
|
|
|
//String workCenterCodes ="B19CK01A";
|
|
|
|
|
if (!StringUtils.isEmpty(workCenterCodes)) {
|
|
|
|
@ -912,40 +925,41 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProductionRecord> getPreDayReportMesProductionRecord(String organizeCode,List<MesShift> mesShiftList, String workCenterCode ) {
|
|
|
|
|
public List<MesProductionRecord> getPreDayReportMesProductionRecord(String organizeCode, List<MesShift> mesShiftList, String workCenterCode) {
|
|
|
|
|
|
|
|
|
|
//1.获取生产加工记录production_record表中,report_status为待汇报状态的工单
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
|
|
|
|
|
// DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackList(
|
|
|
|
|
Arrays.asList(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),
|
|
|
|
|
MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()) ,"reportStatus",ddlPackBean);
|
|
|
|
|
MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()), "reportStatus", ddlPackBean);
|
|
|
|
|
List<MesShift> collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("10")).collect(Collectors.toList());
|
|
|
|
|
String startTime=" 08:00:00";
|
|
|
|
|
if(!CollectionUtils.isEmpty(collect)){
|
|
|
|
|
MesShift mesShift= collect.get(0);
|
|
|
|
|
startTime= StringUtil.isEmpty(mesShift.getStartTime())?" 08:00:00":" "+mesShift.getStartTime();
|
|
|
|
|
String startTime = " 08:00:00";
|
|
|
|
|
if (!CollectionUtils.isEmpty(collect)) {
|
|
|
|
|
MesShift mesShift = collect.get(0);
|
|
|
|
|
startTime = StringUtil.isEmpty(mesShift.getStartTime()) ? " 08:00:00" : " " + mesShift.getStartTime();
|
|
|
|
|
}
|
|
|
|
|
//获取前一天的早班到当天早班的区间的所有加工记录,统计个数
|
|
|
|
|
DdlPreparedPack.timeBuilder(
|
|
|
|
|
new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1)) + startTime,
|
|
|
|
|
new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)) + startTime,
|
|
|
|
|
TimeTool.getToday() + startTime,
|
|
|
|
|
"completeDateTime", ddlPackBean, false);
|
|
|
|
|
|
|
|
|
|
return productionRecordRao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
return productionRecordRao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProduceSn> getPreDayReportMesProduceSn(String organizeCode,List<MesProductionRecord> mesProductionRecordList ) {
|
|
|
|
|
public List<MesProduceSn> getPreDayReportMesProduceSn(String organizeCode, List<MesProductionRecord> mesProductionRecordList) {
|
|
|
|
|
DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()),
|
|
|
|
|
"productSn",snPackBean);
|
|
|
|
|
"productSn", snPackBean);
|
|
|
|
|
DdlPreparedPack.getIsNotNull("workCenterCode", snPackBean);
|
|
|
|
|
return mesProduceSnRao.findByHqlWhere(snPackBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doProductReport(MesWorkOrder mesWorkOrder,String userName) {
|
|
|
|
|
public void doProductReport(MesWorkOrder mesWorkOrder, String userName) {
|
|
|
|
|
MesWorkOrder mesWorkOrderDb = mesWorkOrderRDao.getById(mesWorkOrder.getId());
|
|
|
|
|
if (Objects.isNull(mesWorkOrderDb)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId());
|
|
|
|
@ -978,8 +992,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
|
|
|
|
|
}
|
|
|
|
|
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
|
|
|
|
|
double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()),mesWorkOrderDb.getQty());
|
|
|
|
|
if (rate > MathOperation.div(workCenter.getOrderRate(),100)) {
|
|
|
|
|
double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty());
|
|
|
|
|
if (rate > MathOperation.div(workCenter.getOrderRate(), 100)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate());
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
@ -990,18 +1004,19 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty());
|
|
|
|
|
mesWorkOrderDb.setRemark(mesWorkOrder.getRemark());
|
|
|
|
|
String sn = getOrderNo(mesWorkOrder,mesPart,userName);
|
|
|
|
|
String sn = getOrderNo(mesWorkOrder, mesPart, userName);
|
|
|
|
|
//更新工单
|
|
|
|
|
updateMesWorkOrder(mesWorkOrderDb,userName);
|
|
|
|
|
updateMesWorkOrder(mesWorkOrderDb, userName);
|
|
|
|
|
//记录条码表&加工记录表
|
|
|
|
|
//insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb);
|
|
|
|
|
insertMesProduceSn(mesPart, sn, userName, mesWorkOrder);
|
|
|
|
|
//试制单不报工
|
|
|
|
|
if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){
|
|
|
|
|
if (Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())) {
|
|
|
|
|
//保存数据
|
|
|
|
|
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom));
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, nowTime));
|
|
|
|
|
}
|
|
|
|
|
mesProductOffLineRDao.saveAll(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
@ -1072,9 +1087,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList, String organizeCode, String userName) {
|
|
|
|
|
List<MesWorkOrder> mesWorkOrderList=new ArrayList<>();
|
|
|
|
|
Map<String, List<MesProductionRecord>> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() +"="+ sn.getPartNo()));
|
|
|
|
|
public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName) {
|
|
|
|
|
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
|
|
|
|
|
Map<String, List<MesProductionRecord>> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo()));
|
|
|
|
|
for (Map.Entry<String, List<MesProductionRecord>> stringListEntry : mesProductionRecordListMap.entrySet()) {
|
|
|
|
|
List<MesProductionRecord> value = stringListEntry.getValue();
|
|
|
|
|
MesProductionRecord mesProductionRecord = value.get(0);
|
|
|
|
@ -1086,9 +1101,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
|
|
|
|
|
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (Objects.isNull(mesWorkCenter)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode);
|
|
|
|
|
MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode);
|
|
|
|
|
}
|
|
|
|
|
MesWorkOrder item=new MesWorkOrder();
|
|
|
|
|
MesWorkOrder item = new MesWorkOrder();
|
|
|
|
|
item.setOrganizeCode(organizeCode);
|
|
|
|
|
item.setWorkCenterCode(workCenterCode);
|
|
|
|
|
item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter());
|
|
|
|
@ -1096,21 +1111,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
item.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue());
|
|
|
|
|
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue());
|
|
|
|
|
List<MesShift> collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("20")).collect(Collectors.toList());
|
|
|
|
|
MesShift mesShift= collect.get(0);
|
|
|
|
|
MesShift mesShift = collect.get(0);
|
|
|
|
|
item.setShiftCode(mesShift.getShiftCode());
|
|
|
|
|
item.setShiftName(mesShift.getShiftName());
|
|
|
|
|
String today = TimeTool.getToday();
|
|
|
|
|
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1));
|
|
|
|
|
item.setPlanStartTime(dayBefore+" "+mesShift.getStartTime());
|
|
|
|
|
item.setPlanEndTime(today+" "+mesShift.getEndTime());
|
|
|
|
|
item.setPlanStartTime(dayBefore + " " + mesShift.getStartTime());
|
|
|
|
|
item.setPlanEndTime(today + " " + mesShift.getEndTime());
|
|
|
|
|
|
|
|
|
|
//生成工单号
|
|
|
|
|
List<String> orderList=new ArrayList<>();
|
|
|
|
|
List<String> orderList = new ArrayList<>();
|
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_CENTER_ORDER_NO");
|
|
|
|
|
genSerialNoModel.setPartNo(workCenterCode);
|
|
|
|
|
orderList = syncFuncService.syncSerialNo(genSerialNoModel,userName, organizeCode, 1).getResultList();
|
|
|
|
|
orderList = syncFuncService.syncSerialNo(genSerialNoModel, userName, organizeCode, 1).getResultList();
|
|
|
|
|
|
|
|
|
|
String orderNo = "A-"+orderList.get(0);
|
|
|
|
|
String orderNo = "A-" + orderList.get(0);
|
|
|
|
|
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean);
|
|
|
|
|
if (mesWorkOrderRDao.isExitByHql(orderPackBean)) {
|
|
|
|
@ -1141,7 +1156,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
MesProductVersion mesProductVersion = checkMesProductVersion(item);
|
|
|
|
|
item.setProductVersion(mesProductVersion.getProductVersion());
|
|
|
|
|
//获取bom信息
|
|
|
|
|
List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
|
|
|
|
|
List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
|
|
|
|
|
|
|
|
|
|
//发送工单信息给WMS
|
|
|
|
|
saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList));
|
|
|
|
@ -1171,6 +1186,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
workOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"},
|
|
|
|
|
new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) {
|
|
|
|
|
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
|
|
|
|
|
MesWorkOrderToWms mesWorkOrderToWms = null;
|
|
|
|
@ -1187,6 +1203,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
return mesWorkOrderToWmsList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion checkMesProductVersion(MesWorkOrder item) {
|
|
|
|
|
DdlPackBean ddlPackBean;
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
|
|
|
|
@ -1199,17 +1216,18 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Date transfer(String dateStr){
|
|
|
|
|
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
|
|
|
|
|
private Date transfer(String dateStr) {
|
|
|
|
|
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getOrderNo(MesWorkOrder mesWorkOrder,MesPart mesPart,String userName) {
|
|
|
|
|
if (StringUtils.isEmpty(mesPart.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo());
|
|
|
|
|
private String getOrderNo(MesWorkOrder mesWorkOrder, MesPart mesPart, String userName) {
|
|
|
|
|
if (StringUtils.isEmpty(mesPart.getProductMatchRule()))
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo());
|
|
|
|
|
return syncFuncService.syncSerialNo(new GenSerialNoModel(mesPart.getProductMatchRule()).prodLocation(mesWorkOrder.getWorkCenterCode()).partNo(mesPart.getPartNo()).putDataMap(MesPart.class.getSimpleName(), mesPart).organizeCode(mesPart.getOrganizeCode()), userName, mesWorkOrder.getOrganizeCode(), 1).getResultList().get(0).toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
|
|
|
|
|
String sn, MesBom mesBom) {
|
|
|
|
|
String sn, MesBom mesBom, String nowTime) {
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
|
|
|
|
@ -1231,7 +1249,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
newMesProductOffLine.setDescription(nowTime);
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
|
|
|
|
|
return newMesProductOffLine;
|
|
|
|
|
}
|
|
|
|
@ -1246,7 +1264,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate());
|
|
|
|
|
mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate());
|
|
|
|
|
mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate());
|
|
|
|
|
mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum()+""));
|
|
|
|
|
mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum() + ""));
|
|
|
|
|
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue());
|
|
|
|
|
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
mesProduceSn.setLotNo(TimeTool.getToday());
|
|
|
|
@ -1261,7 +1279,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
return mesProduceSnRao.insert(mesProduceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void insertMesProductionRecord(MesProduceSn mesProduceSn,MesWorkOrder mesWorkOrder) {
|
|
|
|
|
private void insertMesProductionRecord(MesProduceSn mesProduceSn, MesWorkOrder mesWorkOrder) {
|
|
|
|
|
//生成加工记录
|
|
|
|
|
MesProductionRecord productionRecord = new MesProductionRecord();
|
|
|
|
|
BeanUtils.copyProperties(mesProduceSn, productionRecord);
|
|
|
|
|