Merge remote-tracking branch 'origin/dev' into dev-wuhan

# Conflicts:
#	modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java
tags/yfai-pcn-ext-v2.3
yxw 8 months ago
commit 9841ac7cde

@ -0,0 +1,11 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion;
import io.swagger.annotations.ApiOperation;
public interface IMesProductVersionService {
@ApiOperation(value = "查询生产版本")
MesProductVersion getMesProductVersion(String organizeCode,String partNo,String productVersion);
}

@ -4,6 +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.base.IMesReworkTaskService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
@ -111,6 +112,12 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired
private IMesAssemblyExtService mesAssemblyExtService;
@Autowired
private MesProductionAssemblyUniqueRepository mesProductionAssemblyUniqueRepository;
@Override
public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) {
String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode();
@ -208,9 +215,30 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
if (CollectionUtils.isEmpty(mesProductionAssemblies)) {
MesPcnException.throwFlowException("装配件信息不存在");
}
//装配件是自制件,查询自制件经过的装配件记录
recursionAssemblySn(mesProductionAssemblies,requestModel);
return mesProductionAssemblies;
}
public void recursionAssemblySn(List<MesProductionAssembly> mesProductionAssemblyList,MesReworkTaskRequestModel requestModel){
DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode());
DdlPreparedPack.getInPackList(mesProductionAssemblyList.stream().map(MesProductionAssembly::getAssemblySn).distinct().collect(Collectors.toList()), "productSn", packBean);
DdlPreparedPack.getNumEqualPack(requestModel.getIsOrigSn(), "isOrigSn", packBean);
if (!StringUtils.isEmpty(requestModel.getAssemblyPartNo())) {
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean);
}
if (!Objects.isNull(requestModel.getAssemblyPartStatus())) {
DdlPreparedPack.getNumEqualPack(requestModel.getAssemblyPartStatus(), "assemblyStatus", packBean);
}
List<MesProductionAssembly> mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean);
if(!CollectionUtils.isEmpty(mesProductionAssemblies)){
recursionAssemblySn(mesProductionAssemblies,requestModel);
mesProductionAssemblyList.addAll(mesProductionAssemblies);
}
}
@Override
public void reworkSuccess(MesReworkTaskRequestModel requestModel) {
@ -239,6 +267,16 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesReworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue());
ConvertBean.serviceModelUpdate(mesReworkTask,requestModel.getUserName());
mesReworkTaskRepository.save(mesReworkTask);
if (!StringUtils.isEmpty(mesReworkTask.getId())){
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "reworkTaskId", packBean);
MesPartInspection mesPartInspection = mesPartInspectionRepository.getByProperty(packBean);
if (!StringUtils.isEmpty(mesReworkTask.getId())){
mesPartInspection.setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesPartInspection, requestModel.getUserName());
mesPartInspectionRepository.update(mesPartInspection);
}
}
}
@Override
@ -321,10 +359,9 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
// 需要新增一条替换条码的记录
MesProductionAssembly mesProductionRepeatAssembly = new MesProductionAssembly();
BeanUtils.copyProperties(assembly, mesProductionRepeatAssembly);
BeanUtils.copyProperties(assembly, mesProductionRepeatAssembly,MesPcnExtConstWords.ID);
mesProductionRepeatAssembly.setAssemblySn(requestModel.getSn());
mesProductionRepeatAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue());
mesProductionRepeatAssembly.setId(null);
mesProductionRepeatAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
mesProductionRepeatAssembly.setFid(UUID .randomUUID().toString());
ConvertBean.serviceModelInitialize(mesProductionRepeatAssembly,requestModel.getUserName());
@ -334,17 +371,14 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
ConvertBean.serviceModelUpdate(assembly,requestModel.getUserName());
mesProductionAssemblyRepository.update(assembly);
// 新装配件记录为已装配
mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
MesProductionAssembly productionAssembly = mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
//唯一性校验数据更新
if (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue() == assembly.getMatchType()) {
saveProductionAssemblyUnique(requestModel, assembly.getAssemblySn(), productionAssembly);
}
//自制件更新条码状态
if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getValue() == assembly.getMatchType()){
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(requestModel.getOrganizeCode(), requestModel.getSn());
if (CollectionUtils.isEmpty(produceSnList)) MesPcnException.throwFlowException("零件条码[%s]信息不存在!", requestModel.getSn());
Optional<MesProduceSn> optional = produceSnList.stream().filter(sn->sn.getId().equals(((MesProductionAssemblyContext)context).getProductSnId())).findFirst();
if (!optional.isPresent()) MesPcnException.throwFlowException("零件条码[%s]信息不存在!", requestModel.getSn());
// 更新新替换得条码为已装配
updateNewSn(optional.get(),requestModel.getUserName());
//更新原条码状态为已拆解
updateOldSn(assembly);
updateProductSn(requestModel, assembly, (MesProductionAssemblyContext) context);
}
checkResult = false;
break;
@ -359,6 +393,43 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
}
}
private void updateProductSn(MesReworkTaskRequestModel requestModel, MesProductionAssembly assembly, MesProductionAssemblyContext context) {
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(requestModel.getOrganizeCode(), requestModel.getSn());
if (CollectionUtils.isEmpty(produceSnList)) MesPcnException.throwFlowException("零件条码[%s]信息不存在!", requestModel.getSn());
Optional<MesProduceSn> optional = produceSnList.stream().filter(sn->sn.getId().equals(context.getProductSnId())).findFirst();
if (!optional.isPresent()) MesPcnException.throwFlowException("零件条码[%s]信息不存在!", requestModel.getSn());
// 更新新替换得条码为已装配
updateNewSn(optional.get(), requestModel.getUserName());
//更新原条码状态为已拆解
updateOldSn(assembly);
}
private void saveProductionAssemblyUnique(MesReworkTaskRequestModel requestModel, String assemblySN, MesProductionAssembly productionAssembly) {
//绑定数据解绑
saveProductionAssemblyUnique(requestModel, assemblySN);
//唯一性校验数据保存
saveProductionAssemblyUnique(productionAssembly);
}
private void saveProductionAssemblyUnique(MesReworkTaskRequestModel requestModel, String assemblySN) {
List<MesProductionAssemblyUnique> assemblyUniqueList = mesAssemblyExtService.getProductionAssemblyUniqueList(requestModel.getOrganizeCode(), assemblySN);
if(!CollectionUtils.isEmpty(assemblyUniqueList)){
assemblyUniqueList.forEach(t->{
t.setSystemSyncStatus(CommonEnumUtil.FALSE);
t.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue());
ConvertBean.serviceModelUpdate(t, requestModel.getUserName());
});
mesProductionAssemblyUniqueRepository.saveAll(assemblyUniqueList);
}
}
private void saveProductionAssemblyUnique(MesProductionAssembly productionAssembly) {
MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique();
BeanUtils.copyProperties(productionAssembly, productionAssemblyUnique, MesPcnExtConstWords.ID);
productionAssemblyUnique.setPid(productionAssembly.getId());
mesProductionAssemblyUniqueRepository.insert(productionAssemblyUnique);
}
private Object getContext(MesReworkTaskRequestModel requestModel, MesProductionAssembly mesProductionAssembly,Map<String,MesWorkCenter> mesWorkCenterMap) {
if(StringUtils.isEmpty(mesProductionAssembly.getWorkCenterCode())) MesPcnException.throwFlowException("产线代码不存在");
Object context = null;
@ -492,10 +563,9 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
// 需要新增一条替换条码的记录
MesProductionAssembly mesProductionRepeatAssembly = new MesProductionAssembly();
BeanUtils.copyProperties(mesProductionAssembly, mesProductionRepeatAssembly);
BeanUtils.copyProperties(mesProductionAssembly, mesProductionRepeatAssembly,MesPcnExtConstWords.ID);
mesProductionRepeatAssembly.setAssemblySn(sn);
mesProductionRepeatAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue());
mesProductionRepeatAssembly.setId(null);
mesProductionRepeatAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
mesProductionRepeatAssembly.setFid(UUID .randomUUID().toString());
@ -509,7 +579,11 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesProductionAssemblyRepository.update(mesProductionAssembly);
// 新装配件记录为已装配
ConvertBean.serviceModelInitialize(mesProductionRepeatAssembly,requestModel.getUserName());
mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
MesProductionAssembly productionAssembly = mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
//唯一性校验数据更新
if (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue() == mesProductionAssembly.getMatchType()) {
saveProductionAssemblyUnique(requestModel, mesProductionAssembly.getAssemblySn(), productionAssembly);
}
}
/**
* NC

@ -209,6 +209,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
MesProduceSn produceSn = getProduceSn(model.getSn(), org);
if(!StringUtils.isEmpty(model.getPartInspection())){
model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
}
//零件检测详情为空,则代表本次校验为合格。
if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) {
MesPartInspection partInspection;
@ -354,7 +357,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue());
ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName());
partInspectionRepository.save(model.getPartInspection());
//查询当前单据明细
List<MesPartInspectionDetail> resultDetailList = queryResultDetailList(model, org);
@ -387,23 +390,9 @@ 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.SUSPICIOUS.getValue());
String defectTypeCode = MesEnumUtil.DEFECT_TYPE_CODE.DETERMIND.getValue();
String defectTypeCodeStr = configService.getCfgValue(org, "MES_SUSPICIOUS_DEFECT_TYPE_CODE") == null ? "QX130" :configService.getCfgValue(org, "MES_SUSPICIOUS_DEFECT_TYPE_CODE");
//根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(defectTypeCodeStr, "defectTypeCode", packBean);
MesDefectType defectType = defectTypeRepository.getByProperty(packBean);
model.getPartInspection().setDefectTypeCode(defectType.getDefectTypeCode());
model.getPartInspection().setDefectTypeId(defectType.getId());
ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName());
produceSnExtService.update(produceSn);
}
partInspectionRepository.save(model.getPartInspection());
partInspectionDetailRepository.saveAll(resultDetailList);
partInspectionDetailRepository.saveAll(model.getPartInspectionDetailList());

@ -8,6 +8,7 @@ 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.util.MesPcnExtConstWords;
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;
@ -37,6 +38,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -322,7 +324,8 @@ public class MesNcProcessingService implements IMesNcProcessingService {
private void saveDate(MesNcProcessingInputModel model, MesPartSap part, Integer type, MesDefectType person, String org,String areaCode, boolean isOrder) {
String workCenterCode = null == model.getPartInspection() ? null : model.getPartInspection().getWorkCenterCode();
assert model.getPartInspection() != null;
model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
MesProduceSn sn = getProduceSn(model.getSn(), org);
String source = configService.getCfgValue(org, "LGORT");
@ -384,6 +387,7 @@ public class MesNcProcessingService implements IMesNcProcessingService {
reworkTask.setPartInspectionId(model.getPartInspection().getId());
reworkTask.setOrganizeCode(org);
reworkTask.setResponsibleParty(model.getOnlyPerson());
reworkTask.setDisassembleType(disassembleType(model, org, sn));
reworkTask.setLotNo(model.getPartInspection().getLotNo());
reworkTask.setType(model.getPartInspection().getSourceType());
ConvertBean.serviceModelInitialize(reworkTask, model.getUserName());
@ -476,6 +480,26 @@ public class MesNcProcessingService implements IMesNcProcessingService {
}
private int disassembleType(MesNcProcessingInputModel model, String org, MesProduceSn sn) {
if (MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue() == model.getPartInspection().getSourceType()) {
if (Objects.isNull(sn)) {
throw new ImppBusiException(String.format("【%s】此条码不存在请检查数据", model.getSn()));
}
//产线信息
MesWorkCenter centerDb = prodOrgExtService.getWorkCenterDb(org, sn.getWorkCenterCode());
if (Objects.isNull(centerDb)) {
throw new ImppBusiException(String.format("产线【%s】信息不存在请检查数据", sn.getWorkCenterCode()));
}
//拆解类型
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == centerDb.getCenterType()) {
return MesExtEnumUtil.REWORK_TASK_DISASSEMBLE_TYPE.SORT_DISASSEMBLE.getValue();
} else if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == centerDb.getCenterType()) {
return MesExtEnumUtil.REWORK_TASK_DISASSEMBLE_TYPE.NOSORT_DISASSEMBLE.getValue();
}
}
return MesPcnExtConstWords.ZERO;
}
private MesProduceSn checkProduceSn(String serialNumber, String org) {
//根据扫描的条码查询条码是否存在
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);

@ -0,0 +1,37 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductVersionService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion;
import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/4 9:29
* @Modify:
**/
@Service
@Slf4j
public class MesProductVersionServiceImpl implements IMesProductVersionService {
@Autowired
private MesProductVersionRepository mesProductVersionRepository;
@Override
public MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) {
if(StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(productVersion)){
return null;
}
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean);
return mesProductVersionRepository.getByProperty(ddlPackBean);
}
}

