|
|
@ -49,6 +49,7 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.persistence.EntityManager;
|
|
|
|
import javax.persistence.EntityManager;
|
|
|
|
import javax.persistence.Query;
|
|
|
|
import javax.persistence.Query;
|
|
|
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.time.LocalTime;
|
|
|
|
import java.time.LocalTime;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
@ -290,15 +291,50 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
closeMesPrintQueue(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName());
|
|
|
|
closeMesPrintQueue(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result.setWorkOrderStatus(bean.getWorkOrderStatus());
|
|
|
|
result.setWorkOrderStatus(bean.getWorkOrderStatus());
|
|
|
|
|
|
|
|
//非排序关闭订单 需要关闭kitting
|
|
|
|
|
|
|
|
doCloseKittingOrder(bean,bean.getModifyUser());
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0);
|
|
|
|
updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0);
|
|
|
|
if (isSavePrintQueue) insertPrintQueue(result);
|
|
|
|
if (isSavePrintQueue) {
|
|
|
|
|
|
|
|
insertPrintQueue(result);
|
|
|
|
|
|
|
|
//发布时 校验是否需要生成拉动单
|
|
|
|
|
|
|
|
List<MesWorkOrder> list = new ArrayList<>();
|
|
|
|
|
|
|
|
list.add(result);
|
|
|
|
|
|
|
|
doCreateKitting(list,result.getOrganizeCode());
|
|
|
|
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void doCloseKittingOrder(MesWorkOrder mesWorkOrder,String userName){
|
|
|
|
|
|
|
|
String organizeCode = mesWorkOrder.getOrganizeCode();
|
|
|
|
|
|
|
|
DdlPackBean pullOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkOrderNo(),"mesWorkOrder",pullOrderPackBean);
|
|
|
|
|
|
|
|
List<MesPullingOrderInfo> pullingOrderInfoList = pullingOrderInfoRepository.findByHqlWhere(pullOrderPackBean);
|
|
|
|
|
|
|
|
if (pullingOrderInfoList != null && !pullingOrderInfoList.isEmpty()) {
|
|
|
|
|
|
|
|
List<MesPullingOrderInfo> infoList = pullingOrderInfoList.stream().filter(item -> item.getPullOrderStatus() != MesExtEnumUtil.PULL_ORDER_STATUS.PULL_ORDER_STATUS_50.getValue()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!infoList.isEmpty()) {
|
|
|
|
|
|
|
|
MesPullingOrderInfo info = infoList.get(0);
|
|
|
|
|
|
|
|
String pullCode = info.getPullCode();
|
|
|
|
|
|
|
|
//查询出拉动组,判断是否需要关闭拉动单
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(pullCode,"pullCode",ddlPackBean);
|
|
|
|
|
|
|
|
List<MesPartPull> mesPartPullList = partPullRao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
|
|
|
if (mesPartPullList!= null && !mesPartPullList.isEmpty()) {
|
|
|
|
|
|
|
|
MesPartPull mesPartPull = mesPartPullList.get(0);
|
|
|
|
|
|
|
|
String pullOrderCloseState = mesPartPull.getPullOrderCloseState();
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(pullOrderCloseState)){
|
|
|
|
|
|
|
|
List<String> closeState = Arrays.asList(pullOrderCloseState.split(","));
|
|
|
|
|
|
|
|
if (closeState.contains(mesWorkOrder.getWorkOrderStatus().toString())){
|
|
|
|
|
|
|
|
mesPullingOrderInfoRao.updateByProperties(new String[]{"workOrderNo"}, new Object[]{mesWorkOrder.getWorkOrderNo()}, new String[]{"pullOrderStatus","modifyUser"}, new Object[]{ MesExtEnumUtil.PULL_ORDER_STATUS.PULL_ORDER_STATUS_50,userName});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) {
|
|
|
|
protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) {
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
@ -704,7 +740,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
ConvertBean.serviceModelInitialize(copyMesWorkOrder, item.getCreateUser());
|
|
|
|
ConvertBean.serviceModelInitialize(copyMesWorkOrder, item.getCreateUser());
|
|
|
|
index++;
|
|
|
|
index++;
|
|
|
|
baseRDao.insert(copyMesWorkOrder);
|
|
|
|
baseRDao.insert(copyMesWorkOrder);
|
|
|
|
workOrderListForKitting.add(copyMesWorkOrder);
|
|
|
|
|
|
|
|
//保存记录
|
|
|
|
//保存记录
|
|
|
|
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
|
|
|
|
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
|
|
|
|
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
|
|
|
|
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
|
|
|
@ -726,6 +762,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
ConvertBean.serviceModelInitialize(item, item.getCreateUser());
|
|
|
|
ConvertBean.serviceModelInitialize(item, item.getCreateUser());
|
|
|
|
baseRDao.insert(item);
|
|
|
|
baseRDao.insert(item);
|
|
|
|
|
|
|
|
workOrderListForKitting.add(item);
|
|
|
|
index++;
|
|
|
|
index++;
|
|
|
|
//保存记录
|
|
|
|
//保存记录
|
|
|
|
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
|
|
|
|
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
|
|
|
@ -775,7 +812,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
//按成套圆整
|
|
|
|
//按成套圆整
|
|
|
|
} else if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_DOOR_PANELS_NUMBER.getValue()) {
|
|
|
|
} else if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_DOOR_PANELS_NUMBER.getValue()) {
|
|
|
|
//按成套圆整 会是同一个拉动组 生成拉动单
|
|
|
|
//按成套圆整 会是同一个拉动组 生成拉动单
|
|
|
|
Map<Long, List<MesWorkOrder>> groupCodeMap = workOrderMap.get(workCenterCode).stream().collect(Collectors.groupingBy(MesWorkOrder::getGroupCode));
|
|
|
|
List<MesWorkOrder> workOrderList1 = workOrderMap.get(workCenterCode);
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderList1)) {
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<Long, List<MesWorkOrder>> groupCodeMap = workOrderList1.stream().collect(Collectors.groupingBy(MesWorkOrder::getGroupCode));
|
|
|
|
for (Long l : groupCodeMap.keySet()) {
|
|
|
|
for (Long l : groupCodeMap.keySet()) {
|
|
|
|
List<MesWorkOrder> workOrderList = groupCodeMap.get(l);
|
|
|
|
List<MesWorkOrder> workOrderList = groupCodeMap.get(l);
|
|
|
|
List<MesWorkCenter> mesWorkCenters = workCenterMap.get(workCenterCode);
|
|
|
|
List<MesWorkCenter> mesWorkCenters = workCenterMap.get(workCenterCode);
|
|
|
@ -805,9 +846,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
for (MesWorkOrder mesWorkOrder : workOrderListNew) {
|
|
|
|
for (MesWorkOrder mesWorkOrder : workOrderListNew) {
|
|
|
|
List<MesBom> bomList = getPlatBom(null, mesWorkOrder.getPartNo(), TimeTool.getNowTime(true), organizeCode);
|
|
|
|
List<MesBom> bomList = getPlatBom(null, mesWorkOrder.getPartNo(), TimeTool.getNowTime(true), organizeCode);
|
|
|
|
List<MesBom> collect = bomList.stream().filter(item -> pullPartNoList.contains(item.getItemPartNo())).collect(Collectors.toList());
|
|
|
|
List<MesBom> collect = bomList.stream().filter(item -> pullPartNoList.contains(item.getItemPartNo())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
mesBomRDao.detachList(collect);
|
|
|
|
collect.forEach(item -> item.setItemQty(item.getItemQty() * mesWorkOrder.getQty()));
|
|
|
|
collect.forEach(item -> item.setItemQty(item.getItemQty() * mesWorkOrder.getQty()));
|
|
|
|
list.addAll(collect);
|
|
|
|
list.addAll(collect);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (list.isEmpty()){
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
// 计算所有拉动单的数量,生成拉动单
|
|
|
|
// 计算所有拉动单的数量,生成拉动单
|
|
|
|
String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE");
|
|
|
|
String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE");
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode);
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode);
|
|
|
@ -878,18 +923,19 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
List<String> partNoList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPartNo).collect(Collectors.toList());
|
|
|
|
List<String> partNoList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPartNo).collect(Collectors.toList());
|
|
|
|
//深汕按照数量圆整
|
|
|
|
//深汕按照数量圆整
|
|
|
|
if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_BY_QUANTITY.getValue()){
|
|
|
|
if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_BY_QUANTITY.getValue()){
|
|
|
|
int packRoundQty = Integer.parseInt(mesPartPull.getPackRoundQty());
|
|
|
|
int packRoundQty =(int)Double.parseDouble(mesPartPull.getPackRoundQty());
|
|
|
|
String partNo = workOrderListNew.get(0).getPartNo();
|
|
|
|
String partNo = workOrderListNew.get(0).getPartNo();
|
|
|
|
//打散bom
|
|
|
|
//打散bom
|
|
|
|
List<MesBom> bomList = getPlatBom(null, partNo, TimeTool.getNowTime(true), organizeCode);
|
|
|
|
List<MesBom> bomList = getPlatBom(null, partNo, TimeTool.getNowTime(true), organizeCode);
|
|
|
|
//需要生成拉动单的零件
|
|
|
|
//需要生成拉动单的零件
|
|
|
|
List<MesBom> bomPullList = bomList.stream().filter(item -> partNoList.contains(item.getItemPartNo())).collect(Collectors.toList());
|
|
|
|
List<MesBom> bomPullList = bomList.stream().filter(item -> partNoList.contains(item.getItemPartNo())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
mesBomRDao.detachList(bomPullList);
|
|
|
|
for (MesWorkOrder mesWorkOrder : workOrderListNew) {
|
|
|
|
for (MesWorkOrder mesWorkOrder : workOrderListNew) {
|
|
|
|
Double qty = mesWorkOrder.getQty();
|
|
|
|
Double qty = mesWorkOrder.getQty();
|
|
|
|
bomPullList.forEach(item -> item.setItemQty(item.getItemQty() * qty));
|
|
|
|
bomPullList.forEach(item -> item.setItemQty(item.getItemQty() * qty));
|
|
|
|
DoubleSummaryStatistics summaryStatistics = bomPullList.stream().collect(Collectors.summarizingDouble(MesBom::getItemQty));
|
|
|
|
DoubleSummaryStatistics summaryStatistics = bomPullList.stream().collect(Collectors.summarizingDouble(MesBom::getItemQty));
|
|
|
|
double max = summaryStatistics.getMax();
|
|
|
|
double max = summaryStatistics.getMax();
|
|
|
|
int multiple = Integer.parseInt(String.valueOf(Math.ceil(max / packRoundQty))); //生成的拉动的数量
|
|
|
|
int multiple = (int)Math.ceil(max / packRoundQty); //生成的拉动的数量
|
|
|
|
for (int i = 1; i <= multiple; i++) {
|
|
|
|
for (int i = 1; i <= multiple; i++) {
|
|
|
|
insertPullOrderInfo( mesWorkOrder, bomPullList, mesPartPull, mesPartPullDetailList, organizeCode, i, packRoundQty);
|
|
|
|
insertPullOrderInfo( mesWorkOrder, bomPullList, mesPartPull, mesPartPullDetailList, organizeCode, i, packRoundQty);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -932,6 +978,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
private void insertPullOrderInfo(MesWorkOrder mesWorkOrder,List<MesBom> bomPullList,MesPartPull mesPartPull,List<MesPartPullDetail> mesPartPullDetailList,String organizeCode,int i, int roundPackQty){
|
|
|
|
private void insertPullOrderInfo(MesWorkOrder mesWorkOrder,List<MesBom> bomPullList,MesPartPull mesPartPull,List<MesPartPullDetail> mesPartPullDetailList,String organizeCode,int i, int roundPackQty){
|
|
|
|
// 计算所有拉动单的数量,生成拉动单
|
|
|
|
// 计算所有拉动单的数量,生成拉动单
|
|
|
|
Map<String, MesPartPullDetail> pullDetailMap = mesPartPullDetailList.stream().collect(Collectors.toMap(MesPartPullDetail::getPullPartNo, Function.identity()));
|
|
|
|
Map<String, MesPartPullDetail> pullDetailMap = mesPartPullDetailList.stream().collect(Collectors.toMap(MesPartPullDetail::getPullPartNo, Function.identity()));
|
|
|
|
|
|
|
|
List<String> pullDetailPartList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPullPartNo).collect(Collectors.toList());
|
|
|
|
String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE");
|
|
|
|
String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE");
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode);
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode);
|
|
|
|
genSerialNoModel.setDynamicRule(mesPartPull.getPullCode());
|
|
|
|
genSerialNoModel.setDynamicRule(mesPartPull.getPullCode());
|
|
|
@ -953,10 +1000,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo());
|
|
|
|
pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo());
|
|
|
|
pullingOrder.setCarModelCode(mesWorkOrder.getCarModelCode());
|
|
|
|
pullingOrder.setCarModelCode(mesWorkOrder.getCarModelCode());
|
|
|
|
pullingOrder.setOrderFlag(mesWorkOrder.getOrderFlag());
|
|
|
|
pullingOrder.setOrderFlag(mesWorkOrder.getOrderFlag());
|
|
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(pullingOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
ConvertBean.serviceModelInitialize(pullingOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
mesPullingOrderInfoRao.insert(pullingOrder);
|
|
|
|
mesPullingOrderInfoRao.insert(pullingOrder);
|
|
|
|
for (MesBom mesBom : bomPullList) {
|
|
|
|
List<MesBom> filterBomList = bomPullList.stream().filter(item -> pullDetailPartList.contains(item.getItemPartNo())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
for (MesBom mesBom : filterBomList) {
|
|
|
|
MesPullingOrderPartInfo detail = new MesPullingOrderPartInfo();
|
|
|
|
MesPullingOrderPartInfo detail = new MesPullingOrderPartInfo();
|
|
|
|
|
|
|
|
MesPartPullDetail mesPartPullDetail = pullDetailMap.get(mesBom.getItemPartNo());
|
|
|
|
detail.setOrganizeCode(organizeCode);
|
|
|
|
detail.setOrganizeCode(organizeCode);
|
|
|
|
detail.setPullCode(pullingOrder.getPullCode());
|
|
|
|
detail.setPullCode(pullingOrder.getPullCode());
|
|
|
|
detail.setPullingOrderNo(pullingOrder.getPullingOrderNo());
|
|
|
|
detail.setPullingOrderNo(pullingOrder.getPullingOrderNo());
|
|
|
@ -966,12 +1016,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
detail.setPartNo(mesBom.getItemPartNo());
|
|
|
|
detail.setPartNo(mesBom.getItemPartNo());
|
|
|
|
detail.setPartName(mesBom.getItemPartName());
|
|
|
|
detail.setPartName(mesBom.getItemPartName());
|
|
|
|
double remainingQty = mesBom.getItemQty() - i * roundPackQty;
|
|
|
|
double remainingQty = mesBom.getItemQty() - i * roundPackQty;
|
|
|
|
|
|
|
|
if (remainingQty < -roundPackQty){
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
detail.setPullQty(remainingQty > 0 ? roundPackQty : (mesBom.getItemQty() - (i-1) * roundPackQty));
|
|
|
|
detail.setPullQty(remainingQty > 0 ? roundPackQty : (mesBom.getItemQty() - (i-1) * roundPackQty));
|
|
|
|
detail.setCustOrderNo(pullingOrder.getCustOrderNo());
|
|
|
|
detail.setCustOrderNo(pullingOrder.getCustOrderNo());
|
|
|
|
detail.setWorkOrderSeq(pullingOrder.getWorkOrderSeq());
|
|
|
|
detail.setWorkOrderSeq(pullingOrder.getWorkOrderSeq());
|
|
|
|
detail.setWaterSeq(pullingOrder.getProductSeq());
|
|
|
|
detail.setWaterSeq(pullingOrder.getProductSeq());
|
|
|
|
detail.setWorkCellCode(mesWorkOrder.getWorkCenterCode());
|
|
|
|
detail.setWorkCellCode(mesPartPullDetail.getWorkCellCode());
|
|
|
|
detail.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0
|
|
|
|
// detail.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0
|
|
|
|
detail.setCustPartNo(pullingOrder.getCustPartNo());
|
|
|
|
detail.setCustPartNo(pullingOrder.getCustPartNo());
|
|
|
|
detail.setCarSeries(pullDetailMap.get(mesBom.getItemPartNo()) == null ? "" : pullDetailMap.get(mesBom.getItemPartNo()).getCarSeries());
|
|
|
|
detail.setCarSeries(pullDetailMap.get(mesBom.getItemPartNo()) == null ? "" : pullDetailMap.get(mesBom.getItemPartNo()).getCarSeries());
|
|
|
|
detail.setOrderFlag(pullingOrder.getOrderFlag());
|
|
|
|
detail.setOrderFlag(pullingOrder.getOrderFlag());
|
|
|
|