质量 缺陷类型 NC处理

tags/yfai-pcn-ext-v1.0
LML丶 1 year ago
parent c07f31d0df
commit 3d57cb1a84

@ -20,6 +20,9 @@ public interface IMesInputDefectRecordService {
@ApiOperation(value = "扫描产品条码")
public MesInputDefectRecordModel queryProduceSn(String serialNumber, Integer sides, String org);
@ApiOperation(value = "批次录入")
public MesInputDefectRecordModel queryPartAndLot(String partNo, String lot, Integer sides, String org);
@ApiOperation(value = "零件类型缺陷类型对应关系信息")
public List<MesPartTypeDefect> queryPartTypeDefect(String serialNumber, String defectLocationCode, boolean flg, Integer sides, String org);

@ -1,8 +1,14 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
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.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
@ -14,10 +20,13 @@ public interface IMesNcProcessingService {
@ApiOperation(value = "扫描产品条码")
public MesNcProcessingModel queryProduceSn(String serialNumber, String org);
public MesNcProcessingModel queryProduceSn(String serialNumber, String partNo, String lot, String org);
@ApiOperation(value = "查询标记不良的物料及批次")
public ListPager<MesNcProcessingPartAndLotModel> queryPartLot(String partNo, String lot, String org, Pager pager);
@ApiOperation(value = "NC处理")
public void saveNc(String serialNumber,Integer person, Integer type, String org);
public void saveNc(MesNcProcessingInputModel model, String org);
}

@ -0,0 +1,30 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-04-26 15:37
* @Modify:
**/
public interface IMesWorkOrderService {
@ApiOperation(value = "查询工单")
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder);
@ApiOperation(value = "查询工单")
public List<MesWorkOrder> queryMesWorkOrderList(MesWorkOrder workOrder);
@ApiOperation(value = "查询工单")
public ListPager<MesWorkOrder> queryMesWorkOrderListByPager(MesWorkOrder workOrder, Pager pager);
}