@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesRawPartChargingModel;
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.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.*;
@ -117,7 +118,12 @@ public class MesRawPartChargingServiceImpl implements IMesRawPartChargingService
checkNotNull(mesRawPartChargingModel);
ValidatorBean.checkNotNull(mesRawPartChargingModel.getMesRawPackagePart(), "原材料容器零件关系不能为空");
ValidatorBean.checkNotNull(mesRawPartChargingModel.getSn(), "原料条码不能为空");
ValidatorBean.checkNotNull(mesRawPartChargingModel.getLotNo(), "批次号不能为空");
// ValidatorBean.checkNotNull(mesRawPartChargingModel.getLotNo(), "批次号不能为空");
//校验是否已扫描
List<MesRawPartCharging> mesRawPartCharging = findMesRawPartCharging(mesRawPartChargingModel);
if (!CollectionUtils.isEmpty(mesRawPartCharging)) {
MesPcnException.throwMesBusiException("料筒条码【%s】与原料条码【%s】已绑定", mesRawPartChargingModel.getPackageSn(), mesRawPartCharging.iterator().next().getSn());
}
//保存生产控制加料
MesRawPartCharging charging = insertRawPartCharging(mesRawPartChargingModel);
//保存日志
@ -135,7 +141,9 @@ public class MesRawPartChargingServiceImpl implements IMesRawPartChargingService
}
for (MesRawPartCharging mesRawPartCharging : mesRawPartChargingList) {
//删除绑定信息
mesRawPartChargingRepository.deleteWeaklyById(mesRawPartCharging.getId(), mesRawPartChargingModel.getUserName());
mesRawPartCharging.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
ConvertBean.serviceModelUpdate(mesRawPartCharging,mesRawPartChargingModel.getUserName());
mesRawPartChargingRepository.update(mesRawPartCharging);
//保存日志
saveLog(mesRawPartChargingModel, mesRawPartCharging, MesExtEnumUtil.CHARGING_LOG_STATUS.CLEAR);
}
@ -249,7 +257,7 @@ public class MesRawPartChargingServiceImpl implements IMesRawPartChargingService
mesRawPartCharging.setQty(mesRawPartChargingModel.getMesRawPackagePart().getQty());
}
mesRawPartCharging.setLoadPartTime(TimeTool.getNowTime(true));
mesRawPartCharging.setLotNo(mesRawPartChargingModel.getLotNo());
mesRawPartCharging.setLotNo(StringUtils.isEmpty(mesRawPartChargingModel.getLotNo())?"":mesRawPartChargingModel.getLotNo());
mesRawPartCharging.setParentPackageSn(mesRawPartChargingModel.getPackageSn());
mesRawPartCharging.setPackageId(mesRawPartChargingModel.getMesRawPackageModel().getMesRawPackage().getId());
mesRawPartCharging.setFid(UUID.randomUUID().toString());

