深汕kitting拉动,按数量完成

tags/yfai-mes-ext-v3.11^2
臧学普 3 months ago
parent 9543a7a674
commit d7377fa4c6

@ -191,6 +191,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesPullingOrderInfoRepository mesPullingOrderInfoRao;
@Autowired
private MesPullingOrderPartInfoRepository pullingOrderPartInfoRao;
@Autowired
private MesPartPullRepository partPullRao;
@Autowired
@ -202,6 +205,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private MesBomRepository bomRao;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
// 数据校验
@ -676,6 +681,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
seqList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(next.getOrganizeCode()), next.getCreateUser(), next.getOrganizeCode(), mesWorkOrderList.size()).getResultList();
}
List<MesWorkOrderLog> mesWorkOrderLogList = new ArrayList<>();
List<MesWorkOrder> workOrderListForKitting = new ArrayList<>();
int index = 0;
for (MesWorkOrder item : mesWorkOrderList) {
//获取相同类型 相同标识 生产序号最大值的
@ -698,6 +704,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
ConvertBean.serviceModelInitialize(copyMesWorkOrder, item.getCreateUser());
index++;
baseRDao.insert(copyMesWorkOrder);
workOrderListForKitting.add(copyMesWorkOrder);
//保存记录
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
@ -729,6 +736,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (!CollectionUtils.isEmpty(mesWorkOrderLogList)) {
workOrderLogService.insertBatch(mesWorkOrderLogList);
}
//创建kitting
doCreateKitting(workOrderListForKitting, next.organizeCode);
}
private void doCreateKitting(List<MesWorkOrder> mesWorkOrderList,String organizeCode) {
@ -799,16 +808,19 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
collect.forEach(item -> item.setItemQty(item.getItemQty() * mesWorkOrder.getQty()));
list.addAll(collect);
}
// 计算所有拉动单的数量,生成拉动单
String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE");
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode);
genSerialNoModel.setDynamicRule(mesPartPull.getPullCode());
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), AuthUtil.getSessionUser().getUserName(), organizeCode, 1).getResultList();
String serialNo = resultList.get(0);
String workOrderStr = workOrderListNew.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.joining("/r/n"));
String workOrderPartNoStr = workOrderListNew.stream().map(MesWorkOrder::getPartNo).collect(Collectors.joining("/r/n"));
String workOrderPartNameStr = workOrderListNew.stream().map(MesWorkOrder::getPartName).collect(Collectors.joining("/r/n"));
String custPartNo = workOrderListNew.stream().map(MesWorkOrder::getCustPartNo).collect(Collectors.joining("/r/n"));
MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo();
pullingOrder.setOrganizeCode(organizeCode);
pullingOrder.setPullingOrderNo("xxx"); //拉动单号 + 8位年月日 + 5位流水号
pullingOrder.setPullingOrderNo(serialNo); //拉动单号 + 8位年月日 + 5位流水号
pullingOrder.setPullOrderType(mesPartPull.getPullOrderType());
pullingOrder.setPullGroupFid(mesPartPull.getId());
pullingOrder.setWorkOrderNo(workOrderStr);
@ -823,7 +835,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
pullingOrder.setCarModelCode(workOrderListNew.get(0).getCarModelCode());
pullingOrder.setOrderFlag(workOrderListNew.get(0).getOrderFlag());
ConvertBean.serviceModelInitialize(pullingOrder, AuthUtil.getSessionUser().getUserName());
mesPullingOrderInfoRao.insert(pullingOrder);
// 需要合并同类项
Map<String, List<MesBom>> itemBomMap = list.stream().collect(Collectors.groupingBy(MesBom::getItemPartNo));
for (String itemPartNo : itemBomMap.keySet()) {
@ -849,6 +861,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
detail.setCarSeries(pullDetailMap.get(itemPartNo) == null ? "" : pullDetailMap.get(itemPartNo).getCarSeries());
detail.setOrderFlag(pullingOrder.getOrderFlag());
ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName());
pullingOrderPartInfoRao.insert(detail);
}
}
@ -861,9 +874,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (CollectionUtils.isEmpty(mesPartPullDetailList)) {
return;
}
//bom中对应的partNo列表
//拉动组详情中的零件号
List<String> partNoList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPartNo).collect(Collectors.toList());
//深汕按照包装圆整
//深汕按照数量圆整
if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_BY_QUANTITY.getValue()){
int packRoundQty = Integer.parseInt(mesPartPull.getPackRoundQty());
String partNo = workOrderListNew.get(0).getPartNo();
@ -871,40 +884,101 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
List<MesBom> bomList = getPlatBom(null, partNo, TimeTool.getNowTime(true), organizeCode);
//需要生成拉动单的零件
List<MesBom> bomPullList = bomList.stream().filter(item -> partNoList.contains(item.getItemPartNo())).collect(Collectors.toList());
/**
*
*
* 1.bom * > packRoundQty multiple
* 2.bom * = packRoundQty 1 1
* 3.bom * < packRoundQty
*/
Map<String,Double> partNoRemainder = new HashMap<>();
for (int i = 0; i < workOrderListNew.size(); i++) {
MesWorkOrder mesWorkOrder = workOrderListNew.get(0);
for (MesWorkOrder mesWorkOrder : workOrderListNew) {
Double qty = mesWorkOrder.getQty();
bomPullList.forEach(item -> item.setItemQty(item.getItemQty() * qty));
for (int j = 0; j < bomPullList.size(); j++) {
double m = bomPullList.get(j).getItemQty() % packRoundQty;
double n = bomPullList.get(j).getItemQty() / packRoundQty;
if (m == 0 && n != 0){
//子零件数量 * 工单需求数量 = packRoundQty
//证明当前零件需要拉动的数量是圆整数量的倍数,需要拆分多个拉动单,或者一个拉动单就满足了
}else if (m != 0 && n == 0) {
//子零件数量 * 工单需求数量 < packRoundQty
//证明需要凑下一个工单的当前零件
} else if (m !=0 && n > 0) {
//子零件数量 * 工单需求数量 > packRoundQty
//够一个拉动单以上的数据,还有余数给
}
DoubleSummaryStatistics summaryStatistics = bomPullList.stream().collect(Collectors.summarizingDouble(MesBom::getItemQty));
double max = summaryStatistics.getMax();
int multiple = Integer.parseInt(String.valueOf(Math.ceil(max / packRoundQty))); //生成的拉动的数量
for (int i = 1; i <= multiple; i++) {
insertPullOrderInfo( mesWorkOrder, bomPullList, mesPartPull, mesPartPullDetailList, organizeCode, i, packRoundQty);
}
}
// /**
// * 满足一个拉动组就生成一个拉动单
// * 分类
// * 1.当前bom 子零件数量 * 工单需求数量 > packRoundQty multiple是多少是否有余数 取模
// * 2.当前bom 子零件数量 * 工单需求数量 = packRoundQty 直接整除看看是否大于1 大于1需要拆分多个拉动单
// * 3.当前bom 子零件数量 * 工单需求数量 < packRoundQty 需要增加一个工单来补充当前的数量,补不齐继续补充
// */
// Map<String,Double> partNoRemainder = new HashMap<>();
// for (int i = 0; i < workOrderListNew.size(); i++) {
// MesWorkOrder mesWorkOrder = workOrderListNew.get(0);
// Double qty = mesWorkOrder.getQty();
// bomPullList.forEach(item -> item.setItemQty(item.getItemQty() * qty));
// for (int j = 0; j < bomPullList.size(); j++) {
// double m = bomPullList.get(j).getItemQty() % packRoundQty;
// double n = bomPullList.get(j).getItemQty() / packRoundQty;
// if (m == 0 && n != 0){
// //子零件数量 * 工单需求数量 = packRoundQty
// //证明当前零件需要拉动的数量是圆整数量的倍数,需要拆分多个拉动单,或者一个拉动单就满足了
//
// }else if (m != 0 && n == 0) {
// //子零件数量 * 工单需求数量 < packRoundQty
// //证明需要凑下一个工单的当前零件
// } else if (m !=0 && n > 0) {
// //子零件数量 * 工单需求数量 > packRoundQty
// //够一个拉动单以上的数据,还有余数给
//
// }
// }
// }
}
}
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()));
String kittingOrderNoRuleCode = mesConfigService.getCfgValue(organizeCode, "KITTING_ORDER_NO_RULE_CODE");
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(kittingOrderNoRuleCode);
genSerialNoModel.setDynamicRule(mesPartPull.getPullCode());
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), AuthUtil.getSessionUser().getUserName(), organizeCode, 1).getResultList();
String serialNo = resultList.get(0);
MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo();
pullingOrder.setOrganizeCode(organizeCode);
pullingOrder.setPullingOrderNo(serialNo); //拉动单号 + 8位年月日 + 5位流水号
pullingOrder.setPullOrderType(mesPartPull.getPullOrderType());
pullingOrder.setPullGroupFid(mesPartPull.getId());
pullingOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
pullingOrder.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
pullingOrder.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
pullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.PULL_ORDER_STATUS_10.getValue());
pullingOrder.setWorkCenterCode(mesPartPull.getWorkCenterCode());
pullingOrder.setPullCode(mesPartPull.getPullCode());
pullingOrder.setPartNo(mesWorkOrder.getPartNo());
pullingOrder.setPartName(mesWorkOrder.getPartName());
pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo());
pullingOrder.setCarModelCode(mesWorkOrder.getCarModelCode());
pullingOrder.setOrderFlag(mesWorkOrder.getOrderFlag());
ConvertBean.serviceModelInitialize(pullingOrder, AuthUtil.getSessionUser().getUserName());
mesPullingOrderInfoRao.insert(pullingOrder);
for (MesBom mesBom : bomPullList) {
MesPullingOrderPartInfo detail = new MesPullingOrderPartInfo();
detail.setOrganizeCode(organizeCode);
detail.setPullCode(pullingOrder.getPullCode());
detail.setPullingOrderNo(pullingOrder.getPullingOrderNo());
detail.setWorkOrderNo(pullingOrder.getWorkOrderNo());
detail.setWorkOrderSeq(pullingOrder.getWorkOrderSeq());
detail.setCustOrderNo(pullingOrder.getCustOrderNo());
detail.setPartNo(mesBom.getItemPartNo());
detail.setPartName(mesBom.getItemPartName());
double remainingQty = mesBom.getItemQty() - i * roundPackQty;
detail.setPullQty(remainingQty > 0 ? roundPackQty : (mesBom.getItemQty() - (i-1) * roundPackQty));
detail.setCustOrderNo(pullingOrder.getCustOrderNo());
detail.setWorkOrderSeq(pullingOrder.getWorkOrderSeq());
detail.setWaterSeq(pullingOrder.getProductSeq());
detail.setWorkCellCode(mesWorkOrder.getWorkCenterCode());
detail.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1未送料为0
detail.setCustPartNo(pullingOrder.getCustPartNo());
detail.setCarSeries(pullDetailMap.get(mesBom.getItemPartNo()) == null ? "" : pullDetailMap.get(mesBom.getItemPartNo()).getCarSeries());
detail.setOrderFlag(pullingOrder.getOrderFlag());
ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName());
pullingOrderPartInfoRao.insert(detail);
}
}
private List<MesBom> getPlatBom(MesBom mesBom,String partNo, String effectiveTime,String organizeCode) {

Loading…
Cancel
Save