From 195c7bf5c0949580b0ab7be257ab32245b91f239 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 30 May 2024 22:34:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=BC=94=E7=A4=BA=EF=BC=9A?= =?UTF-8?q?=E4=B8=BB=E6=95=B0=E6=8D=AEbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/dbinterface/WmsSAPDbQuery.java | 3 +- .../base/MesPartProdGroupDetailService.java | 2 +- .../serviceimpl/base/MesPartProdGroupService.java | 4 +- .../serviceimpl/base/MesShiftService.java | 47 ++++++-- .../base/MesWorkCellExtendCfgService.java | 22 ++++ .../serviceimpl/base/MesWorkOrderService.java | 122 ++++++++++----------- 6 files changed, 124 insertions(+), 76 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java index 5792c9f..8750057 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java @@ -115,8 +115,7 @@ public class WmsSAPDbQuery { */ public String partName(String organizeCode, String partNo) throws Exception { String sqlString = "select part_name from mes_part where organize_code='" + organizeCode - + "' and part_no='" + partNo - + "' and is_deleted=2 and is_valid=1"; + + "' and part_no='" + partNo + "'"; List> result = mesDataSourceProxy.queryMapList(sqlString, srcConn); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java index 05b57e7..7ccc9bb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java @@ -22,7 +22,7 @@ public class MesPartProdGroupDetailService extends BaseMesService im throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("【%s】零件生产组代码已经存在,请检查数据", item.getPartProdGroupCode(), item.getCustomerCode()) + .setErrorDetail("【%s】零件生产组代码已经存在,请检查数据", item.getPartProdGroupCode()) .build(); } @@ -93,7 +93,7 @@ public class MesPartProdGroupService extends BaseMesService im throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("【%s】零件生产组代码已经存在,请检查数据", item.getPartProdGroupCode(), item.getCustomerCode()) + .setErrorDetail("【%s】零件生产组代码已经存在,请检查数据", item.getPartProdGroupCode()) .build(); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShiftService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShiftService.java index 321010f..b832309 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShiftService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShiftService.java @@ -12,6 +12,8 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; import java.util.List; @Service @@ -44,10 +46,10 @@ public class MesShiftService extends BaseMesService implements IMesShi DdlPreparedPack.getStringEqualPack(item.getAreaCode(), "areaCode", cellBinPackBean); DdlPreparedPack.getStringEqualPack(item.getShiftCode(), "shiftCode", cellBinPackBean); DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", cellBinPackBean); - cellBinPackBean.setWhereAppend(cellBinPackBean.getWhereAppend()+" " + - " and ((model.beginDate <= '"+item.getBeginDate()+"' and model.endDate >= '"+item.getBeginDate()+"')"+ - " or (model.beginDate <= '"+item.getEndDate()+"' and model.endDate >= '"+item.getEndDate()+"')" + - " or (model.beginDate >= '"+item.getBeginDate()+"' and model.endDate <= '"+item.getEndDate()+"'))" ); + cellBinPackBean.setWhereAppend(cellBinPackBean.getWhereAppend() + " " + + " and ((model.beginDate <= '" + item.getBeginDate() + "' and model.endDate >= '" + item.getBeginDate() + "')" + + " or (model.beginDate <= '" + item.getEndDate() + "' and model.endDate >= '" + item.getEndDate() + "')" + + " or (model.beginDate >= '" + item.getBeginDate() + "' and model.endDate <= '" + item.getEndDate() + "'))"); boolean flg = baseRDao.isExitByHql(cellBinPackBean); if (flg) { throw ImppExceptionBuilder.newInstance() @@ -56,9 +58,12 @@ public class MesShiftService extends BaseMesService implements IMesShi .setErrorDetail("【%s】区域【%s】产线【%s】班次代码生效时间内已经存在有效数据,请检查数据", item.getAreaCode(), item.getWorkCenterCode(), item.getShiftCode()) .build(); } + //计算工时 + item.setWorkTimes(houresBetweenTwoTime(item.getStartTime().split(":"),item.getEndTime().split(":"))); } + protected void onUpdateBean(MesShift item) { // 数据校验 @@ -77,10 +82,10 @@ public class MesShiftService extends BaseMesService implements IMesShi DdlPreparedPack.getStringEqualPack(item.getAreaCode(), "areaCode", cellBinPackBean); DdlPreparedPack.getStringEqualPack(item.getShiftCode(), "shiftCode", cellBinPackBean); DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", cellBinPackBean); - cellBinPackBean.setWhereAppend(cellBinPackBean.getWhereAppend()+" " + - " and ((model.beginDate <= '"+item.getBeginDate()+"' and model.endDate >= '"+item.getBeginDate()+"')"+ - " or (model.beginDate <= '"+item.getEndDate()+"' and model.endDate >= '"+item.getEndDate()+"')" + - " or (model.beginDate >= '"+item.getBeginDate()+"' and model.endDate <= '"+item.getEndDate()+"'))" ); + cellBinPackBean.setWhereAppend(cellBinPackBean.getWhereAppend() + " " + + " and ((model.beginDate <= '" + item.getBeginDate() + "' and model.endDate >= '" + item.getBeginDate() + "')" + + " or (model.beginDate <= '" + item.getEndDate() + "' and model.endDate >= '" + item.getEndDate() + "')" + + " or (model.beginDate >= '" + item.getBeginDate() + "' and model.endDate <= '" + item.getEndDate() + "'))"); DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", cellBinPackBean); boolean flg = baseRDao.isExitByHql(cellBinPackBean); if (flg) { @@ -90,6 +95,8 @@ public class MesShiftService extends BaseMesService implements IMesShi .setErrorDetail("【%s】区域【%s】产线【%s】班次代码生效时间内已经存在有效数据,请检查数据", item.getAreaCode(), item.getWorkCenterCode(), item.getShiftCode()) .build(); } + //计算工时 + item.setWorkTimes(houresBetweenTwoTime(item.getStartTime().split(":"),item.getEndTime().split(":"))); } @Override @@ -100,8 +107,28 @@ public class MesShiftService extends BaseMesService implements IMesShi DdlPreparedPack.getStringEqualPack(mesShift.getShiftCode(), "shiftCode", packBean); DdlPreparedPack.getStringEqualPack(mesShift.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringLikerPack(mesShift.getShiftName(), "shiftName", packBean); - DdlPreparedPack.getStringSmallerPack(nowDate,"beginDate",packBean); - DdlPreparedPack.getStringBiggerPack(nowDate,"endDate",packBean); + DdlPreparedPack.getStringSmallerPack(nowDate, "beginDate", packBean); + DdlPreparedPack.getStringBiggerPack(nowDate, "endDate", packBean); return baseRDao.findByHqlWhere(packBean); } + + + public double houresBetweenTwoTime(String[] start, String[] end) { + // 定义起始时间和结束时间 + LocalTime startTime = LocalTime.of(Integer.parseInt(start[0]), Integer.parseInt(start[1]), Integer.parseInt(start[2])); + LocalTime endTime = LocalTime.of(Integer.parseInt(end[0]), Integer.parseInt(end[1]), Integer.parseInt(end[2])); + + // 计算时间间隔 + long totalMinutes; + if (endTime.isBefore(startTime)) { + // 如果结束时间在起始时间之前,说明跨越了午夜 + totalMinutes = ChronoUnit.MINUTES.between(startTime, LocalTime.MAX) + + ChronoUnit.MINUTES.between(LocalTime.MIN, endTime); + } else { + totalMinutes = ChronoUnit.MINUTES.between(startTime, endTime); + } + + // 计算小时 + return (double)(totalMinutes / 60); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCellExtendCfgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCellExtendCfgService.java index 30b2b92..ed0bb75 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCellExtendCfgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCellExtendCfgService.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCellExtendCfgService; +import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellExtendCfg; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; @@ -17,6 +20,15 @@ public class MesWorkCellExtendCfgService extends BaseMesService implements } private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) { - if (StringUtil.isEmpty(bean.getPlanOrderNo())) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(bean.getPlanStartTime(), "planStartDate", ddlPackBean); - DdlPreparedPack.getStringEqualPack(bean.getPlanEndTime(), "planEndDate", ddlPackBean); - MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); - if (null == mesProductPlan) { - MesProductPlan mesPlanOrder = new MesProductPlan(); - mesPlanOrder.setPlanOrderNo(""); - mesPlanOrder.setPlanQty(bean.getQty()); - mesPlanOrder.setPlanPartNo(bean.getPartNo()); - mesPlanOrder.setCompleteQty(0d); - mesPlanOrder.setUncompleteQty(bean.getQty()); - mesPlanOrder.setUnit(bean.getUnit()); - mesPlanOrder.setPlanStartDate(bean.getPlanStartTime()); - mesPlanOrder.setPlanEndDate(bean.getPlanEndTime()); - mesPlanOrder.setPartMappingWorkCenterCode(bean.getErpWorkCenter()); - mesPlanOrder.setPlanOrganizeCode(bean.getOrganizeCode()); - mesPlanOrder.setOrganizeCode(bean.getOrganizeCode()); - ConvertBean.serviceModelInitialize(mesPlanOrder, bean.getCreateUser()); - mesProductPlanRDao.insert(mesPlanOrder); - } else { - if (isInsert) { - mesProductPlan.setPlanQty(MathOperation.add(mesProductPlan.getPlanQty(), bean.getQty())); - } else { - //报工 - if (isReport) { - mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); - //报工调整 - } else { - mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); - } - } - mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); - ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); - mesProductPlanRDao.update(mesProductPlan); - } - } else { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(bean.getPlanOrderNo(), "planOrderNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); - MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); - if (null == mesProductPlan) { - MesException.throwMesBusiException("SAP计划单号【%s】物料【%s】,不存在", bean.getPlanOrderNo(), bean.getPartNo()); - } - if (!isInsert) { - if (Objects.isNull(mesProductPlan.getCompleteQty())) { - mesProductPlan.setCompleteQty(0d); - } - //报工 - if (isReport) { - mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); - //报工调整 - } else { - mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); - } - mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); - ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); - mesProductPlanRDao.update(mesProductPlan); - } - } +// if (StringUtil.isEmpty(bean.getPlanOrderNo())) { +// DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); +// DdlPreparedPack.getStringEqualPack(bean.getPlanStartTime(), "planStartDate", ddlPackBean); +// DdlPreparedPack.getStringEqualPack(bean.getPlanEndTime(), "planEndDate", ddlPackBean); +// MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); +// if (null == mesProductPlan) { +// MesProductPlan mesPlanOrder = new MesProductPlan(); +// mesPlanOrder.setPlanOrderNo(""); +// mesPlanOrder.setPlanQty(bean.getQty()); +// mesPlanOrder.setPlanPartNo(bean.getPartNo()); +// mesPlanOrder.setCompleteQty(0d); +// mesPlanOrder.setUncompleteQty(bean.getQty()); +// mesPlanOrder.setUnit(bean.getUnit()); +// mesPlanOrder.setPlanStartDate(bean.getPlanStartTime()); +// mesPlanOrder.setPlanEndDate(bean.getPlanEndTime()); +// mesPlanOrder.setPartMappingWorkCenterCode(bean.getErpWorkCenter()); +// mesPlanOrder.setPlanOrganizeCode(bean.getOrganizeCode()); +// mesPlanOrder.setOrganizeCode(bean.getOrganizeCode()); +// ConvertBean.serviceModelInitialize(mesPlanOrder, bean.getCreateUser()); +// mesProductPlanRDao.insert(mesPlanOrder); +// } else { +// if (isInsert) { +// mesProductPlan.setPlanQty(MathOperation.add(mesProductPlan.getPlanQty(), bean.getQty())); +// } else { +// //报工 +// if (isReport) { +// mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); +// //报工调整 +// } else { +// mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); +// } +// } +// mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); +// ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); +// mesProductPlanRDao.update(mesProductPlan); +// } +// } else { +// DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(bean.getPlanOrderNo(), "planOrderNo", ddlPackBean); +// DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); +// MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); +// if (null == mesProductPlan) { +// MesException.throwMesBusiException("SAP计划单号【%s】物料【%s】,不存在", bean.getPlanOrderNo(), bean.getPartNo()); +// } +// if (!isInsert) { +// if (Objects.isNull(mesProductPlan.getCompleteQty())) { +// mesProductPlan.setCompleteQty(0d); +// } +// //报工 +// if (isReport) { +// mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); +// //报工调整 +// } else { +// mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); +// } +// mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); +// ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); +// mesProductPlanRDao.update(mesProductPlan); +// } +// } } @Override