@ -140,22 +140,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
orderManagement.getShippingCode(), orderManagement.getSeq()));
}
}
//根据发运单查询装车单明细信息
boolean isUpdate = false;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(shippingOrderManagement.getShippingCode(),"shippingCode",packBean);
MesLoadingListDetail listDetail = listDetailRepository.getByProperty(packBean);
if(!Objects.isNull(listDetail)){
packBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean);
MesLoadingList loadingList = listRepository.getByProperty(packBean);
if(!Objects.isNull(loadingList)){
orderManagement.setOrderCode(loadingList.getOrderCode());
orderManagement.setLoadingListId(loadingList.getId());
isUpdate = true;
}
}
//根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据!
if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) {
@ -219,11 +203,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
model.setRecentlyScanShippingCode(recentlyVehiclesOrder.getShippingCode());
}
//发运单关联装车单字段赋值
if(isUpdate){
ConvertBean.serviceModelUpdate(orderManagement,shippingOrderManagement.getModifyUser());
update(orderManagement);
}
return model;
}
@ -499,7 +478,19 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()) {
orderManagement.setStartScanTime(TimeTool.getNowTime(true));
}
//根据发运单查询装车单明细信息
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingCode(),"shippingCode",packBean);
MesLoadingListDetail listDetail = listDetailRepository.getByProperty(packBean);
if(!Objects.isNull(listDetail)){
packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean);
MesLoadingList loadingList = listRepository.getByProperty(packBean);
if(!Objects.isNull(loadingList)){
orderManagement.setOrderCode(loadingList.getOrderCode());
orderManagement.setLoadingListId(loadingList.getId());
}
}
//发运单状态修改为校验完成
orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE);
orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue());
@ -515,7 +506,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
List<MesProduceSn> produceSnList = new ArrayList<>();
for (MesShippingOrderManagementDetail detail : orderManagementDetailList) {
//根据扫描的条码查询条码是否存在
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "productSn", packBean);
} else {
@ -545,6 +536,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if(!CollectionUtils.isEmpty(produceSnList)){
produceSnRepository.saveAll(produceSnList);
}
//更新发运单
ConvertBean.serviceModelUpdate(orderManagement,userInfo);
update(orderManagement);
shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList);
//1.更新装车单明细对应的发运单状态=发运

