forked from I3-YF/i3plus-mes-yfai
工艺路线开发
parent
3333977b93
commit
0fa2418933
@ -0,0 +1,21 @@
|
||||
package cn.estsh.i3plus.ext.mes.api.base;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description :工艺路线明细
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/5/8 16:48
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesCraftRouteDetailService extends IBaseMesService<MesCraftRouteDetail> {
|
||||
|
||||
void insertMesCraftRouteDetailBatch(List<MesCraftRouteDetail> mesCraftRouteDetailList);
|
||||
|
||||
void updateMesCraftRouteDetailBatch(List<MesCraftRouteDetail> mesCraftRouteDetailList);
|
||||
|
||||
void deleteMesCraftRouteDetailBatch(String organizeCode, String userName, String craftRouteCode);
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteDetailService;
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
|
||||
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail;
|
||||
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.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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(description = "工艺路线明细")
|
||||
@RestController
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCraftRouteDetail")
|
||||
public class MesCraftRouteDetailController extends BaseMesController<MesCraftRouteDetail> {
|
||||
|
||||
@Autowired
|
||||
private IMesCraftRouteDetailService mesCraftRouteDetailService;
|
||||
|
||||
@PostMapping(value = "/insert-batch")
|
||||
@ApiOperation(value = "批量新增")
|
||||
public ResultBean insertMesCraftRouteDetailBatch(@RequestBody List<MesCraftRouteDetail> mesCraftRouteDetailList) {
|
||||
try {
|
||||
mesCraftRouteDetailService.insertMesCraftRouteDetailBatch(mesCraftRouteDetailList);
|
||||
return ResultBean.success("新增成功")
|
||||
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
||||
} catch (ImppBusiException e) {
|
||||
return ResultBean.fail(e).build();
|
||||
} catch (Exception e) {
|
||||
return ResultBean.fail(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping(value = "/update-batch")
|
||||
@ApiOperation(value = "批量修改")
|
||||
public ResultBean updateMesCraftRouteDetailBatch(@RequestBody List<MesCraftRouteDetail> mesCraftRouteDetailList) {
|
||||
try {
|
||||
mesCraftRouteDetailService.updateMesCraftRouteDetailBatch(mesCraftRouteDetailList);
|
||||
return ResultBean.success("修改成功")
|
||||
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
||||
} catch (ImppBusiException e) {
|
||||
return ResultBean.fail(e).build();
|
||||
} catch (Exception e) {
|
||||
return ResultBean.fail(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping(value = "/delete-batch")
|
||||
@ApiOperation(value = "批量删除")
|
||||
public ResultBean deleteMesCraftRouteDetailBatch(String craftRouteCode) {
|
||||
try {
|
||||
String organizeCode = AuthUtilExt.getOrganizeCode();
|
||||
String userName = AuthUtilExt.getUserName();
|
||||
mesCraftRouteDetailService.deleteMesCraftRouteDetailBatch(organizeCode, userName, craftRouteCode);
|
||||
return ResultBean.success("新增成功")
|
||||
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
||||
} catch (ImppBusiException e) {
|
||||
return ResultBean.fail(e).build();
|
||||
} catch (Exception e) {
|
||||
return ResultBean.fail(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.dao;
|
||||
|
||||
import cn.estsh.i3plus.pojo.base.bean.ListPager;
|
||||
import cn.estsh.i3plus.pojo.base.common.Pager;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCraft;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @Description : 工艺信息
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/5/11 13:54
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesCraftDao {
|
||||
|
||||
@ApiOperation("根据工艺流程代码查询工艺")
|
||||
ListPager<MesCraft> findMesCraft(MesCraft mesCraft, Pager pager);
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesCraftDao;
|
||||
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.MesCraft;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
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.ArrayList;
|
||||
|
||||
/**
|
||||
* @Description :工艺信息
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/5/6 15:52
|
||||
* @Modify:
|
||||
**/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class MesCraftDaoImpl implements IMesCraftDao {
|
||||
|
||||
@Autowired
|
||||
private EntityManager entityManager;
|
||||
|
||||
@Override
|
||||
@ApiOperation("根据工艺流程代码查询工艺")
|
||||
public ListPager<MesCraft> findMesCraft(MesCraft mesCraft, Pager pager) {
|
||||
|
||||
StringBuffer hql = new StringBuffer("from MesCraft mc" +
|
||||
" left join MesProcessCraftCfg pc on mc.craftCode = pc.craftCode " +
|
||||
" left join MesRouteProcess rp on pc.processCode = rp.processCode " +
|
||||
" where mc.isDeleted=:isDeleted and mc.isValid = :isValid and mc.organizeCode = :organizeCode " +
|
||||
" and pc.isDeleted=:isDeleted and pc.isValid = :isValid and pc.organizeCode = :organizeCode " +
|
||||
" and rp.isDeleted=:isDeleted and rp.isValid = :isValid and rp.organizeCode = :organizeCode ");
|
||||
if (!StringUtil.isEmpty(mesCraft.getRouteCode())) {
|
||||
hql.append(" and rp.routeCode = :routeCode");
|
||||
}
|
||||
if (!StringUtil.isEmpty(mesCraft.getCraftCode())) {
|
||||
hql.append(" and mc.craftCode = :craftCode");
|
||||
}
|
||||
if (!StringUtil.isEmpty(mesCraft.getCraftName())) {
|
||||
hql.append(" and mc.craftName like '%").append(mesCraft.getCraftName()).append("%' ");
|
||||
}
|
||||
Query query = entityManager.createQuery("select mc " + hql, MesCraft.class);
|
||||
Query countQuery = entityManager.createQuery("select count(1) " + hql, Long.class);
|
||||
query.setParameter("organizeCode", mesCraft.getOrganizeCode());
|
||||
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
||||
|
||||
countQuery.setParameter("organizeCode", mesCraft.getOrganizeCode());
|
||||
countQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
countQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
||||
if (!StringUtil.isEmpty(mesCraft.getRouteCode())) {
|
||||
query.setParameter("routeCode", mesCraft.getRouteCode());
|
||||
countQuery.setParameter("routeCode", mesCraft.getRouteCode());
|
||||
}
|
||||
if (!StringUtil.isEmpty(mesCraft.getCraftCode())) {
|
||||
query.setParameter("craftCode", mesCraft.getCraftCode());
|
||||
countQuery.setParameter("craftCode", mesCraft.getCraftCode());
|
||||
}
|
||||
int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult()));
|
||||
pager = PagerHelper.getPager(pager, count);
|
||||
if (count <= 0) {
|
||||
return new ListPager<>(new ArrayList<>(), pager);
|
||||
}
|
||||
query.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize());
|
||||
return new ListPager<>(query.getResultList(), pager);
|
||||
}
|
||||
}
|
@ -0,0 +1,207 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteDetailService;
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteService;
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftService;
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
|
||||
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
|
||||
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.common.Pager;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCraft;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 工艺路线明细
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/5/12 15:13
|
||||
* @Modify:
|
||||
**/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class MesCraftRouteDetailServiceImpl extends BaseMesService<MesCraftRouteDetail> implements IMesCraftRouteDetailService {
|
||||
|
||||
@Autowired
|
||||
private IMesCraftRouteService mesCraftRouteService;
|
||||
|
||||
@Autowired
|
||||
private IMesCraftService mesCraftService;
|
||||
|
||||
|
||||
protected void setPackQueryBean(MesCraftRouteDetail bean, DdlPackBean packBean) {
|
||||
DdlPreparedPack.getStringEqualPack(bean.getCraftRouteCode(), "craftRouteCode", packBean);
|
||||
DdlPreparedPack.getStringEqualPack(bean.getCraftCode(), "craftCode", packBean);
|
||||
DdlPreparedPack.getStringLikerPack(bean.getCraftName(), "craftName", packBean);
|
||||
packBean.setOrderByStr(" order by seq asc ");
|
||||
}
|
||||
|
||||
protected void setPackQueryBean(DdlPackBean packBean) {
|
||||
packBean.setOrderByStr(" order by seq asc ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertMesCraftRouteDetailBatch(List<MesCraftRouteDetail> mesCraftRouteDetailList) {
|
||||
//校验数据
|
||||
checkData(mesCraftRouteDetailList, true);
|
||||
//校验工艺
|
||||
checkCraft(mesCraftRouteDetailList, mesCraftRouteDetailList.iterator().next().getRouteCode());
|
||||
//保存数据
|
||||
insertBatch(mesCraftRouteDetailList);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateMesCraftRouteDetailBatch(List<MesCraftRouteDetail> mesCraftRouteDetailList) {
|
||||
String organizeCode = AuthUtilExt.getOrganizeCode();
|
||||
String userName = AuthUtilExt.getUserName();
|
||||
MesCraftRouteDetail craftRouteDetail = mesCraftRouteDetailList.iterator().next();
|
||||
//根据工艺流程代码查询工艺流程明细明细信息
|
||||
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(craftRouteDetail.getCraftRouteCode(), "craftRouteCode", ddlPackBean);
|
||||
List<MesCraftRouteDetail> oldMesCraftRouteDetailList = findAll(ddlPackBean);
|
||||
//明细不存 新增
|
||||
if (CollectionUtils.isEmpty(oldMesCraftRouteDetailList)) {
|
||||
insertMesCraftRouteDetailBatch(mesCraftRouteDetailList);
|
||||
return;
|
||||
}
|
||||
//校验数据
|
||||
checkData(mesCraftRouteDetailList, false);
|
||||
//校验工艺
|
||||
boolean isCheckCraft = false;
|
||||
String routeCode = null;
|
||||
//判断是否存在新增数据
|
||||
List<MesCraftRouteDetail> insertMesCraftRouteDetails = mesCraftRouteDetailList.stream().filter(t -> Objects.isNull(t.getId())).collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(insertMesCraftRouteDetails)) {
|
||||
isCheckCraft = true;
|
||||
insertMesCraftRouteDetails.forEach(t -> {
|
||||
ConvertBean.serviceModelInitialize(t, userName);
|
||||
});
|
||||
routeCode = insertMesCraftRouteDetails.iterator().next().getRouteCode();
|
||||
}
|
||||
//判断是否修改工艺代码
|
||||
List<MesCraftRouteDetail> updateCraft = mesCraftRouteDetailList.stream().filter(t -> !Objects.isNull(t.getId())
|
||||
&& !Objects.isNull(t.getRouteCode())).collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(updateCraft)) {
|
||||
isCheckCraft = true;
|
||||
routeCode = updateCraft.iterator().next().getRouteCode();
|
||||
}
|
||||
if (isCheckCraft) {
|
||||
checkCraft(mesCraftRouteDetailList, routeCode);
|
||||
}
|
||||
//保存数据
|
||||
//新增数据直接保存
|
||||
if (!CollectionUtils.isEmpty(insertMesCraftRouteDetails)) {
|
||||
insertBatch(insertMesCraftRouteDetails);
|
||||
}
|
||||
//修改或者删除
|
||||
for (MesCraftRouteDetail mesCraftRouteDetail : oldMesCraftRouteDetailList) {
|
||||
//判断是否删除数据
|
||||
boolean exist = mesCraftRouteDetailList.stream().anyMatch(t -> mesCraftRouteDetail.getId().equals(t.getId()));
|
||||
if (!exist) {
|
||||
deleteWeaklyById(mesCraftRouteDetail.getId(), mesCraftRouteDetail.getModifyUser());
|
||||
} else {
|
||||
update(mesCraftRouteDetail);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteMesCraftRouteDetailBatch(String organizeCode, String userName, String craftRouteCode) {
|
||||
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(craftRouteCode, "craftRouteCode", ddlPackBean);
|
||||
baseRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"},
|
||||
new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}, ddlPackBean);
|
||||
}
|
||||
|
||||
private void checkCraft(List<MesCraftRouteDetail> mesCraftRouteDetailList, String routeCode) {
|
||||
//获取工艺路线信息
|
||||
MesCraftRouteDetail craftRouteDetailFist = mesCraftRouteDetailList.iterator().next();
|
||||
String organizeCode = craftRouteDetailFist.getOrganizeCode();
|
||||
MesCraftRoute mesCraftRoute = mesCraftRouteService.getMesCraftRouteByCode(craftRouteDetailFist.getCraftRouteCode(), organizeCode);
|
||||
//排序
|
||||
if (MesExtEnumUtil.LINE_TYPE.LINE_TYPE_10.getValue() == mesCraftRoute.getCraftRouteType()) {
|
||||
//根据路线代码查询可选的工艺信息
|
||||
List<String> craftCodeList = findMesCraftCode(organizeCode, routeCode);
|
||||
//判断工艺是否属于同一流程
|
||||
mesCraftRouteDetailList.forEach(mesCraftRouteDetail -> {
|
||||
if (!craftCodeList.contains(mesCraftRouteDetail.getCraftCode())) {
|
||||
MesException.throwMesBusiException("工艺【%s】与其他工艺不属于同一流程【%s】", mesCraftRouteDetail.getCraftName(),routeCode);
|
||||
}
|
||||
});
|
||||
//非排序
|
||||
} else if (MesExtEnumUtil.LINE_TYPE.LINE_TYPE_20.getValue() != mesCraftRoute.getCraftRouteType()) {
|
||||
MesException.throwMesBusiException("工艺路线类型不存在");
|
||||
}
|
||||
}
|
||||
|
||||
private void checkData(List<MesCraftRouteDetail> mesCraftRouteDetailList, boolean isInsert) {
|
||||
List<Integer> seqList = new ArrayList<>();
|
||||
List<String> craftCodeList = new ArrayList<>();
|
||||
String userName = AuthUtilExt.getUserName();
|
||||
//属性校验
|
||||
mesCraftRouteDetailList.forEach(mesCraftRouteDetail -> {
|
||||
ValidatorBean.checkNotNull(mesCraftRouteDetail.getCraftRouteCode(), "工艺路线代码不能为空");
|
||||
ValidatorBean.checkNotNull(mesCraftRouteDetail.getCraftCode(), "工艺代码不能为空");
|
||||
ValidatorBean.checkNotNull(mesCraftRouteDetail.getCraftName(), "工艺名称不能为空");
|
||||
ValidatorBean.checkNotZero(mesCraftRouteDetail.getSeq(), "顺序不能为0");
|
||||
//校验顺序号不能重复
|
||||
if (seqList.contains(mesCraftRouteDetail.getSeq())) {
|
||||
MesException.throwMesBusiException("顺序号不能重复");
|
||||
} else {
|
||||
seqList.add(mesCraftRouteDetail.getSeq());
|
||||
}
|
||||
//校验工艺是否重复
|
||||
if (craftCodeList.contains(mesCraftRouteDetail.getCraftCode())) {
|
||||
MesException.throwMesBusiException("工艺代码【%s】重复", mesCraftRouteDetail.getCraftCode());
|
||||
} else {
|
||||
craftCodeList.add(mesCraftRouteDetail.getCraftCode());
|
||||
}
|
||||
//校验已完成工序最大重复次数 >= 0
|
||||
if (mesCraftRouteDetail.getRepeatTimes() < 0) {
|
||||
MesException.throwMesBusiException("已完成工序最大重复次数不能小于0");
|
||||
}
|
||||
mesCraftRouteDetail.setOrganizeCode(AuthUtilExt.getOrganizeCode());
|
||||
if (isInsert) {
|
||||
ConvertBean.serviceModelInitialize(mesCraftRouteDetail, userName);
|
||||
} else {
|
||||
ConvertBean.serviceModelUpdate(mesCraftRouteDetail, userName);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private List<String> findMesCraftCode(String organizeCode, String routeCode) {
|
||||
//封装查询条件
|
||||
MesCraft mesCraft = new MesCraft();
|
||||
mesCraft.setOrganizeCode(organizeCode);
|
||||
mesCraft.setRouteCode(routeCode);
|
||||
//封装分页信息
|
||||
Pager pager = new Pager();
|
||||
pager.setCurrentPage(0);
|
||||
pager.setPageSize(100);
|
||||
List<MesCraft> mesCraftList = mesCraftService.findMesCraft(mesCraft, pager).getObjectList();
|
||||
if (CollectionUtils.isEmpty(mesCraftList)) {
|
||||
MesException.throwMesBusiException("工艺流程【%s】没有对应的工艺信息",routeCode);
|
||||
}
|
||||
return mesCraftList.stream().map(MesCraft::getCraftCode).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue