|
|
|
@ -10,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionInputModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionViewModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
@ -27,7 +28,6 @@ import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
|
|
|
|
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.ImppBusiException;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
@ -42,7 +42,6 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description :
|
|
|
|
@ -117,55 +116,67 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkCenterPartRelationRepository workCenterPartRelationRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProductionRecordRepository productionRecordRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesMoveRuleRepository mesMoveRuleRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderPartRepository workOrderPartRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesPartProdGroupRepository mesPartProdGroupRao;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel inputModel, String org) {
|
|
|
|
|
public MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel model) {
|
|
|
|
|
|
|
|
|
|
//检查物料
|
|
|
|
|
MesPart part;
|
|
|
|
|
//获取NC-零件检测-单据
|
|
|
|
|
MesPartInspection partInspection = null;
|
|
|
|
|
Integer sourceType = null;
|
|
|
|
|
if (!StringUtils.isEmpty(inputModel.getSn())) {
|
|
|
|
|
Integer sourceType;
|
|
|
|
|
if (!StringUtils.isEmpty(model.getSn())) {
|
|
|
|
|
// 数据校验
|
|
|
|
|
ValidatorBean.checkNotNull(inputModel.getFrontBack(), "正反面不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(model.getFrontBack(), "正反面不能为空");
|
|
|
|
|
//检查条码
|
|
|
|
|
MesProduceSn produceSn = checkProduceSn(inputModel.getSn(), org);
|
|
|
|
|
MesProduceSn produceSn = checkProduceSn(model.getSn(), model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
//获取NC-零件检测-单据
|
|
|
|
|
partInspection = getPartInspection(produceSn,inputModel, org);
|
|
|
|
|
partInspection = getPartInspection(produceSn, model, model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
//检查物料
|
|
|
|
|
part = checkPart(produceSn, org);
|
|
|
|
|
part = checkPart(produceSn, model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue();
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// 数据校验
|
|
|
|
|
ValidatorBean.checkNotNull(inputModel.getPartNo(), "物料不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(inputModel.getLotNo(), "批次不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(inputModel.getFrontBack(), "正反面不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(inputModel.getQty(), "数量不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(model.getPartNo(), "物料不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(model.getLotNo(), "批次不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(model.getFrontBack(), "正反面不能为空");
|
|
|
|
|
ValidatorBean.checkNotNull(model.getQty(), "数量不能为空");
|
|
|
|
|
|
|
|
|
|
//检查物料
|
|
|
|
|
part = checkPartByPartNo(inputModel.getPartNo(), org);
|
|
|
|
|
part = checkPartByPartNo(model.getPartNo(), model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
//获取NC-零件检测-单据
|
|
|
|
|
if(!Objects.isNull(inputModel.getId())){
|
|
|
|
|
partInspection = getPartInspectionByPartAndLot(inputModel, org);
|
|
|
|
|
if(!Objects.isNull(model.getId())){
|
|
|
|
|
partInspection = getPartInspectionByPartAndLot(model, model.getOrganizeCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//检查零件类型与图片对应关系
|
|
|
|
|
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
|
|
|
|
|
MesPartTypePicture partTypePicture = checkPartTypePicture(part, model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
//构造返回信息
|
|
|
|
|
MesPartInspectionViewModel model = getModel(partInspection, part, partTypePicture, inputModel, sourceType, org);
|
|
|
|
|
model.setSourceType(sourceType);
|
|
|
|
|
model.setTransferFlg(inputModel.isTransferFlg());
|
|
|
|
|
MesPartInspectionViewModel result = getModel(partInspection, part, partTypePicture, model, sourceType);
|
|
|
|
|
result.setSourceType(sourceType);
|
|
|
|
|
result.setTransferFlg(model.isTransferFlg());
|
|
|
|
|
|
|
|
|
|
return model;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -222,12 +233,11 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
* 完成质检-保存不良记录
|
|
|
|
|
*
|
|
|
|
|
* @param model
|
|
|
|
|
* @param org
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void savePartInspection(MesPartInspectionInputModel model, String org) {
|
|
|
|
|
public void savePartInspection(MesPartInspectionInputModel model) {
|
|
|
|
|
|
|
|
|
|
MesProduceSn produceSn = getProduceSn(model.getSn(), org);
|
|
|
|
|
MesProduceSn produceSn = getProduceSn(model.getSn(), model.getOrganizeCode());
|
|
|
|
|
if (null != produceSn && StringUtils.isEmpty(model.getPartNo())) model.setPartNo(produceSn.getPartNo());
|
|
|
|
|
//武汉 会输入客户条码
|
|
|
|
|
boolean isWorkOrderQcStatus=false;
|
|
|
|
@ -235,7 +245,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
model.setCustSn(produceSn.getCustSn());
|
|
|
|
|
model.setSn(produceSn.getProductSn());
|
|
|
|
|
//排序产线 更新工单的 qcStatus
|
|
|
|
|
MesWorkCenter centerDb = prodOrgExtService.getWorkCenterDb(org, produceSn.getWorkCenterCode());
|
|
|
|
|
MesWorkCenter centerDb = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), produceSn.getWorkCenterCode());
|
|
|
|
|
if (!StringUtil.isEmpty(centerDb)){
|
|
|
|
|
isWorkOrderQcStatus= centerDb.getCenterType() == MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue();
|
|
|
|
|
}
|
|
|
|
@ -245,8 +255,52 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
}
|
|
|
|
|
if(!Objects.isNull(model.getPart())){
|
|
|
|
|
model.setPart(mesPartService.getMesPartSapByPartNo(model.getPart().getPartNo(), org));
|
|
|
|
|
model.setPart(mesPartService.getMesPartSapByPartNo(model.getPart().getPartNo(), model.getOrganizeCode()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 是否头零件模式
|
|
|
|
|
boolean headModel = true;
|
|
|
|
|
if (!StringUtil.isEmpty(model.getSn())) {
|
|
|
|
|
// 判断是头零件还是散件 查询加工记录
|
|
|
|
|
DdlPackBean productionPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", productionPackBean);
|
|
|
|
|
DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue(), "reportStatus", productionPackBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue(), "reportType", productionPackBean);
|
|
|
|
|
MesProductionRecord record = productionRecordRepository.getByProperty(productionPackBean);
|
|
|
|
|
if (record != null) {
|
|
|
|
|
headModel = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 如果是散件模式,需要查询出对应明细
|
|
|
|
|
List<MesPartModel> mesPartModels = new ArrayList<>();
|
|
|
|
|
if (!headModel) {
|
|
|
|
|
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "workOrderNo", partPackBean);
|
|
|
|
|
List<MesWorkOrderPart> workOrderParts = workOrderPartRepository.findByHqlWhere(partPackBean);
|
|
|
|
|
if (!CollectionUtils.isEmpty(workOrderParts)) {
|
|
|
|
|
DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(produceSn.getWorkCenterCode(), "workCenterCode", partProdBean);
|
|
|
|
|
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1);
|
|
|
|
|
for (MesWorkOrderPart workOrderPart : workOrderParts) {
|
|
|
|
|
MesPart partInfo = mesPartService.getMesPartByPartNo(workOrderPart.getPartNo(), model.getOrganizeCode());
|
|
|
|
|
String esd = partInfo.getEsd();
|
|
|
|
|
|
|
|
|
|
// 查询移库规则
|
|
|
|
|
DdlPackBean movePackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(esd, "srcType", movePackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPartProdGroupList.get(0).getPartProdGroupCode(), "code", movePackBean);
|
|
|
|
|
List<MesMoveRule> moveRules = mesMoveRuleRepository.findByHqlWhere(movePackBean);
|
|
|
|
|
if (!CollectionUtils.isEmpty(moveRules)) {
|
|
|
|
|
MesPartModel mesPartModel = new MesPartModel();
|
|
|
|
|
mesPartModel.setPartNo(workOrderPart.getPartNo());
|
|
|
|
|
mesPartModel.setLocateNo(moveRules.get(0).getErpDestLocateNo());
|
|
|
|
|
mesPartModels.add(mesPartModel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//零件检测详情为空,则代表本次校验为合格。
|
|
|
|
|
if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) {
|
|
|
|
|
MesPartInspection partInspection = null;
|
|
|
|
@ -257,23 +311,45 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
//若检验单为空,则生成新的单据并合格
|
|
|
|
|
if (StringUtils.isEmpty(model.getPartInspection())) {
|
|
|
|
|
|
|
|
|
|
partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue(), org);
|
|
|
|
|
partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue(), model.getOrganizeCode());
|
|
|
|
|
if (model.getOptType() != null && model.getOptType() == 2) {
|
|
|
|
|
partInspection.setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
|
}
|
|
|
|
|
partInspection = partInspectionRepository.save(partInspection);
|
|
|
|
|
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
|
|
|
|
|
//已创建返修单
|
|
|
|
|
DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "sn", reworkPackBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue(), "status", reworkPackBean);
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, reworkPackBean);
|
|
|
|
|
int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean);
|
|
|
|
|
if (count > 0) {
|
|
|
|
|
// 如果是批次还需要移库
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
|
|
|
|
|
String srcNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT");
|
|
|
|
|
if (version != null) {
|
|
|
|
|
srcNo = version.getReceiveInventoryPoint();
|
|
|
|
|
}
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, model.getOrganizeCode());
|
|
|
|
|
if(!model.isTransferFlg() && !Objects.equals(srcNo, destLocateNo)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
checkProduceSn(produceSn, model.getSn());
|
|
|
|
|
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo());
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
//更新工单对应qcStatus
|
|
|
|
|
if(isWorkOrderQcStatus){
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo());
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo());
|
|
|
|
|
if (!StringUtil.isEmpty(workOrder)){
|
|
|
|
|
workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo());
|
|
|
|
|
workOrderRepository.update(workOrder);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -284,7 +360,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
//原单据不合格 现合格
|
|
|
|
|
if (model.getPartInspection().getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()) {
|
|
|
|
|
model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserInfo());
|
|
|
|
|
|
|
|
|
|
if (model.getOptType() != null && model.getOptType() == 2) {
|
|
|
|
|
model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
@ -292,13 +368,13 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
partInspectionRepository.save(model.getPartInspection());
|
|
|
|
|
|
|
|
|
|
//查询当前单据明细
|
|
|
|
|
List<MesPartInspectionDetail> resultDetailList = queryResultDetailList(model, org);
|
|
|
|
|
List<MesPartInspectionDetail> resultDetailList = queryResultDetailList(model, model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
List<String> defectTypeNoExitList = new ArrayList<>();
|
|
|
|
|
for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) {
|
|
|
|
|
|
|
|
|
|
//根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getDefectLocation(), "defectTypeCode", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.POSITION.getValue(), "defectType", packBean);
|
|
|
|
|
MesDefectType defectType = defectTypeRepository.getByProperty(packBean);
|
|
|
|
@ -310,10 +386,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
|
|
|
|
|
detail.setDefectTypeId(defectType.getId());
|
|
|
|
|
detail.setId(null);
|
|
|
|
|
detail.setOrganizeCode(org);
|
|
|
|
|
detail.setOrganizeCode(model.getOrganizeCode());
|
|
|
|
|
detail.setPid(model.getPartInspection().getId());
|
|
|
|
|
setSystemSyncStatus(detail);
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, model.getUserInfo());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(defectTypeNoExitList)) {
|
|
|
|
@ -326,38 +402,48 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
|
|
|
|
|
checkProduceSn(produceSn, model.getSn());
|
|
|
|
|
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo());
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
//更新工单对应qcStatus
|
|
|
|
|
if(isWorkOrderQcStatus){
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo());
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo());
|
|
|
|
|
if (!StringUtil.isEmpty(workOrder)){
|
|
|
|
|
workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo());
|
|
|
|
|
workOrderRepository.update(workOrder);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//移库
|
|
|
|
|
String srcLocate;
|
|
|
|
|
MesMove mesMove = getMesMove(model, org);
|
|
|
|
|
MesMove mesMove = getMesMove(model, model.getOrganizeCode());
|
|
|
|
|
if(!Objects.isNull(mesMove)){
|
|
|
|
|
srcLocate = mesMove.getUmlgo();
|
|
|
|
|
}else{
|
|
|
|
|
srcLocate= configService.getCfgValue(org, "UMLGO");
|
|
|
|
|
srcLocate= configService.getCfgValue(model.getOrganizeCode(), "UMLGO");
|
|
|
|
|
}
|
|
|
|
|
if (model.getOptType() != 2) {
|
|
|
|
|
//移库
|
|
|
|
|
MesMove move = createMove(model, srcLocate, configService.getCfgValue(org, "LGORT"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
|
|
|
|
|
if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) {
|
|
|
|
|
for (MesPartModel mesPartModel : mesPartModels) {
|
|
|
|
|
//移库
|
|
|
|
|
MesMove move = createMove(model, srcLocate, mesPartModel.getLocateNo(), model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(),mesPartModel.getPartNo());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
//移库
|
|
|
|
|
MesMove move = createMove(model, srcLocate, configService.getCfgValue(model.getOrganizeCode(), "LGORT"), model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (model.isTransferFlg() && model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
|
|
|
|
|
//电子化检验
|
|
|
|
|
String target = configService.getCfgValue(org, "LGORT");
|
|
|
|
|
String target = configService.getCfgValue(model.getOrganizeCode(), "LGORT");
|
|
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
|
|
|
|
|
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
|
|
|
|
@ -368,9 +454,16 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
if (partInspection != null) {
|
|
|
|
|
model.setPartInspection(partInspection);
|
|
|
|
|
}
|
|
|
|
|
MesMove move = createMove(model, getDestLocateNo(model, org), target, org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
|
|
|
|
|
if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) {
|
|
|
|
|
String locateNo = getDestLocateNo(model, model.getOrganizeCode());
|
|
|
|
|
for (MesPartModel mesPartModel : mesPartModels) {
|
|
|
|
|
MesMove move = createMove(model,locateNo , mesPartModel.getLocateNo(), model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(), mesPartModel.getPartNo());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
MesMove move = createMove(model, getDestLocateNo(model, model.getOrganizeCode()), target, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
//零件检测详情不为空,则代表本次校验为不合格。
|
|
|
|
@ -380,7 +473,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
if (StringUtils.isEmpty(model.getPartInspection())) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), org);
|
|
|
|
|
partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
if (model.getOptType() != null && model.getOptType() == 2) {
|
|
|
|
|
partInspection.setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
@ -392,7 +485,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) {
|
|
|
|
|
|
|
|
|
|
//根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getDefectLocation(), "defectTypeCode", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.POSITION.getValue(), "defectType", packBean);
|
|
|
|
|
MesDefectType defectType = defectTypeRepository.getByProperty(packBean);
|
|
|
|
@ -404,10 +497,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
|
|
|
|
|
detail.setDefectTypeId(defectType.getId());
|
|
|
|
|
detail.setId(null);
|
|
|
|
|
detail.setOrganizeCode(org);
|
|
|
|
|
detail.setOrganizeCode(model.getOrganizeCode());
|
|
|
|
|
detail.setPid(partInspection.getId());
|
|
|
|
|
setSystemSyncStatus(detail);
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, model.getUserInfo());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(defectTypeNoExitList)) {
|
|
|
|
@ -420,7 +513,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
//若是扫描条码 则判定条码可疑
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
|
|
|
|
|
//已创建返修单
|
|
|
|
|
DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "sn", reworkPackBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue(), "status", reworkPackBean);
|
|
|
|
|
|
|
|
|
@ -428,14 +521,17 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean);
|
|
|
|
|
if (count > 0) {
|
|
|
|
|
// 如果是批次还需要移库
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
|
|
|
|
|
String srcNo = configService.getCfgValue(org, "LGORT");
|
|
|
|
|
String srcNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT");
|
|
|
|
|
if (version != null) {
|
|
|
|
|
srcNo = version.getReceiveInventoryPoint();
|
|
|
|
|
}
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, org);
|
|
|
|
|
if (!headModel) {
|
|
|
|
|
srcNo = mesPartModels.get(0).getLocateNo();
|
|
|
|
|
}
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, model.getOrganizeCode());
|
|
|
|
|
if(!Objects.equals(srcNo, destLocateNo)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn()));
|
|
|
|
|
}
|
|
|
|
@ -443,14 +539,14 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
|
|
|
|
|
checkProduceSn(produceSn, model.getSn());
|
|
|
|
|
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo());
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
//更新工单对应qcStatus
|
|
|
|
|
if(isWorkOrderQcStatus){
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo());
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo());
|
|
|
|
|
if (!StringUtil.isEmpty(workOrder)){
|
|
|
|
|
workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo());
|
|
|
|
|
workOrderRepository.update(workOrder);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -459,9 +555,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
// srcLocateNo = getDestLocateNo(model, org);
|
|
|
|
|
}
|
|
|
|
|
if (Objects.isNull(srcLocateNo)) {
|
|
|
|
|
srcLocateNo = configService.getCfgValue(org, "LGORT");
|
|
|
|
|
srcLocateNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT");
|
|
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
|
|
|
|
|
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
|
|
|
|
@ -472,7 +568,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
String workCenterCode;
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
|
|
|
|
|
if (null == produceSn || StringUtils.isEmpty(produceSn.getProcessCode())) {
|
|
|
|
|
List<MesWorkCenterPartRelation> workCenterPartRelationList = getWorkCenterPartRelation(org, model.getPartNo());
|
|
|
|
|
List<MesWorkCenterPartRelation> workCenterPartRelationList = getWorkCenterPartRelation(model.getOrganizeCode(), model.getPartNo());
|
|
|
|
|
if (CollectionUtils.isEmpty(workCenterPartRelationList) || workCenterPartRelationList.size() > 1 || StringUtils.isEmpty(workCenterPartRelationList.get(0).getWorkCenterCode())) {
|
|
|
|
|
throw new ImppBusiException(String.format("条码[%s]未查询到有效的来源库位!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
@ -484,7 +580,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
workCenterCode = model.getWorkCenterCode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(org, workCenterCode);
|
|
|
|
|
MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), workCenterCode);
|
|
|
|
|
if (null == workCenter) throw new ImppBusiException(String.format("条码[%s]查询来源库位时获取的生产线代码[%s]信息不存在!", model.getSn(), workCenterCode));
|
|
|
|
|
if (StringUtils.isEmpty(workCenter.getRawLocate())) throw new ImppBusiException(String.format("条码[%s]查询来源库位时获取的生产线代码[%s]信息未维护[材料库位]!", model.getSn(), workCenterCode));
|
|
|
|
|
srcLocateNo = workCenter.getRawLocate();
|
|
|
|
@ -494,33 +590,41 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
if (model.getOptType() != 2) {
|
|
|
|
|
//移库
|
|
|
|
|
//移库
|
|
|
|
|
String dest = configService.getCfgValue(org, "UMLGO");
|
|
|
|
|
String dest = configService.getCfgValue(model.getOrganizeCode(), "UMLGO");
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()){
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, org);
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, model.getOrganizeCode());
|
|
|
|
|
if (!StringUtils.isEmpty(destLocateNo) && Objects.equals(dest, destLocateNo)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
MesMove move = createMove(model, srcLocateNo, dest, org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) {
|
|
|
|
|
for (MesPartModel mesPartModel : mesPartModels) {
|
|
|
|
|
MesMove move = createMove(model, mesPartModel.getLocateNo(), dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(), mesPartModel.getPartNo());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
} else{
|
|
|
|
|
MesMove move = createMove(model, srcLocateNo, dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserInfo());
|
|
|
|
|
if (model.getOptType() != null && model.getOptType() == 2) {
|
|
|
|
|
model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
|
}
|
|
|
|
|
partInspectionRepository.save(model.getPartInspection());
|
|
|
|
|
//查询当前单据明细
|
|
|
|
|
List<MesPartInspectionDetail> resultDetailList = queryResultDetailList(model, org);
|
|
|
|
|
List<MesPartInspectionDetail> resultDetailList = queryResultDetailList(model, model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
List<String> defectTypeNoExitList = new ArrayList<>();
|
|
|
|
|
for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) {
|
|
|
|
|
|
|
|
|
|
//根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getDefectLocation(), "defectTypeCode", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.POSITION.getValue(), "defectType", packBean);
|
|
|
|
|
MesDefectType defectType = defectTypeRepository.getByProperty(packBean);
|
|
|
|
@ -532,10 +636,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
|
|
|
|
|
detail.setDefectTypeId(defectType.getId());
|
|
|
|
|
detail.setId(null);
|
|
|
|
|
detail.setOrganizeCode(org);
|
|
|
|
|
detail.setOrganizeCode(model.getOrganizeCode());
|
|
|
|
|
detail.setPid(model.getPartInspection().getId());
|
|
|
|
|
setSystemSyncStatus(detail);
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(detail, model.getUserInfo());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(defectTypeNoExitList)) {
|
|
|
|
@ -546,7 +650,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
|
|
|
|
|
|
|
|
|
|
//已创建返修单
|
|
|
|
|
DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "sn", reworkPackBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue(), "status", reworkPackBean);
|
|
|
|
|
|
|
|
|
@ -554,29 +658,29 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean);
|
|
|
|
|
if (count > 0) {
|
|
|
|
|
// 如果是批次还需要移库
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
|
|
|
|
|
String srcNo = configService.getCfgValue(org, "LGORT");
|
|
|
|
|
String srcNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT");
|
|
|
|
|
if (version != null) {
|
|
|
|
|
srcNo = version.getReceiveInventoryPoint();
|
|
|
|
|
}
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, org);
|
|
|
|
|
if(!Objects.equals(srcNo, destLocateNo)) {
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, model.getOrganizeCode());
|
|
|
|
|
if (!Objects.equals(srcNo, destLocateNo)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
checkProduceSn(produceSn, model.getSn());
|
|
|
|
|
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo());
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
//更新工单对应qcStatus
|
|
|
|
|
if(isWorkOrderQcStatus){
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo());
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo());
|
|
|
|
|
if (!StringUtil.isEmpty(workOrder)){
|
|
|
|
|
workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo());
|
|
|
|
|
workOrderRepository.update(workOrder);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -586,9 +690,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
|
|
|
|
|
//移库
|
|
|
|
|
if (model.getOptType() != 2) {
|
|
|
|
|
String srcLocateNo = configService.getCfgValue(org, "LGORT");
|
|
|
|
|
String srcLocateNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT");
|
|
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
|
|
|
|
|
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
|
|
|
|
@ -596,15 +700,24 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
srcLocateNo = version.getReceiveInventoryPoint();
|
|
|
|
|
}
|
|
|
|
|
//移库
|
|
|
|
|
String dest = configService.getCfgValue(org, "UMLGO");
|
|
|
|
|
String dest = configService.getCfgValue(model.getOrganizeCode(), "UMLGO");
|
|
|
|
|
if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()){
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, org);
|
|
|
|
|
String destLocateNo = getDestLocateNo(model, model.getOrganizeCode());
|
|
|
|
|
if (!StringUtils.isEmpty(destLocateNo) && Objects.equals(dest, destLocateNo)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
MesMove move = createMove(model, srcLocateNo, dest, org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) {
|
|
|
|
|
for (MesPartModel mesPartModel : mesPartModels) {
|
|
|
|
|
//移库
|
|
|
|
|
MesMove move = createMove(model, mesPartModel.getLocateNo(), dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(),mesPartModel.getPartNo());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
} else{
|
|
|
|
|
MesMove move = createMove(model, srcLocateNo, dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -706,7 +819,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
resultDetailList.forEach(k -> {
|
|
|
|
|
k.setIsDeleted(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
setSystemSyncStatus(k);
|
|
|
|
|
ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserInfo());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return resultDetailList;
|
|
|
|
@ -853,10 +966,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
partInspection.setWorkCenterCode(model.getWorkCenterCode());
|
|
|
|
|
partInspection.setShiftCode(model.getShiftCode());
|
|
|
|
|
partInspection.setSourceType(model.getSourceType());
|
|
|
|
|
// ConvertBean.serviceModelInitialize(partInspection, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
//42984 初检创建时修改人和修改时间不能赋值
|
|
|
|
|
partInspection.setCreateDatetime(TimeTool.getNowTime(true));
|
|
|
|
|
partInspection.setCreateUser(AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
partInspection.setCreateUser(model.getUserInfo());
|
|
|
|
|
partInspection.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
|
partInspection.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
return partInspection;
|
|
|
|
@ -900,6 +1012,43 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
return move;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 移库
|
|
|
|
|
*
|
|
|
|
|
* @param model
|
|
|
|
|
* @param source 来源
|
|
|
|
|
* @param target 目标
|
|
|
|
|
* @param org
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private MesMove createMove(MesPartInspectionInputModel model, String source, String target, String org, String workCenterCode, String partNo) {
|
|
|
|
|
if (StringUtils.isEmpty(model.getUserInfo())) model.setUserInfo("系统");
|
|
|
|
|
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
|
|
|
|
|
serialNoModel.setPartNo(partNo);
|
|
|
|
|
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getUserInfo(), org, 1);
|
|
|
|
|
String zrsum = "";
|
|
|
|
|
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
|
|
|
|
|
zrsum = (rb.getResultList().get(0)).toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MesMove move = new MesMove();
|
|
|
|
|
move.setMatnr(partNo);
|
|
|
|
|
move.setOrganizeCode(org);
|
|
|
|
|
move.setFactoryCode(org);
|
|
|
|
|
move.setLgort(source);
|
|
|
|
|
move.setUmlgo(target);
|
|
|
|
|
move.setMenge(model.getQty());
|
|
|
|
|
move.setMeins(model.getPart().getUnit());
|
|
|
|
|
move.setZrsum(zrsum);
|
|
|
|
|
move.setPostDate(TimeTool.getToday());
|
|
|
|
|
move.setPostTime(TimeTool.getTimeShortWithColon());
|
|
|
|
|
move.setPartInspectionId(Objects.isNull(model.getPartInspection()) ? 0 : model.getPartInspection().getId());
|
|
|
|
|
move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SUSPICIOUS_MOVE.getValue());
|
|
|
|
|
move.setProductSn(model.getSn());
|
|
|
|
|
move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode));
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, model.getUserInfo());
|
|
|
|
|
return move;
|
|
|
|
|
}
|
|
|
|
|
private MesPart checkPart(MesProduceSn produceSn, String org) {
|
|
|
|
|
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
@ -995,29 +1144,28 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
return alarmConfigList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesPartInspectionViewModel getModel(MesPartInspection partInspection, MesPart part,MesPartTypePicture partTypePicture, MesPartInspectionInputModel inputModel ,
|
|
|
|
|
Integer sourceType, String org) {
|
|
|
|
|
private MesPartInspectionViewModel getModel(MesPartInspection partInspection, MesPart part, MesPartTypePicture partTypePicture, MesPartInspectionInputModel model, Integer sourceType) {
|
|
|
|
|
|
|
|
|
|
Integer frontBack = inputModel.getFrontBack();
|
|
|
|
|
Integer frontBack = model.getFrontBack();
|
|
|
|
|
List<MesPartInspectionDetail> detailList = new ArrayList<>();
|
|
|
|
|
if (!StringUtils.isEmpty(partInspection) && partInspection.getInspectionStatus() != MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue()) {
|
|
|
|
|
|
|
|
|
|
detailList = checkPartInspectionDetail(partInspection, org);
|
|
|
|
|
detailList = checkPartInspectionDetail(partInspection, model.getOrganizeCode());
|
|
|
|
|
if(!CollectionUtils.isEmpty(detailList)){
|
|
|
|
|
//判断是否返工完成
|
|
|
|
|
checkReworkFinished(org, detailList);
|
|
|
|
|
checkReworkFinished(model.getOrganizeCode(), detailList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//位置
|
|
|
|
|
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
|
|
|
|
|
List<MesLocationConfig> locationConfigList = checkLocationConfig(model.getOrganizeCode());
|
|
|
|
|
List<String> locationCodeList = locationConfigList.stream().map(k -> k.getDefectLocation()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//查询零件类型缺陷类型对应关系
|
|
|
|
|
List<MesPartTypeDefect> partTypeDefectList = checkPartTypeDefect(part, org);
|
|
|
|
|
List<MesPartTypeDefect> partTypeDefectList = checkPartTypeDefect(part, model.getOrganizeCode());
|
|
|
|
|
List<String> partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectTypeCode()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//查询预警数量
|
|
|
|
|
List<MesDefectWarnConfig> alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, frontBack, locationCodeList, partTypeDefectCodeList, org);
|
|
|
|
|
List<MesDefectWarnConfig> alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, frontBack, locationCodeList, partTypeDefectCodeList, model.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
//根据不良类型+位置 若有数据,则表示需要标黄
|
|
|
|
|
Map<String, List<MesDefectWarnConfig>> alarmConfigMap = alarmConfigList.stream().collect(Collectors.groupingBy(MesDefectWarnConfig::getDefectLocation));
|
|
|
|
@ -1039,17 +1187,17 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
MesPartInspectionViewModel model = new MesPartInspectionViewModel();
|
|
|
|
|
model.setPart(part);
|
|
|
|
|
MesPartInspectionViewModel result = new MesPartInspectionViewModel();
|
|
|
|
|
result.setPart(part);
|
|
|
|
|
if (!StringUtils.isEmpty(partInspection) && partInspection.getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()
|
|
|
|
|
&& partInspection.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()) {
|
|
|
|
|
model.setPartInspectionDetailList(detailList);
|
|
|
|
|
model.setPartInspection(partInspection);
|
|
|
|
|
result.setPartInspectionDetailList(detailList);
|
|
|
|
|
result.setPartInspection(partInspection);
|
|
|
|
|
}
|
|
|
|
|
model.setPartTypePicture(partTypePicture);
|
|
|
|
|
model.setLocationConfigList(locationConfigList);
|
|
|
|
|
model.setMesDefectWarnConfigList(alarmConfigList);
|
|
|
|
|
return model;
|
|
|
|
|
result.setPartTypePicture(partTypePicture);
|
|
|
|
|
result.setLocationConfigList(locationConfigList);
|
|
|
|
|
result.setMesDefectWarnConfigList(alarmConfigList);
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1141,9 +1289,64 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
|
|
|
|
|
if (null != workCenter && !StringUtils.isEmpty(workCenter.getRawLocate())) source = workCenter.getRawLocate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(source)) MesPcnException.throwBusiException("未找到来源库位!");
|
|
|
|
|
MesMove move = createMove(model, source, target, org, model.getWorkCenterCode());
|
|
|
|
|
moveRepository.insert(move);
|
|
|
|
|
|
|
|
|
|
// 是否头零件模式
|
|
|
|
|
boolean headModel = true;
|
|
|
|
|
if (!StringUtil.isEmpty(model.getSn())) {
|
|
|
|
|
|
|
|
|
|
// 判断是头零件还是散件 查询加工记录
|
|
|
|
|
DdlPackBean productionPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", productionPackBean);
|
|
|
|
|
DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue(), "reportStatus", productionPackBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue(), "reportType", productionPackBean);
|
|
|
|
|
MesProductionRecord record = productionRecordRepository.getByProperty(productionPackBean);
|
|
|
|
|
if (record != null) {
|
|
|
|
|
headModel = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 如果是散件模式,需要查询出对应明细
|
|
|
|
|
List<MesPartModel> mesPartModels = new ArrayList<>();
|
|
|
|
|
if (!headModel) {
|
|
|
|
|
MesProduceSn produceSn = getProduceSn(model.getSn(), org);
|
|
|
|
|
|
|
|
|
|
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "workOrderNo", partPackBean);
|
|
|
|
|
List<MesWorkOrderPart> workOrderParts = workOrderPartRepository.findByHqlWhere(partPackBean);
|
|
|
|
|
if (!CollectionUtils.isEmpty(workOrderParts)) {
|
|
|
|
|
DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(produceSn.getWorkCenterCode(), "workCenterCode", partProdBean);
|
|
|
|
|
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1);
|
|
|
|
|
for (MesWorkOrderPart workOrderPart : workOrderParts) {
|
|
|
|
|
MesPart partInfo = mesPartService.getMesPartByPartNo(workOrderPart.getPartNo(), org);
|
|
|
|
|
String esd = partInfo.getEsd();
|
|
|
|
|
|
|
|
|
|
// 查询移库规则
|
|
|
|
|
DdlPackBean movePackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(esd, "srcType", movePackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPartProdGroupList.get(0).getPartProdGroupCode(), "code", movePackBean);
|
|
|
|
|
List<MesMoveRule> moveRules = mesMoveRuleRepository.findByHqlWhere(movePackBean);
|
|
|
|
|
if (!CollectionUtils.isEmpty(moveRules)) {
|
|
|
|
|
MesPartModel mesPartModel = new MesPartModel();
|
|
|
|
|
mesPartModel.setPartNo(workOrderPart.getPartNo());
|
|
|
|
|
mesPartModel.setLocateNo(moveRules.get(0).getErpDestLocateNo());
|
|
|
|
|
mesPartModels.add(mesPartModel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) {
|
|
|
|
|
for (MesPartModel mesPartModel : mesPartModels) {
|
|
|
|
|
//移库
|
|
|
|
|
MesMove move = createMove(model, mesPartModel.getLocateNo(),target, org, model.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
//移库
|
|
|
|
|
if (StringUtils.isEmpty(source)) MesPcnException.throwBusiException("未找到来源库位!");
|
|
|
|
|
MesMove move = createMove(model, source, target, org, model.getWorkCenterCode());
|
|
|
|
|
moveRepository.save(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ApiOperation(value = "客退品查询")
|
|
|
|
|