@ -141,24 +141,31 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
//校验点检单
checkSpotCheckOrder(model.getSpotCheckOrder());
//检查条码
MesProduceSn produceSn = checkProduceSn(model.getProduceSn(), org);
//校验设备信息
if (MesExtEnumUtil.SPOT_CHECK_ORDER_TYPE.PROCESS_PARAMETER_INSPECTION.getValue() == model.getSpotCheckOrder().getSpotCheckOrderType() ||
MesExtEnumUtil.SPOT_CHECK_ORDER_TYPE.EQUIPMENT_INSPECTION.getValue() == model.getSpotCheckOrder().getSpotCheckOrderType()) {
checkEquipment(model, org);
return model;
} else {
//检查条码
MesProduceSn produceSn = checkProduceSn(model.getProduceSn(), org);
boolean flg = false;
for (MesSpotCheckOrderPart spotCheckOrderPart : model.getOrderPartList()) {
boolean flg = false;
for (MesSpotCheckOrderPart spotCheckOrderPart : model.getOrderPartList()) {
if (spotCheckOrderPart.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(spotCheckOrderPart.getSn())) {
flg = true;
spotCheckOrderPart.setSn(model.getProduceSn());
break;
if (spotCheckOrderPart.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(spotCheckOrderPart.getSn())) {
flg = true;
spotCheckOrderPart.setSn(model.getProduceSn());
break;
}
}
}
if (!flg) {
throw new ImppBusiException(String.format("扫描的条码【%s】对应的物料号【%s】在点检单中不存在", produceSn.getProductSn(), produceSn.getPartNo()));
}
if (!flg) {
throw new ImppBusiException(String.format("扫描的条码【%s】对应的物料号【%s】在点检单中不存在", produceSn.getProductSn(), produceSn.getPartNo()));
}
return model;
return model;
}
}
/**
@ -611,5 +618,15 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
return produceSn;
}
private void checkEquipment(MesSpotCheckOrderModel model, String org) {
MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(org, model.getSpotCheckOrder().getEquipCode());
if (Objects.isNull(mesEquipment)) {
throw new ImppBusiException(String.format("点检单对应的设备【%s】信息不存在", model.getSpotCheckOrder().getEquipCode()));
}
if (StringUtils.isEmpty(mesEquipment.getEquipId()) || !model.getProduceSn().equals(mesEquipment.getEquipId() + "")) {
throw new ImppBusiException(String.format("点检单对应的设备编号【%s】和扫描的设备编号【%s】不匹配请检查数据", mesEquipment.getEquipId(), model.getProduceSn()));
}
}
}

@ -1,12 +1,11 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
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.base.IMesShiftService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
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.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -112,6 +111,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private IMesProdOrgExtService mesProdOrgExtService;
@Autowired
private IMesProductVersionService mesProductVersionService;
@Override
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) {
@ -634,6 +639,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
workOrderExtService.update(oldMesWorkOrder);
//查询工作中心
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(oldMesWorkOrder.getId(), "id", orderPackBean);
workOrderRepository.updateByProperties(new String[]{"systemSyncStatus"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}, orderPackBean);
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
MesProductOffLine newMesProductOffLine;
@ -978,20 +989,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//查询物料信息
MesPart mesPart = iMesPartService.getMesPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode());
//查询产线信息
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getWorkCenterCode(), "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter)) {
MesPcnException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
}
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb);
//获取生产版本
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getProductVersion(), "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
}
MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb);
//物料+生产版本获取bom信息
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty()));
@ -999,19 +999,15 @@ public class MesWorkOrderService implements IMesWorkOrderService {
double unCompleteQty = MathOperation.sub(mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty());
mesWorkOrderDb.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
if (mesWorkOrderDb.getReportedQty() > mesWorkOrderDb.getQty()) {
//查询产线信息
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(), "workCenterCode", packBean);
MesWorkCenter workCenter = mesWorkCenterRDao.getByProperty(packBean);
// 以下则是超工单逻辑
// 如果产线中没有配置超工单,则直接阻断
if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) {
if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCenter.getIsCheckOrderQty())) {
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
}
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty());
if (rate > MathOperation.div(workCenter.getOrderRate(), 100)) {
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate());
if (rate > MathOperation.div(mesWorkCenter.getOrderRate(), 100)) {
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), mesWorkCenter.getOrderRate());
}
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else if (Objects.equals(mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty())) {
@ -1021,7 +1017,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
}
mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty());
mesWorkOrderDb.setRemark(mesWorkOrder.getRemark());
String sn = getOrderNo(mesWorkOrder, mesPart, userName);
String sn = getOrderNo(mesWorkOrder.getOrganizeCode(),userName);
//更新工单
updateMesWorkOrder(mesWorkOrderDb, userName,mesWorkOrder.getNum());
//记录条码表&加工记录表
@ -1039,6 +1035,22 @@ public class MesWorkOrderService implements IMesWorkOrderService {
}
}
private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
if (null == mesProductVersion) {
MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getProductVersion());
}
return mesProductVersion;
}
private MesWorkCenter getMesWorkCenter(MesWorkOrder mesWorkOrderDb) {
MesWorkCenter mesWorkCenter = mesProdOrgExtService.getWorkCenterDb(mesWorkOrderDb.getOrganizeCode(), mesWorkOrderDb.getWorkCenterCode());
if (Objects.isNull(mesWorkCenter)) {
MesPcnException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
}
return mesWorkCenter;
}
private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) {
if (StringUtil.isEmpty(bean.getPlanOrderNo())) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
@ -1246,10 +1258,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
}
private String getOrderNo(MesWorkOrder mesWorkOrder, MesPart mesPart, String userName) {
if (StringUtils.isEmpty(mesPart.getProductMatchRule()))
MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo());
return syncFuncService.syncSerialNo(new GenSerialNoModel(mesPart.getProductMatchRule()).prodLocation(mesWorkOrder.getWorkCenterCode()).partNo(mesPart.getPartNo()).putDataMap(MesPart.class.getSimpleName(), mesPart).organizeCode(mesPart.getOrganizeCode()), userName, mesWorkOrder.getOrganizeCode(), 1).getResultList().get(0).toString();
private String getOrderNo(String organizeCode,String userName) {
return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString();
}
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -108,7 +109,7 @@ public class MesEquipVariableCollectContext implements Serializable {
//读取信息赋值
public void copyValue(MesEquipmentLog equipmentLog) {
if (null == equipmentLog) return;
BeanUtils.copyProperties(equipmentLog, this, "categoryLevelTwo");
BeanUtils.copyProperties(equipmentLog, this, MesPcnExtConstWords.CATEGORY_LEVEL_TWO);
this.messageSource = MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue();
}

@ -217,7 +217,7 @@ public class MesPcnExtConstWords {
// 读取失败睡眠毫秒数[工步参数]
public static final String READ_FAILURE_SLEEP = "READ_FAILURE_SLEEP";
// 读取失败睡眠默认毫秒数
public static final Long READ_FAILURE_SLEEP_DEFAULT_TIME = 2000L;
public static final Long READ_FAILURE_SLEEP_DEFAULT_TIME = 500L;
// 最大重试次数[工步参数]
public static final String MAX_RETRY_TIMES = "MAX_RETRY_TIMES";
// 最大重试次数[工步参数]

Loading…
Cancel
Save