44255-优化:非排序工艺路线支持所有路线主表明细批量导入

tags/yfai-mes-ext-v2.8
xiangwei.zhang 4 months ago
parent 6a90f0f54d
commit 9317426969

@ -1,13 +1,122 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.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.apiservice.dao.IMesCraftDao;
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;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.ExcelTool;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
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.MesCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesCraftRouteRepository;
import cn.estsh.i3plus.pojo.model.wms.WmsAgImportModel;
import cn.estsh.i3plus.pojo.wms.bean.*;
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.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
@Api(description = "工艺路线")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCraftRoute")
public class MesCraftRouteController extends BaseMesController<MesCraftRoute> {
public static final Logger LOGGER = LoggerFactory.getLogger(MesCraftRouteController.class);
@Autowired
private IMesCraftRouteDetailService mesCraftRouteDetailService;
@Autowired
private MesCraftRouteRepository mesCraftRouteRepository;
@PostMapping(value = "/all/import")
@ApiOperation(value = "流程导入")
public ResultBean allImport(@RequestParam("file") MultipartFile file, String organizeCode) {
ValidatorBean.checkNotNull(organizeCode, "参数organizeCode(工厂代码)不可为空或长度为0的字符串");
try {
//数据空校验以及转换
ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<MesCraftRoute> routeList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesCraftRoute.class, "MesCraftRoute", true);
List<MesCraftRouteDetail> routeDetailList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesCraftRouteDetail.class, "MesCraftRouteDetail", true);
//String userName = AuthUtil.getSessionUser().getUserName();
String userName ="zxw";
routeList.forEach(mesCraftRoute -> {
mesCraftRoute.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(mesCraftRoute,userName);
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesCraftRoute.getCraftRouteCode(), "craftRouteCode", roadPackBean);
boolean flg = mesCraftRouteRepository.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】已经存在请检查数据", mesCraftRoute.getCraftRouteCode())
.build();
}
});
routeDetailList.forEach(mesCraftRouteDetail -> {
mesCraftRouteDetail.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(mesCraftRouteDetail,userName);
});
baseService.insertBatch(routeList);
mesCraftRouteDetailService.insertBatch(routeDetailList);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
/**
* SHEET
*
* @param excelTool
* @param fileName
* @param inputStream
* @param dataBean
* @param sheetName
* @param <T>
* @return
* @throws Exception
*/
private <T> List<T> getDataAndInitValid(ExcelTool excelTool, String fileName, InputStream inputStream,
Class<T> dataBean, String sheetName, boolean isCheckDataEmpty) throws Exception {
List<T> beanList = excelTool.importData(fileName, inputStream, dataBean, sheetName);
LOGGER.info("导入的【" + sheetName + "】数据" + JsonUtilTool.getJSONArrayByList(beanList));
if (isCheckDataEmpty && CollectionUtils.isEmpty(beanList)) {
MesException.throwBusiException(String.format("导入的【%s】数据为空", sheetName));
}
return beanList;
}
}

@ -11,7 +11,10 @@ import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentSpotCheckRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
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.factory.annotation.Autowired;
@ -25,6 +28,8 @@ public class MesEquipmentSpotCheckPartService extends BaseMesService<MesEquipmen
@Autowired
private MesEquipmentSpotCheckRepository equipmentSpotCheckRepository;
@Autowired
private MesPartRepository mesPartRepository;
@Override
protected void setPackQueryBean(MesEquipmentSpotCheckPart bean, DdlPackBean packBean) {
@ -34,19 +39,28 @@ public class MesEquipmentSpotCheckPartService extends BaseMesService<MesEquipmen
@Override
public void validateImport(List<MesEquipmentSpotCheckPart> beanList) {
String organizeCode = AuthUtil.getOrganizeCode();
for (MesEquipmentSpotCheckPart item : beanList) {
// 数据校验
if (StringUtil.isEmpty(item.getPid())) {
ValidatorBean.checkNotNull(item.getSpotCheckCode(), "点检项目代码不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getSpotCheckCode(), "spotCheckCode", seriesPackBean);
MesEquipmentSpotCheck itemFlg = equipmentSpotCheckRepository.getByProperty(seriesPackBean);
if (StringUtil.isEmpty(itemFlg)) {
MesException.throwMesBusiException("点检项目代码【%s】不存在请检查数据", item.getSpotCheckCode());
}
item.setPid(itemFlg.getId());
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getPartNo(),"partNo", partPackBean);
MesPart mesPart = mesPartRepository.getByProperty(partPackBean);
if (mesPart == null) {
MesException.throwMesBusiException("零件号【%s】不存在", item.getPartNo());
}
item.setPartName(mesPart.getPartName());
} else {
ValidatorBean.checkNotNull(item.getPid(), "点检项目id不能为空");

@ -4,18 +4,20 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProdCraftRouteService;
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.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.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdRouteCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository;
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;
@ -24,6 +26,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@ -42,6 +45,8 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
@Autowired
private MesWorkCenterRepository mesWorkCenterRDao;
@Autowired
private MesPartRepository mesPartRepository;
@Autowired
private IMesPartService mesPartService;
@Autowired
private MesProdRouteCfgRepository mesProdRouteCfgRepository;
@ -61,7 +66,39 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
// 数据校验
checkData(item);
}
@Override
public List<MesProdCraftRoute> validateReturnImport(List<MesProdCraftRoute> beanList) {
if (CollectionUtils.isEmpty(beanList)) return beanList;
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
for (MesProdCraftRoute item : beanList) {
ValidatorBean.checkNotNull(item.getCraftRouteCode(), "工艺路线代码不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteName(), "工艺路线名称不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteType(), "工艺路线类型不能为空");
DdlPackBean centePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(),"workCenterCode", centePackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(centePackBean);
if (mesWorkCenter == null) {
MesException.throwMesBusiException("产线代码【%s】不存在", item.getWorkCenterCode());
}
item.setAreaCode(mesWorkCenter.getAreaCode());
if (!StringUtils.isEmpty(item.getPartNo())) {
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(),"workCenterCode", partPackBean);
MesPart mesPart = mesPartRepository.getByProperty(partPackBean);
if (mesPart == null) {
MesException.throwMesBusiException("零件号【%s】不存在", item.getPartNo());
}
item.setPartName(mesPart.getPartName());
}
item.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(item, userName);
}
return beanList;
}
@Override
protected void onUpdateBean(MesProdCraftRoute item) {

Loading…
Cancel
Save