From b69151daa180e4112b5e4632af7c7fc4948f0394 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 4 Sep 2024 09:19:12 +0800 Subject: [PATCH 001/180] =?UTF-8?q?SPS=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=201.=E6=96=B0=E5=A2=9E=E6=8B=89=E5=8A=A8=E5=8D=95+=E6=98=8E?= =?UTF-8?q?=E7=BB=86+2.=E6=8F=90=E4=BE=9B=E7=BB=99=E8=AE=BE=E5=A4=87webSre?= =?UTF-8?q?vice=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesPullingOrderInfoService.java | 15 ++++ .../api/base/IMesPullingOrderPartInfoService.java | 13 +++ .../i3plus/ext/mes/apiservice/model/SpsInfo.java | 20 +++++ .../base/MesPullingOrderInfoService.java | 100 +++++++++++++++++++++ .../base/MesPullingOrderPartInfoService.java | 55 ++++++++++++ .../webservice/WebServiceServerSPS.java | 34 +++++++ 6 files changed, 237 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java new file mode 100644 index 0000000..b4c0da4 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; + +import java.util.Map; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesPullingOrderInfoService extends IBaseMesService { + + Map doSPSForEquipment( String assemblyLine, String pullingGroupCode,String organizeCode ); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java new file mode 100644 index 0000000..63cc6d7 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesPullingOrderPartInfoService extends IBaseMesService { + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java new file mode 100644 index 0000000..9ba3468 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.model; + +import lombok.Data; + +/** + * @Description : SpsInfo + * @Author :gsz + * @Date 2024/8/30 9:16 + * @Modify + **/ +@Data +public class SpsInfo { + //产线 + private String assemblyLine; + //拉动单号 + private String pullingGroupCode; + //工厂号 + private String organizeCode ; + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java new file mode 100644 index 0000000..39c90b0 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -0,0 +1,100 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPartPullService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.i3plus.pojo.mes.repository.MesPullingOrderPartInfoRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class MesPullingOrderInfoService extends BaseMesService implements IMesPullingOrderInfoService { + + @Autowired + private MesPullingOrderPartInfoRepository mesPullingOrderPartInfoRepository; + + protected void setPackQueryBean(MesPullingOrderInfo bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + } + + @Override + public void validateImport(List beanList) { + + for (MesPullingOrderInfo item : beanList) { + // 数据校验 + ValidatorBean.checkNotNull(item.getPullCode(), "拉动组代码不能为空"); + ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线代码不能为空"); + + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkOrderNo(), "workOrderNo", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", seriesPackBean); + boolean flg = baseRDao.isExitByHql(seriesPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单【%s】拉动组代码【%s】已经存在,请检查数据", item.getWorkOrderNo(), item.getPullCode()) + .build(); + } + } + } + + @Override + public Map doSPSForEquipment(String assemblyLine, String pullingGroupCode, String organizeCode) { + Map resultMap = new HashMap(); + //查询拉动单状态为已扫描=20的 拉动单 + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(pullingGroupCode, "pullCode", seriesPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue(), "pullOrderStatus", seriesPackBean); + DdlPreparedPack.getStringEqualPack(assemblyLine, "workCenterCode", seriesPackBean); + seriesPackBean.setWhereAppend(seriesPackBean.getWhereAppend() + " order by modifyDatetime desc"); + + MesPullingOrderInfo mesPullingOrder = baseRDao.getByProperty(seriesPackBean); + if (StringUtil.isEmpty(mesPullingOrder)) { + resultMap.put("success", false); + String message = "产线" + assemblyLine + "拉动组" + pullingGroupCode + "数据为空,请检查数据"; + resultMap.put("message", message); + return resultMap; + } + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(pullingGroupCode, "pullCode", partPackBean); + partPackBean.setWhereAppend(partPackBean.getWhereAppend() + " order by modifyDatetime desc"); + + List byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + + resultMap.put("",mesPullingOrder); + resultMap.put("success", true); + + String message ="更新SPS状态成功,已发送SPS信息给设备! id:"+mesPullingOrder.getId()+ "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + resultMap.put("message", message); + //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 + mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); + ConvertBean.serviceModelUpdate(mesPullingOrder, "WS.SPS"); + baseRDao.update(mesPullingOrder); + + return resultMap; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java new file mode 100644 index 0000000..e70ef29 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderPartInfoService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; +import cn.estsh.i3plus.pojo.mes.repository.MesPullingOrderPartInfoRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class MesPullingOrderPartInfoService extends BaseMesService implements IMesPullingOrderPartInfoService { + + + protected void setPackQueryBean(MesPullingOrderPartInfo bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + } + @Override + public void validateImport(List beanList) { + + for (MesPullingOrderPartInfo item : beanList) { + // 数据校验 + ValidatorBean.checkNotNull(item.getPullCode(), "拉动组代码不能为空"); + ValidatorBean.checkNotNull(item.getPartNo(), "物料代码不能为空"); + + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkOrderNo(), "workOrderNo", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", seriesPackBean); + boolean flg = baseRDao.isExitByHql(seriesPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单【%s】拉动组代码【%s】物料号【%s】已经存在,请检查数据", + item.getWorkOrderNo(), item.getPullCode(), item.getPartNo()) + .build(); + } + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java new file mode 100644 index 0000000..941c744 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice; + +import cn.estsh.i3plus.ext.mes.apiservice.model.SpsInfo; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPullingOrderInfoService; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import java.util.Map; + +/** + * @Description : WebServiceServerSPS + * @Author :gsz + * @Date 2024/8/30 9:18 + * @Modify + **/ + +//@WebService(targetNamespace = "http://yfaiesb/services/ServiceSyncMaximoInstrument") +@WebService(targetNamespace = "http://tempuri.org/services/SyncSPSForEquipmentService") +public class WebServiceServerSPS { + public static final Logger LOGGER = LoggerFactory.getLogger(WebServiceServerSPS.class); + + @WebMethod(action = "SyncSPSForEquipmentService", operationName = "SyncSPSForEquipmentService") + public Map syncSPSForEquipment(@WebParam(name = "info") SpsInfo spsInfo) { + LOGGER.info("syncSPSForEquipment主数据:{}", spsInfo); + + MesPullingOrderInfoService bean = (MesPullingOrderInfoService) SpringContextsUtil.getBean("mesPullingOrderInfoService"); + return bean.doSPSForEquipment(spsInfo.getAssemblyLine(),spsInfo.getPullingGroupCode(),spsInfo.getOrganizeCode()); + } + +} From 92b6b1be417da62e4a0d566cf768b756f663135c Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 4 Sep 2024 14:49:30 +0800 Subject: [PATCH 002/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=B8=BB=E6=95=B0=E6=8D=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesCutSchemeService.java | 12 ++ .../controller/base/MesCutSchemeController.java | 17 ++ .../controller/base/MesWorkOrderCutController.java | 66 +++++++ .../serviceimpl/base/MesCutSchemeService.java | 105 ++++++++++ .../serviceimpl/base/MesWorkOrderCutService.java | 216 +++++++++++++++++++++ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 11 ++ 6 files changed, 427 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java new file mode 100644 index 0000000..90109d4 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutScheme; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesCutSchemeService extends IBaseMesService { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java new file mode 100644 index 0000000..2f57f81 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutScheme; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 裁片工单 + */ +@Api("裁片工单信息") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCutScheme") +public class MesCutSchemeController extends BaseMesController{ + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java new file mode 100644 index 0000000..5bc661a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -0,0 +1,66 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 裁片工单 + */ +@Api("裁片工单信息") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderCut") +public class MesWorkOrderCutController extends BaseMesController{ + + @Autowired + private IMesWorkOrderCutService workOrderCutService; + + @PostMapping(value = "/generate") + @ApiOperation(value = "裁片工单生成", notes = "裁片工单生成") + public ResultBean doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark) { + try { + + ValidatorBean.checkNotNull(workOrderIds, "工单不存在"); + ValidatorBean.checkNotNull(cutCode, "裁片方案不存在"); + + workOrderCutService.doGenerateCutWorkOrder(workOrderIds, cutCode, remark, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("生成成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/release") + @ApiOperation(value = "裁片工单发布", notes = "裁片工单发布") + public ResultBean doReleaseCutWorkOrder(String cutWorkOrderNo) { + try { + + ValidatorBean.checkNotNull(cutWorkOrderNo, "裁片工单不存在"); + + workOrderCutService.doReleaseCutWorkOrder(cutWorkOrderNo, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("发布成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java new file mode 100644 index 0000000..c9b14c3 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java @@ -0,0 +1,105 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesCutSchemeService extends BaseMesService implements IMesCutSchemeService { + + @Autowired + private MesWorkCenterRepository workCenterRepository; + + protected void setPackQueryBean(MesCutScheme bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + DdlPreparedPack.getNumEqualPack(bean.getCutName(), MesExtConstWords.CUT_NAME, packBean); + } + + @Override + public void setBeanModel(List list) { + if(CollectionUtils.isEmpty(list)){ + return; + } + List workCenterCodeList = list.stream().map(MesCutScheme::getWorkCenterCode).filter(t -> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + Map beanMap = CollectionUtils.isEmpty(workCenterCodeList) ? null : BeanMapUtilsExt.getBeanMap(workCenterRepository, MesExtConstWords.WORK_CENTER_CODE, list.iterator().next().getOrganizeCode(), workCenterCodeList); + if(!CollectionUtils.isEmpty(beanMap)){ + list.forEach(t->{ + if (beanMap.containsKey(t.getWorkCenterCode())) { + t.setWorkCenterName(beanMap.get(t.getWorkCenterCode()).getWorkCenterName()); + } + }); + } + } + + protected void onInsertBean(MesCutScheme item) { + // 数据校验 + //ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型代码不能为空"); + //ValidatorBean.checkNotNull(item.getDefectTypeName(), "缺陷类型名称不能为空"); + // + //DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + //DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", packBean); + //boolean flg = baseRDao.isExitByHql(packBean); + //if (flg) { + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + // .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + // .setErrorDetail("【%s】缺陷类型代码已经存在,请检查数据", item.getDefectTypeCode()) + // .build(); + //} + } + + + protected void onUpdateBean(MesCutScheme item) { + + // 数据校验 + //ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型代码不能为空"); + //ValidatorBean.checkNotNull(item.getDefectTypeName(), "缺陷类型名称不能为空"); + // + //DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + //DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", packBean); + //DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", packBean); + //boolean flg = baseRDao.isExitByHql(packBean); + //if (flg) { + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + // .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + // .setErrorDetail("【%s】缺陷类型代码已经存在,请检查数据", item.getDefectTypeCode()) + // .build(); + //} + } + @Override + public void validateImport(List beanList) { + + //for (MesCutScheme item : beanList) { + // // 数据校验 + // ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型代码不能为空"); + // ValidatorBean.checkNotNull(item.getDefectTypeName(), "缺陷类型名称不能为空"); + // + // DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + // DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", packBean); + // boolean flg = baseRDao.isExitByHql(packBean); + // if (flg) { + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + // .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + // .setErrorDetail("【%s】缺陷类型代码已经存在,请检查数据", item.getDefectTypeCode()) + // .build(); + // } + //} + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java new file mode 100644 index 0000000..0972d2e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -0,0 +1,216 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesWorkOrderCutService extends BaseMesService implements IMesWorkOrderCutService { + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private MesWorkOrderCutRepository workOrderCutRepository; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + @Autowired + private MesCutSchemeFgRepository cutSchemeFgRepository; + + @Autowired + private MesCutSchemeRepository cutSchemeRepository; + + @Autowired + private MesCutSchemeMaterialRepository cutSchemeMaterialRepository; + + @Autowired + private MesWorkOrderCutMaterialRepository workOrderCutMaterialRepository; + + @Autowired + private MesWorkOrderCutDetailRepository workOrderCutDetailRepository; + + protected void setPackQueryBean(MesWorkOrderCut bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + if (!StringUtils.isEmpty(bean.getCreateDateTimeStart()) || !StringUtils.isEmpty(bean.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder( + bean.getCreateDateTimeStart(), + bean.getCreateDateTimeEnd(), + MesExtConstWords.CREATE_DATE_TIME, packBean, true); + } + DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), MesExtConstWords.WORK_ORDER_STATUS, packBean); + } + + @Override + public void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, String userName) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderIds, MesExtConstWords.ID, packBean); + List workOrderList = workOrderRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(workOrderList)) { + MesException.throwMesBusiException("工单信息不存在"); + } + + for (Long workOrderId : workOrderIds) { + if (!workOrderList.contains(workOrderId)) { + MesException.throwMesBusiException("工单信息ID【%s】不存在", workOrderId); + } + } + + for (MesWorkOrder mesWorkOrder : workOrderList) { + if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + MesException.throwMesBusiException("工单状态不为【%s】", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); + } + } + + Map> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); + + List cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode); + + if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode); + + List cutSchemeFgList = getCutSchemeFgList(cutCode, organizeCode); + + if (CollectionUtils.isEmpty(cutSchemeFgList)) MesException.throwMesBusiException("裁片方案【%s】缺少裁片方案成品配置", cutCode); + + List partNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()); + List fgPartNoList = cutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList()); + + partNoList.removeAll(fgPartNoList); + + if (CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("物料【%s】未在裁片方案成品中维护", partNoList); + + Map workOrderUnCompleteMap = new HashMap<>(); + List workOrderCutDetailtList = new ArrayList<>(); + for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { + + List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); + + if (workOrders.size() > 1) { + MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo()); + } + + MesWorkOrder workOrder = workOrders.get(0); + + if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) < 0) { + MesException.throwMesBusiException("零件号【%s】工单未完成数量不满足产成总数", cutSchemeFg.getPartNo()); + } + + Double unCompleteQty = workOrder.getUnCompleteQty(); + + workOrderUnCompleteMap.put(workOrder.getWorkOrderNo(), unCompleteQty - cutSchemeFg.getQty()); + + MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); + ConvertBean.serviceModelInitialize(detail, userName); + detail.setOrganizeCode(organizeCode); + detail.setPartNo(workOrder.getPartNo()); + detail.setPartName(workOrder.getPartName()); + detail.setWorkOrderNo(workOrder.getWorkOrderNo()); + detail.setRemark(cutSchemeFg.getRemark()); + detail.setQty(cutSchemeFg.getQty()); + workOrderCutDetailtList.add(detail); + + } + + MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); + + MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); + ConvertBean.serviceModelInitialize(workOrderCut, userName); + workOrderCut.setCutCode(cutScheme.getCutCode()); + workOrderCut.setCutName(cutScheme.getCutName()); + workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); + workOrderCut.setRemark(remark); + workOrderCut.setCutWorkOrderNo(doGererateSerialNo(cutScheme.getCutCode(), organizeCode, userName)); + workOrderCut.setOrganizeCode(organizeCode); + + List workOrderCutMaterialList = new ArrayList<>(); + for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { + MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial(); + BeanUtils.copyProperties(cutSchemeMaterial, workOrderCutMaterial, MesExtConstWords.ID); + ConvertBean.serviceModelInitialize(workOrderCut, userName); + workOrderCutMaterial.setOrganizeCode(organizeCode); + workOrderCutMaterial.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo()); + workOrderCutMaterial.setSystemSyncStatus(CommonEnumUtil.FALSE); + workOrderCutMaterialList.add(workOrderCutMaterial); + } + + workOrderCutMaterialRepository.saveAll(workOrderCutMaterialList); + workOrderCutDetailRepository.saveAll(workOrderCutDetailtList); + workOrderCutRepository.save(workOrderCut); + + for (MesWorkOrder mesWorkOrder : workOrderList) { + mesWorkOrder.setUnCompleteQty(workOrderUnCompleteMap.get(mesWorkOrder.getWorkOrderNo())); + } + + workOrderRepository.saveAll(workOrderList); + + } + + @Override + public void doReleaseCutWorkOrder(String cutWorkOrderNo, String organizeCode, String userName) { + + if (StringUtils.isEmpty(cutWorkOrderNo)) MesException.throwMesBusiException("裁片工单为空"); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutWorkOrderNo, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + MesWorkOrderCut workOrderCutDb = workOrderCutRepository.getByProperty(packBean); + + if (workOrderCutDb == null) MesException.throwMesBusiException("裁片工单不存在", cutWorkOrderNo); + + if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); + + workOrderCutDb.setWorkOrderStatus(MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue()); + + ConvertBean.serviceModelUpdate(workOrderCutDb, userName); + + workOrderCutRepository.save(workOrderCutDb); + } + + private String doGererateSerialNo(String cutCode, String organizeCode, String userName) { + return syncFuncService.syncSerialNo( + new GenSerialNoModel(MesExtConstWords.CUT_WORK_ORDER_NO_FUL).dynamicRule(cutCode).year(TimeTool.pareDateToString(MesExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(organizeCode), + userName, organizeCode, 1).getResultList().get(0).toString(); + } + + private MesCutScheme getCutScheme(String cutCode, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeRepository.getByProperty(packBean); + + } + + private List getCutSchemeFgList(String cutCode, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeFgRepository.findByHqlWhere(packBean); + } + + private List getCutSchemeMaterialList(String cutCode, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeMaterialRepository.findByHqlWhere(packBean); + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 4d70267..29503c9 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -209,6 +209,8 @@ public class MesExtConstWords { //日期类型 public static final String DATE_FORMAT_YM = "yyyy-MM"; //日期类型 + public static final String DATE_FORMAT_YY = "yy"; + //日期类型 public static final String DATE_DD_01 = "-01"; //日期类型 public static final String DATE_DD_31 = "-31"; @@ -242,4 +244,13 @@ public class MesExtConstWords { //JOB停机类型代码 public static final String MES_DOWNTIME_RECORD_JOB_TYPE = "MES_DOWNTIME_RECORD_JOB_TYPE"; + // 裁片工单号 + public static final String CUT_WORK_ORDER_NO = "cutWorkOrderNo"; + // 裁片代码 + public static final String CUT_CODE = "cutCode"; + // 裁片名称 + public static final String CUT_NAME = "cutName"; + // 裁片工单号 + public static final String CUT_WORK_ORDER_NO_FUL = "CUT_WORK_ORDER_NO"; + } From 025591db89bd5deb26755bb318173d5e9c275078 Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 4 Sep 2024 14:51:49 +0800 Subject: [PATCH 003/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=B8=BB=E6=95=B0=E6=8D=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderCutService.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java new file mode 100644 index 0000000..ffff61b --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesWorkOrderCutService extends IBaseMesService { + + @ApiOperation("生成裁片工单") + void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, String userName); + + @ApiOperation("发布裁片工单") + void doReleaseCutWorkOrder(String cutWorkOrderNo, String organizeCode, String userName); + +} From 69bf4af13103473fa409e3e3c03842b8a828d3be Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 5 Sep 2024 13:35:42 +0800 Subject: [PATCH 004/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8E=9F=E6=9D=90?= =?UTF-8?q?=E6=96=99=E9=98=B2=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderCutService.java | 2 +- .../controller/base/MesWorkOrderCutController.java | 13 +++++----- .../serviceimpl/base/MesWorkOrderCutService.java | 29 ++++++++++++++-------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index ffff61b..bbca02b 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -16,6 +16,6 @@ public interface IMesWorkOrderCutService extends IBaseMesService workOrderIds, String cutCode, String remark, String organizeCode, String userName); @ApiOperation("发布裁片工单") - void doReleaseCutWorkOrder(String cutWorkOrderNo, String organizeCode, String userName); + void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index 5bc661a..95adaa1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -16,8 +16,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - +import java.util.Arrays; /** * 裁片工单 */ @@ -31,13 +30,13 @@ public class MesWorkOrderCutController extends BaseMesController workOrderIds, String cutCode, String remark) { + public ResultBean doGenerateCutWorkOrder(Long[] workOrderIds, String cutCode, String remark) { try { ValidatorBean.checkNotNull(workOrderIds, "工单不存在"); ValidatorBean.checkNotNull(cutCode, "裁片方案不存在"); - workOrderCutService.doGenerateCutWorkOrder(workOrderIds, cutCode, remark, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + workOrderCutService.doGenerateCutWorkOrder(Arrays.asList(workOrderIds), cutCode, remark, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); return ResultBean.success("生成成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { @@ -49,12 +48,12 @@ public class MesWorkOrderCutController extends BaseMesController impl } @Override - public void doReleaseCutWorkOrder(String cutWorkOrderNo, String organizeCode, String userName) { + public void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { - if (StringUtils.isEmpty(cutWorkOrderNo)) MesException.throwMesBusiException("裁片工单为空"); + if (CollectionUtils.isEmpty(cutWorkOrderNos)) MesException.throwMesBusiException("裁片工单为空"); - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(cutWorkOrderNo, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); - MesWorkOrderCut workOrderCutDb = workOrderCutRepository.getByProperty(packBean); + List workOrderCuts = new ArrayList<>(); + + for (String cutWorkOrderNo : cutWorkOrderNos) { + + if (StringUtils.isEmpty(cutWorkOrderNos)) MesException.throwMesBusiException("裁片工单为空"); - if (workOrderCutDb == null) MesException.throwMesBusiException("裁片工单不存在", cutWorkOrderNo); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutWorkOrderNo, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + MesWorkOrderCut workOrderCutDb = workOrderCutRepository.getByProperty(packBean); - if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); + if (workOrderCutDb == null) MesException.throwMesBusiException("裁片工单不存在", cutWorkOrderNo); - workOrderCutDb.setWorkOrderStatus(MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue()); + if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); - ConvertBean.serviceModelUpdate(workOrderCutDb, userName); + } + + for (MesWorkOrderCut workOrderCut : workOrderCuts) { + workOrderCut.setWorkOrderStatus(MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue()); + ConvertBean.serviceModelUpdate(workOrderCut, userName); + } - workOrderCutRepository.save(workOrderCutDb); + workOrderCutRepository.saveAll(workOrderCuts); } private String doGererateSerialNo(String cutCode, String organizeCode, String userName) { From 74ed9942d8cd64ef59da1e229d5d61cafe65a02b Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 5 Sep 2024 14:15:30 +0800 Subject: [PATCH 005/180] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 2 +- .../main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 39c90b0..dffdc0d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -83,7 +83,7 @@ public class MesPullingOrderInfoService extends BaseMesService byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + //List byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); resultMap.put("",mesPullingOrder); resultMap.put("success", true); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 29503c9..66a8837 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -250,7 +250,11 @@ public class MesExtConstWords { public static final String CUT_CODE = "cutCode"; // 裁片名称 public static final String CUT_NAME = "cutName"; + //拆解目标库位 + public static final String DISASSEMBLY_DEST_LOCATE = "DISASSEMBLY_DEST_LOCATE"; // 裁片工单号 public static final String CUT_WORK_ORDER_NO_FUL = "CUT_WORK_ORDER_NO"; + // 条码 + public static final String SN = "sn"; } From e7a64270a0d23ec4edd1401ee928f3aae166cc21 Mon Sep 17 00:00:00 2001 From: yxw Date: Fri, 6 Sep 2024 00:18:23 +0800 Subject: [PATCH 006/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderCutService.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index f69fdaf..f325175 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -73,8 +73,10 @@ public class MesWorkOrderCutService extends BaseMesService impl MesException.throwMesBusiException("工单信息不存在"); } + List workOrderIdDbList = workOrderList.stream().map(MesWorkOrder::getId).collect(Collectors.toList()); + for (Long workOrderId : workOrderIds) { - if (!workOrderList.contains(workOrderId)) { + if (!workOrderIdDbList.contains(workOrderId)) { MesException.throwMesBusiException("工单信息ID【%s】不存在", workOrderId); } } @@ -100,7 +102,7 @@ public class MesWorkOrderCutService extends BaseMesService impl partNoList.removeAll(fgPartNoList); - if (CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("物料【%s】未在裁片方案成品中维护", partNoList); + if (!CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("零件号【%s】未在裁片方案成品中维护", partNoList); Map workOrderUnCompleteMap = new HashMap<>(); List workOrderCutDetailtList = new ArrayList<>(); @@ -114,8 +116,8 @@ public class MesWorkOrderCutService extends BaseMesService impl MesWorkOrder workOrder = workOrders.get(0); - if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) < 0) { - MesException.throwMesBusiException("零件号【%s】工单未完成数量不满足产成总数", cutSchemeFg.getPartNo()); + if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) > 0) { + MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), cutSchemeFg.getQty()); } Double unCompleteQty = workOrder.getUnCompleteQty(); @@ -142,14 +144,16 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCut.setCutName(cutScheme.getCutName()); workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); workOrderCut.setRemark(remark); - workOrderCut.setCutWorkOrderNo(doGererateSerialNo(cutScheme.getCutCode(), organizeCode, userName)); + workOrderCut.setCutWorkOrderNo(doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName)); workOrderCut.setOrganizeCode(organizeCode); + workOrderCutDetailtList.forEach(o-> o.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo())); + List workOrderCutMaterialList = new ArrayList<>(); for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial(); BeanUtils.copyProperties(cutSchemeMaterial, workOrderCutMaterial, MesExtConstWords.ID); - ConvertBean.serviceModelInitialize(workOrderCut, userName); + ConvertBean.serviceModelInitialize(workOrderCutMaterial, userName); workOrderCutMaterial.setOrganizeCode(organizeCode); workOrderCutMaterial.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo()); workOrderCutMaterial.setSystemSyncStatus(CommonEnumUtil.FALSE); @@ -197,7 +201,7 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCutRepository.saveAll(workOrderCuts); } - private String doGererateSerialNo(String cutCode, String organizeCode, String userName) { + private String doGenerateSerialNo(String cutCode, String organizeCode, String userName) { return syncFuncService.syncSerialNo( new GenSerialNoModel(MesExtConstWords.CUT_WORK_ORDER_NO_FUL).dynamicRule(cutCode).year(TimeTool.pareDateToString(MesExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(organizeCode), userName, organizeCode, 1).getResultList().get(0).toString(); From 11ccae7461980d9fdd9fbddd5e60ef230f3128ef Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 8 Sep 2024 16:54:16 +0800 Subject: [PATCH 007/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=E6=B8=85=E5=8D=95=EF=BC=8C=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E9=9B=B6=E4=BB=B6=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/base/IMesBomService.java | 9 + .../i3plus/ext/mes/api/base/IMesBtoJobService.java | 7 + .../schedulejob/MesWhJisCreateOrderJob.java | 82 ++++ .../apiservice/serviceimpl/base/MesBomService.java | 9 + .../serviceimpl/base/MesBtoJobServiceImpl.java | 37 ++ .../base/roundness/MesPackageRoundnessService.java | 412 +++++++++++++++++++++ 6 files changed, 556 insertions(+) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java index 2fd31de..ccb7588 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java @@ -45,5 +45,14 @@ public interface IMesBomService extends IBaseMesService { @ApiOperation(value = "递归查询bom数据") List findBomList(String organizeCode, MesPart mesPart, String bomVersion); + /** + * 根据生产版本和零件号查询bom + * @param organizeCode + * @param bomVersion + * @param partNo + * @return + */ + MesBom findBom(String organizeCode, String bomVersion,String partNo); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java index 651cb54..682417c 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java @@ -16,4 +16,11 @@ public interface IMesBtoJobService { * @param groupCodeList */ void doCreateBto(String organizeCode, List groupCodeList); + + /** + * 武汉JIS按照零件生产组生成工单、零件清单、装配清单; 按包装圆整 + * @param organizeCode + * @param groupCodeList + */ + void doWhJisWorkOrder(String organizeCode, List groupCodeList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java new file mode 100644 index 0000000..734d5e6 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java @@ -0,0 +1,82 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +/* +入参 +{ + "organizeCode": "CK01", + "partGroupCode": [ + "CK01-Code", + "CK02-Code" + ] + +} + */ + +/** + * @Description : BTO生成工单 + * @Reference : + * @Author : castle + * @CreateDate : 2024-05-10 11:03 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@Component +@ApiOperation("武汉JIS生成工单") +public class MesWhJisCreateOrderJob extends BaseMesScheduleJob { + public static final Logger LOGGER = LoggerFactory.getLogger(MesWhJisCreateOrderJob.class); + + @Autowired + private IMesBtoJobService btoJobService; + + public MesWhJisCreateOrderJob() { + super(MesWhJisCreateOrderJob.class, "武汉JIS生成工单"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + Map paramMap; + try { + paramMap = (Map) JSONObject.parse(jobParam); + } catch (Exception e) { + LOGGER.error("参数格式不是JSON"); + return; + + } + if (CollectionUtils.isEmpty(paramMap)) { + LOGGER.error("BTO生成工单,没有配置参数"); + return; + } + String organizeCode = (String) paramMap.get("organizeCode"); + List groupCodeList = (List) paramMap.get("groupCode"); + btoJobService.doCreateBto(organizeCode, groupCodeList); + LOGGER.info("BTO生成工单job结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("BTO生成工单e:{}", Arrays.toString(e.getStackTrace())); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index 87520bf..d3c684b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -169,6 +169,15 @@ public class MesBomService extends BaseMesService implements IMesBomServ return new ArrayList<>(summaryBomMap.values()); } + @Override + public MesBom findBom(String organizeCode, String bomVersion, String partNo) { + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", bomPackBean); + List bomList = this.baseRDao.findByHqlWhere(bomPackBean); + return bomList.isEmpty() ? null : bomList.get(0); + } + /** * 递归展开 BOM * diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java index 34b01de..b8c5949 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -45,6 +45,7 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { @Autowired private MesPartProdGroupWindowTimeRepository windowTimeRao; + @Override public void doCreateBto(String organizeCode, List groupCodeList) { //1. 根据 organizeCode 和 groupCodeList 查询零件生产组 @@ -58,6 +59,10 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { } List details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode); + if (details.isEmpty()){ + log.info("当前零件生产组:{}没有详情",prodGroup.getPartProdGroupCode()); + return; + } List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); @@ -85,6 +90,38 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { } } + @Override + public void doWhJisWorkOrder(String organizeCode, List groupCodeList) { + //1.校验零件生产组是否有 -- return + List mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList); + if (mesPartProdGroups.isEmpty()){ + log.info("当前配置的零件生产组代码:{},查询不到零件生产组信息",groupCodeList); + } + //2.循环遍历零件生产组 + for (MesPartProdGroup prodGroup : mesPartProdGroups) { + //2. 根据生产组的infoPointCode 获取 过点信息MES_CUSTOMER_MESSAGE_POINT + MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode); + if (messagePoint == null){ + log.info("客户的信息点{}不存在",prodGroup.getCustInfoPoint()); + continue; + } + List details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode); + List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); + List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); + if (sortInfoList.isEmpty()){ + log.info("当前零件生产组:{}没有排序信息",prodGroup.getCustInfoPoint()); + return; + } + //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 + String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod()); + IRoundnessStrategy roundnessStrategy = (IRoundnessStrategy)SpringContextsUtil.getBean(roundnessService); + roundnessStrategy.execute(prodGroup,sortInfoList, details); + } + + + } + + /** * 排序信息不复用的时候 * @param infoPointCode diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java new file mode 100644 index 0000000..4e73161 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -0,0 +1,412 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.roundness; + +import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesCustSoftInfoServiceImpl; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Description : 按照包装圆整 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 21:22 + * @Modify: + **/ +@Service +public class MesPackageRoundnessService implements IRoundnessStrategy { + + private static final Logger log = LoggerFactory.getLogger(MesPackageRoundnessService.class); + @Autowired + private IMesProdGroupPartBtoCountRepository btoCountRao; + + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRao; + + @Autowired + private MesWorkOrderRepository mesWorkOrderRao; + + + @Autowired + private MesShiftRepository mesShiftRao; + + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Override + public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { + try { + Map prodGroupDetailMap = details.stream().collect(Collectors.toMap(MesPartProdGroupDetail::getCustPartNo, Function.identity())); + //1.生产组中的圆整数量 + double roundQty = Double.parseDouble(partProdGroup.getRoundQty()); + //2.排序信息中的零件合计数量 + double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get(); + //3.当数量未达到圆整包装数时 + if (qty < roundQty) { + //4.查看客户排序信息钟的最早的一条过点时间 + 生产组最晚生成时间是否已到达当前时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { + try { + if (sdf.parse(sortInfo1.getMatchTime()).after(sdf.parse(sortInfo2.getMatchTime()))) { + return 1; + } + } catch (ParseException e) { + log.error("解析匹配时间报错:{}", e.getMessage()); + } + return -1; + }).collect(Collectors.toList()); + + MesCustSortInfo sortInfo = sortInfoList.get(0); + //最晚延迟的时间 + int latestCreationTime = Integer.parseInt(partProdGroup.getLatestCreationTime()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf.parse(sortInfo.getMatchTime())); + calendar.add(Calendar.MINUTE, latestCreationTime); + Date laterTime = calendar.getTime(); + + if (laterTime.after(new Date())) { + log.info("当前时间:{}没有达到最晚生成时间:{}", sdf.format(new Date()), sdf.format(laterTime)); + return; + } else { + //如果最早来的排序信息的多点时间已经超过最晚生成时间,则圆整数为当前排序信息对应的合计数 + roundQty = qty; + } + //是否是头部零件 + Integer isSeqInfoHeadPart = partProdGroup.getIsSeqInfoHeadPart(); + if (isSeqInfoHeadPart == null || isSeqInfoHeadPart == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { + log.info("非头零件不能按照包装圆整;零件生产组为:{}", partProdGroup.getPartProdGroupCode()); + return; + } + + //扣减qty 生成工单 + while (qty > 0) { + //临时客户排序信息中的数量计数器 + double custSortRoundnessQty = roundQty; + + while (custSortRoundnessQty > 0) { + sortInfo = sortInfoList.get(0); + double custQty = sortInfo.getQty(); + //当客户排序信息中的数量大于剩余圆整数量要Break + if (custQty > roundQty) { + log.info("单笔订单数量大于圆整数量01,车号:{}", sortInfo.getVinCode()); + return; + } + if (custQty > custSortRoundnessQty) { + log.info("单笔订单数量大于圆整数量02,车号:{}", sortInfo.getVinCode()); + return; + } + + //查找该零件是否在生产组中 + MesPartProdGroupDetail mesPartProdGroupDetail = prodGroupDetailMap.get(sortInfo.getCustPartNo()); + if (mesPartProdGroupDetail == null) { + log.info("生产组中未找到该零件:{}", sortInfo.getCustPartNo()); + return; + } + //生产零件号 + if (mesPartProdGroupDetail.getProductPartNo() == null) { + mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo()); + } + MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); + + if (mesPart == null) { + log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getProductPartNo()); + return; + } + + + doCreateWorkOrder(partProdGroup,mesPartProdGroupDetail,mesPart,sortInfo); + } + } + + + } + } catch (Exception e) { + log.error("按包装圆整出错:MesPackageRoundnessService", e); + } + } + + private void doCreateWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) throws ParseException { + + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + + //工单版本号 + mesWorkOrder.setProductVersion("1"); + //工单类型 + mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.SORT.getValue()); + //订单序号=客户排序信息的序号 + mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); + mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); + mesWorkOrder.setWorkCenterCode(mesPartProdGroupDetail.getWorkCenterCode()); + mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); + + //来源 + mesWorkOrder.setWorkOrderSource(sortInfo.getId().toString()); + + mesWorkOrder.setVinCode(sortInfo.getVinCode()); + mesWorkOrder.setProductTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); + //todo ptr信息 + //mesWorkOrder.setPtrInfo(sortInfo.getRemark()); + //客户订单号 + mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); + //车型代码 todo + //mesWorkOrder.setCarModelCode(sortInfo.getCarModelCode()); + //车型描述 mesWorkOrder.setCarName = vehicleClassCode + + //备注取自于车型配置表中 + //todo 根据VehicleNo车型代码,sortInfo.custCode,sortInfo.CustPlantCode,organizeCode 查询表TI_CIM_VEHICLE_MODEL的 remark 作为从车型配置表中获取打印备注信息 + + mesWorkOrder.setCustPartNo(sortInfo.getCustPartNo()); +// mesWorkOrder.setCcrNo = sortInfo.CcrNo +// mesWorkOrder.AssyCode = sortInfo.AssyCode +// mesWorkOrder.setVehicleYear = sortInfo.getVehicleYear() + + // 11. 是否将生成日期减一天 + // 班次 根据产线+计划时间匹配班次 + DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); + List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = sdf.parse(sortInfo.getMatchTime()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + + int minutes = calendar.get(Calendar.MINUTE); + String shiftTime = String.format("%02d:%02d", hours, minutes); + if (!shiftList.isEmpty()) { + for (MesShift shift : shiftList) { + String startTime = shift.getStartTime().replace(":", ""); + String endTime = shift.getEndTime().replace(":", ""); + if ((shiftTime.compareTo(startTime) >= 0) && (shiftTime.compareTo(endTime) <= 0)) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + break; + } + } + } else { + log.info("当前产线:{} 没有配置班次", mesPartProdGroupDetail.getWorkCenterCode()); + } + + //零件相关 + mesWorkOrder.setPartNo(partSap.getPartNo()); + mesWorkOrder.setPartName(partSap.getPartName()); + + // 13.生产版本 organizeCode + partNo + MesProductVersion prodVersion = getProdVersion(mesPartProdGroupDetail.getOrganizeCode(), partSap.getPartNo()); + if (prodVersion == null) { + log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); + } else { + String productVersion = prodVersion.getProductVersion(); + mesWorkOrder.setProductVersion(productVersion); + } + + //todo bom prodVersion.alternativePartList bom版本 + MesBom bom = mesBomService.findBom(mesPartProdGroupDetail.getOrganizeCode(), prodVersion.getAlternativePartList(), partSap.getPartNo()); +// if (bom != null){ +// mesWorkOrder.setBomCode(bom.getBomCode()) +// } + + mesWorkOrder.setQty(sortInfo.getQty()); + mesWorkOrder.setUnCompleteQty(sortInfo.getQty()); + mesWorkOrder.setUnit(partSap.getUnit()); + + if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + } else { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + } + + mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + // todo 缺少单号 N 单字段 + // todo 车型 + // todo 客户零件条码 + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(),bom.getBomCode(),sortInfo.getOrganizeCode(),mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo() ); + + } + // 生成装配件清单 + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), null, workOrderPartList, partProdGroup); + ConvertBean.saveOrUpdate(mesWorkOrder,"MES-JOB"); + mesWorkOrderRao.insert(mesWorkOrder); + + if (!workOrderPartList.isEmpty()) { + for (MesWorkOrderPart orderPart : workOrderPartList) { + ConvertBean.saveOrUpdate(orderPart,"MES-JOB"); + } + workOrderPartRao.saveAll(workOrderPartList); + } + + if (!assemblyList.isEmpty()){ + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + ConvertBean.saveOrUpdate(orderAssembly,"MES-JOB"); + } + workOrderAssemblyRao.saveAll(assemblyList); + } + + } + + + private List getAssemblyList(String workCenterCode, String VehicleNo,List workOrderPartList,MesPartProdGroup mesPartProdGroup){ + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList,"partNo",prodRuleSortPackBean); + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgList) { + MesWorkOrderPart orderPart = orderPartMap.get(sortCfg.getAssemblyPartNo()); + //1.逻辑储量程序sortCfg.isLogicNum + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setPartNo(orderPart.getPartNo()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); + orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + + return workOrderAssemblyList; + } + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList,"partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + log.info("工厂:{},零件号:{}未查到零件信息", organizeCode,bom.getItemPartNo()); + return null; + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null){ + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime,"effStartTime","effEndTime",bomCodePackBean,false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean,1); + if (bomList == null || bomList.isEmpty()){ + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime,"effStartTime","effEndTime",bomPackBean,false); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType()!=null && bom.getPartType().equalsIgnoreCase("X")){ + getPlatBom(bom.getItemPartNo(),effectiveTime,null,organizeCode); + }else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private MesPartSap getMesPart(String productPartNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); + List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); + return parts.isEmpty() ? new MesPartSap() : parts.get(0); + } + + private MesProductVersion getProdVersion(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); + return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); + } + + +} From 8f751f8330a31c2bd0740e6c94c2252d67b15d48 Mon Sep 17 00:00:00 2001 From: gsz Date: Mon, 9 Sep 2024 15:39:46 +0800 Subject: [PATCH 008/180] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=E7=BB=84=E5=92=8C=E7=94=9F=E4=BA=A7=E5=B7=A5=E5=8D=95=E4=BA=A7?= =?UTF-8?q?=E7=94=9F=E6=8B=89=E5=8A=A8=E5=8D=95JOB-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesPullingOrderInfoService.java | 2 + ...sCreatePullOrderByPullGroupAndWorkOrderJob.java | 71 ++++++++++++++++++++++ .../base/MesPullingOrderInfoService.java | 39 ++++++++++-- 3 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java index b4c0da4..ea59b67 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java @@ -12,4 +12,6 @@ import java.util.Map; public interface IMesPullingOrderInfoService extends IBaseMesService { Map doSPSForEquipment( String assemblyLine, String pullingGroupCode,String organizeCode ); + + void doCreatePullOrderByPullGroupAndWorkOrder(String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java new file mode 100644 index 0000000..4f94856 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +import java.util.List; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("根据拉动组和生产工单产生拉动单JOB") +public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderByPullGroupAndWorkOrderJob.class); + + private static final long serialVersionUID = 9072058154235836696L; + + @Autowired + private IMesPullingOrderInfoService pullingOrderInfoService; + + @Autowired + private IMesConfigService mesConfigService; + + @Value("${server.port}") + private String serverPort; + @Value("${impp.server.ip}") + private String ip; + + public MesCreatePullOrderByPullGroupAndWorkOrderJob() { + super(MesCreatePullOrderByPullGroupAndWorkOrderJob.class, "根据拉动组和生产工单产生拉动单JOB"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + String[] organizeCodeList = jobParam.split(","); + LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始 -----start"); + String userName = "job"; + for (String organizeCode : organizeCodeList) { + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,userName); + } + LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("根据拉动组和生产工单产生拉动单JOB任务结束e:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index dffdc0d..ef8224c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -2,26 +2,29 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartPullService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; -import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; -import cn.estsh.i3plus.pojo.mes.repository.MesPullingOrderPartInfoRepository; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; @Service @Slf4j @@ -29,7 +32,14 @@ public class MesPullingOrderInfoService extends BaseMesService pulliGroupList = mesPartPullRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(pulliGroupList)){ + return; + } + DdlPackBean ddlPackBeanDetail = DdlPackBean.getDdlPackBean(organizeCode); + List pullDetailList = mesPartPullDetailRDao.findByHqlWhere(ddlPackBeanDetail); + if (CollectionUtils.isEmpty(pullDetailList)){ + return; + } + //2.客户物料集合 [PART_NO] in 拉动组明细物料集合 + //3.产线数据 + DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).collect(Collectors.toList()), "workCenterCode", workPackBean); + List mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean); + + } + + @Override public Map doSPSForEquipment(String assemblyLine, String pullingGroupCode, String organizeCode) { Map resultMap = new HashMap(); //查询拉动单状态为已扫描=20的 拉动单 From 5ece1cb50651526da5c325d276af4e97a2219705 Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 11 Sep 2024 11:30:03 +0800 Subject: [PATCH 009/180] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=A3=81=E7=89=87?= =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderCutService.java | 3 +++ .../serviceimpl/base/MesWorkOrderCutService.java | 30 +++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index bbca02b..0054521 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -18,4 +18,7 @@ public interface IMesWorkOrderCutService extends IBaseMesService cutWorkOrderNos, String organizeCode, String userName); + @ApiOperation("打印裁片工单") + void doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index f325175..b5b5029 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -144,7 +144,12 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCut.setCutName(cutScheme.getCutName()); workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); workOrderCut.setRemark(remark); - workOrderCut.setCutWorkOrderNo(doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName)); + + String cutWorkOrderNo = doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName); + + log.info("裁片工单号:{}", cutWorkOrderNo); + + workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); workOrderCut.setOrganizeCode(organizeCode); workOrderCutDetailtList.forEach(o-> o.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo())); @@ -191,6 +196,8 @@ public class MesWorkOrderCutService extends BaseMesService impl if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); + workOrderCuts.add(workOrderCutDb); + } for (MesWorkOrderCut workOrderCut : workOrderCuts) { @@ -201,6 +208,27 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCutRepository.saveAll(workOrderCuts); } + @Override + public void doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutWorkOrderNos, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + List workOrderCutDbList = workOrderCutRepository.findByHqlWhere(packBean); + + List cutWorkOrderNoDbList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutWorkOrderNo).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(cutWorkOrderNoDbList)) MesException.throwMesBusiException("裁片工单不存在"); + + cutWorkOrderNos.removeAll(cutWorkOrderNoDbList); + + if (!CollectionUtils.isEmpty(cutWorkOrderNos)) + MesException.throwMesBusiException("裁片工单【%s】不存在", cutWorkOrderNos); + + List cutCode = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); + + + } + private String doGenerateSerialNo(String cutCode, String organizeCode, String userName) { return syncFuncService.syncSerialNo( new GenSerialNoModel(MesExtConstWords.CUT_WORK_ORDER_NO_FUL).dynamicRule(cutCode).year(TimeTool.pareDateToString(MesExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(organizeCode), From 3938ed8b155bacc8793ec3c18445dbf3b80f8d1c Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 11 Sep 2024 12:17:43 +0800 Subject: [PATCH 010/180] =?UTF-8?q?SPS=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=20=E7=94=9F=E6=88=90=E6=8B=89=E5=8A=A8=E5=8D=95JOB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesPullingOrderInfoController.java | 16 ++ .../base/MesPullingOrderPartInfoController.java | 18 +++ ...sCreatePullOrderByPullGroupAndWorkOrderJob.java | 2 +- .../base/MesPullingOrderInfoService.java | 174 +++++++++++++++++++-- .../ext/mes/pojo/constant/MesCommonConstant.java | 1 + 5 files changed, 199 insertions(+), 12 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java new file mode 100644 index 0000000..aa1545f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 拉动单 + */ +@Api("拉动单") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderInfo") +public class MesPullingOrderInfoController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java new file mode 100644 index 0000000..1cf731a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 拉动单 + */ +@Api("拉动单") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderPartInfo") +public class MesPullingOrderPartInfoController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java index 4f94856..d0c4fcf 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java @@ -57,7 +57,7 @@ public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesSchedul } String[] organizeCodeList = jobParam.split(","); LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始 -----start"); - String userName = "job"; + String userName = "CreatePullOrderJob"; for (String organizeCode : organizeCodeList) { pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,userName); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index ef8224c..1b5f6ae 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -3,8 +3,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartPullService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.WmsConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -15,21 +20,23 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class MesPullingOrderInfoService extends BaseMesService implements IMesPullingOrderInfoService { - + public static final Logger LOGGER = LoggerFactory.getLogger(MesPullingOrderInfoService.class); + @Autowired + private MesPullingOrderInfoRepository mesPullingOrderInfoRepository; @Autowired private MesPullingOrderPartInfoRepository mesPullingOrderPartInfoRepository; @Autowired @@ -37,13 +44,21 @@ public class MesPullingOrderInfoService extends BaseMesService pulliGroupList = mesPartPullRDao.findByHqlWhere(ddlPackBean); - if (CollectionUtils.isEmpty(pulliGroupList)){ + if (CollectionUtils.isEmpty(pulliGroupList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->{}拉动组不存在", organizeCode); return; } + Map> pullCodeMap = pulliGroupList.stream().collect(Collectors.groupingBy(MesPartPull::getPullCode)); + Map> pullCodeCenterMap = pulliGroupList.stream().collect(Collectors.groupingBy(p -> p.getWorkCenterCode() + "=" + p.getPullCode())); + DdlPackBean ddlPackBeanDetail = DdlPackBean.getDdlPackBean(organizeCode); List pullDetailList = mesPartPullDetailRDao.findByHqlWhere(ddlPackBeanDetail); - if (CollectionUtils.isEmpty(pullDetailList)){ + if (CollectionUtils.isEmpty(pullDetailList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->{}拉动组明细不存在", organizeCode); return; } + Map> partPullDetailListMap = pullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPartNo)); //2.客户物料集合 [PART_NO] in 拉动组明细物料集合 //3.产线数据 DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).collect(Collectors.toList()), "workCenterCode", workPackBean); + List workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).collect(Collectors.toList()); + DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean); List mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean); + if (CollectionUtils.isEmpty(mesWorkCenterList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList); + return; + } + Map> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); + + //4.生产工单 在加工状态 [PULLING_STATUS] =0 未创建 + DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", packBeanWorkOrder); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), "workOrderStatus", packBeanWorkOrder); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.NOTCREATE.getValue(), "pullingStatus", packBeanWorkOrder); + List workOrderList = mesWorkOrderRepository.findByHqlWhere(packBeanWorkOrder); + if (CollectionUtils.isEmpty(workOrderList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线信息没有【未创建】【在加工】状态的工单-->{}", organizeCode, workCenterList); + return; + } + Map> workOrderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo)); + + DdlPackBean packBeanWorkOrderPart = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()), "workOrderNo", workPackBean); + List mesWorkOrderPartList = workOrderPartRepository.findByHqlWhere(packBeanWorkOrderPart); + if (CollectionUtils.isEmpty(mesWorkOrderPartList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workCenterList); + return; + } + //5.取工单零件和拉动组交集,根据拉动主表对应的类型 生成相应的拉动单和拉动单明细 + Map> workOrderNoListMap = mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo)); + + + for (Map.Entry> stringListEntry : workOrderNoListMap.entrySet()) { + //需要生成拉动单的工单号 对应工单 + List mesWorkOrders = workOrderListMap.get(stringListEntry.getKey()); + MesWorkOrder mesWorkOrder = mesWorkOrders.get(0); + + //工单对应的工单零件号 + List workOrderParts = stringListEntry.getValue(); + //待生成的拉动组明细 + List pullDetailListNew = new ArrayList<>(); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + if (!CollectionUtils.isEmpty(partPullDetailListMap.get(workOrderPart.getPartNo()))) { + pullDetailListNew.addAll(partPullDetailListMap.get(workOrderPart.getPartNo())); + } + } + if (CollectionUtils.isEmpty(pullDetailListNew)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线-->{}对应的工单号-->{}没有需要生成拉动单零件", + organizeCode, mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getWorkOrderNo()); + continue; + } + Map> workOrderPartListMap = workOrderParts.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //生成拉动单 如果是多个拉动组的话都要产生拉动单 + Map> pullCodeListMap = pullDetailListNew.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPullCode)); + for (Map.Entry> stringListEntryDetail : pullCodeListMap.entrySet()) { + String pullCode = stringListEntryDetail.getKey(); + List mesPartPulls = pullCodeMap.get(pullCode); + MesPartPull mesPartPull = mesPartPulls.get(0);//拉动组明细拉动单号对应拉动组 + List mesPartPullDetails = stringListEntryDetail.getValue(); + //调用平台生成拉动单号流水 -yyyyMMdd00001 + String orderNo = ""; + if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { + orderNo = "KITTING"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.JIS_PULL.getValue()) { + orderNo = "JIS"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.SPS_PULL.getValue()) { + orderNo = "SPS"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.BENZ_PULL.getValue()) { + orderNo = "BENZ"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.PICK_PULL.getValue()) { + orderNo = "PICK"; + } + + BaseResultBean orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO); + if (orderResutlBean != null && orderResutlBean.isSuccess()) { + orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString(); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("生成单号失败") + .setErrorSolution("【MES_PULL_ORDER_NO】请重新操作或查看服务!") + .build(); + } + MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo(); + pullingOrder.setPullingOrderNo(orderNo); + pullingOrder.setPullOrderType(mesPartPull.getPullOrderType()); + pullingOrder.setPullGroupFid(mesPartPull.getId()); + pullingOrder.setCustOrderNo(StringUtil.isEmpty(mesWorkOrder.getCustOrderNo()) ? "" : mesWorkOrder.getCustOrderNo()); + pullingOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + pullingOrder.setWorkOrderSeq(StringUtil.isEmpty(mesWorkOrder.getWorkOrderSeq()) ? "" : mesWorkOrder.getWorkOrderSeq()); + pullingOrder.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + pullingOrder.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + pullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue()); + pullingOrder.setWorkCenterCode(mesPartPull.getWorkCenterCode()); + pullingOrder.setPullCode(mesPartPull.getPullCode()); + pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + pullingOrder.setProduceSeq(StringUtil.isEmpty(mesWorkOrder.getProduceSeq()) ? 0 : mesWorkOrder.getProduceSeq()); + + ConvertBean.serviceModelInitialize(pullingOrder, userName); + mesPullingOrderInfoRepository.insert(pullingOrder); + + for (MesPartPullDetail partInfo : mesPartPullDetails) { + MesPullingOrderPartInfo pullingOrderPartInfo = new MesPullingOrderPartInfo(); + pullingOrderPartInfo.setPullCode(partInfo.getPullCode()); + pullingOrderPartInfo.setPullingOrderNo(pullingOrder.getPullingOrderNo()); + pullingOrderPartInfo.setWorkOrderNo(pullingOrder.getWorkOrderNo()); + pullingOrderPartInfo.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); + pullingOrderPartInfo.setCustOrderNo(pullingOrder.getCustOrderNo()); + pullingOrderPartInfo.setPartNo(partInfo.getPartNo()); + pullingOrderPartInfo.setPartName(partInfo.getPartName()); + MesWorkOrderPart mesWorkOrderPart = workOrderPartListMap.get(partInfo.getPartNo()).get(0); + pullingOrderPartInfo.setPullQty(mesWorkOrderPart.getItemQty()); + pullingOrderPartInfo.setCustOrderNo(pullingOrder.getCustOrderNo()); + pullingOrderPartInfo.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); + pullingOrderPartInfo.setWaterSeq(pullingOrder.getProduceSeq()); + pullingOrderPartInfo.setWorkCellCode(mesWorkOrderPart.getWorkCellCode()); + pullingOrderPartInfo.setEquipment(partInfo.getEquipment()); + pullingOrderPartInfo.setLocation(partInfo.getPullAddr());//todo + pullingOrderPartInfo.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0 + pullingOrderPartInfo.setCustPartNo(pullingOrder.getCustPartNo()); + + ConvertBean.serviceModelInitialize(pullingOrderPartInfo, userName); + mesPullingOrderPartInfoRepository.insert(pullingOrderPartInfo); + } + } + //6.产生拉动单后更新工单拉动状态为已拉动 + mesWorkOrder.setPullingStatus(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()); + mesWorkOrderRepository.update(mesWorkOrder); + //7.拉动组+加工单号+生成拉动单状态的对应关系中间表,每次新增都要记录 + + + } } @@ -103,7 +255,7 @@ public class MesPullingOrderInfoService extends BaseMesService byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); - resultMap.put("",mesPullingOrder); + resultMap.put("", mesPullingOrder); resultMap.put("success", true); - String message ="更新SPS状态成功,已发送SPS信息给设备! id:"+mesPullingOrder.getId()+ "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; resultMap.put("message", message); //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java index 7266a5a..1cb3a62 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java @@ -58,4 +58,5 @@ public class MesCommonConstant { public static final String CLIENT_HANDLE_ID = "CLIENT_HANDLE_ID"; public static final String QC_ORDER_PRINT_TEMPLATE = "QC_ORDER_PRINT_TEMPLATE"; + public static final String MES_PULL_ORDER_NO = "MES_PULL_ORDER_NO"; } From 26b7ad8a28ac6b9fec6dda49771bd169e0e33448 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 11 Sep 2024 15:36:03 +0800 Subject: [PATCH 011/180] =?UTF-8?q?SPS=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=20=E7=94=9F=E6=88=90=E6=8B=89=E5=8A=A8=E5=8D=95JOB-2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/MesWhiteListController.java | 15 +++++++++++++++ ...MesCreatePullOrderByPullGroupAndWorkOrderJob.java | 2 +- .../serviceimpl/base/MesPullingOrderInfoService.java | 20 ++++++++++++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 819c147..c03f0c3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -76,6 +76,8 @@ public class MesWhiteListController extends MesBaseController { private MesEquipmentRepository mesEquipmentRDao; @Autowired + private IMesPullingOrderInfoService pullingOrderInfoService; + @Autowired private IMesDowntimeRecordService downtimeRecordService; @PostMapping(value = "/meter/main-data") @ApiOperation(value = "Maximo仪表主数据", notes = "Maximo仪表主数据") @@ -277,4 +279,17 @@ public class MesWhiteListController extends MesBaseController { } return ResultBean.success("执行成功"); } + @GetMapping(value = "/doCreatePullOrder") + @ApiOperation(value = "根据拉动组和生产工单产生拉动单") + public ResultBean doCreatePullOrder(String organizeCode, String equ) { + //统计数据 + try { + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,"test"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + return ResultBean.success("执行成功"); + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java index d0c4fcf..58a60dd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java @@ -29,7 +29,7 @@ public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesSchedul public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderByPullGroupAndWorkOrderJob.class); - private static final long serialVersionUID = 9072058154235836696L; + private static final long serialVersionUID = -321526601595924818L; @Autowired private IMesPullingOrderInfoService pullingOrderInfoService; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 1b5f6ae..ebc1bed 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -51,6 +51,8 @@ public class MesPullingOrderInfoService extends BaseMesService> pullCodeMap = pulliGroupList.stream().collect(Collectors.groupingBy(MesPartPull::getPullCode)); - Map> pullCodeCenterMap = pulliGroupList.stream().collect(Collectors.groupingBy(p -> p.getWorkCenterCode() + "=" + p.getPullCode())); DdlPackBean ddlPackBeanDetail = DdlPackBean.getDdlPackBean(organizeCode); List pullDetailList = mesPartPullDetailRDao.findByHqlWhere(ddlPackBeanDetail); @@ -121,7 +122,7 @@ public class MesPullingOrderInfoService extends BaseMesService workOrderList = mesWorkOrderRepository.findByHqlWhere(packBeanWorkOrder); if (CollectionUtils.isEmpty(workOrderList)) { @@ -194,6 +195,7 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Thu, 12 Sep 2024 08:53:06 +0800 Subject: [PATCH 012/180] =?UTF-8?q?=E6=8B=89=E5=8A=A8=E5=8D=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=80=BB=E6=88=90=E9=9B=B6=E4=BB=B6=E5=8F=B7=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index ebc1bed..c789920 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -208,6 +208,7 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Sat, 14 Sep 2024 09:01:10 +0800 Subject: [PATCH 013/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8A=9F=E8=83=BD-?= =?UTF-8?q?=E3=80=8B=E5=BC=B9=E6=A1=86=E5=B1=95=E7=A4=BA=E6=88=90=E5=93=81?= =?UTF-8?q?=E5=88=97=E8=A1=A8Function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderCutService.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index b5b5029..633dea6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -89,6 +89,11 @@ public class MesWorkOrderCutService extends BaseMesService impl Map> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); + MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); + + if (cutScheme == null) + MesException.throwMesBusiException("裁片方案【%s】无效", cutCode); + List cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode); if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode); @@ -116,9 +121,12 @@ public class MesWorkOrderCutService extends BaseMesService impl MesWorkOrder workOrder = workOrders.get(0); - if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) > 0) { - MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), cutSchemeFg.getQty()); - } + if (!workOrder.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) + MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", workOrder.getWorkCenterCode(), cutScheme.getWorkCenterCode()); + + if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) > 0) + MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", + cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), cutSchemeFg.getQty()); Double unCompleteQty = workOrder.getUnCompleteQty(); @@ -136,8 +144,6 @@ public class MesWorkOrderCutService extends BaseMesService impl } - MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); - MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); ConvertBean.serviceModelInitialize(workOrderCut, userName); workOrderCut.setCutCode(cutScheme.getCutCode()); From dcff64a03d48a104327f9d42d3a174ba7d9e8218 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 18 Sep 2024 10:35:44 +0800 Subject: [PATCH 014/180] =?UTF-8?q?43112=20MES:PC=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=E5=8D=95=E9=A1=B5=E9=9D=A2=E9=97=AE=E9=A2=98=206.=E5=90=8C?= =?UTF-8?q?=E4=B8=80=E6=8B=89=E5=8A=A8=E7=BB=84-=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E5=B7=A5=E4=BD=8D=E4=BB=A3=E7=A0=81=EF=BC=86=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E5=8F=B7=E5=81=9A=E5=94=AF=E4=B8=80=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesPartPullDetailService.java | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java index 73d4df1..db94ac6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPartPullDetail; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; @@ -16,7 +17,51 @@ import java.util.List; @Service @Slf4j public class MesPartPullDetailService extends BaseMesService implements IMesPartPullDetailService { + @Override + protected void onInsertBean(MesPartPullDetail item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); + //43112 MES:PC拉动单页面问题 6.同一拉动组-根据工位代码&零件号做唯一校验 + if (!StringUtil.isEmpty(item.getWorkCellCode())&&!StringUtil.isEmpty(item.getPartNo())){ + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + boolean flg = baseRDao.isExitByHql(partPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("拉动组【%s】零件号【%s】工位【%s】已经存在,请检查数据", + item.getPullCode(), item.getPartNo(), item.getWorkCellCode()) + .build(); + } + } + } + @Override + protected void onUpdateBean(MesPartPullDetail item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); +// ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + + //同一拉动组-根据工位代码&零件号做唯一校验 + if (!StringUtil.isEmpty(item.getWorkCellCode())&&!StringUtil.isEmpty(item.getPartNo())){ + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + boolean flg = baseRDao.isExitByHql(partPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("拉动组【%s】零件号【%s】工位【%s】已经存在,请检查数据", + item.getPullCode(), item.getPartNo(), item.getWorkCellCode()) + .build(); + } + } + } protected void setPackQueryBean(MesPartPullDetail bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getPullCode(), "pullCode", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCellCode(), "workCellCode", packBean); From 9bf51d1990dea565dc158079870fc7d1611e85b2 Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 18 Sep 2024 11:35:25 +0800 Subject: [PATCH 015/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 66a8837..103bede 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -257,4 +257,7 @@ public class MesExtConstWords { // 条码 public static final String SN = "sn"; + // 打印状态 + public static final String PRINT_STATUS = "printStatus"; + } From c01cbcb83ceddb62173cd3daa1dce2d00ac45622 Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 18 Sep 2024 14:27:46 +0800 Subject: [PATCH 016/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E3=80=81=E5=B7=A5=E5=8D=95=E5=A2=9E=E5=8A=A0=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 103bede..1384413 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -259,5 +259,7 @@ public class MesExtConstWords { // 打印状态 public static final String PRINT_STATUS = "printStatus"; + //客户编码 + public static final String CUST_CODE = "custCode"; } From 1d29f10f6fadaa37bb31b8e6208929fef7ad13c1 Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 18 Sep 2024 14:29:14 +0800 Subject: [PATCH 017/180] =?UTF-8?q?=E5=8C=85=E8=A3=85=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=98=BE=E7=A4=BA=E5=AE=A2=E6=88=B7=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E3=80=81=E5=B7=A5=E5=8D=95=E5=A2=9E=E5=8A=A0=E5=8F=AF?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=A4=9A=E7=A7=8D=E5=B7=A5=E5=8D=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesPackingDefineServiceImpl.java | 31 ++++++++++++++++++++++ .../serviceimpl/base/MesWorkOrderService.java | 4 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java index 34a656e..185a7e4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java @@ -1,13 +1,25 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPackingDefineService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomer; import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerRepository; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 包装定义维护 @@ -20,6 +32,25 @@ import org.springframework.stereotype.Service; @Slf4j public class MesPackingDefineServiceImpl extends BaseMesService implements IMesPackingDefineService { + @Autowired + private MesCustomerRepository customerRepository; + + @Override + public void setBeanModel(List list) { + if(CollectionUtils.isEmpty(list)){ + return; + } + List custCodeList = list.stream().filter(o -> !StringUtils.isEmpty(o.getCustCode())).map(MesPackingDefine::getCustCode).filter(t -> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + Map beanMap = CollectionUtils.isEmpty(custCodeList) ? new HashMap<>() : BeanMapUtilsExt.getBeanMap(customerRepository, MesExtConstWords.CUST_CODE, list.iterator().next().getOrganizeCode(), custCodeList); + if(!CollectionUtils.isEmpty(beanMap)){ + list.forEach(t->{ + if (!StringUtils.isEmpty(t.getCustCode()) && beanMap.containsKey(t.getCustCode())) { + t.setCustName(beanMap.get(t.getCustCode()).getCustName()); + } + }); + } + } + @Override protected void setPackQueryBean(MesPackingDefine bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPackCode(), "packCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index e75e9e0..210409e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -224,7 +224,9 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); - DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); + if (StringUtil.isEmpty(bean.getWorkOrderStatusQuery())) { + DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)), "workOrderStatus", packBean); + } else DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean); DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(), "createDatetime", packBean); DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(), "createDatetime", packBean); From 3a7cb17dabbeec7d6601d0e0afc3ca0eeb80b9aa Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 18 Sep 2024 17:53:48 +0800 Subject: [PATCH 018/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E6=9D=A1=E7=A0=81=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedulejob/MesWhJisCreateOrderJob.java | 8 +- .../apiservice/serviceimpl/base/MesBomService.java | 2 +- .../base/roundness/MesPackageRoundnessService.java | 418 ++++++++++++++++----- 3 files changed, 332 insertions(+), 96 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java index 734d5e6..e38a2eb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java @@ -66,16 +66,16 @@ public class MesWhJisCreateOrderJob extends BaseMesScheduleJob { } if (CollectionUtils.isEmpty(paramMap)) { - LOGGER.error("BTO生成工单,没有配置参数"); + LOGGER.error("武汉JIS生成工单,没有配置参数"); return; } String organizeCode = (String) paramMap.get("organizeCode"); List groupCodeList = (List) paramMap.get("groupCode"); - btoJobService.doCreateBto(organizeCode, groupCodeList); - LOGGER.info("BTO生成工单job结束 ----- end"); + btoJobService.doWhJisWorkOrder(organizeCode, groupCodeList); + LOGGER.info("武汉JIS生成工单 ----- end"); } catch (Exception e) { - LOGGER.error("BTO生成工单e:{}", Arrays.toString(e.getStackTrace())); + LOGGER.error("武汉JIS生成工单e:{}", Arrays.toString(e.getStackTrace())); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index d3c684b..30bd7fe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -174,7 +174,7 @@ public class MesBomService extends BaseMesService implements IMesBomServ DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", bomPackBean); - List bomList = this.baseRDao.findByHqlWhere(bomPackBean); + List bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1); return bomList.isEmpty() ? null : bomList.get(0); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 4e73161..58b7cbc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -1,8 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.roundness; +import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService; import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; -import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesCustSoftInfoServiceImpl; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -15,12 +16,12 @@ import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -38,8 +39,7 @@ import java.util.stream.Collectors; public class MesPackageRoundnessService implements IRoundnessStrategy { private static final Logger log = LoggerFactory.getLogger(MesPackageRoundnessService.class); - @Autowired - private IMesProdGroupPartBtoCountRepository btoCountRao; + @Autowired private MesPartSapRepository mesPartSapRao; @@ -70,14 +70,37 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private IMesCustSoftInfoService custSoftInfoService; + + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartSapService mesPartSapService; + + @Autowired + private MesProduceSnRepository mesProduceSnRao; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { + //是否是头部零件 + Integer isSeqInfoHeadPart = partProdGroup.getIsSeqInfoHeadPart(); + if (isSeqInfoHeadPart == null || isSeqInfoHeadPart == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { + log.info("非头零件不能按照包装圆整;零件生产组为:{}", partProdGroup.getPartProdGroupCode()); + return; + } + Map prodGroupDetailMap = details.stream().collect(Collectors.toMap(MesPartProdGroupDetail::getCustPartNo, Function.identity())); //1.生产组中的圆整数量 double roundQty = Double.parseDouble(partProdGroup.getRoundQty()); //2.排序信息中的零件合计数量 double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get(); + MesCustSortInfo sortInfo; //3.当数量未达到圆整包装数时 if (qty < roundQty) { //4.查看客户排序信息钟的最早的一条过点时间 + 生产组最晚生成时间是否已到达当前时间 @@ -93,7 +116,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return -1; }).collect(Collectors.toList()); - MesCustSortInfo sortInfo = sortInfoList.get(0); + sortInfo = sortInfoList.get(0); //最晚延迟的时间 int latestCreationTime = Integer.parseInt(partProdGroup.getLatestCreationTime()); Calendar calendar = Calendar.getInstance(); @@ -108,55 +131,46 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { //如果最早来的排序信息的多点时间已经超过最晚生成时间,则圆整数为当前排序信息对应的合计数 roundQty = qty; } - //是否是头部零件 - Integer isSeqInfoHeadPart = partProdGroup.getIsSeqInfoHeadPart(); - if (isSeqInfoHeadPart == null || isSeqInfoHeadPart == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { - log.info("非头零件不能按照包装圆整;零件生产组为:{}", partProdGroup.getPartProdGroupCode()); - return; - } + } - //扣减qty 生成工单 - while (qty > 0) { - //临时客户排序信息中的数量计数器 - double custSortRoundnessQty = roundQty; - - while (custSortRoundnessQty > 0) { - sortInfo = sortInfoList.get(0); - double custQty = sortInfo.getQty(); - //当客户排序信息中的数量大于剩余圆整数量要Break - if (custQty > roundQty) { - log.info("单笔订单数量大于圆整数量01,车号:{}", sortInfo.getVinCode()); - return; - } - if (custQty > custSortRoundnessQty) { - log.info("单笔订单数量大于圆整数量02,车号:{}", sortInfo.getVinCode()); - return; - } - //查找该零件是否在生产组中 - MesPartProdGroupDetail mesPartProdGroupDetail = prodGroupDetailMap.get(sortInfo.getCustPartNo()); - if (mesPartProdGroupDetail == null) { - log.info("生产组中未找到该零件:{}", sortInfo.getCustPartNo()); - return; - } - //生产零件号 - if (mesPartProdGroupDetail.getProductPartNo() == null) { - mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo()); - } - MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); - - if (mesPart == null) { - log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getProductPartNo()); - return; - } + //扣减qty 生成工单 + while (qty > 0) { + //临时客户排序信息中的数量计数器 + sortInfo = sortInfoList.get(0); + double custQty = sortInfo.getQty(); + //当客户排序信息中的数量大于剩余圆整数量要Break + if (custQty > roundQty) { + log.info("单笔订单数量大于圆整数量01,车号:{}", sortInfo.getVinCode()); + return; + } + //查找该零件是否在生产组中 + MesPartProdGroupDetail mesPartProdGroupDetail = prodGroupDetailMap.get(sortInfo.getCustPartNo()); + if (mesPartProdGroupDetail == null) { + log.info("生产组中未找到该零件:{}", sortInfo.getCustPartNo()); + return; + } + //生产零件号 + if (mesPartProdGroupDetail.getProductPartNo() == null) { + mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo()); + } + MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); - doCreateWorkOrder(partProdGroup,mesPartProdGroupDetail,mesPart,sortInfo); - } + if (mesPart == null) { + log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getProductPartNo()); + return; } + doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); + qty -= custQty; + sortInfoList.remove(sortInfo); + // 更新排序信息 已完成 + custSoftInfoService.updateCustSortInfo(sortInfo); } + + } catch (Exception e) { log.error("按包装圆整出错:MesPackageRoundnessService", e); } @@ -164,6 +178,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { private void doCreateWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) throws ParseException { + String organizeCode = partProdGroup.getOrganizeCode(); MesWorkOrder mesWorkOrder = new MesWorkOrder(); //工单版本号 @@ -183,12 +198,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setProductTime(sortInfo.getMatchTime()); mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); - //todo ptr信息 - //mesWorkOrder.setPtrInfo(sortInfo.getRemark()); + mesWorkOrder.setPtrInfo(sortInfo.getRemark()); //客户订单号 mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); - //车型代码 todo - //mesWorkOrder.setCarModelCode(sortInfo.getCarModelCode()); + //车型代码 + mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); //车型描述 mesWorkOrder.setCarName = vehicleClassCode //备注取自于车型配置表中 @@ -201,7 +215,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { // 11. 是否将生成日期减一天 // 班次 根据产线+计划时间匹配班次 - DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); + DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -230,8 +244,15 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setPartNo(partSap.getPartNo()); mesWorkOrder.setPartName(partSap.getPartName()); + //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 + GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO); + genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + mesWorkOrder.setWorkOrderNo(resultList.get(0)); + + // 13.生产版本 organizeCode + partNo - MesProductVersion prodVersion = getProdVersion(mesPartProdGroupDetail.getOrganizeCode(), partSap.getPartNo()); + MesProductVersion prodVersion = getProdVersion(organizeCode, partSap.getPartNo()); if (prodVersion == null) { log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); } else { @@ -239,11 +260,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setProductVersion(productVersion); } - //todo bom prodVersion.alternativePartList bom版本 - MesBom bom = mesBomService.findBom(mesPartProdGroupDetail.getOrganizeCode(), prodVersion.getAlternativePartList(), partSap.getPartNo()); -// if (bom != null){ -// mesWorkOrder.setBomCode(bom.getBomCode()) -// } + // bom prodVersion.alternativePartList bom版本 + MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), partSap.getPartNo()); + if (bom != null){ + mesWorkOrder.setBomCode(bom.getBomCode()); + } mesWorkOrder.setQty(sortInfo.getQty()); mesWorkOrder.setUnCompleteQty(sortInfo.getQty()); @@ -256,53 +277,219 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); - // todo 缺少单号 N 单字段 - // todo 车型 + mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); // todo 客户零件条码 + /** + * RS 为记录分隔符ASCII:30 + * GS 为分组符ASCII:29 + * EOT 为传输结束符ASCII:04 + * {splitRule} [)>%RS%06%GS%Y + * {splitRule} vpps= 4110000000000X + * {splitRule} %GS%P + * {partNo} 8位客户零件号 + * {splitRule} %GS%12V + * {splitRule} duns 545238347 + * {splitRule} %GS%T1A + * {yydayofyear} + * {splitRule} A2B4C + * {serialNo} 4位 步长1 + * {splitRule}%RS%%EOT% + *{spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule} + * [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + * 通用二维码组成部分('RS'为记录分隔符ASCII:30,'GS'为分组符ASCII:29,'EOT'为传输结束符ASCII:04) + * [)>+'RS'+06+'GS'+Y+vpps+'GS'+P+8位客户零件号+'GS'+12V+DUNS+'GS'+T+1位line num+1位班次号+2位年份+3位天数+1位追溯(精确追溯A,批次追溯@)+2工程更改记录+2位自定义+4位流水号+'RS'+'EOT' + * 如:[)>+'RS'+06+'GS'+Y+4110000000000X+'GS'+P+12345678+'GS'+12V+545295227+'GS'+T+1A13304A2B4C0001+'RS'+'EOT' + * + * vpps = Y00000000000000 + * 8位客户零件号=最后四位要大写 + * Duns是什么? + * 1位lineNumber是什么? 固定值 1 + * 1位班次号是什么? + * 2位年YY 24 + * 3位天-~365/366 + * 追溯 + * A--精确追溯 + * @--批次追溯 + * + * 2位工程更改记录 + * 2位供应商自定义信息 + * 4位流水号,当班班次计数,每班班次归零 + * + * WH_CUST_SN_RULE + */ + + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + String partNo = mesWorkOrder.getPartNo(); + String prefix = partNo.substring(0, partNo.length() - 4); + String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); + custGenSerialNoModel.setPartNo(prefix+partNo4); + String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setYear(year.substring(2)); + custGenSerialNoModel.setDay(custCalendar.get(Calendar.DAY_OF_YEAR)+""); + List custNumRuleList = syncFuncService.syncSerialNo(genSerialNoModel, "edi", organizeCode, 1).getResultList(); + // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + //截取替换为ascii码 + String snOriginal = custNumRuleList.get(0); + String[] split = snOriginal.split("%RS%"); + StringBuilder rsStr = new StringBuilder(); + for (int i = 0; i < split.length-1; i++) { + rsStr.append(split[i]).append((char) 30); + } + rsStr.append(split[split.length - 1]); + StringBuilder gsStr = new StringBuilder(); + String[] split1 = rsStr.toString().split("%GS%"); + for (int i = 0; i < split1.length-1; i++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length-1]); + String[] split2 = gsStr.toString().split("%EOT%"); + String sn = split2[0]+(char)4; + //保存条码 + mesWorkOrder.setSn(sn); + + + // 打散bom List workOrderPartList = new ArrayList<>(); if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { - workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(),bom.getBomCode(),sortInfo.getOrganizeCode(),mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo() ); + workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); } - // 生成装配件清单 - List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), null, workOrderPartList, partProdGroup); - ConvertBean.saveOrUpdate(mesWorkOrder,"MES-JOB"); - mesWorkOrderRao.insert(mesWorkOrder); + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + */ + //是否修改为P单 + boolean isModifyPOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + if (!workOrderPartList.isEmpty()){ + Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + //先替换客户的ptr信息 + String ptrInfo = mesWorkOrder.getPtrInfo(); + if (StringUtils.isNotBlank(ptrInfo)) { + List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); + if (!ptrInfoList.isEmpty()){ + List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + } + } + } + } + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); + + for (MesPartPtr mesPartPtr : partPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 + } + } + } + if (!workOrderPartList.isEmpty()) { for (MesWorkOrderPart orderPart : workOrderPartList) { - ConvertBean.saveOrUpdate(orderPart,"MES-JOB"); + orderPart.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); } workOrderPartRao.saveAll(workOrderPartList); } + // 生成装配件清单 + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); + if (isModifyPOrder){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P_SORT.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + } + mesWorkOrderRao.insert(mesWorkOrder); - if (!assemblyList.isEmpty()){ + + if (!assemblyList.isEmpty()) { for (MesWorkOrderAssembly orderAssembly : assemblyList) { - ConvertBean.saveOrUpdate(orderAssembly,"MES-JOB"); + orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); } workOrderAssemblyRao.saveAll(assemblyList); } + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(mesWorkOrder.getSn()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); + mesProduceSnRao.insert(mesProduceSn); + + + } - private List getAssemblyList(String workCenterCode, String VehicleNo,List workOrderPartList,MesPartProdGroup mesPartProdGroup){ + private List getAssemblyList(String workCenterCode, String VehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 List workOrderAssemblyList = new ArrayList<>(); List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); - DdlPreparedPack.getInPackList(partNoList,"partNo",prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); - Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); //遍历排序生产规则 - for (MesProdRuleSortCfg sortCfg : sortCfgList) { - MesWorkOrderPart orderPart = orderPartMap.get(sortCfg.getAssemblyPartNo()); - //1.逻辑储量程序sortCfg.isLogicNum + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + String t = sortCfg.getAssemblyPartNo(); + System.out.println(sortCfg.getAssemblyPartNo()); + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(VehicleNo)){ + continue; + } + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); orderAssembly.setPartNo(orderPart.getPartNo()); + orderAssembly.setPartName(orderPart.getPartName()); orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); orderAssembly.setOrderPartId(orderPart.getId().toString()); orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); @@ -314,11 +501,41 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); orderAssembly.setShowColor(sortCfg.getShowColor()); orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); workOrderAssemblyList.add(orderAssembly); } + + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } return workOrderAssemblyList; } + + + + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { List orderPartList = new ArrayList<>(); @@ -328,7 +545,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(partNoList,"partNo", partPackBean); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); @@ -337,15 +554,15 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { MesWorkOrderPart orderPart = new MesWorkOrderPart(); MesPartSap partSap = partMap.get(bom.getItemPartNo()); if (partSap == null) { - log.info("工厂:{},零件号:{}未查到零件信息", organizeCode,bom.getItemPartNo()); + log.info("工厂:{},零件号:{}未查到零件信息", organizeCode, bom.getItemPartNo()); return null; } List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); - if (!orderParts.isEmpty()) { - MesWorkOrderPart tempPart = orderParts.get(0); - tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); - continue; - } + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } orderPart.setPartName(partSap.getPartName()); orderPart.setPartNo(partSap.getPartNo()); orderPart.setItemQty(bom.getItemQty() * qty); @@ -362,14 +579,14 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { - if (bomCode == null){ + if (bomCode == null) { //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); - DdlPreparedPack.getTimeBetweenCol(effectiveTime,"effStartTime","effEndTime",bomCodePackBean,false); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); - List bomList = bomRao.findByHqlTopWhere(bomCodePackBean,1); - if (bomList == null || bomList.isEmpty()){ + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { return new ArrayList<>(); } bomCode = bomList.get(0).getBomCode(); @@ -378,16 +595,17 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); - DdlPreparedPack.getTimeBetweenCol(effectiveTime,"effStartTime","effEndTime",bomPackBean,false); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); List bomList = bomRao.findByHqlWhere(bomPackBean); for (MesBom bom : bomList) { - if (bom.getPartType()!=null && bom.getPartType().equalsIgnoreCase("X")){ - getPlatBom(bom.getItemPartNo(),effectiveTime,null,organizeCode); - }else { - bom.setBomCode(bom.getBomCode().toLowerCase()); - bomResultList.add(bom); - } + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } } @@ -409,4 +627,22 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0).collect(Collectors.toList()); + return partPtrList; + } + //根据排序信息PTR零件号 获取 ptr信息 + private List getCustPartPtrList(List ptrInfoList,String organizeCode){ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); + return partPtrRao.findByHqlWhere(partPtrPackBean); + + } } From 7f17a0edf1797fdab6ae4949928afa31507e2706 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 09:05:53 +0800 Subject: [PATCH 019/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=89=93=E5=8D=B0=E6=8E=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderCutService.java | 9 +- .../controller/base/MesWorkOrderCutController.java | 40 ++- .../serviceimpl/base/MesWorkOrderCutService.java | 310 +++++++++++++++------ .../print/IPrintTemplateStrategyService.java | 25 ++ .../strategy/CutWorkOrderNoPrintStrategy.java | 223 +++++++++++++++ .../ext/mes/pojo/model/MesProduceSnPrintModel.java | 82 ++++++ .../mes/pojo/model/MesWorkOrderCutPrintModel.java | 27 ++ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 36 +++ 8 files changed, 668 insertions(+), 84 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index 0054521..33d62e5 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * @Description: @@ -13,12 +14,16 @@ import java.util.List; public interface IMesWorkOrderCutService extends IBaseMesService { @ApiOperation("生成裁片工单") - void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, String userName); + void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, + String userName, Integer editionNumber); @ApiOperation("发布裁片工单") void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); @ApiOperation("打印裁片工单") - void doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); + List> doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); + + @ApiOperation("重新打印-修改同步状态为未同步") + void doUpdatePrintStatus(List cutWorkOrderIds, String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index 95adaa1..e5c781b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -30,13 +30,14 @@ public class MesWorkOrderCutController extends BaseMesController impl @Autowired private MesWorkOrderCutDetailRepository workOrderCutDetailRepository; + @Autowired + private MesLabelTemplateRepository labelTemplateRepository; + + @Autowired + private MesLabelTemplateParamRepository labelTemplateParamRepository; + protected void setPackQueryBean(MesWorkOrderCut bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); @@ -64,123 +75,170 @@ public class MesWorkOrderCutService extends BaseMesService impl } @Override - public void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, String userName) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderIds, MesExtConstWords.ID, packBean); - List workOrderList = workOrderRepository.findByHqlWhere(packBean); + public void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, + String userName, Integer editionNumber) { - if (CollectionUtils.isEmpty(workOrderList)) { - MesException.throwMesBusiException("工单信息不存在"); - } + List workOrderList = getMesWorkOrders(workOrderIds, organizeCode); - List workOrderIdDbList = workOrderList.stream().map(MesWorkOrder::getId).collect(Collectors.toList()); + Map> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); - for (Long workOrderId : workOrderIds) { - if (!workOrderIdDbList.contains(workOrderId)) { - MesException.throwMesBusiException("工单信息ID【%s】不存在", workOrderId); - } - } + MesCutScheme cutScheme = getMesCutScheme(cutCode, organizeCode); - for (MesWorkOrder mesWorkOrder : workOrderList) { - if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { - MesException.throwMesBusiException("工单状态不为【%s】", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); - } - } + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCode, organizeCode); - Map> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); + List cutSchemeFgList = getMesCutSchemeFgs(cutCode, organizeCode); - MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); + // 校验工单物料是否已在成品配置中进行维护 + checkWorkOrderPartValid(workOrderList, cutSchemeFgList); - if (cutScheme == null) - MesException.throwMesBusiException("裁片方案【%s】无效", cutCode); + editionNumber = editionNumber == null ? 1 : editionNumber; - List cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode); + Map workOrderUnCompleteMap = new HashMap<>(); + List workOrderCutDetailtList = new ArrayList<>(); + List workOrderCuttList = new ArrayList<>(); + List workOrderCutMaterialList = new ArrayList<>(); - if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode); + // 校验工单未完成数量是否满足计划数量 + checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap); + + // 预计生成裁片工单数量 + for (Integer count = 0; count < editionNumber; count++) { + MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); + ConvertBean.serviceModelInitialize(workOrderCut, userName); + workOrderCut.setCutCode(cutScheme.getCutCode()); + workOrderCut.setCutName(cutScheme.getCutName()); + workOrderCut.setWorkCenterCode(cutScheme.getWorkCenterCode()); + workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); + workOrderCut.setRemark(remark); + + String cutWorkOrderNo = doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName); + + log.info("裁片工单号:{}", cutWorkOrderNo); + + workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); + workOrderCut.setOrganizeCode(organizeCode); + + for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { + MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial(); + BeanUtils.copyProperties(cutSchemeMaterial, workOrderCutMaterial, MesExtConstWords.ID); + ConvertBean.serviceModelInitialize(workOrderCutMaterial, userName); + workOrderCutMaterial.setOrganizeCode(organizeCode); + workOrderCutMaterial.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo()); + workOrderCutMaterial.setSystemSyncStatus(CommonEnumUtil.FALSE); + workOrderCutMaterialList.add(workOrderCutMaterial); + } - List cutSchemeFgList = getCutSchemeFgList(cutCode, organizeCode); + for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { + List 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); + } + } - if (CollectionUtils.isEmpty(cutSchemeFgList)) MesException.throwMesBusiException("裁片方案【%s】缺少裁片方案成品配置", cutCode); + workOrderCutMaterialRepository.saveAll(workOrderCutMaterialList); + workOrderCutDetailRepository.saveAll(workOrderCutDetailtList); + workOrderCutRepository.saveAll(workOrderCuttList); - List partNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()); - List fgPartNoList = cutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList()); + String nowTime = TimeTool.getNowTime(true); + workOrderList.forEach(o -> { + o.setUnCompleteQty(workOrderUnCompleteMap.get(o.getWorkOrderNo())); + o.setModifyUser(userName); + o.setModifyDatetime(nowTime); + o.setSystemSyncStatus(CommonEnumUtil.FALSE); + }); - partNoList.removeAll(fgPartNoList); + workOrderRepository.saveAll(workOrderList); - if (!CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("零件号【%s】未在裁片方案成品中维护", partNoList); + } - Map workOrderUnCompleteMap = new HashMap<>(); - List workOrderCutDetailtList = new ArrayList<>(); + private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, MesCutScheme cutScheme, List cutSchemeFgList, Map workOrderUnCompleteMap) { for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); - if (workOrders.size() > 1) { - MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo()); - } - MesWorkOrder workOrder = workOrders.get(0); + if (workOrders.size() > 1) + MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo()); + if (!workOrder.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", workOrder.getWorkCenterCode(), cutScheme.getWorkCenterCode()); - if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) > 0) + // 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量 + Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber); + + if (totalQty.compareTo(workOrder.getUnCompleteQty()) > 0) MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", - cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), cutSchemeFg.getQty()); + cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), totalQty); - Double unCompleteQty = workOrder.getUnCompleteQty(); + workOrderUnCompleteMap.put(workOrder.getWorkOrderNo(), MathOperation.sub(workOrder.getUnCompleteQty(), totalQty)); - workOrderUnCompleteMap.put(workOrder.getWorkOrderNo(), unCompleteQty - cutSchemeFg.getQty()); + } + } - MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); - ConvertBean.serviceModelInitialize(detail, userName); - detail.setOrganizeCode(organizeCode); - detail.setPartNo(workOrder.getPartNo()); - detail.setPartName(workOrder.getPartName()); - detail.setWorkOrderNo(workOrder.getWorkOrderNo()); - detail.setRemark(cutSchemeFg.getRemark()); - detail.setQty(cutSchemeFg.getQty()); - workOrderCutDetailtList.add(detail); + private List getMesWorkOrders(List workOrderIds, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderIds, MesExtConstWords.ID, packBean); + List workOrderList = workOrderRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(workOrderList)) { + MesException.throwMesBusiException("工单信息不存在"); + } + + List workOrderIdDbList = workOrderList.stream().map(MesWorkOrder::getId).collect(Collectors.toList()); + for (Long workOrderId : workOrderIds) { + if (!workOrderIdDbList.contains(workOrderId)) { + MesException.throwMesBusiException("工单信息ID【%s】不存在", workOrderId); + } } - MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); - ConvertBean.serviceModelInitialize(workOrderCut, userName); - workOrderCut.setCutCode(cutScheme.getCutCode()); - workOrderCut.setCutName(cutScheme.getCutName()); - workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); - workOrderCut.setRemark(remark); + for (MesWorkOrder mesWorkOrder : workOrderList) { + if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + MesException.throwMesBusiException("工单状态不为【%s】", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); + } + } + return workOrderList; + } - String cutWorkOrderNo = doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName); + private MesCutScheme getMesCutScheme(String cutCode, String organizeCode) { + MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); - log.info("裁片工单号:{}", cutWorkOrderNo); + if (cutScheme == null) + MesException.throwMesBusiException("裁片方案【%s】无效", cutCode); + return cutScheme; + } - workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); - workOrderCut.setOrganizeCode(organizeCode); + private static void checkWorkOrderPartValid(List workOrderList, List cutSchemeFgList) { + List partNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()); + List fgPartNoList = cutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList()); - workOrderCutDetailtList.forEach(o-> o.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo())); + partNoList.removeAll(fgPartNoList); - List workOrderCutMaterialList = new ArrayList<>(); - for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { - MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial(); - BeanUtils.copyProperties(cutSchemeMaterial, workOrderCutMaterial, MesExtConstWords.ID); - ConvertBean.serviceModelInitialize(workOrderCutMaterial, userName); - workOrderCutMaterial.setOrganizeCode(organizeCode); - workOrderCutMaterial.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo()); - workOrderCutMaterial.setSystemSyncStatus(CommonEnumUtil.FALSE); - workOrderCutMaterialList.add(workOrderCutMaterial); - } + if (!CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("零件号【%s】未在裁片方案成品配置中维护", partNoList); + } - workOrderCutMaterialRepository.saveAll(workOrderCutMaterialList); - workOrderCutDetailRepository.saveAll(workOrderCutDetailtList); - workOrderCutRepository.save(workOrderCut); + private List getMesCutSchemeFgs(String cutCode, String organizeCode) { + List cutSchemeFgList = getCutSchemeFgList(cutCode, organizeCode); - for (MesWorkOrder mesWorkOrder : workOrderList) { - mesWorkOrder.setUnCompleteQty(workOrderUnCompleteMap.get(mesWorkOrder.getWorkOrderNo())); - } + if (CollectionUtils.isEmpty(cutSchemeFgList)) MesException.throwMesBusiException("裁片方案【%s】缺少裁片方案成品配置", cutCode); + return cutSchemeFgList; + } - workOrderRepository.saveAll(workOrderList); + private List getMesCutSchemeMaterials(String cutCode, String organizeCode) { + List cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode); + if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode); + return cutSchemeMaterialList; } @Override @@ -215,13 +273,14 @@ public class MesWorkOrderCutService extends BaseMesService impl } @Override - public void doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { + public List> doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(cutWorkOrderNos, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); List workOrderCutDbList = workOrderCutRepository.findByHqlWhere(packBean); - List cutWorkOrderNoDbList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutWorkOrderNo).collect(Collectors.toList()); + List cutWorkOrderNoDbList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutWorkOrderNo) + .distinct().collect(Collectors.toList()); if (CollectionUtils.isEmpty(cutWorkOrderNoDbList)) MesException.throwMesBusiException("裁片工单不存在"); @@ -230,8 +289,91 @@ public class MesWorkOrderCutService extends BaseMesService impl if (!CollectionUtils.isEmpty(cutWorkOrderNos)) MesException.throwMesBusiException("裁片工单【%s】不存在", cutWorkOrderNos); - List cutCode = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); + workOrderCutDbList.forEach(o -> { + if (o.getPrintStatus() == MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()) + MesException.throwMesBusiException("裁片工单【%s】已打印过标签,无法再次打印", o.getCutWorkOrderNo()); + }); + + List> resultMapList = new ArrayList<>(); + List cutCodeList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode) + .distinct().collect(Collectors.toList()); + + // 根据裁片方案代码分组裁片工单 + Map> workOrderCutMapByCutCode = workOrderCutDbList.stream().collect( + Collectors.groupingBy(MesWorkOrderCut::getCutCode)); + + // 获取裁片方案 + List mesCutSchemes = queryCutSchemeList(cutCodeList, organizeCode); + + // 根据裁片方案代码分组 + Map cutSchemeMapByTemplate = mesCutSchemes.stream().collect( + Collectors.toMap(MesCutScheme::getTemplateCode, Function.identity(), (x, y) -> y)); + + for (Map.Entry entry : cutSchemeMapByTemplate.entrySet()) { + + MesCutScheme cutScheme = entry.getValue(); + List workOrderCutList = workOrderCutMapByCutCode.get(entry.getKey()); + + MesLabelTemplate labelTemplate = getLabelTemplate(cutScheme.getTemplateCode(), organizeCode); + + //模板信息丢失抛出异常 + if (labelTemplate == null) + MesException.throwBusiException("请检查裁片方案,裁片工单号[%s]所属裁片方案模板代码[%s]无效!", cutScheme.getTemplateCode()); + + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + + //模板信息丢失抛出异常 + if (methodCode == null) + MesException.throwBusiException("裁片方案[%s]模板代码[%s]方法类[%s]无效,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()); + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(workOrderCutList); + mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter()); + + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, null); + + resultMapList.addAll(printModel.getPrintContextList()); + + } + + workOrderCutDbList.forEach(o -> { + o.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + ConvertBean.serviceModelUpdate(o, userName); + o.setSystemSyncStatus(CommonEnumUtil.FALSE); + }); + + workOrderCutRepository.saveAll(workOrderCutDbList); + + return resultMapList; + + } + + private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = labelTemplateRepository.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); + List params = labelTemplateParamRepository.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } + + @Override + public void doUpdatePrintStatus(List cutWorkOrderIds, String organizeCode, String userName) { + + for (String cutWorkOrderId : cutWorkOrderIds) { + workOrderCutRepository.updateByProperties(MesExtConstWords.ID, Long.parseLong(cutWorkOrderId), + new String[]{MesExtConstWords.IS_DELETED, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME, MesExtConstWords.SYSTEM_SYNC_STATUS, MesExtConstWords.PRINT_STATUS}, + new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()}); + } } @@ -249,6 +391,14 @@ public class MesWorkOrderCutService extends BaseMesService impl } + private List queryCutSchemeList(List cutCodeList, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeRepository.findByHqlWhere(packBean); + + } + private List getCutSchemeFgList(String cutCode, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java new file mode 100644 index 0000000..18bfb71 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java @@ -0,0 +1,25 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print; + +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; + +/** + * @Description : 根据不同的条码,封装不同的数据来源 content 是打印模板,dataList + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/6 16:39 + * @Modify: + **/ +public interface IPrintTemplateStrategyService { + + /** + * GenSerialNoModel 生成条码的规则 + * mesProduceSnPrintModel 需要的数据 + * @param model + * @param mesProduceSnPrintModel + * @return + */ + MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule); + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java new file mode 100644 index 0000000..109179c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -0,0 +1,223 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 裁片工单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyService { + + @Autowired + private MesCutSchemeFgRepository cutSchemeFgRepository; + + @Autowired + private MesCutSchemeMaterialRepository cutSchemeMaterialRepository; + + @Autowired + private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository; + + @Autowired + private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository; + + public static final int EQUIP_PARAM_TITLE_NUM = 4; + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, + MesProduceSnPrintModel model, + MesNumberRule numberRule) { + + List workOrderCutList = (List)model.getSourceData(); + List> printDataMapList = new ArrayList<>(); + + // 裁片方案代码集合 + List cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); + + List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList); + + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); + + //根据裁片方案代码对裁片方案成品明细分组 + Map> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); + + //根据裁片方案代码对裁片方案原材料分组 + Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); + + List cutSchemeEquipmentList = getMesCutSchemeEquipments(model, cutCodeList); + + cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList()); + + // 根据裁片方案代码对裁片设备信息分组 + Map> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? null : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode)); + + List cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList); + + Map> cutSchemeEquipmentDetailMapByPid = cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); + + for (MesWorkOrderCut workOrderCut : workOrderCutList) { + + List mesCutSchemeFgList = cutSchemeFgMapByCutCode.get(workOrderCut.getCutCode()); + + List mesCutSchemeMaterialList = cutSchemeMaterialMapByCutCode.get(workOrderCut.getCutCode()); + + MesCutSchemeMaterial cutSchemeMaterial = mesCutSchemeMaterialList.get(0); + + List cutSchemeEquipmentListByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode) ? null : cutSchemeEquipmentMapByCutCode.get(workOrderCut.getCutCode()); + + if (!CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode)) cutSchemeEquipmentListByCutCode.sort(Comparator.comparing(MesCutSchemeEquipment::getSeq)); + + Map resultMap = new HashMap<>(); + + resultMap.put(MesExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo()); + resultMap.put(MesExtConstWords.CUT_NAME, workOrderCut.getCutName()); + // 拉料信息 START + // 原材料零件号 + resultMap.put(MesExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo()); + resultMap.put(MesExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial.getPullingMaterialLength()); + resultMap.put(MesExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial.getPullingMaterialLayerNumber()); + resultMap.put(MesExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial.getPerLayerNumber()); + resultMap.put(MesExtConstWords.MATERIAL_DOSAGE, cutSchemeMaterial.getMaterialDosage()); + resultMap.put(MesExtConstWords.USING_LENGTH, cutSchemeMaterial.getUsingLength()); + resultMap.put(MesExtConstWords.LAYER_NUMBER, cutSchemeMaterial.getLayerNumber()); + resultMap.put(MesExtConstWords.TENSION_PARAM, cutSchemeMaterial.getTensionParam()); + // 拉料信息 END + + + //int index = 1; + //for (MesCutSchemeEquipment mesCutSchemeEquipment : cutSchemeEquipmentListByCutCode) { + // //设备信息 + // resultMap.put(MesExtConstWords.TITLE + index, mesCutSchemeEquipment.getValue()); + // + // index++; + //} + + MesCutSchemeEquipment mesCutSchemeEquipment = CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode) ? null : cutSchemeEquipmentListByCutCode.get(0); + + List equipParamNameList = new ArrayList<>(); + List equipParamValueList = new ArrayList<>(); + List cutSchemeEquipmentDetails = mesCutSchemeEquipment == null ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId()); + + for (int i = 0; i < EQUIP_PARAM_TITLE_NUM; i++) { + if (cutSchemeEquipmentDetails.size() > i) { + equipParamNameList.add(cutSchemeEquipmentDetails.get(i).getValue()); + equipParamValueList.add(cutSchemeEquipmentDetails.get(i).getName()); + } else { + equipParamNameList.add(""); + equipParamValueList.add(""); + } + } + + for (MesCutSchemeEquipmentDetail cutSchemeEquipmentDetail : cutSchemeEquipmentDetails) { + equipParamNameList.add(cutSchemeEquipmentDetail.getValue()); + equipParamValueList.add(cutSchemeEquipmentDetail.getName()); + } + + //设备参数值标题 + resultMap.put(MesExtConstWords.EQUIPMENT_NAME+1, mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName()); + //设备参数值标题1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+1, equipParamNameList.get(0)); + //设备参数值标题2 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+2, equipParamNameList.get(1)); + //设备参数值标题3 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+3, equipParamNameList.get(2)); + //设备参数值标题4 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+4, equipParamNameList.get(3)); + //设备参数值1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+1, equipParamValueList.get(0)); + //设备参数值2 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+2, equipParamValueList.get(1)); + //设备参数值3 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+3, equipParamValueList.get(2)); + //设备参数值4 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+4, equipParamValueList.get(3)); + + String partValue = ""; + if (!CollectionUtils.isEmpty(mesCutSchemeFgList)) { + BigDecimal[] bigDecimals = divideAndRemainder(mesCutSchemeFgList.get(0).getQty(), mesCutSchemeFgList.get(0).getPackageQty()); + BigDecimal remainder = bigDecimals[1]; + Double boxQty = remainder.doubleValue() > 0 ? bigDecimals[0].add(new BigDecimal("1")).doubleValue() : bigDecimals[0].doubleValue(); + partValue = mesCutSchemeFgList.get(0).getPartNo() + " " + boxQty.intValue() +"箱"; + } + + //产品信息 + resultMap.put(MesExtConstWords.FG_PART_NO, partValue); + + printDataMapList.add(resultMap); + + } + + model.setPrintContextList(packResultMapList(model, printDataMapList)); + + return model; + } + + private BigDecimal[] divideAndRemainder(Double qty, Double packageQty) { + BigDecimal dividend = new BigDecimal(qty.toString()); + BigDecimal divisor = new BigDecimal(packageQty.toString()); + return dividend.divideAndRemainder(divisor); + } + + private List getMesCutSchemeEquipmentDetails(MesProduceSnPrintModel model, List cutSchemeEquipmentList) { + if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) { + List idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(idList, MesExtConstWords.ID, packBean); + return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean); + } + return null; + } + + private List getMesCutSchemeEquipments(MesProduceSnPrintModel model, List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + List cutSchemeEquipmentList = cutSchemeEquipmentRepository.findByHqlWhere(packBean); + return cutSchemeEquipmentList; + } + + private List getMesCutSchemeMaterials(List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + List cutSchemeMaterialList = cutSchemeMaterialRepository.findByHqlWhere(packBean); + return cutSchemeMaterialList; + } + + private List getMesCutSchemeFgs(List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + List cutSchemeFgList = cutSchemeFgRepository.findByHqlWhere(packBean); + return cutSchemeFgList; + } + + private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + List> resultMapList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put(MesExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesExtConstWords.PRINTER, printModel.getPrinter()); + resultMapList.add(resultMap); + return resultMapList; + } + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java new file mode 100644 index 0000000..18fda4d --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java @@ -0,0 +1,82 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description : 条码补打Model + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/13 15:48 + * @Modify: + **/ +@Data +public class MesProduceSnPrintModel { + + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("物料号") + private String partNo; + + @ApiParam("物料名称") + private String partName; + + @ApiParam("条码") + private String productSn; + + @ApiParam("打印数量") + private Integer printQty; + + @ApiParam("标包数量") + private Double qty; + + @ApiParam("打印模板") + private String printTemplate; + + @ApiParam("条码规则") + private String snRule; + + @ApiParam(name = "包装规则代码") + private String packCode; + + @ApiParam(name = "用户名") + private String userName; + + @ApiParam(value = "打印机") + private String printer; + + @ApiParam("客户物料号") + private String custPartNo; + + @ApiParam(name = "包装定义维护") + List mesPackingDefineList; + + @ApiParam(name = "打印模板信息") + private MesLabelTemplate mesLabelTemplate; + + @ApiParam(name = "产品条码信息") + //private List mesProduceSnPrintDataModelList = new ArrayList<>(); + + private List mesProduceSnList = new ArrayList<>(); + + private List mesPrintedSnLogList = new ArrayList<>(); + + @ApiParam(name = "源数据 使用功能:1-裁片") + private Object sourceData; + + @ApiParam(name = "打印内容 使用功能:1-裁片") + List> printContextList = new ArrayList<>(); + + public Double getQty() { + return qty == null || qty <= 0d ? 1d : qty; + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java new file mode 100644 index 0000000..045ca9b --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java @@ -0,0 +1,27 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * @Description : 工单标签补打Model + * @Reference : + * @Author : xinwang.yi + * @CreateDate 2024/6/13 15:48 + * @Modify: + **/ +@Data +public class MesWorkOrderCutPrintModel { + + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("裁片方案代码") + private String cutCode; + + @ApiParam("裁片方案名称") + private String cutName; + + @ApiParam("裁片工单号") + private String cutWorkOrderNo; +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 1384413..6cca86b 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -33,6 +33,8 @@ public class MesExtConstWords { public static final String WORK_CELL_NAME = "workCellName"; // 设备代码 public static final String EQUIPMENT_CODE = "equipmentCode"; + // 设备名称 + public static final String EQUIPMENT_NAME = "equipmentName"; // 开模记录ID public static final String MOULD_RECORD_ID = "mouldRecordId"; // 设备数据变量ID @@ -261,5 +263,39 @@ public class MesExtConstWords { public static final String PRINT_STATUS = "printStatus"; //客户编码 public static final String CUST_CODE = "custCode"; + // 模板代码 + public static final String TEMPLATE_CODE = "templateCode"; + //打印模板 + public static final String LABEL_TEMPLATE = "labelTemplate"; + //打印模板数据 + public static final String TEMPLATE_DATA = "templateData"; + //打印机 + public static final String PRINTER = "printer"; + + //原材料 + public static final String RAW_PART_NO = "rawPartNo"; + //拉料长度 + public static final String PULLING_MATERIAL_LENGTH = "pullingMaterialLength"; + //拉料层数 + public static final String PULLING_MATERIAL_LAYER_NUMBER = "pullingMaterialLayerNumber"; + //每层套数 + public static final String PER_LAYER_NUMBER = "perLayerNumber"; + //调取长度 + public static final String USING_LENGTH = "usingLength"; + //材料用量 + public static final String MATERIAL_DOSAGE = "materialDosage"; + //层数 + public static final String LAYER_NUMBER = "layerNumber"; + //张力参数 + public static final String TENSION_PARAM = "tensionParam"; + //设备参数名称 + public static final String EQUIP_PARAM_NAME = "equipParamName"; + //设备参数值 + public static final String EQUIP_PARAM_VALUE = "equipParamValue"; + //参数 + public static final String PARAM = "param"; + //成品零件号 + public static final String FG_PART_NO = "fgPartNo"; + } From 320248e26239d36d5a32758959c18364660549d4 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 09:13:05 +0800 Subject: [PATCH 020/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=89=93=E5=8D=B0=E6=8E=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java index 109179c..28a34dd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -128,11 +128,6 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic } } - for (MesCutSchemeEquipmentDetail cutSchemeEquipmentDetail : cutSchemeEquipmentDetails) { - equipParamNameList.add(cutSchemeEquipmentDetail.getValue()); - equipParamValueList.add(cutSchemeEquipmentDetail.getName()); - } - //设备参数值标题 resultMap.put(MesExtConstWords.EQUIPMENT_NAME+1, mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName()); //设备参数值标题1 From 28401a36dd6a2a82864214c4c50a4ddae7c5e603 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 14:48:54 +0800 Subject: [PATCH 021/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/MesWorkOrderCutController.java | 1 + .../serviceimpl/base/MesWorkOrderCutService.java | 9 +++-- .../serviceimpl/base/MesWorkOrderService.java | 4 +- .../strategy/CutWorkOrderNoPrintStrategy.java | 44 +++++++++------------- 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index e5c781b..9c24ee2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -9,6 +9,7 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import cn.hutool.core.collection.ListUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index d444101..c52bdab 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -117,6 +117,7 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); workOrderCut.setOrganizeCode(organizeCode); + workOrderCuttList.add(workOrderCut); for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial(); @@ -203,8 +204,8 @@ public class MesWorkOrderCutService extends BaseMesService impl } for (MesWorkOrder mesWorkOrder : workOrderList) { - if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { - MesException.throwMesBusiException("工单状态不为【%s】", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); + if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() || mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) { + MesException.throwMesBusiException("工单【%s】状态【%s】无法生成裁片工单", mesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.ORDER_TYPE.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); } } return workOrderList; @@ -284,6 +285,8 @@ public class MesWorkOrderCutService extends BaseMesService impl if (CollectionUtils.isEmpty(cutWorkOrderNoDbList)) MesException.throwMesBusiException("裁片工单不存在"); + cutWorkOrderNos = new ArrayList<>(cutWorkOrderNos); + cutWorkOrderNos.removeAll(cutWorkOrderNoDbList); if (!CollectionUtils.isEmpty(cutWorkOrderNos)) @@ -313,7 +316,7 @@ public class MesWorkOrderCutService extends BaseMesService impl for (Map.Entry entry : cutSchemeMapByTemplate.entrySet()) { MesCutScheme cutScheme = entry.getValue(); - List workOrderCutList = workOrderCutMapByCutCode.get(entry.getKey()); + List workOrderCutList = workOrderCutMapByCutCode.get(cutScheme.getCutCode()); MesLabelTemplate labelTemplate = getLabelTemplate(cutScheme.getTemplateCode(), organizeCode); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 210409e..888afc8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -224,8 +224,8 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); - if (StringUtil.isEmpty(bean.getWorkOrderStatusQuery())) { - DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)), "workOrderStatus", packBean); + if (!StringUtil.isEmpty(bean.getWorkOrderStatusQuery())) { + DdlPreparedPack.getInPackList(Arrays.stream(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)).map(Integer::parseInt).collect(Collectors.toList()), "workOrderStatus", packBean); } else DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean); DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(), "createDatetime", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java index 28a34dd..76eef34 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -41,6 +41,7 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic @Autowired private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository; + public static final int EQUIP_NUM = 1; public static final int EQUIP_PARAM_TITLE_NUM = 4; @Override @@ -118,35 +119,26 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic List equipParamValueList = new ArrayList<>(); List cutSchemeEquipmentDetails = mesCutSchemeEquipment == null ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId()); - for (int i = 0; i < EQUIP_PARAM_TITLE_NUM; i++) { - if (cutSchemeEquipmentDetails.size() > i) { - equipParamNameList.add(cutSchemeEquipmentDetails.get(i).getValue()); - equipParamValueList.add(cutSchemeEquipmentDetails.get(i).getName()); - } else { - equipParamNameList.add(""); - equipParamValueList.add(""); + for (int i = 0; i < EQUIP_NUM; i++) { + //设备参数值标题 + resultMap.put(MesExtConstWords.EQUIPMENT_NAME+(i+1), mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName()); + for (int l = 0; l < EQUIP_PARAM_TITLE_NUM; l++) { + if (cutSchemeEquipmentDetails.size() > l) { + //设备参数值标题1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), cutSchemeEquipmentDetails.get(l).getValue()); + //设备参数值1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), cutSchemeEquipmentDetails.get(l).getName()); + } else { + equipParamNameList.add(""); + equipParamValueList.add(""); + //设备参数值标题1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), ""); + //设备参数值1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), ""); + } } } - //设备参数值标题 - resultMap.put(MesExtConstWords.EQUIPMENT_NAME+1, mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName()); - //设备参数值标题1 - resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+1, equipParamNameList.get(0)); - //设备参数值标题2 - resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+2, equipParamNameList.get(1)); - //设备参数值标题3 - resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+3, equipParamNameList.get(2)); - //设备参数值标题4 - resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+4, equipParamNameList.get(3)); - //设备参数值1 - resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+1, equipParamValueList.get(0)); - //设备参数值2 - resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+2, equipParamValueList.get(1)); - //设备参数值3 - resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+3, equipParamValueList.get(2)); - //设备参数值4 - resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+4, equipParamValueList.get(3)); - String partValue = ""; if (!CollectionUtils.isEmpty(mesCutSchemeFgList)) { BigDecimal[] bigDecimals = divideAndRemainder(mesCutSchemeFgList.get(0).getQty(), mesCutSchemeFgList.get(0).getPackageQty()); From cf56f4b7d258abcaf51371c68a07d5442aed6890 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 15:18:45 +0800 Subject: [PATCH 022/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index c52bdab..b40eb61 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -204,8 +204,8 @@ public class MesWorkOrderCutService extends BaseMesService impl } for (MesWorkOrder mesWorkOrder : workOrderList) { - if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() || mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) { - MesException.throwMesBusiException("工单【%s】状态【%s】无法生成裁片工单", mesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.ORDER_TYPE.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); + if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() && mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) { + MesException.throwMesBusiException("工单【%s】状态【%s】无法生成裁片工单", mesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); } } return workOrderList; From 15c92222d6edd461470999e5026f24e35e9786d3 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 16:50:44 +0800 Subject: [PATCH 023/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/controller/base/MesWorkOrderCutController.java | 2 +- .../serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index 9c24ee2..bade607 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -66,7 +66,7 @@ public class MesWorkOrderCutController extends BaseMesController cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList); - Map> cutSchemeEquipmentDetailMapByPid = cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); + Map> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); for (MesWorkOrderCut workOrderCut : workOrderCutList) { @@ -117,7 +117,7 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic List equipParamNameList = new ArrayList<>(); List equipParamValueList = new ArrayList<>(); - List cutSchemeEquipmentDetails = mesCutSchemeEquipment == null ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId()); + List cutSchemeEquipmentDetails = mesCutSchemeEquipment == null || CollectionUtils.isEmpty(cutSchemeEquipmentDetailMapByPid) ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId()); for (int i = 0; i < EQUIP_NUM; i++) { //设备参数值标题 @@ -169,7 +169,7 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) { List idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getInPackList(idList, MesExtConstWords.ID, packBean); + DdlPreparedPack.getInPackList(idList, MesExtConstWords.PID, packBean); return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean); } return null; From e0a911defd35b7c8be1571b97add8e47c51c0677 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 19 Sep 2024 17:29:02 +0800 Subject: [PATCH 024/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=20=E5=B7=A5=E5=8D=95=E9=9B=B6=E4=BB=B6=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesWorkOrderAssemblyService.java | 14 ++++++++++++ .../ext/mes/api/base/IMesWorkOrderPartService.java | 14 ++++++++++++ .../base/MesWorkOrderAssemblyController.java | 21 +++++++++++++++++ .../base/MesWorkOrderPartController.java | 21 +++++++++++++++++ .../base/MesWorkOrderAssemblyServiceImpl.java | 26 ++++++++++++++++++++++ .../base/MesWorkOrderPartServiceImpl.java | 26 ++++++++++++++++++++++ 6 files changed, 122 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java new file mode 100644 index 0000000..52cfdbd --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java @@ -0,0 +1,14 @@ +package cn.estsh.i3plus.ext.mes.api.base; + + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; + +/** + * @Description : 工单装配件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:42 + * @Modify: + **/ +public interface IMesWorkOrderAssemblyService extends IBaseMesService { +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java new file mode 100644 index 0000000..0b88442 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java @@ -0,0 +1,14 @@ +package cn.estsh.i3plus.ext.mes.api.base; + + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; + +/** + * @Description : 工单零件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:42 + * @Modify: + **/ +public interface IMesWorkOrderPartService extends IBaseMesService { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java new file mode 100644 index 0000000..26119cd --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 工单装配件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:40 + * @Modify: + **/ +@Api(description = "工单装配件") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderAssembly") +public class MesWorkOrderAssemblyController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java new file mode 100644 index 0000000..1fd5082 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 工单零件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:40 + * @Modify: + **/ +@Api(description = "工单零件") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderPart") +public class MesWorkOrderPartController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java new file mode 100644 index 0000000..da2e288 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java @@ -0,0 +1,26 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderAssemblyService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : 工单装配件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:44 + * @Modify: + **/ +@Service +@Slf4j +public class MesWorkOrderAssemblyServiceImpl extends BaseMesService implements IMesWorkOrderAssemblyService { + + @Override + protected void setPackQueryBean(MesWorkOrderAssembly bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java new file mode 100644 index 0000000..d3cd1ca --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java @@ -0,0 +1,26 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : 工单零件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:44 + * @Modify: + **/ +@Service +@Slf4j +public class MesWorkOrderPartServiceImpl extends BaseMesService implements IMesWorkOrderPartService { + + @Override + protected void setPackQueryBean(MesWorkOrderPart bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + } + +} From 54627db4b1b4bb4369e8c83cf69f203e2c98769a Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 17:56:49 +0800 Subject: [PATCH 025/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/MesWorkOrderCutController.java | 6 ++-- .../serviceimpl/base/MesWorkOrderCutService.java | 2 ++ .../strategy/CutWorkOrderNoPrintStrategy.java | 32 ++++++++++------------ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 2 ++ 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index bade607..760bfc9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -85,12 +85,12 @@ public class MesWorkOrderCutController extends BaseMesController impl workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); workOrderCut.setOrganizeCode(organizeCode); + workOrderCut.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); workOrderCuttList.add(workOrderCut); for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { @@ -345,6 +346,7 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCutDbList.forEach(o -> { o.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + o.setPrintTime(TimeTool.getNowTime(true)); ConvertBean.serviceModelUpdate(o, userName); o.setSystemSyncStatus(CommonEnumUtil.FALSE); }); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java index 63a0987..9794339 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -55,13 +56,11 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic // 裁片方案代码集合 List cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); - List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList); - List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); - //根据裁片方案代码对裁片方案成品明细分组 - Map> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); + Map> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList); + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); //根据裁片方案代码对裁片方案原材料分组 Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); @@ -92,9 +91,10 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic resultMap.put(MesExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo()); resultMap.put(MesExtConstWords.CUT_NAME, workOrderCut.getCutName()); - // 拉料信息 START // 原材料零件号 resultMap.put(MesExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo()); + + // 拉料信息 START resultMap.put(MesExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial.getPullingMaterialLength()); resultMap.put(MesExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial.getPullingMaterialLayerNumber()); resultMap.put(MesExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial.getPerLayerNumber()); @@ -102,21 +102,11 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic resultMap.put(MesExtConstWords.USING_LENGTH, cutSchemeMaterial.getUsingLength()); resultMap.put(MesExtConstWords.LAYER_NUMBER, cutSchemeMaterial.getLayerNumber()); resultMap.put(MesExtConstWords.TENSION_PARAM, cutSchemeMaterial.getTensionParam()); + resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-M-d H:mm:ss")); // 拉料信息 END - - //int index = 1; - //for (MesCutSchemeEquipment mesCutSchemeEquipment : cutSchemeEquipmentListByCutCode) { - // //设备信息 - // resultMap.put(MesExtConstWords.TITLE + index, mesCutSchemeEquipment.getValue()); - // - // index++; - //} - MesCutSchemeEquipment mesCutSchemeEquipment = CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode) ? null : cutSchemeEquipmentListByCutCode.get(0); - List equipParamNameList = new ArrayList<>(); - List equipParamValueList = new ArrayList<>(); List cutSchemeEquipmentDetails = mesCutSchemeEquipment == null || CollectionUtils.isEmpty(cutSchemeEquipmentDetailMapByPid) ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId()); for (int i = 0; i < EQUIP_NUM; i++) { @@ -129,8 +119,6 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic //设备参数值1 resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), cutSchemeEquipmentDetails.get(l).getName()); } else { - equipParamNameList.add(""); - equipParamValueList.add(""); //设备参数值标题1 resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), ""); //设备参数值1 @@ -159,6 +147,14 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic return model; } + private Map> getCutSchemeFgMapByCutCode(List cutCodeList) { + List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList); + + //根据裁片方案代码对裁片方案成品明细分组 + Map> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); + return cutSchemeFgMapByCutCode; + } + private BigDecimal[] divideAndRemainder(Double qty, Double packageQty) { BigDecimal dividend = new BigDecimal(qty.toString()); BigDecimal divisor = new BigDecimal(packageQty.toString()); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 6cca86b..8020612 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -296,6 +296,8 @@ public class MesExtConstWords { public static final String PARAM = "param"; //成品零件号 public static final String FG_PART_NO = "fgPartNo"; + // 打印时间 + public static final String PRINT_TIME = "printTime"; } From eceb7d9b5e5475a1d286ff9da4c00778ec336b19 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 19 Sep 2024 18:10:03 +0800 Subject: [PATCH 026/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 58b7cbc..75e94d3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -245,10 +245,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setPartName(partSap.getPartName()); //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO); - genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - mesWorkOrder.setWorkOrderNo(resultList.get(0)); + // 13.生产版本 organizeCode + partNo @@ -278,7 +275,18 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); - // todo 客户零件条码 + /** + * 工单号修改 + * {dynamicRule}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); + String dynamicRule=organizeCode+","+mesWorkOrder.getOrderFlag()+","+sortInfo.getCustOrderCode()+","+mesWorkOrder.getShiftCode(); + genSerialNoModel.setDynamicRule(dynamicRule); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + mesWorkOrder.setWorkOrderNo(resultList.get(0)); + /** * RS 为记录分隔符ASCII:30 * GS 为分组符ASCII:29 @@ -328,7 +336,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { String year = custCalendar.get(Calendar.YEAR)+""; custGenSerialNoModel.setYear(year.substring(2)); custGenSerialNoModel.setDay(custCalendar.get(Calendar.DAY_OF_YEAR)+""); - List custNumRuleList = syncFuncService.syncSerialNo(genSerialNoModel, "edi", organizeCode, 1).getResultList(); + List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% //截取替换为ascii码 String snOriginal = custNumRuleList.get(0); @@ -442,7 +450,8 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { //生成条码表 MesProduceSn mesProduceSn = new MesProduceSn(); - mesProduceSn.setProductSn(mesWorkOrder.getSn()); + mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setCustSn(mesWorkOrder.getSn()); mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); mesProduceSn.setOrganizeCode(organizeCode); ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); From 737efb5fcaf3e43123c64fcdf35a9fc05d8528dd Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 19 Sep 2024 18:15:06 +0800 Subject: [PATCH 027/180] =?UTF-8?q?43155=20MES-PC:=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=E5=8D=95=E6=98=8E=E7=BB=86=E9=A1=B5=E9=9D=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 2 ++ .../mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java | 1 + 2 files changed, 3 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index c789920..2782864 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -235,6 +235,8 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Thu, 19 Sep 2024 19:50:46 +0800 Subject: [PATCH 028/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/CutWorkOrderNoPrintStrategy.java | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java index 9794339..2a2ec06 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -95,13 +95,13 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic resultMap.put(MesExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo()); // 拉料信息 START - resultMap.put(MesExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial.getPullingMaterialLength()); - resultMap.put(MesExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial.getPullingMaterialLayerNumber()); - resultMap.put(MesExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial.getPerLayerNumber()); - resultMap.put(MesExtConstWords.MATERIAL_DOSAGE, cutSchemeMaterial.getMaterialDosage()); - resultMap.put(MesExtConstWords.USING_LENGTH, cutSchemeMaterial.getUsingLength()); - resultMap.put(MesExtConstWords.LAYER_NUMBER, cutSchemeMaterial.getLayerNumber()); - resultMap.put(MesExtConstWords.TENSION_PARAM, cutSchemeMaterial.getTensionParam()); + resultMap.put(MesExtConstWords.PULLING_MATERIAL_LENGTH, getValByDouble(cutSchemeMaterial.getPullingMaterialLength())); + resultMap.put(MesExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber())); + resultMap.put(MesExtConstWords.PER_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPerLayerNumber())); + resultMap.put(MesExtConstWords.MATERIAL_DOSAGE, getValByDouble(cutSchemeMaterial.getMaterialDosage())); + resultMap.put(MesExtConstWords.USING_LENGTH, getValByDouble(cutSchemeMaterial.getUsingLength())); + resultMap.put(MesExtConstWords.LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getLayerNumber())); + resultMap.put(MesExtConstWords.TENSION_PARAM, getValByDouble(cutSchemeMaterial.getTensionParam())); resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-M-d H:mm:ss")); // 拉料信息 END @@ -115,9 +115,9 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic for (int l = 0; l < EQUIP_PARAM_TITLE_NUM; l++) { if (cutSchemeEquipmentDetails.size() > l) { //设备参数值标题1 - resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), cutSchemeEquipmentDetails.get(l).getValue()); + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), cutSchemeEquipmentDetails.get(l).getName()); //设备参数值1 - resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), cutSchemeEquipmentDetails.get(l).getName()); + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), cutSchemeEquipmentDetails.get(l).getValue()); } else { //设备参数值标题1 resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), ""); @@ -147,6 +147,10 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic return model; } + private String getValByDouble(Double val) { + return val == null ? "" : val.toString(); + } + private Map> getCutSchemeFgMapByCutCode(List cutCodeList) { List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList); From fdc43ddb1a666a1a05256088acb4b8729b392cad Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 19 Sep 2024 23:24:52 +0800 Subject: [PATCH 029/180] =?UTF-8?q?PCN=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index ac12482..dfa5a7a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -323,14 +323,14 @@ public class MesWorkOrderCutService extends BaseMesService impl //模板信息丢失抛出异常 if (labelTemplate == null) - MesException.throwBusiException("请检查裁片方案,裁片工单号[%s]所属裁片方案模板代码[%s]无效!", cutScheme.getTemplateCode()); + MesException.throwBusiException("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode()); //根据反射获取策略类--封装打印数据 String methodCode = labelTemplate.getMethodCode(); //模板信息丢失抛出异常 - if (methodCode == null) - MesException.throwBusiException("裁片方案[%s]模板代码[%s]方法类[%s]无效,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()); + if (StringUtils.isEmpty(methodCode)) + MesException.throwBusiException("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode()); MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); From 182186077ca8dec1d8265dc407b5920ee9d39355 Mon Sep 17 00:00:00 2001 From: pzj Date: Fri, 20 Sep 2024 09:39:58 +0800 Subject: [PATCH 030/180] =?UTF-8?q?=E7=AD=89=E7=A6=BB=E5=AD=90=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE=20=E5=8F=AF=E5=9B=9E=E7=94=A8?= =?UTF-8?q?=E5=8C=85=E8=A3=85=E7=B1=BB=E5=9E=8B=E3=80=81=E5=8F=AF=E5=9B=9E?= =?UTF-8?q?=E7=94=A8=E5=8C=85=E8=A3=85=E3=80=81=E5=8F=AF=E5=9B=9E=E7=94=A8?= =?UTF-8?q?=E5=8C=85=E8=A3=85=E9=9B=B6=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/base/IMesRecyclablePackagePartService.java | 16 +++++ .../mes/api/base/IMesRecyclablePackageService.java | 14 +++++ .../api/base/IMesRecyclablePackageTypeService.java | 14 +++++ .../base/MesRecyclablePackageController.java | 20 +++++++ .../base/MesRecyclablePackagePartController.java | 19 ++++++ .../base/MesRecyclablePackageTypeController.java | 19 ++++++ .../base/MesRecyclablePackagePartServiceImpl.java | 60 +++++++++++++++++++ .../base/MesRecyclablePackageServiceImpl.java | 61 +++++++++++++++++++ .../base/MesRecyclablePackageTypeServiceImpl.java | 70 ++++++++++++++++++++++ 9 files changed, 293 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java new file mode 100644 index 0000000..058ab54 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 13:40 + * @Modify: + **/ +public interface IMesRecyclablePackagePartService extends IBaseMesService{ + + + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java new file mode 100644 index 0000000..dab4972 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java @@ -0,0 +1,14 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:02 + * @Modify: + **/ +public interface IMesRecyclablePackageService extends IBaseMesService{ + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java new file mode 100644 index 0000000..703b131 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java @@ -0,0 +1,14 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; + +/** + * @Description : 回收物包装类型 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/13 17:36 + * @Modify: + **/ +public interface IMesRecyclablePackageTypeService extends IBaseMesService{ + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java new file mode 100644 index 0000000..b5927da --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 回收包装 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:00 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRecyclablePackage") +public class MesRecyclablePackageController extends BaseMesController { + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java new file mode 100644 index 0000000..58f59d2 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 回收包装零件 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:57 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRecyclablePackagePart") +public class MesRecyclablePackagePartController extends BaseMesController{ + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java new file mode 100644 index 0000000..6452180 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 回收包装类型 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/13 17:14 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRecyclablePackageType") +public class MesRecyclablePackageTypeController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java new file mode 100644 index 0000000..afd0fce --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java @@ -0,0 +1,60 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesRecyclablePackagePartService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 13:45 + * @Modify: + **/ +@Slf4j +@Service +public class MesRecyclablePackagePartServiceImpl extends BaseMesService implements IMesRecyclablePackagePartService { + + + @Override + protected void onInsertBean(MesRecyclablePackagePart item) { + ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("零件号【%s】已存在", item.getPartNo()); + } + } + + @Override + protected void setPackQueryBean(MesRecyclablePackagePart bean, DdlPackBean packBean) { + String packageTypeCode = bean.getPackageTypeCode(); + if (!StringUtils.isEmpty(packageTypeCode)) { + DdlPreparedPack.getStringLikerPack(packageTypeCode, "packageTypeCode", packBean); + } + String partNo = bean.getPartNo(); + if (!StringUtils.isEmpty(partNo)) { + DdlPreparedPack.getStringLikerPack(partNo, "partNo", packBean); + } + } + + @Override + protected void onUpdateBean(MesRecyclablePackagePart item) { + ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", seriesPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("零件号【%s】已存在", item.getPartNo()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java new file mode 100644 index 0000000..393ebe4 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesRecyclablePackageService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:03 + * @Modify: + **/ +@Slf4j +@Service +public class MesRecyclablePackageServiceImpl extends BaseMesService implements IMesRecyclablePackageService { + + @Override + protected void onInsertBean(MesRecyclablePackage item) { + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageSn(), "包条码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageSn(), "packageSn", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("回收包装条码【%s】已存在", item.getPackageSn()); + } + } + + @Override + protected void onUpdateBean(MesRecyclablePackage item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageSn(), "包条码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageSn(), "packageSn", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("回收包装条码【%s】已存在", item.getPackageSn()); + } + } + + @Override + protected void setPackQueryBean(MesRecyclablePackage bean, DdlPackBean packBean) { + String packageTypeCode = bean.getPackageTypeCode(); + if (!StringUtils.isEmpty(packageTypeCode)) { + DdlPreparedPack.getStringLikerPack(packageTypeCode, "packageTypeCode", packBean); + } + String packageSn = bean.getPackageSn(); + if (!StringUtils.isEmpty(packageSn)) { + DdlPreparedPack.getStringLikerPack(packageSn, "packageSn", packBean); + } + } + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java new file mode 100644 index 0000000..691ec4b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java @@ -0,0 +1,70 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesRecyclablePackageTypeService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/13 17:38 + * @Modify: + **/ +@Slf4j +@Service +public class MesRecyclablePackageTypeServiceImpl extends BaseMesService implements IMesRecyclablePackageTypeService { + + + + @Override + protected void onInsertBean(MesRecyclablePackageType item) { + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeName(), "包描述不能为空"); + ValidatorBean.checkNotNull(item.getRuleType(),"规则类型不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageTypeCode(), "packageTypeCode", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode( ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("回收包装类型已存在{}", item.getPackageTypeCode()) + .build(); + } + } + + @Override + protected void setPackQueryBean(MesRecyclablePackageType bean, DdlPackBean packBean) { + String packageTypeCode = bean.getPackageTypeCode(); + if (!StringUtils.isEmpty(packageTypeCode)) { + DdlPreparedPack.getStringLikerPack(packageTypeCode, "packageTypeCode", packBean); + } + } + + @Override + protected void onUpdateBean(MesRecyclablePackageType item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeName(), "包描述不能为空"); + ValidatorBean.checkNotNull(item.getRuleType(),"规则类型不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageTypeCode(), "packageTypeCode", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode( ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("回收包装类型已存在{}", item.getPackageTypeCode()) + .build(); + } + } + +} From 5641d279745e5d33b7ff3b6d2e24fde1b94fe2c1 Mon Sep 17 00:00:00 2001 From: pzj Date: Fri, 20 Sep 2024 09:55:56 +0800 Subject: [PATCH 031/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20=E8=A3=81=E7=89=87=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B1=BB=E5=9E=8B=E3=80=81=E8=A3=81=E7=89=87?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E3=80=81=E8=A3=81=E7=89=87=E5=8E=9F=E6=9D=90?= =?UTF-8?q?=E6=96=99=E9=85=8D=E7=BD=AE=E3=80=81=E8=A3=81=E7=89=87=E6=88=90?= =?UTF-8?q?=E5=93=81=E9=85=8D=E7=BD=AE=E3=80=81=E8=A3=81=E7=89=87=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E9=85=8D=E7=BD=AE=E3=80=81=E8=A3=81=E7=89=87=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E9=85=8D=E7=BD=AE=E6=98=8E=E7=BB=86=E3=80=81=E8=A3=81?= =?UTF-8?q?=E7=89=87=E8=AE=BE=E5=A4=87=E9=85=8D=E7=BD=AE=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/base/IMesCutLengthModifyTypeService.java | 13 ++++++ .../base/IMesCutSchemeEquipmentDetailService.java | 13 ++++++ .../IMesCutSchemeEquipmentProcessParamService.java | 13 ++++++ .../api/base/IMesCutSchemeEquipmentService.java | 13 ++++++ .../ext/mes/api/base/IMesCutSchemeFgService.java | 13 ++++++ .../mes/api/base/IMesCutSchemeMaterialService.java | 16 ++++++++ .../base/MesCutLengthModifyTypeController.java | 18 ++++++++ .../base/MesCutSchemeEquipmentController.java | 18 ++++++++ .../MesCutSchemeEquipmentDetailController.java | 18 ++++++++ ...esCutSchemeEquipmentProcessParamController.java | 18 ++++++++ .../controller/base/MesCutSchemeFgController.java | 20 +++++++++ .../base/MesCutSchemeMaterialController.java | 19 +++++++++ .../base/MesCutLengthModifyTypeServiceImpl.java | 19 +++++++++ .../MesCutSchemeEquipmentDetailServiceImpl.java | 30 ++++++++++++++ ...sCutSchemeEquipmentProcessParamServiceImpl.java | 30 ++++++++++++++ .../base/MesCutSchemeEquipmentServiceImpl.java | 48 ++++++++++++++++++++++ .../base/MesCutSchemeFgServiceImpl.java | 30 ++++++++++++++ .../base/MesCutSchemeMaterialServiceImpl.java | 32 +++++++++++++++ 18 files changed, 381 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java new file mode 100644 index 0000000..2548c7b --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 9:47 + * @Modify: + **/ +public interface IMesCutLengthModifyTypeService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java new file mode 100644 index 0000000..5edde70 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 17:03 + * @Modify: + **/ +public interface IMesCutSchemeEquipmentDetailService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java new file mode 100644 index 0000000..30e66a3 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 16:51 + * @Modify: + **/ +public interface IMesCutSchemeEquipmentProcessParamService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java new file mode 100644 index 0000000..4306696 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:52 + * @Modify: + **/ +public interface IMesCutSchemeEquipmentService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java new file mode 100644 index 0000000..c4c3286 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:52 + * @Modify: + **/ +public interface IMesCutSchemeFgService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java new file mode 100644 index 0000000..daae478 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:35 + * @Modify: + **/ +public interface IMesCutSchemeMaterialService extends IBaseMesService{ + + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java new file mode 100644 index 0000000..9d950bc --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 9:45 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutLengthModifyType") +public class MesCutLengthModifyTypeController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java new file mode 100644 index 0000000..88ac35a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片设备配置维护主表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:20 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeEquipment") +public class MesCutSchemeEquipmentController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java new file mode 100644 index 0000000..47c553f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片设备配置维护明细表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 17:02 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeEquipmentDetail") +public class MesCutSchemeEquipmentDetailController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java new file mode 100644 index 0000000..fdb5e8f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片设备配置维护设备加工表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 16:49 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeEquipmentProcessParam") +public class MesCutSchemeEquipmentProcessParamController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java new file mode 100644 index 0000000..4a67516 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片方案成品 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:50 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeFg") +public class MesCutSchemeFgController extends BaseMesController{ + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java new file mode 100644 index 0000000..364ba9f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片方案原材料 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:27 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCutSchemeMaterial") +public class MesCutSchemeMaterialController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java new file mode 100644 index 0000000..9e0fe48 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutLengthModifyTypeService; +import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 9:47 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutLengthModifyTypeServiceImpl extends BaseMesService implements IMesCutLengthModifyTypeService { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java new file mode 100644 index 0000000..291c561 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentDetailService; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 17:04 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeEquipmentDetailServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentDetailService { + + @Override + protected void onInsertBean(MesCutSchemeEquipmentDetail item) { + ValidatorBean.checkNotNull(item.getName(), "名称不能为空"); + } + + @Override + protected void onUpdateBean(MesCutSchemeEquipmentDetail item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getName(), "名称不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java new file mode 100644 index 0000000..5ed18ff --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentProcessParamService; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 16:51 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeEquipmentProcessParamServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentProcessParamService { + + @Override + protected void onInsertBean(MesCutSchemeEquipmentProcessParam item) { + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + } + + @Override + protected void onUpdateBean(MesCutSchemeEquipmentProcessParam item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java new file mode 100644 index 0000000..a6f3ff0 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:55 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeEquipmentServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentService { + + + @Override + protected void onInsertBean(MesCutSchemeEquipment item) { + ValidatorBean.checkNotNull(item.getCutCode(), "裁片代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + } + + @Override + protected void onUpdateBean(MesCutSchemeEquipment item) { + ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); + ValidatorBean.checkNotNull(item.getCutCode(), "裁片代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + } + + @Override + protected void setPackQueryBean(MesCutSchemeEquipment bean, DdlPackBean packBean) { + String cutCode = bean.getCutCode(); + if (!StringUtils.isEmpty(cutCode)) { + DdlPreparedPack.getStringLikerPack(cutCode, "packageTypeCode", packBean); + } + String equipmentName = bean.getEquipmentName(); + if (!StringUtils.isEmpty(equipmentName)) { + DdlPreparedPack.getStringLikerPack(equipmentName, "equipmentName", packBean); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java new file mode 100644 index 0000000..da21c1b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeFgService; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:04 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeFgServiceImpl extends BaseMesService implements IMesCutSchemeFgService { + + @Override + protected void onInsertBean(MesCutSchemeFg item) { + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } + + @Override + protected void onUpdateBean(MesCutSchemeFg item) { + ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java new file mode 100644 index 0000000..5c01d8f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java @@ -0,0 +1,32 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeMaterialService; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:37 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeMaterialServiceImpl extends BaseMesService implements IMesCutSchemeMaterialService { + + + @Override + protected void onInsertBean(MesCutSchemeMaterial item) { + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } + + + @Override + protected void onUpdateBean(MesCutSchemeMaterial item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } +} From d02f6ef9fba580905f9b059e2f08884714bcb90c Mon Sep 17 00:00:00 2001 From: pzj Date: Fri, 20 Sep 2024 11:27:18 +0800 Subject: [PATCH 032/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20=E9=95=BF=E5=BA=A6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java index 9e0fe48..774799d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCutLengthModifyTypeService; import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -16,4 +17,15 @@ import org.springframework.stereotype.Service; @Service public class MesCutLengthModifyTypeServiceImpl extends BaseMesService implements IMesCutLengthModifyTypeService { + + @Override + protected void onInsertBean(MesCutLengthModifyType item) { + ValidatorBean.checkNotNull(item.getReasonName(), "原因名称不能为空"); + } + + @Override + protected void onUpdateBean(MesCutLengthModifyType item) { + ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); + ValidatorBean.checkNotNull(item.getReasonName(), "原因名称不能为空"); + } } From 286c1c9b59c55877be5f2c8f7a44a83c0d92360a Mon Sep 17 00:00:00 2001 From: gsz Date: Fri, 20 Sep 2024 14:22:08 +0800 Subject: [PATCH 033/180] =?UTF-8?q?JIS=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=20=E8=A7=84=E5=88=99=E6=A0=A1=E9=AA=8C=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 2782864..55fdd74 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -235,7 +235,11 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Fri, 20 Sep 2024 15:57:19 +0800 Subject: [PATCH 034/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderCutService.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index dfa5a7a..4c07afb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -62,6 +62,9 @@ public class MesWorkOrderCutService extends BaseMesService impl @Autowired private MesLabelTemplateParamRepository labelTemplateParamRepository; + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + protected void setPackQueryBean(MesWorkOrderCut bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); @@ -344,15 +347,28 @@ public class MesWorkOrderCutService extends BaseMesService impl } + List printedSnLogList = new ArrayList<>(); workOrderCutDbList.forEach(o -> { o.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); o.setPrintTime(TimeTool.getNowTime(true)); ConvertBean.serviceModelUpdate(o, userName); o.setSystemSyncStatus(CommonEnumUtil.FALSE); + + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setOrganizeCode(organizeCode); + printedSnLog.setCutWorkOrderNo(o.getCutWorkOrderNo()); + printedSnLog.setBarcode(o.getCutWorkOrderNo()); + printedSnLog.setProductDate(TimeTool.getNowTime(MesExtConstWords.DATE_FORMAT)); + ConvertBean.serviceModelInitialize(printedSnLog, userName); + printedSnLogList.add(printedSnLog); + }); workOrderCutRepository.saveAll(workOrderCutDbList); + printedSnLogRepository.saveAll(printedSnLogList); + + return resultMapList; } From 1ee988c0306c10a41e48236285c966bd35f848bd Mon Sep 17 00:00:00 2001 From: pzj Date: Mon, 23 Sep 2024 09:08:39 +0800 Subject: [PATCH 035/180] =?UTF-8?q?=E7=AB=99=E7=82=B9=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesStationService.java | 13 ++++++++++ .../controller/base/MesStationController.java | 18 +++++++++++++ .../serviceimpl/base/MesStationServiceImpl.java | 30 ++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java new file mode 100644 index 0000000..73fb308 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesStation; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 14:45 + * @Modify: + **/ +public interface IMesStationService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java new file mode 100644 index 0000000..84ede19 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesStation; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 14:40 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN+"mesStation") +public class MesStationController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java new file mode 100644 index 0000000..e790154 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesStationService; +import cn.estsh.i3plus.pojo.mes.bean.MesStation; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 14:46 + * @Modify: + **/ +@Service +@Slf4j +public class MesStationServiceImpl extends BaseMesService implements IMesStationService { + + @Override + protected void onInsertBean(MesStation item) { + ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); + } + + @Override + protected void onUpdateBean(MesStation item) { + ValidatorBean.checkNotNull(item.getId(),"主键不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); + } +} From b50fdbe35764bc291ce893ec7317f9dec5d8092e Mon Sep 17 00:00:00 2001 From: pzj Date: Mon, 23 Sep 2024 14:10:41 +0800 Subject: [PATCH 036/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=E9=97=AE=E9=A2=98=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java index c9b14c3..10162b9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java @@ -27,7 +27,7 @@ public class MesCutSchemeService extends BaseMesService implements protected void setPackQueryBean(MesCutScheme bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); - DdlPreparedPack.getNumEqualPack(bean.getCutName(), MesExtConstWords.CUT_NAME, packBean); + DdlPreparedPack.getStringEqualPack(bean.getCutName(), MesExtConstWords.CUT_NAME, packBean); } @Override From 9cfe026727ffb78edfa4ced061554cdff387d794 Mon Sep 17 00:00:00 2001 From: yxw Date: Mon, 23 Sep 2024 15:56:10 +0800 Subject: [PATCH 037/180] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=BA=A7=E7=BA=BF?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=8F=91=E5=B8=83=E6=96=B0=E5=A2=9E=E8=A3=85?= =?UTF-8?q?=E9=85=8D=E7=9B=AE=E8=A7=86=E5=8D=95=E6=89=93=E5=8D=B0=E9=98=9F?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 34 +++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 888afc8..766c6c5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -121,6 +121,9 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesWorkOrderToSapRepository mesWorkOrderToSapRepository; + @Autowired + private MesPrintQueueRepository printQueueRepository; + @Override public MesWorkOrder insert(MesWorkOrder bean) { //校验产线与工位的关系 @@ -408,7 +411,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); mesPartProdGroup = mesPartProdGroupRDao.getByProperty(ddlPackBean); if(Objects.isNull(mesPartProdGroup)){ - MesException.throwMesBusiException("生产线组【%s】信息不存在",item.getPartProdGroupCode()); + MesException.throwMesBusiException("零件生产组【%s】信息不存在",item.getPartProdGroupCode()); } } @@ -419,11 +422,36 @@ public class MesWorkOrderService extends BaseMesService implements if(!Objects.isNull(bomList)){ saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); } + + // 创建工单打印队列 + insertPrintQueue(item, mesPartProdGroup); + } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } } + private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder, MesPartProdGroup mesPartProdGroup) { + + if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) return null; + + if (mesPartProdGroup == null) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workOrder.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); + mesPartProdGroup = mesPartProdGroupRDao.getByProperty(ddlPackBean); + if(Objects.isNull(mesPartProdGroup)){ + MesException.throwMesBusiException("生产线组【%s】信息不存在",workOrder.getPartProdGroupCode()); + } + } + + MesPrintQueue printQueue = new MesPrintQueue(); + BeanUtils.copyProperties(workOrder, printQueue, MesExtConstWords.ID); + printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER.getValue()); + printQueue.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + return printQueueRepository.save(printQueue); + } + private MesPartProdGroup getMesPartProdGroup(MesWorkOrder item) { MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail(); mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode()); @@ -556,6 +584,10 @@ public class MesWorkOrderService extends BaseMesService implements MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); BeanUtils.copyProperties(item, workOrderLog, "id"); mesWorkOrderLogList.add(workOrderLog); + + // 如果工单为发布状态则新增打印队列 + insertPrintQueue(copyMesWorkOrder, null); + continue; } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { Long produceSeq = 0L; From 2dbe97741daf147b46e0918dae25103b047313cc Mon Sep 17 00:00:00 2001 From: pzj Date: Tue, 24 Sep 2024 09:11:23 +0800 Subject: [PATCH 038/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesCutSchemeEquipmentDetailServiceImpl.java | 10 ++++++++++ .../base/MesCutSchemeEquipmentProcessParamServiceImpl.java | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java index 291c561..bcc4e7f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentDetailService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; @@ -18,6 +20,14 @@ import org.springframework.stereotype.Service; public class MesCutSchemeEquipmentDetailServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentDetailService { @Override + protected void setPackQueryBean(MesCutSchemeEquipmentDetail bean, DdlPackBean packBean) { + Long pid = bean.getPid(); + if (pid != null) { + DdlPreparedPack.getNumEqualPack(pid, "pid", packBean); + } + } + + @Override protected void onInsertBean(MesCutSchemeEquipmentDetail item) { ValidatorBean.checkNotNull(item.getName(), "名称不能为空"); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java index 5ed18ff..5733e4b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentProcessParamService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; @@ -18,6 +20,14 @@ import org.springframework.stereotype.Service; public class MesCutSchemeEquipmentProcessParamServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentProcessParamService { @Override + protected void setPackQueryBean(MesCutSchemeEquipmentProcessParam bean, DdlPackBean packBean) { + Long pid = bean.getPid(); + if (pid != null) { + DdlPreparedPack.getNumEqualPack(pid, "pid", packBean); + } + } + + @Override protected void onInsertBean(MesCutSchemeEquipmentProcessParam item) { ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); } From 29dd614d4ba9b9525cd595f09df929565ea4846c Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 24 Sep 2024 10:55:13 +0800 Subject: [PATCH 039/180] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E6=89=93=E5=8D=B0=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderService.java | 3 ++ .../controller/base/MesWorkOrderController.java | 16 +++++++++ .../serviceimpl/base/MesWorkOrderCutService.java | 39 +++++++++++++++++----- .../serviceimpl/base/MesWorkOrderService.java | 16 ++++++++- 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 68b8cb1..11c2105 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -42,6 +42,9 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("重新打开") void doReopen(Long[] ids,String userName,String organizeCode); + @ApiOperation("新增工单打印队列") + void doSaveWorkOrderPrintQueue(MesWorkOrder workOrder); + List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 8919f88..9c93f0e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -183,6 +183,22 @@ public class MesWorkOrderController extends BaseMesController { } } + @PostMapping(value = "/save-work-print-queue") + @ApiOperation(value = "新增打印工单打印队列") + public ResultBean doSaveWorkOrderPrintQueue(@RequestBody MesWorkOrder workOrder) { + try { + + ValidatorBean.checkNotNull(workOrder.getOrganizeCode(),"工厂代码不能为空"); + + mesWorkOrderService.doSaveWorkOrderPrintQueue(workOrder); + return ResultBean.success("反向冲销成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") public ResultBean doReopen(Long[] ids) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index 4c07afb..cc8ebfb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -170,22 +170,43 @@ public class MesWorkOrderCutService extends BaseMesService impl List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); - MesWorkOrder workOrder = workOrders.get(0); + //MesWorkOrder workOrder = workOrders.get(0); - if (workOrders.size() > 1) - MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo()); + //if (workOrders.size() > 1) + // MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo()); - if (!workOrder.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) - MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", workOrder.getWorkCenterCode(), cutScheme.getWorkCenterCode()); + if (!CollectionUtils.isEmpty(workOrders)) workOrders.sort(Comparator.comparing(MesWorkOrder::getUnCompleteQty)); // 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量 Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber); - if (totalQty.compareTo(workOrder.getUnCompleteQty()) > 0) - MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", - cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), totalQty); + Double unCompleteQty = 0.0; + List needWorkOrderNoList = new ArrayList<>(); + for (MesWorkOrder order : workOrders) { - workOrderUnCompleteMap.put(workOrder.getWorkOrderNo(), MathOperation.sub(workOrder.getUnCompleteQty(), totalQty)); + if (!order.getWorkCenterCode().equals(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())); + + unCompleteQty = MathOperation.add(unCompleteQty, order.getUnCompleteQty()); + + needWorkOrderNoList.add(order.getWorkOrderNo()); + + if (order.getUnCompleteQty().compareTo(totalQty) >= 0) { + workOrderUnCompleteMap.put(order.getWorkOrderNo(), MathOperation.sub(order.getUnCompleteQty(), totalQty)); + } else { + workOrderUnCompleteMap.put(order.getWorkOrderNo(), 0.0); + } + + } + + if (totalQty.compareTo(unCompleteQty) > 0) { + List workOrderNoList = workOrders.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()); + MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量【%s】不满足产成总数【%s】!", + cutSchemeFg.getPartNo(), workOrderNoList, unCompleteQty, totalQty); + } } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 766c6c5..859c42f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -446,7 +446,7 @@ public class MesWorkOrderService extends BaseMesService implements MesPrintQueue printQueue = new MesPrintQueue(); BeanUtils.copyProperties(workOrder, printQueue, MesExtConstWords.ID); - printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER.getValue()); + printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()); printQueue.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); return printQueueRepository.save(printQueue); @@ -1138,6 +1138,20 @@ public class MesWorkOrderService extends BaseMesService implements mesCcscTaskService.insertMesCcscTask(organizeCode,mesWorkOrderList); } + @Override + public void doSaveWorkOrderPrintQueue(MesWorkOrder workOrder) { + if (workOrder == null) return; + + if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { + log.info("doSaveWorkOrderPrintQueue --- 工单:{} 为非排序,无需新增打印队列", workOrder.getWorkOrderNo()); + return; + } + + insertPrintQueue(workOrder, null); + + + } + private List getMesWorkOrderList(Long[] ids, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackArray(ids,"id",packBean); From 40f8093dd7a9e9d13406e68b2a3064f468f45793 Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 24 Sep 2024 10:58:08 +0800 Subject: [PATCH 040/180] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E6=89=93=E5=8D=B0=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/controller/base/MesWorkOrderController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 9c93f0e..07b66d4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -191,7 +191,7 @@ public class MesWorkOrderController extends BaseMesController { ValidatorBean.checkNotNull(workOrder.getOrganizeCode(),"工厂代码不能为空"); mesWorkOrderService.doSaveWorkOrderPrintQueue(workOrder); - return ResultBean.success("反向冲销成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + return ResultBean.success("工单打印队列新增成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); } catch (Exception e) { From 6162899689c339b5faa64a63bda651193166fa56 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 24 Sep 2024 15:17:10 +0800 Subject: [PATCH 041/180] =?UTF-8?q?CBR=E6=8A=A5=E5=B7=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesProductOffLineService.java | 6 ++- .../controller/base/MesWorkOrderController.java | 1 - .../base/MesProductOffLineServiceImpl.java | 16 ++++++++ .../serviceimpl/base/MesWorkOrderService.java | 48 +++++++++++++++++----- 4 files changed, 58 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java index dfe30e0..0c77416 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 生产汇报 @@ -11,5 +14,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine; **/ public interface IMesProductOffLineService extends IBaseMesService{ - + @ApiOperation("查询报工数据") + List findMesProductOffLineByProductSn(String productSn, String organizeCode); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 07b66d4..085a71f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -171,7 +171,6 @@ public class MesWorkOrderController extends BaseMesController { try { ValidatorBean.checkNotNull(model.getOrganizeCode(),"工厂代码不能为空"); ValidatorBean.checkNotNull(model.getQty(),"数量不能为空"); - ValidatorBean.checkNotNull(model.getSn(),"条码不能为空"); ValidatorBean.checkNotNull(model.getPartNo(),"零件号不能为空"); mesWorkOrderService.doReportWorkReversal(model); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java index c9fa3af..99c1fc8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java @@ -1,9 +1,15 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Description : 生产汇报 * @Reference : @@ -14,4 +20,14 @@ import org.springframework.stereotype.Service; @Service public class MesProductOffLineServiceImpl extends BaseMesService implements IMesProductOffLineService { + @Override + public List findMesProductOffLineByProductSn(String productSn, String organizeCode) { + if(StringUtil.isEmpty(productSn) || StringUtil.isEmpty(organizeCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productSn,"reportSn",packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue(),"reportType",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 859c42f..68a8b35 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; @@ -929,7 +930,7 @@ public class MesWorkOrderService extends BaseMesService implements updateMesWorkOrder(mesWorkOrderDb,(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) ? MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT : MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum()); //试制单不报工 if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ - String sn = getStringList(mesWorkOrder); + String sn = getStringList(mesWorkOrder.getOrganizeCode()); //保存数据 List mesProductOffLineList = new ArrayList<>(); String nowTime = StringUtil.isEmpty(mesWorkOrder.getDescription())?TimeTool.getNowTime(true):mesWorkOrder.getDescription(); @@ -993,7 +994,7 @@ public class MesWorkOrderService extends BaseMesService implements //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成条码 - String sn = getStringList(mesWorkOrderNew); + String sn = getStringList(mesWorkOrderNew.getOrganizeCode()); //保存数据 List mesProductOffLineList = new ArrayList<>(); List mesMoveList = new ArrayList<>(); @@ -1101,15 +1102,22 @@ public class MesWorkOrderService extends BaseMesService implements public void doReportWorkReversal(WmsProductModel model) { //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(model.getPartNo(), model.getOrganizeCode()); - //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(model); - //获取bom - List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //保存数据 List mesProductOffLineList = new ArrayList<>(); String nowTime = TimeTool.getNowTime(true); - for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom,nowTime)); + if (StringUtil.isEmpty(model.getSn())) { + //获取生产版本 + MesProductVersion mesProductVersion = getMesProductVersion(model); + //获取bom + List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); + //生成流水码 + model.setSn(getStringList(model.getOrganizeCode())); + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom, nowTime)); + } + } else { + //按照条码查询之前报工数据 + mesProductOffLineList.addAll(getMesProductOffLineList(model, nowTime)); } mesProductOffLineService.insertBatch(mesProductOffLineList); } @@ -1152,6 +1160,25 @@ public class MesWorkOrderService extends BaseMesService implements } + private List getMesProductOffLineList(WmsProductModel model, String nowTime) { + //查询报工数据 + List oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByProductSn(model.getSn(), model.getOrganizeCode()); + if (CollectionUtils.isEmpty(oldProductOffLineList)) { + MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn()); + } + oldProductOffLineList.forEach(item -> { + item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); + item.setOrderNo(model.getShipOrderNo()); + item.setCustNo(model.getCustNo()); + item.setCustOrder(model.getCustOrderNo()); + item.setDescription(nowTime); + item.setSystemSyncStatus(CommonEnumUtil.FALSE); + item.setSystemSyncDatetime(""); + ConvertBean.serviceModelInitialize(item, model.getUserName()); + }); + return oldProductOffLineList; + } + private List getMesWorkOrderList(Long[] ids, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackArray(ids,"id",packBean); @@ -1281,9 +1308,8 @@ public class MesWorkOrderService extends BaseMesService implements return mesProdRuleSortCfg; } - private String getStringList(MesWorkOrder mesWorkOrder) { - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(mesWorkOrder.getOrganizeCode()), mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), 1).getResultList(); + private String getStringList(String organizeCode) { + List resultList = syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode), AuthUtilExt.getUserName(), organizeCode, 1).getResultList(); return resultList.iterator().next(); } From 68f09d4fcf79aea1748a3740183d3562ac6b8a03 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 24 Sep 2024 15:58:15 +0800 Subject: [PATCH 042/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=98=9F=E5=88=97=E5=92=8C=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 68 +++++++++++++++++----- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 75e94d3..0a26508 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -4,7 +4,6 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService; import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; -import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -85,6 +84,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesProduceSnRepository mesProduceSnRao; + @Autowired + private MesQueueOrderRepository queueOrderRao; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { @@ -188,7 +190,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { //订单序号=客户排序信息的序号 mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); - mesWorkOrder.setWorkCenterCode(mesPartProdGroupDetail.getWorkCenterCode()); + mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); //来源 @@ -275,17 +277,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); - /** - * 工单号修改 - * {dynamicRule}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} - * 工厂代码+工单类型 +客户工厂代码+班次+流水号 - */ - GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); - genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); - String dynamicRule=organizeCode+","+mesWorkOrder.getOrderFlag()+","+sortInfo.getCustOrderCode()+","+mesWorkOrder.getShiftCode(); - genSerialNoModel.setDynamicRule(dynamicRule); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - mesWorkOrder.setWorkOrderNo(resultList.get(0)); + /** * RS 为记录分隔符ASCII:30 @@ -436,6 +428,28 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { }else { mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } + /** + * 工单号修改 + * {dynamicRule}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); + String dynamicRule=organizeCode+","+mesWorkOrder.getOrderFlag()+","+sortInfo.getCustOrderCode()+","+mesWorkOrder.getShiftCode(); + genSerialNoModel.setDynamicRule(dynamicRule); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + mesWorkOrder.setWorkOrderNo(resultList.get(0)); + + /** + * 生产序号 + * 工厂-产线-9位流水号,跳号10 + */ + GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); + + List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String proSeqStr = proSeqResultList.get(0); + mesWorkOrder.setProduceSeq(Long.parseLong(proSeqStr.replace(organizeCode, "").replace(mesWorkOrder.getWorkCenterCode(),""))); mesWorkOrderRao.insert(mesWorkOrder); @@ -446,6 +460,31 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); } workOrderAssemblyRao.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map cell2Process = assemblyList.stream().collect(Collectors.toMap(MesWorkOrderAssembly::getWorkCellCode, MesWorkOrderAssembly::getProcessSeq)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setOrganizeCode(organizeCode); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + mesQueueOrder.setProcessSeq(cell2Process.get(cellCode)); + mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); + mesQueueOrder.setPartName(mesWorkOrder.getPartName()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setCustSn(mesWorkOrder.getSn()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + mesQueueOrder.setProduceSeq(mesWorkOrder.getProduceSeq()); + mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); + mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); + queueOrderRao.insert(mesQueueOrder); + } + } //生成条码表 @@ -494,6 +533,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(VehicleNo)){ continue; } + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); orderAssembly.setCraftName(sortCfg.getCraftName()); orderAssembly.setCraftCode(sortCfg.getCraftCode()); orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); From 45395bd4d6841320a4983189668055d2c24b6de3 Mon Sep 17 00:00:00 2001 From: pzj Date: Tue, 24 Sep 2024 17:24:38 +0800 Subject: [PATCH 043/180] =?UTF-8?q?=E8=BE=8A=E9=81=93=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesBallTrackRuleService.java | 13 ++++++ .../base/MesBallTrackRuleController.java | 20 ++++++++ .../base/MesBallTrackRuleServiceImpl.java | 54 ++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java new file mode 100644 index 0000000..0bf2053 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/24 15:36 + * @Modify: + **/ +public interface IMesBallTrackRuleService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java new file mode 100644 index 0000000..f92860f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/24 15:35 + * @Modify: + **/ +@Api("辊道设备配置接口") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesBallTrackRule") +public class MesBallTrackRuleController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java new file mode 100644 index 0000000..dbdca2a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java @@ -0,0 +1,54 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesBallTrackRuleService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/24 15:37 + * @Modify: + **/ +@Service +@Slf4j +public class MesBallTrackRuleServiceImpl extends BaseMesService implements IMesBallTrackRuleService { + + @Override + protected void setPackQueryBean(MesBallTrackRule bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getBallTrackName(), "ballTrackName", packBean); + } + + @Override + protected void onInsertBean(MesBallTrackRule item) { + ValidatorBean.checkNotNull(item.getBallTrackName(), "轨道名称不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipVariableValue(), "轨道变量值不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("轨道编码已存在"); + } + } + + @Override + protected void onUpdateBean(MesBallTrackRule item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getBallTrackName(), "轨道名称不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipVariableValue(), "轨道变量值不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("轨道编码已存在"); + } + } +} From edb6dea585f83e9360e47a2a5d2afbd2d56b0b32 Mon Sep 17 00:00:00 2001 From: pzj Date: Tue, 24 Sep 2024 17:25:12 +0800 Subject: [PATCH 044/180] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesStationServiceImpl.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java index e790154..88c4b7e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesStationServiceImpl.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesStationService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesStation; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; @@ -17,14 +20,26 @@ import org.springframework.stereotype.Service; @Slf4j public class MesStationServiceImpl extends BaseMesService implements IMesStationService { + @Override protected void onInsertBean(MesStation item) { ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(),"equipmentCode",ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码已存在"); + } } @Override protected void onUpdateBean(MesStation item) { ValidatorBean.checkNotNull(item.getId(),"主键不能为空"); ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(),"equipmentCode",ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码已存在"); + } } } From 7c8280137751fc228a4221bfe8891ad2eaab2616 Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 24 Sep 2024 18:39:42 +0800 Subject: [PATCH 045/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesLabelTemplateService.java | 2 + .../ext/mes/api/base/IMesPartProdGroupService.java | 3 + .../ext/mes/api/base/IMesWorkCenterService.java | 5 + .../ext/mes/api/base/IMesWorkOrderService.java | 4 + .../controller/base/MesWorkOrderController.java | 16 +++ .../base/MesLabelTemplateServiceImpl.java | 15 +++ .../serviceimpl/base/MesPartProdGroupService.java | 16 ++- .../serviceimpl/base/MesWorkCenterService.java | 11 ++ .../serviceimpl/base/MesWorkOrderCutService.java | 1 + .../serviceimpl/base/MesWorkOrderService.java | 129 +++++++++++++++++++++ .../strategy/AssemblyVisualListPrintStrategy.java | 104 +++++++++++++++++ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 23 ++++ 12 files changed, 325 insertions(+), 4 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java index effa39d..b08eb00 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java @@ -14,4 +14,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; public interface IMesLabelTemplateService extends IBaseMesService { ListPager queryMesLabelTemplateAndParamListByPager(MesLabelTemplate labelTemplate, Pager pager); + + MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java index ec73196..3ef1ea1 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; import java.util.List; +import java.util.Map; /** * @Description: @@ -28,4 +29,6 @@ public interface IMesPartProdGroupService extends IBaseMesService findDetailByCode(String partGroupCode,String organizeCode); + + Map getMesPartProdGroupMap(String organizeCode, List partProdGroupCodeList); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java index 9a46397..1a6d438 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java @@ -4,6 +4,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -17,4 +19,7 @@ public interface IMesWorkCenterService extends IBaseMesService { @ApiOperation(value = "根据生产线代码查询生产线信息的ERP生产线代码") String getErpWorkCenterCode(String organizeCode, String workCenterCode); + @ApiOperation(value = "根据产线代码集合查询产线信息集合") + List queryMesWorkCenterList(List workCenterCodeList, String organizeCode); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 11c2105..03a6c0b 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * @Description: @@ -45,6 +46,9 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("新增工单打印队列") void doSaveWorkOrderPrintQueue(MesWorkOrder workOrder); + @ApiOperation("装配目视单补打") + List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName); + List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 085a71f..54cecc1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -198,6 +198,22 @@ public class MesWorkOrderController extends BaseMesController { } } + @PostMapping(value = "/work-order-reprint") + @ApiOperation(value = "装配目视单补打") + public ResultBean doSaveWorkOrderPrintQueue(@RequestBody Long[] ids) { + try { + + ValidatorBean.checkNotNull(ids,"工单不能为空"); + + mesWorkOrderService.doReprintWorkOrder(ids, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("装配目视单补打成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") public ResultBean doReopen(Long[] ids) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java index e9b2f6b..309eddc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java @@ -63,4 +63,19 @@ public class MesLabelTemplateServiceImpl extends BaseMesService(resultList, pager); } + + @Override + public MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = baseRDao.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); + List params = mesLabelTemplateParamRDao.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java index cc804f7..9fe911f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartProdGroupService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -9,6 +10,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintQueue; import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupDetailRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; @@ -17,10 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @Service @@ -58,6 +58,14 @@ public class MesPartProdGroupService extends BaseMesService im return mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean); } + @Override + public Map getMesPartProdGroupMap(String organizeCode, List partProdGroupCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partProdGroupCodeList, MesExtConstWords.PART_PROD_GROUP_CODE, packBean); + List partProdGroupList = baseRDao.findByHqlWhere(packBean); + return partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); + } + protected void setPackQueryBean(MesPartProdGroup bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java index 4b848e3..12b13f2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java @@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.util.List; + @Service @Slf4j public class MesWorkCenterService extends BaseMesService implements IMesWorkCenterService { @@ -41,4 +43,13 @@ public class MesWorkCenterService extends BaseMesService implemen return null != workCenterDb ? workCenterDb.getErpWorkCenter() : null; } + @Override + public List queryMesWorkCenterList(List workCenterCodeList, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workCenterCodeList, MesExtConstWords.WORK_CENTER_CODE, packBean); + return workCenterRepository.findByHqlWhere(packBean); + + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index cc8ebfb..01947d2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -322,6 +322,7 @@ public class MesWorkOrderCutService extends BaseMesService impl MesException.throwMesBusiException("裁片工单【%s】已打印过标签,无法再次打印", o.getCutWorkOrderNo()); }); + // 返回结果 List> resultMapList = new ArrayList<>(); List cutCodeList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 68a8b35..0bd64fe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -3,9 +3,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.apiservice.util.DateUtil; @@ -29,17 +31,20 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.CaseInsensitiveMap; import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -125,6 +130,18 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesPrintQueueRepository printQueueRepository; + @Autowired + private MesCustomerCarModelRepository customerCarModelRepository; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; + + @Autowired + private IMesLabelTemplateService labelTemplateService; + + @Autowired + private IMesPartProdGroupService partProdGroupService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { //校验产线与工位的关系 @@ -1160,6 +1177,118 @@ public class MesWorkOrderService extends BaseMesService implements } + @Override + public List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName) { + + List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); + + // 根据工单号对工单分组 + Map workOrderMapByWorkOrderNo = mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); + + // 产线代码集合 + List workCenterCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getWorkCenterCode).distinct().collect(Collectors.toList()); + + // 根据产线代码节后获取产线信息集合 + List mesWorkCenters = workCenterService.queryMesWorkCenterList(workCenterCodeList, organizeCode); + + // 产线名称集合 + Map workCenterNameMap = mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); + + // 生产零件号 + List partProdGroupCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getPartProdGroupCode).distinct().collect(Collectors.toList()); + + // 根据零件生产组代码分组 + Map partProdGroupMap = partProdGroupService.getMesPartProdGroupMap(organizeCode, partProdGroupCodeList); + + // 客户车型配置名称MAP + Map carModelMapByCode = getMesCustomerCarModelMap(organizeCode, mesWorkOrderList); + + // 工单装配件 + Map> workOrderAssemblyMapByWorkOrderNo = getWorkOrderAssemblyMapByWorkOrderNo(organizeCode, workOrderMapByWorkOrderNo); + + // 返回结果 + List> resultMapList = new ArrayList<>(); + + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + + if (mesWorkOrder == null) { + log.info("doReprintWorkOrder --- 工单为空 暂不输出打印"); + continue; + } + + mesWorkOrder.setWorkCenterName(workCenterNameMap.get(mesWorkOrder.getWorkCenterCode())); + + MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()); + + String printTemplate = mesPartProdGroup.getPrintTemplate(); + + if (StringUtils.isEmpty(printTemplate)) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + + MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(printTemplate, organizeCode); + + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + + //模板信息丢失抛出异常 + if (StringUtils.isEmpty(labelTemplate.getMethodCode())) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode()); + } + + Map modelMap = new HashMap<>(); + modelMap.put("mesWorkOrder", mesWorkOrder); + modelMap.put("mesPartProdGroup", mesPartProdGroup); + + MesCustomerCarModel customerCarModel = carModelMapByCode.get(mesWorkOrder.getCarModelCode()); + if (customerCarModel != null) { + modelMap.put("mesCustomerCarModel", customerCarModel); + } + List workOrderAssemblyListByWorkOrderNo = workOrderAssemblyMapByWorkOrderNo.get(mesWorkOrder.getWorkOrderNo()); + if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { + modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); + } + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(modelMap); + mesProduceSnPrintModel.setPrinter(mesPartProdGroup.getPrinter()); + + MesProduceSnPrintModel snPrintModel = null; + try { + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null); + } catch (BeansException e) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】策略类【%s】执行异常", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()); + } + + resultMapList.addAll(snPrintModel.getPrintContextList()); + + } + + return resultMapList; + + } + + private Map getMesCustomerCarModelMap(String organizeCode, List workOrderList) { + List carModelCodeList = workOrderList.stream().map(MesWorkOrder::getCarModelCode).distinct().collect(Collectors.toList()); + // 客户车型配置 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(carModelCodeList, MesExtConstWords.CAR_MODEL_CODE, packBean); + List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); + + return customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); + } + + private Map> getWorkOrderAssemblyMapByWorkOrderNo(String organizeCode, Map workOrderMapByWorkOrderNo) { + List workOrderNoList = workOrderMapByWorkOrderNo.keySet().stream().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); + Map> workOrderAssemblyMapByWorkOrderNo = workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); + return workOrderAssemblyMapByWorkOrderNo; + } + private List getMesProductOffLineList(WmsProductModel model, String nowTime) { //查询报工数据 List oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByProductSn(model.getSn(), model.getOrganizeCode()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java new file mode 100644 index 0000000..3929865 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -0,0 +1,104 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 装配目视单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategyService { + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule) { + + Map modelMap = (Map) model.getSourceData(); + + // 工单信息 + MesWorkOrder workOrder = (MesWorkOrder) modelMap.get("mesWorkOrder"); + // 零件生产组信息 + MesPartProdGroup partProdGroup = (MesPartProdGroup) modelMap.get("mesPartProdGroup"); + // 客户车型配置信息 + MesCustomerCarModel customerCarModel = modelMap.containsKey("mesCustomerCarModel") ? (MesCustomerCarModel) modelMap.get("mesCustomerCarModel") : null; + // 工单装配件信息 + List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : null; + workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> o.getDisplaySeq() != null && o.getDisplaySeq() != 0).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(workOrderAssemblyList)) workOrderAssemblyList.sort(Comparator.comparing(MesWorkOrderAssembly::getDisplaySeq)); + // 返回的结果集合 + List> printDataMapList = new ArrayList<>(); + // 单个标签参数值 + Map resultMap = new HashMap<>(); + // 工单号 + resultMap.put(MesExtConstWords.WORK_ORDER_NO, workOrder.getWorkOrderNo()); + // 产线名称 + resultMap.put(MesExtConstWords.WORK_CENTER_NAME, workOrder.getWorkCenterName()); + // 车型名称 + resultMap.put(MesExtConstWords.CAR_MODEL_NAME, customerCarModel == null ? "" : customerCarModel.getCarModelName()); + // vinCode + resultMap.put(MesExtConstWords.VIN_CODE, workOrder.getVinCode()); + // vinCode 后四位 + resultMap.put(MesExtConstWords.VIN_CODE_AFTER_FOUR, workOrder.getVinCode()); + // 总成零件号 + resultMap.put(MesExtConstWords.PART_NO, workOrder.getPartNo()); + // 工单标识 + resultMap.put(MesExtConstWords.ORDER_FLAG, workOrder.getOrderFlag()); + // 客户订单号 + resultMap.put(MesExtConstWords.CUST_ORDER_NO, workOrder.getCustOrderNo()); + // 客户零件号 + resultMap.put(MesExtConstWords.CUST_PART_NO, workOrder.getPartNo()); + // 客户条码 + resultMap.put(MesExtConstWords.SN, workOrder.getSn()); + // 备注 + resultMap.put(MesExtConstWords.REMARK, customerCarModel == null ? "" : customerCarModel.getRemark()); + // 重打印 + resultMap.put(MesExtConstWords.REPRINT, "重打印"); + // 打印时间 + resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyyMMdd HH:mm:ss")); + // EDI接口时间 取工单plan_start_time + resultMap.put(MesExtConstWords.EDI_REC_TIME, workOrder.getPlanStartTime()); + + // 总个数 + Integer totalCount = partProdGroup.getTotalCount(); + // 为空时显示内容 + String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); + for (Integer index = 0; index < totalCount; index++) { + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0).getDisplayValue(); + + resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? "" : displayValue); + } + + printDataMapList.add(resultMap); + + model.setPrintContextList(packResultMapList(model, printDataMapList)); + + return model; + } + + private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + List> resultMapList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put(MesExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesExtConstWords.PRINTER, printModel.getPrinter()); + resultMapList.add(resultMap); + return resultMapList; + } + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 8020612..9b6a257 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -299,5 +299,28 @@ public class MesExtConstWords { // 打印时间 public static final String PRINT_TIME = "printTime"; + // 车型名称 + public static final String CAR_MODEL_NAME = "carModelName"; + // VIN_CODE + public static final String VIN_CODE = "vinCode"; + // VIN_CODE 后四位 + public static final String VIN_CODE_AFTER_FOUR = "vinCodeAfterFour"; + // 工单标识 + public static final String ORDER_FLAG = "orderFlag"; + // 重打印 + public static final String REPRINT = "reprint"; + // EDI接收时间 + public static final String EDI_REC_TIME = "ediRecTime"; + // 装配件参数 + public static final String ASSEMBLY_PARAM = "assemblyParam"; + // 客户订单号 + public static final String CUST_ORDER_NO = "custOrderNo"; + //客户零件号 + public static final String CUST_PART_NO = "custPartNo"; + // 车型大类 + public static final String CAR_MODEL_CODE = "carModelCode"; + //零件生产组代码 + public static final String PART_PROD_GROUP_CODE = "partProdGroupCode"; + } From 3ee557b0c048a2f62027d382bbe0f95c3487a118 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 24 Sep 2024 19:34:56 +0800 Subject: [PATCH 046/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=98=9F=E5=88=97=E5=92=8C=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 0a26508..6714421 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -462,7 +462,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { workOrderAssemblyRao.saveAll(assemblyList); List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); - Map cell2Process = assemblyList.stream().collect(Collectors.toMap(MesWorkOrderAssembly::getWorkCellCode, MesWorkOrderAssembly::getProcessSeq)); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); for (String cellCode : cellCodeList) { MesQueueOrder mesQueueOrder = new MesQueueOrder(); mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); @@ -470,7 +470,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesQueueOrder.setWorkCellCode(cellCode); mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); - mesQueueOrder.setProcessSeq(cell2Process.get(cellCode)); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); mesQueueOrder.setPartName(mesWorkOrder.getPartName()); mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); From df68ae5c0908f6d831752633524f76b1dc0c51ac Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 24 Sep 2024 20:09:29 +0800 Subject: [PATCH 047/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=98=9F=E5=88=97=E5=92=8C=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 6714421..093206f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -413,13 +413,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } - if (!workOrderPartList.isEmpty()) { - for (MesWorkOrderPart orderPart : workOrderPartList) { - orderPart.setOrganizeCode(organizeCode); - ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); - } - workOrderPartRao.saveAll(workOrderPartList); - } + // 生成装配件清单 List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); @@ -440,6 +434,14 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); mesWorkOrder.setWorkOrderNo(resultList.get(0)); + if (!workOrderPartList.isEmpty()) { + for (MesWorkOrderPart orderPart : workOrderPartList) { + orderPart.setOrganizeCode(organizeCode); + orderPart.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); + } + workOrderPartRao.saveAll(workOrderPartList); + } /** * 生产序号 * 工厂-产线-9位流水号,跳号10 From e0fa41d5490865bce96e7903243606df00499a14 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 25 Sep 2024 09:24:01 +0800 Subject: [PATCH 048/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 093206f..f3ccdea 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -415,8 +415,6 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { // 生成装配件清单 - List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); - ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); if (isModifyPOrder){ mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P_SORT.getValue()); }else { @@ -442,6 +440,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } workOrderPartRao.saveAll(workOrderPartList); } + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); /** * 生产序号 * 工厂-产线-9位流水号,跳号10 @@ -452,6 +451,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); String proSeqStr = proSeqResultList.get(0); mesWorkOrder.setProduceSeq(Long.parseLong(proSeqStr.replace(organizeCode, "").replace(mesWorkOrder.getWorkCenterCode(),""))); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); From cc73d3286df5fcba87da47b2624ecfd68816156a Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 25 Sep 2024 09:26:40 +0800 Subject: [PATCH 049/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=97=B6=E9=97=B4=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index f3ccdea..0368d14 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -198,6 +198,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setVinCode(sortInfo.getVinCode()); mesWorkOrder.setProductTime(sortInfo.getMatchTime()); + mesWorkOrder.setProduceTime(sortInfo.getMatchTime()); mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); mesWorkOrder.setPtrInfo(sortInfo.getRemark()); From 6d2a8087e92ebb5d5e10a3cc7a94ea5475380c37 Mon Sep 17 00:00:00 2001 From: pzj Date: Wed, 25 Sep 2024 09:46:25 +0800 Subject: [PATCH 050/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesCutSchemeEquipmentDetailServiceImpl.java | 3 +++ .../MesCutSchemeEquipmentProcessParamServiceImpl.java | 11 +++++++++++ .../base/MesCutSchemeEquipmentServiceImpl.java | 9 +++++++++ .../serviceimpl/base/MesCutSchemeService.java | 17 +++-------------- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java index bcc4e7f..0bca433 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java @@ -30,11 +30,14 @@ public class MesCutSchemeEquipmentDetailServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentProcessParamService { + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + @Override protected void setPackQueryBean(MesCutSchemeEquipmentProcessParam bean, DdlPackBean packBean) { Long pid = bean.getPid(); @@ -30,6 +36,11 @@ public class MesCutSchemeEquipmentProcessParamServiceImpl extends BaseMesService @Override protected void onInsertBean(MesCutSchemeEquipmentProcessParam item) { ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + if(!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwMesBusiException("设备代码不存在", item.getEquipmentCode()); + } } @Override diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java index a6f3ff0..8cd43e3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java @@ -4,8 +4,10 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentService; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -20,11 +22,18 @@ import org.springframework.util.StringUtils; @Service public class MesCutSchemeEquipmentServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentService { + @Autowired + private MesEquipmentRepository mesEquipmentRepository; @Override protected void onInsertBean(MesCutSchemeEquipment item) { ValidatorBean.checkNotNull(item.getCutCode(), "裁片代码不能为空"); ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + if(!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + throw new RuntimeException("设备代码不存在"); + } } @Override diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java index 10162b9..8506c1c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -47,20 +48,8 @@ public class MesCutSchemeService extends BaseMesService implements } protected void onInsertBean(MesCutScheme item) { - // 数据校验 - //ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型代码不能为空"); - //ValidatorBean.checkNotNull(item.getDefectTypeName(), "缺陷类型名称不能为空"); - // - //DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - //DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", packBean); - //boolean flg = baseRDao.isExitByHql(packBean); - //if (flg) { - // throw ImppExceptionBuilder.newInstance() - // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - // .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - // .setErrorDetail("【%s】缺陷类型代码已经存在,请检查数据", item.getDefectTypeCode()) - // .build(); - //} + ValidatorBean.checkNotNull(item.getCutCode(),"裁片方案代码不能为空"); + ValidatorBean.checkNotNull(item.getCutName(),"裁片方案名称不能为空"); } From 99c177d7ab4044f382b0dfa4f79a34cf5d34cff0 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 25 Sep 2024 10:01:04 +0800 Subject: [PATCH 051/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E7=94=9F=E4=BA=A7=E7=BB=84=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 0368d14..3848f75 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -452,6 +452,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); String proSeqStr = proSeqResultList.get(0); mesWorkOrder.setProduceSeq(Long.parseLong(proSeqStr.replace(organizeCode, "").replace(mesWorkOrder.getWorkCenterCode(),""))); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); @@ -556,6 +557,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setShowColor(sortCfg.getShowColor()); orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); workOrderAssemblyList.add(orderAssembly); } From e130754448473657259d93bcd072e0dae9cffc45 Mon Sep 17 00:00:00 2001 From: pzj Date: Wed, 25 Sep 2024 10:04:14 +0800 Subject: [PATCH 052/180] =?UTF-8?q?=E5=8C=85=E8=A3=85=E7=BB=84=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E8=A7=84=E5=88=99=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=BB=E3=80=81=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/base/IMesPartPackageRuleDetailService.java | 13 ++++++++ .../mes/api/base/IMesPartPackageRuleService.java | 13 ++++++++ .../base/MesPartPackageRuleController.java | 20 ++++++++++++ .../base/MesPartPackageRuleDetailController.java | 20 ++++++++++++ .../base/MesPartPackageRuleDetailServiceImpl.java | 38 ++++++++++++++++++++++ .../base/MesPartPackageRuleServiceImpl.java | 30 +++++++++++++++++ 6 files changed, 134 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java new file mode 100644 index 0000000..8eaa1f9 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRuleDetail; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:48 + * @Modify: + **/ +public interface IMesPartPackageRuleDetailService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java new file mode 100644 index 0000000..8e9b6b2 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:36 + * @Modify: + **/ +public interface IMesPartPackageRuleService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java new file mode 100644 index 0000000..6530b67 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:35 + * @Modify: + **/ +@Api("包装组零件规则") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartPackageRule") +public class MesPartPackageRuleController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java new file mode 100644 index 0000000..0d0c2b0 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRuleDetail; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:47 + * @Modify: + **/ +@Api("包装组零件规则明细") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartPackageRuleDetail") +public class MesPartPackageRuleDetailController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java new file mode 100644 index 0000000..ec1a8db --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPartPackageRuleDetailService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRuleDetail; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:51 + * @Modify: + **/ +@Service +@Slf4j +public class MesPartPackageRuleDetailServiceImpl extends BaseMesService implements IMesPartPackageRuleDetailService { + + + @Override + protected void setPackQueryBean(MesPartPackageRuleDetail bean, DdlPackBean packBean) { + DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean); + } + + @Override + protected void onInsertBean(MesPartPackageRuleDetail item) { + ValidatorBean.checkNotNull(item.getPartNo(),"零件号为空"); + } + + @Override + protected void onUpdateBean(MesPartPackageRuleDetail item) { + ValidatorBean.checkNotNull(item.getId(),"id不能为空"); + ValidatorBean.checkNotNull(item.getPartNo(),"零件号为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java new file mode 100644 index 0000000..b7b52b6 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPartPackageRuleService; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:37 + * @Modify: + **/ +@Service +@Slf4j +public class MesPartPackageRuleServiceImpl extends BaseMesService implements IMesPartPackageRuleService { + + @Override + protected void onInsertBean(MesPartPackageRule item) { + ValidatorBean.checkNotNull(item.getPackagePartNo(),"包覆零件号为空"); + } + + @Override + protected void onUpdateBean(MesPartPackageRule item) { + ValidatorBean.checkNotNull(item.getId(),"id不能为空"); + ValidatorBean.checkNotNull(item.getPackagePartNo(),"包覆零件号为空"); + } +} From a7c909deb99eba5e2baa1bebd0e53671dc813162 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 25 Sep 2024 10:43:29 +0800 Subject: [PATCH 053/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=8F=B7=E6=8B=BC=E6=8E=A5=E4=BD=8D=E5=B7=A5?= =?UTF-8?q?=E5=8E=82=E4=BB=A3=E7=A0=81+=E5=B7=A5=E5=8D=95=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=20+=E5=AE=A2=E6=88=B7=E5=B7=A5=E5=8E=82=E4=BB=A3?= =?UTF-8?q?=E7=A0=81+=E7=8F=AD=E6=AC=A1+=E6=B5=81=E6=B0=B4=E5=8F=B7,number?= =?UTF-8?q?Rule=E5=8F=AA=E9=9C=80=E8=A6=81=E7=94=9F=E6=88=90=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 3848f75..89d264d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -428,10 +428,10 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { */ GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); - String dynamicRule=organizeCode+","+mesWorkOrder.getOrderFlag()+","+sortInfo.getCustOrderCode()+","+mesWorkOrder.getShiftCode(); - genSerialNoModel.setDynamicRule(dynamicRule); List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - mesWorkOrder.setWorkOrderNo(resultList.get(0)); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); if (!workOrderPartList.isEmpty()) { for (MesWorkOrderPart orderPart : workOrderPartList) { From e295ce41a13b93fc1bfb1c5a64e5e16456c19ef5 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 11:22:26 +0800 Subject: [PATCH 054/180] =?UTF-8?q?=E6=8B=89=E5=8A=A8=E5=8D=95=E8=A7=84?= =?UTF-8?q?=E5=88=99=E4=BF=AE=E6=94=B9-=E6=8B=89=E5=8A=A8=E7=BB=84?= =?UTF-8?q?=E5=8F=B7+=E5=B9=B4=E6=9C=88=E6=97=A5+=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=90=8E5=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesPullingOrderInfoService.java | 53 ++++++++++++---------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 55fdd74..bf8c418 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.WmsConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -132,12 +133,13 @@ public class MesPullingOrderInfoService extends BaseMesService> workOrderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo)); DdlPackBean packBeanWorkOrderPart = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()), "workOrderNo", workPackBean); + DdlPreparedPack.getInPackList(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()), "workOrderNo", packBeanWorkOrderPart); List mesWorkOrderPartList = workOrderPartRepository.findByHqlWhere(packBeanWorkOrderPart); if (CollectionUtils.isEmpty(mesWorkOrderPartList)) { LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workCenterList); return; } + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件mesWorkOrderPartList-->{}", organizeCode, mesWorkOrderPartList); //5.取工单零件和拉动组交集,根据拉动主表对应的类型 生成相应的拉动单和拉动单明细 Map> workOrderNoListMap = mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo)); @@ -169,31 +171,32 @@ public class MesPullingOrderInfoService extends BaseMesService mesPartPulls = pullCodeMap.get(pullCode); MesPartPull mesPartPull = mesPartPulls.get(0);//拉动组明细拉动单号对应拉动组 List mesPartPullDetails = stringListEntryDetail.getValue(); + //拉动组号+年月日+工单后5位 + String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime(true) + + mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5); +// if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { +// orderNo = "KITTING"; +// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.JIS_PULL.getValue()) { +// orderNo = "JIS"; +// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.SPS_PULL.getValue()) { +// orderNo = "SPS"; +// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.BENZ_PULL.getValue()) { +// orderNo = "BENZ"; +// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.PICK_PULL.getValue()) { +// orderNo = "PICK"; +// } //调用平台生成拉动单号流水 -yyyyMMdd00001 - String orderNo = ""; - if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { - orderNo = "KITTING"; - } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.JIS_PULL.getValue()) { - orderNo = "JIS"; - } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.SPS_PULL.getValue()) { - orderNo = "SPS"; - } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.BENZ_PULL.getValue()) { - orderNo = "BENZ"; - } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.PICK_PULL.getValue()) { - orderNo = "PICK"; - } - - BaseResultBean orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO); - if (orderResutlBean != null && orderResutlBean.isSuccess()) { - orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString(); - } else { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) - .setErrorDetail("生成单号失败") - .setErrorSolution("【MES_PULL_ORDER_NO】请重新操作或查看服务!") - .build(); - } +// BaseResultBean orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO); +// if (orderResutlBean != null && orderResutlBean.isSuccess()) { +// orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString(); +// } else { +// throw ImppExceptionBuilder.newInstance() +// .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) +// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) +// .setErrorDetail("生成单号失败") +// .setErrorSolution("【MES_PULL_ORDER_NO】请重新操作或查看服务!") +// .build(); +// } MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo(); pullingOrder.setOrganizeCode(organizeCode); pullingOrder.setPullingOrderNo(orderNo); From fb9c1904ee7a157c67e9350053d0880a4c4e350d Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 12:00:55 +0800 Subject: [PATCH 055/180] =?UTF-8?q?=E6=8B=89=E5=8A=A8=E5=8D=95=E8=A7=84?= =?UTF-8?q?=E5=88=99=E4=BF=AE=E6=94=B9-=E6=8B=89=E5=8A=A8=E7=BB=84?= =?UTF-8?q?=E5=8F=B7+=E5=B9=B4=E6=9C=88=E6=97=A5+=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=90=8E5=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index bf8c418..51ca1d1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -172,7 +172,7 @@ public class MesPullingOrderInfoService extends BaseMesService mesPartPullDetails = stringListEntryDetail.getValue(); //拉动组号+年月日+工单后5位 - String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime(true) + + String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyyy-MM-dd") + mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5); // if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { // orderNo = "KITTING"; From 5190826722190a944058da3c70b472f6b5a1fb3a Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 12:02:55 +0800 Subject: [PATCH 056/180] =?UTF-8?q?=E6=8B=89=E5=8A=A8=E5=8D=95=E8=A7=84?= =?UTF-8?q?=E5=88=99=E4=BF=AE=E6=94=B9-=E6=8B=89=E5=8A=A8=E7=BB=84?= =?UTF-8?q?=E5=8F=B7+=E5=B9=B4=E6=9C=88=E6=97=A5+=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=90=8E5=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 51ca1d1..3663716 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -172,7 +172,7 @@ public class MesPullingOrderInfoService extends BaseMesService mesPartPullDetails = stringListEntryDetail.getValue(); //拉动组号+年月日+工单后5位 - String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyyy-MM-dd") + + String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyMMdd") + mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5); // if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { // orderNo = "KITTING"; From 6768e2802d290243ada3e1c1eaf6ccd3060ebbe5 Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 25 Sep 2024 15:09:53 +0800 Subject: [PATCH 057/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderService.java | 4 +++ .../controller/base/MesWorkOrderController.java | 8 +++-- .../serviceimpl/base/MesWorkOrderService.java | 40 ++++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 03a6c0b..9fa5634 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -49,6 +49,10 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("装配目视单补打") List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName); + @ApiOperation("装配目视单预览") + List> doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, + String carModelCode, String organizeCode, String userName); + List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 54cecc1..36abcb8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -200,13 +200,14 @@ public class MesWorkOrderController extends BaseMesController { @PostMapping(value = "/work-order-reprint") @ApiOperation(value = "装配目视单补打") - public ResultBean doSaveWorkOrderPrintQueue(@RequestBody Long[] ids) { + public ResultBean doReprintWorkOrder(Long[] ids) { try { ValidatorBean.checkNotNull(ids,"工单不能为空"); - mesWorkOrderService.doReprintWorkOrder(ids, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); - return ResultBean.success("装配目视单补打成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + return ResultBean.success("装配目视单补打成功") + .setResultObject(mesWorkOrderService.doReprintWorkOrder(ids, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName())) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); } catch (Exception e) { @@ -214,6 +215,7 @@ public class MesWorkOrderController extends BaseMesController { } } + @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") public ResultBean doReopen(Long[] ids) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 0bd64fe..e5e23ef 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -142,6 +142,9 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesPartProdGroupService partProdGroupService; + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + @Override public MesWorkOrder insert(MesWorkOrder bean) { //校验产线与工位的关系 @@ -1180,8 +1183,16 @@ public class MesWorkOrderService extends BaseMesService implements @Override public List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName) { + // 根据id 获取工单数据 List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); + List> resultMapList = packPrintResultMap(organizeCode, mesWorkOrderList, userName); + + return resultMapList; + + } + + private List> packPrintResultMap(String organizeCode, List mesWorkOrderList, String userName) { // 根据工单号对工单分组 Map workOrderMapByWorkOrderNo = mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); @@ -1209,6 +1220,9 @@ public class MesWorkOrderService extends BaseMesService implements // 返回结果 List> resultMapList = new ArrayList<>(); + // 条码打印 + List printedSnLogList = new ArrayList<>(); + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { if (mesWorkOrder == null) { @@ -1262,12 +1276,38 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】策略类【%s】执行异常", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()); } + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setOrganizeCode(mesWorkOrder.getOrganizeCode()); + printedSnLog.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + printedSnLog.setCustPartNo(mesWorkOrder.getCustPartNo()); + ConvertBean.serviceModelInitialize(printedSnLog, userName); + printedSnLogList.add(printedSnLog); + resultMapList.addAll(snPrintModel.getPrintContextList()); } + if (!CollectionUtils.isEmpty(printedSnLogList)) printedSnLogRepository.saveAll(printedSnLogList); + return resultMapList; + } + + @Override + public List> doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, + String carModelCode, String organizeCode, String userName) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, packBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(partProdGroupCode, MesExtConstWords.PART_PROD_GROUP_CODE, packBean); + DdlPreparedPack.getStringEqualPack(carModelCode, MesExtConstWords.CAR_MODEL_CODE, packBean); + packBean.setOrderByStr(" order by createDatetime desc "); + MesWorkOrder workOrder = workOrderRepository.getByProperty(packBean); + + List workOrderList = new ArrayList<>(); + workOrderList.add(workOrder); + return packPrintResultMap(organizeCode, workOrderList, userName); } private Map getMesCustomerCarModelMap(String organizeCode, List workOrderList) { From ecf2f7d4e44347088e4825cc946134378e110c61 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 25 Sep 2024 15:10:35 +0800 Subject: [PATCH 058/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95--?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 89d264d..dde46b3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService; import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -87,6 +88,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesQueueOrderRepository queueOrderRao; + @Autowired + private MesWorkOrderService mesWorkOrderService; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { @@ -456,7 +460,10 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); - + /** + * 插入工单打印队列数据 + */ + mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); if (!assemblyList.isEmpty()) { for (MesWorkOrderAssembly orderAssembly : assemblyList) { orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); From 73d79d988cc221a5c7b2a779d2a210b0ac87b91e Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 25 Sep 2024 16:01:26 +0800 Subject: [PATCH 059/180] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E6=96=B0=E5=A2=9E=E8=A3=85=E9=85=8D=E7=9B=AE?= =?UTF-8?q?=E8=A7=86=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 19 ++++++++++++++++++- .../strategy/AssemblyVisualListPrintStrategy.java | 4 ++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index e5e23ef..8fe8408 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -222,8 +222,16 @@ public class MesWorkOrderService extends BaseMesService implements } } + boolean isSavePrintQueue = false; + //更新状态 if (result.getWorkOrderStatus().intValue() != bean.getWorkOrderStatus().intValue()) { + + // 发布时创建工单打印队列 + if (!Objects.equals(bean.getWorkOrderStatus(), result.getWorkOrderStatus()) && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + isSavePrintQueue = true; + } + result.setWorkOrderStatus(bean.getWorkOrderStatus()); if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue() && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { @@ -235,7 +243,10 @@ public class MesWorkOrderService extends BaseMesService implements mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsService.saveMesWorkOrderToWms(result, bomList)); } } + updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); + if (isSavePrintQueue) insertPrintQueue(result, null); + return result; } @@ -456,6 +467,8 @@ public class MesWorkOrderService extends BaseMesService implements if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) return null; + if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) return null; + if (mesPartProdGroup == null) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(workOrder.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); @@ -1175,8 +1188,12 @@ public class MesWorkOrderService extends BaseMesService implements return; } - insertPrintQueue(workOrder, null); + if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + log.info("doSaveWorkOrderPrintQueue --- 工单:{} 不为{},无需新增打印队列", workOrder.getWorkOrderNo(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getDescription()); + return; + } + insertPrintQueue(workOrder, null); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index 3929865..e5195d6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -37,8 +37,8 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 客户车型配置信息 MesCustomerCarModel customerCarModel = modelMap.containsKey("mesCustomerCarModel") ? (MesCustomerCarModel) modelMap.get("mesCustomerCarModel") : null; // 工单装配件信息 - List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : null; - workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> o.getDisplaySeq() != null && o.getDisplaySeq() != 0).collect(Collectors.toList()); + List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : new ArrayList<>(); + workOrderAssemblyList = CollectionUtils.isEmpty(workOrderAssemblyList) ? new ArrayList<>() : workOrderAssemblyList.stream().filter(o -> o.getDisplaySeq() != null && o.getDisplaySeq() != 0).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(workOrderAssemblyList)) workOrderAssemblyList.sort(Comparator.comparing(MesWorkOrderAssembly::getDisplaySeq)); // 返回的结果集合 List> printDataMapList = new ArrayList<>(); From 926dba8f22d4be2539079455a2667e8232ade0be Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 17:49:14 +0800 Subject: [PATCH 060/180] =?UTF-8?q?SPS=E6=8B=89=E5=8A=A8=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/config/WebServiceConfig.java | 7 +++++++ .../base/MesPullingOrderInfoService.java | 21 ++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java index 2600083..ebff3a7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java @@ -21,6 +21,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.config; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServer; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerIns; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerSPS; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.apache.cxf.transport.servlet.CXFServlet; @@ -63,4 +64,10 @@ public class WebServiceConfig { endpoint.publish("/mes-service-instrument"); return endpoint; } + @Bean + public Endpoint endpointSpsEqu() { + EndpointImpl endpoint = new EndpointImpl(bus, new WebServiceServerSPS()); + endpoint.publish("/mes-service-spsEqu"); + return endpoint; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 3663716..259f6f3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -214,6 +214,7 @@ public class MesPullingOrderInfoService extends BaseMesService byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); - - resultMap.put("", mesPullingOrder); - resultMap.put("success", true); - - String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; - resultMap.put("message", message); //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); ConvertBean.serviceModelUpdate(mesPullingOrder, "WS.SPS"); baseRDao.update(mesPullingOrder); + String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + resultMap.put("success", true); + resultMap.put("message", message); + return resultMap; } From 812a821843eb3689fde27af491bfc11159d8d3b8 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 26 Sep 2024 09:24:09 +0800 Subject: [PATCH 061/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index e5195d6..9349981 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -78,9 +78,9 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 为空时显示内容 String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); for (Integer index = 0; index < totalCount; index++) { - String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0).getDisplayValue(); + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(index).getDisplayValue(); - resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? "" : displayValue); + resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? StringUtils.isEmpty(isNullViewContent) ? "" : null : displayValue); } printDataMapList.add(resultMap); From b4e75fc493b5b1a3961f6c6e382cc7ddf5425a0a Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 26 Sep 2024 10:07:09 +0800 Subject: [PATCH 062/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 8fe8408..69106e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -245,7 +245,7 @@ public class MesWorkOrderService extends BaseMesService implements } updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); - if (isSavePrintQueue) insertPrintQueue(result, null); + if (isSavePrintQueue) insertPrintQueue(result); return result; } @@ -456,32 +456,22 @@ public class MesWorkOrderService extends BaseMesService implements } // 创建工单打印队列 - insertPrintQueue(item, mesPartProdGroup); + insertPrintQueue(item); } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } } - private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder, MesPartProdGroup mesPartProdGroup) { + private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder) { if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) return null; if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) return null; - if (mesPartProdGroup == null) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(workOrder.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); - mesPartProdGroup = mesPartProdGroupRDao.getByProperty(ddlPackBean); - if(Objects.isNull(mesPartProdGroup)){ - MesException.throwMesBusiException("生产线组【%s】信息不存在",workOrder.getPartProdGroupCode()); - } - } - MesPrintQueue printQueue = new MesPrintQueue(); BeanUtils.copyProperties(workOrder, printQueue, MesExtConstWords.ID); printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()); - printQueue.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); return printQueueRepository.save(printQueue); } @@ -620,7 +610,7 @@ public class MesWorkOrderService extends BaseMesService implements mesWorkOrderLogList.add(workOrderLog); // 如果工单为发布状态则新增打印队列 - insertPrintQueue(copyMesWorkOrder, null); + insertPrintQueue(copyMesWorkOrder); continue; } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { @@ -1193,7 +1183,7 @@ public class MesWorkOrderService extends BaseMesService implements return; } - insertPrintQueue(workOrder, null); + insertPrintQueue(workOrder); } From a5ad0e628f85e5da2b16adc27f5759b7fdf7500b Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 26 Sep 2024 14:20:05 +0800 Subject: [PATCH 063/180] =?UTF-8?q?43251=20=E6=AD=A6=E6=B1=89PCN-SPS?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8WebService=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesPullingOrderInfoService.java | 4 ++-- .../serviceimpl/webservice/WebServiceServerSPS.java | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 259f6f3..3f6a064 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -273,10 +273,10 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Fri, 27 Sep 2024 13:30:21 +0800 Subject: [PATCH 064/180] =?UTF-8?q?1=E3=80=81MesProductionPartContext=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0cutQty=EF=BC=88=E8=A3=81=E7=89=87=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E9=87=8F=EF=BC=89=202=E3=80=81=E8=A3=81?= =?UTF-8?q?=E7=89=87=E5=B7=A5=E5=8D=95=E7=BB=91=E5=AE=9A=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderCutService.java | 9 ++++ .../controller/base/MesWorkOrderCutController.java | 19 ++++++- .../serviceimpl/base/MesWorkOrderCutService.java | 59 +++++++++++++++------- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index 33d62e5..3650596 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.api.base; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -17,6 +20,12 @@ public interface IMesWorkOrderCutService extends IBaseMesService workOrderIds, String cutCode, String remark, String organizeCode, String userName, Integer editionNumber); + @ApiOperation("分页查询裁片工单明细") + ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + + //@ApiOperation("分页查询裁片工单明细") + //ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + @ApiOperation("发布裁片工单") void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index 760bfc9..344cd69 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -2,17 +2,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; -import cn.hutool.core.collection.ListUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -48,6 +50,21 @@ public class MesWorkOrderCutController extends BaseMesController impl editionNumber = editionNumber == null ? 1 : editionNumber; + // 记录工单剩余未完成数量 Map workOrderUnCompleteMap = new HashMap<>(); + // 记录当前裁片工单 每个工单的计划数量 + Map workOrderQtyMap = new HashMap<>(); List workOrderCutDetailtList = new ArrayList<>(); List workOrderCuttList = new ArrayList<>(); List 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 impl for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List 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 impl } - private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, MesCutScheme cutScheme, List cutSchemeFgList, Map workOrderUnCompleteMap) { + @Override + public ListPager 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 list = workOrderCutDetailRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(list, pager); + } + + private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, + MesCutScheme cutScheme, List cutSchemeFgList, + Map workOrderUnCompleteMap, Map workOrderQtyMap) { for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); @@ -179,16 +197,19 @@ public class MesWorkOrderCutService extends BaseMesService impl // 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量 Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber); - + Double srcTotalQty = totalQty.doubleValue(); Double unCompleteQty = 0.0; List 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 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()); } } From 3e85d967aeb947408a18d0133f9d6fcf0acc9e5f Mon Sep 17 00:00:00 2001 From: yxw Date: Fri, 27 Sep 2024 13:47:08 +0800 Subject: [PATCH 065/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E8=A1=A5=E6=89=93=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 440b26d..b6688a3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1241,6 +1241,10 @@ public class MesWorkOrderService extends BaseMesService implements MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()); + if (mesPartProdGroup == null) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】不存在", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + String printTemplate = mesPartProdGroup.getPrintTemplate(); if (StringUtils.isEmpty(printTemplate)) { From 76334222d004a2fcf9db56cdff6e5904a0e93a95 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Fri, 27 Sep 2024 16:11:36 +0800 Subject: [PATCH 066/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89=E5=B7=A5=E5=8D=95--?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8C=85=E5=B7=A5=E7=9A=84=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 33 +++++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index dde46b3..9d086dc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -421,7 +421,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { // 生成装配件清单 if (isModifyPOrder){ - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P_SORT.getValue()); + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); }else { mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } @@ -512,7 +512,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } - private List getAssemblyList(String workCenterCode, String VehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 List workOrderAssemblyList = new ArrayList<>(); @@ -541,7 +541,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } } //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 - if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(VehicleNo)){ + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ continue; } orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); @@ -568,7 +568,32 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { workOrderAssemblyList.add(orderAssembly); } - + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); From d4971b0cd7a73c2a3e2d8a6ba2789540ddb70019 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 28 Sep 2024 09:58:19 +0800 Subject: [PATCH 067/180] =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=E7=BB=84=E6=98=8E=E7=BB=86=E6=9B=B4=E6=96=B0=E6=8E=92=E9=99=A4?= =?UTF-8?q?=E8=87=AA=E5=B7=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java index db94ac6..19f10fc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java @@ -51,6 +51,7 @@ public class MesPartPullDetailService extends BaseMesService DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",partPackBean); boolean flg = baseRDao.isExitByHql(partPackBean); if (flg) { throw ImppExceptionBuilder.newInstance() From 2f36e42def67466dfd2f7f56539391a60a1dc754 Mon Sep 17 00:00:00 2001 From: gsz Date: Sun, 29 Sep 2024 09:46:36 +0800 Subject: [PATCH 068/180] =?UTF-8?q?43285=20JIS=E6=8B=89=E5=8A=A8=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 3f6a064..90edeb7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -245,6 +245,7 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Sun, 29 Sep 2024 15:02:53 +0800 Subject: [PATCH 069/180] =?UTF-8?q?PC=E7=AB=AF=E8=A3=85=E9=85=8D=E7=9B=AE?= =?UTF-8?q?=E8=A7=86=E5=8D=95=E6=89=93=E5=8D=B0=E7=AD=96=E7=95=A5=E7=B1=BB?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=BC=95=E7=94=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index 9349981..5ddaa24 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -63,7 +63,7 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 客户零件号 resultMap.put(MesExtConstWords.CUST_PART_NO, workOrder.getPartNo()); // 客户条码 - resultMap.put(MesExtConstWords.SN, workOrder.getSn()); + resultMap.put(MesExtConstWords.SN, workOrder.getCustSn()); // 备注 resultMap.put(MesExtConstWords.REMARK, customerCarModel == null ? "" : customerCarModel.getRemark()); // 重打印 From a5eef7febd7f5123dfb6551327bc49c6573b7254 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 29 Sep 2024 15:56:41 +0800 Subject: [PATCH 070/180] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 30 +++++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 9d086dc..e028608 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -186,7 +186,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { String organizeCode = partProdGroup.getOrganizeCode(); MesWorkOrder mesWorkOrder = new MesWorkOrder(); - + mesWorkOrder.setCustCode(partProdGroup.getCustCode()); //工单版本号 mesWorkOrder.setProductVersion("1"); //工单类型 @@ -282,8 +282,8 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); - - + mesWorkOrder.setFid(UUID.randomUUID().toString()); + mesWorkOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); /** * RS 为记录分隔符ASCII:30 * GS 为分组符ASCII:29 @@ -332,7 +332,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { custGenSerialNoModel.setPartNo(prefix+partNo4); String year = custCalendar.get(Calendar.YEAR)+""; custGenSerialNoModel.setYear(year.substring(2)); - custGenSerialNoModel.setDay(custCalendar.get(Calendar.DAY_OF_YEAR)+""); + custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% //截取替换为ascii码 @@ -352,7 +352,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { String[] split2 = gsStr.toString().split("%EOT%"); String sn = split2[0]+(char)4; //保存条码 - mesWorkOrder.setSn(sn); + mesWorkOrder.setCustSn(sn); @@ -487,11 +487,13 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setCustSn(mesWorkOrder.getSn()); + mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); mesQueueOrder.setProduceSeq(mesWorkOrder.getProduceSeq()); mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); queueOrderRao.insert(mesQueueOrder); } @@ -501,9 +503,23 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { //生成条码表 MesProduceSn mesProduceSn = new MesProduceSn(); mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setCustSn(mesWorkOrder.getSn()); + mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); mesProduceSn.setOrganizeCode(organizeCode); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); + mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); + mesProduceSn.setPartName(mesWorkOrder.getPartName()); + mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); mesProduceSnRao.insert(mesProduceSn); From 4c6ee6446e5e897dd3724c6c26c62f9413d30f1d Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 29 Sep 2024 17:03:05 +0800 Subject: [PATCH 071/180] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index e028608..f0058d3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -326,7 +326,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { Calendar custCalendar = Calendar.getInstance(); custCalendar.setTime(new Date()); GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); - String partNo = mesWorkOrder.getPartNo(); + String partNo = mesWorkOrder.getCustPartNo(); String prefix = partNo.substring(0, partNo.length() - 4); String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); custGenSerialNoModel.setPartNo(prefix+partNo4); @@ -467,7 +467,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { if (!assemblyList.isEmpty()) { for (MesWorkOrderAssembly orderAssembly : assemblyList) { orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); orderAssembly.setOrganizeCode(organizeCode); + orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); } workOrderAssemblyRao.saveAll(assemblyList); @@ -572,6 +574,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setOrderPartId(orderPart.getId().toString()); orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); orderAssembly.setImageFileId(sortCfg.getImageFileId()); orderAssembly.setCraftCode(sortCfg.getCraftCode()); @@ -600,6 +607,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); orderAssembly.setPid(ruleSortCfg.getId()); @@ -624,6 +636,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); orderAssembly.setPid(ruleSortCfg.getId()); From 2aef1f2e7ba5ba9bac84f92439ca8076a81403d2 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 29 Sep 2024 18:03:03 +0800 Subject: [PATCH 072/180] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index f0058d3..7636852 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -91,6 +91,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesWorkOrderService mesWorkOrderService; + @Autowired + private MesWorkCenterRepository workCenterRao; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { @@ -195,6 +198,13 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); + //根据产线查找区域代码 + DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(),"workCenterCode", centerPackBean); + List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); + if (!workCenterList.isEmpty()){ + mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); + } mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); //来源 @@ -470,6 +480,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); orderAssembly.setOrganizeCode(organizeCode); orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); } workOrderAssemblyRao.saveAll(assemblyList); @@ -496,6 +507,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); queueOrderRao.insert(mesQueueOrder); } @@ -522,6 +534,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); mesProduceSnRao.insert(mesProduceSn); From 4437d06c96a3d6fa487bd7fd0831c2259b7948a0 Mon Sep 17 00:00:00 2001 From: pzj Date: Sun, 29 Sep 2024 20:15:17 +0800 Subject: [PATCH 073/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E3=80=81=E5=8F=91=E8=BF=90=E6=98=8E=E7=BB=86=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E3=80=81=E5=8F=AF=E7=96=91=E5=93=81=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E3=80=81=E6=A3=80=E9=AA=8C=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AD=90=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/report/IAssemblyPartReportService.java | 16 ++ .../report/IProductInspectionSubReportService.java | 16 ++ .../busi/report/IShipmentDetailReportService.java | 16 ++ .../ISuspiciousItemBarcodeReportService.java | 16 ++ .../report/AssemblyPartReportController.java | 46 +++++ .../ProductInspectionSubReportController.java | 48 ++++++ .../report/ShipmentDetailReportController.java | 48 ++++++ .../SuspiciousItemBarcodeReportController.java | 48 ++++++ .../dao/report/IAssemblyPartReportDao.java | 16 ++ .../dao/report/IProductInspectionSubReportDao.java | 16 ++ .../dao/report/IShipmentDetailReportDao.java | 16 ++ .../report/ISuspiciousItemBarcodeReportDao.java | 16 ++ .../daoimpl/report/AssemblyPartReportDaoImpl.java | 192 +++++++++++++++++++++ .../report/ProductInspectionSubReportDaoImpl.java | 100 +++++++++++ .../report/ShipmentDetailReportDaoImpl.java | 175 +++++++++++++++++++ .../report/SuspiciousItemBarcodeReportDaoImpl.java | 181 +++++++++++++++++++ .../report/AssemblyPartReportServiceImpl.java | 31 ++++ .../ProductInspectionSubReportServiceImpl.java | 30 ++++ .../report/ShipmentDetailReportServiceImpl.java | 29 ++++ .../SuspiciousItemBarcodeReportServiceImpl.java | 29 ++++ 20 files changed, 1085 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java new file mode 100644 index 0000000..3cb2e9f --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:20 + * @Modify: + **/ +public interface IAssemblyPartReportService { + ListPager queryReport(AssemblyPartReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java new file mode 100644 index 0000000..2a97fb6 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:50 + * @Modify: + **/ +public interface IProductInspectionSubReportService { + ListPager queryReport(MesQmsSuspicious model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java new file mode 100644 index 0000000..d65d089 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; + +/** + * @Description : 发运明细报表 接口 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:49 + * @Modify: + **/ +public interface IShipmentDetailReportService { + ListPager queryReport(ShippingReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java new file mode 100644 index 0000000..cdea57a --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:27 + * @Modify: + **/ +public interface ISuspiciousItemBarcodeReportService { + ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java new file mode 100644 index 0000000..da017d9 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java @@ -0,0 +1,46 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IAssemblyPartReportService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @Description : 装配件报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:17 + * @Modify: + **/ +@Api("装配件报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/assembly-part-report") +public class AssemblyPartReportController { + + @Autowired + private IAssemblyPartReportService assemblyPartReportService; + + @ApiOperation(value = "装配件报表") + @PostMapping("/queryReport") + public ResultBean queryReport(AssemblyPartReportModel model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = assemblyPartReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java new file mode 100644 index 0000000..309d10b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IProductInspectionSubReportService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:48 + * @Modify: + **/ +@Api("检验产品数据子报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/product-inspection-sub-report") +public class ProductInspectionSubReportController { + + @Autowired + private IProductInspectionSubReportService productInspectionSubReportService; + + @ApiOperation(value = "检验产品数据子报表") + @PostMapping("/queryReport") + public ResultBean queryReport(MesQmsSuspicious model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = productInspectionSubReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java new file mode 100644 index 0000000..d00f851 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IShipmentDetailReportService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 发运明细报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:47 + * @Modify: + **/ +@Api("发运明细报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/shipment-detail-Report") +public class ShipmentDetailReportController { + + @Autowired + private IShipmentDetailReportService shipmentDetailReportService; + + @ApiOperation(value = "发运明细报表") + @PostMapping("/queryReport") + public ResultBean queryReport(ShippingReportModel model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = shipmentDetailReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java new file mode 100644 index 0000000..085e40d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.ISuspiciousItemBarcodeReportService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description :可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 18:53 + * @Modify: + **/ +@Api("可疑品条码信息报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/suspicious-item-barcode-report") +public class SuspiciousItemBarcodeReportController { + + @Autowired + private ISuspiciousItemBarcodeReportService suspiciousItemBarcodeReportService; + + @ApiOperation(value = "查询可疑品条码信息报表") + @PostMapping("/queryReport") + public ResultBean queryReport(SuspiciousItemBarcodeReportModel model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = suspiciousItemBarcodeReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java new file mode 100644 index 0000000..eed77fa --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; + +/** + * @Description : 装配件查询 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:21 + * @Modify: + **/ +public interface IAssemblyPartReportDao { + ListPager queryReport(AssemblyPartReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java new file mode 100644 index 0000000..7a98f3b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:51 + * @Modify: + **/ +public interface IProductInspectionSubReportDao { + ListPager queryReport(MesQmsSuspicious model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java new file mode 100644 index 0000000..6bffa26 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; + +/** + * @Description : 发运明细报表 Dao + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:53 + * @Modify: + **/ +public interface IShipmentDetailReportDao { + ListPager queryReport(ShippingReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java new file mode 100644 index 0000000..415c67c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:45 + * @Modify: + **/ +public interface ISuspiciousItemBarcodeReportDao { + ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java new file mode 100644 index 0000000..0b50f35 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java @@ -0,0 +1,192 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IAssemblyPartReportDao; +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.mes.model.report.AssemblyPartReportModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 装配件查询 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:21 + * @Modify: + **/ +@Service +public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(AssemblyPartReportModel model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + dataQueryHql.append("SELECT new ").append(AssemblyPartReportModel.class.getName()).append("("); + dataQueryHql.append("mes_production_assembly.serialNumber AS serialNumber,"); + dataQueryHql.append("mes_production_assembly.workCenterCode AS workCenterCode,"); + dataQueryHql.append("mes_production_assembly.workCellCode AS workCellCode,"); + dataQueryHql.append("mes_production_assembly.partNo AS partNo,"); + dataQueryHql.append("mes_production_assembly.partName AS partName,"); + dataQueryHql.append("mes_production_assembly.matchType AS matchType,"); + dataQueryHql.append("mes_production_assembly.matchRule AS matchRule,"); + dataQueryHql.append("mes_production_assembly.assemblyPartNo AS assemblyPartNo,"); + dataQueryHql.append("mes_production_assembly.assemblyPartName AS assemblyPartName,"); + dataQueryHql.append("mes_production_assembly.assemblySn AS assemblySn,"); + dataQueryHql.append("mes_production_assembly.isSkip AS isSkip,"); + dataQueryHql.append("mes_production_assembly.createDatetime AS createDatetime,"); + dataQueryHql.append("mes_production_assembly.createUser AS createUser,"); + dataQueryHql.append("mes_production_record.workOrderNo AS workOrderNo,"); + dataQueryHql.append("mes_production_record.lotNo AS lotNo,"); + dataQueryHql.append("mes_equipment.equipmentName AS equipmentName)"); + + StringBuilder countQueryHql= new StringBuilder(); + countQueryHql.append("select count(1)"); + + StringBuilder commonQueryHql = new StringBuilder(); + commonQueryHql.append("FROM MesProductionAssembly mes_production_assembly "); + commonQueryHql.append("JOIN MesProductionRecord mes_production_record ON mes_production_assembly.productionRecordId = mes_production_record.id "); + commonQueryHql.append("JOIN MesEquipment mes_equipment ON mes_production_record.equipmentCode = mes_equipment.equipmentCode "); + commonQueryHql.append("WHERE 1=1 "); + commonQueryHql.append("AND mes_production_assembly.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_production_record.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_equipment.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_production_assembly.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_production_record.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_equipment.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_production_assembly.isValid = :isValid "); + commonQueryHql.append("AND mes_production_record.isValid = :isValid "); + commonQueryHql.append("AND mes_equipment.isValid = :isValid "); + // like 条码 + if(!StringUtils.isEmpty(model.getSerialNumber())){ + commonQueryHql.append("AND mes_production_assembly.serialNumber like :serialNumber "); + } + // = 装配件条码确认规则 + if (model.getMatchType()!=null){ + commonQueryHql.append("AND mes_production_assembly.matchType = :matchType "); + } + // like 零件号 + if(!StringUtils.isEmpty(model.getPartNo())){ + commonQueryHql.append("AND mes_production_assembly.partNo like :partNo "); + } + //like 主零件号 + if(!StringUtils.isEmpty(model.getPartName())){ + commonQueryHql.append("AND mes_production_assembly.partName like :partName "); + } + //like 装配零件号 + if(!StringUtils.isEmpty(model.getAssemblyPartNo())){ + commonQueryHql.append("AND mes_production_assembly.assemblyPartNo like :assemblyPartNo "); + } + //like 装配件零件名称 + if(!StringUtils.isEmpty(model.getAssemblyPartName())){ + commonQueryHql.append("AND mes_production_assembly.assemblyPartName like :assemblyPartName "); + } + //like 装配条码 + if(!StringUtils.isEmpty(model.getAssemblySn())){ + commonQueryHql.append("AND mes_production_assembly.assemblySn like :assemblySn "); + } + // = 是否跳过 + if(model.getIsSkip() != null){ + commonQueryHql.append("AND mes_production_assembly.isSkip = :isSkip "); + } + //like 创建人 + if(!StringUtils.isEmpty(model.getCreateUser())){ + commonQueryHql.append("AND mes_production_assembly.createUser like :createUser "); + } + //范围时间 创建时间 + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + commonQueryHql.append("AND mes_production_assembly.createDatetime between :createDateTimeStart and :createDateTimeEnd "); + } + //like 产线 + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + commonQueryHql.append("AND mes_production_assembly.workCenterCode like :workCenterCode "); + } + //like 工位编号 + if(!StringUtils.isEmpty(model.getWorkCellCode())){ + commonQueryHql.append("AND mes_production_assembly.workCellCode like :workCellCode "); + } + //= 扫描类型 +// if (!StringUtils.isEmpty(model.getScanType())){ +// commonQueryHql.append("AND mes_production_assembly.scanType = :scanType "); +// } + //like 加工单号 + if(!StringUtils.isEmpty(model.getWorkOrderNo())){ + commonQueryHql.append("AND mes_production_record.workOrderNo like :workOrderNo "); + } + //like 设备名称 + if(!StringUtils.isEmpty(model.getEquipmentName())){ + commonQueryHql.append("AND mes_equipment.equipmentName like :equipmentName "); + } + commonQueryHql.append("ORDER BY mes_production_assembly.createDatetime DESC "); + + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), AssemblyPartReportModel.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + //本次查询满足条件的总数 + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + //查询本页数据 + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + private void setQueryParams(Query dataQuery, AssemblyPartReportModel model) { + dataQuery.setParameter("organizeCode", model.getOrganizeCode()); + dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + if(!StringUtils.isEmpty(model.getSerialNumber())){ + dataQuery.setParameter("serialNumber", model.getSerialNumber() + "%"); + } + if (model.getMatchType()!=null){ + dataQuery.setParameter("matchType", model.getMatchType()); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + dataQuery.setParameter("partNo", model.getPartNo() + "%"); + } + if(!StringUtils.isEmpty(model.getPartName())){ + dataQuery.setParameter("partName", model.getPartName() + "%"); + } + if(!StringUtils.isEmpty(model.getAssemblyPartNo())){ + dataQuery.setParameter("assemblyPartNo", model.getAssemblyPartNo() + "%"); + } + if(!StringUtils.isEmpty(model.getAssemblyPartName())){ + dataQuery.setParameter("assemblyPartName", model.getAssemblyPartName() + "%"); + } + if(!StringUtils.isEmpty(model.getAssemblySn())){ + dataQuery.setParameter("assemblySn", model.getAssemblySn() + "%"); + } + if(model.getIsSkip() != null){ + dataQuery.setParameter("isSkip", model.getIsSkip()); + } + if(!StringUtils.isEmpty(model.getCreateUser())){ + dataQuery.setParameter("createUser", model.getCreateUser() + "%"); + } + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + dataQuery.setParameter("createDateTimeStart", model.getCreateDateTimeStart()); + dataQuery.setParameter("createDateTimeEnd", model.getCreateDateTimeEnd()); + } + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + dataQuery.setParameter("workCenterCode", model.getWorkCenterCode() + "%"); + } + if(!StringUtils.isEmpty(model.getWorkCellCode())){ + dataQuery.setParameter("workCellCode", model.getWorkCellCode() + "%"); + } + if(!StringUtils.isEmpty(model.getWorkOrderNo())){ + dataQuery.setParameter("workOrderNo", model.getWorkOrderNo() + "%"); + } + if(!StringUtils.isEmpty(model.getEquipmentName())){ + dataQuery.setParameter("equipmentName", model.getEquipmentName() + "%"); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java new file mode 100644 index 0000000..32e7530 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java @@ -0,0 +1,100 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IProductInspectionSubReportDao; +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.mes.bean.MesQmsSuspicious; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:51 + * @Modify: + **/ +@Service +public class ProductInspectionSubReportDaoImpl implements IProductInspectionSubReportDao { + + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(MesQmsSuspicious model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + StringBuilder countQueryHql= new StringBuilder(); + StringBuilder commonQueryHql = new StringBuilder(); + dataQueryHql.append("select new ") + .append(MesQmsSuspicious.class.getName()).append(" ( "); + dataQueryHql.append("mes_qms_suspicious.inspectionDate AS inspectionDate,"); + dataQueryHql.append("mes_qms_suspicious.partNo AS partNo,"); + dataQueryHql.append("mes_qms_suspicious.partName AS partName,"); + dataQueryHql.append("mes_qms_suspicious.inspectionQty AS inspectionQty,"); + dataQueryHql.append("mes_qms_suspicious.qualifiedQty AS qualifiedQty,"); + dataQueryHql.append("mes_qms_suspicious.unqualifiedQty AS unqualifiedQty,"); + dataQueryHql.append("mes_qms_suspicious.misjudgmentQty AS misjudgmentQty,"); + dataQueryHql.append("mes_qms_suspicious.scrappedQty AS scrappedQty,"); + dataQueryHql.append("mes_qms_suspicious.reworkQualified AS reworkQualified,"); + dataQueryHql.append("mes_qms_suspicious.reworkScrapped AS reworkScrapped,"); + dataQueryHql.append("mes_qms_suspicious.reworkQty AS reworkQty,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE (qualifiedQty / inspectionQty * 100) END AS firstPassRate,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE (unqualifiedQty / inspectionQty * 100) END AS defectRate,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE ((qualifiedQty + misjudgmentQty + reworkQualified) / inspectionQty * 100) END AS finalPassRate,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE ((scrappedQty + reworkScrapped) / inspectionQty * 100) END AS finalScrapRate,"); + dataQueryHql.append("mes_qms_suspicious.organizeCode AS organizeCode"); + dataQueryHql.append(") "); + + countQueryHql.append("select count(1) "); + + commonQueryHql.append("FROM MesQmsSuspicious mes_qms_suspicious "); + commonQueryHql.append("WHERE 1=1 "); + commonQueryHql.append("AND mes_qms_suspicious.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_qms_suspicious.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_qms_suspicious.isValid = :isValid "); + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + commonQueryHql.append("AND mes_qms_suspicious.createDatetime BETWEEN :createDateTimeStart AND :createDateTimeEnd "); + } + if(!StringUtils.isEmpty(model.getPartName())){ + commonQueryHql.append("AND mes_qms_suspicious.partName like :partName "); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + commonQueryHql.append("AND mes_qms_suspicious.partNo like :partNo "); + } + + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), MesQmsSuspicious.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + private void setQueryParams(Query dataQuery, MesQmsSuspicious model) { + dataQuery.setParameter("organizeCode", model.getOrganizeCode()); + dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + dataQuery.setParameter("createDateTimeStart", model.getCreateDateTimeStart()); + dataQuery.setParameter("createDateTimeEnd", model.getCreateDateTimeEnd()); + } + if(!StringUtils.isEmpty(model.getPartName())){ + dataQuery.setParameter("partName", model.getPartName() + "%"); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + dataQuery.setParameter("partNo", model.getPartNo() + "%"); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java new file mode 100644 index 0000000..e84f57e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java @@ -0,0 +1,175 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IShipmentDetailReportDao; +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.mes.model.report.ShippingReportModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 发运明细报表 Dao实现 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:53 + * @Modify: + **/ +@Service +public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao { + + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(ShippingReportModel model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + StringBuilder countQueryHql = new StringBuilder(); + StringBuilder commonQueryHql = new StringBuilder(); + + dataQueryHql.append("select new ").append(ShippingReportModel.class.getName()).append(" ( "); + + // 添加所有需要查询的字段 + dataQueryHql.append("momd.createDatetime AS createDate,"); + dataQueryHql.append("momd.createUser AS createUser,"); + dataQueryHql.append("momd.isValid AS isValid,"); + dataQueryHql.append("momd.isDeleted AS isDeleted,"); + dataQueryHql.append("momd.modifyDatetime AS modifyDate,"); + dataQueryHql.append("momd.modifyUser AS modifyUser,"); + dataQueryHql.append("momd.organizeCode AS organizeCode,"); + dataQueryHql.append("momd.actualQty AS actualQty,"); + dataQueryHql.append("momd.custInfoSeq AS custInfoSeq,"); + dataQueryHql.append("momd.custOrderNo AS custOrderNo,"); + dataQueryHql.append("momd.custPartNo AS custPartNo,"); + dataQueryHql.append("momd.logicSeq AS logicSeq,"); + dataQueryHql.append("momd.paidQty AS paidQty,"); + dataQueryHql.append("momd.partName AS partName,"); + dataQueryHql.append("momd.partNo AS partNo,"); + dataQueryHql.append("momd.planQty AS planQty,"); + dataQueryHql.append("momd.status AS dStatus,"); + dataQueryHql.append("momd.supplierCode AS supplierCode,"); + dataQueryHql.append("momd.unit AS dUnit,"); + dataQueryHql.append("momd.barcode AS barCode,"); + dataQueryHql.append("momd.vin AS vin,"); + dataQueryHql.append("momd.assyCode AS assyCode,"); + dataQueryHql.append("momd.carSerialCode AS carSerialCode,"); + + dataQueryHql.append("ms.checkSeqCode AS checkSeqCode,"); + dataQueryHql.append("ms.custCode AS custCode,"); + dataQueryHql.append("ms.custDockCode AS custDockCode,"); + dataQueryHql.append("ms.custOrganizeCode AS custOrganizeCode,"); + dataQueryHql.append("ms.custName AS custName,"); + dataQueryHql.append("ms.custOrganizeName AS custOrganizeName,"); + dataQueryHql.append("ms.dateSource AS dateSource,"); + dataQueryHql.append("ms.endScanTime AS endScanTime,"); + dataQueryHql.append("ms.lastPrintTime AS lastPrintTime,"); + dataQueryHql.append("ms.lastPrintUser AS lastPrintUser,"); + dataQueryHql.append("ms.printCount AS printCount,"); + dataQueryHql.append("ms.publishFlag AS publishFlag,"); + dataQueryHql.append("ms.publishTime AS publishTime,"); + dataQueryHql.append("ms.rackNo AS rackNo,"); + dataQueryHql.append("ms.roadProcess AS roadProcess,"); + dataQueryHql.append("ms.sendDockCode AS sendDockCode,"); + dataQueryHql.append("ms.seq AS seq,"); + dataQueryHql.append("ms.shippingGroupName AS shippingGroupName,"); + dataQueryHql.append("ms.shippingCode AS shippingCode,"); + dataQueryHql.append("ms.shippingType AS shippingType,"); + dataQueryHql.append("ms.startScanTime AS startScanTime,"); + dataQueryHql.append("ms.status AS status,"); + dataQueryHql.append("ms.shippingGroupCode AS shippingGroupCode,"); + dataQueryHql.append("ms.orderCode AS orderCode,"); + dataQueryHql.append("ms.scanSeqWay AS scanSeqWay"); + dataQueryHql.append(")"); + + countQueryHql.append("select count(1) "); + + commonQueryHql.append(" FROM MesShippingOrderManagement as ms "); + commonQueryHql.append("JOIN MesShippingOrderManagementDetail as momd "); + commonQueryHql.append("ON ms.id = momd.pid "); + commonQueryHql.append("WHERE 1=1 "); + commonQueryHql.append("AND momd.organizeCode = :organizeCode "); + commonQueryHql.append("AND ms.organizeCode = :organizeCode "); + commonQueryHql.append("AND momd.isDeleted = :isDeleted "); + commonQueryHql.append("AND momd.isValid = :isValid "); + commonQueryHql.append("AND ms.isDeleted = :isDeleted "); + commonQueryHql.append("AND ms.isValid = :isValid "); + + // 动态添加其他查询条件 + if (!StringUtils.isEmpty(model.getShippingCode())) { + commonQueryHql.append("AND momd.shippingCode like :shippingCode "); + } + if (!StringUtils.isEmpty(model.getPartNo())) { + commonQueryHql.append("AND momd.partNo like :partNo "); + } + if (!StringUtils.isEmpty(model.getCustPartNo())) { + commonQueryHql.append("AND momd.custPartNo like :custPartNo "); + } + if (!StringUtils.isEmpty(model.getShippingType())) { + commonQueryHql.append("AND momd.shippingType = :shippingType "); + } + if (!StringUtils.isEmpty(model.getCustCode())) { + commonQueryHql.append("AND momd.custCode like :custCode "); + } + if (!StringUtils.isEmpty(model.getStartScanTimeStart()) && !StringUtils.isEmpty(model.getStartScanTimeEnd())) { + commonQueryHql.append("AND momd.startScanTime between :startScanTimeStart and :startScanTimeEnd "); + } + if (!StringUtils.isEmpty(model.getEndScanTimeStart()) && !StringUtils.isEmpty(model.getEndScanTimeEnd())) { + commonQueryHql.append("AND momd.endScanTime between :endScanTimeStart and :endScanTimeEnd "); + } + if (!StringUtils.isEmpty(model.getPublishTimeStart()) && !StringUtils.isEmpty(model.getPublishTimeEnd())) { + commonQueryHql.append("AND momd.publishTime between :publishTimeStart and :publishTimeEnd "); + } + + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), ShippingReportModel.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + + private void setQueryParams(Query dataQuery, ShippingReportModel model) { + dataQuery.setParameter("organizeCode", model.getOrganizeCode()); + dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + if (!StringUtils.isEmpty(model.getShippingCode())) { + dataQuery.setParameter("shippingCode", model.getShippingCode() + "%"); + } + if (!StringUtils.isEmpty(model.getPartNo())) { + dataQuery.setParameter("partNo", model.getPartNo() + "%"); + } + if (!StringUtils.isEmpty(model.getCustPartNo())) { + dataQuery.setParameter("custPartNo", model.getCustPartNo() + "%"); + } + if (!StringUtils.isEmpty(model.getShippingType())) { + dataQuery.setParameter("shippingType", model.getShippingType()); + } + if (!StringUtils.isEmpty(model.getCustCode())) { + dataQuery.setParameter("custCode", model.getCustCode() + "%"); + } + if (!StringUtils.isEmpty(model.getStartScanTimeStart()) && !StringUtils.isEmpty(model.getStartScanTimeEnd())) { + dataQuery.setParameter("startScanTimeStart", model.getStartScanTimeStart()); + dataQuery.setParameter("startScanTimeEnd", model.getStartScanTimeEnd()); + } + if (!StringUtils.isEmpty(model.getEndScanTimeStart()) && !StringUtils.isEmpty(model.getEndScanTimeEnd())) { + dataQuery.setParameter("endScanTimeStart", model.getEndScanTimeStart()); + dataQuery.setParameter("endScanTimeEnd", model.getEndScanTimeEnd()); + } + if (!StringUtils.isEmpty(model.getPublishTimeStart()) && !StringUtils.isEmpty(model.getPublishTimeEnd())) { + dataQuery.setParameter("publishTimeStart",model.getPublishTimeStart()); + dataQuery.setParameter("publishTimeEnd", model.getPublishTimeEnd()); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java new file mode 100644 index 0000000..e53d138 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java @@ -0,0 +1,181 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.ISuspiciousItemBarcodeReportDao; +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.mes.model.report.SuspiciousItemBarcodeReportModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:46 + * @Modify: + **/ +@Service +public class SuspiciousItemBarcodeReportDaoImpl implements ISuspiciousItemBarcodeReportDao { + + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + StringBuilder countQueryHql= new StringBuilder(); + StringBuilder commonQueryHql = new StringBuilder(); + dataQueryHql.append("select new ") + .append(SuspiciousItemBarcodeReportModel.class.getName()).append(" ( "); + dataQueryHql.append("mpd.id as id, "); + dataQueryHql.append("mpd.organizeCode as organizeCode, "); + dataQueryHql.append("mpd.defectLocation as defectLocation, "); + dataQueryHql.append("mpd.frontBack as frontBack, "); + dataQueryHql.append("mpd.status as status, "); + dataQueryHql.append("mpd.defectTypeCode as defectTypeCode, "); + dataQueryHql.append("mpd.defectTypeName as defectTypeName, "); + dataQueryHql.append("mp.sourceType as sourceType, "); + dataQueryHql.append("mp.workCenterCode as workCenterCode, "); + dataQueryHql.append("mp.sn as sn, "); + dataQueryHql.append("mp.lotNo as lotNo, "); + dataQueryHql.append("mp.partNo as partNo, "); + dataQueryHql.append("mp.partName as partName, "); + dataQueryHql.append("mp.qty as qty, "); + dataQueryHql.append("mp.inspectionDate as inspectionDate, "); + dataQueryHql.append("mp.inspectionStatus as inspectionStatus, "); + dataQueryHql.append("mp.ncStatus as ncStatus, "); + dataQueryHql.append("mp.shiftCode as shiftCode, "); + dataQueryHql.append("mpd.systemSyncStatus as systemSyncStatus, "); + dataQueryHql.append("mpd.systemSyncDatetime as systemSyncDatetime"); + dataQueryHql.append(") "); + + countQueryHql.append("select count(1) "); + commonQueryHql.append("FROM MesPartInspectionDetail mpd "); + commonQueryHql.append("LEFT JOIN MesPartInspection mp ON mpd.pid = mp.id "); + commonQueryHql.append("WHERE mpd.organizeCode = :organizeCode "); + commonQueryHql.append("AND mp.organizeCode = :organizeCode "); + commonQueryHql.append("AND mpd.isDeleted = :isDeleted "); + commonQueryHql.append("AND mp.isDeleted = :isDeleted "); + commonQueryHql.append("AND mpd.isValid = :isValid "); + commonQueryHql.append("AND mp.isValid = :isValid "); + + + // like 缺陷位置 + if(!StringUtils.isEmpty(model.getDefectLocation())){ + commonQueryHql.append("AND mpd.defectLocation like :defectLocation "); + } + // = 方向 + if(!StringUtils.isEmpty(model.getFrontBack())){ + commonQueryHql.append("AND mpd.frontBack = :frontBack "); + } + // = nc状态 + if(!StringUtils.isEmpty(model.getStatus())){ + commonQueryHql.append("AND mpd.status = :status "); + } + // like 缺陷代码 + if(!StringUtils.isEmpty(model.getDefectTypeCode())){ + commonQueryHql.append("AND mpd.defectTypeCode like :defectTypeCode "); + } + //like 缺陷名称 + if(!StringUtils.isEmpty(model.getDefectTypeName())){ + commonQueryHql.append("AND mpd.defectTypeName like :defectTypeName "); + } + //like 产线代码 + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + commonQueryHql.append("AND mp.workCenterCode like :workCenterCode "); + } + //like 条码 + if(!StringUtils.isEmpty(model.getSn())){ + commonQueryHql.append("AND mp.sn like :sn "); + } + //like 零件号 + if(!StringUtils.isEmpty(model.getPartNo())){ + commonQueryHql.append("AND mp.partNo like :partNo "); + } + //like 零件名称 + if(!StringUtils.isEmpty(model.getPartName())){ + commonQueryHql.append("AND mp.partName like :partName "); + } + //范围时间 检验日期 + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + commonQueryHql.append("AND mpd.createDateTimeStart between :createDateTimeStart and :createDateTimeEnd "); + } + //= 检验状态 + if (!StringUtils.isEmpty(model.getInspectionStatus())){ + commonQueryHql.append("AND mpd.inspectionStatus = :inspectionStatus "); + } + //like 班次代码 + if (!StringUtils.isEmpty(model.getShiftCode())){ + commonQueryHql.append("AND mp.shiftCode like :shiftCode "); + } + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), SuspiciousItemBarcodeReportModel.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + //本次查询满足条件的总数 + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + //查询本页数据 + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + private void setQueryParams(Query query, SuspiciousItemBarcodeReportModel model) { + query.setParameter("organizeCode", model.getOrganizeCode()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + + // like 缺陷位置 + if(!StringUtils.isEmpty(model.getDefectLocation())){ + query.setParameter("defectLocation", model.getDefectLocation() + "%"); + } + // =方向 + if(!StringUtils.isEmpty(model.getFrontBack())){ + query.setParameter("frontBack", model.getFrontBack()); + } + // =nc状态 + if(!StringUtils.isEmpty(model.getStatus())){ + query.setParameter("status", model.getStatus()); + } + // like 缺陷代码 + if(!StringUtils.isEmpty(model.getDefectTypeCode())){ + query.setParameter("defectTypeCode", model.getDefectTypeCode() + "%"); + } + //like 缺陷名称 + if(!StringUtils.isEmpty(model.getDefectTypeName())){ + query.setParameter("defectTypeName", model.getDefectTypeName() + "%"); + } + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + query.setParameter("workCenterCode", model.getWorkCenterCode() + "%"); + } + if(!StringUtils.isEmpty(model.getSn())){ + query.setParameter("sn", model.getSn() + "%"); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + query.setParameter("partNo", model.getPartNo() + "%"); + } + if(!StringUtils.isEmpty(model.getPartName())){ + query.setParameter("partName", model.getPartName() + "%"); + } + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + query.setParameter("createDateTimeStart", model.getCreateDateTimeStart()); + query.setParameter("createDateTimeEnd", model.getCreateDateTimeEnd()); + } + if (!StringUtils.isEmpty(model.getInspectionStatus())){ + query.setParameter("inspectionStatus", model.getInspectionStatus()); + } + if (!StringUtils.isEmpty(model.getShiftCode())){ + query.setParameter("shiftCode", model.getShiftCode()); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java new file mode 100644 index 0000000..647dc8d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java @@ -0,0 +1,31 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IAssemblyPartReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IAssemblyPartReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 装配件查询 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:20 + * @Modify: + **/ +@Service +@Slf4j +public class AssemblyPartReportServiceImpl implements IAssemblyPartReportService { + + @Autowired + private IAssemblyPartReportDao assemblyPartReportDao; + + @Override + public ListPager queryReport(AssemblyPartReportModel model, Pager pager) { + ListPager result = assemblyPartReportDao.queryReport(model,pager); + return result; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java new file mode 100644 index 0000000..6143458 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IProductInspectionSubReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IProductInspectionSubReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:50 + * @Modify: + **/ +@Service +@Slf4j +public class ProductInspectionSubReportServiceImpl implements IProductInspectionSubReportService { + + @Autowired + private IProductInspectionSubReportDao productInspectionSubReportDao; + + @Override + public ListPager queryReport(MesQmsSuspicious model, Pager pager) { + return productInspectionSubReportDao.queryReport(model,pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java new file mode 100644 index 0000000..7e57c79 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java @@ -0,0 +1,29 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IShipmentDetailReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IShipmentDetailReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 发运明细报表 服务实现 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:51 + * @Modify: + **/ +@Service +@Slf4j +public class ShipmentDetailReportServiceImpl implements IShipmentDetailReportService { + + @Autowired + private IShipmentDetailReportDao shipmentDetailReportDao; + @Override + public ListPager queryReport(ShippingReportModel model, Pager pager) { + return shipmentDetailReportDao.queryReport(model,pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java new file mode 100644 index 0000000..ea72942 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java @@ -0,0 +1,29 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.ISuspiciousItemBarcodeReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.ISuspiciousItemBarcodeReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:28 + * @Modify: + **/ +@Service +@Slf4j +public class SuspiciousItemBarcodeReportServiceImpl implements ISuspiciousItemBarcodeReportService { + + @Autowired + private ISuspiciousItemBarcodeReportDao suspiciousItemBarcodeReportDao; + @Override + public ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager) { + return suspiciousItemBarcodeReportDao.queryReport(model,pager); + } +} From 19fc69a084be9c2f57b4a391b0138c3692a904c9 Mon Sep 17 00:00:00 2001 From: pzj Date: Sun, 29 Sep 2024 20:15:50 +0800 Subject: [PATCH 074/180] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E5=92=8C=E8=BE=8A=E9=81=93=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesBallTrackRuleServiceImpl.java | 16 ++++++++++++---- .../serviceimpl/base/MesStationServiceImpl.java | 20 ++++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java index dbdca2a..c382d0d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java @@ -5,8 +5,10 @@ import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -20,9 +22,13 @@ import org.springframework.stereotype.Service; @Slf4j public class MesBallTrackRuleServiceImpl extends BaseMesService implements IMesBallTrackRuleService { + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; @Override protected void setPackQueryBean(MesBallTrackRule bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getBallTrackType(), "ballTrackType", packBean); DdlPreparedPack.getStringLikerPack(bean.getBallTrackName(), "ballTrackName", packBean); } @@ -30,11 +36,12 @@ public class MesBallTrackRuleServiceImpl extends BaseMesService implements IMesStationService { + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + @Override + protected void setPackQueryBean(MesStation bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getStation(), "station", packBean); + DdlPreparedPack.getNumEqualPack(bean.getStationType(), "stationType", packBean); + DdlPreparedPack.getStringLikerPack(bean.getEquipmentCode(), "equipmentCode", packBean); + } @Override protected void onInsertBean(MesStation item) { ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(),"equipmentCode",ddlPackBean); - if (baseRDao.isExitByHql(ddlPackBean)){ - MesException.throwBusiException("设备代码已存在"); + if (!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码不存在"); } } @Override protected void onUpdateBean(MesStation item) { ValidatorBean.checkNotNull(item.getId(),"主键不能为空"); + ValidatorBean.checkNotNull(item.getStation(),"站点不能为空"); + ValidatorBean.checkNotNull(item.getStationType(),"站点类型不能为空"); ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(),"equipmentCode",ddlPackBean); DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",ddlPackBean); - if (baseRDao.isExitByHql(ddlPackBean)){ - MesException.throwBusiException("设备代码已存在"); + if (!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码不存在"); } } } From c3269181c0a8ee4c8b0a7cc5044e40f9d5429100 Mon Sep 17 00:00:00 2001 From: pzj Date: Sun, 29 Sep 2024 23:58:09 +0800 Subject: [PATCH 075/180] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../daoimpl/report/AssemblyPartReportDaoImpl.java | 24 +++++++++++++++------- .../report/SuspiciousItemBarcodeReportDaoImpl.java | 10 ++++----- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java index 0b50f35..c62b7c5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java @@ -45,7 +45,9 @@ public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { dataQueryHql.append("mes_production_assembly.createUser AS createUser,"); dataQueryHql.append("mes_production_record.workOrderNo AS workOrderNo,"); dataQueryHql.append("mes_production_record.lotNo AS lotNo,"); - dataQueryHql.append("mes_equipment.equipmentName AS equipmentName)"); + dataQueryHql.append("mes_equipment.equipmentName AS equipmentName,"); + dataQueryHql.append("mes_equipment.equipId AS equipId "); + dataQueryHql.append(") "); StringBuilder countQueryHql= new StringBuilder(); countQueryHql.append("select count(1)"); @@ -69,8 +71,8 @@ public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { commonQueryHql.append("AND mes_production_assembly.serialNumber like :serialNumber "); } // = 装配件条码确认规则 - if (model.getMatchType()!=null){ - commonQueryHql.append("AND mes_production_assembly.matchType = :matchType "); + if (!StringUtils.isEmpty(model.getMatchRule())){ + commonQueryHql.append("AND mes_production_assembly.matchRule = :matchRule "); } // like 零件号 if(!StringUtils.isEmpty(model.getPartNo())){ @@ -112,10 +114,9 @@ public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { if(!StringUtils.isEmpty(model.getWorkCellCode())){ commonQueryHql.append("AND mes_production_assembly.workCellCode like :workCellCode "); } - //= 扫描类型 -// if (!StringUtils.isEmpty(model.getScanType())){ -// commonQueryHql.append("AND mes_production_assembly.scanType = :scanType "); -// } + if (model.getMatchType()!=null){ + commonQueryHql.append("AND mes_production_assembly.matchRule = :matchRule "); + } //like 加工单号 if(!StringUtils.isEmpty(model.getWorkOrderNo())){ commonQueryHql.append("AND mes_production_record.workOrderNo like :workOrderNo "); @@ -124,6 +125,9 @@ public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { if(!StringUtils.isEmpty(model.getEquipmentName())){ commonQueryHql.append("AND mes_equipment.equipmentName like :equipmentName "); } + if (model.getEquipId()!=null){ + commonQueryHql.append("AND mes_equipment.equipId = :equipId "); + } commonQueryHql.append("ORDER BY mes_production_assembly.createDatetime DESC "); Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), AssemblyPartReportModel.class); @@ -182,11 +186,17 @@ public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { if(!StringUtils.isEmpty(model.getWorkCellCode())){ dataQuery.setParameter("workCellCode", model.getWorkCellCode() + "%"); } + if (model.getMatchType()!=null){ + dataQuery.setParameter("matchRule", model.getMatchRule()); + } if(!StringUtils.isEmpty(model.getWorkOrderNo())){ dataQuery.setParameter("workOrderNo", model.getWorkOrderNo() + "%"); } if(!StringUtils.isEmpty(model.getEquipmentName())){ dataQuery.setParameter("equipmentName", model.getEquipmentName() + "%"); } + if (model.getEquipId()!=null){ + dataQuery.setParameter("equipId", model.getEquipId()); + } } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java index e53d138..06c06f2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java @@ -76,8 +76,8 @@ public class SuspiciousItemBarcodeReportDaoImpl implements ISuspiciousItemBarcod commonQueryHql.append("AND mpd.frontBack = :frontBack "); } // = nc状态 - if(!StringUtils.isEmpty(model.getStatus())){ - commonQueryHql.append("AND mpd.status = :status "); + if(!StringUtils.isEmpty(model.getNcStatus())){ + commonQueryHql.append("AND mp.ncStatus = :ncStatus "); } // like 缺陷代码 if(!StringUtils.isEmpty(model.getDefectTypeCode())){ @@ -144,8 +144,8 @@ public class SuspiciousItemBarcodeReportDaoImpl implements ISuspiciousItemBarcod query.setParameter("frontBack", model.getFrontBack()); } // =nc状态 - if(!StringUtils.isEmpty(model.getStatus())){ - query.setParameter("status", model.getStatus()); + if(!StringUtils.isEmpty(model.getNcStatus())){ + query.setParameter("ncStatus", model.getNcStatus()); } // like 缺陷代码 if(!StringUtils.isEmpty(model.getDefectTypeCode())){ @@ -175,7 +175,7 @@ public class SuspiciousItemBarcodeReportDaoImpl implements ISuspiciousItemBarcod query.setParameter("inspectionStatus", model.getInspectionStatus()); } if (!StringUtils.isEmpty(model.getShiftCode())){ - query.setParameter("shiftCode", model.getShiftCode()); + query.setParameter("shiftCode", model.getShiftCode()+"%"); } } } From f576b006698efe8b15520e6746c8f6a4b5e1d509 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 30 Sep 2024 10:16:14 +0800 Subject: [PATCH 076/180] =?UTF-8?q?=E6=8C=89=E5=8C=85=E8=A3=85=E5=9C=86?= =?UTF-8?q?=E6=95=B4=E5=BC=82=E5=B8=B8=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 7636852..6e2bb72 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -181,7 +181,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } catch (Exception e) { - log.error("按包装圆整出错:MesPackageRoundnessService", e); + log.error("按包装圆整出错:MesPackageRoundnessService:{}", e.getMessage()); } } From 7163788a675a29bd232d55f8275d13d6cc00aaac Mon Sep 17 00:00:00 2001 From: pzj Date: Tue, 8 Oct 2024 17:34:51 +0800 Subject: [PATCH 077/180] =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/controller/base/MesStationController.java | 2 +- .../daoimpl/report/ProductInspectionSubReportDaoImpl.java | 10 +++++----- .../daoimpl/report/ShipmentDetailReportDaoImpl.java | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java index 84ede19..eb3b007 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java @@ -13,6 +13,6 @@ import org.springframework.web.bind.annotation.RestController; * @Modify: **/ @RestController -@RequestMapping(MesCommonConstant.MES_YANFEN+"mesStation") +@RequestMapping(MesCommonConstant.MES_YANFEN+"/mesStation") public class MesStationController extends BaseMesController{ } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java index 32e7530..c201a3b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java @@ -59,8 +59,8 @@ public class ProductInspectionSubReportDaoImpl implements IProductInspectionSubR commonQueryHql.append("AND mes_qms_suspicious.organizeCode = :organizeCode "); commonQueryHql.append("AND mes_qms_suspicious.isDeleted = :isDeleted "); commonQueryHql.append("AND mes_qms_suspicious.isValid = :isValid "); - if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ - commonQueryHql.append("AND mes_qms_suspicious.createDatetime BETWEEN :createDateTimeStart AND :createDateTimeEnd "); + if (!StringUtils.isEmpty(model.getInspectionStartDate()) && !StringUtils.isEmpty(model.getInspectionEndDate())){ + commonQueryHql.append("AND mes_qms_suspicious.createDatetime BETWEEN :inspectionStartDate AND :inspectionEndDate "); } if(!StringUtils.isEmpty(model.getPartName())){ commonQueryHql.append("AND mes_qms_suspicious.partName like :partName "); @@ -86,9 +86,9 @@ public class ProductInspectionSubReportDaoImpl implements IProductInspectionSubR dataQuery.setParameter("organizeCode", model.getOrganizeCode()); dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); - if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ - dataQuery.setParameter("createDateTimeStart", model.getCreateDateTimeStart()); - dataQuery.setParameter("createDateTimeEnd", model.getCreateDateTimeEnd()); + if (!StringUtils.isEmpty(model.getInspectionStartDate()) && !StringUtils.isEmpty(model.getInspectionEndDate())){ + dataQuery.setParameter("inspectionStartDate", model.getInspectionStartDate()); + dataQuery.setParameter("inspectionEndDate", model.getInspectionEndDate()); } if(!StringUtils.isEmpty(model.getPartName())){ dataQuery.setParameter("partName", model.getPartName() + "%"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java index e84f57e..47c0c2c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java @@ -102,7 +102,7 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao { // 动态添加其他查询条件 if (!StringUtils.isEmpty(model.getShippingCode())) { - commonQueryHql.append("AND momd.shippingCode like :shippingCode "); + commonQueryHql.append("AND ms.shippingCode like :shippingCode "); } if (!StringUtils.isEmpty(model.getPartNo())) { commonQueryHql.append("AND momd.partNo like :partNo "); @@ -111,19 +111,19 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao { commonQueryHql.append("AND momd.custPartNo like :custPartNo "); } if (!StringUtils.isEmpty(model.getShippingType())) { - commonQueryHql.append("AND momd.shippingType = :shippingType "); + commonQueryHql.append("AND ms.shippingType = :shippingType "); } if (!StringUtils.isEmpty(model.getCustCode())) { - commonQueryHql.append("AND momd.custCode like :custCode "); + commonQueryHql.append("AND ms.custCode like :custCode "); } if (!StringUtils.isEmpty(model.getStartScanTimeStart()) && !StringUtils.isEmpty(model.getStartScanTimeEnd())) { - commonQueryHql.append("AND momd.startScanTime between :startScanTimeStart and :startScanTimeEnd "); + commonQueryHql.append("AND ms.startScanTime between :startScanTimeStart and :startScanTimeEnd "); } if (!StringUtils.isEmpty(model.getEndScanTimeStart()) && !StringUtils.isEmpty(model.getEndScanTimeEnd())) { - commonQueryHql.append("AND momd.endScanTime between :endScanTimeStart and :endScanTimeEnd "); + commonQueryHql.append("AND ms.endScanTime between :endScanTimeStart and :endScanTimeEnd "); } if (!StringUtils.isEmpty(model.getPublishTimeStart()) && !StringUtils.isEmpty(model.getPublishTimeEnd())) { - commonQueryHql.append("AND momd.publishTime between :publishTimeStart and :publishTimeEnd "); + commonQueryHql.append("AND ms.publishTime between :publishTimeStart and :publishTimeEnd "); } Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), ShippingReportModel.class); From ee1e45f425f9c720184c812033282ad1e0ec8eee Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 8 Oct 2024 17:38:06 +0800 Subject: [PATCH 078/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E5=AD=97=E6=AE=B5-=E8=A3=85=E9=85=8D=E4=BB=B6=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 6e2bb72..bc43401 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -575,6 +575,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ continue; } + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); @@ -613,6 +618,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); orderAssembly.setProcessName(ruleSortCfg.getProcessName()); @@ -642,6 +652,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); orderAssembly.setProcessName(ruleSortCfg.getProcessName()); @@ -689,7 +704,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { MesPartSap partSap = partMap.get(bom.getItemPartNo()); if (partSap == null) { log.info("工厂:{},零件号:{}未查到零件信息", organizeCode, bom.getItemPartNo()); - return null; + return new ArrayList<>(); } List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); if (!orderParts.isEmpty()) { @@ -750,7 +765,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); - return parts.isEmpty() ? new MesPartSap() : parts.get(0); + return parts.isEmpty() ? null : parts.get(0); } private MesProductVersion getProdVersion(String organizeCode, String partNo) { From 199565901d40c439ba3b4001312bf9490a2e8d41 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 9 Oct 2024 09:43:53 +0800 Subject: [PATCH 079/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=E8=A1=A8?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index bc43401..db2442a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -476,6 +476,8 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); if (!assemblyList.isEmpty()) { for (MesWorkOrderAssembly orderAssembly : assemblyList) { + orderAssembly.setPartNo(mesWorkOrder.getPartNo()); + orderAssembly.setPartName(mesWorkOrder.getPartName()); orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); orderAssembly.setOrganizeCode(organizeCode); @@ -558,8 +560,6 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); //遍历排序生产规则 for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { - String t = sortCfg.getAssemblyPartNo(); - System.out.println(sortCfg.getAssemblyPartNo()); List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); MesWorkOrderPart orderPart = orderPartList.get(0); @@ -575,6 +575,10 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ continue; } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); orderAssembly.setMatchRule(sortCfg.getMatchRule()); orderAssembly.setMatchType(sortCfg.getMatchType()); @@ -586,8 +590,8 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setCraftName(sortCfg.getCraftName()); orderAssembly.setCraftCode(sortCfg.getCraftCode()); orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); - orderAssembly.setPartNo(orderPart.getPartNo()); - orderAssembly.setPartName(orderPart.getPartName()); +// orderAssembly.setPartNo(orderPart.getPartNo()); +// orderAssembly.setPartName(orderPart.getPartName()); orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); orderAssembly.setOrderPartId(orderPart.getId().toString()); orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); @@ -618,6 +622,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); orderAssembly.setMatchType(ruleSortCfg.getMatchType()); @@ -652,6 +661,10 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); orderAssembly.setMatchType(ruleSortCfg.getMatchType()); From 82da2d4259deeacd084180affc63841fe9c15034 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 10 Oct 2024 10:11:19 +0800 Subject: [PATCH 080/180] =?UTF-8?q?PTR=E6=9B=BF=E6=8D=A2=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index db2442a..64833c8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -94,6 +94,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesWorkCenterRepository workCenterRao; + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { @@ -422,6 +425,19 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { isModifyPOrder = true; } //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } @@ -797,7 +813,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); - partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0).collect(Collectors.toList()); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) + .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) + .collect(Collectors.toList()); return partPtrList; } //根据排序信息PTR零件号 获取 ptr信息 From 2a08888d5234c84ab5dfff785244cd2a7498096c Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 10 Oct 2024 10:32:07 +0800 Subject: [PATCH 081/180] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=8E=9F=E6=9D=90?= =?UTF-8?q?=E6=96=99=E9=98=B2=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index c60c57b..acb91af 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -97,6 +97,7 @@ public class MesWorkOrderCutService extends BaseMesService impl // 校验工单物料是否已在成品配置中进行维护 checkWorkOrderPartValid(workOrderList, cutSchemeFgList); + // 裁片工单生成版数 editionNumber = editionNumber == null ? 1 : editionNumber; // 记录工单剩余未完成数量 @@ -111,7 +112,7 @@ public class MesWorkOrderCutService extends BaseMesService impl checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap, workOrderQtyMap); // 预计生成裁片工单数量 - for (Integer count = 0; count < editionNumber; count++) { + for (int count = 0; count < editionNumber; count++) { MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); ConvertBean.serviceModelInitialize(workOrderCut, userName); workOrderCut.setCutCode(cutScheme.getCutCode()); From 731cdeeac1a29adc45b04c37408b6e933475167a Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 10 Oct 2024 11:18:39 +0800 Subject: [PATCH 082/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E5=AD=90=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86+=E5=8F=91?= =?UTF-8?q?=E8=BF=90=E5=8D=95=E5=AD=90=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesShippingOrderManagementDetailService.java | 4 + ...MesShippingOrderManagementDetailController.java | 32 +++++ .../dao/IMesShippingOrderManagementDetailDao.java | 4 + .../MesShippingOrderManagementDetailDaoImpl.java | 129 +++++++++++++++++++++ .../MesShippingOrderManagementDetailService.java | 36 ++++++ 5 files changed, 205 insertions(+) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java index 3c77082..d035341 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; @@ -23,4 +24,7 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic @ApiOperation("发运退回") void doShippingBack(Long[] idList,String organizeCode,String userName); + + @ApiOperation("查询发运零件子零件明细") + ListPager queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java index f04f835..b03b915 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -68,5 +69,36 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } } + @PostMapping(value = "/ship-part/query-item-part") + @ApiOperation(value = "发运零件子零件明细") + public ResultBean queryDetailMesWorkOrderPart(@RequestBody MesWorkOrderPart detail, Pager pager) { + try { + + detail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(shippingOrderManagementDetailService.queryDetailMesWorkOrderPart(detail,pager)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @PostMapping(value = "/ship-order/query-item-part") + @ApiOperation(value = "发运单子零件明细") + public ResultBean queryMesShippingOrderManagementDetail(@RequestBody MesWorkOrderPart detail, Pager pager) { + try { + + detail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(shippingOrderManagementDetailService.queryDetailMesWorkOrderPart(detail,pager)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java index 7053b64..4e89a43 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.dao; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; @@ -18,10 +19,13 @@ import java.util.List; public interface IMesShippingOrderManagementDetailDao { int queryOrderDetailGroupByPartCount(MesShippingOrderManagementDetail detail); + int queryDetailGroupByPartNo(MesWorkOrderPart detail); List queryOrderDetailGroupByPartInfo(MesShippingOrderManagementDetail detail, Pager pager); + List queryOrderDetailGroupByPartInfo(MesWorkOrderPart detail, Pager pager); @ApiOperation("查询发运单明细") ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager); + List queryMesShippingOrderManagementDetail(MesWorkOrderPart bean); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index 3cbd941..f2ccd98 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -6,6 +6,8 @@ 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.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -20,6 +22,7 @@ import javax.persistence.Query; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @Description :SAP生产计划 @@ -187,4 +190,130 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde commonHql.append(" and m.publishTime <= :publishTimeEnd "); return commonHql.toString(); } + @Override + public List queryMesShippingOrderManagementDetail(MesWorkOrderPart detail ) { + StringBuffer hql = new StringBuffer("" + + " SELECT " + + " SUBSTRING_INDEX(sd.bar_code, ',', 1) AS bar_code, " + + " sd.plan_qty, " + + " sd.actual_qty, " + + " s.shipping_code, " + + " sd.part_no, " + + " sd.modify_date_time, " + + " from mes_shipping_detail sd " + + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " + + " WHERE sd.status in (20) " +//todo 发运 20 + " and sd.bar_code != '' and bar_code is not NULL "); + hql.append(" and sd.organize_code = :organizeCode "); + hql.append(" and sd.is_deleted = :isDeleted "); + hql.append(" and sd.is_valid = :isValid "); + if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ + hql.append(" and sd.modify_date_time >= "+detail.getModifyDateTimeStart()+" "); + } + if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ + hql.append(" and sd.modify_date_time <= "+detail.getModifyDateTimeEnd()+" "); + } + + Query query = entityManager.createNativeQuery(hql.toString()); + query.setParameter("organizeCode", detail.getOrganizeCode()); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + List list = query.getResultList(); + List modelList = new ArrayList<>(); + + for (Object result : list) { + Object[] cells = (Object[]) result; + MesShippingOrderManagementDetail model = new MesShippingOrderManagementDetail(); + model.setBarcode(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setPlanQty(StringUtils.isEmpty(cells[1]) ? 1 : Integer.parseInt(String.valueOf(cells[1]))); + model.setActualQty(StringUtils.isEmpty(cells[2]) ? 1 : Integer.parseInt(String.valueOf(cells[2]))); + model.setShippingCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); + model.setPartNo(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setModifyDatetime(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + modelList.add(model); + } + + return modelList; + } + @Override + public int queryDetailGroupByPartNo(MesWorkOrderPart detail) { + + StringBuffer hql = new StringBuffer("select count(1)" + + " from mes_work_order_part wop " + + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); + hql.append(" WHERE wop.organize_code = :organizeCode "); + hql.append(" and wop.is_deleted = :isDeleted "); + hql.append(" and wop.is_valid = :isValid "); + + if (!StringUtil.isEmpty(detail.getPartNo())){ + hql.append(" and wop.part_no ="+detail.getPartNo()+" "); + } + if (!StringUtil.isEmpty(detail.getWorkCenterCode())){ + hql.append(" and wop.work_center_code ="+detail.getWorkCenterCode()+" "); + } + hql.append(" and wop.work_order_no in (:codeList) "); + + Query query = entityManager.createNativeQuery(hql.toString()); + query.setParameter("organizeCode", detail.getOrganizeCode()); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("codeList", detail.getShippingDetails().stream().map(MesShippingOrderManagementDetail::getBarcode).collect(Collectors.toList())); + + + List list = query.getResultList(); + + if (CollectionUtils.isEmpty(list)) { + return 0; + } + + return list.size(); + } + @Override + public List queryOrderDetailGroupByPartInfo(MesWorkOrderPart detail, Pager pager) { + + StringBuffer hql = new StringBuffer("" + + "SELECT " + + " wo.work_center_code, " + + " wop.part_no, " + + " wop.part_name, " + + " wop.item_qty " + + " from mes_work_order_part wop " + + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); + hql.append(" WHERE wop.organize_code = :organizeCode "); + hql.append(" and wop.is_deleted = :isDeleted "); + hql.append(" and wop.is_valid = :isValid "); + + if (!StringUtil.isEmpty(detail.getPartNo())){ + hql.append(" and wop.part_no ="+detail.getPartNo()+" "); + } + if (!StringUtil.isEmpty(detail.getWorkCenterCode())){ + hql.append(" and wop.work_center_code ="+detail.getWorkCenterCode()+" "); + } + hql.append(" and wop.work_order_no in (:codeList) "); + + Query query = entityManager.createNativeQuery(hql.toString()); + query.setParameter("organizeCode", detail.getOrganizeCode()); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("codeList", detail.getShippingDetails().stream().map(MesShippingOrderManagementDetail::getBarcode).collect(Collectors.toList())); + + + query.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + + List list = query.getResultList(); + List modelList = new ArrayList<>(); + + for (Object result : list) { + Object[] cells = (Object[]) result; + MesWorkOrderPart model = new MesWorkOrderPart(); + model.setWorkCenterCode(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setPartNo(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setPartName(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2])); + model.setItemQty(StringUtils.isEmpty(cells[3]) ? 1 : Double.parseDouble(String.valueOf(cells[3]))); + modelList.add(model); + } + + return modelList; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index 3919fe0..cbd0104 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -12,9 +12,12 @@ 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.MesPartShippingGroupDetail; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +39,9 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager) { + List modelList=new ArrayList<>(); + List shippingDetails = shippingOrderManagementDetailDao.queryMesShippingOrderManagementDetail(bean); + if (CollectionUtils.isEmpty(shippingDetails)){ + return new ListPager<>(modelList, pager); + } + bean.setShippingDetails(shippingDetails); + int count = shippingOrderManagementDetailDao.queryDetailGroupByPartNo(bean); + + pager = PagerHelper.getPager(pager, count); + + modelList = shippingOrderManagementDetailDao.queryOrderDetailGroupByPartInfo(bean, pager); + //查询发运明细 + if (!CollectionUtils.isEmpty(modelList)){ + Map> collect = shippingDetails.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getBarcode)); + for (MesWorkOrderPart mesWorkOrderPart : modelList) { + if (!CollectionUtils.isEmpty(collect.get(mesWorkOrderPart.getWorkOrderNo()))){ + MesShippingOrderManagementDetail managementDetail = collect.get(mesWorkOrderPart.getWorkOrderNo()).get(0); + mesWorkOrderPart.setItemQty(mesWorkOrderPart.getItemQty()*managementDetail.getPlanQty()); + mesWorkOrderPart.setShippingCode(managementDetail.getShippingCode()); + mesWorkOrderPart.setTotalPartNo(managementDetail.getPartNo()); + mesWorkOrderPart.setShippingTime(managementDetail.getModifyDatetime()); + } + } + } + + return new ListPager<>(modelList, pager); + } + } From 7c8c9227f05e82a292bceffe51cc1f6afb13d883 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 10 Oct 2024 11:35:28 +0800 Subject: [PATCH 083/180] =?UTF-8?q?PC=E6=8A=A5=E5=B7=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index b6688a3..10f5183 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -902,10 +902,7 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doProductReport(MesWorkOrder mesWorkOrder) { - MesWorkOrder mesWorkOrderDb = baseRDao.getById(mesWorkOrder.getId()); - if (Objects.isNull(mesWorkOrderDb)) { - MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId()); - } + MesWorkOrder mesWorkOrderDb = getMesWorkOrder(mesWorkOrder.getWorkOrderNo(),mesWorkOrder.getOrganizeCode()); //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode()); //查询产线信息 @@ -967,10 +964,7 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doProductReportExt(MesWorkOrder mesWorkOrderNew) { - MesWorkOrder mesWorkOrder = baseRDao.getById(mesWorkOrderNew.getId()); - if (Objects.isNull(mesWorkOrder)) { - MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrderNew.getId()); - } + MesWorkOrder mesWorkOrder = getMesWorkOrder(mesWorkOrderNew.getWorkOrderNo(),mesWorkOrderNew.getOrganizeCode()); //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); if (mesWorkOrderNew.getNum() <= 0) { @@ -1000,7 +994,8 @@ public class MesWorkOrderService extends BaseMesService implements } else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) { mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { - mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + mesWorkOrder.setWorkOrderStatus(mesWorkOrder.getWorkOrderStatus()==MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()? + MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue():MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); } mesWorkOrder.setCompleteQty(mesWorkOrder.getReportedQty()); } else { @@ -1369,6 +1364,16 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } + private MesWorkOrder getMesWorkOrder(String workOrderNo, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + MesWorkOrder mesWorkOrder = baseRDao.getByProperty(packBean); + if (Objects.isNull(mesWorkOrder)) { + MesException.throwMesBusiException("工单【%s】信息不存在", workOrderNo); + } + return mesWorkOrder; + } + private void updateMesWorkOrder(MesWorkOrder mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE type,double qty) { //修改工单,需要重新同步 mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); From 9228827ff508c5d0043aa8656f274b58c81bb517 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 10 Oct 2024 13:27:15 +0800 Subject: [PATCH 084/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E5=BA=8F=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java | 2 +- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java index b8c5949..855a9f4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -110,7 +110,7 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); if (sortInfoList.isEmpty()){ log.info("当前零件生产组:{}没有排序信息",prodGroup.getCustInfoPoint()); - return; + continue; } //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 64833c8..fbd474b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -453,11 +453,10 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } /** * 工单号修改 - * {dynamicRule}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} * 工厂代码+工单类型 +客户工厂代码+班次+流水号 */ GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); - genSerialNoModel.setPartNo(mesPartProdGroupDetail.getWorkCenterCode()); List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; @@ -476,12 +475,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { * 生产序号 * 工厂-产线-9位流水号,跳号10 */ - GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); - List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); String proSeqStr = proSeqResultList.get(0); - mesWorkOrder.setProduceSeq(Long.parseLong(proSeqStr.replace(organizeCode, "").replace(mesWorkOrder.getWorkCenterCode(),""))); + mesWorkOrder.setProduceSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); From 709b21c08b24a97ea3eb3f33d3b629e95567db2c Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 10 Oct 2024 13:50:51 +0800 Subject: [PATCH 085/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E5=AD=90?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesShippingOrderManagementDetailDaoImpl.java | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index f2ccd98..5c24489 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -201,17 +201,26 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde " sd.part_no, " + " sd.modify_date_time, " + " from mes_shipping_detail sd " + - " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " + + " left join mes_shipping s on s.id=sd.pid " + " WHERE sd.status in (20) " +//todo 发运 20 " and sd.bar_code != '' and bar_code is not NULL "); hql.append(" and sd.organize_code = :organizeCode "); hql.append(" and sd.is_deleted = :isDeleted "); hql.append(" and sd.is_valid = :isValid "); if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ - hql.append(" and sd.modify_date_time >= "+detail.getModifyDateTimeStart()+" "); + hql.append(" and sd.modify_date_time >= '"+detail.getModifyDateTimeStart()+"' "); } if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ - hql.append(" and sd.modify_date_time <= "+detail.getModifyDateTimeEnd()+" "); + hql.append(" and sd.modify_date_time <= '"+detail.getModifyDateTimeEnd()+"' "); + } + if (!StringUtil.isEmpty(detail.getShippingCode())){ + hql.append(" and s.shipping_code = '"+detail.getShippingCode()+"' "); + } + if (!StringUtil.isEmpty(detail.getTotalPartNo())){ + hql.append(" and sd.part_no = '"+detail.getTotalPartNo()+"' "); + } + if (!StringUtil.isEmpty(detail.getWorkOrderNo())){ + hql.append(" and sd.bar_code like '"+detail.getWorkOrderNo()+"%' "); } Query query = entityManager.createNativeQuery(hql.toString()); @@ -247,10 +256,10 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde hql.append(" and wop.is_valid = :isValid "); if (!StringUtil.isEmpty(detail.getPartNo())){ - hql.append(" and wop.part_no ="+detail.getPartNo()+" "); + hql.append(" and wop.part_no ='"+detail.getPartNo()+"' "); } if (!StringUtil.isEmpty(detail.getWorkCenterCode())){ - hql.append(" and wop.work_center_code ="+detail.getWorkCenterCode()+" "); + hql.append(" and wop.work_center_code ='"+detail.getWorkCenterCode()+"' "); } hql.append(" and wop.work_order_no in (:codeList) "); @@ -285,10 +294,10 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde hql.append(" and wop.is_valid = :isValid "); if (!StringUtil.isEmpty(detail.getPartNo())){ - hql.append(" and wop.part_no ="+detail.getPartNo()+" "); + hql.append(" and wop.part_no ='"+detail.getPartNo()+"' "); } if (!StringUtil.isEmpty(detail.getWorkCenterCode())){ - hql.append(" and wop.work_center_code ="+detail.getWorkCenterCode()+" "); + hql.append(" and wop.work_center_code ='"+detail.getWorkCenterCode()+"' "); } hql.append(" and wop.work_order_no in (:codeList) "); From 98a6a8e5e86bc4d31518bfd0b4ca9c82e2024f17 Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 10 Oct 2024 16:08:24 +0800 Subject: [PATCH 086/180] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=E7=BB=84=E4=BA=A7=E7=BA=BF=E8=B7=9F=E5=B7=A5=E5=8D=95=E4=BA=A7?= =?UTF-8?q?=E7=BA=BF=E4=B8=8D=E4=B8=80=E8=87=B4=20=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=8B=89=E5=8A=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesPullingOrderInfoService.java | 130 +++++++++++---------- 1 file changed, 67 insertions(+), 63 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 90edeb7..6ebd6cf 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -169,11 +169,13 @@ public class MesPullingOrderInfoService extends BaseMesService> stringListEntryDetail : pullCodeListMap.entrySet()) { String pullCode = stringListEntryDetail.getKey(); List mesPartPulls = pullCodeMap.get(pullCode); - MesPartPull mesPartPull = mesPartPulls.get(0);//拉动组明细拉动单号对应拉动组 - List mesPartPullDetails = stringListEntryDetail.getValue(); - //拉动组号+年月日+工单后5位 - String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyMMdd") + - mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5); + MesPartPull mesPartPull = mesPartPulls.get(0); + //拉动组明细拉动单号对应拉动组 如果拉动组产线跟工单产线不一致 不生成 + if (mesWorkOrder.getWorkCenterCode().equals(mesPartPull.getWorkCenterCode())){ + List mesPartPullDetails = stringListEntryDetail.getValue(); + //拉动组号+年月日+工单后5位 + String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyMMdd") + + mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5); // if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { // orderNo = "KITTING"; // } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.JIS_PULL.getValue()) { @@ -185,7 +187,7 @@ public class MesPullingOrderInfoService extends BaseMesService orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO); // if (orderResutlBean != null && orderResutlBean.isSuccess()) { // orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString(); @@ -197,69 +199,71 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Thu, 10 Oct 2024 17:50:23 +0800 Subject: [PATCH 087/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E5=AD=90?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesShippingOrderManagementDetailDaoImpl.java | 29 +++++++++++++--------- .../MesShippingOrderManagementDetailService.java | 1 - 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index 5c24489..314bbe8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -198,8 +198,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde " sd.plan_qty, " + " sd.actual_qty, " + " s.shipping_code, " + - " sd.part_no, " + - " sd.modify_date_time, " + + " sd.part_no " + " from mes_shipping_detail sd " + " left join mes_shipping s on s.id=sd.pid " + " WHERE sd.status in (20) " +//todo 发运 20 @@ -207,12 +206,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde hql.append(" and sd.organize_code = :organizeCode "); hql.append(" and sd.is_deleted = :isDeleted "); hql.append(" and sd.is_valid = :isValid "); - if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ - hql.append(" and sd.modify_date_time >= '"+detail.getModifyDateTimeStart()+"' "); - } - if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ - hql.append(" and sd.modify_date_time <= '"+detail.getModifyDateTimeEnd()+"' "); - } + if (!StringUtil.isEmpty(detail.getShippingCode())){ hql.append(" and s.shipping_code = '"+detail.getShippingCode()+"' "); } @@ -239,7 +233,6 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde model.setActualQty(StringUtils.isEmpty(cells[2]) ? 1 : Integer.parseInt(String.valueOf(cells[2]))); model.setShippingCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); model.setPartNo(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); - model.setModifyDatetime(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); modelList.add(model); } @@ -254,7 +247,12 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde hql.append(" WHERE wop.organize_code = :organizeCode "); hql.append(" and wop.is_deleted = :isDeleted "); hql.append(" and wop.is_valid = :isValid "); - + if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ + hql.append(" and wo.shipping_time >= '"+detail.getModifyDateTimeStart()+"' "); + } + if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ + hql.append(" and wo.shipping_time <= '"+detail.getModifyDateTimeEnd()+"' "); + } if (!StringUtil.isEmpty(detail.getPartNo())){ hql.append(" and wop.part_no ='"+detail.getPartNo()+"' "); } @@ -286,13 +284,19 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde " wo.work_center_code, " + " wop.part_no, " + " wop.part_name, " + - " wop.item_qty " + + " wop.item_qty, " + + " wo.shipping_time " + " from mes_work_order_part wop " + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); hql.append(" WHERE wop.organize_code = :organizeCode "); hql.append(" and wop.is_deleted = :isDeleted "); hql.append(" and wop.is_valid = :isValid "); - + if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ + hql.append(" and wo.shipping_time >= '"+detail.getModifyDateTimeStart()+"' "); + } + if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ + hql.append(" and wo.shipping_time <= '"+detail.getModifyDateTimeEnd()+"' "); + } if (!StringUtil.isEmpty(detail.getPartNo())){ hql.append(" and wop.part_no ='"+detail.getPartNo()+"' "); } @@ -320,6 +324,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde model.setPartNo(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); model.setPartName(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2])); model.setItemQty(StringUtils.isEmpty(cells[3]) ? 1 : Double.parseDouble(String.valueOf(cells[3]))); + model.setShippingTime(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); modelList.add(model); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index cbd0104..f48e606 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -134,7 +134,6 @@ public class MesShippingOrderManagementDetailService extends BaseMesService Date: Fri, 11 Oct 2024 09:35:39 +0800 Subject: [PATCH 088/180] =?UTF-8?q?=E4=BB=A3=E7=A0=81bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index acb91af..554dcbd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -439,7 +439,9 @@ public class MesWorkOrderCutService extends BaseMesService impl public void doUpdatePrintStatus(List cutWorkOrderIds, String organizeCode, String userName) { for (String cutWorkOrderId : cutWorkOrderIds) { - workOrderCutRepository.updateByProperties(MesExtConstWords.ID, Long.parseLong(cutWorkOrderId), + workOrderCutRepository.updateByProperties( + new String[]{MesExtConstWords.ID, MesExtConstWords.ORGANIZE_CODE}, + new Object[]{Long.parseLong(cutWorkOrderId), organizeCode}, new String[]{MesExtConstWords.IS_DELETED, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME, MesExtConstWords.SYSTEM_SYNC_STATUS, MesExtConstWords.PRINT_STATUS}, new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()}); } From 52ac7e42fde13bd60f3d602f6fa7c9f96b0c4e91 Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 11 Oct 2024 10:56:04 +0800 Subject: [PATCH 089/180] =?UTF-8?q?getById=E6=96=B9=E6=B3=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0organizeCode=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderService.java | 3 ++- .../MesToPiscesProductionAssembly.groovy | 4 +++- .../Mes2Pisces/MesToPiscesRawPartCharging.groovy | 15 +++++++++--- .../groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy | 4 +++- .../schedulejob/MesWorkOrderUpdateQtyJob.java | 2 +- .../serviceimpl/base/BaseMesService.java | 6 +++-- .../base/MesCustomerOriganzeService.java | 10 +++++++- .../serviceimpl/base/MesCustomerService.java | 11 ++++++++- .../serviceimpl/base/MesLoadingListService.java | 19 ++++++++------- .../base/MesShippingOrderManagementService.java | 27 +++++++++++++++------- .../base/MesWcEquipmentServiceImpl.java | 4 +++- .../serviceimpl/base/MesWorkOrderService.java | 13 ++--------- .../base/file/MesModuleExcelServiceImpl.java | 4 +++- .../serviceimpl/busi/MesSpotCheckOrderService.java | 11 ++++++--- 14 files changed, 88 insertions(+), 45 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index a64c721..378465e 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -37,7 +37,8 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); - MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo); + @ApiOperation("查询工单信息") + MesWorkOrder getMesWorkOrder(String workOrderNo,String organizeCode); @ApiOperation("反向冲销") void doReportWorkReversal(WmsProductModel model); diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy index 1f08b4d..98de858 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy @@ -67,7 +67,9 @@ class MesToPiscesProductionAssembly { if (!StringUtils.isEmpty(rowMap.get("production_record_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("production_record_id"))); if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(id)) { - mesProductionRecordMap.put(id, mesProductionRecordRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesProductionRecordMap.put(id, mesProductionRecordRepository.getByProperty(ddlPackBean)) } MesProductionRecord mesProductionRecord = mesProductionRecordMap.get(id) if (!Objects.isNull(mesProductionRecord)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy index a7158af..1c8bb30 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy @@ -1,3 +1,5 @@ +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack import cn.estsh.i3plus.pojo.mes.bean.MesRawPackage import cn.estsh.i3plus.pojo.mes.bean.MesRawPackageDetail import cn.estsh.i3plus.pojo.mes.bean.MesRawPackagePart @@ -37,12 +39,15 @@ class MesToPiscesRawPartCharging { Map mesRawPackageMap = new HashMap<>(); Map mesRawPackageDetailMap = new HashMap<>(); Map mesRawPackagePartMap = new HashMap<>(); + String organizeCode = mapper.getOrganizeCode(); for (Map rowMap : srcData) { //原材料容器 if (!StringUtils.isEmpty(rowMap.get("package_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("package_id"))); if (Objects.isNull(mesRawPackageMap) || !mesRawPackageMap.containsKey(id)) { - mesRawPackageMap.put(id, mesRawPackageRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesRawPackageMap.put(id, mesRawPackageRepository.getByProperty(ddlPackBean)) } MesRawPackage mesRawPackage = mesRawPackageMap.get(id) if (!Objects.isNull(mesRawPackage)) { @@ -59,7 +64,9 @@ class MesToPiscesRawPartCharging { if (!StringUtils.isEmpty(rowMap.get("package_detail_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("package_detail_id"))); if (Objects.isNull(mesRawPackageDetailMap) || !mesRawPackageDetailMap.containsKey(id)) { - mesRawPackageDetailMap.put(id, mesRawPackageDetailRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesRawPackageDetailMap.put(id, mesRawPackageDetailRepository.getByProperty(ddlPackBean)) } MesRawPackageDetail mesRawPackageDetail = mesRawPackageDetailMap.get(id) if (!Objects.isNull(mesRawPackageDetail)) { @@ -74,7 +81,9 @@ class MesToPiscesRawPartCharging { if (!StringUtils.isEmpty(rowMap.get("package_part_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("package_part_id"))); if (Objects.isNull(mesRawPackagePartMap) || !mesRawPackagePartMap.containsKey(id)) { - mesRawPackagePartMap.put(id, mesRawPackagePartRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesRawPackagePartMap.put(id, mesRawPackagePartRepository.getByProperty(ddlPackBean)) } MesRawPackagePart mesRawPackagePart = mesRawPackagePartMap.get(id) if (!Objects.isNull(mesRawPackagePart)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy index 9192253..db2f0c6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy @@ -57,7 +57,9 @@ class PiscesToMesWorkOrder { if (!StringUtils.isEmpty(rowMap.get("PRODUCT_GROUP_ID"))) { long id = Long.parseLong(String.valueOf(rowMap.get("PRODUCT_GROUP_ID"))) if (Objects.isNull(mesPartProdGroupMap) || !mesPartProdGroupMap.containsKey(id)) { - mesPartProdGroupMap.put(id, mesPartProdGroupRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesPartProdGroupMap.put(id, mesPartProdGroupRepository.getByProperty(ddlPackBean)) } MesPartProdGroup mesPartProdGroup = mesPartProdGroupMap.get(id) if (!Objects.isNull(mesPartProdGroup)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java index 8a0dc15..eff4af9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java @@ -83,7 +83,7 @@ public class MesWorkOrderUpdateQtyJob extends BaseMesScheduleJob { Map> map = recordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getWorkOrderNo)); List orders = new ArrayList<>(); map.forEach((k,v) -> { - MesWorkOrder workOrder = mesWorkOrderService.getWorkOrder(organizeCode, k); + MesWorkOrder workOrder = mesWorkOrderService.getMesWorkOrder(k,organizeCode); List productionRecords = getUnReportMesProduceSn(organizeCode, workOrder.getWorkOrderNo()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java index d124c48..8718c09 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IBaseMesService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -120,15 +121,16 @@ public abstract class BaseMesService implements IBaseMesServ public void deleteWeaklyById(Long id, String userName) { onDeleteId(id); //baseRDao.deleteWeaklyById(id, userName); - baseRDao.updateByProperties("id", id,new String[]{"isDeleted","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true)}); + baseRDao.updateByProperties(new String[]{"organizeCode", "id"}, new Object[]{AuthUtilExt.getOrganizeCode(), id}, new String[]{"isDeleted", "modifyUser", "modifyDatetime"}, new Object[]{CommonEnumUtil.VALID, userName, TimeTool.getNowTime(true)}); } @Override public void deleteWeaklyByIds(Long[] ids, String userName) { + String organizeCode = AuthUtilExt.getOrganizeCode(); for (Long id : ids) { onDeleteId(id); //baseRDao.deleteWeaklyById(id, userName); - baseRDao.updateByProperties("id", id,new String[]{"isDeleted","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true)}); + baseRDao.updateByProperties(new String[]{"organizeCode", "id"}, new Object[]{organizeCode, id}, new String[]{"isDeleted", "modifyUser", "modifyDatetime"}, new Object[]{CommonEnumUtil.VALID, userName, TimeTool.getNowTime(true)}); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java index 1e29e2e..9f08f5c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerOriganzeService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -15,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; /** * @author yinxiao @@ -77,7 +80,12 @@ public class MesCustomerOriganzeService extends BaseMesService implements I } protected void onDeleteId(Long id) { - MesCustomer mesCustomer = baseRDao.getById(id); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(AuthUtilExt.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean); + MesCustomer mesCustomer = baseRDao.getByProperty(ddlPackBean); + if(Objects.isNull(mesCustomer)){ + MesException.throwMesBusiException("ID【%s】客户信息不存在",id); + } //校验客户物料是否存在 DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesCustomer.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesCustomer.getCustCode(), "custCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java index ea283ff..3b6f0b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -15,7 +17,6 @@ import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.MesLoadingListDetailRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupRepository; import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -36,28 +37,24 @@ import java.util.Objects; @Slf4j public class MesLoadingListService extends BaseMesService implements IMesLoadingListService { - @Autowired private MesLoadingListDetailService detailService; - - @Autowired - private MesPartShippingGroupRepository partShippingGroupRepository; @Autowired private MesShippingOrderManagementRepository shippingOrderManagementRepository; @Autowired private MesLoadingListDetailRepository listDetailRepository; - + @Autowired + private IMesPartShippingGroupService mesPartShippingGroupService; @Autowired private ISyncFuncService syncFuncService; - @Override public MesLoadingList insert(MesLoadingList bean) { //插入前构造并校验数据 onInsertBean(bean); MesShippingOrderManagement shippingOrderManagement = bean.getShippingOrderNoList().get(0); - MesPartShippingGroup partShippingGroup = partShippingGroupRepository.getById(shippingOrderManagement.getPartShippingGroupId()); + MesPartShippingGroup partShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(shippingOrderManagement.getOrganizeCode(),shippingOrderManagement.getShippingGroupCode()); if (StringUtils.isEmpty(partShippingGroup)) { throw ImppExceptionBuilder.newInstance() @@ -156,9 +153,11 @@ public class MesLoadingListService extends BaseMesService implem @Override public void deleteWeaklyByIds(Long[] ids, String userName) { - + String organizeCode = AuthUtilExt.getOrganizeCode(); for (Long id : ids) { - MesLoadingList bean = baseRDao.getById(id); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id,"id",packBean); + MesLoadingList bean = baseRDao.getByProperty(packBean); if (StringUtils.isEmpty(bean)) continue; DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(bean.getId(), "pid", detailPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index a803ccb..59f859b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -193,9 +194,9 @@ public class MesShippingOrderManagementService extends BaseMesService im ValidatorBean.checkNotNull(item.getWorkCellCode(), "工作单元代码不能为空"); ValidatorBean.checkNotNull(item.getWorkCenterCode(), "工作中心代码不能为空"); //校验数据是否存在 - MesWcEquipment mesWcEquipmentDb = baseRDao.getById(item.getId()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(item.getId(),"id",ddlPackBean); + MesWcEquipment mesWcEquipmentDb = baseRDao.getByProperty(ddlPackBean); if (null == mesWcEquipmentDb || CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesWcEquipmentDb.getIsDeleted()) { MesException.throwMesBusiException("数据不存在"); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 10f5183..2bccc32 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -198,7 +198,7 @@ public class MesWorkOrderService extends BaseMesService implements @Override public MesWorkOrder update(MesWorkOrder bean) { - MesWorkOrder result = baseRDao.getById(bean.getId()); + MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode()); //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 if (result.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { if (!Objects.equals(bean.getQty(), result.getQty())) { @@ -1364,7 +1364,7 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } - private MesWorkOrder getMesWorkOrder(String workOrderNo, String organizeCode) { + public MesWorkOrder getMesWorkOrder(String workOrderNo, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); MesWorkOrder mesWorkOrder = baseRDao.getByProperty(packBean); @@ -1572,15 +1572,6 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderRDao.findByHqlWhere(packBean); } - @Override - public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { -// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - - DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); - return mesWorkOrderRDao.getByProperty(packBean); - } - private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) { MesMove move = new MesMove(); if (!Objects.isNull(mesPart)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java index 8568d9d..9ce908d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java @@ -70,7 +70,9 @@ public class MesModuleExcelServiceImpl extends BaseMesService im @Override public void updateModuleExcel(MultipartFile file, MesModuleExcel mesModuleExcel) { - MesModuleExcel moduleExcelManageDb = baseRDao.getById(mesModuleExcel.getId()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesModuleExcel.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesModuleExcel.getId(),"id",ddlPackBean); + MesModuleExcel moduleExcelManageDb = baseRDao.getByProperty(ddlPackBean); if (moduleExcelManageDb == null) { MesException.throwMesBusiException("ID【%s】记录不存在", mesModuleExcel.getId()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index 810defc..9a5280c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesEquipmentSpotCheckService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderPartService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderResultService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; @@ -190,7 +191,9 @@ public class MesSpotCheckOrderService extends BaseMesService public MesSpotCheckOrder update(MesSpotCheckOrder bean) { onUpdateBean(bean); //获取点检单 - MesSpotCheckOrder originBean = baseRDao.getById(bean.getId()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(bean.getId(), "id", ddlPackBean); + MesSpotCheckOrder originBean = baseRDao.getByProperty(ddlPackBean); if (StringUtils.isEmpty(originBean)) { throw ImppExceptionBuilder.newInstance() @@ -318,9 +321,11 @@ public class MesSpotCheckOrderService extends BaseMesService @Override public void deleteWeaklyByIds(Long[] ids, String userName) { - + String organizeCode = AuthUtilExt.getOrganizeCode(); for (Long id : ids) { - MesSpotCheckOrder bean = baseRDao.getById(id); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean); + MesSpotCheckOrder bean = baseRDao.getByProperty(ddlPackBean); if (StringUtils.isEmpty(bean)) continue; if (bean.getStatus() == MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue()) { From fd88e32efbc1457d3835e80c5078de6d75a2e9fe Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Fri, 11 Oct 2024 13:42:50 +0800 Subject: [PATCH 090/180] =?UTF-8?q?=E5=AF=B9=E5=88=97=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0carModelCode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index fbd474b..1b8efa3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -505,6 +505,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); for (String cellCode : cellCodeList) { MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); mesQueueOrder.setOrganizeCode(organizeCode); mesQueueOrder.setWorkCellCode(cellCode); From 4cf06dea83cc00e0dd6a00753dc739086b136941 Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 11 Oct 2024 14:17:26 +0800 Subject: [PATCH 091/180] =?UTF-8?q?=E9=80=9A=E7=94=A8V107Melos=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9B=91=E6=8E=A7=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/board/IMesYfBoardService.java | 7 +++ .../controller/board/MesBusiBoardController.java | 48 ++++++++++++++++++++ .../serviceimpl/board/IMesYfBoardServiceImpl.java | 28 ++++++++++++ .../model/board/MesGepicsInspectionInfoModel.java | 52 ++++++++++++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java index 54b1da3..5471e21 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java @@ -1,7 +1,11 @@ package cn.estsh.i3plus.ext.mes.api.busi.board; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesGepicsInspectionInfoModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -31,4 +35,7 @@ public interface IMesYfBoardService { MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel); + @ApiOperation("查询V107Melos数据监控") + ListPager queryGepicsInspectionInfo(MesGepicsInspectionInfoModel infoModel, Pager pager); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java new file mode 100644 index 0000000..b41b1b3 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.board; + +import cn.estsh.i3plus.ext.mes.api.busi.board.IMesYfBoardService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesGepicsInspectionInfoModel; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 报表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/11 13:58 + * @Modify: + **/ +@Api("报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/board") +public class MesBusiBoardController { + + @Autowired + private IMesYfBoardService mesYfBoardService; + + @ApiOperation(value = "查询V107Melos数据", notes = "查询V107Melos数据") + @PostMapping("/query-gepics-inspection-info") + public ResultBean queryGepicsInspectionInfo(@RequestBody MesGepicsInspectionInfoModel infoModel, Pager pager){ + try { + ValidatorBean.beginValid(infoModel) + .notNull("organizeCode", infoModel.getOrganizeCode()); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(mesYfBoardService.queryGepicsInspectionInfo(infoModel,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java index d3bce3d..5aa106f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java @@ -2,14 +2,20 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.board; import cn.estsh.i3plus.ext.mes.api.busi.board.IMesYfBoardService; import cn.estsh.i3plus.ext.mes.apiservice.dao.board.IMesYfBoardDao; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesGepicsInspectionInfoModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; 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.*; +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import org.apache.commons.lang3.StringUtils; @@ -52,6 +58,9 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { @Autowired private MesSpotCheckOrderRepository mesSpotCheckOrderRepository; + @Autowired + private MesCimGmGepicsRepository mesCimGmGepicsRepository; + private static final String START_TIME = "START_TIME"; private static final String END_TIME = "END_TIME"; @@ -336,6 +345,25 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { return resultModel; } + @Override + public ListPager queryGepicsInspectionInfo(MesGepicsInspectionInfoModel infoModel, Pager pager) { + //查询数据 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(infoModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(infoModel.getGaRule(), "gaRule", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.VALID, "status", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.VALID, "type", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + pager = PagerHelper.getPager(pager, mesCimGmGepicsRepository.findByHqlWhereCount(packBean)); + List mesCimGmGepicsList = mesCimGmGepicsRepository.findByHqlWherePage(packBean, pager); + if(CollectionUtils.isEmpty(mesCimGmGepicsList)){ + return new ListPager<>(new ArrayList<>(),pager); + } + //数据组装 + List modelList = new ArrayList<>(mesCimGmGepicsList.size()); + mesCimGmGepicsList.forEach(item -> modelList.add(new MesGepicsInspectionInfoModel(item))); + return new ListPager<>(modelList,pager); + } + /** * 获取看板查询时间区段 * @param timeRangeIdentification 显示维度 diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java new file mode 100644 index 0000000..6b3d918 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java @@ -0,0 +1,52 @@ +package cn.estsh.i3plus.ext.mes.pojo.model.board; + +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * @Description : 通用V107Melos数据监控Model + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/11 13:21 + * @Modify: + **/ +@Data +@ApiModel("通用V107Melos数据监控Model") +public class MesGepicsInspectionInfoModel { + @ApiParam("工厂代码") + private String organizeCode; + + @ApiModelProperty(name = "gaRule") + private String gaRule; + + @ApiParam("GA号") + private String gepicsCsnNo; + + @ApiParam("需求日期") + private String gepicsDate; + + @ApiParam("需求时间") + private String gepicsTime; + + @ApiParam("GA号") + private String melosCsnNo; + + @ApiParam("需求日期") + private String melosDate; + + @ApiParam("需求时间") + private String melosTime; + + public MesGepicsInspectionInfoModel(){ + + } + + public MesGepicsInspectionInfoModel(MesCimGmGepics mesCimGmGepics){ + this.gepicsCsnNo = mesCimGmGepics.getCsnNo(); + this.gepicsDate = mesCimGmGepics.getDate(); + this.gepicsTime = mesCimGmGepics.getTime(); + } +} From 598aa09f466e4ef983201a090a4fb071b5b84de4 Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 11 Oct 2024 18:02:08 +0800 Subject: [PATCH 092/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=E6=8E=92=E5=BA=8F=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java index da2e288..9504cc9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderAssemblyService; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; import lombok.extern.slf4j.Slf4j; @@ -21,6 +22,7 @@ public class MesWorkOrderAssemblyServiceImpl extends BaseMesService Date: Sat, 12 Oct 2024 10:34:30 +0800 Subject: [PATCH 093/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E5=AD=90?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/MesShippingOrderManagementDetailController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java index b03b915..318254c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java @@ -69,7 +69,7 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } } - @PostMapping(value = "/ship-part/query-item-part") + @GetMapping(value = "/ship-part/query-item-part") @ApiOperation(value = "发运零件子零件明细") public ResultBean queryDetailMesWorkOrderPart(@RequestBody MesWorkOrderPart detail, Pager pager) { try { @@ -84,7 +84,7 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } - @PostMapping(value = "/ship-order/query-item-part") + @GetMapping(value = "/ship-order/query-item-part") @ApiOperation(value = "发运单子零件明细") public ResultBean queryMesShippingOrderManagementDetail(@RequestBody MesWorkOrderPart detail, Pager pager) { try { From 370d30fa3e618cddedab2369f791dc85c754b09a Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sat, 12 Oct 2024 14:05:39 +0800 Subject: [PATCH 094/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E5=88=99=E5=A6=82=E6=9E=9C=E5=81=9A=E4=BA=86?= =?UTF-8?q?ptr=E5=88=99=E4=BD=BF=E7=94=A8PTR=E4=B8=AD=E7=9A=84=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E8=A7=84=E5=88=99=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 1b8efa3..bfb43a8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -379,6 +379,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { * 总成拆bom,变成子零件 * 替换子零件,通过替换后的零件,去找排序工艺 */ + Map ptrRuleListMap = new HashMap<>(); //是否修改为P单 boolean isModifyPOrder = false; //查询mes_part_ptr表,根据物料清单查找ptr替换信息 @@ -409,6 +410,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); + //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 for (MesPartPtr mesPartPtr : partPtrList) { //根据mesPartPtr的目标零件号,找到零件信息 @@ -421,11 +423,12 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderPart.setPartNo(mesPartSap.getPartNo()); orderPart.setPartName(mesPartSap.getPartName()); orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); if (!isModifyPOrder){ isModifyPOrder = true; } //更新mes_part_ptr的实际数量 + 1 - mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); partPtrRao.update(mesPartPtr); DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -490,6 +493,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); if (!assemblyList.isEmpty()) { for (MesWorkOrderAssembly orderAssembly : assemblyList) { + if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ + orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + } orderAssembly.setPartNo(mesWorkOrder.getPartNo()); orderAssembly.setPartName(mesWorkOrder.getPartName()); orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); From 7b56ed23f3ddf917ba4948c2fecd593ca3304fb9 Mon Sep 17 00:00:00 2001 From: gsz Date: Sat, 12 Oct 2024 15:44:21 +0800 Subject: [PATCH 095/180] =?UTF-8?q?=E6=8B=89=E5=8A=A8=E5=8D=95=E8=A1=A5?= =?UTF-8?q?=E6=89=93=E5=B9=B6=E4=B8=94=E6=8F=92=E5=85=A5PrintedSnLog?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesPullingOrderInfoService.java | 3 ++ .../base/MesPullingOrderInfoController.java | 32 +++++++++++++ ...MesShippingOrderManagementDetailController.java | 4 +- .../base/MesPullingOrderInfoService.java | 54 +++++++++++++++++++++- 4 files changed, 90 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java index ea59b67..a2741d3 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import java.util.List; import java.util.Map; /** @@ -14,4 +15,6 @@ public interface IMesPullingOrderInfoService extends IBaseMesService doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo, String userName); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java index aa1545f..f897c68 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java @@ -1,11 +1,23 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 拉动单 */ @@ -13,4 +25,24 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderInfo") public class MesPullingOrderInfoController extends BaseMesController { + @Autowired + private IMesPullingOrderInfoService mesPullingOrderInfoService; + + @GetMapping(value = "/doRePrint") + @ApiOperation(value = "拉动单补打") + public ResultBean doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo) { + try { + if (StringUtils.isEmpty(mesPullingOrderInfo.getPullingOrderNo())) { + throw new ImppBusiException("拉动单号不能为空"); + } + List pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoPrint(mesPullingOrderInfo, AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("拉动单打印成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(pullingOrderInfos); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java index 318254c..62010e7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java @@ -71,7 +71,7 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle @GetMapping(value = "/ship-part/query-item-part") @ApiOperation(value = "发运零件子零件明细") - public ResultBean queryDetailMesWorkOrderPart(@RequestBody MesWorkOrderPart detail, Pager pager) { + public ResultBean queryDetailMesWorkOrderPart(MesWorkOrderPart detail, Pager pager) { try { detail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); @@ -86,7 +86,7 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } @GetMapping(value = "/ship-order/query-item-part") @ApiOperation(value = "发运单子零件明细") - public ResultBean queryMesShippingOrderManagementDetail(@RequestBody MesWorkOrderPart detail, Pager pager) { + public ResultBean queryMesShippingOrderManagementDetail(MesWorkOrderPart detail, Pager pager) { try { detail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 6ebd6cf..8b41be7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -54,7 +54,8 @@ public class MesPullingOrderInfoService extends BaseMesService pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(pullingOrderPartInfos)) { + mesPullingOrder.setPartList(pullingOrderPartInfos); + } + resultMap.put("orderInfo", mesPullingOrder); resultMap.put("success", true); resultMap.put("message", message); return resultMap; } + @Override + public List doMesPullingOrderInfoPrint(MesPullingOrderInfo bean, String userName) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); +// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), "printStatus", packBean); + List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(pullingOrderInfos)) { + //把查出来的拉动单打印并修改打印状态为已打印 + List snLogList = new ArrayList<>(); + for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) { + //查询拉动组明细 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getPullingOrderNo(), "pullingOrderNo", partPackBean); + List pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + if (!org.springframework.util.CollectionUtils.isEmpty(pullingOrderPartInfos)) { + pullingOrderInfo.setPartCount(pullingOrderPartInfos.size()); + pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); + } + + pullingOrderInfo.setPrintTime(TimeTool.getNowTime(true)); + pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + pullingOrderInfo.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.serviceModelUpdate(pullingOrderInfo, userName); + + //10-12 打印补打拉动单新增log表 + MesPrintedSnLog snLog = new MesPrintedSnLog(); + snLog.setBarcode(pullingOrderInfo.getPullingOrderNo()); + snLog.setCustPartNo(pullingOrderInfo.getCustPartNo()); + snLog.setWorkOrderNo(pullingOrderInfo.getWorkOrderNo()); + snLog.setPartNo(pullingOrderInfo.getPartNo()); + snLog.setPartName(pullingOrderInfo.getPartName()); + ConvertBean.serviceModelInitialize(snLog, userName); + snLog.setOrganizeCode(bean.getOrganizeCode()); + snLogList.add(snLog); + + } + mesPullingOrderInfoRepository.saveAll(pullingOrderInfos); + //保存打印条码记录 + snLogRao.saveAll(snLogList); + } + return pullingOrderInfos; + } + } From df7c69878ae4376249cf66d7eca851e4c0afa82e Mon Sep 17 00:00:00 2001 From: gsz Date: Mon, 14 Oct 2024 10:26:21 +0800 Subject: [PATCH 096/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E5=AD=90?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../daoimpl/MesShippingOrderManagementDetailDaoImpl.java | 8 +++++--- .../serviceimpl/base/MesShippingOrderManagementDetailService.java | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index 314bbe8..7447201 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -202,7 +202,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde " from mes_shipping_detail sd " + " left join mes_shipping s on s.id=sd.pid " + " WHERE sd.status in (20) " +//todo 发运 20 - " and sd.bar_code != '' and bar_code is not NULL "); + " and sd.bar_code != '' and sd.bar_code is not NULL "); hql.append(" and sd.organize_code = :organizeCode "); hql.append(" and sd.is_deleted = :isDeleted "); hql.append(" and sd.is_valid = :isValid "); @@ -229,7 +229,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde Object[] cells = (Object[]) result; MesShippingOrderManagementDetail model = new MesShippingOrderManagementDetail(); model.setBarcode(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); - model.setPlanQty(StringUtils.isEmpty(cells[1]) ? 1 : Integer.parseInt(String.valueOf(cells[1]))); + model.setPlanQty(StringUtils.isEmpty(cells[1]) ? 1 : Double.parseDouble(String.valueOf(cells[1]))); model.setActualQty(StringUtils.isEmpty(cells[2]) ? 1 : Integer.parseInt(String.valueOf(cells[2]))); model.setShippingCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); model.setPartNo(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); @@ -285,7 +285,8 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde " wop.part_no, " + " wop.part_name, " + " wop.item_qty, " + - " wo.shipping_time " + + " wo.shipping_time, " + + " wop.mes_work_order " + " from mes_work_order_part wop " + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); hql.append(" WHERE wop.organize_code = :organizeCode "); @@ -325,6 +326,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde model.setPartName(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2])); model.setItemQty(StringUtils.isEmpty(cells[3]) ? 1 : Double.parseDouble(String.valueOf(cells[3]))); model.setShippingTime(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setWorkOrderNo(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); modelList.add(model); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index f48e606..e7875b0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -121,7 +121,6 @@ public class MesShippingOrderManagementDetailService extends BaseMesService Date: Mon, 14 Oct 2024 10:28:09 +0800 Subject: [PATCH 097/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E5=AD=90?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=98=8E=E7=BB=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index 7447201..e196c50 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -286,7 +286,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde " wop.part_name, " + " wop.item_qty, " + " wo.shipping_time, " + - " wop.mes_work_order " + + " wop.work_order_no " + " from mes_work_order_part wop " + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); hql.append(" WHERE wop.organize_code = :organizeCode "); From 3582d69d721387ec33c03b70fe52cd92d26550f9 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 15 Oct 2024 14:48:33 +0800 Subject: [PATCH 098/180] =?UTF-8?q?CBR,=E6=8E=92=E5=BA=8F=E6=8A=A5?= =?UTF-8?q?=E5=B7=A5=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesShippingOrderManagementService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index 59f859b..2382d12 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -321,7 +321,7 @@ public class MesShippingOrderManagementService extends BaseMesService Date: Tue, 15 Oct 2024 16:14:57 +0800 Subject: [PATCH 099/180] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E8=A7=A3=E7=BB=91=E5=B7=A5=E6=AD=A5[=E5=B7=A5=E6=AD=A5?= =?UTF-8?q?=E5=8F=82=E6=95=B0]=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 9b6a257..f4ef69d 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -252,8 +252,6 @@ public class MesExtConstWords { public static final String CUT_CODE = "cutCode"; // 裁片名称 public static final String CUT_NAME = "cutName"; - //拆解目标库位 - public static final String DISASSEMBLY_DEST_LOCATE = "DISASSEMBLY_DEST_LOCATE"; // 裁片工单号 public static final String CUT_WORK_ORDER_NO_FUL = "CUT_WORK_ORDER_NO"; // 条码 From bc7af545592e8bf1c5a3770a5b68ffd730ac0b7d Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 16 Oct 2024 15:58:04 +0800 Subject: [PATCH 100/180] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E8=A1=A5=E6=89=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 3a6ca11..f50d110 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1349,6 +1349,7 @@ public class MesWorkOrderService extends BaseMesService implements item.setCustNo(model.getCustNo()); item.setCustOrder(model.getCustOrderNo()); item.setDescription(nowTime); + item.setStgeLoc(item.getAlort()); item.setSystemSyncStatus(CommonEnumUtil.FALSE); item.setSystemSyncDatetime(""); ConvertBean.serviceModelInitialize(item, model.getUserName()); @@ -1396,7 +1397,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); - newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getReceiveInventoryPoint()); newMesProductOffLine.setQty(model.getQty()); newMesProductOffLine.setBomVersion(mesProductVersion.getProductVersion()); newMesProductOffLine.setSerialNumber(model.getSn()); From b1c10ef5ab87fa7e27078db3568b19233146c75f Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 19 Oct 2024 11:34:22 +0800 Subject: [PATCH 101/180] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=B7=A5=E5=8D=95=20?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E7=9A=84=20=E7=94=9F=E4=BA=A7=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=AD=97=E6=AE=B5=20=E4=B8=B4=E6=97=B6=E5=9D=87?= =?UTF-8?q?=E5=86=99=E5=80=BC=20=E5=90=8E=E7=BB=AD=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 4 ++++ .../serviceimpl/base/roundness/MesTimeRoundnessService.java | 1 + 2 files changed, 5 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index f50d110..2621f52 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -409,6 +409,7 @@ public class MesWorkOrderService extends BaseMesService implements //生产时间新增取当天 if (StringUtil.isEmpty(item.getProduceTime())) { item.setProduceTime(TimeTool.getToday()); + item.setProductTime(item.getProduceTime()); } item.setUnCompleteQty(item.getQty()); item.setFid(UUID.randomUUID().toString()); @@ -558,6 +559,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("时间格式异常"); } item.setProduceTime(item.getPlanDate()); + item.setProductTime(item.getProduceTime()); } @Override @@ -742,6 +744,7 @@ public class MesWorkOrderService extends BaseMesService implements //生产时间新增取当天 if (StringUtil.isEmpty(item.getProduceTime())) { item.setProduceTime(TimeTool.getToday()); + item.setProductTime(item.getProduceTime()); } //若工单类型为排序 if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { @@ -1665,6 +1668,7 @@ public class MesWorkOrderService extends BaseMesService implements item.setPartName(mesProductionRecord.getPartName()); //生产时间新增取当天 item.setProduceTime(TimeTool.getToday()); + item.setProductTime(item.getProduceTime()); item.setUnCompleteQty(0d); item.setQty(value.stream().mapToDouble(MesProductionRecord::getQty).sum()); item.setReportedQty(item.getQty()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java index 6cb8d85..567d3c4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java @@ -173,6 +173,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { Date parse = format.parse(matchTime); String productTime = format.format(parse); mesWorkOrder.setProductTime(productTime); + mesWorkOrder.setProduceTime(productTime); // 11. 是否将生成日期减一天 // 班次 根据产线+计划时间匹配班次 DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(detail.getOrganizeCode()); From e9a9e7827a8e148a77fa695efb3130a01de73533 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 19 Oct 2024 13:18:33 +0800 Subject: [PATCH 102/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=20=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E5=8F=B7=20=E5=AD=97=E6=AE=B5=20pojo=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=90=8D=E5=8F=98=E6=9B=B4=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AD=97=E6=AE=B5=E4=B8=8D=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesPullingOrderInfoService.java | 4 +-- .../serviceimpl/base/MesWorkOrderService.java | 36 +++++++++++----------- .../base/roundness/MesPackageRoundnessService.java | 4 +-- .../base/roundness/MesTimeRoundnessService.java | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 8b41be7..8a3ece4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -216,7 +216,7 @@ public class MesPullingOrderInfoService extends BaseMesService implements DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", orderPackBean); DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"produceSeq"}, orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); MesWorkOrder result = baseRDao.getByProperty(orderPackBean); //插入前构造数据 @@ -164,13 +164,13 @@ public class MesWorkOrderService extends BaseMesService implements //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); + Long productSeq = 0L; + if (null != result && result.getProductSeq() != null) { + productSeq = (long) Math.toIntExact(result.getProductSeq()); } MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); BeanUtils.copyProperties(bean, copyMesWorkOrder); - copyMesWorkOrder.setProduceSeq((long) (produceSeq + 1)); + copyMesWorkOrder.setProductSeq((long) (productSeq + 1)); copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); ConvertBean.serviceModelInitialize(copyMesWorkOrder, bean.getCreateUser()); @@ -178,11 +178,11 @@ public class MesWorkOrderService extends BaseMesService implements workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty()); return bean; } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); + Long productSeq = 0L; + if (null != result && result.getProductSeq() != null) { + productSeq = (long) Math.toIntExact(result.getProductSeq()); } - bean.setProduceSeq(produceSeq + 1); + bean.setProductSeq(productSeq + 1); GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); bean.setWorkOrderSeq(resultList.get(0)); @@ -590,18 +590,18 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(item.getWorkOrderStatus(), "workOrderStatus", orderPackBean); DdlPreparedPack.getStringEqualPack(item.getOrderFlag(), "orderFlag", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"produceSeq"}, orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); MesWorkOrder result = baseRDao.getByProperty(orderPackBean); //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); + Long productSeq = 0L; + if (null != result && result.getProductSeq() != null) { + productSeq = (long) Math.toIntExact(result.getProductSeq()); } MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); BeanUtils.copyProperties(item, copyMesWorkOrder); - copyMesWorkOrder.setProduceSeq((long) (produceSeq + 1)); + copyMesWorkOrder.setProductSeq(productSeq + 1); copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); ConvertBean.serviceModelInitialize(copyMesWorkOrder, item.getCreateUser()); index++; @@ -616,11 +616,11 @@ public class MesWorkOrderService extends BaseMesService implements continue; } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); + Long productSeq = 0L; + if (null != result && result.getProductSeq() != null) { + productSeq = (long) Math.toIntExact(result.getProductSeq()); } - item.setProduceSeq(produceSeq + 1); + item.setProductSeq(productSeq + 1); item.setWorkOrderSeq(seqList.get(index)); } item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index bfb43a8..efa4d40 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -482,7 +482,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); String proSeqStr = proSeqResultList.get(0); - mesWorkOrder.setProduceSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); + mesWorkOrder.setProductSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); @@ -525,7 +525,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); - mesQueueOrder.setProduceSeq(mesWorkOrder.getProduceSeq()); + mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java index 567d3c4..c33db46 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java @@ -136,7 +136,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { proSeqGenSerialNoModel.setDynamicRule("#"); List seqList = syncFuncService.syncSerialNo(proSeqGenSerialNoModel.organizeCode(detail.getOrganizeCode()), "edi", detail.getOrganizeCode(), 1).getResultList(); String prodSeqStr = seqList.get(0); - mesWorkOrder.setProduceSeq(Long.parseLong(prodSeqStr.substring(prodSeqStr.indexOf("#")+1))); + mesWorkOrder.setProductSeq(Long.parseLong(prodSeqStr.substring(prodSeqStr.indexOf("#")+1))); mesWorkOrder.setCustPartNo(sortInfos.get(0).getCustPartNo()); //标识 -空 //状态 --- 根据零件发运组看是自动发布 From effbe4561ab4c465cb429f8cf2a44d0d68d0fbd7 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 19 Oct 2024 13:38:12 +0800 Subject: [PATCH 103/180] =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D:?= =?UTF-8?q?=20=E5=8A=A0=E5=B7=A5=E8=A7=84=E5=88=99=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E5=8F=B7=E4=B8=8D=E8=83=BD=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java | 1 - .../mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java | 4 ++-- .../mes/apiservice/serviceimpl/base/MesProdRuleSortCfgService.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java index 9ba1234..2a72a5b 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.api.base; -import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; /** diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java index f8e9b39..b99f108 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java @@ -31,8 +31,8 @@ public class MesProdRuleNosortCfgService extends BaseMesService Date: Sat, 19 Oct 2024 17:36:28 +0800 Subject: [PATCH 104/180] =?UTF-8?q?CBR=E6=8A=A5=E5=B7=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/base/IMesProductOffLineService.java | 5 ++++- .../serviceimpl/base/MesProductOffLineServiceImpl.java | 11 +++++++++++ .../mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java index 0c77416..340c80e 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java @@ -14,6 +14,9 @@ import java.util.List; **/ public interface IMesProductOffLineService extends IBaseMesService{ - @ApiOperation("查询报工数据") + @ApiOperation("根据汇报条码查询报工数据") List findMesProductOffLineByProductSn(String productSn, String organizeCode); + + @ApiOperation("根据加工记录ID查询报工数据") + List findMesProductOffLineByRecordId(String recordId, String organizeCode); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java index 99c1fc8..1590805 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java @@ -30,4 +30,15 @@ public class MesProductOffLineServiceImpl extends BaseMesService findMesProductOffLineByRecordId(String recordId, String organizeCode) { + if(StringUtil.isEmpty(recordId) || StringUtil.isEmpty(organizeCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(recordId,"productionRecordId",packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue(),"reportType",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index f56b408..61c366a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1346,6 +1346,7 @@ public class MesWorkOrderService extends BaseMesService implements if (CollectionUtils.isEmpty(oldProductOffLineList)) { MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn()); } + oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode()); oldProductOffLineList.forEach(item -> { item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); item.setOrderNo(model.getShipOrderNo()); From 6a1779c6f0da6a13c4cbb7614dc0d40ad5684cd3 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 21 Oct 2024 09:52:14 +0800 Subject: [PATCH 105/180] =?UTF-8?q?=E7=BA=BF=E6=9C=AB=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/IMesEarlyWarningService.java | 55 +++ .../busi/MesEarlyWarningKanBanController.java | 121 +++++++ .../base/roundness/MesPackageRoundnessService.java | 1 + .../busi/MesEarlyWarningServiceImpl.java | 403 +++++++++++++++++++++ 4 files changed, 580 insertions(+) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java new file mode 100644 index 0000000..05c27c8 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; +import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; + +import java.text.ParseException; +import java.util.List; + +public interface IMesEarlyWarningService { + + /** + * 查询出需要轮询组的id 和 轮询的时间(切换组时查询一下) + * 如果idList 数量为1,时间则是定时刷新时间 + * + * 添加新的组时需要查询一下 + */ + List getEarlyWarningList(String organizeCode); + + /** + * 保存配置 + * @param model + */ + void saveEarlyWarning(MesEarlyWarningKanBanModel model); + + /** + * 更新配置 + * @param earlyWarning + */ + void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning); + + /** + * 软删配置 + */ + void deleteEarlyWarning(Long id, String organizeCode,String userName); + + /** + * 获取看板数据 + * @param id + */ + MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode); + + /** + * 获取看板数据 + * @param id + */ + MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException; + + /** + * 保存截图 + * @param model + */ + void savePicture(KanBanPictureModel model); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java new file mode 100644 index 0000000..37e802c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -0,0 +1,121 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesEarlyWarningServiceImpl; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; +import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; +import cn.estsh.impp.framework.boot.util.ResultBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.text.ParseException; +import java.util.List; + +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/earlyWarningKanBan") +public class MesEarlyWarningKanBanController { + + @Autowired + private MesEarlyWarningServiceImpl mesEarlyWarningService; + + /** + * 获取所有的线末大屏配置 + * + * @param organizeCode + * @return + */ + @GetMapping(path = "/list/{organizeCode}") + public ResultBean getEarlyWarningList(@PathVariable String organizeCode) { + List list; + try { + list = mesEarlyWarningService.getEarlyWarningList(organizeCode); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功").setResultList(list); + } + + /** + * 保存配置 + * + * @param model + * @return + */ + @PostMapping(path = "/save") + public ResultBean saveEarlyWarningList(@RequestBody MesEarlyWarningKanBanModel model) { + try { + mesEarlyWarningService.saveEarlyWarning(model); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功"); + } + + /** + * 更新配置 + * + * @param earlyWarning + */ + @PostMapping(path = "/update") + public ResultBean updateEarlyWarning(@RequestBody MesEarlyWarningKanBan earlyWarning) { + try { + mesEarlyWarningService.updateEarlyWarning(earlyWarning); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("更新成功"); + } + + /** + * 软删配置 + */ + @GetMapping(path = "/delete/{id}/{organizeCode}/{userName}") + public ResultBean deleteEarlyWarning(@PathVariable Long id, @PathVariable String organizeCode, @PathVariable String userName) { + try { + mesEarlyWarningService.deleteEarlyWarning(id, organizeCode, userName); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("删除成功"); + } + + + /** + * 获取看板配置 + */ + @GetMapping(path = "/get/{id}/{organizeCode}") + public ResultBean getKanbanData(@PathVariable Long id, @PathVariable String organizeCode) { + MesEarlyWarningKanBan kanbanData = null; + try { + kanbanData = mesEarlyWarningService.getKanbanData(id, organizeCode); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + + return ResultBean.success("查询成功").setResultObject(kanbanData); + } + + + @GetMapping(path = "/getData/{id}/{organizeCode}") + public ResultBean getData(@PathVariable Long id, @PathVariable String organizeCode) { + MesKanBanShowModel data = null; + try { + data = mesEarlyWarningService.getData(id, organizeCode); + } catch (Exception e) { + ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功").setResultObject(data); + } + + @PostMapping(path = "/save/picture") + public ResultBean savePicture(@RequestBody KanBanPictureModel kanBanPicture){ + try { + mesEarlyWarningService.savePicture(kanBanPicture); + } catch (Exception e) { + throw new RuntimeException(e); + } + return ResultBean.success("保存成功"); + } +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index efa4d40..82830d5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -531,6 +531,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); queueOrderRao.insert(mesQueueOrder); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java new file mode 100644 index 0000000..2647711 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -0,0 +1,403 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + + +import cn.estsh.i3plus.ext.mes.api.busi.IMesEarlyWarningService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; +import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.lang.reflect.InvocationTargetException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { + + @Autowired + private MesEarlyWarningKanBanRepository earlyWarningKanBanRao; + + @Autowired + private MesCimGmGepicsRepository cimGmGepicsRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private MesWorkOrderRepository workOrderRao; + + @Autowired + private EntityManager entityManager; + + @Autowired + private MesEarlyWarningRecordRepository earlyWarningRecordRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Override + public List getEarlyWarningList(String organizeCode) { + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + return earlyWarningKanBanRao.findByHqlWhere(ddlPackBean); + } + + @Override + public void saveEarlyWarning(MesEarlyWarningKanBanModel model) { + MesEarlyWarningKanBan kanBan = new MesEarlyWarningKanBan(); + try { + BeanUtils.copyProperties(kanBan,model); + } catch (IllegalAccessException | InvocationTargetException e) { + log.error(e.getMessage()); + MesException.throwMesBusiException("类型转换出错!"+e.getMessage()); + } + ConvertBean.saveOrUpdate(kanBan,model.getCreateUser()); + earlyWarningKanBanRao.insert(kanBan); + + } + + @Override + public void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning) { + ConvertBean.saveOrUpdate(earlyWarning,earlyWarning.getCreateUser()); + earlyWarningKanBanRao.insert(earlyWarning); + + } + + @Override + public void deleteEarlyWarning(Long id, String organizeCode,String userName) { + earlyWarningKanBanRao.deleteWeaklyByProperties(new String[]{"id","organizeCode"},new Object[]{id,organizeCode},userName); + } + + @Override + public MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode) { + List list = earlyWarningKanBanRao.findByProperty(new String[]{"id", "organizeCode"}, new Object[]{id, organizeCode}); + if (!list.isEmpty()){ + return list.get(0); + } + return new MesEarlyWarningKanBan(); + } + + @Override + public MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException { + DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean); + List list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1); + if (list.isEmpty()) { + return new MesKanBanShowModel(); + } + + MesEarlyWarningKanBan kanBan = list.get(0); + String jacInfoPoint = kanBan.getJacInfoPoint(); + int custOnlineInfo = kanBan.getCustOnlineInfo(); + String workCenterCode = kanBan.getWorkCenterCode(); + String workCellCode = kanBan.getWorkCellCode(); + //1.获取最近的20条v107信息 + List gmGepicsList = getlastDataList(1, jacInfoPoint, organizeCode, 20); + //2.获取最新的一条报文信息,取gmGepicsList的第一条 + MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0); + //3.获取最新的一条报文信息 + List gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1); + MesCimGmGepics lastOne = gmGepicsListOne.get(0); + if (lastOne==null){ + return new MesKanBanShowModel(); + } + //4.获取最新工位单号 获取工单的产线和工位的最新的工单 + MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); + //5.获取最新下线工单 + MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); + if (lastWorkOrder == null){ + //todo 暂时 + lastWorkOrder = lastOfflineOrder; + } + //6.查询报警产量 & 获取开班起始时间 + String dStart; + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String date = sdf.format(now); + String tempStartDatetime = date + " " + kanBan.getShiftStartTime() + ":00"; + Date shiftStartTime = sdf1.parse(tempStartDatetime); + //如果小于当前时间,显示前一天的统计 + Calendar calendar = Calendar.getInstance(); + if (shiftStartTime.before(now)) { + calendar.setTime(now); + calendar.add(Calendar.DATE, -1); + } else { + calendar.setTime(shiftStartTime); + } + String realEndTime = sdf1.format(calendar.getTime()); + //7.根据条件获取工单的数量 + Integer workCounts = getWorkCounts(realEndTime, organizeCode, workCenterCode); + + //8.查询报警产量 + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(now); + + int productCount = kanBan.getProductCount(); + int productDay = kanBan.getProductDay(); + calendar1.add(Calendar.DATE,-productDay); + List vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode); + //9.汇总数据 + return doGetSGMData(kanBan, gmGepicsList, lastCimGmGepics, lastOne, lastWorkOrder, lastOfflineOrder, workCounts, vehicleNoList); + } + + @Override + public void savePicture(KanBanPictureModel model) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(model.getId(),"id", ddlPackBean); + earlyWarningRecordRao.updateByProperties(new String[]{"picture"},new Object[]{model.getPicture()},ddlPackBean); + } + + /** + * 获取最新20条数据 + * @param type 固定 1 + * @param gaRule 信息点 + * @return + */ + private List getlastDataList(int type, String gaRule,String organizeCode,Integer count){ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(type,"type",ddlPackBean); + if (!StringUtils.isEmpty(gaRule)){ + DdlPreparedPack.getStringEqualPack(gaRule,"gaRule",ddlPackBean); + } + DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue(),CommonEnumUtil.ASC_OR_DESC.DESC.getValue()},new String[]{"createDatetime","rowNo"},ddlPackBean); + return cimGmGepicsRao.findByHqlTopWhere(ddlPackBean,count); + } + + /** + * 根据产线工位 查询最新的工单 + * 工单status 不是 40已关闭,90已拆解 状态 + * sort_flag 不是 E X 单 + * @param workCenterCode + * @param workCellCode + * @param organizeCode + * @return + */ + private MesWorkOrder getLastWorkOrder(String workCenterCode,String workCellCode,String organizeCode){ + //工单status 不是 40已关闭,90已拆解 状态 + //工单sort_flag 不是 E X单 + //工单order_type 类型为 排序单类型 + //工单 cust_order_code 不为空 + //工单 的id in装配件清单表中 工位等于@workCellCode 且 status = 1 + //工单 productSeq = work_order表中最大的排序信息 【work_order 的id in (装配件清单表中 工位等于@workCellCode 且 status = 1 已经装配) 产线=,order_type = 排序单,sort_flag 不为 x ,E;status not in 入参1,入参2,cust_order_code不为空】 + + // workOrderAssembly + DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean); + DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean); + List mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean); + List workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList()); + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); + + List orderFlagList = new ArrayList<>(); + orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); + orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + DdlPackBean queueOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean); + DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean); + DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), queueOrderPackBean); + //先查对列表,找到对应产线工位的工单 + List queueOrderList = queueOrderRao.findByHqlWhere(queueOrderPackBean); + //过滤掉关闭和拆解的工单 + List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",orderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderPackBean); + List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); + return !workOrderList.isEmpty() ? workOrderList.get(0) : null; + } + + private MesWorkOrder getLastOfflineOrder(String workCenterCode,String organizeCode){ + + List sortFlagList = new ArrayList<>(); + sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); + sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); + DdlPreparedPack.getNotInPack(sortFlagList,"orderFlag",workOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",workOrderPackBean); + List mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1); + return mesWorkOrders.get(0); + } + + private Integer getWorkCounts(String realEndTime,String organizeCode,String workCenterCode){ + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); + DdlPreparedPack.getStringBiggerPack(realEndTime,"endTime",workOrderPackBean); + DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue(),"orderFlag",workOrderPackBean); + + return workOrderRao.findByHqlWhereCount(workOrderPackBean); + } + + //报警产量 + private List getCLWarning(String date, int qty,String organizeCode) { + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + + StringBuilder hql = new StringBuilder(); + hql.append(" select carModelCode from MesWorkOrder"); + hql.append(" where organizeCode = :organizeCode"); + hql.append(" and createDatetime <= :createDatetime"); + hql.append(" and workOrderStatus in (:workOrderStatus)"); + hql.append(" and orderFlag != :sortFlag"); + hql.append(" group by carModelCode "); + hql.append(" having count(carModelCode) <= :qty"); + Query query = entityManager.createQuery(hql.toString()); + query.setParameter("workOrderStatus",orderStatusList); + query.setParameter("organizeCode",organizeCode); + query.setParameter("createDatetime", date); + query.setParameter("qty", (long)qty); + query.setParameter("sortFlag", MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + return (List)query.getResultList(); + } + + //汇总数据 + + /** + * + * @param infoV107List 报文信息 + * @param infoDD 最新报文信息 + * @param infoKH 最新客户上线信息 + * @param workOrder 最新工单 + * @param workOrderLast 最新下线工单 + * @param workCount 工单数量 + * @param vehicleNoList 报警 + */ + private MesKanBanShowModel doGetSGMData(MesEarlyWarningKanBan kanBan,List infoV107List,MesCimGmGepics infoDD, MesCimGmGepics infoKH, MesWorkOrder workOrder,MesWorkOrder workOrderLast,int workCount,List vehicleNoList) { + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + //是否截图 + boolean shortCut = false; + if (infoV107List.isEmpty()){ + return mesKanBanShowModel; + } + for (int i = 0; i < infoV107List.size()-1; i++) { + int preCsnNo = Integer.parseInt(infoV107List.get(i+1).getCsnNo().substring(3,10)); + int curCsnNo = Integer.parseInt(infoV107List.get(i).getCsnNo().substring(3,10)); + if (curCsnNo != preCsnNo+1){ + //需要保留截图 + //需要发声音 + mesKanBanShowModel.setVoice("跳号的声音"); + //需要发送记录信息 当前csnNo进行了跳号 + mesKanBanShowModel.setErrorMsg(String.format("当前CsnNo:%d进行了跳号",curCsnNo)); + break; + } + } +// if (infoDD == null){ +// return mesKanBanShowModel; +// } +// if (infoKH == null){ +// return mesKanBanShowModel; +// } +// if (workOrder == null){ +// return mesKanBanShowModel; +// } +// if (workOrderLast == null){ +// return mesKanBanShowModel; +// } + //最新v107信息 + String v107Msg = infoDD.getCsnNo() + " @ " + infoDD.getDate() + " " + infoDD.getTime(); + mesKanBanShowModel.setV107Msg(v107Msg); + //最新客户上线信息 + String infoKHCsnNo = infoKH.getCsnNo() + " @ " + infoKH.getDate() + " " + infoKH.getTime(); + mesKanBanShowModel.setInfoKHCsnNo(infoKHCsnNo); + //生产线 + String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription(); + mesKanBanShowModel.setWorkOrderCenter(workOrderCenter); + //供货缓冲 >= + Long supplyRedBuffer = kanBan.getSupplyRedBuffer(); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + //供货缓冲实际 + Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); + mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); + //成品缓冲文字颜色 + //private String realSupplyBufferColor; + //线头积单 + Long summaryWorkOrderRedCount = kanBan.getSummaryWorkOrderRedCount(); + mesKanBanShowModel.setSummaryWorkOrderRedCount(summaryWorkOrderRedCount); + //线头实际积单 + long summaryRealSupplyRealCount; + String custOrderNo = workOrder.getCustOrderNo(); + if(custOrderNo.length() >= 10){ + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); + }else { + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); + } + mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + //成品缓冲 + Long productionRedBuffer =kanBan.getProductionRedBuffer(); + mesKanBanShowModel.setProductionRedBuffer(productionRedBuffer); + //成品实际缓冲 + Long realProductionBuffer; + if (workOrderLast.getCustOrderNo().length() >= 10){ + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) - kanBan.getOnlineToShippingAdjustNum(); + }else { + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineToShippingAdjustNum(); + + } + mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); + //成品缓冲文字颜色 + //private String realProductionBufferColor; + //声音信息 + //private String voice; + //错误信息 + //private String errorMsg; + //截图地址 + String saveUrl = kanBan.getPictureUrl(); + mesKanBanShowModel.setShortCut(shortCut); + mesKanBanShowModel.setSaveUrl(saveUrl); + + if (kanBan.getRecord().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())){ + MesEarlyWarningRecord record = new MesEarlyWarningRecord(); + record.setWorkCenterCode(workOrderCenter); + record.setGaNo(infoDD.getCsnNo()); + record.setLastGaNo(infoKH.getCsnNo()); + ConvertBean.saveOrUpdate(record,"kanban"); + earlyWarningRecordRao.insert(record); + mesKanBanShowModel.setRecordId(record.getId()); + } + + return mesKanBanShowModel; + } +} From c7145fa51b148872e6ab87dbf8f4911635fa91f8 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 21 Oct 2024 18:01:21 +0800 Subject: [PATCH 106/180] =?UTF-8?q?=E7=BA=BF=E6=9C=AB=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/IMesEarlyWarningService.java | 2 +- .../busi/MesEarlyWarningKanBanController.java | 2 +- .../busi/MesEarlyWarningServiceImpl.java | 82 +++++++++++++++------- 3 files changed, 60 insertions(+), 26 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java index 05c27c8..abd53fc 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java @@ -45,7 +45,7 @@ public interface IMesEarlyWarningService { * 获取看板数据 * @param id */ - MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException; + MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException; /** * 保存截图 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java index 37e802c..19bec4d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -102,7 +102,7 @@ public class MesEarlyWarningKanBanController { public ResultBean getData(@PathVariable Long id, @PathVariable String organizeCode) { MesKanBanShowModel data = null; try { - data = mesEarlyWarningService.getData(id, organizeCode); + data = mesEarlyWarningService.doGetData(id, organizeCode); } catch (Exception e) { ResultBean.fail(e.getMessage()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 2647711..537b9ae 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -100,7 +100,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } @Override - public MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException { + public MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException { DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean); List list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1); @@ -132,7 +132,6 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { lastWorkOrder = lastOfflineOrder; } //6.查询报警产量 & 获取开班起始时间 - String dStart; Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -205,12 +204,13 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //工单 productSeq = work_order表中最大的排序信息 【work_order 的id in (装配件清单表中 工位等于@workCellCode 且 status = 1 已经装配) 产线=,order_type = 排序单,sort_flag 不为 x ,E;status not in 入参1,入参2,cust_order_code不为空】 // workOrderAssembly - DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean); - DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean); - List mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean); - List workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList()); +// DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean); +// DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean); +// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean); +// List mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean); +// //todo 有内存溢出风险 调试一下,写hql按照分组查询出workOrderNoList +// List workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList()); List orderStatusList = new ArrayList<>(); orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); @@ -219,14 +219,15 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); DdlPackBean queueOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); +// DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean); DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue(),"status",queueOrderPackBean); DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), queueOrderPackBean); //先查对列表,找到对应产线工位的工单 - List queueOrderList = queueOrderRao.findByHqlWhere(queueOrderPackBean); + List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,20); //过滤掉关闭和拆解的工单 List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -264,7 +265,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); - DdlPreparedPack.getStringBiggerPack(realEndTime,"endTime",workOrderPackBean); + DdlPreparedPack.getStringBiggerPack(realEndTime,"offlineTime",workOrderPackBean); DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue(),"orderFlag",workOrderPackBean); return workOrderRao.findByHqlWhereCount(workOrderPackBean); @@ -273,8 +274,10 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //报警产量 private List getCLWarning(String date, int qty,String organizeCode) { List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); - orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); StringBuilder hql = new StringBuilder(); hql.append(" select carModelCode from MesWorkOrder"); @@ -312,18 +315,23 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { if (infoV107List.isEmpty()){ return mesKanBanShowModel; } + StringBuilder errorMsg = new StringBuilder(); for (int i = 0; i < infoV107List.size()-1; i++) { int preCsnNo = Integer.parseInt(infoV107List.get(i+1).getCsnNo().substring(3,10)); int curCsnNo = Integer.parseInt(infoV107List.get(i).getCsnNo().substring(3,10)); if (curCsnNo != preCsnNo+1){ //需要保留截图 //需要发声音 - mesKanBanShowModel.setVoice("跳号的声音"); //需要发送记录信息 当前csnNo进行了跳号 - mesKanBanShowModel.setErrorMsg(String.format("当前CsnNo:%d进行了跳号",curCsnNo)); - break; + errorMsg.append(String.format("当前CsnNo:%d进行了跳号;\n",curCsnNo)); } } + if (errorMsg.length()>0){ + shortCut = true; + mesKanBanShowModel.setVoice("跳号的声音"); + } + mesKanBanShowModel.setErrorMsg(errorMsg.toString()); + // if (infoDD == null){ // return mesKanBanShowModel; // } @@ -337,22 +345,28 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { // return mesKanBanShowModel; // } //最新v107信息 - String v107Msg = infoDD.getCsnNo() + " @ " + infoDD.getDate() + " " + infoDD.getTime(); + String v107Msg = infoDD.getCsnNo() + "@" + infoDD.getDate() + " " + infoDD.getTime(); mesKanBanShowModel.setV107Msg(v107Msg); //最新客户上线信息 - String infoKHCsnNo = infoKH.getCsnNo() + " @ " + infoKH.getDate() + " " + infoKH.getTime(); + String infoKHCsnNo = infoKH.getCsnNo() + "@" + infoKH.getDate() + " " + infoKH.getTime(); mesKanBanShowModel.setInfoKHCsnNo(infoKHCsnNo); //生产线 - String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription(); + String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription(); mesKanBanShowModel.setWorkOrderCenter(workOrderCenter); //供货缓冲 >= Long supplyRedBuffer = kanBan.getSupplyRedBuffer(); + Long supplyYellowBuffer = kanBan.getSupplyYellowBuffer(); mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); //供货缓冲实际 - Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); + Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); - //成品缓冲文字颜色 - //private String realSupplyBufferColor; + if (realSupplyBuffer < supplyRedBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("RED"); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + }else if (realSupplyBuffer < supplyYellowBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("YELLOW"); + mesKanBanShowModel.setSupplyRedBuffer(supplyYellowBuffer); + } //线头积单 Long summaryWorkOrderRedCount = kanBan.getSummaryWorkOrderRedCount(); mesKanBanShowModel.setSummaryWorkOrderRedCount(summaryWorkOrderRedCount); @@ -365,6 +379,13 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); } mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + Long summaryWorkOrderYellowCount = kanBan.getSummaryWorkOrderYellowCount(); + if (summaryRealSupplyRealCount > summaryWorkOrderRedCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("RED"); + }else if (summaryRealSupplyRealCount > summaryWorkOrderYellowCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("YELLOW"); + } + //成品缓冲 Long productionRedBuffer =kanBan.getProductionRedBuffer(); mesKanBanShowModel.setProductionRedBuffer(productionRedBuffer); @@ -377,8 +398,12 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); - //成品缓冲文字颜色 - //private String realProductionBufferColor; + Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); + if (realProductionBuffer < productionRedBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("RED"); + }else if (realProductionBuffer < productionYellowBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("YELLOW"); + } //声音信息 //private String voice; //错误信息 @@ -390,14 +415,23 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { if (kanBan.getRecord().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())){ MesEarlyWarningRecord record = new MesEarlyWarningRecord(); + //供货缓冲实际值 + record.setRealSupplyBuffer(realSupplyBuffer); + //实际积累 + record.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + //成品缓冲 + record.setRealProductionBuffer(realProductionBuffer); + // 告警数量 + record.setWorkOrderCount((long)workCount); record.setWorkCenterCode(workOrderCenter); record.setGaNo(infoDD.getCsnNo()); record.setLastGaNo(infoKH.getCsnNo()); + record.setRemark(kanBan.getId().toString()); ConvertBean.saveOrUpdate(record,"kanban"); earlyWarningRecordRao.insert(record); mesKanBanShowModel.setRecordId(record.getId()); } - + mesKanBanShowModel.setTotalCount((long)workCount); return mesKanBanShowModel; } } From 3c10e80081434864c460df68ef2fb64d18cb6ee4 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 22 Oct 2024 16:22:23 +0800 Subject: [PATCH 107/180] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesProdRuleSortCfgService.java | 60 +++++++--------------- .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 6 +++ 2 files changed, 25 insertions(+), 41 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleSortCfgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleSortCfgService.java index 858d818..bc19209 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleSortCfgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleSortCfgService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesProdRuleSortCfgService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -18,10 +19,12 @@ import java.util.List; public class MesProdRuleSortCfgService extends BaseMesService implements IMesProdRuleSortCfgService { protected void setPackQueryBean(MesProdRuleSortCfg bean, DdlPackBean packBean) { - DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); - DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartNo(), "assemblyPartNo", packBean); - DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartName(), "assemblyPartName", packBean); - + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getProcessCode(), MesExtConstWords.PROCESS_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getCraftCode(), MesExtConstWords.CRAFT_CODE, packBean); + DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartNo(), MesExtConstWords.ASSEMBLY_PART_NO, packBean); + DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartName(), MesExtConstWords.ASSEMBLY_PART_NAME, packBean); } @Override @@ -34,52 +37,27 @@ public class MesProdRuleSortCfgService extends BaseMesService beanList) { for (MesProdRuleSortCfg item : beanList) { - // 数据校验 - //ValidatorBean.checkNotNull(item.getInPartNo(), "进件零件号不能为空"); - ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线不能为空"); - ValidatorBean.checkNotNull(item.getWorkCellCode(), "工位不能为空"); - ValidatorBean.checkNotNull(item.getAssemblyPartNo(), "零件号不能为空"); - - DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", seriesPackBean); - DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", seriesPackBean); - DdlPreparedPack.getStringEqualPack(item.getAssemblyPartNo(), "assemblyPartNo", seriesPackBean); - - - boolean flg = baseRDao.isExitByHql(seriesPackBean); - if (flg) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("该排序加工规则已存在,请检查数据") - .build(); - } + onInsertBean(item); } } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index f4ef69d..7ea5676 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -89,6 +89,8 @@ public class MesExtConstWords { public static final String PROCESS_CODE = "processCode"; //工序名称 public static final String PROCESS_NAME = "processName"; + //工艺代码 + public static final String CRAFT_CODE = "craftCode"; //数量 public static final String QTY = "qty"; //完成数量 @@ -145,6 +147,10 @@ public class MesExtConstWords { public static final String CFG_KEY = "cfgKey"; //配置类型 public static final String CFG_TYPE = "cfgType"; + //装配件零件号 + public static final String ASSEMBLY_PART_NO = "assemblyPartNo"; + //装配件零件名称 + public static final String ASSEMBLY_PART_NAME = "assemblyPartName"; //时间[开始/结束]条件 public static final String START_TIME_START = "startTimeStart"; From 1ada83322a2101bad596f809af93c9c6b6cdc2ba Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 23 Oct 2024 10:20:55 +0800 Subject: [PATCH 108/180] =?UTF-8?q?=E5=BA=94=E6=80=A5=E4=BB=B6=E5=BA=93?= =?UTF-8?q?=E4=BD=8D=E7=AE=A1=E7=90=86=E6=BC=94=E7=A4=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesPullingOrderInfoService.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 8a3ece4..d195ac7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -1,16 +1,10 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; -import cn.estsh.i3plus.ext.mes.api.base.IMesPartPullService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; -import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; -import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; -import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; -import cn.estsh.i3plus.platform.common.util.WmsConstWords; -import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -18,10 +12,9 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.util.CollectionUtils; import org.slf4j.Logger; @@ -304,7 +297,7 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Wed, 23 Oct 2024 16:05:18 +0800 Subject: [PATCH 109/180] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=B2=A1=E5=8A=A0=E5=B7=A5=E5=8E=82=E4=BB=A3=E7=A0=81=E6=8E=92?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesToPiscesMesLoadingListDetail.groovy | 4 +++- .../Mes2Pisces/MesToPiscesMesShippingDetail.groovy | 4 +++- .../schedulejob/MesDefectAlarmConfigJob.java | 18 +------------- .../MesSendOutTimeReworkOrderEmailJob.java | 3 +-- .../base/MesLabelTemplateServiceImpl.java | 2 +- .../serviceimpl/base/MesPartService.java | 2 +- .../serviceimpl/base/MesProductVersionService.java | 2 +- .../serviceimpl/base/MesQmsSuspiciousService.java | 4 +++- .../serviceimpl/base/MesWorkOrderCutService.java | 24 ++++--------------- .../serviceimpl/busi/ProdExtOrgService.java | 5 +++- .../strategy/CutWorkOrderNoPrintStrategy.java | 28 ++++++++++------------ 11 files changed, 34 insertions(+), 62 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy index 6b0c7b7..ec1d06f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy @@ -53,7 +53,9 @@ class MesToPiscesMesLoadingListDetail { if (!StringUtils.isEmpty(rowMap.get("pid"))) { long id = Long.parseLong(String.valueOf(rowMap.get("pid"))); if (Objects.isNull(mesLoadingListMap) || !mesLoadingListMap.containsKey(id)) { - mesLoadingListMap.put(id, mesLoadingListRepository.getById(id)) + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",packBean) + mesLoadingListMap.put(id, mesLoadingListRepository.getByProperty(packBean)) } MesLoadingList mesLoadingList = mesLoadingListMap.get(id) if (!Objects.isNull(mesLoadingList)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy index 7c6a304..fa4269e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy @@ -51,7 +51,9 @@ class MesToPiscesMesShippingDetail { if (!StringUtils.isEmpty(rowMap.get("pid"))) { long id = Long.parseLong(String.valueOf(rowMap.get("pid"))); if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(id)) { - mesProductionRecordMap.put(id, mesShippingRepository.getById(id)) + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",packBean) + mesProductionRecordMap.put(id, mesShippingRepository.getByProperty(packBean)) } MesShippingOrderManagement mesProductionRecord = mesProductionRecordMap.get(id) if (!Objects.isNull(mesProductionRecord)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java index a3a9b67..e8de73e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java @@ -58,22 +58,7 @@ public class MesDefectAlarmConfigJob extends BaseMesScheduleJob { throw new IllegalArgumentException("jobc参数为空,请检查参数"); } - Map paramMap = new HashMap<>(); - - try { - paramMap = (Map) JSONObject.parse(jobParam); - } catch (Exception e) { - LOGGER.error("参数格式不是JSON"); - return; - - } - - if (CollectionUtils.isEmpty(paramMap)) { - LOGGER.error("检测数据同步定时任务,没有配置参数"); - return; - } - - List organizeCodeList = (List) paramMap.get("org"); + String[] organizeCodeList = jobParam.split(","); for (String organizeCode : organizeCodeList) { @@ -83,7 +68,6 @@ public class MesDefectAlarmConfigJob extends BaseMesScheduleJob { } catch (Exception e) { LOGGER.error("SAP接口表数据同步作业任务结束e:{}", e.toString()); - //sendErrorMessage(e.toString()); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java index 44aba01..79432b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java @@ -92,8 +92,7 @@ public class MesSendOutTimeReworkOrderEmailJob extends BaseMesScheduleJob { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); packBean.setWhereAppend(packBean.getWhereAppend() + " and model.createDatetime <= '" + TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -minutes)) + "'"); - List mesReworkTaskList = mesReworkTaskRepository.findByHqlWhere(packBean); - return mesReworkTaskList; + return mesReworkTaskRepository.findByHqlWhere(packBean); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java index 309eddc..706961f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java @@ -72,7 +72,7 @@ public class MesLabelTemplateServiceImpl extends BaseMesService params = mesLabelTemplateParamRDao.findByHqlWhere(templateParamPackBean); mesLabelTemplate.setLabelTemplateParamList(params); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java index fd0b691..ff14373 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java @@ -83,7 +83,7 @@ public class MesPartService extends BaseMesService implements IMesPartS @Override public ListPager queryMesPartByPagerExt(MesPart mesPart, Pager pager) { - DdlPackBean partQueryPackBean = DdlPackBean.getDdlPackBean(); + DdlPackBean partQueryPackBean = DdlPackBean.getDdlPackBean(mesPart.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesPart.getIsValid(), "isValid", partQueryPackBean); DdlPreparedPack.getStringLikerPack(mesPart.getPartNo(), "partNo", partQueryPackBean); DdlPreparedPack.getStringLikerPack(mesPart.getPartName(), "partName", partQueryPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java index 26e518a..d72dc67 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java @@ -33,7 +33,7 @@ public class MesProductVersionService extends BaseMesService @Override public ListPager queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager) { - DdlPackBean productVersionQueryPackBean = DdlPackBean.getDdlPackBean(); + DdlPackBean productVersionQueryPackBean = DdlPackBean.getDdlPackBean(mesProductVersion.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesProductVersion.getIsValid(), "isValid", productVersionQueryPackBean); DdlPreparedPack.getStringLikerPack(mesProductVersion.getProductVersion(), "productVersion", productVersionQueryPackBean); DdlPreparedPack.getStringLikerPack(mesProductVersion.getPartNo(), "partNo", productVersionQueryPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java index b067db4..d2018a6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java @@ -182,7 +182,9 @@ public class MesQmsSuspiciousService extends BaseMesService im } //计算返工数量 if (mesPartInspection.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()) { - MesReworkTask reworkTask = mesReworkTaskRepository.getById(mesPartInspection.getReworkTaskId()); + packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartInspection.getReworkTaskId(),"id",packBean); + MesReworkTask reworkTask = mesReworkTaskRepository.getByProperty(packBean); if (!StringUtil.isEmpty(reworkTask)) { //返工是否完成 if (reworkTask.getStatus() == MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index 554dcbd..c5462d3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesLabelTemplateService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; @@ -60,13 +61,10 @@ public class MesWorkOrderCutService extends BaseMesService impl private MesWorkOrderCutDetailRepository workOrderCutDetailRepository; @Autowired - private MesLabelTemplateRepository labelTemplateRepository; - - @Autowired - private MesLabelTemplateParamRepository labelTemplateParamRepository; + private IMesPrintedSnLogRepository printedSnLogRepository; @Autowired - private IMesPrintedSnLogRepository printedSnLogRepository; + private IMesLabelTemplateService mesLabelTemplateService; protected void setPackQueryBean(MesWorkOrderCut bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); @@ -370,7 +368,7 @@ public class MesWorkOrderCutService extends BaseMesService impl MesCutScheme cutScheme = entry.getValue(); List workOrderCutList = workOrderCutMapByCutCode.get(cutScheme.getCutCode()); - MesLabelTemplate labelTemplate = getLabelTemplate(cutScheme.getTemplateCode(), organizeCode); + MesLabelTemplate labelTemplate = mesLabelTemplateService.getLabelTemplate(cutScheme.getTemplateCode(), organizeCode); //模板信息丢失抛出异常 if (labelTemplate == null) @@ -421,20 +419,6 @@ public class MesWorkOrderCutService extends BaseMesService impl } - private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { - DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(templateCode, MesExtConstWords.TEMPLATE_CODE, templatePackBean); - MesLabelTemplate mesLabelTemplate = labelTemplateRepository.getByProperty(templatePackBean); - if (mesLabelTemplate != null) { - //级联获取labelTemplateParam - DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); - List params = labelTemplateParamRepository.findByHqlWhere(templateParamPackBean); - mesLabelTemplate.setLabelTemplateParamList(params); - } - return mesLabelTemplate; - } - @Override public void doUpdatePrintStatus(List cutWorkOrderIds, String organizeCode, String userName) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java index 21e8694..9711233 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.api.busi.IProdExtOrgService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.dao.IEquipmentExtDao; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.api.iservice.base.IEnumService; @@ -222,7 +223,9 @@ public class ProdExtOrgService implements IProdExtOrgService { public MesArea updateMesArea(MesArea mesArea) { //对id做有效性校验 - MesArea mesAreaDb = areaRepository.getById(mesArea.getId()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(AuthUtilExt.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesArea.getId(),"id",packBean); + MesArea mesAreaDb = areaRepository.getByProperty(packBean); if (mesAreaDb == null) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java index 2a2ec06..38147d2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -58,9 +58,9 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic - Map> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList); + Map> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList,model.getOrganizeCode()); - List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList, model.getOrganizeCode()); //根据裁片方案代码对裁片方案原材料分组 Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); @@ -151,12 +151,11 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic return val == null ? "" : val.toString(); } - private Map> getCutSchemeFgMapByCutCode(List cutCodeList) { - List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList); + private Map> getCutSchemeFgMapByCutCode(List cutCodeList,String organizeCode) { + List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList,organizeCode); //根据裁片方案代码对裁片方案成品明细分组 - Map> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); - return cutSchemeFgMapByCutCode; + return cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); } private BigDecimal[] divideAndRemainder(Double qty, Double packageQty) { @@ -178,22 +177,19 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic private List getMesCutSchemeEquipments(MesProduceSnPrintModel model, List cutCodeList) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); - List cutSchemeEquipmentList = cutSchemeEquipmentRepository.findByHqlWhere(packBean); - return cutSchemeEquipmentList; + return cutSchemeEquipmentRepository.findByHqlWhere(packBean); } - private List getMesCutSchemeMaterials(List cutCodeList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + private List getMesCutSchemeMaterials(List cutCodeList,String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); - List cutSchemeMaterialList = cutSchemeMaterialRepository.findByHqlWhere(packBean); - return cutSchemeMaterialList; + return cutSchemeMaterialRepository.findByHqlWhere(packBean); } - private List getMesCutSchemeFgs(List cutCodeList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + private List getMesCutSchemeFgs(List cutCodeList,String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); - List cutSchemeFgList = cutSchemeFgRepository.findByHqlWhere(packBean); - return cutSchemeFgList; + return cutSchemeFgRepository.findByHqlWhere(packBean); } private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { From bc6b3dc5ad6864328e327afa8976e35fa29e7de3 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 24 Oct 2024 18:26:47 +0800 Subject: [PATCH 110/180] =?UTF-8?q?=E5=A4=A9=E6=A1=A5=E6=95=B0=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/busi/report/IMesYfReportService.java | 4 + .../controller/report/MesBusiReportController.java | 17 ++++ .../serviceimpl/base/MesWorkOrderService.java | 97 +++++++++++++++++----- .../serviceimpl/report/MesYfReportServiceImpl.java | 17 ++++ 4 files changed, 116 insertions(+), 19 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java index ae548a6..8a55bd7 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultM import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; @@ -48,4 +49,7 @@ public interface IMesYfReportService { @ApiOperation("产品加工记录") ListPager queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager); + + @ApiOperation("看板数据") + ListPager queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java index ff543c0..1449d7f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData; import cn.estsh.i3plus.pojo.mes.bean.MesDowntimeRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; @@ -25,6 +26,7 @@ import org.apache.commons.collections.CollectionUtils; import org.drools.core.rule.Collect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -148,4 +150,19 @@ public class MesBusiReportController extends MesBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + + @ApiOperation(value = "看板数据", notes = "看板数据") + @PostMapping("/mesCokpitKanbanData/query") + public ResultBean queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager) { + try { + ValidatorBean.beginValid(kanbanData) + .notNull("organizeCode", kanbanData.getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesCokpitKanbanData(kanbanData,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 61c366a..5b8440f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -16,6 +16,7 @@ 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.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -145,6 +146,9 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesPrintedSnLogRepository printedSnLogRepository; + @Autowired + private SnowflakeIdMaker snowflakeIdMaker; + @Override public MesWorkOrder insert(MesWorkOrder bean) { //校验产线与工位的关系 @@ -912,7 +916,7 @@ public class MesWorkOrderService extends BaseMesService implements //查询产线信息 MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode()); //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //报工类型 @@ -1012,7 +1016,7 @@ public class MesWorkOrderService extends BaseMesService implements } } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成条码 @@ -1022,6 +1026,7 @@ public class MesWorkOrderService extends BaseMesService implements List mesMoveList = new ArrayList<>(); boolean isReport = false; boolean isMove = false; + String nowTime = TimeTool.getNowTime(true); //排序工单 if (MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()) { //报工类型 @@ -1038,7 +1043,7 @@ public class MesWorkOrderService extends BaseMesService implements isReport = true; isMove = true; } else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) { - customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList); + customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,true); } else { log.info("工单{}排序加工规则报工类型未维护", mesWorkOrder.getWorkOrderNo()); return; @@ -1049,7 +1054,6 @@ public class MesWorkOrderService extends BaseMesService implements MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); //成品汇报 if (isReport) { - String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size())); } @@ -1064,11 +1068,11 @@ public class MesWorkOrderService extends BaseMesService implements } else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) { MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) { - String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size())); } - + }else if(MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleNoSortCfg.getReportType()) { + customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,false); } } else { log.info("工单{}排序规则不属于排序工单和非排序工单", mesWorkOrder.getWorkOrderNo()); @@ -1346,7 +1350,7 @@ public class MesWorkOrderService extends BaseMesService implements if (CollectionUtils.isEmpty(oldProductOffLineList)) { MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn()); } - oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode()); + //oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode()); oldProductOffLineList.forEach(item -> { item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); item.setOrderNo(model.getShipOrderNo()); @@ -1430,10 +1434,11 @@ public class MesWorkOrderService extends BaseMesService implements return mesProductVersion; } - private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, String sn, List mesProductOffLineList, List mesMoveList) { + private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, String sn, List mesProductOffLineList, List mesMoveList,String nowTime,boolean isSort) { boolean isItemMove; boolean isItemReport; MesMoveRule moveRule; + MesPart itemPart; //查询零件生产组的移库规则 List moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode()); Map> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType)); @@ -1446,8 +1451,9 @@ public class MesWorkOrderService extends BaseMesService implements isItemReport = false; isItemMove = false; moveRule = null; + itemPart = null; if (itemPartMap.containsKey(mesBom.getItemPartNo())) { - MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); + itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) { moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next(); if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) { @@ -1461,9 +1467,20 @@ public class MesWorkOrderService extends BaseMesService implements } } //汇报 - if (isItemReport) { - String nowTime = TimeTool.getNowTime(true); - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true,nowTime,mesBoms.size())); + if (isItemReport && isSort) { + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size())); + } else if (isItemReport) { + String reportSn = String.valueOf(snowflakeIdMaker.nextId()); + MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion()); + List bomList = mesBomService.findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); + //bom下的子节汇报 + if (!CollectionUtils.isEmpty(bomList)) { + for (MesBom bom : bomList) { + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime)); + } + } else { + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime)); + } } //移库 if (isItemMove) { @@ -1476,6 +1493,13 @@ public class MesWorkOrderService extends BaseMesService implements mesMoveList.add(move); } } + + //bom下的子节汇报,总成也需要汇报 + if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) { + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime)); + } + } } private Map> getPartSapMap(MesWorkOrder mesWorkOrder, List itemPartNoList) { @@ -1507,18 +1531,53 @@ public class MesWorkOrderService extends BaseMesService implements } - private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(mesWorkOrder.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); + private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean); MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrder.getPartNo(),mesWorkOrder.getProductVersion()); + MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion); } return mesProductVersion; } + private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, + String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { + MesProductOffLine newMesProductOffLine = new MesProductOffLine(); + BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id"); + newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setQty(MathOperation.mul(mesWorkOrder.getNum(),itemQty)); + newMesProductOffLine.setItemQty(MathOperation.mul(newMesProductOffLine.getQty(), mesBom.getItemQty())); + if (isItemReport && mesBom.getPartNo().equals(mesWorkOrder.getPartNo())) { + newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName()); + newMesProductOffLine.setItemPartNo(""); + newMesProductOffLine.setItemPartName(""); + newMesProductOffLine.setItemUnit(""); + newMesProductOffLine.setItemQty(0d); + } + newMesProductOffLine.setReportSn(sn); + newMesProductOffLine.setSerialNumber(sn); + newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion()); + newMesProductOffLine.setUnit(mesBom.getUnit()); + newMesProductOffLine.setBomCode(mesBom.getBomCode()); + newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType()); + newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode()); + newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); + newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); + newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); + newMesProductOffLine.setDescription(nowTime); + newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString()); + ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser()); + return newMesProductOffLine; + } + private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom, boolean isItemReport,String nowTime,Integer bomTotalSize) { @@ -1747,7 +1806,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index b323582..78b8547 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -97,6 +97,10 @@ public class MesYfReportServiceImpl implements IMesYfReportService { @Autowired private MesProductionRecordRepository mesProductionRecordRepository; + + @Autowired + private MesCokpitKanbanDataRepository mesCokpitKanbanDataRepository; + @Override public ListPager queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) { ListPager mesDeviceDataQueryReportResultModelListPager = @@ -251,6 +255,19 @@ public class MesYfReportServiceImpl implements IMesYfReportService { return new ListPager<>(mesProductionRecordRepository.findByHqlWherePage(packBean, pager), pager); } + @Override + public ListPager queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(kanbanData.getOrganizeCode()); + DdlPreparedPack.getStringLikerPack(kanbanData.getWorkCenterCode(),"workCenterCode",packBean); + DdlPreparedPack.getStringEqualPack("GHHCS","dataLocation",packBean); + DdlPreparedPack.getStringBiggerPack(kanbanData.getDataTimeStart(), "dataTime", packBean); + DdlPreparedPack.getStringSmallerPack(kanbanData.getDataTimeEnd(), "dataTime", packBean); + pager = PagerHelper.getPager(pager, mesCokpitKanbanDataRepository.findByHqlWhereCount(packBean)); + DdlPreparedPack.getOrderBy(kanbanData.getOrderByParam(),kanbanData.getAscOrDesc(),packBean); + List mesCokpitKanbanDataList = mesCokpitKanbanDataRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(mesCokpitKanbanDataList,pager); + } + private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean); From 97d7e4e65d50542a638faf7865eba83f105c14dd Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 24 Oct 2024 19:59:02 +0800 Subject: [PATCH 111/180] =?UTF-8?q?SPS=E6=8B=89=E5=8A=A8=E5=8D=95=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java | 4 ++++ .../apiservice/serviceimpl/base/MesCustomerPartService.java | 10 ++++++++++ .../serviceimpl/base/MesPullingOrderInfoService.java | 8 +++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java index 357bdeb..74d74d8 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerCarModelDetail; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -14,4 +15,7 @@ public interface IMesCustomerPartService extends IBaseMesService findMesCustomerPart(MesCustomerCarModelDetail mesPartProdGroupDetail); + @ApiOperation("根据零件号获取客户零件关系") + List findMesCustomerPartByPartNo(String organizeCode,List partNoList); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java index 7548b83..7b2bea5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java @@ -15,9 +15,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -100,4 +102,12 @@ public class MesCustomerPartService extends BaseMesService impl return baseRDao.findByHqlWhere(ddlPackBean); } + @Override + public List findMesCustomerPartByPartNo(String organizeCode, List partNoList) { + if(StringUtils.isEmpty(organizeCode) || Objects.isNull(partNoList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPack(partNoList, "erpPartNo", packBean); + return baseRDao.findByHqlWhere(packBean); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index d195ac7..e61342b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -49,6 +50,8 @@ public class MesPullingOrderInfoService extends BaseMesService工厂号{},产线对应的工单对应工单零件mesWorkOrderPartList-->{}", organizeCode, mesWorkOrderPartList); //5.取工单零件和拉动组交集,根据拉动主表对应的类型 生成相应的拉动单和拉动单明细 Map> workOrderNoListMap = mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo)); + //6、获取客户物料信息 + List mesCustomerPartByPartNoList = mesCustomerPartService.findMesCustomerPartByPartNo(organizeCode, partPullDetailListMap.keySet().stream().distinct().collect(Collectors.toList())); + Map> customerPartMap = CollectionUtils.isEmpty(mesCustomerPartByPartNoList) ? null : mesCustomerPartByPartNoList.stream().collect(Collectors.groupingBy(MesCustomerPart::getErpPartNo)); for (Map.Entry> stringListEntry : workOrderNoListMap.entrySet()) { @@ -234,7 +240,7 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Fri, 25 Oct 2024 09:19:10 +0800 Subject: [PATCH 112/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=B7=A5=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesBtoJobServiceImpl.java | 2 +- .../base/roundness/MesPackageRoundnessService.java | 48 ++++++++++++++-------- .../busi/MesEarlyWarningServiceImpl.java | 16 ++++++-- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java index 855a9f4..cab65ba 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -109,7 +109,7 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); if (sortInfoList.isEmpty()){ - log.info("当前零件生产组:{}没有排序信息",prodGroup.getCustInfoPoint()); + log.info("当前零件生产组:{},信息点为:{}没有排序信息",prodGroup.getPartProdGroupCode(),prodGroup.getCustInfoPoint()); continue; } //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 82830d5..312e2c9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -117,15 +117,24 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { if (qty < roundQty) { //4.查看客户排序信息钟的最早的一条过点时间 + 生产组最晚生成时间是否已到达当前时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { - try { - if (sdf.parse(sortInfo1.getMatchTime()).after(sdf.parse(sortInfo2.getMatchTime()))) { - return 1; - } - } catch (ParseException e) { - log.error("解析匹配时间报错:{}", e.getMessage()); - } - return -1; +// sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { +// try { +// if (sdf.parse(sortInfo1.getMatchTime()).after(sdf.parse(sortInfo2.getMatchTime()))) { +// return 1; +// } +// } catch (ParseException e) { +// log.error("解析匹配时间报错:{}", e.getMessage()); +// } +// return -1; +// }).collect(Collectors.toList()); + /** + * 2024/10/24 by Castle需要根据custOrderNo升序设置productSeq + */ + sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { + if (Long.parseLong(sortInfo1.getCustOrderCode().substring(3)) > Long.parseLong(sortInfo2.getCustOrderCode().substring(3))) { + return 1; + } + return -1; }).collect(Collectors.toList()); sortInfo = sortInfoList.get(0); @@ -187,7 +196,6 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { log.error("按包装圆整出错:MesPackageRoundnessService:{}", e.getMessage()); } } - private void doCreateWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) throws ParseException { String organizeCode = partProdGroup.getOrganizeCode(); @@ -245,15 +253,21 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); - String shiftTime = String.format("%02d:%02d", hours, minutes); + long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":","")); if (!shiftList.isEmpty()) { for (MesShift shift : shiftList) { - String startTime = shift.getStartTime().replace(":", ""); - String endTime = shift.getEndTime().replace(":", ""); - if ((shiftTime.compareTo(startTime) >= 0) && (shiftTime.compareTo(endTime) <= 0)) { - mesWorkOrder.setShiftName(shift.getShiftName()); - mesWorkOrder.setShiftCode(shift.getShiftCode()); - break; + long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); + long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); + if (startTime < endTime){ + if (shiftTime > startTime && shiftTime < endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + }else { + if (shiftTime < startTime && shiftTime > endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } } } } else { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 537b9ae..9173b08 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -15,6 +15,7 @@ import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; @@ -56,7 +57,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { @Autowired private MesQueueOrderRepository queueOrderRao; - + + @Autowired + private MesEarlyWarningScreenRepository screenRao; @Override public List getEarlyWarningList(String organizeCode) { @@ -164,9 +167,14 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { @Override public void savePicture(KanBanPictureModel model) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(model.getId(),"id", ddlPackBean); - earlyWarningRecordRao.updateByProperties(new String[]{"picture"},new Object[]{model.getPicture()},ddlPackBean); + MesEarlyWarningScreen mesEarlyWarningScreen = new MesEarlyWarningScreen(); + mesEarlyWarningScreen.setPicture(model.getPicture()); + if (model.getId() != null){ + mesEarlyWarningScreen.setRecordId(model.getId().toString()); + } + mesEarlyWarningScreen.setOrganizeCode(model.getOrganizeCode()); + ConvertBean.saveOrUpdate(mesEarlyWarningScreen, AuthUtil.getSessionUser().getUserName()); + screenRao.insert(mesEarlyWarningScreen); } /** From 67f6688136366124f89a360b7bbc96f13d145416 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Fri, 25 Oct 2024 09:29:21 +0800 Subject: [PATCH 113/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0preCraftCode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/roundness/MesPackageRoundnessService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 312e2c9..e92b22b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -646,6 +646,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); orderAssembly.setPid(sortCfg.getId()); orderAssembly.setWorkCenterCode(workCenterCode); + orderAssembly.setPreCraftCode(sortCfg.getPreCraftCode()); workOrderAssemblyList.add(orderAssembly); } @@ -688,6 +689,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); orderAssembly.setMinValue(ruleSortCfg.getMinValue()); orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); workOrderAssemblyList.add(orderAssembly); } //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 @@ -726,6 +728,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); orderAssembly.setMinValue(ruleSortCfg.getMinValue()); orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); workOrderAssemblyList.add(orderAssembly); } return workOrderAssemblyList; From f8a3b4238cfa7c507e8e46db8bc6dd7e84f66acc Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 25 Oct 2024 15:05:32 +0800 Subject: [PATCH 114/180] =?UTF-8?q?CBR=E8=B4=9F=E6=8A=A5=E5=B7=A5=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 5b8440f..a281582 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -47,7 +47,6 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; @Service @Slf4j @@ -1472,7 +1471,11 @@ public class MesWorkOrderService extends BaseMesService implements } else if (isItemReport) { String reportSn = String.valueOf(snowflakeIdMaker.nextId()); MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion()); - List bomList = mesBomService.findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); + List bomList = null; + try { + bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); + } catch (Exception e) { + } //bom下的子节汇报 if (!CollectionUtils.isEmpty(bomList)) { for (MesBom bom : bomList) { @@ -1504,14 +1507,12 @@ public class MesWorkOrderService extends BaseMesService implements private Map> getPartSapMap(MesWorkOrder mesWorkOrder, List itemPartNoList) { List mesPartSapList = mesPartSapService.findMesPartSapByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode()); - Map> mesPartSapMap = mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo)); - return mesPartSapMap; + return mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo)); } private Map> getItemPartMap(MesWorkOrder mesWorkOrder, List itemPartNoList) { List itemPartList = iMesPartService.findMesPartByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode()); - Map> itemPartMap = itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo)); - return itemPartMap; + return itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo)); } private MesProdRuleSortCfg getMesProdRuleSortCfg(MesWorkOrder mesWorkOrder) { @@ -1545,7 +1546,7 @@ public class MesWorkOrderService extends BaseMesService implements private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); - BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id"); + BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id","systemSyncStatus"); newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName()); newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); @@ -1581,8 +1582,7 @@ public class MesWorkOrderService extends BaseMesService implements private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom, boolean isItemReport,String nowTime,Integer bomTotalSize) { - MesProductOffLine newMesProductOffLine; - newMesProductOffLine = new MesProductOffLine(); + MesProductOffLine newMesProductOffLine = new MesProductOffLine(); if (!isItemReport) { newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName()); From a4a0ac889ed2e597d566457b70ef410439127166 Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 28 Oct 2024 13:33:22 +0800 Subject: [PATCH 115/180] =?UTF-8?q?=E9=80=9A=E7=94=A8=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/busi/report/IMesYfReportService.java | 4 ++ .../controller/report/MesBusiReportController.java | 17 ++++++ .../mes/apiservice/dao/report/IMesYfReportDao.java | 5 ++ .../daoimpl/report/MesYfReportDaoImpl.java | 65 ++++++++++++++++++++++ .../serviceimpl/report/MesYfReportServiceImpl.java | 6 ++ 5 files changed, 97 insertions(+) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java index 8a55bd7..077cd1d 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; @@ -52,4 +53,7 @@ public interface IMesYfReportService { @ApiOperation("看板数据") ListPager queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager); + + @ApiOperation("通用导出报表") + ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java index 1449d7f..c873052 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -13,6 +13,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; import cn.estsh.i3plus.pojo.mes.model.report.MesDowntimeRecordResModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.impp.framework.base.controller.MesBaseController; @@ -165,4 +166,20 @@ public class MesBusiReportController extends MesBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @ApiOperation(value = "通用导出报表查询", notes = "通用导出报表查询") + @PostMapping("/generalExport/query") + public ResultBean queryGeneralExport(MesGeneralExportReportModel model, Pager pager) { + try { + ValidatorBean.beginValid(model) + .notNull("organizeCode", model.getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryGeneralExport(model,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java index cc405ab..644909b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java @@ -4,6 +4,8 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditi import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import io.swagger.annotations.ApiOperation; /** * @Description : 报表-数据方法 @@ -22,4 +24,7 @@ public interface IMesYfReportDao { */ ListPager queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager); + @ApiOperation("通用导出报表") + ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java index 970fbe6..f676711 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java @@ -1,19 +1,26 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao; +import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel; 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.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.Query; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 报表-数据方法实现 @@ -107,4 +114,62 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { return new ListPager<>(resultList, pager); } + @Override + public ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager) { + StringBuilder dataHql = new StringBuilder(); + dataHql.append(" select new ").append(MesGeneralExportReportModel.class.getName()).append("(workOrder.organizeCode,workOrder.workCenterCode,workOrder.id,workOrder.workOrderNo,workOrder.custSn,partType.partTypeName,assembly.assemblySn,orderAssembly.createDatetime,workOrder.shippingTime)"); + //共用HQL + String commonHql = getCommonHql(mesGeneralExportReportModel); + //行数 + Query countQuery = entityManager.createQuery("select count(1) " + commonHql); + setParameter(mesGeneralExportReportModel, countQuery); + //数据 + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesGeneralExportReportModel)).toString(), MesShippingOrderManagementDetailModel.class); + setParameter(mesGeneralExportReportModel, dataQuery); + if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + if (count <= 0) return new ListPager<>(new ArrayList<>(), pager); + pager = PagerHelper.getPager(pager, count); + dataQuery.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + return new ListPager<>(dataQuery.getResultList(), pager); + } + + private void setParameter(MesGeneralExportReportModel model, Query query) { + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("organizeCode", model.getOrganizeCode()); + query.setParameter("workOrderStatus", Stream.of(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(),MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(),MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()).collect(Collectors.toList())); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) query.setParameter("shippingTimeStart", model.getShippingTimeStart()); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) query.setParameter("shippingTimeEnd", model.getShippingTimeEnd()); + } + + private String getOrderBy(MesGeneralExportReportModel model) { + StringBuilder orderBy = new StringBuilder(); + if (StringUtils.isEmpty(model.getOrderByParam()) || StringUtils.isEmpty(model.getAscOrDesc())) { + model.setOrderByParam("createDatetime"); + model.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue()); + } + return orderBy.append(" order by d.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); + } + + private String getCommonHql(MesGeneralExportReportModel model) { + StringBuilder commonHql = new StringBuilder(); + commonHql.append(" from MesWorkOrderAssembly orderAssembly left join MesWorkOrder workOrder on orderAssembly.workOrderNo = workOrder.workOrderNo and workOrder.organizeCode = :organizeCode and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid"); + commonHql.append(" left join MesProductionAssembly assembly on workOrder.custSn = assembly.custSn and orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid "); + commonHql.append(" left join MesProdRuleSortCfg sortCfg on orderAssembly.pid = sortCfg.id and sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid"); + commonHql.append(" left join MesPartType partType on sortCfg.partTypeCode = partType.partTypeCode and partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid"); + commonHql.append(" where orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid and workOrder.organizeCode = :organizeCode"); + commonHql.append(" and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid and assembly.organizeCode = :organizeCode and assembly.isDeleted=:isDeleted and assembly.isValid=:isValid"); + commonHql.append(" and sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid and partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid "); + commonHql.append(" and partType.assemblyDescription = '通用追溯' and workOrder.workOrderStatus in (:workOrderStatus) "); + if (!StringUtils.isEmpty(model.getWorkCenterCode())) commonHql.append(" and workOrder.workCenterCode like '%").append(model.getWorkCenterCode()).append("%' "); + if (!StringUtils.isEmpty(model.getCustSn())) commonHql.append(" and orderAssembly.custSn like '%").append(model.getCustSn()).append("%' "); + if (!StringUtils.isEmpty(model.getAssemblySn())) commonHql.append(" and orderAssembly.assemblySn like '%").append(model.getAssemblySn()).append("%' "); + if (!StringUtils.isEmpty(model.getWorkOrderNo())) commonHql.append(" and workOrder.workOrderNo like '%").append(model.getWorkOrderNo()).append("%' "); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and workOrder.shippingTime >= :shippingTimeStart "); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and workOrder.shippingTime <= :shippingTimeEnd "); + return commonHql.toString(); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index 78b8547..d8ce013 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -23,6 +23,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportDataModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.i3plus.pojo.mes.repository.*; @@ -268,6 +269,11 @@ public class MesYfReportServiceImpl implements IMesYfReportService { return new ListPager<>(mesCokpitKanbanDataList,pager); } + @Override + public ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager) { + return mesYfReportDao.queryGeneralExport(mesGeneralExportReportModel,pager); + } + private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean); From 7b9c3a4fafc1f2d3e80bdf87ecf15dbd927f8932 Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 28 Oct 2024 17:29:28 +0800 Subject: [PATCH 116/180] =?UTF-8?q?=E8=8A=9C=E6=B9=96=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=94=AF=E4=B8=80=E6=80=A7=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java index f676711..897a674 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java @@ -117,7 +117,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { @Override public ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager) { StringBuilder dataHql = new StringBuilder(); - dataHql.append(" select new ").append(MesGeneralExportReportModel.class.getName()).append("(workOrder.organizeCode,workOrder.workCenterCode,workOrder.id,workOrder.workOrderNo,workOrder.custSn,partType.partTypeName,assembly.assemblySn,orderAssembly.createDatetime,workOrder.shippingTime)"); + dataHql.append(" select new ").append(MesGeneralExportReportModel.class.getName()).append("(workOrder.organizeCode,workOrder.workCenterCode,workOrder.id,workOrder.workOrderNo,workOrder.custSn,partType.partTypeName,assembly.assemblySn,assembly.createDatetime,workOrder.shippingTime)"); //共用HQL String commonHql = getCommonHql(mesGeneralExportReportModel); //行数 From 9343e621eeefed229397d310b7ec2ce97475f202 Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 28 Oct 2024 18:25:10 +0800 Subject: [PATCH 117/180] =?UTF-8?q?43555=20=E8=A3=81=E7=89=87=E9=85=8D?= =?UTF-8?q?=E6=96=B9=E5=8E=9F=E6=96=99=E9=85=8D=E7=BD=AE=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE-=E4=B8=8D=E6=9F=A5=E8=AF=A2is=5Fdeleted=3D1=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesCutSchemeMaterialServiceImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java index 5c01d8f..d368e77 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeMaterialService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; @@ -29,4 +32,9 @@ public class MesCutSchemeMaterialServiceImpl extends BaseMesService Date: Tue, 29 Oct 2024 18:27:45 +0800 Subject: [PATCH 118/180] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=8F=8A=E7=BA=BF=E6=9C=AB=E5=A4=A7=E5=B1=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/IMesCreateWorkOrder.java | 18 + .../base/roundness/MesPackageRoundnessService.java | 11 +- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 728 +++++++++++++++++++++ .../busi/MesEarlyWarningServiceImpl.java | 16 +- 4 files changed, 761 insertions(+), 12 deletions(-) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java new file mode 100644 index 0000000..e5f543f --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; + +public interface IMesCreateWorkOrder { + /** + * 武汉按包装圆整事务管理 + * @param partProdGroup + * @param mesPartProdGroupDetail + * @param partSap + * @param sortInfo + */ + void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo); + + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index e92b22b..1382918 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesCreateWorkOrderImpl; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -97,6 +98,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesPartPtrDetailRepository partPtrDetailRao; + @Autowired + private MesCreateWorkOrderImpl mesCreateWorkOrder; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { @@ -183,8 +187,8 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return; } - - doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); + mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); +// doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); qty -= custQty; sortInfoList.remove(sortInfo); // 更新排序信息 已完成 @@ -734,9 +738,6 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return workOrderAssemblyList; } - - - private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { List orderPartList = new ArrayList<>(); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java new file mode 100644 index 0000000..7a37c2f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -0,0 +1,728 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.busi.IMesCreateWorkOrder; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRao; + + @Autowired + private MesWorkOrderRepository mesWorkOrderRao; + + + @Autowired + private MesShiftRepository mesShiftRao; + + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private ISyncFuncService syncFuncService; + + + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartSapService mesPartSapService; + + @Autowired + private MesProduceSnRepository mesProduceSnRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private MesWorkOrderService mesWorkOrderService; + + @Autowired + private MesWorkCenterRepository workCenterRao; + + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) { + + String organizeCode = partProdGroup.getOrganizeCode(); + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + mesWorkOrder.setCustCode(partProdGroup.getCustCode()); + //工单版本号 + mesWorkOrder.setProductVersion("1"); + //工单类型 + mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.SORT.getValue()); + //订单序号=客户排序信息的序号 + mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); + mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); + mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); + //根据产线查找区域代码 + DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(),"workCenterCode", centerPackBean); + List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); + if (!workCenterList.isEmpty()){ + mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); + } + mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); + + //来源 + mesWorkOrder.setWorkOrderSource(sortInfo.getId().toString()); + + mesWorkOrder.setVinCode(sortInfo.getVinCode()); + mesWorkOrder.setProductTime(sortInfo.getMatchTime()); + mesWorkOrder.setProduceTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); + mesWorkOrder.setPtrInfo(sortInfo.getRemark()); + //客户订单号 + mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); + //车型代码 + mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); + //车型描述 mesWorkOrder.setCarName = vehicleClassCode + + //备注取自于车型配置表中 + //todo 根据VehicleNo车型代码,sortInfo.custCode,sortInfo.CustPlantCode,organizeCode 查询表TI_CIM_VEHICLE_MODEL的 remark 作为从车型配置表中获取打印备注信息 + + mesWorkOrder.setCustPartNo(sortInfo.getCustPartNo()); + // 11. 是否将生成日期减一天 + // 班次 根据产线+计划时间匹配班次 + DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); + List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + Date date=new Date(); + try { + date = sdf.parse(sortInfo.getMatchTime()); + } catch (ParseException e) { + log.error("解析时间报错,无法转换成时间,matchTime:{}", sortInfo.getMatchTime()); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + + int minutes = calendar.get(Calendar.MINUTE); + long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":","")); + if (!shiftList.isEmpty()) { + for (MesShift shift : shiftList) { + long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); + long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); + if (startTime < endTime){ + if (shiftTime > startTime && shiftTime < endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + }else { + if (shiftTime < startTime && shiftTime > endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + } + } + } else { + log.info("当前产线:{} 没有配置班次", mesPartProdGroupDetail.getWorkCenterCode()); + } + //零件相关 + mesWorkOrder.setPartNo(partSap.getPartNo()); + mesWorkOrder.setPartName(partSap.getPartName()); + + //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 + + // 13.生产版本 organizeCode + partNo + MesProductVersion prodVersion = getProdVersion(organizeCode, partSap.getPartNo()); + if (prodVersion == null) { + log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); + } else { + String productVersion = prodVersion.getProductVersion(); + mesWorkOrder.setProductVersion(productVersion); + } + + // bom prodVersion.alternativePartList bom版本 + MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), partSap.getPartNo()); + if (bom != null){ + mesWorkOrder.setBomCode(bom.getBomCode()); + } + + mesWorkOrder.setQty(sortInfo.getQty()); + mesWorkOrder.setUnCompleteQty(sortInfo.getQty()); + mesWorkOrder.setUnit(partSap.getUnit()); + + if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + } else { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + } + + mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); + mesWorkOrder.setFid(UUID.randomUUID().toString()); + mesWorkOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + /** + * RS 为记录分隔符ASCII:30 + * GS 为分组符ASCII:29 + * EOT 为传输结束符ASCII:04 + * {splitRule} [)>%RS%06%GS%Y + * {splitRule} vpps= 4110000000000X + * {splitRule} %GS%P + * {partNo} 8位客户零件号 + * {splitRule} %GS%12V + * {splitRule} duns 545238347 + * {splitRule} %GS%T1A + * {yydayofyear} + * {splitRule} A2B4C + * {serialNo} 4位 步长1 + * {splitRule}%RS%%EOT% + *{spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule} + * [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + * 通用二维码组成部分('RS'为记录分隔符ASCII:30,'GS'为分组符ASCII:29,'EOT'为传输结束符ASCII:04) + * [)>+'RS'+06+'GS'+Y+vpps+'GS'+P+8位客户零件号+'GS'+12V+DUNS+'GS'+T+1位line num+1位班次号+2位年份+3位天数+1位追溯(精确追溯A,批次追溯@)+2工程更改记录+2位自定义+4位流水号+'RS'+'EOT' + * 如:[)>+'RS'+06+'GS'+Y+4110000000000X+'GS'+P+12345678+'GS'+12V+545295227+'GS'+T+1A13304A2B4C0001+'RS'+'EOT' + * + * vpps = Y00000000000000 + * 8位客户零件号=最后四位要大写 + * Duns是什么? + * 1位lineNumber是什么? 固定值 1 + * 1位班次号是什么? + * 2位年YY 24 + * 3位天-~365/366 + * 追溯 + * A--精确追溯 + * @--批次追溯 + * + * 2位工程更改记录 + * 2位供应商自定义信息 + * 4位流水号,当班班次计数,每班班次归零 + * + * WH_CUST_SN_RULE + */ + + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + String partNo = mesWorkOrder.getCustPartNo(); + String prefix = partNo.substring(0, partNo.length() - 4); + String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); + custGenSerialNoModel.setPartNo(prefix+partNo4); + String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setYear(year.substring(2)); + custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); + List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); + // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + //截取替换为ascii码 + String snOriginal = custNumRuleList.get(0); + String[] split = snOriginal.split("%RS%"); + StringBuilder rsStr = new StringBuilder(); + for (int i = 0; i < split.length-1; i++) { + rsStr.append(split[i]).append((char) 30); + } + rsStr.append(split[split.length - 1]); + StringBuilder gsStr = new StringBuilder(); + String[] split1 = rsStr.toString().split("%GS%"); + for (int i = 0; i < split1.length-1; i++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length-1]); + String[] split2 = gsStr.toString().split("%EOT%"); + String sn = split2[0]+(char)4; + //保存条码 + mesWorkOrder.setCustSn(sn); + + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); + + } + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + */ + Map ptrRuleListMap = new HashMap<>(); + //是否修改为P单 + boolean isModifyPOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + if (!workOrderPartList.isEmpty()){ + Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + //先替换客户的ptr信息 + String ptrInfo = mesWorkOrder.getPtrInfo(); + if (StringUtils.isNotBlank(ptrInfo)) { + List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); + if (!ptrInfoList.isEmpty()){ + List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + } + } + } + } + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); + //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 + + for (MesPartPtr mesPartPtr : partPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 + } + } + } + + // 生成装配件清单 + if (isModifyPOrder){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + } + /** + * 工单号修改 + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); + + if (!workOrderPartList.isEmpty()) { + for (MesWorkOrderPart orderPart : workOrderPartList) { + orderPart.setOrganizeCode(organizeCode); + orderPart.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); + } + workOrderPartRao.saveAll(workOrderPartList); + } + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + /** + * 生产序号 + * 工厂-产线-9位流水号,跳号10 + */ + GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); + prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); + List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String proSeqStr = proSeqResultList.get(0); + mesWorkOrder.setProductSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); + mesWorkOrderRao.insert(mesWorkOrder); + + /** + * 插入工单打印队列数据 + */ + mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); + if (!assemblyList.isEmpty()) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ + orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + } + orderAssembly.setPartNo(mesWorkOrder.getPartNo()); + orderAssembly.setPartName(mesWorkOrder.getPartName()); + orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(organizeCode); + orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); + } + workOrderAssemblyRao.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setOrganizeCode(organizeCode); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); + mesQueueOrder.setPartName(mesWorkOrder.getPartName()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); + mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); + mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); + ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); + queueOrderRao.insert(mesQueueOrder); + } + + } + + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(organizeCode); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); + mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); + mesProduceSn.setPartName(mesWorkOrder.getPartName()); + mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); + mesProduceSnRao.insert(mesProduceSn); + + + + } + + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); +// orderAssembly.setPartNo(orderPart.getPartNo()); +// orderAssembly.setPartName(orderPart.getPartName()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); + orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + log.info("工厂:{},零件号:{}未查到零件信息", organizeCode, bom.getItemPartNo()); + return new ArrayList<>(); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null) { + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private MesPartSap getMesPart(String productPartNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); + List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); + return parts.isEmpty() ? null : parts.get(0); + } + + private MesProductVersion getProdVersion(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); + return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); + } + + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) + .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) + .collect(Collectors.toList()); + return partPtrList; + } + //根据排序信息PTR零件号 获取 ptr信息 + private List getCustPartPtrList(List ptrInfoList,String organizeCode){ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); + return partPtrRao.findByHqlWhere(partPtrPackBean); + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 9173b08..8b5ad08 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -122,18 +122,20 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0); //3.获取最新的一条报文信息 List gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1); - MesCimGmGepics lastOne = gmGepicsListOne.get(0); + MesCimGmGepics lastOne = !gmGepicsListOne.isEmpty() ?gmGepicsListOne.get(0) : null; if (lastOne==null){ - return new MesKanBanShowModel(); + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + mesKanBanShowModel.setWorkOrderCenter(kanBan.getWorkCenterCode()); + return mesKanBanShowModel; } //4.获取最新工位单号 获取工单的产线和工位的最新的工单 MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); //5.获取最新下线工单 MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); - if (lastWorkOrder == null){ - //todo 暂时 - lastWorkOrder = lastOfflineOrder; - } +// if (lastWorkOrder == null){ +// //todo 暂时 +// lastWorkOrder = lastOfflineOrder; +// } //6.查询报警产量 & 获取开班起始时间 Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @@ -240,7 +242,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); - DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",orderPackBean); + DdlPreparedPack.getNotInPackList(orderStatusList,"workOrderStatus",orderPackBean); DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderPackBean); List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); return !workOrderList.isEmpty() ? workOrderList.get(0) : null; From 03288a28c8068a24202c50d3e9d2db38d4b7062d Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 30 Oct 2024 10:00:19 +0800 Subject: [PATCH 119/180] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E6=89=8B=E5=B7=A5?= =?UTF-8?q?=E6=8F=92=E5=8D=95=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesProduceSnService.java | 3 + .../mes/api/base/IMesWorkOrderAssemblyService.java | 7 + .../ext/mes/api/base/IMesWorkOrderLogService.java | 6 + .../ext/mes/api/base/IMesWorkOrderPartService.java | 6 + .../mes/api/base/IMesWorkOrderToWmsService.java | 3 + .../daoimpl/report/MesYfReportDaoImpl.java | 5 +- .../base/MesCutSchemeEquipmentServiceImpl.java | 11 +- .../base/MesCutSchemeFgServiceImpl.java | 8 + .../base/MesLabelTemplateServiceImpl.java | 3 +- .../base/MesPartProdGroupDetailService.java | 1 + .../serviceimpl/base/MesPartProdGroupService.java | 1 + .../serviceimpl/base/MesProduceSnServiceImpl.java | 7 + .../base/MesWorkOrderAssemblyServiceImpl.java | 11 + .../serviceimpl/base/MesWorkOrderLogService.java | 10 + .../base/MesWorkOrderPartServiceImpl.java | 10 + .../serviceimpl/base/MesWorkOrderService.java | 598 +++++++++++++++++++-- .../base/MesWorkOrderToWmsServiceImpl.java | 11 + 17 files changed, 648 insertions(+), 53 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java index 9aa6a4e..5da2525 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java @@ -19,4 +19,7 @@ public interface IMesProduceSnService extends IBaseMesService { @ApiOperation(value = "查询条码信息") List findMesProduceSnList(String organizeCode, List snList); + + @ApiOperation("根据客户条码查询产品条码表") + MesProduceSn getMesProduceSnByCustSn(String organizeCode, String custSn); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java index 52cfdbd..0ba3cd9 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java @@ -2,6 +2,9 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 工单装配件 @@ -11,4 +14,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; * @Modify: **/ public interface IMesWorkOrderAssemblyService extends IBaseMesService { + + @ApiOperation("根据工单号查询排序线排产装配目视项") + List findMesWorkOrderAssembly(String workOrderNo, String organizeCode); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java index bb3e200..1470608 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java @@ -5,6 +5,9 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description: @@ -16,4 +19,7 @@ public interface IMesWorkOrderLogService extends IBaseMesService findMesWorkOrderLog(String workOrderNo, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java index 0b88442..7e23216 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java @@ -2,6 +2,9 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 工单零件 @@ -11,4 +14,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; * @Modify: **/ public interface IMesWorkOrderPartService extends IBaseMesService { + + @ApiOperation("根据工单号查询工单零件") + List findMesWorkOrderPart(String workOrderNo, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java index e394bb4..37634ef 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java @@ -18,4 +18,7 @@ public interface IMesWorkOrderToWmsService extends IBaseMesService saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList); + + @ApiOperation("根据工单号查询工单发送给WMS数据") + List findMesWorkOrderToWms(String workOrderNo, String organizeCode); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java index 897a674..af25b75 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java @@ -1,7 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao; -import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; @@ -124,7 +123,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { Query countQuery = entityManager.createQuery("select count(1) " + commonHql); setParameter(mesGeneralExportReportModel, countQuery); //数据 - Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesGeneralExportReportModel)).toString(), MesShippingOrderManagementDetailModel.class); + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesGeneralExportReportModel)).toString(), MesGeneralExportReportModel.class); setParameter(mesGeneralExportReportModel, dataQuery); if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); @@ -150,7 +149,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { model.setOrderByParam("createDatetime"); model.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue()); } - return orderBy.append(" order by d.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); + return orderBy.append(" order by assembly.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); } private String getCommonHql(MesGeneralExportReportModel model) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java index 8cd43e3..58aa8fd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java @@ -45,13 +45,8 @@ public class MesCutSchemeEquipmentServiceImpl extends BaseMesService im ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); } + + @Override + protected void setPackQueryBean(MesCutSchemeFg bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java index 706961f..9ce81aa 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java @@ -9,9 +9,9 @@ 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.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam; -import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder; import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.util.CollectionUtils; @@ -66,6 +66,7 @@ public class MesLabelTemplateServiceImpl extends BaseMesService im public List findMesPartProdGroup(MesPartProdGroupDetail mesPartProdGroupDetail){ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getPartNo(),"partNo",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getProductPartNo(),"productPartNo",ddlPackBean); DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(),"workCenterCode",ddlPackBean); List mesPartProdGroupDetails = mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean); if(CollectionUtils.isEmpty(mesPartProdGroupDetails)){ diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java index d474b1a..e9108d2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java @@ -48,4 +48,11 @@ public class MesProduceSnServiceImpl extends BaseMesService implem } return produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); } + + @Override + public MesProduceSn getMesProduceSnByCustSn(String organizeCode, String custSn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custSn, "custSn", packBean); + return baseRDao.getByProperty(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java index 9504cc9..ce5e2ae 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java @@ -4,10 +4,13 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderAssemblyService; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Description : 工单装配件 * @Reference : @@ -25,4 +28,12 @@ public class MesWorkOrderAssemblyServiceImpl extends BaseMesService findMesWorkOrderAssembly(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java index 500cd23..a80ec8b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java @@ -2,9 +2,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderLogService; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; +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.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog; @@ -134,4 +136,12 @@ public class MesWorkOrderLogService extends BaseMesService impl return new ListPager(mesWorkOrderLogList, pager); } + + @Override + public List findMesWorkOrderLog(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java index d3cd1ca..54610e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java @@ -3,10 +3,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Description : 工单零件 * @Reference : @@ -23,4 +26,11 @@ public class MesWorkOrderPartServiceImpl extends BaseMesService findMesWorkOrderPart(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index cc51fa0..bb84556 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -66,14 +66,10 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesWorkOrderDao mesWorkOrderDao; @Autowired - private MesWorkOrderRepository mesWorkOrderRDao; - @Autowired private MesWorkCenterRepository mesWorkCenterRDao; @Autowired private MesShiftRepository mesShiftRDao; @Autowired - private MesProductPlanRepository mesProductPlanRDao; - @Autowired private IMesPartProdGroupService mesPartProdGroupService; @Autowired private MesCustomerPartRepository mesCustomerPartRDao; @@ -148,6 +144,30 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private SnowflakeIdMaker snowflakeIdMaker; + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private IMesWorkOrderAssemblyService mesWorkOrderAssemblyService; + + @Autowired + private IMesWorkOrderPartService mesWorkOrderPartService; + + @Autowired + private IMesProduceSnService mesProduceSnService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { //校验产线与工位的关系 @@ -157,10 +177,10 @@ public class MesWorkOrderService extends BaseMesService implements } //获取相同类型 相同标识 生产序号最大值的 DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", orderPackBean); DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); MesWorkOrder result = baseRDao.getByProperty(orderPackBean); + Double generateQty = bean.getQty(); //插入前构造数据 onInsertBean(bean); @@ -169,7 +189,7 @@ public class MesWorkOrderService extends BaseMesService implements if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { Long productSeq = 0L; if (null != result && result.getProductSeq() != null) { - productSeq = (long) Math.toIntExact(result.getProductSeq()); + productSeq = (long) Math.toIntExact(result.getProductSeq().toString().endsWith("9") ? result.getProductSeq() + 1 : result.getProductSeq()); } MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); BeanUtils.copyProperties(bean, copyMesWorkOrder); @@ -179,6 +199,10 @@ public class MesWorkOrderService extends BaseMesService implements baseRDao.insert(copyMesWorkOrder); workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty()); + //生成数量大于1 + if (generateQty > 1) { + insertBatchWorkOrder(copyMesWorkOrder, generateQty); + } return bean; } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { Long productSeq = 0L; @@ -199,6 +223,96 @@ public class MesWorkOrderService extends BaseMesService implements return bean; } + private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) { + //查询数据 + List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(),workOrder.getCustSn()); + //数据处理 + List newWrkOrderList = new ArrayList<>(); + List newOrderAssemblyList = new ArrayList<>(); + List newOrderPartList = new ArrayList<>(); + List newToWmsList = new ArrayList<>(); + List newOrderLogList = new ArrayList<>(); + List newProduceSnList = new ArrayList<>(); + MesWorkOrderAssembly newOrderAssembly = null; + MesWorkOrderPart newOrderPart = null; + MesWorkOrderToWms newOrderPartToWms = null; + MesWorkOrderLog orderLog = null; + MesProduceSn newProduceSn = null; + for (int i = 1; i < generateQty ; i++) { + //工单 + MesWorkOrder newWorkOrder = new MesWorkOrder(); + BeanUtils.copyProperties(workOrder,newWorkOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + newWorkOrder.setWorkOrderNo(getOrderNo(workOrder)); + newWorkOrder.setProductSeq(workOrder.getProductSeq()+i); + newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(),workOrder.getCreateUser())); + newWrkOrderList.add(newWorkOrder); + //工单装配件 + if(!CollectionUtils.isEmpty(orderAssemblyList)){ + for (MesWorkOrderAssembly assembly : orderAssemblyList) { + newOrderAssembly = new MesWorkOrderAssembly(); + BeanUtils.copyProperties(assembly,newOrderAssembly,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderAssemblyList.add(newOrderAssembly); + } + } + //工单零件 + if(!CollectionUtils.isEmpty(orderPartList)){ + for (MesWorkOrderPart part : orderPartList) { + newOrderPart = new MesWorkOrderPart(); + BeanUtils.copyProperties(part,newOrderPart,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderPartList.add(newOrderPart); + } + } + //工单发送给WMS数据 + if(!CollectionUtils.isEmpty(toWmsList)){ + for (MesWorkOrderToWms toWms : toWmsList) { + newOrderPartToWms = new MesWorkOrderToWms(); + BeanUtils.copyProperties(toWms,newOrderPartToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newToWmsList.add(newOrderPartToWms); + } + } + //生产工单日志 + if(!CollectionUtils.isEmpty(orderLogList)){ + for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { + orderLog = new MesWorkOrderLog(); + BeanUtils.copyProperties(mesWorkOrderLog,orderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderLogList.add(orderLog); + } + } + //产品条码表 + if(!Objects.isNull(mesProduceSn)){ + newProduceSn = new MesProduceSn(); + BeanUtils.copyProperties(mesProduceSn,newProduceSn,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + newProduceSn.setCustSn(newWorkOrder.getCustSn()); + newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo()); + newProduceSnList.add(newProduceSn); + } + } + //数据持久化 + baseRDao.saveAll(newWrkOrderList); + if(!CollectionUtils.isEmpty(newOrderAssemblyList)){ + mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList); + } + if(!CollectionUtils.isEmpty(newOrderPartList)){ + mesWorkOrderPartService.insertBatch(newOrderPartList); + } + if(!CollectionUtils.isEmpty(newOrderLogList)){ + workOrderLogService.insertBatch(newOrderLogList); + } + if(!CollectionUtils.isEmpty(newToWmsList)){ + mesWorkOrderToWmsService.insertBatch(newToWmsList); + } + } + @Override public MesWorkOrder update(MesWorkOrder bean) { MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode()); @@ -315,28 +429,13 @@ public class MesWorkOrderService extends BaseMesService implements if (StringUtil.isEmpty(item.getCustPartNo())) { getCustomerPart(item); } - //生成工单号 - List orderList=new ArrayList<>(); - if(item.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()){ - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO); - genSerialNoModel.setPartNo(item.getWorkCenterCode()); - orderList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList(); - }else { - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO); - orderList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList(); - } - String orderNo = orderList.get(0); - DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); - if (baseRDao.isExitByHql(orderPackBean)) { - MesException.throwMesBusiException("单号流水码生成重复"); - } - item.setWorkOrderNo(orderNo); //校验标识 //若工单类型为排序 List saveMesWorkOrderToWms = new ArrayList<>(); if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); + ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空"); + //校验产线类型和工单类型是否匹配 if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), @@ -365,7 +464,14 @@ public class MesWorkOrderService extends BaseMesService implements //排序工单数量为1 item.setQty(1d); //发送工单给WMS - sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); + List orderPartList = sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); + //生成工单号 + item.setWorkOrderNo(getOrderNo(item)); + //生成客户条码 + item.setCustSn(getCustSn(item.getCustPartNo(), item.getOrganizeCode(),item.getCreateUser())); + //生成工单零件 工单装配件 + insertMesWorkOrder(item, orderPartList); + } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { @@ -405,6 +511,10 @@ public class MesWorkOrderService extends BaseMesService implements //发送工单给WMS sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); } + //生成工单号 + if(StringUtil.isEmpty(item.getWorkOrderNo())){ + item.setWorkOrderNo(getOrderNo(item)); + } //物料名称不存在,从物料信息中获取 MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode()); item.setPartName(mesPart.getPartName()); @@ -414,29 +524,197 @@ public class MesWorkOrderService extends BaseMesService implements item.setProduceTime(TimeTool.getToday()); item.setProductTime(item.getProduceTime()); } + item.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); item.setUnCompleteQty(item.getQty()); item.setFid(UUID.randomUUID().toString()); //保存发送WMS数据 if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(item.getWorkOrderNo())); mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); } } - private void sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List saveMesWorkOrderToWms) { + private String getOrderNo(MesWorkOrder item) { + String orderNo; + if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()){ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + orderNo = item.getOrganizeCode() + item.getOrderFlag() + item.getShiftCode() + serialNo; + }else if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()){ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO); + genSerialNoModel.setPartNo(item.getWorkCenterCode()); + orderNo = (String)syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList().get(0); + }else { + GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO); + orderNo = (String)syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList().get(0); + } + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); + if (baseRDao.isExitByHql(orderPackBean)) { + MesException.throwMesBusiException("单号流水码生成重复"); + } + return orderNo; + } + + private void insertMesWorkOrder(MesWorkOrder item, List orderPartList) { + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + */ + Map ptrRuleListMap = new HashMap<>(); + //是否修改为P单 + boolean isModifyPOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + if (!CollectionUtils.isEmpty(orderPartList)){ + Map orderPartMap = orderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + //先替换客户的ptr信息 + String ptrInfo = item.getPtrInfo(); + if (!StringUtils.isEmpty(ptrInfo)) { + List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); + if (!ptrInfoList.isEmpty()){ + List custPartPtrList = getCustPartPtrList(ptrInfoList, item.getOrganizeCode()); + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + } + } + } + } + List partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList); + //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 + + for (MesPartPtr mesPartPtr : partPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr, item.getModifyUser()); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail, item.getModifyUser()); + partPtrDetailRao.update(mesPartPtrDetail); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 + } + } + } + + // 生成装配件清单 + if (isModifyPOrder){ + item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + } + + if (!CollectionUtils.isEmpty(orderPartList)) { + for (MesWorkOrderPart orderPart : orderPartList) { + orderPart.setOrganizeCode(item.getOrganizeCode()); + orderPart.setWorkOrderNo(item.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, item.getModifyUser()); + } + workOrderPartRao.saveAll(orderPartList); + } + List assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode()); + if (!CollectionUtils.isEmpty(assemblyList)) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ + orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + } + orderAssembly.setPartNo(item.getPartNo()); + orderAssembly.setPartName(item.getPartName()); + orderAssembly.setWorkOrderNo(item.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(item.getOrganizeCode()); + orderAssembly.setProductSn(item.getWorkOrderNo()); + orderAssembly.setAreaCode(item.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, item.getCreateUser()); + } + workOrderAssemblyRepository.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + BeanUtils.copyProperties(item,mesQueueOrder,"id"); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setSerialNumber(item.getWorkOrderNo()); + mesQueueOrder.setProductSn(item.getWorkOrderNo()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + ConvertBean.saveOrUpdate(mesQueueOrder, item.getCreateUser()); + queueOrderRao.insert(mesQueueOrder); + } + } + + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(item.getWorkOrderNo()); + mesProduceSn.setCustSn(item.getCustSn()); + mesProduceSn.setWorkOrderNo(item.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(item.getOrganizeCode()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(item.getCustCode()); + mesProduceSn.setCustPartNo(item.getCustPartNo()); + mesProduceSn.setPartNo(item.getPartNo()); + mesProduceSn.setPartName(item.getPartName()); + mesProduceSn.setShiftCode(item.getShiftCode()); + mesProduceSn.setWorkCenterCode(item.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(item.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(item.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, item.getCreateUser()); + mesProduceSnRao.insert(mesProduceSn); + } + + private List sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List saveMesWorkOrderToWms) { //非试制单 List bomList = null; + MesProductVersion mesProductVersion = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(item, mesWorkCenter); + mesProductVersion = getMesProductVersion(item, mesWorkCenter); item.setProductVersion(mesProductVersion.getProductVersion()); //获取bom信息 bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); } //是否自动发布 - isAuto(item, saveMesWorkOrderToWms, bomList); + return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion); } - private void isAuto(MesWorkOrder item, List saveMesWorkOrderToWms, List bomList) { + private List isAuto(MesWorkOrder item, List saveMesWorkOrderToWms, List bomList,MesProductVersion mesProductVersion) { MesPartProdGroup mesPartProdGroup = null; if(StringUtil.isEmpty(item.getPartProdGroupCode())){ mesPartProdGroup = getMesPartProdGroup(item); @@ -465,6 +743,13 @@ public class MesWorkOrderService extends BaseMesService implements } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } + + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && !Objects.isNull(mesProductVersion)) { + workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),mesProductVersion.getAlternativePartList()), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo()); + } + return workOrderPartList; } private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder) { @@ -483,15 +768,14 @@ public class MesWorkOrderService extends BaseMesService implements private MesPartProdGroup getMesPartProdGroup(MesWorkOrder item) { MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail(); mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode()); - mesPartProdGroupDetail.setPartNo(item.getPartNo()); + mesPartProdGroupDetail.setProductPartNo(item.getPartNo()); mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode()); List mesPartProdGroupList = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail); if (CollectionUtils.isEmpty(mesPartProdGroupList)) { MesException.throwMesBusiException("生产线代码【%s】零件号【%s】对应的零件生产组信息没有维护", item.getWorkCenterCode(), item.getPartNo()); } - MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.iterator().next(); - return mesPartProdGroup; + return mesPartProdGroupList.iterator().next(); } private void getCustomerPart(MesWorkOrder item) { @@ -517,8 +801,7 @@ public class MesWorkOrderService extends BaseMesService implements } private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { - DdlPackBean ddlPackBean; - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); //DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); ddlPackBean.setOrderByStr(" order by createDatetime desc "); @@ -1256,15 +1539,12 @@ public class MesWorkOrderService extends BaseMesService implements } MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(printTemplate, organizeCode); - - //根据反射获取策略类--封装打印数据 - String methodCode = labelTemplate.getMethodCode(); - //模板信息丢失抛出异常 - if (StringUtils.isEmpty(labelTemplate.getMethodCode())) { + if (Objects.isNull(labelTemplate) || StringUtils.isEmpty(labelTemplate.getMethodCode())) { MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode()); } - + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); Map modelMap = new HashMap<>(); modelMap.put("mesWorkOrder", mesWorkOrder); modelMap.put("mesPartProdGroup", mesPartProdGroup); @@ -1638,7 +1918,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean); - return mesWorkOrderRDao.findByHqlWhere(packBean); + return baseRDao.findByHqlWhere(packBean); } private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) { @@ -1722,7 +2002,7 @@ public class MesWorkOrderService extends BaseMesService implements String orderNo = orderList.get(0); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); - if (mesWorkOrderRDao.isExitByHql(orderPackBean)) { + if (baseRDao.isExitByHql(orderPackBean)) { MesException.throwMesBusiException("单号流水码生成重复"); } item.setWorkOrderNo(orderNo); @@ -1953,4 +2233,240 @@ public class MesWorkOrderService extends BaseMesService implements return count > 0; } + private String getCustSn(String partNo,String organizeCode,String userName){ + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + String prefix = partNo.substring(0, partNo.length() - 4); + String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); + custGenSerialNoModel.setPartNo(prefix+partNo4); + String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setYear(year.substring(2)); + custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); + List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, userName, organizeCode, 1).getResultList(); + // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + //截取替换为ascii码 + String snOriginal = custNumRuleList.get(0); + String[] split = snOriginal.split("%RS%"); + StringBuilder rsStr = new StringBuilder(); + for (int i = 0; i < split.length-1; i++) { + rsStr.append(split[i]).append((char) 30); + } + rsStr.append(split[split.length - 1]); + StringBuilder gsStr = new StringBuilder(); + String[] split1 = rsStr.toString().split("%GS%"); + for (int i = 0; i < split1.length-1; i++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length-1]); + String[] split2 = gsStr.toString().split("%EOT%"); + return split2[0]+(char)4; + } + + private List dismantleBom(List bomList, double qty,String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + List partSapList = mesPartSapService.findMesPartSapByPartNoList(partNoList,organizeCode); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + //2.遍历bomList + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + MesException.throwMesBusiException("工厂【%s】零件号【%s】未查到零件信息", organizeCode, bom.getItemPartNo()); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + return orderPartList; + } + + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) + .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) + .collect(Collectors.toList()); + return partPtrList; + } + + //根据排序信息PTR零件号 获取 ptr信息 + private List getCustPartPtrList(List ptrInfoList,String organizeCode){ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); + return partPtrRao.findByHqlWhere(partPtrPackBean); + } + + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, String organizeCode) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (!StringUtils.isEmpty(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); + orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + orderAssembly.setPreCraftCode(sortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java index 45bba95..95229fc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java @@ -3,6 +3,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesBom; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToWms; @@ -41,4 +44,12 @@ public class MesWorkOrderToWmsServiceImpl extends BaseMesService findMesWorkOrderToWms(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } } From 94f70a14eca7e15f326d6a4873b6e5bf5c953950 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 30 Oct 2024 20:14:10 +0800 Subject: [PATCH 120/180] =?UTF-8?q?43590=20=E5=BC=80=E5=85=B3=E7=8F=AD?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=9A=E6=8E=A5=E7=8F=AD=E6=97=B6--90002?= =?UTF-8?q?=20=E7=B3=BB=E7=BB=9F=E5=BC=82=E5=B8=B8:=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java index e062b64..22ac6b6 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.api.base; -import cn.estsh.i3plus.pojo.mes.bean.MesBom; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerCarModelDetail; /** From 96459e9c41d2364a49b4950cfcec66e3d6a13921 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 31 Oct 2024 13:47:50 +0800 Subject: [PATCH 121/180] =?UTF-8?q?=E6=A8=A1=E7=B3=8A=E6=9F=A5=E8=AF=A2--?= =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E8=AE=B0=E5=BD=95=E9=A1=B5=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=9D=A1=E7=A0=81=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index d8ce013..7a0fee7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -282,7 +282,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService { DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkCellCode(), "workCellCode", packBean); DdlPreparedPack.getStringBiggerPack(mesProductionRecord.getCompleteDateTimeStart(), "completeDateTime", packBean); DdlPreparedPack.getStringSmallerPack(mesProductionRecord.getCompleteDateTimeEnd(), "completeDateTime", packBean); - DdlPreparedPack.getStringEqualPack(mesProductionRecord.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getEquipmentCode(), "equipmentCode", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getEquipmentName(), "equipmentName", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getMouldNo(), "mouldNo", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getShiftGroup(), "shiftGroup", packBean); @@ -290,8 +290,8 @@ public class MesYfReportServiceImpl implements IMesYfReportService { DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportStatus(), "reportStatus", packBean); DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportType(), "reportType", packBean); DdlPreparedPack.getNumEqualPack(mesProductionRecord.getIsComplete(), "isComplete", packBean); - DdlPreparedPack.getStringEqualPack(mesProductionRecord.getIsTest(), "isTest", packBean); - DdlPreparedPack.getStringEqualPack(mesProductionRecord.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getIsTest(), "isTest", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getPartName(), "partName", packBean); return packBean; } From 478aada794559cd12603abed9630e3184b373544 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 31 Oct 2024 17:48:36 +0800 Subject: [PATCH 122/180] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 611 ++++++++++++--------- 1 file changed, 347 insertions(+), 264 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index bb84556..0523adc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -170,149 +170,45 @@ public class MesWorkOrderService extends BaseMesService implements @Override public MesWorkOrder insert(MesWorkOrder bean) { + // 数据校验 + ValidatorBean.checkNotNull(bean.getWorkOrderType(), "工单类型不能为空"); + ValidatorBean.checkNotNull(bean.getWorkCenterCode(), "产线不能为空"); + ValidatorBean.checkNotNull(bean.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(bean.getShiftCode(), "班次不能为空"); //校验产线与工位的关系 boolean relationResult = checkWorkCenterPartRelation(bean.getWorkCenterCode(), bean.getPartNo()); if (!relationResult && (StringUtil.isEmpty(bean.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag()))){ MesException.throwMesBusiException(String.format("工单产线【%s】与工单零件【%s】没有维护产线零件关系",bean.getWorkCenterCode(),bean.getPartNo())); } - //获取相同类型 相同标识 生产序号最大值的 - DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); - MesWorkOrder result = baseRDao.getByProperty(orderPackBean); + //排序生成个数 默认1,数量为生成工单的个数 Double generateQty = bean.getQty(); - - //插入前构造数据 - onInsertBean(bean); - - //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 + MesWorkCenter mesWorkCenter = workCenterService.getWorkCenterDb(bean.getOrganizeCode(), bean.getWorkCenterCode()); + if (Objects.isNull(mesWorkCenter)) { + MesException.throwMesBusiException("产线【%s】不存在", bean.getWorkCenterCode()); + } + bean.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); + bean.setAreaCode(mesWorkCenter.getAreaCode()); + //客户物料信息 + if (StringUtil.isEmpty(bean.getCustPartNo())) { + getCustomerPart(bean); + } + //排序 if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Long productSeq = 0L; - if (null != result && result.getProductSeq() != null) { - productSeq = (long) Math.toIntExact(result.getProductSeq().toString().endsWith("9") ? result.getProductSeq() + 1 : result.getProductSeq()); - } - MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); - BeanUtils.copyProperties(bean, copyMesWorkOrder); - copyMesWorkOrder.setProductSeq((long) (productSeq + 1)); - copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelInitialize(copyMesWorkOrder, bean.getCreateUser()); - - baseRDao.insert(copyMesWorkOrder); - workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty()); + insertSortWorkOrderNo(bean, mesWorkCenter); //生成数量大于1 if (generateQty > 1) { - insertBatchWorkOrder(copyMesWorkOrder, generateQty); - } - return bean; - } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { - Long productSeq = 0L; - if (null != result && result.getProductSeq() != null) { - productSeq = (long) Math.toIntExact(result.getProductSeq()); + insertBatchWorkOrder(bean, generateQty); } - bean.setProductSeq(productSeq + 1); - GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); - List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); - bean.setWorkOrderSeq(resultList.get(0)); + //非排序 + } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { + insertUnSortWorkOrder(bean, mesWorkCenter); + //bto + } else { + insertBtoWorkOrder(bean, mesWorkCenter); } - bean.setQty(bean.getQty()); - bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelInitialize(bean, bean.getCreateUser()); - - workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); - bean = baseRDao.insert(bean); return bean; } - private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) { - //查询数据 - List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(),workOrder.getCustSn()); - //数据处理 - List newWrkOrderList = new ArrayList<>(); - List newOrderAssemblyList = new ArrayList<>(); - List newOrderPartList = new ArrayList<>(); - List newToWmsList = new ArrayList<>(); - List newOrderLogList = new ArrayList<>(); - List newProduceSnList = new ArrayList<>(); - MesWorkOrderAssembly newOrderAssembly = null; - MesWorkOrderPart newOrderPart = null; - MesWorkOrderToWms newOrderPartToWms = null; - MesWorkOrderLog orderLog = null; - MesProduceSn newProduceSn = null; - for (int i = 1; i < generateQty ; i++) { - //工单 - MesWorkOrder newWorkOrder = new MesWorkOrder(); - BeanUtils.copyProperties(workOrder,newWorkOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newWorkOrder.setWorkOrderNo(getOrderNo(workOrder)); - newWorkOrder.setProductSeq(workOrder.getProductSeq()+i); - newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(),workOrder.getCreateUser())); - newWrkOrderList.add(newWorkOrder); - //工单装配件 - if(!CollectionUtils.isEmpty(orderAssemblyList)){ - for (MesWorkOrderAssembly assembly : orderAssemblyList) { - newOrderAssembly = new MesWorkOrderAssembly(); - BeanUtils.copyProperties(assembly,newOrderAssembly,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newOrderAssemblyList.add(newOrderAssembly); - } - } - //工单零件 - if(!CollectionUtils.isEmpty(orderPartList)){ - for (MesWorkOrderPart part : orderPartList) { - newOrderPart = new MesWorkOrderPart(); - BeanUtils.copyProperties(part,newOrderPart,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newOrderPartList.add(newOrderPart); - } - } - //工单发送给WMS数据 - if(!CollectionUtils.isEmpty(toWmsList)){ - for (MesWorkOrderToWms toWms : toWmsList) { - newOrderPartToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(toWms,newOrderPartToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newToWmsList.add(newOrderPartToWms); - } - } - //生产工单日志 - if(!CollectionUtils.isEmpty(orderLogList)){ - for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { - orderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(mesWorkOrderLog,orderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newOrderLogList.add(orderLog); - } - } - //产品条码表 - if(!Objects.isNull(mesProduceSn)){ - newProduceSn = new MesProduceSn(); - BeanUtils.copyProperties(mesProduceSn,newProduceSn,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newProduceSn.setCustSn(newWorkOrder.getCustSn()); - newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo()); - newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo()); - newProduceSnList.add(newProduceSn); - } - } - //数据持久化 - baseRDao.saveAll(newWrkOrderList); - if(!CollectionUtils.isEmpty(newOrderAssemblyList)){ - mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList); - } - if(!CollectionUtils.isEmpty(newOrderPartList)){ - mesWorkOrderPartService.insertBatch(newOrderPartList); - } - if(!CollectionUtils.isEmpty(newOrderLogList)){ - workOrderLogService.insertBatch(newOrderLogList); - } - if(!CollectionUtils.isEmpty(newToWmsList)){ - mesWorkOrderToWmsService.insertBatch(newToWmsList); - } - } - @Override public MesWorkOrder update(MesWorkOrder bean) { MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode()); @@ -386,7 +282,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(), "planStartTime", packBean); DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(), "planEndTime", packBean); DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(), "planEndTime", packBean); - packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,workOrderNo asc "); + packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,productSeq asc,workOrderNo asc "); } @Override @@ -409,131 +305,6 @@ public class MesWorkOrderService extends BaseMesService implements } - @Override - protected void onInsertBean(MesWorkOrder item) { - - // 数据校验 - ValidatorBean.checkNotNull(item.getWorkOrderType(), "工单类型不能为空"); - ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线不能为空"); - ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); - ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); - - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", ddlPackBean); - MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesWorkCenter)) { - MesException.throwMesBusiException("产线【%s】不存在", item.getWorkCenterCode()); - } - item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); - //客户物料信息 - if (StringUtil.isEmpty(item.getCustPartNo())) { - getCustomerPart(item); - } - //校验标识 - //若工单类型为排序 - List saveMesWorkOrderToWms = new ArrayList<>(); - if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); - ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空"); - - //校验产线类型和工单类型是否匹配 - if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { - MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), - MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); - } - //若工单类型为排序 标识为 N E P S - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识", - item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() - , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); - } - //校验VIN号是否重复 - if (!StringUtil.isEmpty(item.getVinCode())) { - //校验vin号是否重复 - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getVinCode(), "vinCode", ddlPackBean); - if (baseRDao.isExitByHql(ddlPackBean)) { - MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode()); - } - } - //排序工单数量为1 - item.setQty(1d); - //发送工单给WMS - List orderPartList = sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); - //生成工单号 - item.setWorkOrderNo(getOrderNo(item)); - //生成客户条码 - item.setCustSn(getCustSn(item.getCustPartNo(), item.getOrganizeCode(),item.getCreateUser())); - //生成工单零件 工单装配件 - insertMesWorkOrder(item, orderPartList); - - } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { - ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); - if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { - MesException.throwMesBusiException("生产数量不能小于等于0"); - } - //校验产线类型和工单类型是否匹配 - if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { - MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), - MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); - } - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识", - item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() - , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); - } - item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //非试制单 - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); - //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(item); - item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); - } - } else { - ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); - ValidatorBean.checkNotNull(item.getPlanEndTime(), "计划结束时间不能为空"); - if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { - MesException.throwMesBusiException("生产数量不能小于等于0"); - } - //发送工单给WMS - sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); - } - //生成工单号 - if(StringUtil.isEmpty(item.getWorkOrderNo())){ - item.setWorkOrderNo(getOrderNo(item)); - } - //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode()); - item.setPartName(mesPart.getPartName()); - item.setUnit(mesPart.getUnit()); - //生产时间新增取当天 - if (StringUtil.isEmpty(item.getProduceTime())) { - item.setProduceTime(TimeTool.getToday()); - item.setProductTime(item.getProduceTime()); - } - item.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - item.setUnCompleteQty(item.getQty()); - item.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(item.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } - } - private String getOrderNo(MesWorkOrder item) { String orderNo; if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()){ @@ -663,7 +434,7 @@ public class MesWorkOrderService extends BaseMesService implements Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); for (String cellCode : cellCodeList) { MesQueueOrder mesQueueOrder = new MesQueueOrder(); - BeanUtils.copyProperties(item,mesQueueOrder,"id"); + BeanUtils.copyProperties(item,mesQueueOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesQueueOrder.setWorkCellCode(cellCode); mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); mesQueueOrder.setSerialNumber(item.getWorkOrderNo()); @@ -709,6 +480,7 @@ public class MesWorkOrderService extends BaseMesService implements item.setProductVersion(mesProductVersion.getProductVersion()); //获取bom信息 bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); + item.setBomCode(bomList.iterator().next().getBomCode()); } //是否自动发布 return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion); @@ -718,8 +490,6 @@ public class MesWorkOrderService extends BaseMesService implements MesPartProdGroup mesPartProdGroup = null; if(StringUtil.isEmpty(item.getPartProdGroupCode())){ mesPartProdGroup = getMesPartProdGroup(item); - item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); - item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); }else{ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); @@ -728,6 +498,9 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("零件生产组【%s】信息不存在",item.getPartProdGroupCode()); } } + item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + item.setCustCode(mesPartProdGroup.getCustCode()); //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { @@ -894,7 +667,7 @@ public class MesWorkOrderService extends BaseMesService implements baseRDao.insert(copyMesWorkOrder); //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(item, workOrderLog, "id"); + BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); // 如果工单为发布状态则新增打印队列 @@ -916,7 +689,7 @@ public class MesWorkOrderService extends BaseMesService implements index++; //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(item, workOrderLog, "id"); + BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); } //保存发送WMS数据 @@ -1647,7 +1420,7 @@ public class MesWorkOrderService extends BaseMesService implements private List getMesWorkOrderList(Long[] ids, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackArray(ids,"id",packBean); + DdlPreparedPack.getInPackArray(ids,MesExtConstWords.ID,packBean); List mesWorkOrderList = baseRDao.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(mesWorkOrderList)) { MesException.throwMesBusiException("选择工单信息不存在"); @@ -1827,7 +1600,7 @@ public class MesWorkOrderService extends BaseMesService implements private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); - BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id","systemSyncStatus"); + BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName()); newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); @@ -2051,13 +1824,171 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } + private void insertSortWorkOrderNo(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空"); + ValidatorBean.checkNotNull(bean.getCustPartNo(), "客户物料号不能为空"); + + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { + MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + //若工单类型为排序 标识为 N E P S + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识", + bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() + , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); + } + //校验VIN号是否重复 + if (!StringUtil.isEmpty(bean.getVinCode())) { + //校验vin号是否重复 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getVinCode(), "vinCode", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("vin号【%s】重复", bean.getVinCode()); + } + } + + List saveMesWorkOrderToWms = new ArrayList<>(); + //排序工单数量为1 + bean.setQty(1d); + //生成工单号 + bean.setWorkOrderNo(getOrderNo(bean)); + //发送工单给WMS + List orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //顺序号 + bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); + //生成客户条码 + bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser())); + //生成工单零件 工单装配件 + insertMesWorkOrder(bean, orderPartList); + + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); + mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + } + + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + + private void insertUnSortWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空"); + if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { + MesException.throwMesBusiException("生产数量不能小于等于0"); + } + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { + MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识", + bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() + , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); + } + bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + List saveMesWorkOrderToWms = new ArrayList<>(); + //非试制单 + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空"); + //校验物料生产版本是否存在 + MesProductVersion mesProductVersion = checkMesProductVersion(bean); + bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); + //获取bom信息 + List bomList = mesBomService.findMesBomByPartNoAndBomVersion(bean.getPartNo(), bean.getOrganizeCode(), mesProductVersion.getAlternativePartList()); + //发送工单信息给WMS + saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(bean, bomList)); + } + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + bean.setWorkOrderNo(getOrderNo(bean)); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); + mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + } + + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + + private void insertBtoWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空"); + ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空"); + if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { + MesException.throwMesBusiException("生产数量不能小于等于0"); + } + List saveMesWorkOrderToWms = new ArrayList<>(); + //顺序号 + bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); + //生成工单号 + bean.setWorkOrderNo(getOrderNo(bean)); + //发送工单给WMS + sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); + mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + } + //生成WorkOrderSeq + GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); + List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); + bean.setWorkOrderSeq(resultList.get(0)); + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; for (MesBom mesBom : mesBomList) { mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderToWms.setUnit(mesBom.getUnit()); mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); @@ -2142,7 +2073,7 @@ public class MesWorkOrderService extends BaseMesService implements } public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id"); + BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogRepository.insert(workOrderLog); } public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { @@ -2469,4 +2400,156 @@ public class MesWorkOrderService extends BaseMesService implements return workOrderAssemblyList; } + private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) { + //查询数据 + List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn()); + MesPrintQueue printQueue = getMesPrintQuanOrder(workOrder.getOrganizeCode(), workOrder.getCustSn()); + //数据处理 + List newWrkOrderList = new ArrayList<>(); + List newOrderAssemblyList = new ArrayList<>(); + List newOrderPartList = new ArrayList<>(); + List newToWmsList = new ArrayList<>(); + List newOrderLogList = new ArrayList<>(); + List newProduceSnList = new ArrayList<>(); + List newQueueOrderList = new ArrayList<>(); + List newPrintQueueList = new ArrayList<>(); + MesWorkOrderAssembly newOrderAssembly = null; + MesWorkOrderPart newOrderPart = null; + MesWorkOrderToWms newOrderPartToWms = null; + MesWorkOrderLog orderLog = null; + MesProduceSn newProduceSn = null; + MesQueueOrder newQueueOrder = null; + MesPrintQueue newPrintQueue = null; + for (int i = 1; i < generateQty; i++) { + //工单 + MesWorkOrder newWorkOrder = new MesWorkOrder(); + BeanUtils.copyProperties(workOrder, newWorkOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newWorkOrder.setWorkOrderNo(getOrderNo(newWorkOrder)); + newWorkOrder.setProductSeq(newWorkOrder.getProductSeq() + i); + newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(), workOrder.getCreateUser())); + newWorkOrder.setFid(UUID.randomUUID().toString()); + newWrkOrderList.add(newWorkOrder); + // + //工单装配件 + if (!CollectionUtils.isEmpty(orderAssemblyList)) { + for (MesWorkOrderAssembly assembly : orderAssemblyList) { + newOrderAssembly = new MesWorkOrderAssembly(); + BeanUtils.copyProperties(assembly, newOrderAssembly, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderAssembly.setProductSn(newWorkOrder.getWorkOrderNo()); + newOrderAssemblyList.add(newOrderAssembly); + } + } + //工单零件 + if (!CollectionUtils.isEmpty(orderPartList)) { + for (MesWorkOrderPart part : orderPartList) { + newOrderPart = new MesWorkOrderPart(); + BeanUtils.copyProperties(part, newOrderPart, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderPartList.add(newOrderPart); + } + } + //工单发送给WMS数据 + if (!CollectionUtils.isEmpty(toWmsList)) { + for (MesWorkOrderToWms toWms : toWmsList) { + newOrderPartToWms = new MesWorkOrderToWms(); + BeanUtils.copyProperties(toWms, newOrderPartToWms, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newToWmsList.add(newOrderPartToWms); + } + } + //生产工单日志 + if (!CollectionUtils.isEmpty(orderLogList)) { + for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { + orderLog = new MesWorkOrderLog(); + BeanUtils.copyProperties(mesWorkOrderLog, orderLog, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + orderLog.setFid(UUID.randomUUID().toString()); + newOrderLogList.add(orderLog); + } + } + //生产队列主表 + if (!CollectionUtils.isEmpty(queueOrderList)) { + for (MesQueueOrder queueOrder : queueOrderList) { + newQueueOrder = new MesQueueOrder(); + BeanUtils.copyProperties(queueOrder, newQueueOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newQueueOrder.setCustSn(newWorkOrder.getCustSn()); + newQueueOrder.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setProductSn(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setProductSeq(newWorkOrder.getProductSeq()); + newQueueOrderList.add(newQueueOrder); + } + } + //产品条码表 + if (!Objects.isNull(mesProduceSn)) { + newProduceSn = new MesProduceSn(); + BeanUtils.copyProperties(mesProduceSn, newProduceSn, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newProduceSn.setCustSn(newWorkOrder.getCustSn()); + newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo()); + newProduceSn.setFid(UUID.randomUUID().toString()); + newProduceSnList.add(newProduceSn); + } + //装配目视单打印 + if (!Objects.isNull(printQueue)) { + newPrintQueue = new MesPrintQueue(); + BeanUtils.copyProperties(printQueue, newPrintQueue, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newPrintQueue.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newPrintQueueList.add(newPrintQueue); + } + } + //数据持久化 + baseRDao.saveAll(newWrkOrderList); + if (!CollectionUtils.isEmpty(newOrderAssemblyList)) { + mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList); + } + if (!CollectionUtils.isEmpty(newOrderPartList)) { + mesWorkOrderPartService.insertBatch(newOrderPartList); + } + if (!CollectionUtils.isEmpty(newOrderLogList)) { + workOrderLogService.insertBatch(newOrderLogList); + } + if (!CollectionUtils.isEmpty(newToWmsList)) { + mesWorkOrderToWmsService.insertBatch(newToWmsList); + } + if (!CollectionUtils.isEmpty(newQueueOrderList)) { + queueOrderRao.saveAll(newQueueOrderList); + } + if (!CollectionUtils.isEmpty(newProduceSnList)) { + mesProduceSnService.insertBatch(newProduceSnList); + } + if (!CollectionUtils.isEmpty(newPrintQueueList)) { + printQueueRepository.saveAll(newPrintQueueList); + } + } + + public List findMesQueueOrder(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return queueOrderRao.findByHqlWhere(packBean); + } + + public MesPrintQueue getMesPrintQuanOrder(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return printQueueRepository.getByProperty(packBean); + } + + private Long getMaxMesWorkOrderProductSeq(MesWorkOrder bean) { + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); + MesWorkOrder workOrder = baseRDao.getByProperty(orderPackBean); + return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1)); + } + } From e483cad96a5c9d8191d7cd2c503d1b24e161e8c5 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Fri, 1 Nov 2024 19:01:53 +0800 Subject: [PATCH 123/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E6=97=A9=E6=99=9A?= =?UTF-8?q?=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 7a37c2f..5c5b64c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -134,7 +134,6 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Date date=new Date(); try { date = sdf.parse(sortInfo.getMatchTime()); @@ -152,12 +151,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); if (startTime < endTime){ - if (shiftTime > startTime && shiftTime < endTime) { + if (shiftTime >= startTime && shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); } }else { - if (shiftTime < startTime && shiftTime > endTime) { + if (shiftTime <= startTime || shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); } From 0da05f6daf2065084a2b1ffe545ffac761c18d85 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 2 Nov 2024 13:05:33 +0800 Subject: [PATCH 124/180] =?UTF-8?q?BOM=E5=8F=8D=E5=90=91=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=EF=BC=8C=E9=80=9A=E7=94=A8=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/base/IMesBomService.java | 3 +- .../mes/api/busi/report/IMesYfReportService.java | 4 + .../controller/base/MesBomController.java | 18 +++++ .../controller/report/MesBusiReportController.java | 19 ++++- .../mes/apiservice/dao/report/IMesYfReportDao.java | 6 ++ .../daoimpl/report/MesYfReportDaoImpl.java | 89 ++++++++++++++++++++-- .../apiservice/serviceimpl/base/MesBomService.java | 40 ++++++++++ .../serviceimpl/report/MesYfReportServiceImpl.java | 11 +++ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 7 ++ 9 files changed, 185 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java index c98c6f5..67600e1 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java @@ -63,5 +63,6 @@ public interface IMesBomService extends IBaseMesService { */ MesBom findBom(String organizeCode, String bomVersion,String partNo); - + @ApiOperation(value = "bom反向查询") + List queryMesBomReverse(MesBom mesBom); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java index 077cd1d..8888d56 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; @@ -56,4 +57,7 @@ public interface IMesYfReportService { @ApiOperation("通用导出报表") ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager); + + @ApiOperation("通用发运报表查询") + ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java index 4527383..a3212fd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java @@ -13,6 +13,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -108,4 +109,21 @@ public class MesBomController extends BaseMesController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping(value = "/reverseQuery") + @ApiOperation(value = "bom反向查询") + public ResultBean queryMesBomReverse(MesBom bom) { + try { + ValidatorBean.checkNotNull(bom.getPartNo(), "父零件号不能为空"); + ValidatorBean.checkNotNull(bom.getEffStartTime(), "生效时间不能为空"); + ValidatorBean.checkNotNull(bom.getNum(), "层数不能为空"); + bom.setOrganizeCode(AuthUtil.getOrganizeCode()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(bomService.queryMesBomReverse(bom)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java index c873052..1d74350 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -12,10 +12,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesDowntimeRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesDowntimeRecordResModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; +import cn.estsh.i3plus.pojo.mes.model.report.*; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -181,5 +178,19 @@ public class MesBusiReportController extends MesBaseController { } } + @ApiOperation(value = "通用发运报表查询", notes = "通用发运报表查询") + @PostMapping("/generalShipping/query") + public ResultBean queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager) { + try { + ValidatorBean.beginValid(model) + .notNull("organizeCode", model.getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryGeneralShipping(model,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java index 644909b..98dda94 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java @@ -5,8 +5,11 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultM import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description : 报表-数据方法 * @Reference : @@ -27,4 +30,7 @@ public interface IMesYfReportDao { @ApiOperation("通用导出报表") ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager); + @ApiOperation("通用发运报表查询") + ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager, List shippingGroupList); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java index af25b75..806652d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java @@ -8,9 +8,11 @@ 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.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.persistence.EntityManager; @@ -118,13 +120,13 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { StringBuilder dataHql = new StringBuilder(); dataHql.append(" select new ").append(MesGeneralExportReportModel.class.getName()).append("(workOrder.organizeCode,workOrder.workCenterCode,workOrder.id,workOrder.workOrderNo,workOrder.custSn,partType.partTypeName,assembly.assemblySn,assembly.createDatetime,workOrder.shippingTime)"); //共用HQL - String commonHql = getCommonHql(mesGeneralExportReportModel); + String commonHql = getGeneralExportCommonHql(mesGeneralExportReportModel); //行数 Query countQuery = entityManager.createQuery("select count(1) " + commonHql); - setParameter(mesGeneralExportReportModel, countQuery); + setGeneralExportParameter(mesGeneralExportReportModel, countQuery); //数据 - Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesGeneralExportReportModel)).toString(), MesGeneralExportReportModel.class); - setParameter(mesGeneralExportReportModel, dataQuery); + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getGeneralExportOrderBy(mesGeneralExportReportModel)).toString(), MesGeneralExportReportModel.class); + setGeneralExportParameter(mesGeneralExportReportModel, dataQuery); if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); @@ -134,7 +136,29 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { return new ListPager<>(dataQuery.getResultList(), pager); } - private void setParameter(MesGeneralExportReportModel model, Query query) { + + @Override + public ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager, List shippingGroupList) { + StringBuilder dataHql = new StringBuilder(); + dataHql.append(" select new ").append(MesGeneralShippingReportModel.class.getName()).append("(s.id,s.status,s.shippingCode,wo.workCenterCode,s.seq,wo.custOrderNo,sd.partNo,wo.custPartNo,wo.carModelCode,cgg.upperColour,s.endScanTime,sr.startCarNo,sr.endCarNo,sr.expectedArrivalTime,sr.createDatetime)"); + //共用HQL + String commonHql = getGeneralShippingCommonHql(model, shippingGroupList); + //行数 + Query countQuery = entityManager.createQuery("select count(1) " + commonHql); + setGeneralShippingParameter(model, countQuery, shippingGroupList); + //数据 + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getGeneralShippingOrderBy(model)).toString(), MesGeneralShippingReportModel.class); + setGeneralShippingParameter(model, dataQuery, shippingGroupList); + if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + if (count <= 0) return new ListPager<>(new ArrayList<>(), pager); + pager = PagerHelper.getPager(pager, count); + dataQuery.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + return new ListPager<>(dataQuery.getResultList(), pager); + } + + private void setGeneralExportParameter(MesGeneralExportReportModel model, Query query) { query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); query.setParameter("organizeCode", model.getOrganizeCode()); @@ -143,7 +167,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { if (!StringUtils.isEmpty(model.getShippingTimeEnd())) query.setParameter("shippingTimeEnd", model.getShippingTimeEnd()); } - private String getOrderBy(MesGeneralExportReportModel model) { + private String getGeneralExportOrderBy(MesGeneralExportReportModel model) { StringBuilder orderBy = new StringBuilder(); if (StringUtils.isEmpty(model.getOrderByParam()) || StringUtils.isEmpty(model.getAscOrDesc())) { model.setOrderByParam("createDatetime"); @@ -152,7 +176,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { return orderBy.append(" order by assembly.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); } - private String getCommonHql(MesGeneralExportReportModel model) { + private String getGeneralExportCommonHql(MesGeneralExportReportModel model) { StringBuilder commonHql = new StringBuilder(); commonHql.append(" from MesWorkOrderAssembly orderAssembly left join MesWorkOrder workOrder on orderAssembly.workOrderNo = workOrder.workOrderNo and workOrder.organizeCode = :organizeCode and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid"); commonHql.append(" left join MesProductionAssembly assembly on workOrder.custSn = assembly.custSn and orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid "); @@ -171,4 +195,55 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { return commonHql.toString(); } + private void setGeneralShippingParameter(MesGeneralShippingReportModel model, Query query, List shippingGroupList) { + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("organizeCode", model.getOrganizeCode()); + if(!CollectionUtils.isEmpty(shippingGroupList)) query.setParameter("shippingGroupList", shippingGroupList); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) query.setParameter("shippingTimeStart", model.getShippingTimeStart()); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) query.setParameter("shippingTimeEnd", model.getShippingTimeEnd()); + if (!StringUtils.isEmpty(model.getArrivalTimeStart())) query.setParameter("arrivalTimeStart", model.getArrivalTimeStart()); + if (!StringUtils.isEmpty(model.getArrivalTimeEnd())) query.setParameter("arrivalTimeEnd", model.getArrivalTimeEnd()); + if (!StringUtils.isEmpty(model.getReceivingTimeStart())) query.setParameter("receivingTimeStart", model.getReceivingTimeStart()); + if (!StringUtils.isEmpty(model.getReceivingTimeEnd())) query.setParameter("receivingTimeEnd", model.getReceivingTimeEnd()); + } + + private String getGeneralShippingOrderBy(MesGeneralShippingReportModel model) { + StringBuilder orderBy = new StringBuilder(); + if (StringUtils.isEmpty(model.getOrderByParam()) || StringUtils.isEmpty(model.getAscOrDesc())) { + model.setOrderByParam("createDatetime"); + model.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue()); + } + return orderBy.append(" order by s.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); + } + + private String getGeneralShippingCommonHql(MesGeneralShippingReportModel model, List shippingGroupList) { + StringBuilder commonHql = new StringBuilder(); + commonHql.append(" from MesShippingOrderManagement s left join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid "); + commonHql.append(" left join MesWorkOrder wo on sd.logicSeq = wo.workOrderSeq and wo.organizeCode = :organizeCode and wo.isDeleted=:isDeleted and wo.isValid=:isValid "); + commonHql.append(" left join MesCimGmGepics cgg on cgg.csnNo = wo.custOrderNo and cgg.organizeCode = :organizeCode and cgg.isDeleted=:isDeleted and cgg.isValid=:isValid and cgg.barcode !='' and cgg.barcode is not null "); + commonHql.append(" left join MesSupplyclientRunsheet sr on s.shippingCode = sr.runSheetNo and sr.organizeCode = :organizeCode and sr.isDeleted=:isDeleted and sr.isValid=:isValid "); + commonHql.append(" where s.organizeCode = :organizeCode and s.isDeleted=:isDeleted and s.isValid=:isValid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid and wo.organizeCode = :organizeCode and wo.isDeleted=:isDeleted and wo.isValid=:isValid"); + if(!CollectionUtils.isEmpty(shippingGroupList)) commonHql.append(" and s.shippingGroupCode in (:shippingGroupList)"); + if (!StringUtils.isEmpty(model.getShippingCode())) commonHql.append(" and s.shippingCode like '%").append(model.getShippingCode()).append("%' "); + if (!StringUtils.isEmpty(model.getWorkCenterCode())) commonHql.append(" and wo.workCenterCode like '%").append(model.getWorkCenterCode()).append("%' "); + if (!StringUtils.isEmpty(model.getSeq())) commonHql.append(" and s.seq like '%").append(model.getSeq()).append("%' "); + if (!StringUtils.isEmpty(model.getCustOrderCode())) commonHql.append(" and wo.custOrderNo like '%").append(model.getCustOrderCode()).append("%' "); + if (!StringUtils.isEmpty(model.getPartNo())) commonHql.append(" and sd.partNo like '%").append(model.getPartNo()).append("%' "); + if (!StringUtils.isEmpty(model.getCustPartNo())) commonHql.append(" and wo.custPartNo like '%").append(model.getCustPartNo()).append("%' "); + if (!StringUtils.isEmpty(model.getVehicleNo())) commonHql.append(" and wo.carModelCode like '%").append(model.getVehicleNo()).append("%' "); + if (!StringUtils.isEmpty(model.getUpperColour())) commonHql.append(" and cgg.upperColour like '%").append(model.getUpperColour()).append("%' "); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and s.endScanTime >= :shippingTimeStart "); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and s.endScanTime <= :shippingTimeEnd "); + if (!StringUtils.isEmpty(model.getStartCarNo())) commonHql.append(" and sr.startCarNo like '%").append(model.getStartCarNo()).append("%' "); + if (!StringUtils.isEmpty(model.getEndCarNo())) commonHql.append(" and sr.endCarNo like '%").append(model.getEndCarNo()).append("%' "); + if (!StringUtils.isEmpty(model.getArrivalTimeStart())) commonHql.append(" and sr.expectedArrivalTime >= :arrivalTimeStart "); + if (!StringUtils.isEmpty(model.getArrivalTimeEnd())) commonHql.append(" and sr.expectedArrivalTime <= :arrivalTimeEnd "); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and s.endScanTime >= :shippingTimeStart "); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and s.endScanTime <= :shippingTimeEnd "); + if (!StringUtils.isEmpty(model.getReceivingTimeStart())) commonHql.append(" and sr.createDatetime >= :receivingTimeStart "); + if (!StringUtils.isEmpty(model.getReceivingTimeEnd())) commonHql.append(" and sr.createDatetime <= :receivingTimeEnd "); + return commonHql.toString(); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index 6172c36..efe5087 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesBomService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesBomDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.model.MesBomTreeModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesConstWords; @@ -207,6 +208,45 @@ public class MesBomService extends BaseMesService implements IMesBomServ return bomList.isEmpty() ? null : bomList.get(0); } + @Override + public List queryMesBomReverse(MesBom mesBom) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesBom.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesBom.getPartNo(), "itemPartNo", packBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", packBean); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean); + List mesBomList = baseRDao.findByHqlWhere(packBean); + if(CollectionUtils.isEmpty(mesBomList)){ + return new ArrayList<>(); + } + List resultMesBomList = new ArrayList<>(); + Map> mesBomMap = mesBomList.stream().collect(Collectors.groupingBy(bom -> bom.getPartNo() + bom.getItemPartNo())); + for (String partNoKey : mesBomMap.keySet()) { + MesBom bom = mesBomMap.get(partNoKey).get(MesExtConstWords.ZERO); + resultMesBomList.add(bom); + //按照层数递归上一次 + bomReverse(resultMesBomList,bom.getPartNo(),bom.getOrganizeCode(),mesBom.getNum()-1); + } + return resultMesBomList; + } + + private void bomReverse(List resultMesBomList,String partNo,String organizeCode, Integer num) { + if(num == MesExtConstWords.ZERO) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "itemPartNo", packBean); + DdlPreparedPack.getStringEqualPack("X", "partType", packBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", packBean); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean); + List mesBomList = baseRDao.findByHqlWhere(packBean); + if(CollectionUtils.isEmpty(mesBomList)) return; + Map> mesBomMap = mesBomList.stream().collect(Collectors.groupingBy(bom -> bom.getPartNo() + bom.getItemPartNo())); + for (String partNoKey : mesBomMap.keySet()) { + MesBom bom = mesBomMap.get(partNoKey).get(MesExtConstWords.ZERO); + resultMesBomList.add(bom); + //按照层数递归上一次 + bomReverse(resultMesBomList,bom.getPartNo(),bom.getOrganizeCode(),num-1); + } + } + /** * 递归展开 BOM * diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index 7a0fee7..228447d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -24,6 +24,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportDataModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.i3plus.pojo.mes.repository.*; @@ -274,6 +275,16 @@ public class MesYfReportServiceImpl implements IMesYfReportService { return mesYfReportDao.queryGeneralExport(mesGeneralExportReportModel,pager); } + @Override + public ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager) { + MesConfig groupCfg = mesConfigService.getCfgValueByCode(model.getOrganizeCode(), MesExtConstWords.GENERAL_SHIPPING_PART_GROUP); + List shippingGroupList = null; + if (!Objects.isNull(groupCfg) && !StringUtil.isEmpty(groupCfg.getCfgValue())) { + shippingGroupList = Arrays.asList(groupCfg.getCfgValue().split(MesExtConstWords.COMMA)); + } + return mesYfReportDao.queryGeneralShipping(model, pager, shippingGroupList); + } + private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 7ea5676..f1a0805 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -327,4 +327,11 @@ public class MesExtConstWords { public static final String PART_PROD_GROUP_CODE = "partProdGroupCode"; + /** + * 系统参数 + */ + //通用发运报表,发运组 + public static final String GENERAL_SHIPPING_PART_GROUP = "GENERAL_SHIPPING_PART_GROUP"; + + } From 4a152acc956ef4693b772566da5b1a330bd9b4c0 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 2 Nov 2024 17:18:27 +0800 Subject: [PATCH 125/180] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java | 1 + .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 4 +++- .../apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java index c62b7c5..b6da623 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java @@ -40,6 +40,7 @@ public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { dataQueryHql.append("mes_production_assembly.assemblyPartNo AS assemblyPartNo,"); dataQueryHql.append("mes_production_assembly.assemblyPartName AS assemblyPartName,"); dataQueryHql.append("mes_production_assembly.assemblySn AS assemblySn,"); + dataQueryHql.append("mes_production_assembly.productSn AS productSn,"); dataQueryHql.append("mes_production_assembly.isSkip AS isSkip,"); dataQueryHql.append("mes_production_assembly.createDatetime AS createDatetime,"); dataQueryHql.append("mes_production_assembly.createUser AS createUser,"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 0523adc..815e149 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -267,11 +267,13 @@ public class MesWorkOrderService extends BaseMesService implements @Override protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getWorkOrderNo(), "workOrderNo", packBean); - DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partNameRdd", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); DdlPreparedPack.getStringLikerPack(bean.getCreateUser(), "createUser", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getVinCode(), "vinCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", packBean); if (!StringUtil.isEmpty(bean.getWorkOrderStatusQuery())) { DdlPreparedPack.getInPackList(Arrays.stream(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)).map(Integer::parseInt).collect(Collectors.toList()), "workOrderStatus", packBean); } else DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java index 647dc8d..f22c32c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java @@ -25,7 +25,6 @@ public class AssemblyPartReportServiceImpl implements IAssemblyPartReportService @Override public ListPager queryReport(AssemblyPartReportModel model, Pager pager) { - ListPager result = assemblyPartReportDao.queryReport(model,pager); - return result; + return assemblyPartReportDao.queryReport(model,pager); } } From 5e6a5c79ce44713dd69d924c2a353bfba1d5ca89 Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 4 Nov 2024 16:18:21 +0800 Subject: [PATCH 126/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/MesWorkOrderController.java | 22 +++++++++++++++++++++ .../serviceimpl/base/MesPartProdGroupService.java | 2 +- .../serviceimpl/base/MesWorkOrderService.java | 23 +++++++++++----------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index c5e75c6..7467b6a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -216,6 +216,28 @@ public class MesWorkOrderController extends BaseMesController { } } + @GetMapping(value = "/show-work-order") + @ApiOperation(value = "装配目视单预览查询") + public ResultBean doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, String carModelCode, String organizeCode, String userName ) { + try { + + ValidatorBean.checkNotNull(partNo, "零件号不能为空"); + ValidatorBean.checkNotNull(workCenterCode, "产线不能为空"); + ValidatorBean.checkNotNull(partProdGroupCode, "生产组代码不能为空"); + ValidatorBean.checkNotNull(carModelCode, "车型代码不能为空"); + ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空"); + ValidatorBean.checkNotNull(userName, "操作人不能为空"); + + return ResultBean.success("装配目视单预览查询成功") + .setResultList(mesWorkOrderService.doShowWorkOrderPrint(partNo, workCenterCode, partProdGroupCode, carModelCode, organizeCode, userName)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java index 8b7623e..3e5f9c4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java @@ -64,7 +64,7 @@ public class MesPartProdGroupService extends BaseMesService im DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(partProdGroupCodeList, MesExtConstWords.PART_PROD_GROUP_CODE, packBean); List partProdGroupList = baseRDao.findByHqlWhere(packBean); - return partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); + return CollectionUtils.isEmpty(partProdGroupList) ? null : partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 815e149..1d74cf8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1255,9 +1255,7 @@ public class MesWorkOrderService extends BaseMesService implements // 根据id 获取工单数据 List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); - List> resultMapList = packPrintResultMap(organizeCode, mesWorkOrderList, userName); - - return resultMapList; + return packPrintResultMap(organizeCode, mesWorkOrderList, userName); } @@ -1272,7 +1270,7 @@ public class MesWorkOrderService extends BaseMesService implements List mesWorkCenters = workCenterService.queryMesWorkCenterList(workCenterCodeList, organizeCode); // 产线名称集合 - Map workCenterNameMap = mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); + Map workCenterNameMap = CollectionUtils.isEmpty(mesWorkCenters) ? null : mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); // 生产零件号 List partProdGroupCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getPartProdGroupCode).distinct().collect(Collectors.toList()); @@ -1299,9 +1297,9 @@ public class MesWorkOrderService extends BaseMesService implements continue; } - mesWorkOrder.setWorkCenterName(workCenterNameMap.get(mesWorkOrder.getWorkCenterCode())); + mesWorkOrder.setWorkCenterName(!Objects.isNull(workCenterNameMap) && workCenterNameMap.containsKey(mesWorkOrder.getWorkCenterCode()) ? workCenterNameMap.get(mesWorkOrder.getWorkCenterCode()) : ""); - MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()); + MesPartProdGroup mesPartProdGroup = !Objects.isNull(partProdGroupMap) && partProdGroupMap.containsKey(mesWorkOrder.getPartProdGroupCode()) ? partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()) : null; if (mesPartProdGroup == null) { MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】不存在", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); @@ -1324,11 +1322,12 @@ public class MesWorkOrderService extends BaseMesService implements modelMap.put("mesWorkOrder", mesWorkOrder); modelMap.put("mesPartProdGroup", mesPartProdGroup); - MesCustomerCarModel customerCarModel = carModelMapByCode.get(mesWorkOrder.getCarModelCode()); + MesCustomerCarModel customerCarModel = !Objects.isNull(carModelMapByCode) && carModelMapByCode.containsKey(mesWorkOrder.getCarModelCode()) ? carModelMapByCode.get(mesWorkOrder.getCarModelCode()) : null; if (customerCarModel != null) { modelMap.put("mesCustomerCarModel", customerCarModel); } - List workOrderAssemblyListByWorkOrderNo = workOrderAssemblyMapByWorkOrderNo.get(mesWorkOrder.getWorkOrderNo()); + List workOrderAssemblyListByWorkOrderNo = !Objects.isNull(workOrderAssemblyMapByWorkOrderNo) && workOrderAssemblyMapByWorkOrderNo.containsKey(mesWorkOrder.getWorkOrderNo()) ? workOrderAssemblyMapByWorkOrderNo.get(mesWorkOrder.getWorkOrderNo()) : null; + if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); } @@ -1373,6 +1372,9 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringEqualPack(carModelCode, MesExtConstWords.CAR_MODEL_CODE, packBean); packBean.setOrderByStr(" order by createDatetime desc "); MesWorkOrder workOrder = workOrderRepository.getByProperty(packBean); + if (Objects.isNull(workOrder)) { + MesException.throwMesBusiException("零件【%s】产线【%s】生产组【%s】车型【%s】的工单不存在", partNo, workCenterCode, partProdGroupCode, carModelCode); + } List workOrderList = new ArrayList<>(); workOrderList.add(workOrder); @@ -1387,7 +1389,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getInPackList(carModelCodeList, MesExtConstWords.CAR_MODEL_CODE, packBean); List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); - return customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); + return CollectionUtils.isEmpty(customerCarModelList) ? null : customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); } private Map> getWorkOrderAssemblyMapByWorkOrderNo(String organizeCode, Map workOrderMapByWorkOrderNo) { @@ -1395,8 +1397,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); - Map> workOrderAssemblyMapByWorkOrderNo = workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); - return workOrderAssemblyMapByWorkOrderNo; + return CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); } private List getMesProductOffLineList(WmsProductModel model, String nowTime) { From a7bc2211d85fb060fe8de197cc62c99a5bb42591 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 4 Nov 2024 18:30:42 +0800 Subject: [PATCH 127/180] =?UTF-8?q?vin=E5=8F=B7=E5=B7=B2=E7=BB=8F=E7=94=9F?= =?UTF-8?q?=E6=88=90s=E5=8D=95=E5=88=99=E8=B7=B3=E8=BF=87,=E4=B8=8D?= =?UTF-8?q?=E5=9C=A8=E7=94=9F=E6=88=90=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java | 12 +++++++++++- .../serviceimpl/busi/MesEarlyWarningServiceImpl.java | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 5c5b64c..39b049c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -89,6 +89,16 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { @Transactional(propagation = Propagation.REQUIRES_NEW) public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) { + //判断vin是否已经生成了S单,如果已经生成S单 则不再生成工单 + String vinCode = sortInfo.getVinCode(); + DdlPackBean existPackBean = DdlPackBean.getDdlPackBean(sortInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(vinCode,"vin",existPackBean); + DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); + int count = mesWorkOrderRao.findByHqlWhereCount(existPackBean); + if (count > 0) { + sortInfo.setDescription("当前vin号已存在S单!"); + return; + } String organizeCode = partProdGroup.getOrganizeCode(); MesWorkOrder mesWorkOrder = new MesWorkOrder(); mesWorkOrder.setCustCode(partProdGroup.getCustCode()); @@ -156,7 +166,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { mesWorkOrder.setShiftCode(shift.getShiftCode()); } }else { - if (shiftTime <= startTime || shiftTime < endTime) { + if (shiftTime >= startTime || shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 8b5ad08..b412ad8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -384,7 +384,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { long summaryRealSupplyRealCount; String custOrderNo = workOrder.getCustOrderNo(); if(custOrderNo.length() >= 10){ - summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrder.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); }else { summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); } @@ -407,6 +407,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineToShippingAdjustNum(); } + if(realProductionBuffer <0){ + realProductionBuffer = 0L; + } mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); if (realProductionBuffer < productionRedBuffer){ From ebd39ef044c08a0cc249ed481b2c52916fbd298f Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 5 Nov 2024 09:19:26 +0800 Subject: [PATCH 128/180] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=89=E5=8D=8E?= =?UTF-8?q?=E4=B8=BAobs=E4=BB=A3=E7=A0=81,=E4=B8=8D=E9=9C=80=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-ext-mes-apiservice/pom.xml | 10 +- .../apiservice/config/HuaWeiCloudObsConfig.java | 88 +- .../controller/base/MesMediaFileCfgController.java | 26 +- .../ext/mes/apiservice/utils/HuaWeiOBSUtil.java | 1042 ++++++++++---------- .../ext/mes/pojo/constant/MesCommonConstant.java | 12 +- pom.xml | 2 +- 6 files changed, 579 insertions(+), 601 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/pom.xml b/modules/i3plus-ext-mes-apiservice/pom.xml index 339ba20..a5c5eae 100644 --- a/modules/i3plus-ext-mes-apiservice/pom.xml +++ b/modules/i3plus-ext-mes-apiservice/pom.xml @@ -19,11 +19,11 @@ org.apache.cxf cxf-spring-boot-starter-jaxws - - com.huaweicloud - esdk-obs-java-bundle - 3.23.9 - + + + + + impp.framework diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java index f0077f0..1f7b19d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java @@ -1,44 +1,44 @@ -package cn.estsh.i3plus.ext.mes.apiservice.config; - -import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil; -import com.obs.services.ObsClient; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @Description : HuaWeiCloudObsConfig - * @Author :gsz - * @Date 2024/6/11 13:28 - * @Modify - **/ -@Configuration -public class HuaWeiCloudObsConfig { - - @Value("${huaweiobs.bucketName}") - @Getter - private String bucketName; - - @Value("${huaweiobs.ak}") - @Getter - private String ak; - - @Value("${huaweiobs.sk}") - @Getter - private String sk; - - @Value("${huaweiobs.endPoint}") - @Getter - private String endPoint; - - @Bean - public ObsClient getObsClient() { - ObsClient obsClient = new ObsClient(ak, sk, endPoint); - return obsClient; - } - @Bean - public HuaWeiOBSUtil huaWeiOBSUtil() { - return new HuaWeiOBSUtil(bucketName, ak, sk, endPoint); - } -} +//package cn.estsh.i3plus.ext.mes.apiservice.config; +// +//import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil; +//import com.obs.services.ObsClient; +//import lombok.Getter; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +///** +// * @Description : HuaWeiCloudObsConfig +// * @Author :gsz +// * @Date 2024/6/11 13:28 +// * @Modify +// **/ +//@Configuration +//public class HuaWeiCloudObsConfig { +// +// @Value("${huaweiobs.bucketName}") +// @Getter +// private String bucketName; +// +// @Value("${huaweiobs.ak}") +// @Getter +// private String ak; +// +// @Value("${huaweiobs.sk}") +// @Getter +// private String sk; +// +// @Value("${huaweiobs.endPoint}") +// @Getter +// private String endPoint; +// +// @Bean +// public ObsClient getObsClient() { +// ObsClient obsClient = new ObsClient(ak, sk, endPoint); +// return obsClient; +// } +// @Bean +// public HuaWeiOBSUtil huaWeiOBSUtil() { +// return new HuaWeiOBSUtil(bucketName, ak, sk, endPoint); +// } +//} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java index cad3ccd..95f8749 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java @@ -1,39 +1,17 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesMediaFileCfgService; -import cn.estsh.i3plus.ext.mes.apiservice.config.HuaWeiCloudObsConfig; -import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.icloud.core.sdk.ICoreSysFileCloud; -import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesMediaFileCfg; import cn.estsh.i3plus.pojo.mes.repository.MesMediaFileCfgRepository; -import cn.estsh.impp.framework.boot.exception.ImppBusiException; -import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.fileservice.ImppFileService; -import cn.estsh.impp.framework.boot.util.ResultBean; -import com.obs.services.ObsClient; -import com.obs.services.exception.ObsException; -import com.obs.services.model.*; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * @Description: 媒体文件维护 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java index 32568b9..01bf804 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java @@ -1,523 +1,523 @@ -package cn.estsh.i3plus.ext.mes.apiservice.utils; - -import com.obs.services.ObsClient; -import com.obs.services.model.*; -import groovy.util.logging.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.multipart.MultipartFile; - -import java.io.*; -import java.util.ArrayList; -import java.util.List; - -/** - * @Description : ObsUtil - * @Author :gsz - * @Date 2024/6/11 14:55 - * @Modify - **/ -@Slf4j -public class HuaWeiOBSUtil { - public static final Logger LOGGER = LoggerFactory.getLogger(HuaWeiOBSUtil.class); -// -// @Autowired -// HuaWeiCloudObsConfig obsConfig; - /** - * 文件外链过期时间,7天 - */ - private static long expire = 7 * 24 * 60 * 60; - - /** - * 文件外链访问端口 - */ - private static String port = ":443"; - - private static String bucketName; - private static String ak; - private static String sk; - private static String endPoint; - - /** - * OBS操作客户端 - */ - private static ObsClient obsClient = null; - - private static final String SEPARATOR = "/"; - - public HuaWeiOBSUtil(String bucketName, String ak, String sk, String endPoint) { - HuaWeiOBSUtil.bucketName = bucketName; - HuaWeiOBSUtil.ak = ak; - HuaWeiOBSUtil.sk = sk; - HuaWeiOBSUtil.endPoint = endPoint; - createObsClientInstance(); - } -// public HuaWeiOBSUtil(HuaWeiCloudObsConfig obsConfig) { -// HuaWeiOBSUtil.bucketName = obsConfig.getBucketName(); -// HuaWeiOBSUtil.ak = obsConfig.getAk(); -// HuaWeiOBSUtil.sk = obsConfig.getSk(); -// HuaWeiOBSUtil.endPoint = obsConfig.getEndPoint(); +//package cn.estsh.i3plus.ext.mes.apiservice.utils; +// +//import com.obs.services.ObsClient; +//import com.obs.services.model.*; +//import groovy.util.logging.Slf4j; +//import org.apache.commons.lang.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.web.multipart.MultipartFile; +// +//import java.io.*; +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * @Description : ObsUtil +// * @Author :gsz +// * @Date 2024/6/11 14:55 +// * @Modify +// **/ +//@Slf4j +//public class HuaWeiOBSUtil { +// public static final Logger LOGGER = LoggerFactory.getLogger(HuaWeiOBSUtil.class); +//// +//// @Autowired +//// HuaWeiCloudObsConfig obsConfig; +// /** +// * 文件外链过期时间,7天 +// */ +// private static long expire = 7 * 24 * 60 * 60; +// +// /** +// * 文件外链访问端口 +// */ +// private static String port = ":443"; +// +// private static String bucketName; +// private static String ak; +// private static String sk; +// private static String endPoint; +// +// /** +// * OBS操作客户端 +// */ +// private static ObsClient obsClient = null; +// +// private static final String SEPARATOR = "/"; +// +// public HuaWeiOBSUtil(String bucketName, String ak, String sk, String endPoint) { +// HuaWeiOBSUtil.bucketName = bucketName; +// HuaWeiOBSUtil.ak = ak; +// HuaWeiOBSUtil.sk = sk; +// HuaWeiOBSUtil.endPoint = endPoint; // createObsClientInstance(); // } - - public static String getBucketName() { - return bucketName; - } - - public static String getAk() { - return ak; - } - - public static String getSk() { - return sk; - } - - public static String getEndPoint() { - return endPoint; - } - - /** - * 获取OBS操作客户端 - * - * @return - */ - private static void createObsClientInstance() { - try { - if (obsClient == null) { - synchronized (ObsClient.class) { - if (obsClient == null) { - obsClient = new ObsClient(ak, sk, endPoint); - } - } - } - createBucket(bucketName, endPoint); - } catch (Exception e) { - LOGGER.error("连接华为云存储服务器异常:" + e.getMessage(), e); - } - } - - /** - * 获取上传文件的基础路径 - * - * @return url - */ - public static String getBasisUrl() { - //实示例:http协议 + 存储桶名称 + . + endPoint + port + / - return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; - } - - /** - * 获取上传文件的基础路径 - * - * @param bucketName - * @return - */ - public static String getBasisUrl(String bucketName) { - //实示例:http协议 + 存储桶名称 + . + endPoint + port + / - return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; - } - - /** - * 获取区域 - * - * @param endPoint - * @return - */ - public static String getRegion(String endPoint) { - String substring = endPoint.substring(endPoint.indexOf(".") + 1); - return substring.substring(0, substring.indexOf(".")); - } - - /** - * 获取http协议 - * - * @param endPoint - * @return - */ - public static String getHttpProtocol(String endPoint) { - return endPoint.substring(0, endPoint.indexOf(":")); - } - - /** - * 创建存储桶 - * - * @param bucketName - * @return - */ - public static void createBucket(String bucketName, String endPoint) { - if (!headBucket(bucketName)) { - CreateBucketRequest request = new CreateBucketRequest(); - // 设置存储桶名称 - request.setBucketName(bucketName); - // 设置桶区域位置,从endPoint中截取,如果Location设置的区域与endPoint中的区域不是同一个,则创建会报错 - request.setLocation(getRegion(endPoint)); - // 创建桶成功 - obsClient.createBucket(request); - } - } - - /** - * 删除存储桶 - * - * @param bucketName - * @return - */ - public static HeaderResponse deleteBucket(String bucketName) { - return obsClient.deleteBucket(bucketName); - } - - /** - * 判断存储桶是否存在 - * - * @param bucketName - * @return - */ - public static boolean headBucket(String bucketName) { - return obsClient.headBucket(bucketName); - } - - /** - * 上传字符 - * - * @param bucketName - * @param objectName - * @param content - * @return - */ - public static PutObjectResult putObjectByStr(String bucketName, String objectName, String content) { - if (StringUtils.isBlank(content)) { - return null; - } - - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes())); - } - - /** - * 上传输入流 - * - * @param bucketName - * @param objectName - * @param inputStream - * @return - */ - public static PutObjectResult putObjectByInput(String bucketName, String objectName, InputStream inputStream) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, inputStream); - } - - /** - * 上传文件输入流 - * - * @param bucketName - * @param objectName - * @param fileInputStream - * @return - */ - public static PutObjectResult putObjectByFileInput(String bucketName, String objectName, FileInputStream fileInputStream) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, fileInputStream); - } - - /** - * 通过MultipartFile,上传文件 - * - * @param bucketName - * @param objectName - * @param media - * @return - */ - public static PutObjectResult putObjectByMultipartFile(String bucketName, String objectName, MultipartFile media) throws IOException { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, media.getInputStream()); - } - - /** - * 上传本地文件 - * - * @param bucketName - * @param objectName - * @param file - * @return - */ - public static PutObjectResult putObjectByFile(String bucketName, String objectName, File file) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, file); - } - - /** - * 下载文件到本地 - * - * @param bucketName - * @param objectName - * @param filePath - * @return - */ - public static boolean downloadObject(String bucketName, String objectName, String filePath) throws Exception { - if (StringUtils.isBlank(filePath)) { - return false; - } - //重新构建objectName - objectName = buildObjectName(objectName); - - filePath = filePath.replace("\\", SEPARATOR); - - InputStream input = null; - FileOutputStream fileOutputStream = null; - try { - // 获取对象 - ObsObject obsObject = obsClient.getObject(bucketName, objectName); - // 读取对象内容 - input = obsObject.getObjectContent(); - - if (input == null) { - return false; - } - - //获取文件夹路径 - if (filePath.contains(SEPARATOR)) { - String dir = filePath.substring(0, filePath.lastIndexOf(SEPARATOR)); - File difFile = new File(dir); - if (!difFile.exists()) { - //创建文件夹 - boolean mkdirs = difFile.mkdirs(); - } - } - - File file = new File(filePath); - fileOutputStream = new FileOutputStream(file); - - byte[] b = new byte[1024]; - int len; - while ((len = input.read(b)) != -1) { - fileOutputStream.write(b, 0, len); - } - return true; - } finally { - if (fileOutputStream != null) { - fileOutputStream.close(); - } - if (input != null) { - input.close(); - } - } - } - - /** - * 获取文件内容 - * - * @param bucketName - * @param objectName - * @return - */ - public static String getObjectContent(String bucketName, String objectName) throws IOException { - //重新构建objectName - objectName = buildObjectName(objectName); - - InputStream input = null; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - ObsObject obsObject = obsClient.getObject(bucketName, objectName); - // 读取对象内容 - input = obsObject.getObjectContent(); - - byte[] b = new byte[1024]; - int len; - while ((len = input.read(b)) != -1) { - bos.write(b, 0, len); - } - - return new String(bos.toByteArray()); - } finally { - bos.close(); - if (input != null) { - input.close(); - } - } - } - - /** - * 获取文件输入流 - * - * @param bucketName - * @param objectName - * @return - */ - public static InputStream getObject(String bucketName, String objectName) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.getObject(bucketName, objectName).getObjectContent(); - } - - /** - * 指定数目和前缀列举 - * - * @param bucketName - * @param prefix - * @param maxKeys - * @return - */ - public static List listObjects(String bucketName, String prefix, Integer maxKeys) { - prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; - - ListObjectsRequest request = new ListObjectsRequest(bucketName); - // 设置列举的对象个数 - request.setMaxKeys(maxKeys); - // 设置列举的对象需要带有指定前缀 - request.setPrefix(prefix); - ObjectListing result = obsClient.listObjects(request); - - return result.getObjects(); - } - - /** - * 列举指定前缀的全部对象 - * - * @param bucketName - * @param prefix - * @return - */ - public static List listAllObjects(String bucketName, String prefix) { - prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; - - List list = new ArrayList<>(); - - ListObjectsRequest request = new ListObjectsRequest(bucketName); - // 设置列举的对象个数 - request.setMaxKeys(1000); - // 设置列举的对象需要带有指定前缀 - request.setPrefix(prefix); - - ObjectListing result; - do { - result = obsClient.listObjects(request); - request.setMarker(result.getNextMarker()); - - list.addAll(result.getObjects()); - } while (result.isTruncated()); - - return list; - } - - /** - * 删除单个对象 - * - * @param bucketName - * @param objectName - * @return - */ - public static DeleteObjectResult deleteObject(String bucketName, String objectName) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.deleteObject(bucketName, objectName); - } - - /** - * 复制对象 - * - * @param sourceBucketName - * @param sourceObjectName - * @param destBucketName - * @param destObjectName - * @return - */ - public static CopyObjectResult copyObject(String sourceBucketName, String sourceObjectName, - String destBucketName, String destObjectName) { - return obsClient.copyObject(sourceBucketName, sourceObjectName, destBucketName, destObjectName); - } - - /** - * 判断对象是否存在 - * - * @param bucketName - * @param objectName - * @return - */ - public static boolean doesObjectExist(String bucketName, String objectName) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.doesObjectExist(bucketName, objectName); - } - - /** - * 获取文件外链 - * - * @param bucketName - * @param objectName - * @param expires 单位:秒(s) - * @return - */ - public static String getSignedUrl(String bucketName, String objectName, Long expires) { - //重新构建objectName - objectName = buildObjectName(objectName); - - TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expires); - request.setBucketName(bucketName); - request.setObjectKey(objectName); - TemporarySignatureResponse response = obsClient.createTemporarySignature(request); - return response.getSignedUrl(); - } - - /** - * 获取文件外链-url有效时间默认7天 - * - * @param bucketName - * @param objectName - * @return - */ - public static String getSignedUrl(String bucketName, String objectName) { - return getSignedUrl(bucketName, objectName, expire); - } - - /** - * 重新构建objectName - * - * @param objectName - */ - private static String buildObjectName(String objectName) { - if (StringUtils.isBlank(objectName)) { - return objectName; - } - //去除开头的/ - objectName = objectName.startsWith("/") ? objectName.substring(1) : objectName; - //去除?后边的参数 - objectName = objectName.contains("?") ? objectName.substring(0, objectName.indexOf("?")) : objectName; - - return objectName; - } - - /** - * 传入文件访问外链,返回objectName - * - * @param url - * @return - */ - public static String getObjectNameByUrl(String url) { - if (StringUtils.isBlank(url)) { - return url; - } - - if (url.contains(getBasisUrl())) { - // 去除minio基础路径 - url = url.replace(getBasisUrl(), ""); - // 去除?后边的参数 - url = url.contains("?") ? url.substring(0, url.indexOf("?")) : url; - } - - return url; - } -} +//// public HuaWeiOBSUtil(HuaWeiCloudObsConfig obsConfig) { +//// HuaWeiOBSUtil.bucketName = obsConfig.getBucketName(); +//// HuaWeiOBSUtil.ak = obsConfig.getAk(); +//// HuaWeiOBSUtil.sk = obsConfig.getSk(); +//// HuaWeiOBSUtil.endPoint = obsConfig.getEndPoint(); +//// createObsClientInstance(); +//// } +// +// public static String getBucketName() { +// return bucketName; +// } +// +// public static String getAk() { +// return ak; +// } +// +// public static String getSk() { +// return sk; +// } +// +// public static String getEndPoint() { +// return endPoint; +// } +// +// /** +// * 获取OBS操作客户端 +// * +// * @return +// */ +// private static void createObsClientInstance() { +// try { +// if (obsClient == null) { +// synchronized (ObsClient.class) { +// if (obsClient == null) { +// obsClient = new ObsClient(ak, sk, endPoint); +// } +// } +// } +// createBucket(bucketName, endPoint); +// } catch (Exception e) { +// LOGGER.error("连接华为云存储服务器异常:" + e.getMessage(), e); +// } +// } +// +// /** +// * 获取上传文件的基础路径 +// * +// * @return url +// */ +// public static String getBasisUrl() { +// //实示例:http协议 + 存储桶名称 + . + endPoint + port + / +// return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; +// } +// +// /** +// * 获取上传文件的基础路径 +// * +// * @param bucketName +// * @return +// */ +// public static String getBasisUrl(String bucketName) { +// //实示例:http协议 + 存储桶名称 + . + endPoint + port + / +// return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; +// } +// +// /** +// * 获取区域 +// * +// * @param endPoint +// * @return +// */ +// public static String getRegion(String endPoint) { +// String substring = endPoint.substring(endPoint.indexOf(".") + 1); +// return substring.substring(0, substring.indexOf(".")); +// } +// +// /** +// * 获取http协议 +// * +// * @param endPoint +// * @return +// */ +// public static String getHttpProtocol(String endPoint) { +// return endPoint.substring(0, endPoint.indexOf(":")); +// } +// +// /** +// * 创建存储桶 +// * +// * @param bucketName +// * @return +// */ +// public static void createBucket(String bucketName, String endPoint) { +// if (!headBucket(bucketName)) { +// CreateBucketRequest request = new CreateBucketRequest(); +// // 设置存储桶名称 +// request.setBucketName(bucketName); +// // 设置桶区域位置,从endPoint中截取,如果Location设置的区域与endPoint中的区域不是同一个,则创建会报错 +// request.setLocation(getRegion(endPoint)); +// // 创建桶成功 +// obsClient.createBucket(request); +// } +// } +// +// /** +// * 删除存储桶 +// * +// * @param bucketName +// * @return +// */ +// public static HeaderResponse deleteBucket(String bucketName) { +// return obsClient.deleteBucket(bucketName); +// } +// +// /** +// * 判断存储桶是否存在 +// * +// * @param bucketName +// * @return +// */ +// public static boolean headBucket(String bucketName) { +// return obsClient.headBucket(bucketName); +// } +// +// /** +// * 上传字符 +// * +// * @param bucketName +// * @param objectName +// * @param content +// * @return +// */ +// public static PutObjectResult putObjectByStr(String bucketName, String objectName, String content) { +// if (StringUtils.isBlank(content)) { +// return null; +// } +// +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes())); +// } +// +// /** +// * 上传输入流 +// * +// * @param bucketName +// * @param objectName +// * @param inputStream +// * @return +// */ +// public static PutObjectResult putObjectByInput(String bucketName, String objectName, InputStream inputStream) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, inputStream); +// } +// +// /** +// * 上传文件输入流 +// * +// * @param bucketName +// * @param objectName +// * @param fileInputStream +// * @return +// */ +// public static PutObjectResult putObjectByFileInput(String bucketName, String objectName, FileInputStream fileInputStream) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, fileInputStream); +// } +// +// /** +// * 通过MultipartFile,上传文件 +// * +// * @param bucketName +// * @param objectName +// * @param media +// * @return +// */ +// public static PutObjectResult putObjectByMultipartFile(String bucketName, String objectName, MultipartFile media) throws IOException { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, media.getInputStream()); +// } +// +// /** +// * 上传本地文件 +// * +// * @param bucketName +// * @param objectName +// * @param file +// * @return +// */ +// public static PutObjectResult putObjectByFile(String bucketName, String objectName, File file) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, file); +// } +// +// /** +// * 下载文件到本地 +// * +// * @param bucketName +// * @param objectName +// * @param filePath +// * @return +// */ +// public static boolean downloadObject(String bucketName, String objectName, String filePath) throws Exception { +// if (StringUtils.isBlank(filePath)) { +// return false; +// } +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// filePath = filePath.replace("\\", SEPARATOR); +// +// InputStream input = null; +// FileOutputStream fileOutputStream = null; +// try { +// // 获取对象 +// ObsObject obsObject = obsClient.getObject(bucketName, objectName); +// // 读取对象内容 +// input = obsObject.getObjectContent(); +// +// if (input == null) { +// return false; +// } +// +// //获取文件夹路径 +// if (filePath.contains(SEPARATOR)) { +// String dir = filePath.substring(0, filePath.lastIndexOf(SEPARATOR)); +// File difFile = new File(dir); +// if (!difFile.exists()) { +// //创建文件夹 +// boolean mkdirs = difFile.mkdirs(); +// } +// } +// +// File file = new File(filePath); +// fileOutputStream = new FileOutputStream(file); +// +// byte[] b = new byte[1024]; +// int len; +// while ((len = input.read(b)) != -1) { +// fileOutputStream.write(b, 0, len); +// } +// return true; +// } finally { +// if (fileOutputStream != null) { +// fileOutputStream.close(); +// } +// if (input != null) { +// input.close(); +// } +// } +// } +// +// /** +// * 获取文件内容 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static String getObjectContent(String bucketName, String objectName) throws IOException { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// InputStream input = null; +// ByteArrayOutputStream bos = new ByteArrayOutputStream(); +// try { +// ObsObject obsObject = obsClient.getObject(bucketName, objectName); +// // 读取对象内容 +// input = obsObject.getObjectContent(); +// +// byte[] b = new byte[1024]; +// int len; +// while ((len = input.read(b)) != -1) { +// bos.write(b, 0, len); +// } +// +// return new String(bos.toByteArray()); +// } finally { +// bos.close(); +// if (input != null) { +// input.close(); +// } +// } +// } +// +// /** +// * 获取文件输入流 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static InputStream getObject(String bucketName, String objectName) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.getObject(bucketName, objectName).getObjectContent(); +// } +// +// /** +// * 指定数目和前缀列举 +// * +// * @param bucketName +// * @param prefix +// * @param maxKeys +// * @return +// */ +// public static List listObjects(String bucketName, String prefix, Integer maxKeys) { +// prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; +// +// ListObjectsRequest request = new ListObjectsRequest(bucketName); +// // 设置列举的对象个数 +// request.setMaxKeys(maxKeys); +// // 设置列举的对象需要带有指定前缀 +// request.setPrefix(prefix); +// ObjectListing result = obsClient.listObjects(request); +// +// return result.getObjects(); +// } +// +// /** +// * 列举指定前缀的全部对象 +// * +// * @param bucketName +// * @param prefix +// * @return +// */ +// public static List listAllObjects(String bucketName, String prefix) { +// prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; +// +// List list = new ArrayList<>(); +// +// ListObjectsRequest request = new ListObjectsRequest(bucketName); +// // 设置列举的对象个数 +// request.setMaxKeys(1000); +// // 设置列举的对象需要带有指定前缀 +// request.setPrefix(prefix); +// +// ObjectListing result; +// do { +// result = obsClient.listObjects(request); +// request.setMarker(result.getNextMarker()); +// +// list.addAll(result.getObjects()); +// } while (result.isTruncated()); +// +// return list; +// } +// +// /** +// * 删除单个对象 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static DeleteObjectResult deleteObject(String bucketName, String objectName) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.deleteObject(bucketName, objectName); +// } +// +// /** +// * 复制对象 +// * +// * @param sourceBucketName +// * @param sourceObjectName +// * @param destBucketName +// * @param destObjectName +// * @return +// */ +// public static CopyObjectResult copyObject(String sourceBucketName, String sourceObjectName, +// String destBucketName, String destObjectName) { +// return obsClient.copyObject(sourceBucketName, sourceObjectName, destBucketName, destObjectName); +// } +// +// /** +// * 判断对象是否存在 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static boolean doesObjectExist(String bucketName, String objectName) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.doesObjectExist(bucketName, objectName); +// } +// +// /** +// * 获取文件外链 +// * +// * @param bucketName +// * @param objectName +// * @param expires 单位:秒(s) +// * @return +// */ +// public static String getSignedUrl(String bucketName, String objectName, Long expires) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expires); +// request.setBucketName(bucketName); +// request.setObjectKey(objectName); +// TemporarySignatureResponse response = obsClient.createTemporarySignature(request); +// return response.getSignedUrl(); +// } +// +// /** +// * 获取文件外链-url有效时间默认7天 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static String getSignedUrl(String bucketName, String objectName) { +// return getSignedUrl(bucketName, objectName, expire); +// } +// +// /** +// * 重新构建objectName +// * +// * @param objectName +// */ +// private static String buildObjectName(String objectName) { +// if (StringUtils.isBlank(objectName)) { +// return objectName; +// } +// //去除开头的/ +// objectName = objectName.startsWith("/") ? objectName.substring(1) : objectName; +// //去除?后边的参数 +// objectName = objectName.contains("?") ? objectName.substring(0, objectName.indexOf("?")) : objectName; +// +// return objectName; +// } +// +// /** +// * 传入文件访问外链,返回objectName +// * +// * @param url +// * @return +// */ +// public static String getObjectNameByUrl(String url) { +// if (StringUtils.isBlank(url)) { +// return url; +// } +// +// if (url.contains(getBasisUrl())) { +// // 去除minio基础路径 +// url = url.replace(getBasisUrl(), ""); +// // 去除?后边的参数 +// url = url.contains("?") ? url.substring(0, url.indexOf("?")) : url; +// } +// +// return url; +// } +//} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java index 1cb3a62..4b2cb21 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java @@ -40,12 +40,12 @@ public class MesCommonConstant { public static final String CCSC_TASK_NO = "CCSC_TASK_NO"; public static final String CCSC_RETEST_NO = "RETEST_%s"; - //OBS - public static final String OBS_AK = "TPNXQ2LUMRHNYYOBO8QO"; - public static final String OBS_SK = "ppTtbisjdBxQsU124mFnubSojUsB6Wvp9KSaUAeb"; - public static final String OBS_END_POINT = "obs.cn-east-3.myhuaweicloud.com"; - public static final String OBS_BUCKET_NAME = "mes-wms-obs"; - public static final String OBS_LOCATION = "cn-east-3"; +// //OBS +// public static final String OBS_AK = "TPNXQ2LUMRHNYYOBO8QO"; +// public static final String OBS_SK = "ppTtbisjdBxQsU124mFnubSojUsB6Wvp9KSaUAeb"; +// public static final String OBS_END_POINT = "obs.cn-east-3.myhuaweicloud.com"; +// public static final String OBS_BUCKET_NAME = "mes-wms-obs"; +// public static final String OBS_LOCATION = "cn-east-3"; //字体位置 public static final String FONDS_TEMP_PATH = File.separator+"usr" + File.separator+ "share" + File.separator+ "fonts" + File.separator+ "myfonts" + File.separator; diff --git a/pom.xml b/pom.xml index 31ee71a..995d4a1 100644 --- a/pom.xml +++ b/pom.xml @@ -29,8 +29,8 @@ INFO true UTF-8 - 1.0.1-YZ + 1.0.0-yfai 1.0.0.1-patch 1.0.0.1-patch From 9786aeef50892598cb679f5830c48c68f07bfc5d Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 5 Nov 2024 10:06:10 +0800 Subject: [PATCH 129/180] =?UTF-8?q?=E5=88=A4=E6=96=ADvin=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E7=94=9F=E6=88=90=E4=BA=86S=E5=8D=95,?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=B7=B2=E7=BB=8F=E7=94=9F=E6=88=90S?= =?UTF-8?q?=E5=8D=95=20=E5=88=99=E4=B8=8D=E5=86=8D=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 39b049c..ffc2240 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -92,7 +92,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //判断vin是否已经生成了S单,如果已经生成S单 则不再生成工单 String vinCode = sortInfo.getVinCode(); DdlPackBean existPackBean = DdlPackBean.getDdlPackBean(sortInfo.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(vinCode,"vin",existPackBean); + DdlPreparedPack.getStringEqualPack(vinCode,"vinCode",existPackBean); DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); int count = mesWorkOrderRao.findByHqlWhereCount(existPackBean); if (count > 0) { From 6ca8142abb77f393e0656279dfddc8a32c55f091 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 5 Nov 2024 18:30:44 +0800 Subject: [PATCH 130/180] =?UTF-8?q?43661=20=E6=8E=92=E5=BA=8F=E5=8F=91?= =?UTF-8?q?=E8=BF=90=E6=89=AB=E6=8F=8F=E6=9D=A1=E7=A0=81=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=90=8C=E5=BA=8F=E5=8F=B7=E7=9A=84=E9=9B=B6=E4=BB=B6=E4=B9=9F?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=A0=A1=E9=AA=8C=E6=89=AB=E6=8F=8F=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesCustomerPartTypeService.java | 13 +++++ .../base/MesCustomerPartTypeController.java | 20 +++++++ .../controller/base/MesWorkOrderController.java | 1 - .../mes/apiservice/cus_suit/Pisces1Properties.java | 5 +- .../mes/apiservice/cus_suit/Pisces2Properties.java | 67 ++++++++++++++++++++++ .../mes/apiservice/cus_suit/PiscesProperties.java | 5 +- .../report/ShipmentDetailReportDaoImpl.java | 1 + .../apiservice/dbinterface/MesSAPDbAdapter.java | 32 +++++++++-- .../base/MesCustomerPartTypeServiceImpl.java | 60 +++++++++++++++++++ .../base/MesShippingOrderManagementService.java | 2 + 10 files changed, 193 insertions(+), 13 deletions(-) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java new file mode 100644 index 0000000..021dd14 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPartType; + +/** + * @Description : 客户零件类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 17:27 + * @Modify: + **/ +public interface IMesCustomerPartTypeService extends IBaseMesService { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java new file mode 100644 index 0000000..9687050 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPartType; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 客户零件类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 17:35 + * @Modify: + **/ +@Api(description = "客户零件类型") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCustomerPartType") +public class MesCustomerPartTypeController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 7467b6a..13b1c01 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -224,7 +224,6 @@ public class MesWorkOrderController extends BaseMesController { ValidatorBean.checkNotNull(partNo, "零件号不能为空"); ValidatorBean.checkNotNull(workCenterCode, "产线不能为空"); ValidatorBean.checkNotNull(partProdGroupCode, "生产组代码不能为空"); - ValidatorBean.checkNotNull(carModelCode, "车型代码不能为空"); ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空"); ValidatorBean.checkNotNull(userName, "操作人不能为空"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java index 5286f1a..fa3c515 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java @@ -60,9 +60,8 @@ public class Pisces1Properties { * 注册客户定制数据源 */ LOGGER.info("【客户定制化:pisces1数据源加载...】"); - DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), - this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); - return piscesDataSource; + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java new file mode 100644 index 0000000..9c4de80 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java @@ -0,0 +1,67 @@ +package cn.estsh.i3plus.ext.mes.apiservice.cus_suit; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * @Description : pisces2数据源配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 11:29 + * @Modify: + **/ +@Configuration +public class Pisces2Properties { + + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + /*********************** + * pisces2数据源配置 + */ + @Value("${impp.pisces2.datasource.isopen}") + @Getter + private boolean piscesIsOpen; + + @Value("${impp.pisces2.datasource.driver-class-name}") + @Getter + private String piscesDriverClassName; + + @Value("${impp.pisces2.datasource.alias}") + @Getter + private String piscesDsAlias; + + @Value("${impp.pisces2.datasource.jdbc-url}") + @Getter + private String piscesDsJdbcUrl; + + @Value("${impp.pisces2.datasource.username}") + @Getter + private String piscesDsUsername; + + @Value("${impp.pisces2.datasource.password}") + @Getter + private String piscesDsPassword; + + @Bean(name = "pisces2DataSource") + @ConditionalOnExpression("'${impp.pisces2.datasource.isopen:false}' == 'true'") + public DynamicDataSourceProxy initPiscesCustomerSet(){ + LOGGER.info("【初始化客户定制化...】"); + + /** + * 注册客户定制数据源 + */ + LOGGER.info("【客户定制化:pisces2数据源加载...】"); + + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java index 2677039..9a9f997 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java @@ -60,9 +60,8 @@ public class PiscesProperties { * 注册客户定制数据源 */ LOGGER.info("【客户定制化:pisces数据源加载...】"); - DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), - this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); - return piscesDataSource; + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java index 47c0c2c..9278513 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java @@ -84,6 +84,7 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao { dataQueryHql.append("ms.status AS status,"); dataQueryHql.append("ms.shippingGroupCode AS shippingGroupCode,"); dataQueryHql.append("ms.orderCode AS orderCode,"); + dataQueryHql.append("ms.planArriveEndTime AS planArriveEndTime,"); dataQueryHql.append("ms.scanSeqWay AS scanSeqWay"); dataQueryHql.append(")"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java index bab7d30..a2ae996 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java @@ -53,6 +53,8 @@ public class MesSAPDbAdapter { @Resource(name = "pisces1DataSource") private DynamicDataSourceProxy pisces1DataSourceProxy; + @Resource(name = "pisces2DataSource") + private DynamicDataSourceProxy pisces2DataSourceProxy; @Value("${sync.redis.time:1800}") private Integer redisTime; @@ -82,7 +84,8 @@ public class MesSAPDbAdapter { DynamicDataSourceProxy sapDataSourceProxy, DynamicDataSourceProxy mesDataSourceProxy, DynamicDataSourceProxy piscesDataSourceProxy, - DynamicDataSourceProxy pisces1DataSourceProxy) throws Exception { + DynamicDataSourceProxy pisces1DataSourceProxy, + DynamicDataSourceProxy pisces2DataSourceProxy) throws Exception { WmsSAPDbWriter wmsSAPDbWriter = null; @@ -110,6 +113,14 @@ public class MesSAPDbAdapter { wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces1DataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES22MES.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(pisces2DataSourceProxy, mesDataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES2.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces2DataSourceProxy); + } + // new 的对象需要手工注入 bean if (SpringContextsUtil.getApplicationContext() != null) { @@ -140,7 +151,8 @@ public class MesSAPDbAdapter { DynamicDataSourceProxy sapDataSourceProxy, DynamicDataSourceProxy mesDataSourceProxy, DynamicDataSourceProxy piscesDataSourceProxy, - DynamicDataSourceProxy pisces1DataSourceProxy) { + DynamicDataSourceProxy pisces1DataSourceProxy, + DynamicDataSourceProxy pisces2DataSourceProxy) { WmsSAPDbReader wmsSAPDbReader = null; @@ -168,6 +180,14 @@ public class MesSAPDbAdapter { wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES22MES.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(pisces2DataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES2.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); + } + // if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.WMS2MES.getName())) { // wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); // } @@ -220,11 +240,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); reader.setSrcConn(this.srcConn); @@ -381,11 +401,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); reader.setSrcConn(this.srcConn); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java new file mode 100644 index 0000000..1c33488 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java @@ -0,0 +1,60 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartTypeService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPartType; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +/** + * @Description : 客户零件类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 17:25 + * @Modify: + **/ +@Service +@Slf4j +public class MesCustomerPartTypeServiceImpl extends BaseMesService implements IMesCustomerPartTypeService { + + @Override + protected void onInsertBean(MesCustomerPartType item) { + checkData(item); + } + + @Override + protected void onUpdateBean(MesCustomerPartType item) { + checkData(item); + } + + @Override + protected void setPackQueryBean(MesCustomerPartType bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getPartTypeCode(), "partTypeCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartTypeName(), "partTypeName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getCustPartNo(), "custPartNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getCustPartName(), "custPartName", packBean); + } + + private void checkData(MesCustomerPartType item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getPartTypeCode(), "零件类型代码不能为空"); + ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空"); + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartTypeCode(), "partTypeCode", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getCustPartNo(), "custPartNo", seriesPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean); + boolean flg = baseRDao.isExitByHql(seriesPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("类型【%s】客户零件【%s】数据已存在,请检查数据", item.getPartTypeCode(), item.getCustPartNo()) + .build(); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index 2382d12..524eb4c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -74,6 +74,8 @@ public class MesShippingOrderManagementService extends BaseMesService Date: Tue, 5 Nov 2024 19:37:16 +0800 Subject: [PATCH 131/180] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A2=9E=E5=8A=A0=E5=AE=A2=E6=88=B7=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java index 1c33488..db569e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java @@ -37,6 +37,7 @@ public class MesCustomerPartTypeServiceImpl extends BaseMesService Date: Tue, 5 Nov 2024 19:40:36 +0800 Subject: [PATCH 132/180] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E9=A2=84=E8=A7=88=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/controller/base/MesWorkOrderController.java | 12 ++++-------- .../mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 8 ++++---- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 13b1c01..6c68dea 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -7,17 +7,14 @@ import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; -import cn.estsh.i3plus.mes.apiservice.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -30,15 +27,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; @Api(description = "工单主页面") @RestController @@ -221,11 +215,13 @@ public class MesWorkOrderController extends BaseMesController { public ResultBean doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, String carModelCode, String organizeCode, String userName ) { try { - ValidatorBean.checkNotNull(partNo, "零件号不能为空"); ValidatorBean.checkNotNull(workCenterCode, "产线不能为空"); ValidatorBean.checkNotNull(partProdGroupCode, "生产组代码不能为空"); ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空"); ValidatorBean.checkNotNull(userName, "操作人不能为空"); + if (StringUtil.isEmpty(partNo) && StringUtil.isEmpty(carModelCode)) { + MesException.throwMesBusiException("物料号和车型代码不能同时为空"); + } return ResultBean.success("装配目视单预览查询成功") .setResultList(mesWorkOrderService.doShowWorkOrderPrint(partNo, workCenterCode, partProdGroupCode, carModelCode, organizeCode, userName)) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 1d74cf8..27f1c22 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1255,11 +1255,11 @@ public class MesWorkOrderService extends BaseMesService implements // 根据id 获取工单数据 List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); - return packPrintResultMap(organizeCode, mesWorkOrderList, userName); + return packPrintResultMap(organizeCode, mesWorkOrderList, userName,false); } - private List> packPrintResultMap(String organizeCode, List mesWorkOrderList, String userName) { + private List> packPrintResultMap(String organizeCode, List mesWorkOrderList, String userName,Boolean isShow) { // 根据工单号对工单分组 Map workOrderMapByWorkOrderNo = mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); @@ -1311,7 +1311,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); } - MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(printTemplate, organizeCode); + MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(isShow ? printTemplate + "_SHOW" : printTemplate, organizeCode); //模板信息丢失抛出异常 if (Objects.isNull(labelTemplate) || StringUtils.isEmpty(labelTemplate.getMethodCode())) { MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode()); @@ -1379,7 +1379,7 @@ public class MesWorkOrderService extends BaseMesService implements List workOrderList = new ArrayList<>(); workOrderList.add(workOrder); - return packPrintResultMap(organizeCode, workOrderList, userName); + return packPrintResultMap(organizeCode, workOrderList, userName,true); } private Map getMesCustomerCarModelMap(String organizeCode, List workOrderList) { From b99c86e0b9631bddb65d8a4574f0a3138b5abfef Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 6 Nov 2024 10:08:45 +0800 Subject: [PATCH 133/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0vin=E5=8F=B7=E5=8D=A1?= =?UTF-8?q?=E6=8E=A7,=E9=98=B2=E6=AD=A2=E9=87=8D=E5=A4=8D=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index ffc2240..e1809d3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -93,12 +93,18 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { String vinCode = sortInfo.getVinCode(); DdlPackBean existPackBean = DdlPackBean.getDdlPackBean(sortInfo.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(vinCode,"vinCode",existPackBean); - DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); - int count = mesWorkOrderRao.findByHqlWhereCount(existPackBean); - if (count > 0) { - sortInfo.setDescription("当前vin号已存在S单!"); +// DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); + List workOrderList = mesWorkOrderRao.findByHqlWhere(existPackBean); + if (!workOrderList.isEmpty()) { + MesWorkOrder mesWorkOrder = workOrderList.get(0); + if (mesWorkOrder.getOrderFlag().equals(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue())) { + sortInfo.setDescription("当前vin号已存在S单!"); + return; + } + sortInfo.setDescription("当前vin号已经解析过!"); return; } + String organizeCode = partProdGroup.getOrganizeCode(); MesWorkOrder mesWorkOrder = new MesWorkOrder(); mesWorkOrder.setCustCode(partProdGroup.getCustCode()); From d44b18476001a52f1bbf757da0434e645992ebd0 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 6 Nov 2024 11:37:02 +0800 Subject: [PATCH 134/180] =?UTF-8?q?43605=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=EF=BC=9A=E6=89=AB=E6=8F=8F=E5=B7=B2=E7=BB=8F=E5=8F=91?= =?UTF-8?q?=E8=BF=90=E7=9A=84=E6=9D=A1=E7=A0=81=EF=BC=8C=E6=9C=AA=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesShippingOrderManagementService.java | 45 ++++++++++------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index 524eb4c..9e6829f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -366,31 +366,28 @@ public class MesShippingOrderManagementService extends BaseMesService { - k.setActualQty(0); - k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); - ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); - - //若扫描过的条码 则恢复条码 - if (!StringUtils.isEmpty(k.getBarcode())) { - - DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(k.getBarcode(), "productSn", packBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); - MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); - - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + if(!CollectionUtils.isEmpty(detailDeleteList)){ + //修改当前发运单明细状态 + detailDeleteList.forEach(k -> { + k.setActualQty(0); + k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); - produceSnRepository.save(produceSn); - - } - - }); - - baseRDao.save(originBean); - detailService.updates(detailDeleteList); - + //若扫描过的条码 则恢复条码 + if (!StringUtils.isEmpty(k.getBarcode())) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(k.getBarcode(), "productSn", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); + if(!Objects.isNull(produceSn)){ + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); + produceSnRepository.update(produceSn); + } + } + }); + detailService.updates(detailDeleteList); + } + baseRDao.update(originBean); } @Override From 93677687643e20d9586e2b9a00ce63a947e1bb10 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 6 Nov 2024 16:55:47 +0800 Subject: [PATCH 135/180] =?UTF-8?q?43663=20=E8=AF=95=E5=88=B6=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E4=B8=8D=E8=87=AA=E5=8A=A8=E5=85=B3=E5=8D=95=EF=BC=88?= =?UTF-8?q?=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java | 4 ++++ .../ext/mes/apiservice/serviceimpl/base/MesConfigService.java | 8 ++++++++ .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 8 ++++++++ .../java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 4 ++++ 4 files changed, 24 insertions(+) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java index 99f8fd1..7550fe6 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Objects; /** * @Description: @@ -39,4 +40,7 @@ public interface IMesConfigService { @ApiOperation(value = "更新配置") void update(MesConfig mesConfig,String userName); + @ApiOperation(value = "数据校验") + Boolean checkCfgValue(String organizeCode, String configCode, String value); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java index 2e9a4f7..66a0499 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -17,6 +18,7 @@ import org.springframework.util.StringUtils; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -106,4 +108,10 @@ public class MesConfigService implements IMesConfigService { configRepository.update(mesConfig); } + @Override + public Boolean checkCfgValue(String organizeCode, String configCode, String value) { + MesConfig config = getCfgValueByCode(organizeCode, configCode); + return !Objects.isNull(config) && !StringUtil.isEmpty(config.getCfgValue()) && !StringUtil.isEmpty(value) && config.getCfgValue().equals(value); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 27f1c22..eea22e0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -47,6 +47,7 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @Slf4j @@ -168,6 +169,9 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesProduceSnService mesProduceSnService; + @Autowired + private IMesConfigService mesConfigService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { // 数据校验 @@ -1156,6 +1160,10 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(), "workOrderType", ddlPackBean); DdlPreparedPack.getStringSmallerNotEqualPack(TimeTool.getToday(), "planStartTime", ddlPackBean); + //非排序的试制工单(P单)不自动关单(芜湖) + if (mesConfigService.checkCfgValue(organizeCode, MesExtConstWords.CLOSE_P_WORK_ORDER, MesExtConstWords.ONE_STR)) { + DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue(), "orderFlag", ddlPackBean); + } DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(), "workOrderStatus", ddlPackBean); List mesWorkOrderList = baseRDao.findByHqlWhere(ddlPackBean); if(CollectionUtils.isEmpty(mesWorkOrderList)){ diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index f1a0805..f1db64d 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -222,6 +222,8 @@ public class MesExtConstWords { public static final String DATE_DD_01 = "-01"; //日期类型 public static final String DATE_DD_31 = "-31"; + // 1 + public static final String ONE_STR = "1"; //日期类型 public static final String DATE_SERIAL_FORMAT = "yyyyMMdd"; @@ -332,6 +334,8 @@ public class MesExtConstWords { */ //通用发运报表,发运组 public static final String GENERAL_SHIPPING_PART_GROUP = "GENERAL_SHIPPING_PART_GROUP"; + //非排序工单关闭是否关闭试制单 + public static final String CLOSE_P_WORK_ORDER = "CLOSE_P_WORK_ORDER"; } From 5545a280014c284c10f3343f917f89a7025973bc Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 6 Nov 2024 17:24:18 +0800 Subject: [PATCH 136/180] =?UTF-8?q?43647=20=E6=8A=A5=E8=A1=A8=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=EF=BC=9A=E5=8F=AF=E7=96=91=E5=93=81=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF-=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java index 06c06f2..aad04ae 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java @@ -105,7 +105,7 @@ public class SuspiciousItemBarcodeReportDaoImpl implements ISuspiciousItemBarcod } //范围时间 检验日期 if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ - commonQueryHql.append("AND mpd.createDateTimeStart between :createDateTimeStart and :createDateTimeEnd "); + commonQueryHql.append("AND mpd.createDatetime between :createDateTimeStart and :createDateTimeEnd "); } //= 检验状态 if (!StringUtils.isEmpty(model.getInspectionStatus())){ From c9b4a851764bea314b69ab96c51fc22bdf73faa0 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 7 Nov 2024 11:44:53 +0800 Subject: [PATCH 137/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=A7=E7=BA=BF?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E8=A7=A3=E6=9E=90=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index e1809d3..466456a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -397,7 +397,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); String proSeqStr = proSeqResultList.get(0); - mesWorkOrder.setProductSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); + mesWorkOrder.setProductSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", "").replace(mesWorkOrder.getWorkCenterCode(),""))); mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); From 41830d211234e1fdd88a7c99543152282b49e10c Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 7 Nov 2024 13:14:09 +0800 Subject: [PATCH 138/180] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=85=B3=E9=97=AD=EF=BC=8C=E9=98=9F=E5=88=97=E8=A1=A8=E4=B9=9F?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index eea22e0..0f045c2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -248,7 +248,10 @@ public class MesWorkOrderService extends BaseMesService implements if (!Objects.equals(bean.getWorkOrderStatus(), result.getWorkOrderStatus()) && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { isSavePrintQueue = true; } - + //排序工单 关闭工单对列表 + if (!Objects.equals(bean.getWorkOrderStatus(), result.getWorkOrderStatus()) && MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue() == bean.getWorkOrderStatus() && MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == bean.getWorkOrderType()) { + closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName()); + } result.setWorkOrderStatus(bean.getWorkOrderStatus()); if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue() && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { @@ -2548,6 +2551,13 @@ public class MesWorkOrderService extends BaseMesService implements return queueOrderRao.findByHqlWhere(packBean); } + public void closeMesQueueOrder(String workOrderNo, String organizeCode, String userName) { + if (StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + queueOrderRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.QUEUE_ORDER_STATUS.CLOSED.getValue()}, packBean); + } + public MesPrintQueue getMesPrintQuanOrder(String workOrderNo, String organizeCode) { if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); From 4eff9ea7c35a29317d1b666d05042bed483a4928 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 7 Nov 2024 14:27:48 +0800 Subject: [PATCH 139/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8A=9C=E6=B9=96pis?= =?UTF-8?q?ces=E6=95=B0=E6=8D=AE=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/cus_suit/Pisces3Properties.java | 67 ++++++++++++++++++++++ .../apiservice/dbinterface/MesSAPDbAdapter.java | 33 +++++++++-- 2 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java new file mode 100644 index 0000000..be81436 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java @@ -0,0 +1,67 @@ +package cn.estsh.i3plus.ext.mes.apiservice.cus_suit; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * @Description : pisces3数据源配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 11:29 + * @Modify: + **/ +@Configuration +public class Pisces3Properties { + + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + /*********************** + * pisces3数据源配置 + */ + @Value("${impp.pisces3.datasource.isopen}") + @Getter + private boolean piscesIsOpen; + + @Value("${impp.pisces3.datasource.driver-class-name}") + @Getter + private String piscesDriverClassName; + + @Value("${impp.pisces3.datasource.alias}") + @Getter + private String piscesDsAlias; + + @Value("${impp.pisces3.datasource.jdbc-url}") + @Getter + private String piscesDsJdbcUrl; + + @Value("${impp.pisces3.datasource.username}") + @Getter + private String piscesDsUsername; + + @Value("${impp.pisces3.datasource.password}") + @Getter + private String piscesDsPassword; + + @Bean(name = "pisces3DataSource") + @ConditionalOnExpression("'${impp.pisces3.datasource.isopen:false}' == 'true'") + public DynamicDataSourceProxy initPiscesCustomerSet(){ + LOGGER.info("【初始化客户定制化...】"); + + /** + * 注册客户定制数据源 + */ + LOGGER.info("【客户定制化:pisces3数据源加载...】"); + + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java index a2ae996..ae9843c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java @@ -56,6 +56,9 @@ public class MesSAPDbAdapter { @Resource(name = "pisces2DataSource") private DynamicDataSourceProxy pisces2DataSourceProxy; + @Resource(name = "pisces3DataSource") + private DynamicDataSourceProxy pisces3DataSourceProxy; + @Value("${sync.redis.time:1800}") private Integer redisTime; @@ -85,7 +88,8 @@ public class MesSAPDbAdapter { DynamicDataSourceProxy mesDataSourceProxy, DynamicDataSourceProxy piscesDataSourceProxy, DynamicDataSourceProxy pisces1DataSourceProxy, - DynamicDataSourceProxy pisces2DataSourceProxy) throws Exception { + DynamicDataSourceProxy pisces2DataSourceProxy, + DynamicDataSourceProxy pisces3DataSourceProxy) throws Exception { WmsSAPDbWriter wmsSAPDbWriter = null; @@ -121,6 +125,14 @@ public class MesSAPDbAdapter { wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces2DataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES32MES.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(pisces3DataSourceProxy, mesDataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES3.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces3DataSourceProxy); + } + // new 的对象需要手工注入 bean if (SpringContextsUtil.getApplicationContext() != null) { @@ -152,7 +164,8 @@ public class MesSAPDbAdapter { DynamicDataSourceProxy mesDataSourceProxy, DynamicDataSourceProxy piscesDataSourceProxy, DynamicDataSourceProxy pisces1DataSourceProxy, - DynamicDataSourceProxy pisces2DataSourceProxy) { + DynamicDataSourceProxy pisces2DataSourceProxy, + DynamicDataSourceProxy pisces3DataSourceProxy) { WmsSAPDbReader wmsSAPDbReader = null; @@ -188,6 +201,14 @@ public class MesSAPDbAdapter { wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES32MES.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(pisces3DataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES3.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); + } + // if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.WMS2MES.getName())) { // wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); // } @@ -240,11 +261,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); reader.setSrcConn(this.srcConn); @@ -401,11 +422,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); reader.setSrcConn(this.srcConn); From ac38ee8ec3adadd1f83725869304637ec7aade2f Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 7 Nov 2024 15:43:42 +0800 Subject: [PATCH 140/180] =?UTF-8?q?mes-ptr=E5=AE=8C=E5=96=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 114 +++++++++++++-------- 1 file changed, 70 insertions(+), 44 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 466456a..77f81ad 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -295,10 +295,19 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { /** * 总成拆bom,变成子零件 * 替换子零件,通过替换后的零件,去找排序工艺 + * + * PTR逻辑 3种场景互斥 + * 1.如果选择了客户发送PTR信息,遇到PTR info直接转换单 + * 2.如果选择了内部PTR,需要看总成是否需要替换,生成F单 + * 3.如果两个都没有选择PTR,需要看总成是否需要替换 生成P单 + * + * isCustomerSendPrtInfo 1是客户发送ptr + * isInterPrt 1是内部ptr */ Map ptrRuleListMap = new HashMap<>(); //是否修改为P单 boolean isModifyPOrder = false; + boolean isFOrder = false; //查询mes_part_ptr表,根据物料清单查找ptr替换信息 if (!workOrderPartList.isEmpty()){ Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); @@ -308,18 +317,21 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); if (!ptrInfoList.isEmpty()){ List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); - for (MesPartPtr mesPartPtr : custPartPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); - if (orderPart != null) { - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - if (!isModifyPOrder){ - isModifyPOrder = true; + long count = custPartPtrList.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); + if (count > 0){ + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } } } } @@ -328,46 +340,60 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 - + long count = partPtrList.stream().filter(item -> item.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); + if (count > 0){ + isFOrder = true; + } for (MesPartPtr mesPartPtr : partPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - String srcPartNo = mesPartPtr.getSrcPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); - if (orderPart != null) { - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); - if (!isModifyPOrder){ - isModifyPOrder = true; - } - //更新mes_part_ptr的实际数量 + 1 - mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); - ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); - partPtrRao.update(mesPartPtr); - DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); - List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); - if (!partPtrDetailList.isEmpty()){ - MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); - mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); - ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); - partPtrDetailRao.update(mesPartPtrDetail); + //查询ptr总成 + DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",detailPartPtr); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"partNo",detailPartPtr); + int detailPtrPartCount = partPtrDetailRao.findByHqlWhereCount(detailPartPtr); + if (detailPtrPartCount > 0){ + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } - //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } } // 生成装配件清单 - if (isModifyPOrder){ - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + if (!isFOrder){ + if (isModifyPOrder){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + } }else { - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue()); } /** * 工单号修改 From 748de5eeb938d74070c6593467466b754c3f47b3 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 7 Nov 2024 20:28:36 +0800 Subject: [PATCH 141/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=BF=E6=9C=AB?= =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesEarlyWarningServiceImpl.java | 60 +++++++++++++--------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index b412ad8..752372d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -27,6 +27,9 @@ import javax.persistence.Query; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -120,7 +123,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { List gmGepicsList = getlastDataList(1, jacInfoPoint, organizeCode, 20); //2.获取最新的一条报文信息,取gmGepicsList的第一条 MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0); - //3.获取最新的一条报文信息 + //3.获取最新客户上线的报文 List gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1); MesCimGmGepics lastOne = !gmGepicsListOne.isEmpty() ?gmGepicsListOne.get(0) : null; if (lastOne==null){ @@ -132,10 +135,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); //5.获取最新下线工单 MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); -// if (lastWorkOrder == null){ -// //todo 暂时 -// lastWorkOrder = lastOfflineOrder; -// } + //6.查询报警产量 & 获取开班起始时间 Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @@ -162,7 +162,8 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { int productCount = kanBan.getProductCount(); int productDay = kanBan.getProductDay(); calendar1.add(Calendar.DATE,-productDay); - List vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode); +// List vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode); + List vehicleNoList = new ArrayList<>(); //9.汇总数据 return doGetSGMData(kanBan, gmGepicsList, lastCimGmGepics, lastOne, lastWorkOrder, lastOfflineOrder, workCounts, vehicleNoList); } @@ -181,7 +182,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { /** * 获取最新20条数据 - * @param type 固定 1 + * @param type * @param gaRule 信息点 * @return */ @@ -232,18 +233,18 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { // DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean); DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue(),"status",queueOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue(),"status",queueOrderPackBean); DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); - DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), queueOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), queueOrderPackBean); //先查对列表,找到对应产线工位的工单 - List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,20); + List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,1); //过滤掉关闭和拆解的工单 List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); - DdlPreparedPack.getNotInPackList(orderStatusList,"workOrderStatus",orderPackBean); - DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),"workOrderStatus",orderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), orderPackBean); List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); return !workOrderList.isEmpty() ? workOrderList.get(0) : null; } @@ -263,6 +264,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); DdlPreparedPack.getNotInPack(sortFlagList,"orderFlag",workOrderPackBean); DdlPreparedPack.getStringNotBlanklPack("custOrderNo",workOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), workOrderPackBean); List mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1); return mesWorkOrders.get(0); } @@ -318,7 +320,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { * @param workCount 工单数量 * @param vehicleNoList 报警 */ - private MesKanBanShowModel doGetSGMData(MesEarlyWarningKanBan kanBan,List infoV107List,MesCimGmGepics infoDD, MesCimGmGepics infoKH, MesWorkOrder workOrder,MesWorkOrder workOrderLast,int workCount,List vehicleNoList) { + private MesKanBanShowModel doGetSGMData(MesEarlyWarningKanBan kanBan,List infoV107List,MesCimGmGepics infoDD, MesCimGmGepics infoKH, MesWorkOrder workOrder,MesWorkOrder workOrderLast,int workCount,List vehicleNoList) throws ParseException { MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); //是否截图 boolean shortCut = false; @@ -342,18 +344,26 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } mesKanBanShowModel.setErrorMsg(errorMsg.toString()); -// if (infoDD == null){ -// return mesKanBanShowModel; -// } -// if (infoKH == null){ -// return mesKanBanShowModel; -// } -// if (workOrder == null){ -// return mesKanBanShowModel; -// } -// if (workOrderLast == null){ -// return mesKanBanShowModel; -// } + if (infoDD == null){ + return mesKanBanShowModel; + } + if (infoKH == null){ + return mesKanBanShowModel; + } + if (workOrder == null){ + return mesKanBanShowModel; + } + if (workOrderLast == null){ + return mesKanBanShowModel; + } + //据上次获取v107信息的时间 + String matchTime = infoDD.getCreateDatetime(); + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime match = LocalDateTime.parse(matchTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + long minutes = Duration.between(match,now).toMinutes(); + mesKanBanShowModel.setMinutes(minutes); + //最新v107信息 String v107Msg = infoDD.getCsnNo() + "@" + infoDD.getDate() + " " + infoDD.getTime(); mesKanBanShowModel.setV107Msg(v107Msg); From e3ab1604476402e2c43cb9a6097485a41c159e55 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Fri, 8 Nov 2024 11:32:04 +0800 Subject: [PATCH 142/180] =?UTF-8?q?mes-ptr=E5=AE=8C=E5=96=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 23 ++++++++++------------ 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 77f81ad..474da0e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -348,9 +348,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //查询ptr总成 DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",detailPartPtr); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"partNo",detailPartPtr); - int detailPtrPartCount = partPtrDetailRao.findByHqlWhereCount(detailPartPtr); - if (detailPtrPartCount > 0){ + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",detailPartPtr); + List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); + if (!ptrDetailList.isEmpty()){ //根据mesPartPtr的目标零件号,找到零件信息 String destPartNo = mesPartPtr.getDestPartNo(); String srcPartNo = mesPartPtr.getSrcPartNo(); @@ -358,6 +358,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //更新物料清单 MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); if (orderPart != null) { + MesPartPtrDetail mesPartPtrDetail = ptrDetailList.get(0); orderPart.setPartNo(mesPartSap.getPartNo()); orderPart.setPartName(mesPartSap.getPartName()); orderPart.setShippingPartNo(mesPartSap.getPartNo()); @@ -365,20 +366,16 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { if (!isModifyPOrder){ isModifyPOrder = true; } + mesWorkOrder.setRemark(mesPartPtr.getRemark()); + String ptrInfoStr = "INFO"+mesPartPtr.getId()+"|PART"+mesPartPtrDetail.getId(); + mesWorkOrder.setPtrInfo(ptrInfoStr); //更新mes_part_ptr的实际数量 + 1 mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); partPtrRao.update(mesPartPtr); - DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); - List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); - if (!partPtrDetailList.isEmpty()){ - MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); - mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); - ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); - partPtrDetailRao.update(mesPartPtrDetail); - } + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); + partPtrDetailRao.update(mesPartPtrDetail); //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } From 4677552dfd6d5a1b198b1f68d7fecb190cba033a Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 8 Nov 2024 15:48:58 +0800 Subject: [PATCH 143/180] =?UTF-8?q?=E8=AF=95=E5=88=B6=E4=BB=B6=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PiscesToMesProductionAssembly.groovy | 27 ++++++++++++++++++++++ .../serviceimpl/base/MesWorkOrderService.java | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy index eeaadee..8183b1a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy @@ -1,8 +1,10 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack import cn.estsh.i3plus.pojo.mes.bean.MesEquipment +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired @@ -22,11 +24,15 @@ class PiscesToMesProductionAssembly { @Autowired private MesEquipmentRepository mesEquipmentRepository; + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { if (srcData == null || srcData.size() == 0) { return srcData } Map mesEquipmentMap = new HashMap<>(); + Map mesProductionRecordMap = new HashMap<>(); String organizeCode = mapper.getOrganizeCode(); for (Map rowMap : srcData) { //获取设备名称&设备代码 @@ -39,6 +45,18 @@ class PiscesToMesProductionAssembly { LOGGER.info("EQUIPMENT_FID:{}信息不存在", String.valueOf(rowMap.get("EQUIPMENT_FID"))) } } + + if (!StringUtils.isEmpty(rowMap.get("PRODUCTION_LOG_FID"))) { + MesProductionRecord record = getMesProductionRecord(organizeCode, String.valueOf(rowMap.get("PRODUCTION_LOG_FID")), mesProductionRecordMap) + if (!Objects.isNull(record)) { + rowMap.put("PRODUCTION_RECORD_ID", record.getId()) + } else { + LOGGER.info("加工记录FID:{}信息不存在", String.valueOf(rowMap.get("PRODUCTION_LOG_FID"))) + rowMap.put("PRODUCTION_RECORD_ID", 0) + } + } else { + rowMap.put("PRODUCTION_RECORD_ID", 0) + } } return srcData; } @@ -51,4 +69,13 @@ class PiscesToMesProductionAssembly { } return mesEquipmentMap.get(equipmentFid); } + + private MesProductionRecord getMesProductionRecord(String organizeCode, String fid, Map mesProductionRecordMap) { + if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(fid)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(fid, "fid", ddlPackBean); + mesProductionRecordMap.put(fid, mesProductionRecordRepository.getByProperty(ddlPackBean)) + } + return mesProductionRecordMap.get(fid); + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 0f045c2..60f348f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -2334,7 +2334,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); - DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPackList(partNoList, "assemblyPartNo", reportRuleSortPackBean); //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { From fc9e36abcf6fbae716db45102e405a2361a1ddf1 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sat, 9 Nov 2024 17:48:24 +0800 Subject: [PATCH 144/180] =?UTF-8?q?=E7=A6=BB=E7=BA=BFjob=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=E5=8F=8A=E6=8B=89=E5=8A=A8=E5=8D=95?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/IMesOfflineService.java | 19 + .../api/busi/IMesSortRuleCfgOfflineService.java | 26 ++ .../schedulejob/MesCreatePullOrderOfflineJob.java | 58 +++ .../MesCreateSortRuleCfgOfflineJob.java | 59 +++ .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 4 +- .../serviceimpl/busi/MesOfflineServiceImpl.java | 108 +++++ .../busi/MesSortRuleCfgOfflineServiceImpl.java | 439 +++++++++++++++++++++ 7 files changed, 711 insertions(+), 2 deletions(-) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java new file mode 100644 index 0000000..9515fab --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import java.util.List; + +public interface IMesOfflineService { + + /** + * 创建离线排序加工规则 + * 每个总成零件维护一个 + */ + void doCreateSortRuleCfgOfflineData(String organizeCode, List groupCodeList); + + /** + * 生成指定零件生产组的拉动单模板 + * 创建离线排序拉动规则 + * 每个总成零件维护一个 + */ + void doCreatePullOrderOfflineData(String organizeCode, List pullCodeList,List partProdCodeList); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java new file mode 100644 index 0000000..bfdc5c7 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java @@ -0,0 +1,26 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPullDetail; + +import java.util.List; + +public interface IMesSortRuleCfgOfflineService { + /** + * 清空原始表 + */ + void deleteSortRuleOffline(String organizeCode); + + + void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail); + + + void deletePullOffline(String organizeCode); + + void deletePullDetailOffline(String organizeCode); + + + void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java new file mode 100644 index 0000000..7a94622 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java @@ -0,0 +1,58 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@ApiOperation("离线生产所有总成零件的拉动单模板") +@Component +public class MesCreatePullOrderOfflineJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderOfflineJob.class); + + @Autowired + private IMesOfflineService mesOfflineService; + + + public MesCreatePullOrderOfflineJob() { + super(MesCreatePullOrderOfflineJob.class, "离线生产所有总成零件的拉动单模板"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + Map paramMap = (Map) JSONObject.parse(jobParam); + try { + String organizeCode = (String) paramMap.get("organizeCode"); + List pullCodeList = (List) paramMap.get("pullCodeList"); + List partProdCodeList = (List) paramMap.get("partProdCodeList"); + mesOfflineService.doCreatePullOrderOfflineData(organizeCode,pullCodeList,partProdCodeList); + } catch (Exception e) { + LOGGER.error("离线生产所有总成零件的拉动单模板:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java new file mode 100644 index 0000000..77b3c64 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.persistence.Column; +import java.util.List; +import java.util.Map; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@ApiOperation("生产所有总成零件的装配件模板") +@Component +public class MesCreateSortRuleCfgOfflineJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreateSortRuleCfgOfflineJob.class); + + + @Autowired + private IMesOfflineService mesOfflineService; + + + public MesCreateSortRuleCfgOfflineJob() { + super(MesCreateSortRuleCfgOfflineJob.class, "生产所有总成零件的装配件模板"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + Map paramMap = (Map) JSONObject.parse(jobParam); + try { + String organizeCode = (String) paramMap.get("organizeCode"); + List groupCodeList = (List) paramMap.get("partProdCodeList"); + mesOfflineService.doCreateSortRuleCfgOfflineData(organizeCode,groupCodeList); + } catch (Exception e) { + LOGGER.error("生产所有总成零件的装配件模板:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 474da0e..a0a9d97 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -137,7 +137,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //客户订单号 mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); //车型代码 - mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); +// mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); //车型描述 mesWorkOrder.setCarName = vehicleClassCode //备注取自于车型配置表中 @@ -290,7 +290,6 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List workOrderPartList = new ArrayList<>(); if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); - } /** * 总成拆bom,变成子零件 @@ -739,6 +738,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { private MesProductVersion getProdVersion(String organizeCode, String partNo) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getOrderBy("createDatetime",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java new file mode 100644 index 0000000..1de0d8b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java @@ -0,0 +1,108 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartProdGroupDetailService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartProdGroupService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.MesPartPullDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPartPullRepository; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class MesOfflineServiceImpl implements IMesOfflineService { + + @Autowired + private MesSortRuleCfgOfflineServiceImpl cfgOfflineService; + + + @Autowired + private MesPartProdGroupService partProdGroupService; + + @Autowired + private MesPartProdGroupDetailService partProdGroupDetailService; + + @Autowired + private MesPartPullRepository partPullRao; + + @Autowired + private MesPartPullDetailRepository partPullDetailRao; + + @Override + public void doCreateSortRuleCfgOfflineData(String organizeCode,List groupCodeList) { + //清空表 + cfgOfflineService.deleteSortRuleOffline(organizeCode); + //2.查询零件生产组 + List partProdGroupList = partProdGroupService.findMesPartProdGroups(organizeCode,groupCodeList); + for (MesPartProdGroup mesPartProdGroup : partProdGroupList) { + String partProdGroupCode = mesPartProdGroup.getPartProdGroupCode(); + DdlPackBean detailPartProdDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroupCode,"partProdGroupCode",detailPartProdDetailPackBean); + List detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); + //3.根据客户零件表中的erp零件,是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 + for (MesPartProdGroupDetail detail : detailList) { + String erpPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? detail.getPartNo() : detail.getProductPartNo(); + cfgOfflineService.doCreateSortRuleOffline(detail.getCustPartNo(), erpPartNo,organizeCode,mesPartProdGroup,detail); + } + } + + //4.总成零件号打散bom + + //5.打散的bom 获取排序加工规则 + + //6.装配件获取的三种条件 + + //7.保存到离线表中 + + } + + @Override + public void doCreatePullOrderOfflineData(String organizeCode, List pullCodeList,List partProdCodeList) { + //拉动组和生产零件都是按照产线配置的 一对一 + //清空表 + cfgOfflineService.deletePullOffline(organizeCode); + cfgOfflineService.deletePullDetailOffline(organizeCode); + //2.查询零件生产组 + List partProdGroupList = partProdGroupService.findMesPartProdGroups(organizeCode,partProdCodeList); + //3.获取拉动组 + DdlPackBean partPullPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(pullCodeList,"pullCode",partPullPackBean); + List mesPartPullList = partPullRao.findByHqlWhere(partPullPackBean); + Map partPullMap = mesPartPullList.stream().collect(Collectors.toMap(MesPartPull::getWorkCenterCode, Function.identity())); + //4.获取拉动组的详情 + DdlPackBean partPullDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(pullCodeList,"pullCode",partPullDetailPackBean); + List mesPartPullDetailList = partPullDetailRao.findByHqlWhere(partPullDetailPackBean); + Map> detailMapList = mesPartPullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPullCode)); + //5.遍历零件生产组 + for (MesPartProdGroup mesPartProdGroup : partProdGroupList) { + String partProdGroupCode = mesPartProdGroup.getPartProdGroupCode(); + DdlPackBean detailPartProdDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroupCode,"partProdGroupCode",detailPartProdDetailPackBean); + List detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); + //3.根据客户零件表中的erp零件,是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 + for (MesPartProdGroupDetail detail : detailList) { + String erpPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? detail.getPartNo() : detail.getProductPartNo(); + MesPartPull mesPartPull = partPullMap.get(mesPartProdGroup.getWorkCenterCode()); + List mesPartPullDetails = detailMapList.get(mesPartPull.getPullCode()); + if (mesPartPullDetails == null) { + continue; + } + cfgOfflineService.doCreatePullOffline(detail.getCustPartNo(), erpPartNo,organizeCode,mesPartProdGroup,detail,partPullMap.get(mesPartProdGroup.getWorkCenterCode()), mesPartPullDetails); + } + + + } + + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java new file mode 100644 index 0000000..e1994e1 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -0,0 +1,439 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.busi.IMesSortRuleCfgOfflineService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesProdRuleSortCfgOffline; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesPullingOrderInfoOffline; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesPullingOrderPartInfoOffline; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesProdRuleSortCfgOfflineRepository; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesPullingOrderInfoOfflineRepository; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesPullingOrderPartInfoOfflineRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineService { + + @Autowired + private MesProdRuleSortCfgOfflineRepository cfgOfflineRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRDao; + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesCustomerPartRepository customerPartRao; + + @Autowired + private MesCustomerCarModelRepository carModelRao; + + @Autowired + private MesPullingOrderInfoOfflineRepository partPullOrderOfflineRao; + + @Autowired + private MesPullingOrderPartInfoOfflineRepository partPullOrderDetailOfflineRao; + + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void deleteSortRuleOffline(String organizeCode) { + cfgOfflineRao.deleteByProperty("organizeCode", organizeCode); + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { + + MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); + //4.总成零件号打散bom + String bomVersion = mesProductVersion.getAlternativePartList(); + MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo); + if (bom == null) { + return; + } + //5.5 获取客户零件号对应的车型配置 + MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode); + if (mesCustomerPart == null) { + return; + } + //5.打散的bom 获取排序加工规则 + List workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); + //6.装配件获取的三种条件 + String custCode = mesCustomerPart.getCustCode(); + MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode); + if (mesCustomerCarModel == null) { + return; + } + String carModelCode = mesCustomerCarModel.getCarModelCode(); + List assemblyList = getAssemblyList(detail.getWorkCenterCode(), carModelCode, workOrderPartList, mesPartProdGroup); + //7.保存到离线表中 + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + MesProdRuleSortCfgOffline cfgOffline = new MesProdRuleSortCfgOffline(); + BeanUtils.copyProperties(orderAssembly, cfgOffline); + cfgOffline.setCustPartNo(custPartNo); + cfgOffline.setCustPartName(mesCustomerPart.getCustPartName()); + cfgOffline.setPartNo(erpPartNo); + cfgOffline.setVehicleNo(carModelCode); + cfgOffline.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(cfgOffline, "OFFLINE-JOB"); + cfgOfflineRao.insert(cfgOffline); + } + + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void deletePullOffline(String organizeCode) { + partPullOrderOfflineRao.deleteByProperty("organizeCode", organizeCode); + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void deletePullDetailOffline(String organizeCode) { + partPullOrderDetailOfflineRao.deleteByProperty("organizeCode", organizeCode); + } + + @Override + public void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList) { + MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); + //4.总成零件号打散bom + String bomVersion = mesProductVersion.getAlternativePartList(); + MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo); + if (bom == null) { + return; + } + //5.5 获取客户零件号对应的车型配置 + MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode); + if (mesCustomerPart == null) { + return; + } + //5.打散的bom 获取排序加工规则 + List workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); + + //6.过滤出需要拉动的零件号 + List partPullDetailPartNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + List pullDetails = pullDetailList.stream().filter(item -> partPullDetailPartNoList.contains(item.getPartNo())).collect(Collectors.toList()); + //7.生成拉动主单模板 MesPullingOrderPartInfoOfflineRepository + MesPullingOrderInfoOffline mesPartPullOffline = new MesPullingOrderInfoOffline(); + mesPartPullOffline.setPullCode(partPull.getPullCode()); + mesPartPullOffline.setCustPartNo(custPartNo); + mesPartPullOffline.setPartNo(erpPartNo); + mesPartPullOffline.setWorkCenterCode(partPull.getWorkCenterCode()); + mesPartPullOffline.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(mesPartPullOffline,"SPS-OFFLINE"); + partPullOrderOfflineRao.insert(mesPartPullOffline); + //8.生成拉动单详情 + for (MesPartPullDetail pullDetail : pullDetails) { + MesPullingOrderPartInfoOffline detailOffline = new MesPullingOrderPartInfoOffline(); + detailOffline.setPid(mesPartPullOffline.getId()); + detailOffline.setPullCode(partPull.getPullCode()); + detailOffline.setCustPartNo(custPartNo); + detailOffline.setAssPartNo(erpPartNo); + detailOffline.setOrganizeCode(organizeCode); + detailOffline.setPartNo(pullDetail.getPartNo()); + detailOffline.setPartName(pullDetail.getPartName()); + detailOffline.setPullQty(orderPartMap.get(pullDetail.getPartNo()).getItemQty()); + detailOffline.setWorkOrderNo(partPull.getWorkCenterCode()); + detailOffline.setWorkCellCode(pullDetail.getWorkCellCode()); + detailOffline.setEquipment(pullDetail.getEquipment()); + detailOffline.setLocation(pullDetail.getPullAddr()); + if (pullDetail.getScanValidationType() == 10) { + detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()); + } else { + detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()); + } + detailOffline.setCarSeries(pullDetail.getCarSeries()); + + ConvertBean.saveOrUpdate(detailOffline,"SPS-OFFLINE"); + partPullOrderDetailOfflineRao.insert(detailOffline); + } + } + + //客户零件号 + private MesCustomerPart getMesCustomerPart(String custPartNo, String erpPartNo, String organizeCode) { + DdlPackBean custPartPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", custPartPackBean); + DdlPreparedPack.getStringEqualPack(erpPartNo, "erpPartNo", custPartPackBean); + List customerPartList = customerPartRao.findByHqlTopWhere(custPartPackBean, 1); + if (!customerPartList.isEmpty()) { + return customerPartList.get(0); + } + return null; + } + + //获取车型配置 + private MesCustomerCarModel getMesCustomerCarModel(String custPartNo, String organizeCode, String custCode) { + DdlPackBean carModelPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", carModelPackBean); + DdlPreparedPack.getStringEqualPack(custCode, "custCode", carModelPackBean); + DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", carModelPackBean); + List carModels = carModelRao.findByHqlTopWhere(carModelPackBean, 1); + if (carModels.isEmpty()) { + return null; + } + return carModels.get(0); + } + + //版本号 + private MesProductVersion getMesProductVersion(String partNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + ddlPackBean.setOrderByStr(" order by createDatetime desc "); + MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo); + } + return mesProductVersion; + } + + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + return new ArrayList<>(); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null) { + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); +// MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() != null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum() != null && sortCfg.getLogicNum() > 0)) { + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())) { + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)) { + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); +// orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + +} From 419fc6502562b50253b21c4943bc70953be7e1eb Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 11 Nov 2024 19:03:16 +0800 Subject: [PATCH 145/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=8F=B7=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E5=8F=B7=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/IMesCreateWorkOrder.java | 2 +- .../base/roundness/MesPackageRoundnessService.java | 47 ++++++++++++---------- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 21 +++++----- .../busi/MesSortRuleCfgOfflineServiceImpl.java | 3 +- 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java index e5f543f..8b9505c 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java @@ -13,6 +13,6 @@ public interface IMesCreateWorkOrder { * @param partSap * @param sortInfo */ - void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo); + void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 1382918..e2b1967 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -117,30 +117,22 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { //2.排序信息中的零件合计数量 double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get(); MesCustSortInfo sortInfo; + /** + * 2024/10/24 by Castle需要根据custOrderNo升序设置productSeq + */ + log.info("castle-execute-before查询出的sortInfo数据:{}", sortInfoList); + sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { + if (Long.parseLong(sortInfo1.getCustOrderCode().substring(3)) > Long.parseLong(sortInfo2.getCustOrderCode().substring(3))) { + return 1; + } + return -1; + }).collect(Collectors.toList()); + log.info("castle-execute-after查询出的sortInfo数据:{}", sortInfoList); + //3.当数量未达到圆整包装数时 if (qty < roundQty) { //4.查看客户排序信息钟的最早的一条过点时间 + 生产组最晚生成时间是否已到达当前时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -// sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { -// try { -// if (sdf.parse(sortInfo1.getMatchTime()).after(sdf.parse(sortInfo2.getMatchTime()))) { -// return 1; -// } -// } catch (ParseException e) { -// log.error("解析匹配时间报错:{}", e.getMessage()); -// } -// return -1; -// }).collect(Collectors.toList()); - /** - * 2024/10/24 by Castle需要根据custOrderNo升序设置productSeq - */ - sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { - if (Long.parseLong(sortInfo1.getCustOrderCode().substring(3)) > Long.parseLong(sortInfo2.getCustOrderCode().substring(3))) { - return 1; - } - return -1; - }).collect(Collectors.toList()); - sortInfo = sortInfoList.get(0); //最晚延迟的时间 int latestCreationTime = Integer.parseInt(partProdGroup.getLatestCreationTime()); @@ -158,11 +150,23 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } } + //批量获取生生产序号 + /** + * 生产序号 + * 工厂-产线-9位流水号,跳号10 + */ + GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); + prodSeqSerialNoModel.setProdLocation(partProdGroup.getWorkCenterCode()); + List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(partProdGroup.getOrganizeCode()), "edi", partProdGroup.getOrganizeCode(), sortInfoList.size()).getResultList(); + log.info("castle-execute-顺序号:{}", proSeqResultList); //扣减qty 生成工单 while (qty > 0) { //临时客户排序信息中的数量计数器 sortInfo = sortInfoList.get(0); + String seq = proSeqResultList.get(0); + long productSeq = Long.parseLong(seq.replace("MES_WORK_ORDER_SEQ_WU_HAN", "").replace(partProdGroup.getWorkCenterCode(), "")); + double custQty = sortInfo.getQty(); //当客户排序信息中的数量大于剩余圆整数量要Break if (custQty > roundQty) { @@ -187,10 +191,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return; } - mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); + mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo,productSeq); // doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); qty -= custQty; sortInfoList.remove(sortInfo); + proSeqResultList.remove(seq); // 更新排序信息 已完成 custSoftInfoService.updateCustSortInfo(sortInfo); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index a0a9d97..bc319c6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -87,7 +87,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { @Transactional(propagation = Propagation.REQUIRES_NEW) - public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) { + public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { //判断vin是否已经生成了S单,如果已经生成S单 则不再生成工单 String vinCode = sortInfo.getVinCode(); @@ -411,15 +411,16 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { workOrderPartRao.saveAll(workOrderPartList); } List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); - /** - * 生产序号 - * 工厂-产线-9位流水号,跳号10 - */ - GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); - prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); - List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - String proSeqStr = proSeqResultList.get(0); - mesWorkOrder.setProductSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", "").replace(mesWorkOrder.getWorkCenterCode(),""))); +// /** +// * 生产序号 +// * 工厂-产线-9位流水号,跳号10 +// */ +// GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); +// prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); +// List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); +// String proSeqStr = proSeqResultList.get(0); + mesWorkOrder.setProductSeq(productSeq); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); mesWorkOrderRao.insert(mesWorkOrder); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index e1994e1..05f37ad 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -104,12 +104,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS cfgOffline.setCustPartNo(custPartNo); cfgOffline.setCustPartName(mesCustomerPart.getCustPartName()); cfgOffline.setPartNo(erpPartNo); - cfgOffline.setVehicleNo(carModelCode); +// cfgOffline.setVehicleNo(carModelCode); cfgOffline.setOrganizeCode(organizeCode); ConvertBean.saveOrUpdate(cfgOffline, "OFFLINE-JOB"); cfgOfflineRao.insert(cfgOffline); } - } @Transactional(propagation = Propagation.REQUIRES_NEW) From 440753bdd7b955eb4ee63e8f57d058ded5a0ee58 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 12 Nov 2024 12:33:30 +0800 Subject: [PATCH 146/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E6=97=A5=E5=BF=97=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index f1db64d..a741970 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -166,6 +166,12 @@ public class MesExtConstWords { public static final int ZERO = 0; //"0" public static final String ZERO_STR = "0"; + //1 + public static final int ONE = 1; + //"1" + public static final String ONE_STR = "1"; + // 10 + public static final Integer TEN = 10; //"" public static final String EMPTY = ""; //- @@ -222,8 +228,6 @@ public class MesExtConstWords { public static final String DATE_DD_01 = "-01"; //日期类型 public static final String DATE_DD_31 = "-31"; - // 1 - public static final String ONE_STR = "1"; //日期类型 public static final String DATE_SERIAL_FORMAT = "yyyyMMdd"; From 8bb57ecb565cbc3d4ae00f5ef31abe23bb1cb84b Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 12 Nov 2024 12:42:56 +0800 Subject: [PATCH 147/180] =?UTF-8?q?SPS=E6=8B=89=E5=8A=A8=E5=8D=95=E7=94=9F?= =?UTF-8?q?=E6=88=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesPullingOrderInfoService.java | 2 +- .../ext/mes/api/base/IMesWorkOrderPartService.java | 3 + .../controller/busi/MesWhiteListController.java | 4 +- ...sCreatePullOrderByPullGroupAndWorkOrderJob.java | 35 +++---- .../serviceimpl/base/MesCustomerPartService.java | 13 ++- .../base/MesPullingOrderInfoService.java | 110 ++++++++++++--------- .../base/MesWorkOrderPartServiceImpl.java | 14 +++ .../serviceimpl/base/MesWorkOrderService.java | 27 +++++ 8 files changed, 135 insertions(+), 73 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java index a2741d3..ee603d5 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java @@ -14,7 +14,7 @@ public interface IMesPullingOrderInfoService extends IBaseMesService doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo, String userName); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java index 7e23216..2c17a75 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java @@ -17,4 +17,7 @@ public interface IMesWorkOrderPartService extends IBaseMesService findMesWorkOrderPart(String workOrderNo, String organizeCode); + + @ApiOperation("根据工单号查询工单零件") + List findMesWorkOrderPart(List workOrderNoList, String organizeCode); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index c03f0c3..750cd27 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -281,10 +281,10 @@ public class MesWhiteListController extends MesBaseController { } @GetMapping(value = "/doCreatePullOrder") @ApiOperation(value = "根据拉动组和生产工单产生拉动单") - public ResultBean doCreatePullOrder(String organizeCode, String equ) { + public ResultBean doCreatePullOrder(String organizeCode, Integer pageSize) { //统计数据 try { - pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,"test"); + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,pageSize,"test"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java index 58a60dd..7f24937 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java @@ -1,17 +1,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; -import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel; import cn.estsh.impp.framework.boot.init.ApplicationProperties; import io.swagger.annotations.ApiOperation; -import org.apache.commons.lang3.StringUtils; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; import java.util.List; @@ -34,9 +36,6 @@ public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesSchedul @Autowired private IMesPullingOrderInfoService pullingOrderInfoService; - @Autowired - private IMesConfigService mesConfigService; - @Value("${server.port}") private String serverPort; @Value("${impp.server.ip}") @@ -49,22 +48,20 @@ public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesSchedul @Override public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { - try { - String jobParam = this.getJobParam(); - if (StringUtils.isBlank(jobParam)) { - throw new IllegalArgumentException("job参数为空,请检查参数"); + List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); + if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { + for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { + try { + long startTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- start", wmsJobParamModel.getOrganizeCode()); + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), MesExtConstWords.JOB); + long endTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- end --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + } } - String[] organizeCodeList = jobParam.split(","); - LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始 -----start"); - String userName = "CreatePullOrderJob"; - for (String organizeCode : organizeCodeList) { - pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,userName); - } - LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始结束 ----- end"); - - } catch (Exception e) { - LOGGER.error("根据拉动组和生产工单产生拉动单JOB任务结束e:{}", e.toString()); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java index 7b2bea5..843c4bf 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -98,7 +99,11 @@ public class MesCustomerPartService extends BaseMesService impl } List customerPartNoList = mesCustomerCarModelDetails.stream().map(MesCustomerCarModelDetail::getCustPartNo).collect(Collectors.toList()); ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); - DdlPreparedPack.getInPackList(customerPartNoList, "custPartNo", ddlPackBean); + if (customerPartNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(customerPartNoList.get(MesExtConstWords.ZERO), "custPartNo", ddlPackBean); + } else { + DdlPreparedPack.getInPackList(customerPartNoList, "custPartNo", ddlPackBean); + } return baseRDao.findByHqlWhere(ddlPackBean); } @@ -106,7 +111,11 @@ public class MesCustomerPartService extends BaseMesService impl public List findMesCustomerPartByPartNo(String organizeCode, List partNoList) { if(StringUtils.isEmpty(organizeCode) || Objects.isNull(partNoList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPack(partNoList, "erpPartNo", packBean); + if (partNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(partNoList.get(MesExtConstWords.ZERO), "erpPartNo", packBean); + } else { + DdlPreparedPack.getInPackList(partNoList, "erpPartNo", packBean); + } return baseRDao.findByHqlWhere(packBean); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index e61342b..15b531e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -52,6 +54,8 @@ public class MesPullingOrderInfoService extends BaseMesService pulliGroupList = mesPartPullRDao.findByHqlWhere(ddlPackBean); @@ -107,33 +111,27 @@ public class MesPullingOrderInfoService extends BaseMesService> partPullDetailListMap = pullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPartNo)); //2.客户物料集合 [PART_NO] in 拉动组明细物料集合 //3.产线数据 - DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode); - List workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).collect(Collectors.toList()); - DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean); - List mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean); - if (CollectionUtils.isEmpty(mesWorkCenterList)) { - LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList); - return; - } - Map> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); +// DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean); +// List mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean); +// if (CollectionUtils.isEmpty(mesWorkCenterList)) { +// LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList); +// return; +// } +// Map> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); + List workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).distinct().collect(Collectors.toList()); //4.生产工单 在加工状态 [PULLING_STATUS] =0 未创建 - DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", packBeanWorkOrder); - DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.NOTCREATE.getValue(), "pullingStatus", packBeanWorkOrder); - List workOrderList = mesWorkOrderRepository.findByHqlWhere(packBeanWorkOrder); + List workOrderList = getMesWorkOrderList(organizeCode, pageSize, workCenterList); if (CollectionUtils.isEmpty(workOrderList)) { LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线信息没有【未创建】【在加工】状态的工单-->{}", organizeCode, workCenterList); return; } Map> workOrderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo)); - DdlPackBean packBeanWorkOrderPart = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()), "workOrderNo", packBeanWorkOrderPart); - List mesWorkOrderPartList = workOrderPartRepository.findByHqlWhere(packBeanWorkOrderPart); + List mesWorkOrderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()),organizeCode); if (CollectionUtils.isEmpty(mesWorkOrderPartList)) { - LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workCenterList); + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList())); return; } LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件mesWorkOrderPartList-->{}", organizeCode, mesWorkOrderPartList); @@ -143,7 +141,10 @@ public class MesPullingOrderInfoService extends BaseMesService mesCustomerPartByPartNoList = mesCustomerPartService.findMesCustomerPartByPartNo(organizeCode, partPullDetailListMap.keySet().stream().distinct().collect(Collectors.toList())); Map> customerPartMap = CollectionUtils.isEmpty(mesCustomerPartByPartNoList) ? null : mesCustomerPartByPartNoList.stream().collect(Collectors.groupingBy(MesCustomerPart::getErpPartNo)); - + List mesPullingOrderInfoList = new ArrayList<>(); + List mesPullingOrderPartInfoList = new ArrayList<>(); + List mesPullingOrderExtendsList = new ArrayList<>(); + List workOrderNoList = new ArrayList<>(); for (Map.Entry> stringListEntry : workOrderNoListMap.entrySet()) { //需要生成拉动单的工单号 对应工单 List mesWorkOrders = workOrderListMap.get(stringListEntry.getKey()); @@ -176,29 +177,6 @@ public class MesPullingOrderInfoService extends BaseMesService orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO); -// if (orderResutlBean != null && orderResutlBean.isSuccess()) { -// orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString(); -// } else { -// throw ImppExceptionBuilder.newInstance() -// .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) -// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) -// .setErrorDetail("生成单号失败") -// .setErrorSolution("【MES_PULL_ORDER_NO】请重新操作或查看服务!") -// .build(); -// } MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo(); pullingOrder.setOrganizeCode(organizeCode); pullingOrder.setPullingOrderNo(orderNo); @@ -219,7 +197,7 @@ public class MesPullingOrderInfoService extends BaseMesService getMesWorkOrderList(String organizeCode, Integer pageSize, List workCenterList) { + DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode); + if (workCenterList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workCenterList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_CENTER_CODE, packBeanWorkOrder); + } else { + DdlPreparedPack.getInPackList(workCenterList, MesExtConstWords.WORK_CENTER_CODE, packBeanWorkOrder); } + DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder); + DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue(), "pullingStatus", packBeanWorkOrder); + return mesWorkOrderRepository.findByHqlTopWhere(packBeanWorkOrder, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize); + } + private void updateMesWorkOrder(String organizeCode, String userName, List workOrderNoList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + mesWorkOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "pullingStatus"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()}, packBean); } @Override diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java index 54610e9..f604f1f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java @@ -1,11 +1,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.util.CollectionUtils; import org.springframework.stereotype.Service; import java.util.List; @@ -33,4 +35,16 @@ public class MesWorkOrderPartServiceImpl extends BaseMesService findMesWorkOrderPart(List workOrderNoList, String organizeCode) { + if (CollectionUtils.isEmpty(workOrderNoList) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 60f348f..57c5b03 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -868,6 +868,18 @@ public class MesWorkOrderService extends BaseMesService implements , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); } + //根据产线代码获取生产组信息 + MesPartProdGroup mesPartProdGroup = null; + if (mesPartProdGroupMap.containsKey(mesWorkCenter.getWorkCenterCode())) { + mesPartProdGroup = mesPartProdGroupMap.get(mesWorkCenter.getWorkCenterCode()); + } else { + mesPartProdGroup = getMesPartProdGroup(mesWorkCenter.getOrganizeCode(), mesWorkCenter.getWorkCenterCode()); + mesPartProdGroupMap.put(mesWorkCenter.getWorkCenterCode(), mesPartProdGroup); + } + if (!Objects.isNull(mesPartProdGroup)) { + item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + } //拼接时间 packPlanTime(item, mesShiftMap); //状态已发布 @@ -1922,6 +1934,12 @@ public class MesWorkOrderService extends BaseMesService implements , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); } + //根据产线代码获取生产组信息 + MesPartProdGroup mesPartProdGroup = getMesPartProdGroup(mesWorkCenter.getOrganizeCode(),mesWorkCenter.getWorkCenterCode()); + if(!Objects.isNull(mesPartProdGroup)){ + bean.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + } bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); List saveMesWorkOrderToWms = new ArrayList<>(); //非试制单 @@ -2264,6 +2282,15 @@ public class MesWorkOrderService extends BaseMesService implements return partPtrRao.findByHqlWhere(partPtrPackBean); } + private MesPartProdGroup getMesPartProdGroup(String organizeCode, String workCenterCode) { + if (StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(workCenterCode)) { + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean); + return mesPartProdGroupRDao.getByProperty(packBean); + } + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, String organizeCode) { //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 From 185780a99960e9c445694205d164fb85d460a157 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 13 Nov 2024 10:30:24 +0800 Subject: [PATCH 148/180] =?UTF-8?q?=E7=BA=BF=E6=9C=AB=E5=A4=A7=E5=B1=8F?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesEarlyWarningServiceImpl.java | 26 +++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 752372d..411aef3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -170,6 +170,26 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { @Override public void savePicture(KanBanPictureModel model) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getOrderBy("createDatetime",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); + List screenList = screenRao.findByHqlWhere(ddlPackBean); + if (!screenList.isEmpty()) { + //5分钟内只记录一次,防止前端不断刷数据 + MesEarlyWarningScreen mesEarlyWarningScreen = screenList.get(0); + try { + Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(mesEarlyWarningScreen.getCreateDatetime()); + Calendar dateC = Calendar.getInstance(); + dateC.setTime(date); + dateC.add(Calendar.MINUTE,5); + Calendar now = Calendar.getInstance(); + now.setTime(new Date()); + if (dateC.before(now)){ + return; + } + } catch (ParseException e) { + } + + } MesEarlyWarningScreen mesEarlyWarningScreen = new MesEarlyWarningScreen(); mesEarlyWarningScreen.setPicture(model.getPicture()); if (model.getId() != null){ @@ -177,7 +197,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } mesEarlyWarningScreen.setOrganizeCode(model.getOrganizeCode()); ConvertBean.saveOrUpdate(mesEarlyWarningScreen, AuthUtil.getSessionUser().getUserName()); - screenRao.insert(mesEarlyWarningScreen); + screenRao.insert(mesEarlyWarningScreen); } /** @@ -422,9 +442,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); - if (realProductionBuffer < productionRedBuffer){ + if (realProductionBuffer < productionYellowBuffer){ mesKanBanShowModel.setRealProductionBufferColor("RED"); - }else if (realProductionBuffer < productionYellowBuffer){ + }else if (realProductionBuffer < productionRedBuffer){ mesKanBanShowModel.setRealProductionBufferColor("YELLOW"); } //声音信息 From cfb57c094da7e73315e4c2b1478ac82a517b7f9a Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 14 Nov 2024 11:00:32 +0800 Subject: [PATCH 149/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=90=8C=E6=AD=A5wms?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesProductVersionService.java | 4 + .../ext/mes/api/base/IMesWorkOrderService.java | 3 + .../mes/api/base/IMesWorkOrderToWmsService.java | 2 +- .../mes/apiservice/aspect/MesRepositoryAspect.java | 18 +- .../controller/busi/MesWhiteListController.java | 14 + .../schedulejob/MesWorkOrderSendToWmsJob.java | 62 ++++ .../base/MesEquipmentVariableService.java | 3 +- .../serviceimpl/base/MesProductVersionService.java | 12 + .../base/MesPullingOrderInfoService.java | 3 +- .../serviceimpl/base/MesWorkOrderService.java | 340 ++++++++------------- .../base/MesWorkOrderToWmsServiceImpl.java | 9 +- 11 files changed, 238 insertions(+), 232 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java index 72a837c..ee6e410 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -13,4 +14,7 @@ public interface IMesProductVersionService extends IBaseMesService queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager); + @ApiOperation("根据物料生产版本查询生产版本") + MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 378465e..b374e04 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -64,4 +64,7 @@ public interface IMesWorkOrderService extends IBaseMesService { void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); + @ApiOperation("MES工单推送给WMS") + void doSendMesWorkOrderToWms(String organizeCode,Integer pageSize,String userName); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java index 37634ef..21387f3 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java @@ -17,7 +17,7 @@ import java.util.List; public interface IMesWorkOrderToWmsService extends IBaseMesService { @ApiOperation(value = "发送工单给Wms") - List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList); + List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList, String userName, boolean flag); @ApiOperation("根据工单号查询工单发送给WMS数据") List findMesWorkOrderToWms(String workOrderNo, String organizeCode); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java index 4ae6482..fcffabd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.apiservice.aspect; -import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import org.aspectj.lang.JoinPoint; @@ -80,24 +79,22 @@ public class MesRepositoryAspect { @After("controllerPointcut()") public void after(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); - if (methodName.startsWith("updateByProperties")) { + if (methodName.equals("updateByProperties")) { try { Object[] args = joinPoint.getArgs(); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); if (args.length == 4) { if (args[2].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); + method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}); } else { - method.invoke(joinPoint.getTarget(), args[0], args[1], "modifyDatetime", TimeTool.getNowTime(true)); method.invoke(joinPoint.getTarget(), args[0], args[1], "systemSyncStatus", CommonEnumUtil.FALSE); } } else if (args.length == 3) { if (args[0].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}, args[2]); + method.invoke(joinPoint.getTarget(), new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}, args[2]); } else { - method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); } } @@ -110,10 +107,9 @@ public class MesRepositoryAspect { if (args.length == 3) { Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); if (args[1].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), args[0], new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); + method.invoke(joinPoint.getTarget(), args[0], new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}); } else { - method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 750cd27..75c7d15 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesEquipment; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; @@ -292,4 +293,17 @@ public class MesWhiteListController extends MesBaseController { } return ResultBean.success("执行成功"); } + + @GetMapping(value = "/mesWorkOrderSendToWmsJob") + @ApiOperation(value = "MES工单推送给WMS JOB") + public ResultBean doSendMesWorkOrderToWms(String organizeCode, Integer pageSize) { + try { + mesWorkOrderService.doSendMesWorkOrderToWms(organizeCode, pageSize, MesExtConstWords.JOB); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java new file mode 100644 index 0000000..09565bf --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : MES工单推送给WMS + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/13 16:40 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("MES工单推送给WMS JOB") +public class MesWorkOrderSendToWmsJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderSendToWmsJob.class); + + private static final long serialVersionUID = -321526601595924818L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + public MesWorkOrderSendToWmsJob() { + super(MesWorkOrderSendToWmsJob.class, "MES工单推送给WMS JOB"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + + List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); + if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { + for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { + try { + long startTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- start", wmsJobParamModel.getOrganizeCode()); + mesWorkOrderService.doSendMesWorkOrderToWms(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), MesExtConstWords.JOB); + long endTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- end --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + } + } + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java index 6a96e42..a6d5f45 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java @@ -174,8 +174,7 @@ public class MesEquipmentVariableService extends BaseMesService getClientHandleId(int size, String organizeCode, String userName) { GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.CLIENT_HANDLE_ID); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); - return resultList; + return syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); } private MesEquipment getMesEquipment(String organizeCode,String equipmentCode) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java index d72dc67..8f98f96 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java @@ -5,7 +5,9 @@ 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.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository; import lombok.extern.slf4j.Slf4j; @@ -44,4 +46,14 @@ public class MesProductVersionService extends BaseMesService List mesProductVersions = mesProductVersionRepository.findByHqlWherePage(productVersionQueryPackBean, pager); return new ListPager<>(mesProductVersions, pager); } + + @Override + public MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion) { + if (StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(partNo)) return null; + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); + return baseRDao.getByProperty(ddlPackBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 15b531e..866445d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -271,6 +271,7 @@ public class MesPullingOrderInfoService extends BaseMesService implements @Autowired private MesCustomerPartRepository mesCustomerPartRDao; @Autowired - private IMesPartSapService iMesPartSapService; - @Autowired private IMesMoveRuleService mesMoveRuleService; @Autowired private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao; @@ -106,8 +102,6 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesWorkOrderLogRepository mesWorkOrderLogRepository; @Autowired - private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao; - @Autowired private MesBomRepository mesBomRDao; @Autowired private MesPartRepository mesPartRDao; @@ -172,6 +166,9 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesConfigService mesConfigService; + @Autowired + private IMesProductVersionService mesProductVersionService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { // 数据校验 @@ -208,7 +205,7 @@ public class MesWorkOrderService extends BaseMesService implements insertUnSortWorkOrder(bean, mesWorkCenter); //bto } else { - insertBtoWorkOrder(bean, mesWorkCenter); + insertBtoWorkOrder(bean); } return bean; } @@ -253,15 +250,6 @@ public class MesWorkOrderService extends BaseMesService implements closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName()); } result.setWorkOrderStatus(bean.getWorkOrderStatus()); - if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue() - && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { - //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(result); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(result.getPartNo(), result.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsService.saveMesWorkOrderToWms(result, bomList)); - } } updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); @@ -479,23 +467,19 @@ public class MesWorkOrderService extends BaseMesService implements mesProduceSnRao.insert(mesProduceSn); } - private List sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List saveMesWorkOrderToWms) { + private List autoPublish(MesWorkOrder item) { //非试制单 - List bomList = null; MesProductVersion mesProductVersion = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { //获取生产版本 - mesProductVersion = getMesProductVersion(item, mesWorkCenter); + mesProductVersion = getMesProductVersion(item.getOrganizeCode(),item.getPartNo()); item.setProductVersion(mesProductVersion.getProductVersion()); - //获取bom信息 - bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - item.setBomCode(bomList.iterator().next().getBomCode()); } //是否自动发布 - return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion); + return isAuto(item, mesProductVersion); } - private List isAuto(MesWorkOrder item, List saveMesWorkOrderToWms, List bomList,MesProductVersion mesProductVersion) { + private List isAuto(MesWorkOrder item,MesProductVersion mesProductVersion) { MesPartProdGroup mesPartProdGroup = null; if(StringUtil.isEmpty(item.getPartProdGroupCode())){ mesPartProdGroup = getMesPartProdGroup(item); @@ -514,14 +498,8 @@ public class MesWorkOrderService extends BaseMesService implements //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //发送工单信息给WMS - if(!Objects.isNull(bomList)){ - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); - } - // 创建工单打印队列 insertPrintQueue(item); - } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } @@ -569,32 +547,6 @@ public class MesWorkOrderService extends BaseMesService implements } } - private MesProductVersion checkMesProductVersion(MesWorkOrder item) { - DdlPackBean ddlPackBean; - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(item.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion()); - } - return mesProductVersion; - } - - private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); - ddlPackBean.setOrderByStr(" order by createDatetime desc "); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { - MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(), - mesWorkCenter.getErpWorkCenter()); - } - return mesProductVersion; - } - private void packPlanTime(MesWorkOrder item, Map> mesShiftMap) { ValidatorBean.checkNotNull(item.getPlanDate(), "计划日期不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); @@ -644,7 +596,7 @@ public class MesWorkOrderService extends BaseMesService implements public void saveMesWorkOrderExcel(List mesWorkOrderList) { MesWorkOrder next = mesWorkOrderList.iterator().next(); //属性校验&字段填充 - List mesWorkOrderToWmsList = checkData(mesWorkOrderList, next.getOrganizeCode()); + checkData(mesWorkOrderList, next.getOrganizeCode()); //BTO序号 List seqList = new ArrayList<>(); if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == next.getWorkOrderType()) { @@ -701,17 +653,13 @@ public class MesWorkOrderService extends BaseMesService implements BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); } - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(mesWorkOrderToWmsList)) { - mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList); - } //保存工单记录 if (CollectionUtils.isNotEmpty(mesWorkOrderLogList)) { workOrderLogService.insertBatch(mesWorkOrderLogList); } } - private List checkData(List mesWorkOrderList, String organizeCode) { + private void checkData(List mesWorkOrderList, String organizeCode) { MesWorkOrder next = mesWorkOrderList.iterator().next(); String nowDate = TimeTool.getNowTime(true); //获取产线信息 @@ -733,7 +681,6 @@ public class MesWorkOrderService extends BaseMesService implements try { mesCustomerPartMap = BeanMapUtilsExt.getBeanMap(mesCustomerPartRDao, "erpPartNo", organizeCode, partNoList, "客户物料信息"); } catch (Exception e) { - mesCustomerPartMap = null; } //获取物料信息 Map mesPartSapMap = BeanMapUtilsExt.getBeanMap(mesPartSapRDao, "partNo", organizeCode, partNoList, "物料信息"); @@ -769,15 +716,10 @@ public class MesWorkOrderService extends BaseMesService implements if (baseRDao.isExitByHql(orderPackBean)) { MesException.throwMesBusiException("单号已存在"); } - - //BOM信息 - Map> mesBomMap = new HashMap<>(); //vin号 Map vinCodeMap = new HashMap<>(); //零件生产组 Map mesPartProdGroupMap = new HashMap<>(); - //发送wms数据 - List mesWorkOrderToWmsList = new ArrayList<>(); int index = 0; for (MesWorkOrder item : mesWorkOrderList) { item.setWorkOrderNo(orderList.get(index)); @@ -847,8 +789,8 @@ public class MesWorkOrderService extends BaseMesService implements } //排序工单数量为1 item.setQty(1d); - //发送wms数据 - sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); + //自动发布 + autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter); } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); @@ -884,7 +826,6 @@ public class MesWorkOrderService extends BaseMesService implements packPlanTime(item, mesShiftMap); //状态已发布 item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - List mesBomList = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); //校验物料生产版本是否存在 @@ -898,16 +839,6 @@ public class MesWorkOrderService extends BaseMesService implements } MesProductVersion mesProductVersion = versionList.iterator().next(); item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { - mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); - } else { - //获取bom信息 - mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList); - } - //发送工单信息给WMS - mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList)); } } else { ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); @@ -915,19 +846,17 @@ public class MesWorkOrderService extends BaseMesService implements if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { MesException.throwMesBusiException("生产数量不能小于等于0"); } - //发送wms数据 - sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); + //自动发布 + autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter); } item.setUnCompleteQty(item.getQty()); item.setFid(UUID.randomUUID().toString()); index++; } - return mesWorkOrderToWmsList; } - private void sendToWms(Map> mesProductVersionMap, Map> mesBomMap, Map mesPartProdGroupMap, List mesWorkOrderToWmsList, MesWorkOrder item, MesWorkCenter mesWorkCenter) { + private void autoPublish(Map> mesProductVersionMap, Map mesPartProdGroupMap, MesWorkOrder item, MesWorkCenter mesWorkCenter) { //发送工单信息给WMS - List mesBomList = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ //获取生产版本 List mesProductVersions = mesProductVersionMap.get(item.getPartNo()); @@ -937,19 +866,12 @@ public class MesWorkOrderService extends BaseMesService implements } MesProductVersion mesProductVersion = mesProductVersions.iterator().next(); item.setProductVersion(mesProductVersion.getProductVersion()); - if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { - mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); - } else { - //获取bom信息 - mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList); - } } //是否自动发布 - isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList); + isAuto(mesPartProdGroupMap, item); } - private void isAuto(Map mesPartProdGroupMap, List mesWorkOrderToWmsList, MesWorkOrder item, List mesBomList) { + private void isAuto(Map mesPartProdGroupMap, MesWorkOrder item) { //校验零件生产组信息 MesPartProdGroup mesPartProdGroup; if (mesPartProdGroupMap.containsKey(item.getWorkCenterCode() + item.getPartNo())) { @@ -963,10 +885,6 @@ public class MesWorkOrderService extends BaseMesService implements //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //发送工单信息给WMS - if(!Objects.isNull(mesBomList)){ - mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList)); - } } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } @@ -993,7 +911,7 @@ public class MesWorkOrderService extends BaseMesService implements //查询产线信息 MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode()); //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //报工类型 @@ -1093,7 +1011,7 @@ public class MesWorkOrderService extends BaseMesService implements } } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion()); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成条码 @@ -1161,7 +1079,11 @@ public class MesWorkOrderService extends BaseMesService implements //保存报工记录 试制单不报工 if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) { - mesProductOffLineList.forEach(t->t.setBomTotalSize(mesProductOffLineList.size())); + mesProductOffLineList.forEach(t->{ + if(Objects.isNull(t.getBomTotalSize())){ + t.setBomTotalSize(mesProductOffLineList.size()); + } + }); mesProductOffLineService.insertBatch(mesProductOffLineList); } //保存移库记录 @@ -1215,7 +1137,7 @@ public class MesWorkOrderService extends BaseMesService implements String nowTime = TimeTool.getNowTime(true); if (StringUtil.isEmpty(model.getSn())) { //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(model); + MesProductVersion mesProductVersion = getMesProductVersion(model.getOrganizeCode(),model.getPartNo()); //获取bom List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成流水码 @@ -1502,17 +1424,6 @@ public class MesWorkOrderService extends BaseMesService implements return newMesProductOffLine; } - private MesProductVersion getMesProductVersion(WmsProductModel model) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getOrderBy(null, null, ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本信息不存在", model.getPartNo()); - } - return mesProductVersion; - } - private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, String sn, List mesProductOffLineList, List mesMoveList,String nowTime,boolean isSort) { boolean isItemMove; boolean isItemReport; @@ -1550,7 +1461,7 @@ public class MesWorkOrderService extends BaseMesService implements mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size())); } else if (isItemReport) { String reportSn = String.valueOf(snowflakeIdMaker.nextId()); - MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion()); + MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion()); List bomList = null; try { bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); @@ -1559,10 +1470,10 @@ public class MesWorkOrderService extends BaseMesService implements //bom下的子节汇报 if (!CollectionUtils.isEmpty(bomList)) { for (MesBom bom : bomList) { - mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime)); + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true,bomList.size(), nowTime)); } } else { - mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime)); + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime)); } } //移库 @@ -1580,7 +1491,7 @@ public class MesWorkOrderService extends BaseMesService implements //bom下的子节汇报,总成也需要汇报 if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) { for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime)); + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime)); } } } @@ -1611,20 +1522,8 @@ public class MesWorkOrderService extends BaseMesService implements return resultList.iterator().next(); } - - private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion); - } - return mesProductVersion; - } - private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, - String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { + String sn, MesBom mesBom,Double itemQty, boolean isItemReport,Integer bomSize,String nowTime) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); @@ -1654,6 +1553,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); newMesProductOffLine.setDescription(nowTime); + newMesProductOffLine.setBomTotalSize(bomSize); newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString()); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser()); return newMesProductOffLine; @@ -1817,7 +1717,6 @@ public class MesWorkOrderService extends BaseMesService implements //校验标识 //若工单类型为排序 - List saveMesWorkOrderToWms = new ArrayList<>(); if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { //校验产线类型和工单类型是否匹配 if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { @@ -1826,23 +1725,15 @@ public class MesWorkOrderService extends BaseMesService implements } //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(item); + MesProductVersion mesProductVersion = getMesProductVersion(item.getOrganizeCode(), item.getPartNo(), item.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion()); - //获取bom信息 - List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); } item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); item.setFid(UUID.randomUUID().toString()); ConvertBean.serviceModelInitialize(item, userName); MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms); - } + saveMesWorkOrderLog(mesWorkOrder); mesWorkOrderList.add(mesWorkOrder); } @@ -1880,13 +1771,12 @@ public class MesWorkOrderService extends BaseMesService implements } } - List saveMesWorkOrderToWms = new ArrayList<>(); //排序工单数量为1 bean.setQty(1d); //生成工单号 bean.setWorkOrderNo(getOrderNo(bean)); - //发送工单给WMS - List orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //自动发布 + List orderPartList = autoPublish(bean); //顺序号 bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); //生成客户条码 @@ -1895,7 +1785,7 @@ public class MesWorkOrderService extends BaseMesService implements insertMesWorkOrder(bean, orderPartList); //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); bean.setPartName(mesPart.getPartName()); bean.setUnit(mesPart.getUnit()); //生产时间新增取当天 @@ -1906,11 +1796,6 @@ public class MesWorkOrderService extends BaseMesService implements bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } baseRDao.insert(bean); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); @@ -1941,20 +1826,15 @@ public class MesWorkOrderService extends BaseMesService implements bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); } bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - List saveMesWorkOrderToWms = new ArrayList<>(); //非试制单 if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空"); //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(bean); + MesProductVersion mesProductVersion = getMesProductVersion(bean.getOrganizeCode(), bean.getPartNo(), bean.getProductVersion()); bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(bean.getPartNo(), bean.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(bean, bomList)); } //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); bean.setPartName(mesPart.getPartName()); bean.setUnit(mesPart.getUnit()); //生产时间新增取当天 @@ -1966,31 +1846,25 @@ public class MesWorkOrderService extends BaseMesService implements bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); bean.setWorkOrderNo(getOrderNo(bean)); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } baseRDao.insert(bean); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); } - private void insertBtoWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + private void insertBtoWorkOrder(MesWorkOrder bean) { ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空"); ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空"); if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { MesException.throwMesBusiException("生产数量不能小于等于0"); } - List saveMesWorkOrderToWms = new ArrayList<>(); //顺序号 bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); //生成工单号 bean.setWorkOrderNo(getOrderNo(bean)); - //发送工单给WMS - sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //自动发布 + autoPublish(bean); //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); bean.setPartName(mesPart.getPartName()); bean.setUnit(mesPart.getUnit()); //生产时间新增取当天 @@ -2001,11 +1875,6 @@ public class MesWorkOrderService extends BaseMesService implements bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } //生成WorkOrderSeq GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); @@ -2014,24 +1883,6 @@ public class MesWorkOrderService extends BaseMesService implements workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); } - - public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { - List mesWorkOrderToWmsList = new ArrayList<>(); - MesWorkOrderToWms mesWorkOrderToWms = null; - for (MesBom mesBom : mesBomList) { - mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - mesWorkOrderToWms.setUnit(mesBom.getUnit()); - mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); - mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); - mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit()); - mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty())); - ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser()); - mesWorkOrderToWmsList.add(mesWorkOrderToWms); - } - return mesWorkOrderToWmsList; - } - public void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) { //查询物料信息 @@ -2050,7 +1901,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); @@ -2095,19 +1946,79 @@ public class MesWorkOrderService extends BaseMesService implements } mesProductOffLineRDao.saveAll(mesProductOffLineList); } - private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) { - //修改工单,需要重新同步 - mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelUpdate(mesWorkOrder, userName); - workOrderRepository.update(mesWorkOrder); - //保存记录 - saveMesWorkOrderLog(mesWorkOrder); + + @Override + public void doSendMesWorkOrderToWms(String organizeCode, Integer pageSize, String userName) { + List mesWorkOrderListToWms = getMesWorkOrderListToWms(organizeCode, pageSize); + if (CollectionUtils.isEmpty(mesWorkOrderListToWms)) { + log.info("工厂:{}不存在未推送的工单", organizeCode); + } + //获取物料信息 + Map partMap = BeanMapUtilsExt.getBeanMap(mesPartRDao, "partNo", organizeCode, mesWorkOrderListToWms.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()), "物料信息"); + // 根据零件加生产版本分组 + Map> mesWorkOrderListToWmsMap = mesWorkOrderListToWms.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).toString())); + + List mesWorkOrderToWmsList = new ArrayList<>(); + List workOrderNoList = new ArrayList<>(); + for (Map.Entry> workOrderMap : mesWorkOrderListToWmsMap.entrySet()) { + List bomExpendList = null; + List bomList = null; + MesProductVersion productVersion = null; + try { + productVersion = getMesProductVersion(organizeCode, workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], workOrderMap.getKey().split(MesExtConstWords.COMMA)[1]); + bomList = findMesBomByPartNoAndBomVersion(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], organizeCode, productVersion.getAlternativePartList()); + } catch (ImppBusiException e) { + log.info("工厂:{} 信息{}",organizeCode,e.getErrorDetail()); + continue; + } + //数据处理 + for (MesWorkOrder workOrder : workOrderMap.getValue()) { + mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomList, userName, false)); + workOrderNoList.add(workOrder.getWorkOrderNo()); + //BOT工单只拆一层 + try { + if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == workOrder.getWorkOrderType() && partMap.containsKey(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0])) { + bomExpendList = Objects.isNull(bomExpendList) ? findBomList(organizeCode, partMap.get(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]), productVersion.getAlternativePartList()) : bomExpendList; + mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomExpendList, userName, true)); + }else { + log.info("工厂:{}BTO工单:{}物料:{}信息不存在", organizeCode, workOrder.getWorkOrderNo(), workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]); + } + } catch (ImppBusiException e) { + log.info("工单:{} BOT工单只拆一层异常:{}",workOrder.getWorkOrderNo(),e.getErrorDetail()); + } + } + } + //数据持久化 + mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList); + //更新工单状态为已同步 + updateMesWorkOrder(organizeCode, userName, workOrderNoList); } + + private void updateMesWorkOrder(String organizeCode, String userName, List workOrderNoList) { + if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + baseRDao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "syncToWms"}, new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.VALID}, packBean); + } + public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogRepository.insert(workOrderLog); } + + private List getMesWorkOrderListToWms(String organizeCode, Integer pageSize) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "syncToWms", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean); + return baseRDao.findByHqlTopWhere(packBean, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize); + } + public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { List bomData = new ArrayList<>(); // 递归展开 BOM @@ -2445,7 +2356,6 @@ public class MesWorkOrderService extends BaseMesService implements //查询数据 List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn()); @@ -2454,14 +2364,12 @@ public class MesWorkOrderService extends BaseMesService implements List newWrkOrderList = new ArrayList<>(); List newOrderAssemblyList = new ArrayList<>(); List newOrderPartList = new ArrayList<>(); - List newToWmsList = new ArrayList<>(); List newOrderLogList = new ArrayList<>(); List newProduceSnList = new ArrayList<>(); List newQueueOrderList = new ArrayList<>(); List newPrintQueueList = new ArrayList<>(); MesWorkOrderAssembly newOrderAssembly = null; MesWorkOrderPart newOrderPart = null; - MesWorkOrderToWms newOrderPartToWms = null; MesWorkOrderLog orderLog = null; MesProduceSn newProduceSn = null; MesQueueOrder newQueueOrder = null; @@ -2495,15 +2403,6 @@ public class MesWorkOrderService extends BaseMesService implements newOrderPartList.add(newOrderPart); } } - //工单发送给WMS数据 - if (!CollectionUtils.isEmpty(toWmsList)) { - for (MesWorkOrderToWms toWms : toWmsList) { - newOrderPartToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(toWms, newOrderPartToWms, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newToWmsList.add(newOrderPartToWms); - } - } //生产工单日志 if (!CollectionUtils.isEmpty(orderLogList)) { for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { @@ -2557,9 +2456,6 @@ public class MesWorkOrderService extends BaseMesService implements if (!CollectionUtils.isEmpty(newOrderLogList)) { workOrderLogService.insertBatch(newOrderLogList); } - if (!CollectionUtils.isEmpty(newToWmsList)) { - mesWorkOrderToWmsService.insertBatch(newToWmsList); - } if (!CollectionUtils.isEmpty(newQueueOrderList)) { queueOrderRao.saveAll(newQueueOrderList); } @@ -2600,4 +2496,20 @@ public class MesWorkOrderService extends BaseMesService implements return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1)); } + private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion); + } + return mesProductVersion; + } + + private MesProductVersion getMesProductVersion(String organizeCode, String partNo) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, null); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】生产版本信息不存在", partNo); + } + return mesProductVersion; + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java index 95229fc..681538f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java @@ -1,9 +1,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesBom; @@ -28,18 +30,19 @@ import java.util.List; public class MesWorkOrderToWmsServiceImpl extends BaseMesService implements IMesWorkOrderToWmsService { @Override - public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList,String userName,boolean flag) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; for (MesBom mesBom : mesBomList) { mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, MesExtConstWords.ID); mesWorkOrderToWms.setUnit(mesBom.getUnit()); + mesWorkOrderToWms.setFlag(flag ? CommonEnumUtil.VALID : CommonEnumUtil.FALSE); mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit()); mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty())); - ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser()); + ConvertBean.serviceModelInitialize(mesWorkOrderToWms, userName); mesWorkOrderToWmsList.add(mesWorkOrderToWms); } return mesWorkOrderToWmsList; From 487c683569486fc9f9fc87021a2906f41a2c5bae Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 14 Nov 2024 11:31:07 +0800 Subject: [PATCH 150/180] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesEarlyWarningServiceImpl.java | 8 +++--- .../busi/MesSortRuleCfgOfflineServiceImpl.java | 32 +++++++++++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 411aef3..bd9347f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -401,10 +401,10 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); if (realSupplyBuffer < supplyRedBuffer){ - mesKanBanShowModel.setRealSupplyBufferColor("RED"); + mesKanBanShowModel.setRealSupplyBufferColor("red"); mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); }else if (realSupplyBuffer < supplyYellowBuffer){ - mesKanBanShowModel.setRealSupplyBufferColor("YELLOW"); + mesKanBanShowModel.setRealSupplyBufferColor("yellow"); mesKanBanShowModel.setSupplyRedBuffer(supplyYellowBuffer); } //线头积单 @@ -421,9 +421,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); Long summaryWorkOrderYellowCount = kanBan.getSummaryWorkOrderYellowCount(); if (summaryRealSupplyRealCount > summaryWorkOrderRedCount){ - mesKanBanShowModel.setSummaryWorkOrderColor("RED"); + mesKanBanShowModel.setSummaryWorkOrderColor("red"); }else if (summaryRealSupplyRealCount > summaryWorkOrderYellowCount){ - mesKanBanShowModel.setSummaryWorkOrderColor("YELLOW"); + mesKanBanShowModel.setSummaryWorkOrderColor("yellow"); } //成品缓冲 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index 05f37ad..a52ef20 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -64,6 +64,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS @Autowired private MesPullingOrderPartInfoOfflineRepository partPullOrderDetailOfflineRao; + @Autowired + private MesPartSapRepository partSapRao; + + + @Transactional(propagation = Propagation.REQUIRES_NEW) @Override @@ -95,16 +100,33 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS if (mesCustomerCarModel == null) { return; } + //5.6 获取零件信息 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(erpPartNo,"partNo", partPackBean); + List partSapList = partSapRao.findByHqlWhere(partPackBean); + + //7.获取车型 + // 客户车型配置 +// //4.查询车型配置中的车型编号就是客户零件号 custPartNo,custPlantCode,CustCode,Plant +// DdlPackBean carModelPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(custPartNo,"custPartNo",carModelPackBean); +// DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",carModelPackBean); +// List carModels = carModelRao.findByHqlWhere(carModelPackBean); + + String carModelCode = mesCustomerCarModel.getCarModelCode(); List assemblyList = getAssemblyList(detail.getWorkCenterCode(), carModelCode, workOrderPartList, mesPartProdGroup); //7.保存到离线表中 for (MesWorkOrderAssembly orderAssembly : assemblyList) { MesProdRuleSortCfgOffline cfgOffline = new MesProdRuleSortCfgOffline(); BeanUtils.copyProperties(orderAssembly, cfgOffline); + if (partSapList != null) { + cfgOffline.setPartName(partSapList.get(0).getPartName()); + } cfgOffline.setCustPartNo(custPartNo); cfgOffline.setCustPartName(mesCustomerPart.getCustPartName()); cfgOffline.setPartNo(erpPartNo); -// cfgOffline.setVehicleNo(carModelCode); + cfgOffline.setRemark(mesCustomerCarModel.getCarModelName()); cfgOffline.setOrganizeCode(organizeCode); ConvertBean.saveOrUpdate(cfgOffline, "OFFLINE-JOB"); cfgOfflineRao.insert(cfgOffline); @@ -137,6 +159,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS if (mesCustomerPart == null) { return; } + //5.6 获取零件信息 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(erpPartNo,"partNo", partPackBean); + List partSapList = partSapRao.findByHqlWhere(partPackBean); + //5.打散的bom 获取排序加工规则 List workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); @@ -146,6 +173,9 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS List pullDetails = pullDetailList.stream().filter(item -> partPullDetailPartNoList.contains(item.getPartNo())).collect(Collectors.toList()); //7.生成拉动主单模板 MesPullingOrderPartInfoOfflineRepository MesPullingOrderInfoOffline mesPartPullOffline = new MesPullingOrderInfoOffline(); + if (partSapList != null) { + mesPartPullOffline.setPartName(partSapList.get(0).getPartName()); + } mesPartPullOffline.setPullCode(partPull.getPullCode()); mesPartPullOffline.setCustPartNo(custPartNo); mesPartPullOffline.setPartNo(erpPartNo); From 3c92dbb3ff379b56bed3beef9e75fc25cfda1639 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 14 Nov 2024 11:32:41 +0800 Subject: [PATCH 151/180] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index a52ef20..483d277 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -198,7 +198,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS detailOffline.setWorkCellCode(pullDetail.getWorkCellCode()); detailOffline.setEquipment(pullDetail.getEquipment()); detailOffline.setLocation(pullDetail.getPullAddr()); - if (pullDetail.getScanValidationType() == 10) { + if (pullDetail.getScanValidationType() != null && pullDetail.getScanValidationType() == 10) { detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()); } else { detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()); From d6bddfff1ab2c889afb28b4b43a7291f3302bbb7 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 14 Nov 2024 11:37:31 +0800 Subject: [PATCH 152/180] =?UTF-8?q?PC=E6=8E=92=E5=BA=8F=E6=B1=87=E6=8A=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 3506b29..56faae2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1458,7 +1458,7 @@ public class MesWorkOrderService extends BaseMesService implements } //汇报 if (isItemReport && isSort) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size())); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, null)); } else if (isItemReport) { String reportSn = String.valueOf(snowflakeIdMaker.nextId()); MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion()); From 68908190ede6a5b022fca1a34c7cc920d4940412 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 14 Nov 2024 14:01:00 +0800 Subject: [PATCH 153/180] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E5=8F=B7=E6=98=AF=E7=94=A8=E6=9D=A5=E6=9F=A5=E6=89=BE=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E7=89=88=E6=9C=AC=E4=B8=8Ebom=20=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E4=BA=8E=E9=9B=B6=E4=BB=B6=E7=94=9F=E4=BA=A7=E7=BB=84=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/busi/IMesSortRuleCfgOfflineService.java | 4 ++-- .../base/roundness/MesPackageRoundnessService.java | 9 +++++++-- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 18 ++++++++++++++---- .../serviceimpl/busi/MesOfflineServiceImpl.java | 10 ++++++---- .../busi/MesSortRuleCfgOfflineServiceImpl.java | 20 ++++++++++---------- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java index bfdc5c7..5ec38be 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java @@ -14,7 +14,7 @@ public interface IMesSortRuleCfgOfflineService { void deleteSortRuleOffline(String organizeCode); - void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail); + void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo,String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail); void deletePullOffline(String organizeCode); @@ -22,5 +22,5 @@ public interface IMesSortRuleCfgOfflineService { void deletePullDetailOffline(String organizeCode); - void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList); + void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index e2b1967..0ca8e34 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -184,10 +184,15 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { if (mesPartProdGroupDetail.getProductPartNo() == null) { mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo()); } - MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); + /** + * 2024/11/14 + * 生产零件号用于拆分bom + * 零件号是erp零件号 + */ + MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getPartNo(), partProdGroup.getOrganizeCode()); if (mesPart == null) { - log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getProductPartNo()); + log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getPartNo()); return; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index bc319c6..042b131 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -188,18 +188,27 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 // 13.生产版本 organizeCode + partNo - MesProductVersion prodVersion = getProdVersion(organizeCode, partSap.getPartNo()); + /** + * 生产版本是根据 生产零检号查询,不是根据erp零件号查询 + */ + MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo()); if (prodVersion == null) { - log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); + log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo()); } else { String productVersion = prodVersion.getProductVersion(); mesWorkOrder.setProductVersion(productVersion); } // bom prodVersion.alternativePartList bom版本 - MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), partSap.getPartNo()); + /** + * bom也需要根据生产零件号拆分 + */ + MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo()); if (bom != null){ mesWorkOrder.setBomCode(bom.getBomCode()); + }else { + log.info("工厂:{},生产零件号:{}没有维护bom", organizeCode, mesPartProdGroupDetail.getProductPartNo()); + return; } mesWorkOrder.setQty(sortInfo.getQty()); @@ -289,7 +298,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { // 打散bom List workOrderPartList = new ArrayList<>(); if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { - workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); + //打散bom使用生产零件号 + workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); } /** * 总成拆bom,变成子零件 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java index 1de0d8b..020a6c5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java @@ -50,8 +50,9 @@ public class MesOfflineServiceImpl implements IMesOfflineService { List detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); //3.根据客户零件表中的erp零件,是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 for (MesPartProdGroupDetail detail : detailList) { - String erpPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? detail.getPartNo() : detail.getProductPartNo(); - cfgOfflineService.doCreateSortRuleOffline(detail.getCustPartNo(), erpPartNo,organizeCode,mesPartProdGroup,detail); + String erpPartNo = detail.getPartNo(); + String productPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? erpPartNo : detail.getProductPartNo(); + cfgOfflineService.doCreateSortRuleOffline(detail.getCustPartNo(), erpPartNo,productPartNo,organizeCode,mesPartProdGroup,detail); } } @@ -91,13 +92,14 @@ public class MesOfflineServiceImpl implements IMesOfflineService { List detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); //3.根据客户零件表中的erp零件,是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 for (MesPartProdGroupDetail detail : detailList) { - String erpPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? detail.getPartNo() : detail.getProductPartNo(); + String erpPartNo = detail.getPartNo(); + String productPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? erpPartNo : detail.getProductPartNo(); MesPartPull mesPartPull = partPullMap.get(mesPartProdGroup.getWorkCenterCode()); List mesPartPullDetails = detailMapList.get(mesPartPull.getPullCode()); if (mesPartPullDetails == null) { continue; } - cfgOfflineService.doCreatePullOffline(detail.getCustPartNo(), erpPartNo,organizeCode,mesPartProdGroup,detail,partPullMap.get(mesPartProdGroup.getWorkCenterCode()), mesPartPullDetails); + cfgOfflineService.doCreatePullOffline(detail.getCustPartNo(), erpPartNo,productPartNo,organizeCode,mesPartProdGroup,detail,partPullMap.get(mesPartProdGroup.getWorkCenterCode()), mesPartPullDetails); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index 483d277..a5c5049 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -78,12 +78,12 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS @Transactional(propagation = Propagation.REQUIRES_NEW) @Override - public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { + public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); //4.总成零件号打散bom String bomVersion = mesProductVersion.getAlternativePartList(); - MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo); + MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo); if (bom == null) { return; } @@ -93,7 +93,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS return; } //5.打散的bom 获取排序加工规则 - List workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); + List workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); //6.装配件获取的三种条件 String custCode = mesCustomerPart.getCustCode(); MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode); @@ -146,7 +146,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS } @Override - public void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList) { + public void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList) { MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); //4.总成零件号打散bom String bomVersion = mesProductVersion.getAlternativePartList(); @@ -165,7 +165,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS List partSapList = partSapRao.findByHqlWhere(partPackBean); //5.打散的bom 获取排序加工规则 - List workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); + List workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); //6.过滤出需要拉动的零件号 List partPullDetailPartNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); @@ -178,7 +178,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS } mesPartPullOffline.setPullCode(partPull.getPullCode()); mesPartPullOffline.setCustPartNo(custPartNo); - mesPartPullOffline.setPartNo(erpPartNo); + mesPartPullOffline.setPartNo(productPartNo); mesPartPullOffline.setWorkCenterCode(partPull.getWorkCenterCode()); mesPartPullOffline.setOrganizeCode(organizeCode); ConvertBean.saveOrUpdate(mesPartPullOffline,"SPS-OFFLINE"); @@ -189,7 +189,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS detailOffline.setPid(mesPartPullOffline.getId()); detailOffline.setPullCode(partPull.getPullCode()); detailOffline.setCustPartNo(custPartNo); - detailOffline.setAssPartNo(erpPartNo); + detailOffline.setAssPartNo(productPartNo); detailOffline.setOrganizeCode(organizeCode); detailOffline.setPartNo(pullDetail.getPartNo()); detailOffline.setPartName(pullDetail.getPartName()); @@ -240,11 +240,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); ddlPackBean.setOrderByStr(" order by createDatetime desc "); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { + List mesProductVersionList = mesProductVersionRDao.findByHqlTopWhere(ddlPackBean, 1); + if (Objects.isNull(mesProductVersionList) || mesProductVersionList.isEmpty()) { MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo); } - return mesProductVersion; + return mesProductVersionList.get(0); } private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode) { From ae5acb76b1c1746d89a33ff81c12c618cbc6dd41 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 14 Nov 2024 15:22:19 +0800 Subject: [PATCH 154/180] =?UTF-8?q?bom=E4=B8=8D=E7=94=9F=E6=95=88=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=8F=AA=E7=94=9F=E6=88=90=E5=B7=A5=E5=8D=95=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=A3=85=E9=85=8D=E4=BB=B6=E5=8F=8A=E7=89=A9?= =?UTF-8?q?=E6=96=99=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 042b131..0af1043 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -411,7 +411,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; mesWorkOrder.setWorkOrderNo(orderNoWuHan); - + List assemblyList = new ArrayList<>(); if (!workOrderPartList.isEmpty()) { for (MesWorkOrderPart orderPart : workOrderPartList) { orderPart.setOrganizeCode(organizeCode); @@ -419,8 +419,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); } workOrderPartRao.saveAll(workOrderPartList); + assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); } - List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); // /** // * 生产序号 // * 工厂-产线-9位流水号,跳号10 @@ -672,6 +672,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //2.根据bomList中的subPartNo 查询零件清单 partList List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + if (partNoList.isEmpty()) { + return new ArrayList<>(); + } DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); From f72dbdeef42e32d760912ccd2399d652bd551ee7 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 14 Nov 2024 16:05:16 +0800 Subject: [PATCH 155/180] =?UTF-8?q?bom=E4=B8=8D=E7=94=9F=E6=95=88=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=8F=AA=E7=94=9F=E6=88=90=E5=B7=A5=E5=8D=95=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=A3=85=E9=85=8D=E4=BB=B6=E5=8F=8A=E7=89=A9?= =?UTF-8?q?=E6=96=99=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/roundness/MesPackageRoundnessService.java | 8 ++++---- .../serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java | 13 ++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 0ca8e34..29044cd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -186,13 +186,13 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { } /** * 2024/11/14 - * 生产零件号用于拆分bom - * 零件号是erp零件号 + * 不带z的零件号是装配费 + * 零件号带z是erp零件号 生产零件号 */ - MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getPartNo(), partProdGroup.getOrganizeCode()); + MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); if (mesPart == null) { - log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getPartNo()); + log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getProductPartNo()); return; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index a5c5049..a6caee2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -80,7 +80,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS @Override public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { - MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); + MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode); //4.总成零件号打散bom String bomVersion = mesProductVersion.getAlternativePartList(); MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo); @@ -88,6 +88,9 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS return; } //5.5 获取客户零件号对应的车型配置 + /** + * 客户零件号 对应的 erp零件号 不带z + */ MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode); if (mesCustomerPart == null) { return; @@ -102,7 +105,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS } //5.6 获取零件信息 DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(erpPartNo,"partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(productPartNo,"partNo", partPackBean); List partSapList = partSapRao.findByHqlWhere(partPackBean); //7.获取车型 @@ -147,10 +150,10 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS @Override public void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList) { - MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); + MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode); //4.总成零件号打散bom String bomVersion = mesProductVersion.getAlternativePartList(); - MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo); + MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo); if (bom == null) { return; } @@ -161,7 +164,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS } //5.6 获取零件信息 DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(erpPartNo,"partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(productPartNo,"partNo", partPackBean); List partSapList = partSapRao.findByHqlWhere(partPackBean); //5.打散的bom 获取排序加工规则 From 862da84fd6b81510785bafd92236e8de96b42fa2 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 14 Nov 2024 19:04:24 +0800 Subject: [PATCH 156/180] =?UTF-8?q?43683=20=E5=8F=91=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=98=BE=E7=A4=BA=EF=BC=9A=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=89=A9=E6=96=99=E5=90=8D=E7=A7=B0=EF=BC=8C?= =?UTF-8?q?=E5=8F=8A=E6=AD=A3=E5=BA=8F=E6=8E=92=E5=BA=8F=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesShippingOrderManagementDetailService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index e7875b0..f98a89c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -51,7 +51,7 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryDetailGroupByPartNo(MesShippingOrderManagementDetail bean, Pager pager) { From 96dec1f4629651102d7a273024d0f03129be3e93 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 14 Nov 2024 20:53:14 +0800 Subject: [PATCH 157/180] =?UTF-8?q?CBR=E8=B4=9F=E6=8A=A5=E5=B7=A5=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 56faae2..0edc47b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -33,6 +33,7 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.CaseInsensitiveMap; @@ -1130,6 +1131,7 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doReportWorkReversal(WmsProductModel model) { + log.info("WMS发运调用MES接口CRB负报工请求数据:{}", JSONObject.toJSONString(model)); //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(model.getPartNo(), model.getOrganizeCode()); //保存数据 From 92587bd4f5f2da7b99cfac87a414667c1fb7bfd4 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 14 Nov 2024 21:24:08 +0800 Subject: [PATCH 158/180] =?UTF-8?q?CBR=E8=B4=9F=E6=8A=A5=E5=B7=A5=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 0edc47b..b417cce 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1355,6 +1355,7 @@ public class MesWorkOrderService extends BaseMesService implements } //oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode()); oldProductOffLineList.forEach(item -> { + item.setId(null); item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); item.setOrderNo(model.getShipOrderNo()); item.setCustNo(model.getCustNo()); From 9cd5fec9863141ff7a25eaf0bde29c0bf2a5fdbb Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 15 Nov 2024 16:59:25 +0800 Subject: [PATCH 159/180] =?UTF-8?q?SPS=E5=8D=95=E6=8D=AE=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E8=BD=A6=E5=9E=8B=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 866445d..4d7d44b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -193,6 +193,7 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Sat, 16 Nov 2024 15:48:24 +0800 Subject: [PATCH 160/180] =?UTF-8?q?SPS=E5=8D=95=E6=8D=AE=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java index f95ea45..fe5a12f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java @@ -58,7 +58,7 @@ public class BeanMapUtilsExt { DdlPreparedPack.getOrderBy(null,null,packBean); List baseDataList = repository.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(baseDataList)) { - MesException.throwMesBusiException(remindMsg + "信息存在"); + MesException.throwMesBusiException(remindMsg + "不存在"); } return baseDataList; } From 0e891ccb1477880fc91e7747a7a89e60bd9e3ab8 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sat, 16 Nov 2024 17:25:39 +0800 Subject: [PATCH 161/180] =?UTF-8?q?PTR=E9=80=BB=E8=BE=91=E5=8F=8AF?= =?UTF-8?q?=E5=8D=95=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 55 +++++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 0af1043..057508c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -318,12 +318,18 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { boolean isModifyPOrder = false; boolean isFOrder = false; //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + /** + * PTR生效 + * 1.有开始时间和结束时间 和 需要数量,达到其中一个就结束 + * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 + * 3.有开始时间无结束时间,无结束数量 一直替换 + */ if (!workOrderPartList.isEmpty()){ Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); //先替换客户的ptr信息 String ptrInfo = mesWorkOrder.getPtrInfo(); if (StringUtils.isNotBlank(ptrInfo)) { - List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); + List ptrInfoList = Arrays.asList(ptrInfo.replaceAll("_", "").split("\\|")); if (!ptrInfoList.isEmpty()){ List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); long count = custPartPtrList.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); @@ -349,12 +355,10 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 - long count = partPtrList.stream().filter(item -> item.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); - if (count > 0){ - isFOrder = true; - } + List fPartPtrPartList = partPtrList.stream().filter(item -> item.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).map(MesPartPtr::getSrcPartNo).collect(Collectors.toList()); + for (MesPartPtr mesPartPtr : partPtrList) { - //查询ptr总成 + //查询ptr总成--只有特定总成才会替换 DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",detailPartPtr); DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",detailPartPtr); @@ -375,6 +379,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { if (!isModifyPOrder){ isModifyPOrder = true; } + if (fPartPtrPartList.contains(mesPartPtr.getSrcPartNo())){ + isFOrder = true; + } mesWorkOrder.setRemark(mesPartPtr.getRemark()); String ptrInfoStr = "INFO"+mesPartPtr.getId()+"|PART"+mesPartPtrDetail.getId(); mesWorkOrder.setPtrInfo(ptrInfoStr); @@ -758,16 +765,50 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { } private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + /** + * 2024/11/16 + * PTR生效 + * 1.有开始时间和结束时间 和 需要数量,达到其中一个就结束 + * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 + * 3.有开始时间无结束时间,无结束数量 一直替换 + */ DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); - List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + DdlPreparedPack.getIsNotNull("endTime", partPtrPackBean); + + /** + * 有开始时间 和 无结束时间 和 需要的数量,只有达到数量才结束 + */ + + DdlPackBean part1PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part1PtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part1PtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", part1PtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", part1PtrPackBean); + DdlPreparedPack.getIsNull("endTime", part1PtrPackBean); + List partPtrList1 = partPtrRao.findByHqlWhere(part1PtrPackBean); + partPtrList.addAll(partPtrList1); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) .collect(Collectors.toList()); + /** + * 有开始时间 和 无结束时间 和 无需要的数量 + */ + + DdlPackBean part2PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part2PtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part2PtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", part2PtrPackBean); + DdlPreparedPack.getIsNull("prtVehicleCount", part2PtrPackBean); + DdlPreparedPack.getIsNull("endTime", part2PtrPackBean); + List partPtrList2 = partPtrRao.findByHqlWhere(part2PtrPackBean); + partPtrList.addAll(partPtrList2); return partPtrList; } //根据排序信息PTR零件号 获取 ptr信息 From 8922c24857320a332ec81d11597bdb3a30efa46e Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sat, 16 Nov 2024 17:34:05 +0800 Subject: [PATCH 162/180] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=E8=A1=A8=E6=A0=A1=E9=AA=8C=20cfgOfflineRao=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E6=98=AF=E5=90=A6=E5=B7=B2=E7=BB=8F=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E4=BA=86=E5=AE=A2=E6=88=B7=E9=9B=B6=E4=BB=B6=E5=8F=B7=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=AD=98=E5=9C=A8=E5=88=99=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=E9=98=B2=E6=AD=A2=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E9=9B=B6=E4=BB=B6=E7=94=9F=E4=BA=A7=E7=BB=84=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9B=B8=E5=90=8C=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index a6caee2..a74db21 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -79,7 +79,17 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS @Transactional(propagation = Propagation.REQUIRES_NEW) @Override public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { - + /** + * 校验 cfgOfflineRao表中是否已经存在了客户零件号,如果存在则跳过 + * 防止多个零件生产组生成相同的数据 + */ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custPartNo,"cust_part_no",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getWorkCenterCode(),"work_center_code",ddlPackBean); + int count = cfgOfflineRao.findByHqlWhereCount(ddlPackBean); + if (count > 0){ + return; + } MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode); //4.总成零件号打散bom String bomVersion = mesProductVersion.getAlternativePartList(); @@ -128,7 +138,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS } cfgOffline.setCustPartNo(custPartNo); cfgOffline.setCustPartName(mesCustomerPart.getCustPartName()); - cfgOffline.setPartNo(erpPartNo); + cfgOffline.setPartNo(productPartNo); cfgOffline.setRemark(mesCustomerCarModel.getCarModelName()); cfgOffline.setOrganizeCode(organizeCode); ConvertBean.saveOrUpdate(cfgOffline, "OFFLINE-JOB"); From 20bd304728c9695e4375d12b0b005aece854daab Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sat, 16 Nov 2024 17:35:26 +0800 Subject: [PATCH 163/180] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=E8=A1=A8=E6=A0=A1=E9=AA=8C=20cfgOfflineRao=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E6=98=AF=E5=90=A6=E5=B7=B2=E7=BB=8F=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E4=BA=86=E5=AE=A2=E6=88=B7=E9=9B=B6=E4=BB=B6=E5=8F=B7=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=AD=98=E5=9C=A8=E5=88=99=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=20=E9=98=B2=E6=AD=A2=E5=A4=9A=E4=B8=AA=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=BB=84=E7=94=9F=E6=88=90=E7=9B=B8=E5=90=8C?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java index a74db21..45647a5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -84,8 +84,8 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS * 防止多个零件生产组生成相同的数据 */ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(custPartNo,"cust_part_no",ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getWorkCenterCode(),"work_center_code",ddlPackBean); + DdlPreparedPack.getStringEqualPack(custPartNo,"custPartNo",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getWorkCenterCode(),"workCenterCode",ddlPackBean); int count = cfgOfflineRao.findByHqlWhereCount(ddlPackBean); if (count > 0){ return; From d97e9be49d11e9f52dcedd4c848a41aafc22d94e Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 17 Nov 2024 13:44:19 +0800 Subject: [PATCH 164/180] docker --- .../i3plus-ext-mes-apiservice/src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties index 1980f4d..d72832f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u540D\u79F0 spring.application.name=i3mes #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=88,cus-88 +spring.profiles.active=docker,cus-docker ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C desc.application.name=\u751F\u4EA7\u6267\u884C\u7CFB\u7EDF From 3a2fa64bbdbb6e9553a24b7136a0c5d1e10650b1 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 17 Nov 2024 14:58:55 +0800 Subject: [PATCH 165/180] =?UTF-8?q?PTR=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application-wuhan-bianyuan.properties | 346 +++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties new file mode 100644 index 0000000..d7997dd --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties @@ -0,0 +1,346 @@ +#\u9879\u76EE\u7AEF\u53E3 +server.port=8300 +#\u672C\u673Aip +impp.server.ip=mes +#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 +impp.console.ip=http://172.28.215.66:8010 +################ \u529F\u80FD\u914D\u7F6E1 ################ +#mes webservice\u5F00\u5173 +mes.webservice.open=true +#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31 +impp.snowflake.work.id=11 +#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID +impp.snowflake.database.id=11 +#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165 +impp.cluster.fetch=false +#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3 +#impp.cluster.regist.center=http://register:8000/eureka/ +impp.cluster.regist.center=http://172.28.215.66:8000/eureka/ +#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2 +logging.config=classpath:log4j2-spring.xml +########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## +#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 +impp.config.redis=true +#\u662F\u5426\u5F00\u542FrabbitMQ +impp.config.rabbitmq=true +#\u662F\u5426\u5F00\u542Fswagger +impp.config.swagger=true +#\u662F\u5426\u5F00\u542Fwebsocket +impp.config.websocket=true +#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1 +impp.config.fastdfs=true +impp.config.fileserver=obs + +##\u534E\u4E3AOBS\u63A5\u5165\u914D\u7F6E +#OBS\u670D\u52A1\u6240\u5728\u5730\u5740 +huaweiobs.endPoint=obs.cn-east-3.myhuaweicloud.com +#\u5B58\u50A8\u6876\u540D\u79F0 +huaweiobs.bucketName=mes-wms-obs +#\u8BBF\u95EE\u7684key +huaweiobs.ak=TPNXQ2LUMRHNYYOBO8QO +#\u8BBF\u95EE\u7684\u79D8\u94A5 +huaweiobs.sk=ppTtbisjdBxQsU124mFnubSojUsB6Wvp9KSaUAeb +#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.controller=true +#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.service=true +################ \u961F\u5217\u5904\u7406 ################ +#\u7AD9\u5185\u4FE1 +impp.mq.queue.letter=true +#\u90AE\u4EF6 +impp.mq.queue.mail=true +#\u5B9A\u65F6\u4EFB\u52A1 +impp.mq.queue.schedule=true +#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217 +impp.mq.queue.sweb.notice=true +################ FastDfs \u914D\u7F6E ################ +#tracker\u670D\u52A1\u5668ip +fastdfs.tracker_servers=172.28.215.66:22122 +# tracker\u7684http\u7AEF\u53E3 +fastdfs.http_tracker_http_port=22122 +# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740 +fastdfs.http.ui.host=http://dfs.estsh.com +#\u5BC6\u7801 +#fastdfs.http.secret_key= +#\u8FDE\u63A5\u8D85\u65F6 +fastdfs.connect_timeout_in_seconds=500000 +#\u4F20\u8F93\u8D85\u65F6 +fastdfs.network_timeout_in_seconds=60000000 +fastdfs.charset=UTF-8 +# token \u9632\u76D7\u94FE\u529F\u80FD +fastdfs.http_anti_steal_token=no +################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################ +#elasticsearch ip \u591A\u4E2A\u7528\u9017\u53F7\u9694\u5F00 +elasticsearch.ip=172.28.215.66:9200 +#redisIP +redis.hostName=172.28.215.66 +#\u7AEF\u53E3\u53F7 +redis.port=6379 +#\u5982\u679C\u6709\u5BC6\u7801 +redis.password=ABCabc123!@# +##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################## rabbitMQ\u914D\u7F6E #################### +spring.rabbitmq.virtual-host=/ +spring.rabbitmq.host=172.28.215.66 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=estsh +spring.rabbitmq.password=estsh123 +##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################ \u529F\u80FD\u914D\u7F6E2 ################ +#\u662F\u5426\u5F00\u542Fredis +mes.redis.open=true +#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4 +impp.web.cross=true +################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.user.filteruri=/mes/operate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.admin.filteruri=/mes/adoperate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.saadmin.filteruri=/mes/saoperate/* +################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################ +#\u662F\u5426\u5F00\u542F\u5FAE\u670D +eureka.client.enabled=false +#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6240\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09 +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################ +#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09 +eureka.instance.ip-address=${impp.server.ip} +#\u672C\u670D\u52A1\u5B9E\u4F8BID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#\u672C\u670D\u52A1\u4E3B\u673A\u540D +eureka.instance.hostname=${impp.server.ip} +#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518 +eureka.instance.prefer-ip-address=true +#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5 +eureka.client.healthcheck.enabled=true +################ \u68C0\u6D4B\u673A\u5236 ################ +#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A +eureka.instance.lease-expiration-duration-in-seconds=30 +#\u5FC3\u8DF3\u5468\u671F +eureka.instance.lease-renewal-interval-in-seconds=20 +#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2 +eureka.client.eureka-connection-idle-timeout-seconds=1 +#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A +eureka.client.initial-instance-info-replication-interval-seconds=1 +#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D +eureka.client.instance-info-replication-interval-seconds=1 +#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8 +eureka.client.registry-fetch-interval-seconds=1 +################ \u6253\u5F00feign\u7684\u7194\u65AD ################ +feign.hystrix.enabled=true +#\u8BFB\u53D6\u6570\u636E\u65F6\u957F +ribbon.ReadTimeout=100000000 +#\u8FDE\u63A5\u65F6\u957F +ribbon.ConnectTimeout=100000000 +#\u91CD\u8BD5 +ribbon.maxAutoRetries=2 +#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\ +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=250000000 +#\u96C6\u7FA4\u540D +eureka.instance.metadata-map.cluster=impp_cluster +################ \u94FE\u8DEF\u8FFD\u8E2A ################ +#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F +spring.zipkin.sender.type=web +#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740 +spring.zipkin.base-url=${impp.console.ip} +#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8 +spring.sleuth.sampler.probability=1.0 + +#mysql +#impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.write.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.write.datasource.username=root +#impp.write.datasource.password=ABCabc123!@# +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.read.datasource.jdbc-url=jdbc:mysql://dbslave:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.read.datasource.username=root +#impp.read.datasource.password=ABCabc123!@# +##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## +impp.schedule.open=true +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://172.28.215.65:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=root +impp.schedule.datasource.password=@E#e7@saWE!293??||367 +impp.schedule.datasource.max-connections=20 + +#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C +impp.schedule.start.after-second=20 +#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72 +impp.schedule.datasource.is-clustered=true +#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C +impp.schedule.datasource.cluster-checkin-interval=30000 +#\u7EBF\u7A0B\u6570 +impp.schedule.thread-count=10 +#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5 +impp.schedule.thread-priority=5 +################ \u6570\u636E\u6C60\u8BBE\u7F6E ################ +## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10 +spring.datasource.hikari.maximum-pool-size=100 +## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF +spring.datasource.hikari.minimum-idle=10 +## \u7A7A\u95F2\u8FDE\u63A5\u5B58\u6D3B\u6700\u5927\u65F6\u95F4\uFF0C\u9ED8\u8BA4600000\uFF0810\u5206\u949F\uFF09 +spring.datasource.hikari.idle-timeout=600000 +## \u6B64\u5C5E\u6027\u63A7\u5236\u6C60\u4E2D\u8FDE\u63A5\u7684\u6700\u957F\u751F\u547D\u5468\u671F\uFF0C\u503C0\u8868\u793A\u65E0\u9650\u751F\u54 +spring.datasource.hikari.max-lifetime=1800000 +## \u6570\u636E\u5E93\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4,\u9ED8\u8BA430\u79D2\uFF0C\u537330000 +spring.datasource.hikari.connection-timeout=30000 +################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect + +# sql_server +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL +#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNaming +#\u8868\u5173\u7CFBcreate,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#\u662F\u5426\u663E\u793Asql +spring.jpa.show-sql=true +################ \u6388\u6743\u914D\u7F6E ################ +slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 +slm.app.id=20190513 + +impp.global.session.timeout=-1 +impp.excel.export.defaultType=xlsx + +management.endpoints.enabled-by-default=false + + +impp.xxlJob.admin.enable=true +impp.schedule.scheduleType=xxljob +xxl.job.admin.addresses=http://172.28.215.66:10010/xxl-job-admin +### xxl-job, access token +xxl.job.accessToken= +### xxl-job executor appname +#xxl.job.executor.appname=${project.name} +xxl.job.executor.appname=i3mes-castle +### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null +xxl.job.executor.address= +### xxl-job executor server-info +xxl.job.executor.ip=10.196.76.152 +#xxl.job.executor.ip= +xxl.job.executor.port=8011 +### xxl-job executor log-path +xxl.job.executor.logpath= +### xxl-job executor log-retention-days +xxl.job.executor.logretentiondays=30 +xxl.job.basePackage=cn.estsh.i3plus.mes.apiservice.schedulejob,cn.estsh.i3plus.ext.mes.apiservice.schedulejob +xxl.job.execute.methodName=executeImppJob,execute + + +# impp.datasource.type=druidDataSource + +# #\u6700\u5927\u7EBF\u7A0B\u6570 +# spring.datasource.maximum-pool-size = 100 + +# #\u6700\u5C0F\u8FDE\u63A5\u7EBF\u7A0B\u6570 +# spring.datasource.min-idle = 50 + +# #\u521D\u59CB\u5316\u8FDE\u63A5\u6C60\u5927\u5C0F +# spring.datasource.initial-size= 50 + +# #\u63A2\u6D3B\u3001\u9A8C\u8BC1\u8FDE\u63A5\u6709\u6548\u6027\u7684\u67E5\u8BE2 +# spring.datasource.validation-query=select 1 + +# #\u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4 +# spring.datasource.max-wait=600000 + +# #\u914D\u7F6E\u4E00\u4E2A\u94FE\u63A5\u5728\u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4 +# spring.datasource.minEvictableIdleTimeMillis=600000 + +# #\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u8FDE\u63A5\u6C60\u4E2D\u6700\u5927\u7684\u751F\u5B58\u65F6\u95F4\uFF0C\u8D85\u8FC7\u6700\u5927\u751F\u5B58\u65F6\u95F4\u4F1A\u88AB\u79FB\u9664\uFF0C\u5355\u4F4D\u6BEB\u79D2 +# spring.datasource.maxEvictableIdleTimeMillis = 1800000 + +# #\u914D\u7F6E\u95F4\u9694\u591A\u4E45\u83DC\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u6BEB\u79D2\u3002\u592A\u957F\u53EF\u80FD\u5BFC\u81F4\u65E0\u6CD5\u53CA\u65F6\u68C0\u6D4B\u5230\u8FDE\u63A5\u4E2D\u65AD +# spring.datasource.timeBetweenEvictionRunsMillis = 30000 + +# #\u914D\u7F6E\u4ECE\u8FDE\u63A5\u6C60\u83B7\u53D6\u8FDE\u63A5\u65F6\uFF0C\u5F53\u8FDE\u63A5\u7A7A\u95F2\u65F6\u95F4\u5927\u4E8EtimeBetweenEvictionRunsMillis\u65F6\uFF0C\u662F\u5426\u68C0\u67E5\u94FE\u63A5\u6709\u6548\u6027\uFF0Ctrue\u6BCF\u6B21\u90FD\u68C0\u67E5\uFF0Cfalse\u4E0D\u68C0\u67E5 +# spring.datasource.testWhileIdle = false + +# #\u914D\u7F6E\u4ECE\u8FDE\u63A5\u6C60\u83B7\u53D6\u8FDE\u63A5\u65F6\u548C\u5411\u8FDE\u63A5\u6C60\u89C4\u8303\u8FDE\u63A5\u65F6\uFF0C\u662F\u5426\u68C0\u67E5\u94FE\u63A5\u6709\u6548\u6027 +# #\u6BCF\u6B21\u83B7\u53D6\u6216\u5F52\u8FD8\u8FDE\u63A5\u90FD\u68C0\u6D4B\u592A\u9891\u7E41\uFF0C\u9664\u975E\u7279\u522B\u91CD\u8981\u6216\u7F51\u7EDC\u7279\u522B\u4E0D\u53EF\u9760\u7B49\u60C5\u51B5\uFF0C\u5EFA\u8BAE\u7528testWhileIdle + timeBetweenEvictionRunsMillis\u4EE3\u66FF +# spring.datasource.testOnBorrow = false +# spring.datasource.testOnReturn = false + +# #\u914D\u7F6E\u662F\u5426\u5B9A\u671F\u63A2\u6D3B +# spring.datasource.keepAlive = true +# #\u914D\u7F6E\u63A2\u6D3B\u95F4\u9694 +# spring.datasource.keepAliveBetweenTimeMillis=120000 + + +############################????####################################### +###spring.shardingsphere.datasource.names=master,slave +spring.shardingsphere.datasource.names=master,slave +##?? +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=@E#e7@saWE!293??||367 + +spring.shardingsphere.datasource.master.maximum-pool-size=200 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + + +##?? +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=@E#e7@saWE!293??||367 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + +##?????? +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave +#??datasource ???????????????? +#??? gg +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#??????????sql?? +spring.shardingsphere.props.sql.show = false + +spring.shardingsphere.props.max.connections.size.per.query = 10 +#\u5355\u6570\u636E\u6E90\u914D\u7F6E +impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.write.datasource.jdbc-url=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrie +impp.write.datasource.username=root +impp.write.datasource.password=@E#e7@saWE!293??||367 +impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.read.datasource.jdbc-url=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieva +impp.read.datasource.username=root +impp.read.datasource.password=@E#e7@saWE!293??||367 + +# #\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u7684\u6700\u5927\u4F7F\u7528\u6B21\u6570\uFF0C\u907F\u514D\u957F\u65F6\u95F4\u4F7F\u7528\u76F8\u540C\u94FE\u63A5\u9020\u6210\u670D\u52A1\u5668\u7AEF\u8D1F\u8F7D\u4E0D\u5747\u8861 +# spring.datasource.phyMaxUseCount = 1000 +impp.route.feign.name=jx From 66dcc038b2f967f04c7bf77d778e8f9a37409b25 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 17 Nov 2024 15:01:16 +0800 Subject: [PATCH 166/180] =?UTF-8?q?PTR=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 414 +++++++++++---------- 1 file changed, 215 insertions(+), 199 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 057508c..ca6deea 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -87,12 +87,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { @Transactional(propagation = Propagation.REQUIRES_NEW) - public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { + public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { //判断vin是否已经生成了S单,如果已经生成S单 则不再生成工单 String vinCode = sortInfo.getVinCode(); DdlPackBean existPackBean = DdlPackBean.getDdlPackBean(sortInfo.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(vinCode,"vinCode",existPackBean); + DdlPreparedPack.getStringEqualPack(vinCode, "vinCode", existPackBean); // DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); List workOrderList = mesWorkOrderRao.findByHqlWhere(existPackBean); if (!workOrderList.isEmpty()) { @@ -118,9 +118,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); //根据产线查找区域代码 DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(),"workCenterCode", centerPackBean); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(), "workCenterCode", centerPackBean); List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); - if (!workCenterList.isEmpty()){ + if (!workCenterList.isEmpty()) { mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); } mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); @@ -150,7 +150,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date=new Date(); + Date date = new Date(); try { date = sdf.parse(sortInfo.getMatchTime()); } catch (ParseException e) { @@ -161,17 +161,17 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); - long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":","")); + long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":", "")); if (!shiftList.isEmpty()) { for (MesShift shift : shiftList) { long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); - if (startTime < endTime){ + if (startTime < endTime) { if (shiftTime >= startTime && shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); } - }else { + } else { if (shiftTime >= startTime || shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); @@ -204,9 +204,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * bom也需要根据生产零件号拆分 */ MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo()); - if (bom != null){ + if (bom != null) { mesWorkOrder.setBomCode(bom.getBomCode()); - }else { + } else { log.info("工厂:{},生产零件号:{}没有维护bom", organizeCode, mesPartProdGroupDetail.getProductPartNo()); return; } @@ -266,32 +266,32 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { Calendar custCalendar = Calendar.getInstance(); custCalendar.setTime(new Date()); - GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + GenSerialNoModel custGenSerialNoModel = new GenSerialNoModel("WH_CUST_SN_RULE"); String partNo = mesWorkOrder.getCustPartNo(); String prefix = partNo.substring(0, partNo.length() - 4); String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); - custGenSerialNoModel.setPartNo(prefix+partNo4); - String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setPartNo(prefix + partNo4); + String year = custCalendar.get(Calendar.YEAR) + ""; custGenSerialNoModel.setYear(year.substring(2)); - custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); + custGenSerialNoModel.setDay(String.format("%03d", custCalendar.get(Calendar.DAY_OF_YEAR))); List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% //截取替换为ascii码 String snOriginal = custNumRuleList.get(0); String[] split = snOriginal.split("%RS%"); StringBuilder rsStr = new StringBuilder(); - for (int i = 0; i < split.length-1; i++) { + for (int i = 0; i < split.length - 1; i++) { rsStr.append(split[i]).append((char) 30); } rsStr.append(split[split.length - 1]); StringBuilder gsStr = new StringBuilder(); String[] split1 = rsStr.toString().split("%GS%"); - for (int i = 0; i < split1.length-1; i++) { + for (int i = 0; i < split1.length - 1; i++) { gsStr.append(split1[i]).append((char) 29); } - gsStr.append(split1[split1.length-1]); + gsStr.append(split1[split1.length - 1]); String[] split2 = gsStr.toString().split("%EOT%"); - String sn = split2[0]+(char)4; + String sn = split2[0] + (char) 4; //保存条码 mesWorkOrder.setCustSn(sn); @@ -301,6 +301,18 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //打散bom使用生产零件号 workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); } + + /** + * 工单号修改 + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan = organizeCode + mesWorkOrder.getOrderFlag() + sortInfo.getCustOrderCode() + mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); + /** * 总成拆bom,变成子零件 * 替换子零件,通过替换后的零件,去找排序工艺 @@ -313,7 +325,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * isCustomerSendPrtInfo 1是客户发送ptr * isInterPrt 1是内部ptr */ - Map ptrRuleListMap = new HashMap<>(); +// Map ptrRuleListMap = new HashMap<>(); //是否修改为P单 boolean isModifyPOrder = false; boolean isFOrder = false; @@ -324,100 +336,112 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 * 3.有开始时间无结束时间,无结束数量 一直替换 */ - if (!workOrderPartList.isEmpty()){ - Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); - //先替换客户的ptr信息 - String ptrInfo = mesWorkOrder.getPtrInfo(); - if (StringUtils.isNotBlank(ptrInfo)) { - List ptrInfoList = Arrays.asList(ptrInfo.replaceAll("_", "").split("\\|")); - if (!ptrInfoList.isEmpty()){ - List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); - long count = custPartPtrList.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); - if (count > 0){ - for (MesPartPtr mesPartPtr : custPartPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); - if (orderPart != null) { - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - if (!isModifyPOrder){ - isModifyPOrder = true; - } - } - } - } - } - } + /** + * 2024/11/16 + * PTR 分三种场景 --- mes_part_ptr + * 1.基于排序加工规则 mes_part_ptr 中 create_by_assembly_setting 1 true --暂时没有使用 + * 替换零件及替换装配工位 + * + * 2.不基于排序加工规则 2 false + * 替换的零件装配工位不变,只改变零件信息 + * + * 3.是否客户发送 is_cust_send_info is_customer_send_prt_info = 1 true + * 遇到就替换,不用管ptrPart的总成 + */ + //是否基于排序加工规则 + // boolean isCreateByAssemblySetting=false; + + //客户ptr信息 + StringBuilder ptrInfos = new StringBuilder(); + String ptrInfo = mesWorkOrder.getPtrInfo(); + List custPtrPartList = Arrays.asList(ptrInfo.split("\\|")); + boolean ptrFlag = false; + boolean fOrderFlag = false; + if (!workOrderPartList.isEmpty()) { + //是否基于排序加工规则--待定 + //查询装配目视项 + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + //ptr信息 List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); - //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 - List fPartPtrPartList = partPtrList.stream().filter(item -> item.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).map(MesPartPtr::getSrcPartNo).collect(Collectors.toList()); - - for (MesPartPtr mesPartPtr : partPtrList) { - //查询ptr总成--只有特定总成才会替换 - DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",detailPartPtr); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",detailPartPtr); - List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); - if (!ptrDetailList.isEmpty()){ - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - String srcPartNo = mesPartPtr.getSrcPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); - if (orderPart != null) { - MesPartPtrDetail mesPartPtrDetail = ptrDetailList.get(0); - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); - if (!isModifyPOrder){ - isModifyPOrder = true; - } - if (fPartPtrPartList.contains(mesPartPtr.getSrcPartNo())){ - isFOrder = true; + //遍历workOrderPartList + for (MesWorkOrderPart orderPart : workOrderPartList) { + List ptr = partPtrList.stream().filter(item -> item.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); + if (ptr.isEmpty()) { + continue; + } + //判断是否是客户替换 + boolean isCust = false; + for (MesPartPtr mesPartPtr : ptr) { + if (custPtrPartList.contains(mesPartPtr.getSrcPartNo())) { + isCust = true; + break; + } + } + MesPartPtr mesPartPtr = null; + MesPartPtrDetail mesPartPtrDetail = null; + if (isCust) { + //查找客户发送的ptr信息 + List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && custPtrPartList.contains(item.getSrcPartNo())).collect(Collectors.toList()); + if (!custPartPtrList.isEmpty()) { + mesPartPtr = custPartPtrList.get(0); + } + } else { + //获取相同总成的ptrId 在ptr详情中 + List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == null || item.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList()); + if (!custPtrPartList.isEmpty()) { + mesPartPtr = custPartPtrList.get(0); + //查询ptr总成--只有特定总成才会替换 + DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(), "ptrId", detailPartPtr); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "totalPartNo", detailPartPtr); + List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); + if (!ptrDetailList.isEmpty()) { + mesPartPtrDetail = ptrDetailList.get(0); } - mesWorkOrder.setRemark(mesPartPtr.getRemark()); - String ptrInfoStr = "INFO"+mesPartPtr.getId()+"|PART"+mesPartPtrDetail.getId(); - mesWorkOrder.setPtrInfo(ptrInfoStr); - //更新mes_part_ptr的实际数量 + 1 - mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); - ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); - partPtrRao.update(mesPartPtr); - mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); - ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); - partPtrDetailRao.update(mesPartPtrDetail); - //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } - } - } - // 生成装配件清单 - if (!isFOrder){ - if (isModifyPOrder){ - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); - }else { - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + if (!isCust && mesPartPtrDetail == null) { + continue; + } + + ptrFlag = true; + if (!isCust && mesPartPtr.getIsInterPrt()==CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){ + fOrderFlag = true; + } + //将工单类零件表替换位PTR条件中维护的替换零件 + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), organizeCode); + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr, "JOB"); + partPtrRao.update(mesPartPtr); + if (mesPartPtrDetail != null) { + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail, "JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + List orderAssemblyList = assemblyList.stream().filter(item -> item.getAssemblyPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); + MesWorkOrderAssembly orderAssembly = orderAssemblyList.get(0); + orderAssembly.setAssemblyPartNo(mesPartSap.getPartNo()); + orderAssembly.setAssemblyPartName(mesPartSap.getPartName()); + orderAssembly.setMatchRule(mesPartPtr.getReplacePartSnRule()); + ptrInfos.append("INFO|").append(mesPartPtr.getId()); + if (mesPartPtrDetail != null) { + ptrInfos.append("PART|").append(mesPartPtrDetail.getId()); + } } - }else { + + } + if (ptrFlag && !fOrderFlag){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else if (ptrFlag){ mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } - /** - * 工单号修改 - * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} - * 工厂代码+工单类型 +客户工厂代码+班次+流水号 - */ - GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); - String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; - mesWorkOrder.setWorkOrderNo(orderNoWuHan); List assemblyList = new ArrayList<>(); if (!workOrderPartList.isEmpty()) { for (MesWorkOrderPart orderPart : workOrderPartList) { @@ -426,101 +450,83 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); } workOrderPartRao.saveAll(workOrderPartList); - assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); - } -// /** -// * 生产序号 -// * 工厂-产线-9位流水号,跳号10 -// */ -// GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); -// prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); -// List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); -// String proSeqStr = proSeqResultList.get(0); - mesWorkOrder.setProductSeq(productSeq); - - mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); - ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); - mesWorkOrderRao.insert(mesWorkOrder); - - /** - * 插入工单打印队列数据 - */ - mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); - if (!assemblyList.isEmpty()) { - for (MesWorkOrderAssembly orderAssembly : assemblyList) { - if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ - orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + mesWorkOrder.setProductSeq(productSeq); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); + mesWorkOrderRao.insert(mesWorkOrder); + /** + * 插入工单打印队列数据 + */ + mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); + if (!assemblyList.isEmpty()) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + orderAssembly.setPartNo(mesWorkOrder.getPartNo()); + orderAssembly.setPartName(mesWorkOrder.getPartName()); + orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(organizeCode); + orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); } - orderAssembly.setPartNo(mesWorkOrder.getPartNo()); - orderAssembly.setPartName(mesWorkOrder.getPartName()); - orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); - orderAssembly.setOrganizeCode(organizeCode); - orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); - orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); - ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); - } - workOrderAssemblyRao.saveAll(assemblyList); - - List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); - Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); - for (String cellCode : cellCodeList) { - MesQueueOrder mesQueueOrder = new MesQueueOrder(); - mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); - mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setOrganizeCode(organizeCode); - mesQueueOrder.setWorkCellCode(cellCode); - mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); - mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); - mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); - mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); - mesQueueOrder.setPartName(mesWorkOrder.getPartName()); - mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); - mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); - mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); - mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); - mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); - mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); - mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); - mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); - mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); - ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); - queueOrderRao.insert(mesQueueOrder); + workOrderAssemblyRao.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setOrganizeCode(organizeCode); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); + mesQueueOrder.setPartName(mesWorkOrder.getPartName()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); + mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); + mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); + ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); + queueOrderRao.insert(mesQueueOrder); + } + } + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(organizeCode); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); + mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); + mesProduceSn.setPartName(mesWorkOrder.getPartName()); + mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); + mesProduceSnRao.insert(mesProduceSn); } - - //生成条码表 - MesProduceSn mesProduceSn = new MesProduceSn(); - mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); - mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setOrganizeCode(organizeCode); - mesProduceSn.setFid(UUID.randomUUID().toString()); - mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); - mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); - mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); - mesProduceSn.setPartName(mesWorkOrder.getPartName()); - mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); - mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); - mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - mesProduceSn.setQty(1.0); - mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); - mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); - mesProduceSn.setFid(UUID.randomUUID().toString()); - mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); - ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); - mesProduceSnRao.insert(mesProduceSn); - - - } - private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 @@ -569,7 +575,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { // orderAssembly.setPartNo(orderPart.getPartNo()); // orderAssembly.setPartName(orderPart.getPartName()); orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); - orderAssembly.setOrderPartId(orderPart.getId().toString()); +// orderAssembly.setOrderPartId(orderPart.getId().toString()); orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); orderAssembly.setReportType(sortCfg.getReportType()); if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ @@ -671,6 +677,19 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { return workOrderAssemblyList; } + private MesProdRuleSortCfg getSortRuleCfg (String organizeCode,String workCenterCode,String partNo ){ + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlTopWhere(prodRuleSortPackBean,1); + + if (sortCfgList != null && !sortCfgList.isEmpty()){ + return sortCfgList.get(0); + } + return null; + } private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { List orderPartList = new ArrayList<>(); @@ -764,6 +783,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); } + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { /** * 2024/11/16 @@ -777,10 +797,6 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); - DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); - DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); - DdlPreparedPack.getIsNotNull("endTime", partPtrPackBean); - /** * 有开始时间 和 无结束时间 和 需要的数量,只有达到数量才结束 */ From e1e8106db747f14eb9ed49d4faa85b2921447725 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 17 Nov 2024 19:34:47 +0800 Subject: [PATCH 167/180] =?UTF-8?q?PTR=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedulejob/MesCreatePullOrderOfflineJob.java | 2 +- .../MesCreateSortRuleCfgOfflineJob.java | 2 +- .../base/roundness/MesPackageRoundnessService.java | 2 +- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 54 +++++++++++++--------- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java index 7a94622..f9bfb14 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java @@ -44,7 +44,7 @@ public class MesCreatePullOrderOfflineJob extends BaseMesScheduleJob { @Override public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { - Map paramMap = (Map) JSONObject.parse(jobParam); + Map paramMap = (Map) JSONObject.parse(this.getJobParam()); try { String organizeCode = (String) paramMap.get("organizeCode"); List pullCodeList = (List) paramMap.get("pullCodeList"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java index 77b3c64..fe6b06b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java @@ -46,7 +46,7 @@ public class MesCreateSortRuleCfgOfflineJob extends BaseMesScheduleJob { @Override public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { - Map paramMap = (Map) JSONObject.parse(jobParam); + Map paramMap = (Map) JSONObject.parse(this.getJobParam()); try { String organizeCode = (String) paramMap.get("organizeCode"); List groupCodeList = (List) paramMap.get("partProdCodeList"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index 29044cd..846a005 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -196,7 +196,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return; } - mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo,productSeq); + mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo,productSeq); // doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); qty -= custQty; sortInfoList.remove(sortInfo); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index ca6deea..697745e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -302,16 +302,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); } - /** - * 工单号修改 - * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} - * 工厂代码+工单类型 +客户工厂代码+班次+流水号 - */ - GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); - String orderNoWuHan = organizeCode + mesWorkOrder.getOrderFlag() + sortInfo.getCustOrderCode() + mesWorkOrder.getShiftCode() + serialNo; - mesWorkOrder.setWorkOrderNo(orderNoWuHan); + /** * 总成拆bom,变成子零件 @@ -357,14 +348,16 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List custPtrPartList = Arrays.asList(ptrInfo.split("\\|")); boolean ptrFlag = false; boolean fOrderFlag = false; + List assemblyList = new ArrayList<>(); if (!workOrderPartList.isEmpty()) { //是否基于排序加工规则--待定 //查询装配目视项 - List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); //ptr信息 List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); //遍历workOrderPartList + for (MesWorkOrderPart orderPart : workOrderPartList) { List ptr = partPtrList.stream().filter(item -> item.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); if (ptr.isEmpty()) { @@ -378,8 +371,10 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { break; } } + MesPartPtr mesPartPtr = null; MesPartPtrDetail mesPartPtrDetail = null; + if (isCust) { //查找客户发送的ptr信息 List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && custPtrPartList.contains(item.getSrcPartNo())).collect(Collectors.toList()); @@ -389,7 +384,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { } else { //获取相同总成的ptrId 在ptr详情中 List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == null || item.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList()); - if (!custPtrPartList.isEmpty()) { + if (!custPartPtrList.isEmpty()) { mesPartPtr = custPartPtrList.get(0); //查询ptr总成--只有特定总成才会替换 DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); @@ -423,15 +418,22 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { ConvertBean.saveOrUpdate(mesPartPtrDetail, "JOB"); partPtrDetailRao.update(mesPartPtrDetail); } - List orderAssemblyList = assemblyList.stream().filter(item -> item.getAssemblyPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); - MesWorkOrderAssembly orderAssembly = orderAssemblyList.get(0); - orderAssembly.setAssemblyPartNo(mesPartSap.getPartNo()); - orderAssembly.setAssemblyPartName(mesPartSap.getPartName()); - orderAssembly.setMatchRule(mesPartPtr.getReplacePartSnRule()); - ptrInfos.append("INFO|").append(mesPartPtr.getId()); - if (mesPartPtrDetail != null) { - ptrInfos.append("PART|").append(mesPartPtrDetail.getId()); + MesWorkOrderAssembly orderAssemblyList = null; + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + String assemblyPartNo = orderAssembly.getAssemblyPartNo(); + if (StringUtils.isNotBlank(assemblyPartNo) && assemblyPartNo.equals(mesPartPtr.getSrcPartNo())){ + orderAssemblyList = orderAssembly; + } } + if (!Objects.isNull(orderAssemblyList)){ + orderAssemblyList.setAssemblyPartNo(mesPartSap.getPartNo()); + orderAssemblyList.setAssemblyPartName(mesPartSap.getPartName()); + orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule()); + ptrInfos.append("INFO|").append(mesPartPtr.getId()); + if (mesPartPtrDetail != null) { + ptrInfos.append("PART|").append(mesPartPtrDetail.getId()); + } + } } } @@ -442,7 +444,17 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { }else { mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } - List assemblyList = new ArrayList<>(); + /** + * 工单号修改 + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan = organizeCode + mesWorkOrder.getOrderFlag() + sortInfo.getCustOrderCode() + mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); + if (!workOrderPartList.isEmpty()) { for (MesWorkOrderPart orderPart : workOrderPartList) { orderPart.setOrganizeCode(organizeCode); From 1a86c4d7b0dfe5dfc8724b7ad360ab63492a5adb Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 17 Nov 2024 20:03:16 +0800 Subject: [PATCH 168/180] =?UTF-8?q?=E7=9B=AE=E8=A7=86=E5=8D=95=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 697745e..8fef368 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -339,6 +339,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * 3.是否客户发送 is_cust_send_info is_customer_send_prt_info = 1 true * 遇到就替换,不用管ptrPart的总成 */ + //打印目视单使用 + StringBuilder descriptionStr = new StringBuilder(); + //是否基于排序加工规则 // boolean isCreateByAssemblySetting=false; @@ -409,6 +412,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), organizeCode); orderPart.setPartNo(mesPartSap.getPartNo()); orderPart.setPartName(mesPartSap.getPartName()); + //用于打印目视单 + descriptionStr.append(mesPartPtr.getMemo()); //更新mes_part_ptr的实际数量 + 1 mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); ConvertBean.saveOrUpdate(mesPartPtr, "JOB"); @@ -444,6 +449,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { }else { mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } + mesWorkOrder.setDescription(descriptionStr.toString()); /** * 工单号修改 * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} From f95006915ef8ee8e986872ee315f2a423387bebf Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 18 Nov 2024 10:20:46 +0800 Subject: [PATCH 169/180] =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesEarlyWarningServiceImpl.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index bd9347f..1978b49 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -135,7 +135,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); //5.获取最新下线工单 MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); - + if (lastWorkOrder == null && lastOfflineOrder != null){ + lastWorkOrder = lastOfflineOrder; + } //6.查询报警产量 & 获取开班起始时间 Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @@ -260,10 +262,13 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //先查对列表,找到对应产线工位的工单 List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,1); //过滤掉关闭和拆解的工单 + List orderStatusList1 = new ArrayList<>(); + orderStatusList1.add(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + orderStatusList1.add(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),"workOrderStatus",orderPackBean); + DdlPreparedPack.getInPackList(orderStatusList1,"workOrderStatus",orderPackBean); DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), orderPackBean); List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); return !workOrderList.isEmpty() ? workOrderList.get(0) : null; @@ -414,9 +419,12 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { long summaryRealSupplyRealCount; String custOrderNo = workOrder.getCustOrderNo(); if(custOrderNo.length() >= 10){ - summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrder.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrder.getCustOrderNo().length() - 7)); }else { - summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)); + } + if(summaryRealSupplyRealCount < 0){ + summaryRealSupplyRealCount = 0; } mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); Long summaryWorkOrderYellowCount = kanBan.getSummaryWorkOrderYellowCount(); @@ -432,9 +440,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //成品实际缓冲 Long realProductionBuffer; if (workOrderLast.getCustOrderNo().length() >= 10){ - realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) - kanBan.getOnlineToShippingAdjustNum(); + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) ; }else { - realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineToShippingAdjustNum(); + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) ; } if(realProductionBuffer <0){ From ab3151da6fae8c4b525535e091e5ba8269532cae Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 18 Nov 2024 14:47:31 +0800 Subject: [PATCH 170/180] =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=8F=8A=E7=9B=AE=E8=A7=86=E5=8D=95=E6=89=93=E5=8D=B0=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 2 +- .../apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java | 8 ++++---- .../print/strategy/AssemblyVisualListPrintStrategy.java | 5 ++++- .../java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java | 4 ++++ 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index b417cce..3f9db0c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1799,7 +1799,7 @@ public class MesWorkOrderService extends BaseMesService implements bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); - + bean.setPullingStatus(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.NOTCREATE.getValue()); baseRDao.insert(bean); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 1978b49..7717cb1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -440,9 +440,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //成品实际缓冲 Long realProductionBuffer; if (workOrderLast.getCustOrderNo().length() >= 10){ - realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) ; + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) - kanBan.getOnlineAdjustNum() ; }else { - realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) ; + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineAdjustNum() ; } if(realProductionBuffer <0){ @@ -450,9 +450,9 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); - if (realProductionBuffer < productionYellowBuffer){ + if (realProductionBuffer < productionRedBuffer){ mesKanBanShowModel.setRealProductionBufferColor("RED"); - }else if (realProductionBuffer < productionRedBuffer){ + }else if (realProductionBuffer < productionYellowBuffer){ mesKanBanShowModel.setRealProductionBufferColor("YELLOW"); } //声音信息 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index 5ddaa24..2fba1a8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -69,10 +69,13 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 重打印 resultMap.put(MesExtConstWords.REPRINT, "重打印"); // 打印时间 - resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyyMMdd HH:mm:ss")); + resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss")); // EDI接口时间 取工单plan_start_time resultMap.put(MesExtConstWords.EDI_REC_TIME, workOrder.getPlanStartTime()); + //替换总成SN + resultMap.put(MesExtConstWords.REPLACE_CSN,MesExtConstWords.CP+workOrder.getCustPartNo().substring(workOrder.getCustPartNo().length() -4)); + // 总个数 Integer totalCount = partProdGroup.getTotalCount(); // 为空时显示内容 diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index a741970..a8431f6 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -333,6 +333,10 @@ public class MesExtConstWords { public static final String PART_PROD_GROUP_CODE = "partProdGroupCode"; + //客户零件号后4位置 + public static final String REPLACE_CSN = "replaceCsn"; + + public static final String CP = "CP"; /** * 系统参数 */ From 66db54816cc4fd31db5693d819aee4d3756a56be Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 18 Nov 2024 18:49:56 +0800 Subject: [PATCH 171/180] =?UTF-8?q?=E7=9B=AE=E8=A7=86=E5=8D=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=BD=A6=E5=9E=8B=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 8fef368..f0136f8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -85,6 +85,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { @Autowired private MesPartPtrDetailRepository partPtrDetailRao; + @Autowired + private MesCustomerCarModelRepository mesCustomerCarModelRepository; + @Transactional(propagation = Propagation.REQUIRES_NEW) public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { @@ -449,7 +452,11 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { }else { mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } - mesWorkOrder.setDescription(descriptionStr.toString()); + + //获取车型remark用于目视单打印 + String remark = getCarRemark(partProdGroup.getCustCode(),mesWorkOrder.getCarModelCode(),partProdGroup.getOrganizeCode()); + mesWorkOrder.setDescription(descriptionStr.append(remark).toString()); + /** * 工单号修改 * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} @@ -545,6 +552,17 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { mesProduceSnRao.insert(mesProduceSn); } } + + private String getCarRemark(String custCode,String carModelCode,String organizeCode){ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custCode,"custCode",ddlPackBean); + DdlPreparedPack.getStringEqualPack(carModelCode,"carModelCode",ddlPackBean); + List carModelList = mesCustomerCarModelRepository.findByHqlTopWhere(ddlPackBean, 1); + if (carModelList != null && !carModelList.isEmpty()){ + return carModelList.get(0).getRemark(); + } + return ""; + } private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 From e077cdb0e5d49a9adc219aa009785b1235bd77a6 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 18 Nov 2024 18:52:14 +0800 Subject: [PATCH 172/180] =?UTF-8?q?=E7=9B=AE=E8=A7=86=E5=8D=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=BD=A6=E5=9E=8B=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index 2fba1a8..1996dac 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -65,7 +65,7 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 客户条码 resultMap.put(MesExtConstWords.SN, workOrder.getCustSn()); // 备注 - resultMap.put(MesExtConstWords.REMARK, customerCarModel == null ? "" : customerCarModel.getRemark()); + resultMap.put(MesExtConstWords.REMARK, workOrder.getDescription()); // 重打印 resultMap.put(MesExtConstWords.REPRINT, "重打印"); // 打印时间 From 91ba35debe868a1dadebdc0cbbbd2166e22ba98c Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 18 Nov 2024 19:28:13 +0800 Subject: [PATCH 173/180] =?UTF-8?q?BTO=E5=B7=A5=E5=8D=95=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 3f9db0c..40928c8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -2496,7 +2496,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", orderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); MesWorkOrder workOrder = baseRDao.getByProperty(orderPackBean); - return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1)); + return Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0L : workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2L : workOrder.getProductSeq() + 1L; } private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) { From 78dfc1657f3b88234ee0e6e14a2e3b1f32829c2e Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 18 Nov 2024 20:10:27 +0800 Subject: [PATCH 174/180] =?UTF-8?q?=E7=9B=AE=E8=A7=86=E5=8D=95PTR=E8=BD=AC?= =?UTF-8?q?P?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index 1996dac..8d85ef2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -57,7 +58,7 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 总成零件号 resultMap.put(MesExtConstWords.PART_NO, workOrder.getPartNo()); // 工单标识 - resultMap.put(MesExtConstWords.ORDER_FLAG, workOrder.getOrderFlag()); + resultMap.put(MesExtConstWords.ORDER_FLAG, workOrder.getOrderFlag().equals(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()) ? MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue() : workOrder.getOrderFlag()); // 客户订单号 resultMap.put(MesExtConstWords.CUST_ORDER_NO, workOrder.getCustOrderNo()); // 客户零件号 From eac136850fd771f94398868e8159ae8fe44c705a Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 18 Nov 2024 22:43:00 +0800 Subject: [PATCH 175/180] =?UTF-8?q?=E6=AD=A6=E6=B1=89CBR=E8=B4=9F=E6=8A=A5?= =?UTF-8?q?=E5=B7=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mes2Pisces/MesToPiscesMesJisShippingWh.groovy | 46 ++++++++++++++++++++++ .../serviceimpl/base/MesWorkOrderService.java | 27 +++++++------ 2 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy new file mode 100644 index 0000000..4a8363b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy @@ -0,0 +1,46 @@ +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService +import cn.estsh.i3plus.platform.common.tool.TimeTool +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired + +/** + * @Description : MES2PISCES-发运单武汉工厂 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/18 20:37 + * @Modify: + * */ +class MesToPiscesMesJisShippingWh { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesToPiscesMesJisShippingWh.class) + + @Autowired + private ISyncFuncService syncFuncService; + + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { + if (srcData == null || srcData.size() == 0) { + return srcData + } + String organizeCode = mapper.getOrganizeCode(); + //TRANS_ID赋值 + if (mapper.getDestColumnMapping().contains("TRANS_ID")) { + Date date = new Date(); + GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel("COKIPIT_PISCES_TRANS_ID"); + orderSeqSerialNoModel.setYear(MesExtEnumUtil.YEAR_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getYear(date)))) + orderSeqSerialNoModel.setMonth(MesExtEnumUtil.MONTH_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getMonth(date)))) + orderSeqSerialNoModel.setDay(TimeTool.getDay(date)) + List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(organizeCode), "MES2PISCES发运单", organizeCode, srcData.size()).getResultList(); + int index = 0; + for (Map rowMap : srcData) { + rowMap.put("TRANS_ID", resultList.get(index)); + index++; + } + } + return new ArrayList<>(srcData); + } + +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 40928c8..58b16a0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1151,7 +1151,7 @@ public class MesWorkOrderService extends BaseMesService implements //按照条码查询之前报工数据 mesProductOffLineList.addAll(getMesProductOffLineList(model, nowTime)); } - mesProductOffLineService.insertBatch(mesProductOffLineList); + mesProductOffLineRDao.saveAll(mesProductOffLineList); } @Override @@ -1354,19 +1354,22 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn()); } //oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode()); + List newProductOffLineList = new ArrayList<>(oldProductOffLineList.size()); oldProductOffLineList.forEach(item -> { - item.setId(null); - item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); - item.setOrderNo(model.getShipOrderNo()); - item.setCustNo(model.getCustNo()); - item.setCustOrder(model.getCustOrderNo()); - item.setDescription(nowTime); - item.setStgeLoc(item.getAlort()); - item.setSystemSyncStatus(CommonEnumUtil.FALSE); - item.setSystemSyncDatetime(""); - ConvertBean.serviceModelInitialize(item, model.getUserName()); + MesProductOffLine mesProductOffLine = new MesProductOffLine(); + BeanUtils.copyProperties(item, mesProductOffLine, MesExtConstWords.ID); + mesProductOffLine.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); + mesProductOffLine.setOrderNo(model.getShipOrderNo()); + mesProductOffLine.setCustNo(model.getCustNo()); + mesProductOffLine.setCustOrder(model.getCustOrderNo()); + mesProductOffLine.setDescription(nowTime); + mesProductOffLine.setStgeLoc(item.getAlort()); + mesProductOffLine.setSystemSyncStatus(CommonEnumUtil.FALSE); + mesProductOffLine.setSystemSyncDatetime(""); + ConvertBean.serviceModelInitialize(mesProductOffLine, model.getUserName()); + newProductOffLineList.add(mesProductOffLine); }); - return oldProductOffLineList; + return newProductOffLineList; } private List getMesWorkOrderList(Long[] ids, String organizeCode) { From 9a9799a1c64f045382f0bfb8916139ca8fea0edb Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 19 Nov 2024 09:50:02 +0800 Subject: [PATCH 176/180] =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BA=A7=E9=87=8F=E8=AE=A1=E7=AE=97=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 7717cb1..556b1ef 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -147,7 +147,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { Date shiftStartTime = sdf1.parse(tempStartDatetime); //如果小于当前时间,显示前一天的统计 Calendar calendar = Calendar.getInstance(); - if (shiftStartTime.before(now)) { + if (now.before(shiftStartTime)) { calendar.setTime(now); calendar.add(Calendar.DATE, -1); } else { From 05a1f10218dc959691cabc4b51f320b34a610b1a Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 20 Nov 2024 09:33:35 +0800 Subject: [PATCH 177/180] =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=97=B6=E9=97=B4=E6=9D=A1=E4=BB=B6=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesShippingOrderManagementService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index 9e6829f..ea22990 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -77,7 +77,7 @@ public class MesShippingOrderManagementService extends BaseMesService Date: Wed, 20 Nov 2024 10:46:40 +0800 Subject: [PATCH 178/180] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy index 98de858..9f9e46e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy @@ -47,10 +47,11 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesProduceSn)) { rowMap.put("ASSEMBLY_BARCODE_ID", mesProduceSn.getId()) } else { + rowMap.put("ASSEMBLY_BARCODE_ID", 0) LOGGER.info("条码:{}信息不存在", String.valueOf(rowMap.get("assembly_sn"))) } }else{ - rowMap.put("ASSEMBLY_BARCODE_ID", null) + rowMap.put("ASSEMBLY_BARCODE_ID", 0) } //条码 if (!StringUtils.isEmpty(rowMap.get("product_sn"))) { @@ -58,10 +59,11 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesProduceSn)) { rowMap.put("BARCODE_ID", mesProduceSn.getId()) } else { + rowMap.put("BARCODE_ID", 0) LOGGER.info("条码:{}信息不存在", String.valueOf(rowMap.get("product_sn"))) } }else{ - rowMap.put("BARCODE_ID", null) + rowMap.put("BARCODE_ID", 0) } //加工记录表 if (!StringUtils.isEmpty(rowMap.get("production_record_id"))) { @@ -75,6 +77,7 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesProductionRecord)) { rowMap.put("PRODUCTION_LOG_FID", mesProductionRecord.getFid()) } else { + rowMap.put("PRODUCTION_LOG_FID", null) LOGGER.info("加工记录id:{},信息不存在", String.valueOf(rowMap.get("production_record_id"))) } }else{ @@ -86,6 +89,7 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesEquipment)) { rowMap.put("EQUIPMENT_FID", mesEquipment.getFid()) } else { + rowMap.put("EQUIPMENT_FID", null) LOGGER.info("设备代码:{}信息不存在", String.valueOf(rowMap.get("equipment_code"))) } }else{ From 0c2edd3b55840ca624dfc80dbffbd9127edd8eed Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 20 Nov 2024 11:34:33 +0800 Subject: [PATCH 179/180] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 58b16a0..7054366 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -296,9 +296,9 @@ public class MesWorkOrderService extends BaseMesService implements if (CollectionUtils.isEmpty(mesWorkCenterList)) { return; } - Map mesWorkCenterMap = mesWorkCenterList.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName)); + Map> mesWorkCenterMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); mesWorkOrderList.forEach(t -> { - t.setWorkCenterName(mesWorkCenterMap.get(t.getWorkCenterCode())); + t.setWorkCenterName(mesWorkCenterMap.containsKey(t.getWorkCenterCode()) ? mesWorkCenterMap.get(t.getWorkCenterCode()).iterator().next().getWorkCenterName() : ""); }); } From 188284ab6963b7be06348ee653eb6fa622e8489f Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 21 Nov 2024 16:09:04 +0800 Subject: [PATCH 180/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0http=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20pcn=E8=B0=83=E7=94=A8=20=E7=94=A8=E4=BA=8E=E5=B0=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=87=AA=E5=8A=A8=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=88=B0=E5=B7=A5=E4=BD=8D=E6=8C=89=E9=92=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/busi/IProdExtOrgService.java | 8 ++++++++ .../controller/base/ExtProdOrgController.java | 21 ++++++++++++++++++++- .../serviceimpl/busi/ProdExtOrgService.java | 14 +++++++++++--- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java index b3dea35..9a234c5 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java @@ -256,6 +256,14 @@ public interface IProdExtOrgService { @ApiOperation(value = "更新工位参数配置状态(启用、禁用)") int updateMesWorkCellParamCfgStatusById(Long id, int status, String userName); + /** + * 根据配置新增工位按钮 + * @param organizeCode + * @param id + */ + @ApiOperation(value = "新增工位按钮") + void insertWorkCellModuleByCfg(String organizeCode, String id); + /*************MES工位参数配置服务*****end***********/ } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java index 4ef7d1b..8453c29 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.api.busi.IEquipmentExtService; import cn.estsh.i3plus.ext.mes.api.busi.IProdExtOrgService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.apiservice.util.MesCommConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -16,7 +17,10 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesArea; +import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.ProdOrgExtModel; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -30,9 +34,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** * @Description: @@ -388,4 +394,17 @@ public class ExtProdOrgController extends MesBaseController { } } + @PostMapping(value = "/work-cell-module/by-cfg/inset") + @ApiOperation(value = "根据配置新增工位按钮") + public ResultBean insertWorkCellModuleByCfg(@RequestBody Map params) { + try { + if (!CollectionUtils.isEmpty(params)) prodOrgService.insertWorkCellModuleByCfg((String) params.get(MesExtConstWords.ORGANIZE_CODE), (String) params.get(MesExtConstWords.ID)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java index 9711233..e9c4896 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java @@ -192,7 +192,7 @@ public class ProdExtOrgService implements IProdExtOrgService { .build(); } workCell.setGrade(prodOrgModel.getGrade()); - insertWorkCellModule(workCell); + insertWorkCellModuleByCfg(workCell, workCell.getModifyUser()); return workCellRepository.insert(workCell); } return null; @@ -406,7 +406,7 @@ public class ProdExtOrgService implements IProdExtOrgService { ConvertBean.serviceModelUpdate(workCell, AuthUtil.getSessionUser().getUserName()); - insertWorkCellModule(workCell); + insertWorkCellModuleByCfg(workCell, workCell.getModifyUser()); return workCellRepository.save(workCell); } @@ -595,7 +595,14 @@ public class ProdExtOrgService implements IProdExtOrgService { new Object[]{status, userName, TimeTool.getNowTime(true)}); } - private void insertWorkCellModule(MesWorkCell workCell) { + @Override + public void insertWorkCellModuleByCfg(String organizeCode, String id) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return; + insertWorkCellModuleByCfg(workCellRepository.getById(Long.valueOf(id)), "系统"); + } + + private void insertWorkCellModuleByCfg(MesWorkCell workCell, String userInfo) { + if (null == workCell) return; if (StringUtils.isEmpty(workCell.getGrade()) || workCell.getGrade().compareTo(MesExtEnumUtil.WORK_CELL_GRADE.SCAN.getValue()) != 0) return; List workCellModuleList = getWorkCellModuleButtonList(workCell.getOrganizeCode(), workCell.getWorkCenterCode(), workCell.getWorkCellCode()); if (!CollectionUtils.isEmpty(workCellModuleList)) return; @@ -606,6 +613,7 @@ public class ProdExtOrgService implements IProdExtOrgService { MesWorkCellModule workCellModule = new MesWorkCellModule(); BeanUtils.copyProperties(workCell, workCellModule, MesExtConstWords.ID); workCellModule.setModuleCode(workModule.getModuleCode()); + ConvertBean.serviceModelInitialize(workCellModule, userInfo); workCellModuleRepository.insert(workCellModule); } }