@ -36,7 +36,6 @@ public class MesInputDefectRecordController {
ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空");
ValidatorBean.checkNotNull(sides, "正反面不能为空");
// return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryProduceSn(serialNumber, sides, "2031"));
return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryProduceSn(serialNumber, sides, AuthUtil.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
@ -45,6 +44,24 @@ public class MesInputDefectRecordController {
}
}
@GetMapping("/query-part-lot")
@ApiOperation(value = "查询零件号-批次")
public ResultBean queryProduceSn(String partNo, String lot, Integer sides) {
try {
// 数据校验
ValidatorBean.checkNotNull(partNo, "物料不能为空");
ValidatorBean.checkNotNull(lot, "批次不能为空");
ValidatorBean.checkNotNull(sides, "正反面不能为空");
return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryPartAndLot(partNo, lot, sides, AuthUtil.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/query-part-type-defect")
@ApiOperation(value = "查询零件类型缺陷类型对应关系")
public ResultBean queryPartTypeDefect(String partNo, String defectLocationCode, boolean flg, Integer sides) {
@ -71,8 +88,6 @@ public class MesInputDefectRecordController {
try {
// 数据校验
ValidatorBean.checkNotNull(defectRecordList, "选择不良数据不能为空");
// inputDefectRecordService.saveDefectRecord(defectRecordList, "2031");
inputDefectRecordService.saveDefectRecord(defectRecordList, AuthUtil.getOrganizeCode());
return ResultBean.success("完成质检成功");
} catch (ImppBusiException imppException) {

@ -3,9 +3,11 @@ 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.MesInputNcProcessingModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingPartAndLotModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
@ -29,15 +31,34 @@ public class MesNcProcessingController {
@GetMapping("/query")
@ApiOperation(value = "查询产品条码")
public ResultBean queryProduceSn(String serialNumber) {
@ApiOperation(value = "查询产品条码或零件号+批次")
public ResultBean queryProduceSn(String serialNumber, String partNo, String lot) {
try {
// 数据校验
ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空");
if (StringUtils.isEmpty(serialNumber) && (StringUtils.isEmpty(partNo) || StringUtils.isEmpty(lot))) {
throw new ImppBusiException("产品条码为空或零件号+批次为空");
}
// return ResultBean.success("查询成功").setResultObject(ncProcessingService.queryProduceSn(serialNumber, "CK01"));
return ResultBean.success("查询成功").setResultObject(ncProcessingService.queryProduceSn(serialNumber, AuthUtil.getOrganizeCode()));
return ResultBean.success("查询成功").setResultObject(ncProcessingService.queryProduceSn(serialNumber, partNo, lot, AuthUtil.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/query-part-lot")
@ApiOperation(value = "查询零件批次")
public ResultBean queryPartLot(String partNo, String lot, Pager pager) {
try {
// 数据校验
// ValidatorBean.checkNotNull(partNo, "零件号不能为空");
// ValidatorBean.checkNotNull(lot, "不能为空");
ListPager<MesNcProcessingPartAndLotModel> modelList = ncProcessingService.queryPartLot(partNo, lot, AuthUtil.getOrganizeCode(), pager);
return ResultBean.success("查询成功").setListPager(modelList);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
@ -47,12 +68,14 @@ public class MesNcProcessingController {
@PostMapping("/save-nc")
@ApiOperation(value = "NC处理")
public ResultBean saveNc(@RequestBody MesInputNcProcessingModel model) {
public ResultBean saveNc(@RequestBody MesNcProcessingInputModel model) {
try {
// 数据校验
ValidatorBean.checkNotNull(model.getSerialNumber(), "产品条码不能为空");
ValidatorBean.checkNotNull(model.getType(), "类型不能为空");
if (StringUtils.isEmpty(model.getSerialNumber()) && (StringUtils.isEmpty(model.getPartNo()) || StringUtils.isEmpty(model.getLot()))) {
throw new ImppBusiException("产品条码为空或零件号+批次为空");
}
String description = MesPcnExtEnumUtil.NC_TYPE.valueOfDescription(model.getType());
if (StringUtils.isEmpty(description)) {
@ -60,8 +83,7 @@ public class MesNcProcessingController {
}
ncProcessingService.saveNc(model.getSerialNumber(), model.getPerson(), model.getType(), AuthUtil.getOrganizeCode());
// ncProcessingService.saveNc(serialNumber, person, type, AuthUtil.getOrganizeCode());
ncProcessingService.saveNc(model, AuthUtil.getOrganizeCode());
return ResultBean.success("NC处理成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);

@ -0,0 +1,61 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-13 9:06
* @Modify:
**/
@RestController
@Api(tags = "工单")
@RequestMapping(MesCommonConstant.MES_YANFEN + "/work-order")
@Slf4j
public class MesWorkOrderController {
@Autowired
private IMesWorkOrderService workOrderService;
@GetMapping("/query")
@ApiOperation(value = "查询工单")
public ResultBean queryWorkOrder(MesWorkOrder workOrder) {
try {
return ResultBean.success("查询成功").setResultList(workOrderService.queryMesWorkOrderList(workOrder));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/query-pager")
@ApiOperation(value = "查询工单")
public ResultBean queryWorkOrderByPager(MesWorkOrder workOrder, Pager pager) {
try {
return ResultBean.success("查询成功").setListPager(workOrderService.queryMesWorkOrderListByPager(workOrder, pager));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.dao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingPartAndLotModel;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesNcProcessingDao {
@ApiOperation(value = "查询返工返修数据")
int queryDefectRecordByPagerCount(String partNo, String lot, String org);
@ApiOperation(value = "查询停工统计数据")
List<MesNcProcessingPartAndLotModel> queryDefectRecordByPager(String partNo, String lot, String org, Pager pager);
}

@ -0,0 +1,88 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesNcProcessingDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingPartAndLotModel;
import cn.estsh.i3plus.pojo.base.common.Pager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
public class MesNcProcessingDao implements IMesNcProcessingDao {
@Autowired
private EntityManager entityManager;
@Override
public int queryDefectRecordByPagerCount(String partNo, String lot, String org) {
StringBuffer hql = new StringBuffer();
hql.append("select count(1) from mes_defect_record as mdr ");
hql.append(" where mdr.organizeCode = :organizeCode ");
hql.append(" and mdr.isValid = :isValid ");
hql.append(" and mdr.isDeleted = :isDeleted ");
hql.append(" and mdr.part_no = :partNo ");
hql.append(" and mdr.lot = :lot ");
hql.append(" and mdr.nc_type = 0 ");
hql.append(" group by mdr.part_no , mdr.lot ");
Query query = entityManager.createNativeQuery(hql.toString());
query.setParameter("organizeCode", org);
query.setParameter("isValid", 1);
query.setParameter("isDeleted", 2);
List list = query.getResultList();
if (CollectionUtils.isEmpty(list)) {
return 0;
}
return list.size();
}
@Override
public List<MesNcProcessingPartAndLotModel> queryDefectRecordByPager(String partNo, String lot, String org, Pager pager) {
StringBuffer hql = new StringBuffer();
hql.append("select mdr.part_no ,mdr.part_name , mdr.lot from mes_defect_record as mdr ");
hql.append(" where mdr.organizeCode = :organizeCode ");
hql.append(" and mdr.isValid = :isValid ");
hql.append(" and mdr.isDeleted = :isDeleted ");
hql.append(" and mdr.part_no = :partNo ");
hql.append(" and mdr.lot = :lot ");
hql.append(" and mdr.nc_type = 0 ");
hql.append(" group by mdr.part_no ,mdr.part_name , mdr.lot ");
Query query = entityManager.createNativeQuery(hql.toString());
query.setParameter("organizeCode", org);
query.setParameter("isValid", 1);
query.setParameter("isDeleted", 2);
if (pager.getCurrentPage() == 0) {
pager.setCurrentPage(1);
}
query.setMaxResults(pager.getPageSize()); //设置获取的数量
query.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize());
List list = query.getResultList();
List<MesNcProcessingPartAndLotModel> modelList = new ArrayList<>();
for (Object result : list) {
Object[] cells = (Object[]) result;
MesNcProcessingPartAndLotModel model = new MesNcProcessingPartAndLotModel();
String defectPartNo = String.valueOf(cells[0]);
String defectPartName = String.valueOf(cells[1]);
String defectLot = String.valueOf(cells[2]);
model.setPartNo(defectPartNo);
model.setPartName(defectPartName);
model.setLot(defectLot);
modelList.add(model);
}
return modelList;
}
}

@ -78,45 +78,27 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
//检查物料
MesPart part = checkPart(produceSn, org);
//todo 图片暂时放空
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
//位置
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
List<String> locationCodeList = locationConfigList.stream().map(k -> k.getDefectLocationCode()).collect(Collectors.toList());
//构造返回信息
MesInputDefectRecordModel model = getModel(part, partTypePicture, sides, org);
//查询零件类型缺陷类型对应关系
List<MesPartTypeDefect> partTypeDefectList = checkPartTypeDefect(part, org);
List<String> partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectCode()).collect(Collectors.toList());
return model;
}
//查询预警数量
List<MesDefectAlarmConfig> alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, sides, locationCodeList, partTypeDefectCodeList, org);
@Override
public MesInputDefectRecordModel queryPartAndLot(String partNo, String lot, Integer sides, String org) {
//根据不良类型+位置 若有数据,则表示需要标黄
Map<String, MesDefectAlarmConfig> alarmConfigMap = alarmConfigList.stream().collect(Collectors.toMap(k -> k.getDefectLocationCode(), k -> k));
//检查物料
MesPart part = checkPartByPartNo(partNo, org);
// //位置是否标黄Map,key位置value标黄标识
// Map<String, Boolean> map = new HashMap<>();
// alarmConfigMap.forEach((k, v) -> {
// //若有这个位置则标黄
// if (!map.containsKey(k)) {
// map.put(k, true);
// }
//
// });
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
locationConfigList.forEach(k -> {
if (alarmConfigMap.containsKey(k.getDefectLocationCode())) {
k.setIsflg(true);
}
});
//构造返回信息
MesInputDefectRecordModel model = getModel(part, partTypePicture, sides, org);
MesInputDefectRecordModel model = new MesInputDefectRecordModel();
// model.setMap(map);
model.setPart(part);
model.setPartTypePicture(partTypePicture);
model.setLocationConfigList(locationConfigList);
return model;
}
@ -163,54 +145,34 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
@Override
public void saveDefectRecord(List<MesDefectRecord> defectRecordList, String org) {
//检查条码
MesProduceSn produceSn = checkProduceSn(defectRecordList.get(0).getSerialNumber(), org);
//通过条码判断是单件还是批次,
//扫描条码则是单件 没有条码是批次
if (StringUtils.isEmpty(defectRecordList.get(0).getSerialNumber())) {
produceSn.setQcStatus(MesPcnExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
//检查条码
MesProduceSn produceSn = checkProduceSn(defectRecordList.get(0).getSerialNumber(), org);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(produceSn.getPartNo(), "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
produceSn.setQcStatus(MesPcnExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
defectRecordList.forEach(r -> {
r.setId(null);
r.setPartNo(part.getPartNo());
r.setPartName(part.getPartName());
//// r.setOrderId(workOrder.getId());
//// r.setOrderNo(workOrder.getOrderNo());
r.setOrganizeCode(org);
// //更新工单表报废数量
//// workOrder.setRepairQty(workOrder.getRepairQtyVal() + r.getQty());
ConvertBean.serviceModelInitialize(r, AuthUtil.getSessionUser().getUserName());
});
//检查物料
MesPart part = checkPartByPartNo(produceSn.getPartNo(), org);
//保存数据
defectRecordService.saveDefect(org, AuthUtil.getSessionUser().getUserName(), defectRecordList);
//保存数据
saveDate(defectRecordList, part, org);
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
//单件需要修改条码状态 批量则不需要
ConvertBean.serviceModelUpdate(produceSn, AuthUtil.getSessionUser().getUserName());
produceSnRepository.save(produceSn);
} else {
ConvertBean.serviceModelUpdate(produceSn, AuthUtil.getSessionUser().getUserName());
produceSnRepository.save(produceSn);
//检查物料
MesPart part = checkPartByPartNo(defectRecordList.get(0).getPartNo(), org);
MesMove move = new MesMove();
move.setMatnr(part.getPartNo());
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(configService.getCfgValue(org, "LGORT"));
move.setUmlgo(configService.getCfgValue(org, "UMLGO"));
move.setMenge(defectRecordList.size());
move.setMeins(part.getUnit());
move.setZrsum(zrsum);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.save(move);
//保存数据
saveDate(defectRecordList, part, org);
}
}
private MesProduceSn checkProduceSn(String serialNumber, String org) {
@ -231,7 +193,6 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()));
}
//todo
//是否需要判断条码质量状态
if (produceSn.getQcStatus() != MesPcnExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()));
@ -265,6 +226,11 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
//若不存在则提示物料信息不存在
if (StringUtils.isEmpty(part)) {
throw new ImppBusiException(String.format("【%s】物料号不存在请检查数据", partNo));
}
return part;
}
@ -343,24 +309,71 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
return alarmConfigList;
}
private void queryDefectRecordByToDaySumQty(Map<String, Boolean> map, MesPart part, Integer sides, String locationCode, String partTypeDefectCode, Integer count,
String org) {
private MesInputDefectRecordModel getModel(MesPart part, MesPartTypePicture partTypePicture, Integer sides, String org) {
if (map.containsKey(locationCode)) {
return;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean);
DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean);
DdlPreparedPack.getStringEqualPack(locationCode, "defectLocation", packBean);
DdlPreparedPack.getStringEqualPack(partTypeDefectCode, "defectCode", packBean);
DdlPreparedPack.timeBuilder(TimeTool.getToday(), TimeTool.getToday(), "createDatetime", packBean, true);
int defectCount = defectRecordRepository.findByHqlWhereCount(packBean);
//位置
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
List<String> locationCodeList = locationConfigList.stream().map(k -> k.getDefectLocationCode()).collect(Collectors.toList());
//查询零件类型缺陷类型对应关系
List<MesPartTypeDefect> partTypeDefectList = checkPartTypeDefect(part, org);
List<String> partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectCode()).collect(Collectors.toList());
//查询预警数量
List<MesDefectAlarmConfig> alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, sides, locationCodeList, partTypeDefectCodeList, org);
//根据不良类型+位置 若有数据,则表示需要标黄
Map<String, MesDefectAlarmConfig> alarmConfigMap = alarmConfigList.stream().collect(Collectors.toMap(k -> k.getDefectLocationCode(), k -> k));
locationConfigList.forEach(k -> {
if (alarmConfigMap.containsKey(k.getDefectLocationCode())) {
k.setIsflg(true);
}
});
MesInputDefectRecordModel model = new MesInputDefectRecordModel();
model.setPart(part);
model.setPartTypePicture(partTypePicture);
model.setLocationConfigList(locationConfigList);
return model;
}
if (defectCount >= count) {
map.put(locationCode, true);
private void saveDate(List<MesDefectRecord> defectRecordList, MesPart part, String org) {
defectRecordList.forEach(r -> {
r.setId(null);
r.setPartNo(part.getPartNo());
r.setPartName(part.getPartName());
r.setOrganizeCode(org);
ConvertBean.serviceModelInitialize(r, AuthUtil.getSessionUser().getUserName());
});
//保存不良数据
defectRecordService.saveDefect(org, AuthUtil.getSessionUser().getUserName(), defectRecordList);
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
MesMove move = new MesMove();
move.setMatnr(part.getPartNo());
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(configService.getCfgValue(org, "LGORT"));
move.setUmlgo(configService.getCfgValue(org, "UMLGO"));
move.setMenge(defectRecordList.size());
move.setMeins(part.getUnit());
move.setZrsum(zrsum);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.save(move);
}
}

@ -2,13 +2,19 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService;
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.MesNcProcessingViewModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
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.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.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
@ -63,95 +69,79 @@ public class MesNcProcessingService implements IMesNcProcessingService {
@Autowired
private MesMoveRepository moveRepository;
@Autowired
private IMesNcProcessingDao ncProcessingDao;
@Override
public MesNcProcessingModel queryProduceSn(String serialNumber, String org) {
public MesNcProcessingModel queryProduceSn(String serialNumber, String partNo, String lot, String org) {
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecord(serialNumber, org);
if (!StringUtils.isEmpty(serialNumber)) {
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecordBySerialNumber(serialNumber, org);
//检查物料
MesPart part = checkPart(defectRecordList, org);
//检查物料
MesPart part = checkPart(defectRecordList, org);
//todo 图片暂时放空
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
//构造返回结果
MesNcProcessingModel model = getModel(part, defectRecordList, org);
return model;
} else {
//位置
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecordByPartAndLot(partNo, lot, org);
Map<String, List<MesDefectRecord>> defectRecordMap = defectRecordList.stream().collect(Collectors.groupingBy(k -> k.getDefectLocationCode()));
//检查物料
MesPart part = checkPartByPartNo(partNo, org);
//构造返回结果
MesNcProcessingModel model = getModel(part, defectRecordList, org);
return model;
}
}
Map<String, List<MesDefectRecord>> defectMap = defectRecordList.stream().collect(Collectors.groupingBy(k -> k.getDefectCode()));
@Override
public ListPager<MesNcProcessingPartAndLotModel> queryPartLot(String partNo, String lot, String org, Pager pager) {
//位置是否标黄Map,key位置value标黄标识
locationConfigList.forEach(k -> {
if (defectRecordMap.containsKey(k.getDefectLocationCode())) {
k.setIsflg(true);
}
});
pager = PagerHelper.getPager(pager, ncProcessingDao.queryDefectRecordByPagerCount(partNo, lot, org));
List<MesNcProcessingInputModel> defectModelList = new ArrayList<>();
defectMap.forEach((k, v) -> {
MesNcProcessingInputModel model = new MesNcProcessingInputModel();
model.setDefectCode(k);
model.setQty(v.size());
model.setDefectName(v.get(0).getDefectName());
defectModelList.add(model);
});
List<MesNcProcessingPartAndLotModel> modelList = ncProcessingDao.queryDefectRecordByPager(partNo, lot, org, pager);
MesNcProcessingModel model = new MesNcProcessingModel();
model.setDefectModelList(defectModelList);
model.setPartTypePicture(partTypePicture);
model.setLocationConfigList(locationConfigList);
return model;
return new ListPager(modelList, pager);
}
@Override
public void saveNc(String serialNumber, Integer person, Integer type, String org) {
public void saveNc(MesNcProcessingInputModel model, String org) {
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecord(serialNumber, org);
if (!StringUtils.isEmpty(model.getSerialNumber())) {
String serialNumber = model.getSerialNumber();
Integer type = model.getType();
Integer person = model.getPerson();
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecordBySerialNumber(serialNumber, org);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
//检查物料
MesPart part = checkPartByPartNo(defectRecordList.get(0).getPartNo(), org);
GenSerialNoModel serialNoModel = new GenSerialNoModel("NC_DEFECT_ZRSUM");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
//保存数据
saveDate(part, defectRecordList, type, person, org);
} else {
if (type == MesPcnExtEnumUtil.NC_TYPE.NORMAL.getValue()) {
MesMove move = new MesMove();
move.setMatnr(part.getPartNo());
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(configService.getCfgValue(org, "UMLGO"));
move.setUmlgo(configService.getCfgValue(org, "LGORT"));
move.setMenge(defectRecordList.size());
move.setMeins(part.getUnit());
move.setZrsum(zrsum);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
// ConvertBean.serviceModelInitialize(move, "LML");
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.save(move);
}
String partNo = model.getPartNo();
String lot = model.getLot();
Integer type = model.getType();
Integer person = model.getPerson();
defectRecordList.forEach(k -> {
k.setNcType(type);
k.setPerson(person);
// ConvertBean.serviceModelUpdate(k, "LML");
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
});
//检查不良条码
List<MesDefectRecord> defectRecordList = queryDefectRecordByPartAndLot(partNo, lot, org);
defectRecordRepository.saveAll(defectRecordList);
//检查物料
MesPart part = checkPartByPartNo(partNo, org);
//保存数据
saveDate(part, defectRecordList, type, person, org);
}
}
private MesPart checkPart(List<MesDefectRecord> defectRecordList, String org) {
@ -174,12 +164,27 @@ public class MesNcProcessingService implements IMesNcProcessingService {
return part;
}
private MesPart checkPartByPartNo(String partNo, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
MesPart part = partRepository.getByProperty(packBean);
private List<MesDefectRecord> queryDefectRecord(String serialNumber, String org) {
//若不存在则提示物料信息不存在
if (StringUtils.isEmpty(part)) {
throw new ImppBusiException(String.format("【%s】物料号不存在请检查数据", partNo));
}
return part;
}
private List<MesDefectRecord> queryDefectRecordBySerialNumber(String serialNumber, String org) {
//查询扫描的条码
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(serialNumber, "serialNumber", packBean);
// DdlPreparedPack.getNumEqualPack(0, "ncType", packBean);
List<MesDefectRecord> defectRecordList = defectRecordRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(defectRecordList)) {
@ -196,6 +201,29 @@ public class MesNcProcessingService implements IMesNcProcessingService {
return defectRecordList;
}
private List<MesDefectRecord> queryDefectRecordByPartAndLot(String partNo, String Lot, String org) {
//查询扫描的条码
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
DdlPreparedPack.getStringEqualPack(Lot, "Lot", packBean);
// DdlPreparedPack.getNumEqualPack(0, "ncType", packBean);
List<MesDefectRecord> defectRecordList = defectRecordRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(defectRecordList)) {
throw new ImppBusiException(String.format("【%s】此物料号+【%s】批次不存在可疑品记录请检查数据", partNo, Lot));
}
defectRecordList.forEach(k -> {
if (k.getNcType() != 0) {
throw new ImppBusiException(String.format("【%s】此物料号+【%s】批次已经过NC处理请检查数据", partNo, Lot));
}
});
return defectRecordList;
}
private MesPartTypePicture checkPartTypePicture(MesPart part, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
@ -243,4 +271,92 @@ public class MesNcProcessingService implements IMesNcProcessingService {
return configList;
}
/**
*
*
* @param part
* @param defectRecordList
* @param org
* @return
*/
private MesNcProcessingModel getModel(MesPart part, List<MesDefectRecord> defectRecordList, String org) {
//todo 图片暂时放空
//检查零件类型与图片对应关系
MesPartTypePicture partTypePicture = checkPartTypePicture(part, org);
//位置
List<MesLocationConfig> locationConfigList = checkLocationConfig(org);
Map<String, List<MesDefectRecord>> defectRecordMap = defectRecordList.stream().collect(Collectors.groupingBy(k -> k.getDefectLocationCode()));
Map<String, List<MesDefectRecord>> defectMap = defectRecordList.stream().collect(Collectors.groupingBy(k -> k.getDefectCode()));
//位置是否标黄Map,key位置value标黄标识
locationConfigList.forEach(k -> {
if (defectRecordMap.containsKey(k.getDefectLocationCode())) {
k.setIsflg(true);
}
});
List<MesNcProcessingViewModel> defectModelList = new ArrayList<>();
defectMap.forEach((k, v) -> {
MesNcProcessingViewModel model = new MesNcProcessingViewModel();
model.setDefectCode(k);
model.setQty(v.size());
model.setDefectName(v.get(0).getDefectName());
defectModelList.add(model);
});
MesNcProcessingModel model = new MesNcProcessingModel();
model.setDefectModelList(defectModelList);
model.setPartTypePicture(partTypePicture);
model.setLocationConfigList(locationConfigList);
return model;
}
/**
*
*
* @param part
* @param defectRecordList
* @param type
* @param person
* @param org
*/
private void saveDate(MesPart part, List<MesDefectRecord> defectRecordList, Integer type, Integer person, String org) {
GenSerialNoModel serialNoModel = new GenSerialNoModel("NC_DEFECT_ZRSUM");
serialNoModel.setPartNo(part.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
if (type == MesPcnExtEnumUtil.NC_TYPE.NORMAL.getValue()) {
MesMove move = new MesMove();
move.setMatnr(part.getPartNo());
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(configService.getCfgValue(org, "UMLGO"));
move.setUmlgo(configService.getCfgValue(org, "LGORT"));
move.setMenge(defectRecordList.size());
move.setMeins(part.getUnit());
move.setZrsum(zrsum);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.save(move);
}
defectRecordList.forEach(k -> {
k.setNcType(type);
k.setPerson(person);
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
});
defectRecordRepository.saveAll(defectRecordList);
}
}

@ -0,0 +1,79 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
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.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 10:54
* @Modify:
**/
@Service
@Slf4j
public class MesWorkOrderService implements IMesWorkOrderService {
@Autowired
private MesWorkOrderRepository workOrderRepository;
@Override
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) {
DdlPackBean packBean = getDdlPackBean(workOrder);
MesWorkOrder result = workOrderRepository.getByProperty(packBean);
if (StringUtils.isEmpty(result)) {
throw new ImppBusiException("查询工单不存在,请检查数据");
}
return result;
}
@Override
public List<MesWorkOrder> queryMesWorkOrderList(MesWorkOrder workOrder) {
DdlPackBean packBean = getDdlPackBean(workOrder);
return workOrderRepository.findByHqlWhere(packBean);
}
@Override
public ListPager<MesWorkOrder> queryMesWorkOrderListByPager(MesWorkOrder workOrder, Pager pager) {
DdlPackBean packBean = getDdlPackBean(workOrder);
pager = PagerHelper.getPager(pager, workOrderRepository.findByHqlWhereCount(packBean));
List<MesWorkOrder> resultList = workOrderRepository.findByHqlWherePage(packBean, pager);
return new ListPager<>(resultList, pager);
}
private DdlPackBean getDdlPackBean(MesWorkOrder workOrder) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(workOrder.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean);
DdlPreparedPack.getStringLikerPack(workOrder.getOrderNo(), "orderNo", packBean);
DdlPreparedPack.getInPackList(workOrder.getStatusList(), "status", packBean);
return packBean;
}
}

@ -14,15 +14,21 @@ import lombok.Data;
public class MesNcProcessingInputModel {
@ApiParam("缺陷类型")
private String defectCode;
@ApiParam("条码")
private String serialNumber;
@ApiParam("责任人")
private Integer person;
@ApiParam("缺陷描述")
private String defectName;
@ApiParam("类型")
private Integer type;
@ApiParam("物料号")
private String partNo;
@ApiParam("批次")
private String lot;
@ApiParam("缺陷描述")
private Integer qty;
}

@ -27,7 +27,7 @@ public class MesNcProcessingModel {
private MesPartTypePicture partTypePicture;
@ApiParam("缺陷列表")
private List<MesNcProcessingInputModel> defectModelList;
private List<MesNcProcessingViewModel> defectModelList;
@ApiParam("物料")
private MesPart part;

@ -11,18 +11,17 @@ import lombok.Data;
* @Modify:
**/
@Data
public class MesInputNcProcessingModel {
public class MesNcProcessingPartAndLotModel {
@ApiParam("条码")
private String serialNumber;
@ApiParam("物料号")
private String partNo;
@ApiParam("物料描述")
private String partName;
@ApiParam("责任人")
private Integer person;
@ApiParam("类型")
private Integer type;
@ApiParam("批次")
private String lot;
}

@ -0,0 +1,27 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* @Description :
* @Reference :
* @Author :
* @CreateDate : 2024-05-09 18:08
* @Modify:
**/
@Data
public class MesNcProcessingViewModel {
@ApiParam("缺陷类型")
private String defectCode;
@ApiParam("缺陷描述")
private String defectName;
@ApiParam("缺陷描述")
private Integer qty;
}
Loading…
Cancel
Save