BOM树开发

tags/yfai-mes-ext-v1.0
jun 11 months ago
parent fe60829f79
commit 6a0d1eee40

@ -15,6 +15,12 @@ import java.util.List;
*/
public interface IMesBomService extends IBaseMesService<MesBom> {
@ApiOperation("查询生产版本信息")
List<String> findBomVersionByPartNo(MesBom mesBom);
@ApiOperation("根据生产版本查询BomCode")
List<String> findBomCodeByPartNoAndBomVersion(MesBom mesBom);
/**
* MES
*

@ -9,6 +9,7 @@ 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.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -25,6 +26,38 @@ public class MesBomController extends BaseMesController<MesBom> {
@Autowired
private IMesBomService bomService;
@GetMapping(value = "/find-bom-version")
@ApiOperation(value = "查询生产版本信息")
public ResultBean findBomVersionByPartNo(MesBom bom) {
try {
ValidatorBean.checkNotNull(bom.getPartNo(), "父零件号不能为空");
bom.setOrganizeCode(AuthUtil.getOrganizeCode());
return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultList(bomService.findBomVersionByPartNo(bom));
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping(value = "/find-bom-code")
@ApiOperation(value = "根据生产版本查询BomCode")
public ResultBean findBomCodeByPartNoAndBomVersion(MesBom bom) {
try {
ValidatorBean.checkNotNull(bom.getPartNo(), "父零件号不能为空");
ValidatorBean.checkNotNull(bom.getBomVersion(), "BOM版本不能为空");
bom.setOrganizeCode(AuthUtil.getOrganizeCode());
return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultList(bomService.findBomCodeByPartNoAndBomVersion(bom));
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping(value = "/tree/query-first-floor")
@ApiOperation(value = "查询MES组织模型数据返回树结构-只获取一层")
public ResultBean queryMesDataTreeByFirstFloor(MesBom bom) {
@ -43,6 +76,10 @@ public class MesBomController extends BaseMesController<MesBom> {
@ApiOperation(value = "查询MES组织模型数据返回树结构-获取所有")
public ResultBean queryMesDataTree(MesBom bom, Pager pager) {
try {
ValidatorBean.checkNotNull(bom.getPartNo(), "父零件号不能为空");
ValidatorBean.checkNotNull(bom.getBomVersion(), "BOM版本不能为空");
ValidatorBean.checkNotNull(bom.getBomCode(), "BOM代码不能为空");
ValidatorBean.checkNotNull(bom.getEffStartTime(), "生效时间不能为空");
bom.setOrganizeCode(AuthUtil.getOrganizeCode());
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setListPager(bomService.queryMesDataTree(bom, pager));

@ -0,0 +1,21 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description : BOM
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/24 14:35
* @Modify:
**/
public interface IMesBomDao {
@ApiOperation("查询生产版本信息")
List<String> findBomVersionByPartNo(String partNo, String organizeCode);
@ApiOperation("根据生产版本查询BomCode")
List<String> findBomCodeByPartNoAndBomVersion(String partNo, String bomVersion, String organizeCode);
}

@ -0,0 +1,52 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesBomDao;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
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;
/**
* @Description : BOM
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/24 14:43
* @Modify:
**/
@Service
@Slf4j
public class MesDaoImpl implements IMesBomDao {
@Autowired
private EntityManager entityManager;
@Override
public List<String> findBomVersionByPartNo(String partNo, String organizeCode) {
StringBuilder sql = new StringBuilder(" select distinct bomVersion from MesBom where partNo = :partNo " +
"and isDeleted=:isDeleted and isValid = :isValid and organizeCode = :organizeCode order by createDatetime desc");
Query query = entityManager.createQuery(sql.toString(), String.class);
query.setParameter("partNo", partNo);
query.setParameter("organizeCode", organizeCode);
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
return (List<String>) query.getResultList();
}
@Override
public List<String> findBomCodeByPartNoAndBomVersion(String partNo, String bomVersion, String organizeCode) {
StringBuilder sql = new StringBuilder(" select distinct bomCode from MesBom where partNo = :partNo and bomVersion = :bomVersion" +
"and isDeleted=:isDeleted and isValid = :isValid and organizeCode = :organizeCode order by createDatetime desc");
Query query = entityManager.createQuery(sql.toString(), String.class);
query.setParameter("partNo", partNo);
query.setParameter("bomVersion", bomVersion);
query.setParameter("organizeCode", organizeCode);
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
return (List<String>) query.getResultList();
}
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
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.unit.exception.MesException;
import cn.estsh.i3plus.ext.mes.pojo.model.MesBomTreeModel;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
@ -18,11 +19,10 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
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 java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@ -30,12 +30,25 @@ import java.util.stream.Collectors;
@Slf4j
public class MesBomService extends BaseMesService<MesBom> implements IMesBomService {
@Autowired
private IMesBomDao mesBomDao;
protected void setPackQueryBean(MesBom bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getBomVersion(), "bomVersion", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
}
@Override
public List<String> findBomVersionByPartNo(MesBom mesBom) {
return mesBomDao.findBomVersionByPartNo(mesBom.getPartNo(), mesBom.getOrganizeCode());
}
@Override
public List<String> findBomCodeByPartNoAndBomVersion(MesBom mesBom) {
return mesBomDao.findBomCodeByPartNoAndBomVersion(mesBom.getPartNo(), mesBom.getBomVersion(), mesBom.getOrganizeCode());
}
@Override
public List queryMesDataTreeByFirstFloor(MesBom bom) {
List resultList = new ArrayList();
@ -66,27 +79,42 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
@Override
public ListPager<MesBom> queryMesDataTree(MesBom bom, Pager pager) {
List resultList = new ArrayList();
ValidatorBean.checkNotNull(bom.getPartNo(), "零件号不能为空");
MesBomTreeModel organize = new MesBomTreeModel();
organize.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue());
// organize.setName("LML");
organize.setName(AuthUtil.getOrganize().getName());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bom.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bom.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomVersion(), "bomVersion", packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomCode(), "bomCode", packBean);
DdlPreparedPack.getStringSmallerPack(bom.getEffStartTime(), "effStartTime", packBean);
packBean.setOrderByStr(" order by createDatetime desc ");
pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean));
List<MesBom> bomList = baseRDao.findByHqlWherePage(packBean, pager);
recursionBomList(bomList);
recursionBomList(bomList,bom.getEffStartTime());
organize.setChildTreeList(bomList);
resultList.add(organize);
return new ListPager<>(resultList, pager);
}
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion, String bomCode, String effStartTime) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", ddlPackBean);
DdlPreparedPack.getStringSmallerPack(effStartTime, "effStartTime", ddlPackBean);
DdlPreparedPack.getOrderBy(null, null, ddlPackBean);
List<MesBom> mesBoms = baseRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】BOM代码【%s】生效时间小于【%s】对应bom信息不存在", partNo, bomVersion, bomCode, effStartTime);
}
return mesBoms;
}
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
@ -94,7 +122,7 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", ddlPackBean);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
List<MesBom> mesBoms = baseRDao.findByHqlWhere(ddlPackBean);
if (org.apache.commons.collections.CollectionUtils.isEmpty(mesBoms)) {
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion);
}
MesBom next = mesBoms.iterator().next();
@ -175,15 +203,14 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
* @return
*/
private List<MesBom> recursionBomList(List<MesBom> bomList) {
private List<MesBom> recursionBomList(List<MesBom> bomList,String effStartTime) {
if (!CollectionUtils.isEmpty(bomList)) {
for (MesBom bom : bomList) {
if (bom.getItemPartNo().equals(bom.getPartNo())) continue;
List<MesBom> resultList = baseRDao.findByProperty(new String[]{MesConstWords.IS_VALID, MesConstWords.IS_DELETED, MesConstWords.ORGANIZE_CODE, "partNo"},
new Object[]{CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), bom.getOrganizeCode(), bom.getItemPartNo()});
recursionBomList(resultList);
// bom.setChildTreeList(resultList);
if (Objects.equals("X", bom.getPartType())) {
List<MesBom> resultList = findMesBomByPartNoAndBomVersion(bom.getPartNo(), bom.getOrganizeCode(), bom.getBomVersion(), bom.getBomCode(), effStartTime);
bom.setChildTreeList(resultList);
recursionBomList(resultList,effStartTime);
}
}
}
return bomList;

Loading…
Cancel
Save