Merge remote-tracking branch 'origin/dev_temp_xw_202504170000_45858' into uat-temp-wj-chongqingdaqu-prod-huaweiyun

tags/yfai-pcn-ext-v3.7 yfai-pcn-ext-v3.7
王杰 3 months ago
commit 5c6e543f8c

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcPersonModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
@ -110,6 +111,36 @@ public class MesNcProcessingController {
}
}
@PostMapping("/save-nc-lt")
@ApiOperation(value = "NC处理")
public ResultBean lotSaveNc(@RequestBody MesNcProcessingInputModel model) {
try {
ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂不能为空");
ValidatorBean.checkNotNull(model.getUserName(), "操作人不能为空");
ValidatorBean.checkNotNull(model.getPartInspection(), "单据不能为空");
ValidatorBean.checkNotNull(model.getPartInspectionDetailList(), "单据明细不能为空");
if (CollectionUtils.isEmpty(model.getPersonModelList())) {
throw new ImppBusiException("责任人信息不能为空");
}
for (MesNcPersonModel mesNcPersonModel : model.getPersonModelList()) {
if (mesNcPersonModel.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()
|| mesNcPersonModel.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()) {
ValidatorBean.checkNotNull(mesNcPersonModel.getOnlyPerson(), "责任人不能为空");
}
}
if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) {
throw new ImppBusiException("不存在可疑信息,请检查数据");
}
ncProcessingService.saveNc(model, model.getOrganizeCode(), false);
return ResultBean.success("NC处理成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/query-part-inspection-create-user")
@ApiOperation(value = "查询检验人NC-零件检测-单据 表的createUser")
public ResultBean queryPartInspectionCreateUser(String organizeCode) {

@ -42,6 +42,7 @@ import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -136,7 +137,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
//获取NC-零件检测-单据
MesPartInspection partInspection = null;
Integer sourceType;
if (!StringUtils.isEmpty(model.getSn())) {
if (!StringUtils.isEmpty(model.getSn()) && StringUtils.isEmpty(model.getLotNo())) {
// 数据校验
ValidatorBean.checkNotNull(model.getFrontBack(), "正反面不能为空");
//检查条码
@ -164,8 +165,11 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
if(!Objects.isNull(model.getId())){
partInspection = getPartInspectionByPartAndLot(model, model.getOrganizeCode());
}
sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue();
if (!StringUtils.isEmpty(model.getSn())) {
sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.IMPORT.getValue();
} else {
sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue();
}
}
//检查零件类型与图片对应关系
@ -790,13 +794,15 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
* @return
*/
private MesPartInspection getPartInspectionByPartAndLot(MesPartInspectionInputModel inputModel, String org) {
List<Integer> list = Stream.of(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue(),MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.IMPORT.getValue()).collect(Collectors.toList());
//根据扫描的条码查询条码是否存在
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getNumEqualPack(inputModel.getId(), "id", packBean);
DdlPreparedPack.getStringEqualPack(inputModel.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(inputModel.getLotNo(), "lotNo", packBean);
DdlPreparedPack.getNegativeNumEqualPack(inputModel.getQty(), "qty", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue(), "sourceType", packBean);
DdlPreparedPack.getInPackList(list, "sourceType", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
MesPartInspection partInspection = partInspectionRepository.getByProperty(packBean);

@ -4,10 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesNcProcessingDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingPartAndLotModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.*;
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;
@ -22,6 +19,7 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionPerson;
import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask;
import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
@ -124,6 +122,10 @@ public class MesNcProcessingService implements IMesNcProcessingService {
@Autowired
private IMesMoveRuleRepository mesMoveRuleRepository;
@Autowired
private MesPartInspectionPersonRepository mesPartInspectionPersonRepository;
@Override
public ListPager<MesPartInspection> queryPartInspectionByPager(MesPartInspection partInspection, Pager pager) {
@ -204,11 +206,8 @@ public class MesNcProcessingService implements IMesNcProcessingService {
//保存数据
saveDate(model, model.getPart(), type, person, org,model.getInventoryLocationCode(),isOrder);
} else {
Integer type = model.getType();
MesDefectType person = StringUtil.isEmpty(model.getPerson())?new MesDefectType():model.getPerson();
//保存数据
saveDate(model, model.getPart(), type, person, org,model.getInventoryLocationCode(), isOrder);
saveLotDate(model, model.getPart(), org, isOrder);
}
}
@ -698,6 +697,227 @@ public class MesNcProcessingService implements IMesNcProcessingService {
}
}
}
/**
*
*
* @param part
* @param model
* @param org
*/
private void saveLotDate(MesNcProcessingInputModel model, MesPartSap part,String org, boolean isOrder) {
String workCenterCode = null == model.getPartInspection() ? null : model.getPartInspection().getWorkCenterCode();
assert model.getPartInspection() != null;
model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
String refundSource = configService.getCfgValue(org, "REFUND");
List<MesPartInspectionPerson> personList = new ArrayList<>();
MesPartInspection mesPartInspection = model.getPartInspection();
for (MesNcPersonModel mesNcPersonModel : model.getPersonModelList()) {
Integer type = mesNcPersonModel.getNcStatus();
if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.NORMAL.getValue()) {
model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue());
model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.NORMAL.getValue());
ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName());
String sourceValue = configService.getCfgValue(org, "UMLGO");
if (model.getOptType() == 2) {
sourceValue = refundSource;
model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
//partInspectionRepository.save(model.getPartInspection());
MesPartInspectionPerson mesPartInspectionPerson = new MesPartInspectionPerson();
mesPartInspectionPerson.setQty(Double.valueOf(mesNcPersonModel.getQty()));
mesPartInspectionPerson.setNcStatus(mesNcPersonModel.getNcStatus());
mesPartInspectionPerson.setSn(model.getPartInspection().getSn());
mesPartInspectionPerson.setOrganizeCode(model.getOrganizeCode());
mesPartInspectionPerson.setPid(model.getPartInspection().getId());
ConvertBean.serviceModelInitialize(mesPartInspectionPerson, model.getUserName());
personList.add(mesPartInspectionPerson);
String target = configService.getCfgValue(org, "LGORT");
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(model.getPart().getPartNo(), "partNo", ddlPackBean);
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
if (version != null) {
target = version.getReceiveInventoryPoint();
}
//移库 转正常、放行8000移至2000
MesMove move = createLotMove(model,mesNcPersonModel.getQty(), sourceValue, target, org, workCenterCode, MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE);
ConvertBean.serviceModelInitialize(move, model.getUserName());
moveRepository.save(move);
}
else if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()) {
//生成返工单 根据责任方库区对应关系选择哪个责任方就移动到哪个库区8000移至8002/8003
GenSerialNoModel serialNoModel = new GenSerialNoModel("NC_REWORK");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getPartInspection().getModifyUser(), org, 1);
String rework = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
rework = (rb.getResultList().get(0)).toString();
}
MesPartInspectionPerson mesPartInspectionPerson = new MesPartInspectionPerson();
mesPartInspectionPerson.setQty(Double.valueOf(mesNcPersonModel.getQty()));
mesPartInspectionPerson.setNcStatus(mesNcPersonModel.getNcStatus());
mesPartInspectionPerson.setSn(model.getPartInspection().getSn());
mesPartInspectionPerson.setOrganizeCode(model.getOrganizeCode());
mesPartInspectionPerson.setPid(model.getPartInspection().getId());
DdlPackBean partyPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(mesNcPersonModel.getOnlyPerson(), "responsibleParty", partyPackBean);
MesOrg mesOrg = mesOrgRDao.getByProperty(partyPackBean);
mesPartInspectionPerson.setResponsibleParty(mesOrg.getResponsibleParty());
ConvertBean.serviceModelInitialize(mesPartInspectionPerson, model.getUserName());
personList.add(mesPartInspectionPerson);
MesReworkTask reworkTask = new MesReworkTask();
reworkTask.setQty(mesNcPersonModel.getQty());
reworkTask.setSn(model.getPartInspection().getSn());
reworkTask.setReworkOrder(rework);
reworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue());
reworkTask.setPartNo(model.getPartInspection().getPartNo());
reworkTask.setPartName(model.getPartInspection().getPartName());
reworkTask.setPartInspectionId(model.getPartInspection().getId());
reworkTask.setOrganizeCode(org);
reworkTask.setResponsibleParty(mesNcPersonModel.getOnlyPerson());
reworkTask.setDisassembleType(MesPcnExtConstWords.ZERO);
reworkTask.setLotNo(model.getPartInspection().getLotNo());
reworkTask.setType(model.getPartInspection().getSourceType());
ConvertBean.serviceModelInitialize(reworkTask, model.getUserName());
reworkTaskRepository.insert(reworkTask);
//生成返工单明细
List<MesReworkTaskDetail> taskDetailList = new ArrayList<>();
for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) {
MesReworkTaskDetail taskDetail = new MesReworkTaskDetail();
taskDetail.setPid(reworkTask.getId());
taskDetail.setStatus(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_10.getValue());
taskDetail.setPartInspectionDetailId(detail.getId());
taskDetail.setOrganizeCode(org);
ConvertBean.serviceModelInitialize(taskDetail, model.getUserName());
taskDetailList.add(taskDetail);
}
reworkTaskDetailRepository.saveAll(taskDetailList);
//model.getPartInspection().setDefectTypeId(person.getId());
model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue());
model.getPartInspection().setReworkTaskId(reworkTask.getId());
ConvertBean.serviceModelUpdate(model.getPartInspection(),model.getUserName());
String sourceValue = configService.getCfgValue(org, "UMLGO");
if (model.getOptType() == 2) {
sourceValue = refundSource;
model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
//partInspectionRepository.save(model.getPartInspection());
MesMove move = createLotMove(model,mesNcPersonModel.getQty(), sourceValue, mesNcPersonModel.getInventoryLocationCode(), org,workCenterCode, MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE);
ConvertBean.serviceModelInitialize(move, model.getUserName());
moveRepository.save(move);
} else if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()) {
//报废时设置责任人
model.getPartInspection().setResponsibleParty(mesNcPersonModel.getOnlyPerson());
//model.getPartInspection().setDefectTypeId(person.getId());
model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue());
model.getPartInspection().setRejectQty(model.getPartInspection().getQty());
ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName());
if (model.getOptType() == 2) {
model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
//partInspectionRepository.save(model.getPartInspection());
MesPartInspectionPerson mesPartInspectionPerson = new MesPartInspectionPerson();
mesPartInspectionPerson.setQty(Double.valueOf(mesNcPersonModel.getQty()));
mesPartInspectionPerson.setNcStatus(mesNcPersonModel.getNcStatus());
mesPartInspectionPerson.setSn(model.getPartInspection().getSn());
mesPartInspectionPerson.setOrganizeCode(model.getOrganizeCode());
mesPartInspectionPerson.setPid(model.getPartInspection().getId());
DdlPackBean partyPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(mesNcPersonModel.getOnlyPerson(), "responsibleParty", partyPackBean);
MesOrg mesOrg = mesOrgRDao.getByProperty(partyPackBean);
if (mesOrg ==null) {
throw new ImppBusiException(String.format("责任人【%s】不存在", mesNcPersonModel.getOnlyPerson()));
}
mesPartInspectionPerson.setResponsibleParty(mesOrg.getResponsibleParty());
ConvertBean.serviceModelInitialize(mesPartInspectionPerson, model.getUserName());
personList.add(mesPartInspectionPerson);
String sourceValue = configService.getCfgValue(org, "UMLGO");
if (model.getOptType() == 2) {
sourceValue = refundSource;
}
//移库 转报废 根据责任方库区对应关系的主数据选择哪个责任方就移动到哪个库区8000移至8002/8003
MesMove move = createLotMove(model,mesNcPersonModel.getQty(), sourceValue, mesNcPersonModel.getInventoryLocationCode(), org, workCenterCode, MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE);
ConvertBean.serviceModelInitialize(move,model.getUserName());
moveRepository.save(move);
} else if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.RELEASE.getValue()) {
//更新检验单
/* if (model.getType() != 10 && model.getType() != 40) {
model.getPartInspection().setDefectTypeId(person.getId());
}*/
model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue());
model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.RELEASE.getValue());
ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName());
String sourceValue = configService.getCfgValue(org, "UMLGO");
if (model.getOptType() == 2) {
sourceValue = refundSource;
model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
//partInspectionRepository.save(model.getPartInspection());
MesPartInspectionPerson mesPartInspectionPerson = new MesPartInspectionPerson();
mesPartInspectionPerson.setQty(Double.valueOf(mesNcPersonModel.getQty()));
mesPartInspectionPerson.setNcStatus(mesNcPersonModel.getNcStatus());
mesPartInspectionPerson.setSn(model.getPartInspection().getSn());
mesPartInspectionPerson.setOrganizeCode(model.getOrganizeCode());
mesPartInspectionPerson.setPid(model.getPartInspection().getId());
ConvertBean.serviceModelInitialize(mesPartInspectionPerson, model.getUserName());
personList.add(mesPartInspectionPerson);
String target = configService.getCfgValue(org, "LGORT");
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack(model.getPart().getPartNo(), "partNo", ddlPackBean);
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
if (version != null) {
target = version.getReceiveInventoryPoint();
}
//移库 转正常、放行8000移至2000
MesMove move = createLotMove(model,mesNcPersonModel.getQty(), sourceValue, target, org, workCenterCode, MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE);
ConvertBean.serviceModelInitialize(move, model.getUserName());
moveRepository.save(move);
}
}
mesPartInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SUCCESS.getValue());
ConvertBean.serviceModelUpdate(mesPartInspection, model.getUserName());
partInspectionRepository.save(mesPartInspection);
mesPartInspectionPersonRepository.saveAll(personList);
}
public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return null;
return workOrderRepository.getByProperty(
@ -789,6 +1009,33 @@ public class MesNcProcessingService implements IMesNcProcessingService {
return move;
}
private MesMove createLotMove(MesNcProcessingInputModel model,double qty, String source, String target, String org, String workCenterCode, MesExtEnumUtil.MOVE_TYPE moveType) {
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(model.getPart().getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getPartInspection().getModifyUser(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
MesMove move = new MesMove();
move.setMatnr(model.getPart().getPartNo());
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(source);
move.setUmlgo(target);
move.setMenge(qty);
move.setMeins(model.getPart().getUnit());
move.setZrsum(zrsum);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
move.setMoveType(moveType.getValue());
move.setPartInspectionId(model.getPartInspection().getId());
move.setProductSn(model.getSn());
move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode));
return move;
}
private MesMove createMove(MesNcProcessingInputModel model, String source, String target, String org, String workCenterCode, MesExtEnumUtil.MOVE_TYPE moveType, String partNo) {
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(partNo);

@ -0,0 +1,37 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectType;
import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.hibernate.annotations.ColumnDefault;
import javax.persistence.Column;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 18:08
* @Modify:
**/
@Data
public class MesNcPersonModel {
@ApiParam("责任人")
private String onlyPerson;
@ApiParam("区域代码")
private String inventoryLocationCode;
@ApiParam("数量")
private Double qty;
@ApiParam("nc状态-转正常等等 枚举")
private Integer ncStatus;
}

@ -58,4 +58,7 @@ public class MesNcProcessingInputModel {
@ApiModelProperty("操作人")
private String userName;
@ApiParam("批次责任人信息")
private List<MesNcPersonModel> personModelList;
}

Loading…
Cancel
Save