|
|
|
@ -10,6 +10,9 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.MathOperation;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.ListPager;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.common.Pager;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
@ -96,13 +99,16 @@ public class MesWorkOrderCutService extends BaseMesService<MesWorkOrderCut> impl
|
|
|
|
|
|
|
|
|
|
editionNumber = editionNumber == null ? 1 : editionNumber;
|
|
|
|
|
|
|
|
|
|
// 记录工单剩余未完成数量
|
|
|
|
|
Map<String, Double> workOrderUnCompleteMap = new HashMap<>();
|
|
|
|
|
// 记录当前裁片工单 每个工单的计划数量
|
|
|
|
|
Map<String, Double> workOrderQtyMap = new HashMap<>();
|
|
|
|
|
List<MesWorkOrderCutDetail> workOrderCutDetailtList = new ArrayList<>();
|
|
|
|
|
List<MesWorkOrderCut> workOrderCuttList = new ArrayList<>();
|
|
|
|
|
List<MesWorkOrderCutMaterial> workOrderCutMaterialList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
// 校验工单未完成数量是否满足计划数量
|
|
|
|
|
checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap);
|
|
|
|
|
checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap, workOrderQtyMap);
|
|
|
|
|
|
|
|
|
|
// 预计生成裁片工单数量
|
|
|
|
|
for (Integer count = 0; count < editionNumber; count++) {
|
|
|
|
@ -135,17 +141,18 @@ public class MesWorkOrderCutService extends BaseMesService<MesWorkOrderCut> impl
|
|
|
|
|
|
|
|
|
|
for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) {
|
|
|
|
|
List<MesWorkOrder> workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo());
|
|
|
|
|
MesWorkOrder workOrder = workOrders.get(0);
|
|
|
|
|
MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail();
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, userName);
|
|
|
|
|
detail.setOrganizeCode(organizeCode);
|
|
|
|
|
detail.setCutWorkOrderNo(cutWorkOrderNo);
|
|
|
|
|
detail.setPartNo(workOrder.getPartNo());
|
|
|
|
|
detail.setPartName(workOrder.getPartName());
|
|
|
|
|
detail.setWorkOrderNo(workOrder.getWorkOrderNo());
|
|
|
|
|
detail.setRemark(cutSchemeFg.getRemark());
|
|
|
|
|
detail.setQty(cutSchemeFg.getQty());
|
|
|
|
|
workOrderCutDetailtList.add(detail);
|
|
|
|
|
for (MesWorkOrder workOrder : workOrders) {
|
|
|
|
|
MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail();
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, userName);
|
|
|
|
|
detail.setOrganizeCode(organizeCode);
|
|
|
|
|
detail.setCutWorkOrderNo(cutWorkOrderNo);
|
|
|
|
|
detail.setPartNo(workOrder.getPartNo());
|
|
|
|
|
detail.setPartName(workOrder.getPartName());
|
|
|
|
|
detail.setWorkOrderNo(workOrder.getWorkOrderNo());
|
|
|
|
|
detail.setRemark(cutSchemeFg.getRemark());
|
|
|
|
|
detail.setQty(workOrderQtyMap.get(workOrder.getWorkOrderNo()));
|
|
|
|
|
workOrderCutDetailtList.add(detail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -165,7 +172,18 @@ public class MesWorkOrderCutService extends BaseMesService<MesWorkOrderCut> impl
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void checkQtyIsEnough(Integer editionNumber, Map<String, List<MesWorkOrder>> workOrderListMapByPartNo, MesCutScheme cutScheme, List<MesCutSchemeFg> cutSchemeFgList, Map<String, Double> workOrderUnCompleteMap) {
|
|
|
|
|
@Override
|
|
|
|
|
public ListPager<MesWorkOrderCutDetail> queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCutDetail.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workOrderCutDetail.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean);
|
|
|
|
|
pager = PagerHelper.getPager(pager, workOrderCutDetailRepository.findByHqlWhereCount(packBean));
|
|
|
|
|
List<MesWorkOrderCutDetail> list = workOrderCutDetailRepository.findByHqlWherePage(packBean, pager);
|
|
|
|
|
return new ListPager<>(list, pager);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void checkQtyIsEnough(Integer editionNumber, Map<String, List<MesWorkOrder>> workOrderListMapByPartNo,
|
|
|
|
|
MesCutScheme cutScheme, List<MesCutSchemeFg> cutSchemeFgList,
|
|
|
|
|
Map<String, Double> workOrderUnCompleteMap, Map<String, Double> workOrderQtyMap) {
|
|
|
|
|
for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) {
|
|
|
|
|
|
|
|
|
|
List<MesWorkOrder> workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo());
|
|
|
|
@ -179,16 +197,19 @@ public class MesWorkOrderCutService extends BaseMesService<MesWorkOrderCut> impl
|
|
|
|
|
|
|
|
|
|
// 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量
|
|
|
|
|
Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber);
|
|
|
|
|
|
|
|
|
|
Double srcTotalQty = totalQty.doubleValue();
|
|
|
|
|
Double unCompleteQty = 0.0;
|
|
|
|
|
List<String> needWorkOrderNoList = new ArrayList<>();
|
|
|
|
|
for (MesWorkOrder order : workOrders) {
|
|
|
|
|
|
|
|
|
|
if (!order.getWorkCenterCode().equals(cutScheme.getWorkCenterCode()))
|
|
|
|
|
MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", order.getWorkCenterCode(), cutScheme.getWorkCenterCode());
|
|
|
|
|
MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!",
|
|
|
|
|
order.getWorkCenterCode(), cutScheme.getWorkCenterCode());
|
|
|
|
|
|
|
|
|
|
if (unCompleteQty.compareTo(totalQty) > 0)
|
|
|
|
|
MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】", order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(), workOrders.subList(needWorkOrderNoList.size(), workOrders.size()));
|
|
|
|
|
if (unCompleteQty.compareTo(srcTotalQty) >= 0)
|
|
|
|
|
MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】",
|
|
|
|
|
order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(),
|
|
|
|
|
workOrders.subList(needWorkOrderNoList.size(), workOrders.size()));
|
|
|
|
|
|
|
|
|
|
unCompleteQty = MathOperation.add(unCompleteQty, order.getUnCompleteQty());
|
|
|
|
|
|
|
|
|
@ -196,8 +217,12 @@ public class MesWorkOrderCutService extends BaseMesService<MesWorkOrderCut> impl
|
|
|
|
|
|
|
|
|
|
if (order.getUnCompleteQty().compareTo(totalQty) >= 0) {
|
|
|
|
|
workOrderUnCompleteMap.put(order.getWorkOrderNo(), MathOperation.sub(order.getUnCompleteQty(), totalQty));
|
|
|
|
|
workOrderQtyMap.put(order.getWorkOrderNo(), totalQty);
|
|
|
|
|
totalQty = 0.0;
|
|
|
|
|
} else {
|
|
|
|
|
workOrderUnCompleteMap.put(order.getWorkOrderNo(), 0.0);
|
|
|
|
|
workOrderQtyMap.put(order.getWorkOrderNo(), order.getUnCompleteQty());
|
|
|
|
|
totalQty = MathOperation.sub(totalQty, order.getUnCompleteQty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|