diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesMoveRuleService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesMoveRuleService.java new file mode 100644 index 0000000..a05360a --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesMoveRuleService.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesMoveRule; + +import java.util.List; + +/** + * @Description : 移库规则 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/5 9:06 + * @Modify: + **/ +public interface IMesMoveRuleService extends IBaseMesService { + + List findMesMoveRuleByPartProdGroupCode(String partProdGroupCode,String organizeCode); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartSapService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartSapService.java index 1852f35..43828ee 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartSapService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartSapService.java @@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -10,4 +12,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; public interface IMesPartSapService extends IBaseMesService { MesPartSap getMesPartSapByPartNo(String partNo, String organizeCode); + + List findMesPartSapByPartNoList(List partNoList, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartService.java index 2b264c7..66fc186 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartService.java @@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -11,5 +13,5 @@ public interface IMesPartService extends IBaseMesService { MesPart getPartByPartNo(String partNo, String organizeCode); - + List findMesPartByPartNoList(List partNoList, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleNosortCfgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleNosortCfgService.java index 1b392ae..34513b4 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleNosortCfgService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleNosortCfgService.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.MesProdRuleNosortCfg; /** @@ -10,5 +9,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; */ public interface IMesProdRuleNosortCfgService extends IBaseMesService { + MesProdRuleNosortCfg findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, 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 2d085d9..c50b811 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 @@ -13,6 +13,8 @@ public interface IMesWorkOrderService extends IBaseMesService { void doProductReport(MesWorkOrder mesWorkOrder); + void doProductReportExt(MesWorkOrder mesWorkOrder); + List sumMesWorkOrderQtyToSap(String organizeCode); List queryMesWorkOrderProcessToSap(String organizeCode); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMoveRuleController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMoveRuleController.java new file mode 100644 index 0000000..2060d03 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMoveRuleController.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.MesMoveRule; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 移库规则 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/5 9:06 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesMoveRule") +public class MesMoveRuleController 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 3562551..62e4b37 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 @@ -2,16 +2,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; +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.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; 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.RedisCacheTool; 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; @@ -43,6 +46,10 @@ public class MesWorkOrderController extends BaseMesController { validateImport(beanList); String userName = AuthUtil.getSessionUser().getUserName(); String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); + //非排序工单导入前删除 + if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == type) { + + } // 导入数据初始化 for (MesWorkOrder bean : beanList) { bean.setWorkOrderType(type); @@ -78,6 +85,26 @@ public class MesWorkOrderController extends BaseMesController { } } + @PostMapping(value = "/doProductReportExt") + @ApiOperation(value = "生产报工(武汉)") + public ResultBean doProductReportExt(@RequestBody MesWorkOrder mesWorkOrder) { + try { + ValidatorBean.checkNotNull(mesWorkOrder.getId(),"工单id不能为空"); + ValidatorBean.checkNotNull(mesWorkOrder.getNum(),"报工数量不能为空"); + ValidatorBean.checkNotZero(mesWorkOrder.getNum(),"报工数量不能为0"); + mesWorkOrder.setOrganizeCode(AuthUtilExt.getOrganizeCode()); + ConvertBean.serviceModelUpdate(mesWorkOrder, AuthUtilExt.getUserName()); + //新增初始化 + mesWorkOrderService.doProductReportExt(mesWorkOrder); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + @GetMapping(value = "/sendToSap") @ApiOperation(value = "发送给sap") diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java new file mode 100644 index 0000000..86a4a98 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao; + + +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; + +import java.util.List; + +public interface IMesProdRuleNosortCfgDao { + + List findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode); + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java new file mode 100644 index 0000000..e7db34c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +@Service +@Slf4j +public class MesProdRuleNosortCfgDaoImpl implements IMesProdRuleNosortCfgDao { + + @Autowired + private EntityManager entityManager; + + @Override + public List findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode) { + StringBuffer hql = new StringBuffer("select ns from MesProdRuleNosortCfg ns" + + " left join MesWcEquipment we on ns.equipmentCode = we.equipmentCode " + + " where ns.isDeleted=:isDeleted and ns.isValid = :isValid and ns.organizeCode = :organizeCode " + + " and we.isDeleted=:isDeleted and we.isValid = :isValid and we.organizeCode = :organizeCode " + + " and we.workCenterCode = :workCenterCode and ns.outPartNo = :outPartNo"); + + Query query = entityManager.createQuery(hql.toString(), MesProdRuleNosortCfg.class); + query.setParameter("organizeCode", organizeCode); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("workCenterCode", workCenterCode); + query.setParameter("outPartNo", partNo); + + return query.getResultList(); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesMoveRuleImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesMoveRuleImpl.java new file mode 100644 index 0000000..b5893a0 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesMoveRuleImpl.java @@ -0,0 +1,80 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesMoveRuleService; +import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesMoveRule; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : 移库规则 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/5 9:08 + * @Modify: + **/ +@Service +@Slf4j +public class MesMoveRuleImpl extends BaseMesService implements IMesMoveRuleService { + + @Override + protected void setPackQueryBean(MesMoveRule bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getSrcType(), "srcType", packBean); + } + + @Override + protected void onInsertBean(MesMoveRule item) { + // 数据校验 + checkNotNull(item); + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(item.getSrcType(), "srcType", ddlPackBean); + + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("零件生产组代码【%s】来源类型【%s】数据已存在", item.getPartProdGroupCode(), item.getSrcType()); + } + + } + + @Override + protected void onUpdateBean(MesMoveRule item) { + // 数据校验 + checkNotNull(item); + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(item.getSrcType(), "srcType", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("零件生产组代码【%s】来源类型【%s】数据已存在", item.getPartProdGroupCode(), item.getSrcType()); + } + } + + @Override + public List findMesMoveRuleByPartProdGroupCode(String partProdGroupCode, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroupCode, "partProdGroupCode", ddlPackBean); + List moveRules = baseRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(moveRules)) { + MesException.throwMesBusiException("零件生产组代码【%s】移库规则数据不存在", partProdGroupCode); + } + return moveRules; + } + + private void checkNotNull(MesMoveRule item) { + ValidatorBean.checkNotNull(item.getPartProdGroupCode(), "零件生产组代码不能为空"); + ValidatorBean.checkNotNull(item.getErpSrcLocateNo(), "ERP来源库位不能为空"); + ValidatorBean.checkNotNull(item.getErpDestLocateNo(), "ERP目的库位不能为空"); + ValidatorBean.checkNotNull(item.getSrcType(), "来源类型不能为空"); + ValidatorBean.checkNotNull(item.getReportType(), "汇报类型不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java index 228f09a..ebedd80 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java @@ -11,6 +11,9 @@ 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.CollectionUtils; + +import java.util.List; @Service @Slf4j @@ -69,4 +72,15 @@ public class MesPartSapService extends BaseMesService implements IMe } return mesPart; } + + @Override + public List findMesPartSapByPartNoList(List partNoList, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean); + List mesPartSapList = baseRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesPartSapList)) { + MesException.throwMesBusiException("物料【%s】信息不存在", partNoList); + } + return mesPartSapList; + } } 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 8670991..ef0ba71 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 @@ -7,10 +7,14 @@ 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.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; 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.CollectionUtils; + +import java.util.List; @Service @Slf4j @@ -33,6 +37,17 @@ public class MesPartService extends BaseMesService implements IMesPartS return mesPart; } + @Override + public List findMesPartByPartNoList(List partNoList, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean); + List mesPartList = baseRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesPartList)) { + MesException.throwMesBusiException("物料【%s】信息不存在", partNoList); + } + return mesPartList; + } + protected void onInsertBean(MesPart item) { // 数据校验 ValidatorBean.checkNotNull(item.getPartNo(), "物料号不能为空"); 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 aaefa60..a0b7c9a 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 @@ -1,24 +1,29 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesProdRuleNosortCfgService; -import cn.estsh.i3plus.ext.mes.api.base.IMesTimeEfficientCfgService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao; +import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.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; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesTimeEfficientCfg; 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 org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.List; + @Service @Slf4j public class MesProdRuleNosortCfgService extends BaseMesService implements IMesProdRuleNosortCfgService { + @Autowired + private IMesProdRuleNosortCfgDao mesProdRuleNosortCfgDao; protected void setPackQueryBean(MesProdRuleNosortCfg bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getInPartNo(), "inPartNo", packBean); @@ -83,4 +88,13 @@ public class MesProdRuleNosortCfgService extends BaseMesService prodRuleNosortCfgList = mesProdRuleNosortCfgDao.findMesProdRuleNosortCfgByWorkCenterCode(workCenterCode, partNo, organizeCode); + if(CollectionUtils.isEmpty(prodRuleNosortCfgList)){ + MesException.throwMesBusiException("产线【%s】产出零件【%s】对应的非排序工艺路线信息不存在",workCenterCode,partNo); + } + return prodRuleNosortCfgList.iterator().next(); + } } 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 b388449..5e0c661 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 @@ -45,7 +45,7 @@ public class MesProdRuleSortCfgService extends BaseMesService implements IMesWorkCenterService { + @Override + protected void setPackQueryBean(MesWorkCenter bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getErpWorkCenter(), "erpWorkCenter", packBean); + DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getWorkCenterName(), "workCenterName", 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 5b92cb9..b3c7a61 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.unit.exception.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; @@ -31,7 +32,9 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; @Service @Slf4j @@ -64,7 +67,16 @@ public class MesWorkOrderService extends BaseMesService implements private MesCustomerPartRepository mesCustomerPartRDao; @Autowired private IMesPartSapService iMesPartSapService; - + @Autowired + private IMesMoveRuleService mesMoveRuleService; + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao; + @Autowired + private IMesProdRuleNosortCfgService mesProdRuleNosortCfgService; + @Autowired + private IMesPartSapService mesPartSapService; + @Autowired + private MesMoveRepository mesMoveRDao; @Override public MesWorkOrder insert(MesWorkOrder bean) { //插入前构造数据 @@ -327,13 +339,13 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode()); } } - //校验零件生产组信息 -// MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail(); -// mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode()); -// mesPartProdGroupDetail.setPartNo(item.getPartNo()); -// mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode()); -// List mesPartProdGroup = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail); + //校验零件生产组信息 + if(StringUtil.isEmpty(item.getPartProdGroupCode())){ + MesPartProdGroup mesPartProdGroup = getMesPartProdGroup(item); + item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + } //排序工单数量为1 item.setQty(1d); @@ -387,6 +399,19 @@ public class MesWorkOrderService extends BaseMesService implements } + private MesPartProdGroup getMesPartProdGroup(MesWorkOrder item) { + MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail(); + mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode()); + mesPartProdGroupDetail.setPartNo(item.getPartNo()); + mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode()); + List mesPartProdGroupList = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail); + if(CollectionUtils.isEmpty(mesPartProdGroupList)){ + MesException.throwMesBusiException("生产线代码【%s】零件号【%s】对应的零件生产组信息没有维护"); + } + MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.iterator().next(); + return mesPartProdGroup; + } + private void getCustomerPart(MesWorkOrder item) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getPartNo(), "erpPartNo", ddlPackBean); @@ -476,23 +501,9 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrder.getWorkCenterCode()); } //获取生产版本 - ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo()); - } + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder); //物料+生产版本获取bom信息 - ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean); - List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); - if (CollectionUtils.isEmpty(mesBoms)) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", - mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion()); - } + List mesBoms = getMesBoms(mesWorkOrder, mesPart, mesProductVersion); //报工类型 if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) { mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getReportedQty())); @@ -525,45 +536,267 @@ public class MesWorkOrderService extends BaseMesService implements update(mesWorkOrder); //生成条码 - // todo - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN); - genSerialNoModel.setPartNo(mesWorkOrder.getPartNo()); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList(); + List resultList = getStringList(mesWorkOrder); //保存数据 List mesProductOffLineList = new ArrayList<>(); - MesProductOffLine newMesProductOffLine; for (String sn : resultList) { for (MesBom mesBom : mesBoms) { - newMesProductOffLine = new MesProductOffLine(); - newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); - newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName()); - newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); - newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); - newMesProductOffLine.setItemQty(mesBom.getItemQty()); - newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); - newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); - newMesProductOffLine.setQty(1d); - newMesProductOffLine.setReportSn(sn); - newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion()); - newMesProductOffLine.setSerialNumber(sn); - newMesProductOffLine.setUnit(mesBom.getUnit()); - newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); - newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); - newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode()); - newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); - newMesProductOffLine.setSapWorkCenter(mesWorkCenter.getErpWorkCenter()); - newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); - - ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); - mesProductOffLineList.add(newMesProductOffLine); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,false)); } } mesProductOffLineService.insertBatch(mesProductOffLineList); } @Override + public void doProductReportExt(MesWorkOrder mesWorkOrderNew) { + MesWorkOrder mesWorkOrder = baseRDao.getById(mesWorkOrderNew.getId()); + if(Objects.isNull(mesWorkOrder)){ + MesException.throwMesBusiException("工单id为【%s】工单信息不存在",mesWorkOrderNew.getId()); + } + //查询物料信息 + MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); + if(mesWorkOrderNew.getNum() <= 0){ + MesException.throwMesBusiException("工单报工数量不能为0,不允许报工"); + } + //报工类型 + //报工 + if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) { + mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrderNew.getNum(), mesWorkOrder.getReportedQty())); + } else { + //冲销数量大于工单完成数量报错 + if (mesWorkOrderNew.getNum() > mesWorkOrder.getReportedQty()) { + MesException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销", + mesWorkOrderNew.getNum(), mesWorkOrder.getReportedQty()); + } + //报工调整数量加- + mesWorkOrder.setAdjustQty((MathOperation.add(mesWorkOrderNew.getNum(), mesWorkOrder.getAdjustQty()))); + //已汇报数量减一 + mesWorkOrder.setReportedQty(MathOperation.sub(mesWorkOrder.getReportedQty(), mesWorkOrderNew.getNum())); + } + //更新工单状态 + double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getReportedQty()); + mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); + if (mesWorkOrder.getReportedQty() > mesWorkOrder.getQty()) { + MesException.throwMesBusiException("工单报工数量大于工单数量【%s】,不允许报工", mesWorkOrder.getQty()); + } else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } else { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue()); + } + //获取生产版本 + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder); + //物料+生产版本获取bom信息 + List mesBoms = getMesBoms(mesWorkOrder, mesPart, mesProductVersion); + //生成条码 + List resultList = getStringList(mesWorkOrderNew); + //保存数据 + List mesProductOffLineList = new ArrayList<>(); + List mesMoveList = new ArrayList<>(); + boolean isReport = false; + boolean isMove = false; + //排序工单 + if(MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()){ + //报工类型 + if (MesExtEnumUtil.REPORT_TYPE.WRITE_OFF.getValue() == mesWorkOrder.getReportType()) { + MesException.throwMesBusiException("工单【%s】为排序工单不允许冲销",mesWorkOrder.getWorkOrderNo()); + } + //排序加工规则 + MesProdRuleSortCfg mesProdRuleSortCfg = getMesProdRuleSortCfg(mesWorkOrder); + if(MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue() == mesProdRuleSortCfg.getReportType()){ + isReport = true; + } else if (MesExtEnumUtil.MES_REPORT_TYPE.MOVE.getValue() == mesProdRuleSortCfg.getReportType()) { + isMove = true; + }else if (MesExtEnumUtil.MES_REPORT_TYPE.REPORT_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) { + isReport = true; + isMove = true; + }else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) { + customerSupplyMove(mesWorkOrder, mesProductVersion, mesBoms, resultList, mesProductOffLineList, mesMoveList); + }else{ + log.info("工单{}排序加工规则报工类型未维护",mesWorkOrder.getWorkOrderNo()); + return; + } + + if(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() != mesProdRuleSortCfg.getReportType()){ + //查询SAP物料信息 + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); + for (String sn : resultList) { + //成品汇报 + if(isReport){ + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,false)); + } + } + //成品移库 + if(isMove){ + MesMove move = createMove(mesPartSap, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), mesWorkOrder.getOrganizeCode(), 1d); + move.setMatnr(mesWorkOrder.getPartNo()); + mesMoveList.add(move); + } + } + } + } else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) { + MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(),mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode()); + if( CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesProdRuleNoSortCfg.getReportType()){ + for (String sn : resultList) { + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom,false)); + } + } + } + }else { + log.info("工单{}排序规则不属于排序工单和非排序工单",mesWorkOrder.getWorkOrderNo()); + return; + } + + //更新工单 + update(mesWorkOrder); + //保存报工记录 + if(CollectionUtils.isNotEmpty(mesProductOffLineList)){ + mesProductOffLineService.insertBatch(mesProductOffLineList); + } + //保存移库记录 + if(CollectionUtils.isNotEmpty(mesMoveList)){ + mesMoveRDao.saveAll(mesMoveList); + } + } + + private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, List resultList, List mesProductOffLineList, List mesMoveList) { + boolean isItemMove; + boolean isItemReport; + MesMoveRule moveRule; + //查询零件生产组的移库规则 + List moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode()); + Map> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType)); + List itemPartNoList = mesBoms.stream().map(MesBom::getItemPartNo).collect(Collectors.toList()); + //子物料SAP下发信息 + Map> mesPartSapMap = getPartSapMap(mesWorkOrder, itemPartNoList); + //获取物料信息 + Map> itemPartMap = getItemPartMap(mesWorkOrder, itemPartNoList); + for (String sn : resultList) { + for (MesBom mesBom : mesBoms) { + isItemReport = false; + isItemMove = false; + moveRule = null; + if(itemPartMap.containsKey(mesBom.getItemPartNo())){ + MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); + if(!StringUtil.isEmpty(itemPart.getPartEds()) && mesMoveRuleMap.containsKey(itemPart.getPartEds())){ + moveRule = mesMoveRuleMap.get(itemPart.getPartEds()).iterator().next(); + if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) { + isItemMove = true; + isItemReport = true; + } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT.getValue() == moveRule.getReportType()) { + isItemReport = true; + } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) { + isItemMove = true; + } + } + } + //汇报 + if(isItemReport){ + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,true)); + } + //移库 + if(isItemMove){ + MesPartSap mesPartSap = null; + if(mesPartSapMap.containsKey(mesBom.getItemPartNo())){ + mesPartSap = mesPartSapMap.get(mesBom.getItemPartNo()).iterator().next(); + } + MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), mesBom.getOrganizeCode(), mesBom.getItemQty()); + move.setMatnr(mesBom.getItemPartNo()); + mesMoveList.add(move); + } + } + } + } + + 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; + } + + 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; + } + + private MesProdRuleSortCfg getMesProdRuleSortCfg(MesWorkOrder mesWorkOrder) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"reportPartNo",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(),"workCenterCode",ddlPackBean); + MesProdRuleSortCfg mesProdRuleSortCfg = mesProdRuleSortCfgRDao.getByProperty(ddlPackBean); + if(Objects.isNull(mesProdRuleSortCfg)){ + MesException.throwMesBusiException("产线【%s】物料【%s】排序加工规则未维护", mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo()); + } + return mesProdRuleSortCfg; + } + + private List getStringList(MesWorkOrder mesWorkOrder) { + GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList(); + return resultList; + } + + private List getMesBoms(MesWorkOrder mesWorkOrder, MesPart mesPart, MesProductVersion mesProductVersion) { + DdlPackBean ddlPackBean; + ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean); + List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesBoms)) { + MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", + mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion()); + } + return mesBoms; + } + + 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); + MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); + if (null == mesProductVersion) { + MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo()); + } + return mesProductVersion; + } + + + private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, + String sn, MesBom mesBom,boolean isItemReport) { + MesProductOffLine newMesProductOffLine; + newMesProductOffLine = new MesProductOffLine(); + if(!isItemReport){ + newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName()); + } + + newMesProductOffLine.setReportSn(sn); + newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); + newMesProductOffLine.setItemQty(mesBom.getItemQty()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setQty(1d); + newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion()); + newMesProductOffLine.setSerialNumber(sn); + newMesProductOffLine.setUnit(mesBom.getUnit()); + newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); + newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode()); + newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); + newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter()); + newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); + + ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); + return newMesProductOffLine; + } + + @Override public List sumMesWorkOrderQtyToSap(String organizeCode) { List statusList = new ArrayList<>(); statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); @@ -581,4 +814,20 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean); return mesWorkOrderRDao.findByHqlWhere(packBean); } + + private MesMove createMove(MesPartSap mesPart , String source, String target, String org,double qty) { + MesMove move = new MesMove(); + if(!Objects.isNull(mesPart)){ + move.setMeins(mesPart.getUnit()); + } + move.setOrganizeCode(org); + move.setFactoryCode(org); + move.setLgort(source); + move.setUmlgo(target); + move.setMenge(qty); + move.setPostDate(TimeTool.getToday()); + move.setPostTime(TimeTool.getTimeShortWithColon()); + ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName()); + return move; + } } 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 1f5e93d..eafe60f 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 @@ -90,7 +90,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { MesWorkOrder mesWorkOrder = new MesWorkOrder(); mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue()); mesWorkOrder.setWorkOrderSeq(createSeq.toString()); - mesWorkOrder.setProduceSeq(createSeq.toString()); + mesWorkOrder.setProduceSeq(createSeq); mesWorkOrder.setOrganizeCode(detail.getOrganizeCode()); //产线 mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode());