|
|
|
@ -4,9 +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.api.busi.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
|
|
|
|
@ -31,11 +29,13 @@ import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail;
|
|
|
|
|
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;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesProductionAssemblyModel;
|
|
|
|
|
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.util.SpringContextsUtil;
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
@ -118,6 +118,18 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProductionAssemblyUniqueRepository mesProductionAssemblyUniqueRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesConfigService mesConfigService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProductionRecordService mesProductionRecordService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesWorkOrderService mesWorkOrderService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProductVersionService mesProductVersionService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) {
|
|
|
|
|
String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode();
|
|
|
|
@ -221,22 +233,21 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
return mesProductionAssemblies;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void recursionAssemblySn(List<MesProductionAssembly> mesProductionAssemblyList,MesReworkTaskRequestModel requestModel){
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProductionAssemblyModel> queryAssemblyTree(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);
|
|
|
|
|
}
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(requestModel.getCustSn(), "custSn", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(), "assemblyStatus", packBean);
|
|
|
|
|
|
|
|
|
|
List<MesProductionAssembly> mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean);
|
|
|
|
|
if(!CollectionUtils.isEmpty(mesProductionAssemblies)){
|
|
|
|
|
recursionAssemblySn(mesProductionAssemblies,requestModel);
|
|
|
|
|
mesProductionAssemblyList.addAll(mesProductionAssemblies);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesProductionAssemblies)) {
|
|
|
|
|
MesPcnException.throwFlowException("装配件信息不存在");
|
|
|
|
|
}
|
|
|
|
|
//查询装配树
|
|
|
|
|
List<MesProductionAssemblyModel> assemblyTree = parseArray(mesProductionAssemblies);
|
|
|
|
|
recursionAssemblySnTree(assemblyTree, requestModel);
|
|
|
|
|
return assemblyTree;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -254,6 +265,11 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
mesReworkTask.setReworkedQty(requestModel.getReworkedQty());
|
|
|
|
|
mesReworkTask.setScrapQty(requestModel.getScrapQty());
|
|
|
|
|
} else {
|
|
|
|
|
//拆解
|
|
|
|
|
if(!CollectionUtils.isEmpty(requestModel.getAssemblyModelList())){
|
|
|
|
|
doAssemblyDisassembly(requestModel, mesReworkTask.getSn());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (MesExtEnumUtil.NC_TYPE.REWORK.getValue() == requestModel.getType()) {
|
|
|
|
|
mesReworkTask.setReworkedQty(mesReworkTask.getQty());
|
|
|
|
|
} else if (MesExtEnumUtil.NC_TYPE.SCRAP.getValue() == requestModel.getType()) {
|
|
|
|
@ -279,7 +295,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
if (!CollectionUtils.isEmpty(reworkTaskDetails)) {
|
|
|
|
|
MesPcnException.throwFlowException("还有位置未返工完成,请检查");
|
|
|
|
|
}
|
|
|
|
|
MesProduceSn sn = checkProduceSn(requestModel.getSn(), organizeCode);
|
|
|
|
|
MesProduceSn sn = getMesProduceSn(organizeCode,requestModel.getSn());
|
|
|
|
|
//查询物料信息
|
|
|
|
|
MesPart mesPart = mesPartService.getMesPartByPartNo(sn.getPartNo(), organizeCode);
|
|
|
|
|
String prodLabelTemplate = sn.getProdLabelTemplate();
|
|
|
|
@ -383,67 +399,6 @@ 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;
|
|
|
|
|
MesWorkCenter workCenterDb = null;
|
|
|
|
|
//产线类型
|
|
|
|
|
if(!mesWorkCenterMap.containsKey(mesProductionAssembly.getWorkCenterCode())){
|
|
|
|
|
workCenterDb = prodOrgExtService.getWorkCenterDb(requestModel.getOrganizeCode(), mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException("产线【%s】信息不存在", mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
mesWorkCenterMap.put(mesProductionAssembly.getWorkCenterCode(),workCenterDb);
|
|
|
|
|
}else{
|
|
|
|
|
workCenterDb = mesWorkCenterMap.get(mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenterDb.getCenterType()) context = new MesProductionAssemblySortContext().copy(mesProductionAssembly);
|
|
|
|
|
else context = new MesProductionAssemblyNosortContext().copy(mesProductionAssembly);
|
|
|
|
|
return context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String doGererateSerialNo(MesPart part,String organizeCode,String userName) {
|
|
|
|
|
if(StringUtils.isEmpty(part.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", part.getPartNo());
|
|
|
|
|
return syncFuncService.syncSerialNo(
|
|
|
|
|
new GenSerialNoModel(part.getProductMatchRule()).partNo(part.getPartNo()).putDataMap(MesPart.class.getSimpleName(), part).organizeCode(organizeCode),
|
|
|
|
|
userName, organizeCode, 1).getResultList().get(0).toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean validateSn(MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
//
|
|
|
|
@ -564,7 +519,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
updateNewSn(mesProduceSn,requestModel.getUserName());
|
|
|
|
|
// 更新原条码状态为已拆解
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesProductionAssembly,requestModel.getUserName());
|
|
|
|
|
updateOldSn(mesProductionAssembly);
|
|
|
|
|
updateOldSn(mesProductionAssembly.getOrganizeCode(),mesProductionAssembly.getAssemblySn(),requestModel.getUserName(), null);
|
|
|
|
|
// 原装配件记录为已解绑
|
|
|
|
|
mesProductionAssemblyRepository.update(mesProductionAssembly);
|
|
|
|
|
// 新装配件记录为已装配
|
|
|
|
@ -588,35 +543,233 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void recursionAssemblySnTree(List<MesProductionAssemblyModel> assemblyTree, MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
for (MesProductionAssemblyModel assembly : assemblyTree) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(assembly.getAssemblySn(), "productSn", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(), "assemblyStatus", packBean);
|
|
|
|
|
List<MesProductionAssembly> mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean);
|
|
|
|
|
if (!CollectionUtils.isEmpty(mesProductionAssemblies)) {
|
|
|
|
|
assembly.setChildTreeList(parseArray(mesProductionAssemblies));
|
|
|
|
|
recursionAssemblySnTree(assembly.getChildTreeList(), requestModel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesProductionAssemblyModel> parseArray(List<MesProductionAssembly> mesProductionAssemblies) {
|
|
|
|
|
return JSONArray.parseArray(JSONArray.toJSONString(mesProductionAssemblies), MesProductionAssemblyModel.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateNewSn(MesProduceSn mesProduceSn,String userName) {
|
|
|
|
|
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesProduceSn, userName);
|
|
|
|
|
mesProduceSnRepository.update(mesProduceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateOldSn(MesProductionAssembly mesProductionAssembly) {
|
|
|
|
|
DdlPackBean oldSnPackBean = DdlPackBean.getDdlPackBean();
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProductionAssembly.getAssemblySn(), "productSn", oldSnPackBean);
|
|
|
|
|
private void updateOldSn(String organizeCode, String productSn, String userName, Integer qcStatus) {
|
|
|
|
|
MesProduceSn oldProduceSn = getMesProduceSn(organizeCode,productSn);
|
|
|
|
|
if(!Objects.isNull(qcStatus)){
|
|
|
|
|
oldProduceSn.setQcStatus(qcStatus);
|
|
|
|
|
}
|
|
|
|
|
oldProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldProduceSn,userName);
|
|
|
|
|
mesProduceSnRepository.update(oldProduceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doAssemblyDisassembly(MesReworkTaskRequestModel requestModel, String productSn) {
|
|
|
|
|
//总成拆解
|
|
|
|
|
doProductReportReversal(requestModel,productSn);
|
|
|
|
|
//装配件数据处理
|
|
|
|
|
recursionCheck(requestModel.getAssemblyModelList(), requestModel.getOrganizeCode(), requestModel.getUserName(),mesConfigService.getCfgValue(requestModel.getOrganizeCode(), MesPcnExtConstWords.DISASSEMBLY_DEST_LOCATE));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doProductReportReversal(MesReworkTaskRequestModel requestModel, String productSn) {
|
|
|
|
|
//更新条码状态为总成拆解
|
|
|
|
|
MesProduceSn produceSnDb = getMesProduceSn(requestModel.getOrganizeCode(), productSn);
|
|
|
|
|
produceSnDb.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_DISASSEMBLY.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSnDb, requestModel.getUserName());
|
|
|
|
|
mesProduceSnRepository.update(produceSnDb);
|
|
|
|
|
//拆解返工单完成后,总成反向移库(NC责任人对应库位(MesMove最后一条记录的库位)-->默认库位(生产版本中的receive_inventory_point)),若总成已汇报,自动做一个报工调整
|
|
|
|
|
List<MesProductionRecord> productionRecordList = mesProductionRecordService.findProductionRecordList(produceSnDb.getOrganizeCode(), produceSnDb.getProductSn(), produceSnDb.getPartNo());
|
|
|
|
|
if(CollectionUtils.isEmpty(productionRecordList)){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Optional<MesProductionRecord> optional = productionRecordList.stream().filter(o -> (null != o && MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue() == o.getReportStatus())).findFirst();
|
|
|
|
|
if (!optional.isPresent() || StringUtils.isEmpty(optional.get().getWorkOrderNo())) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//报工调整
|
|
|
|
|
MesWorkOrder mesWorkOrderDb = mesWorkOrderService.findMesWorkOrderList(requestModel.getOrganizeCode(), optional.get().getWorkOrderNo());
|
|
|
|
|
MesProductVersion productVersion = getProductVersion(mesWorkOrderDb);
|
|
|
|
|
mesWorkOrderDb.setNum(MesPcnExtConstWords.ONE);
|
|
|
|
|
mesWorkOrderService.doProductReportReversal(mesWorkOrderDb,productVersion, requestModel.getUserName());
|
|
|
|
|
//移库
|
|
|
|
|
requestModel.setSn(produceSnDb.getProductSn());
|
|
|
|
|
createMove(requestModel,getDestLocateNo(requestModel.getOrganizeCode(), produceSnDb.getProductSn()),productVersion.getReceiveInventoryPoint(),mesWorkOrderDb.getErpWorkCenter(),mesWorkOrderDb.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void recursionCheck(List<MesProductionAssemblyModel> assemblyModelList,String organizeCode,String userName,String destLocate){
|
|
|
|
|
for (MesProductionAssemblyModel assemblyModel : assemblyModelList) {
|
|
|
|
|
//勾选
|
|
|
|
|
if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
|
|
|
|
|
//报废
|
|
|
|
|
if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getValue() == assemblyModel.getMatchType()){
|
|
|
|
|
updateOldSn(organizeCode,assemblyModel.getAssemblySn(), userName, MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue());
|
|
|
|
|
}
|
|
|
|
|
//对于已勾选报废的子件,对于有零件号的项,产生移库(产线的材料库位->报废库(系统参数配置))。移库数量为报废时的明细数量;
|
|
|
|
|
createMove(getMesWorkCenter(organizeCode, assemblyModel.getWorkCenterCode()),destLocate, assemblyModel,userName);
|
|
|
|
|
//循环处理数据
|
|
|
|
|
if(!CollectionUtils.isEmpty(assemblyModel.getChildTreeList())){
|
|
|
|
|
recursionCheck(assemblyModel.getChildTreeList(),organizeCode,userName,destLocate);
|
|
|
|
|
}
|
|
|
|
|
} else if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) {
|
|
|
|
|
//装配解绑
|
|
|
|
|
saveProductionAssembly(organizeCode, userName, assemblyModel.getAssemblySn());
|
|
|
|
|
//自制件更新条码状态 条码状态可用
|
|
|
|
|
if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getValue() == assemblyModel.getMatchType()){
|
|
|
|
|
updateOldSn(organizeCode,assemblyModel.getAssemblySn(), userName, null);
|
|
|
|
|
//唯一性表中删除
|
|
|
|
|
}else if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue() == assemblyModel.getMatchType()){
|
|
|
|
|
saveProductionAssemblyUnique(organizeCode, userName, assemblyModel.getAssemblySn());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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.getOrganizeCode(),assembly.getAssemblySn(),requestModel.getUserName(), null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveProductionAssemblyUnique(MesReworkTaskRequestModel requestModel, String assemblySN, MesProductionAssembly productionAssembly) {
|
|
|
|
|
//绑定数据解绑
|
|
|
|
|
saveProductionAssemblyUnique(requestModel.getOrganizeCode(),requestModel.getUserName(), assemblySN);
|
|
|
|
|
//唯一性校验数据保存
|
|
|
|
|
saveProductionAssemblyUnique(productionAssembly);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveProductionAssemblyUnique(String organizeCode,String userName, String assemblySN) {
|
|
|
|
|
List<MesProductionAssemblyUnique> assemblyUniqueList = mesAssemblyExtService.getProductionAssemblyUniqueList(organizeCode, assemblySN);
|
|
|
|
|
if(!CollectionUtils.isEmpty(assemblyUniqueList)){
|
|
|
|
|
assemblyUniqueList.forEach(t->{
|
|
|
|
|
t.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
|
|
|
|
t.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(t, userName);
|
|
|
|
|
});
|
|
|
|
|
mesProductionAssemblyUniqueRepository.saveAll(assemblyUniqueList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveProductionAssembly(String organizeCode,String userName, String assemblySN) {
|
|
|
|
|
List<MesProductionAssembly> assemblyList = mesAssemblyExtService.getProductionAssemblyList(organizeCode, assemblySN);
|
|
|
|
|
if(CollectionUtils.isEmpty(assemblyList)){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
assemblyList = assemblyList.stream().filter(o->MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue() == o.getAssemblyStatus()).collect(Collectors.toList());
|
|
|
|
|
if(!CollectionUtils.isEmpty(assemblyList)){
|
|
|
|
|
assemblyList.forEach(t->{
|
|
|
|
|
t.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
|
|
|
|
t.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(t, userName);
|
|
|
|
|
});
|
|
|
|
|
mesProductionAssemblyRepository.saveAll(assemblyList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
MesWorkCenter workCenterDb = null;
|
|
|
|
|
//产线类型
|
|
|
|
|
if(!mesWorkCenterMap.containsKey(mesProductionAssembly.getWorkCenterCode())){
|
|
|
|
|
workCenterDb = getMesWorkCenter(requestModel.getOrganizeCode(), mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
mesWorkCenterMap.put(mesProductionAssembly.getWorkCenterCode(),workCenterDb);
|
|
|
|
|
}else{
|
|
|
|
|
workCenterDb = mesWorkCenterMap.get(mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenterDb.getCenterType()) context = new MesProductionAssemblySortContext().copy(mesProductionAssembly);
|
|
|
|
|
else context = new MesProductionAssemblyNosortContext().copy(mesProductionAssembly);
|
|
|
|
|
return context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProduceSn getMesProduceSn(String organizeCode, String productSn) {
|
|
|
|
|
DdlPackBean oldSnPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(productSn, "productSn", oldSnPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, oldSnPackBean);
|
|
|
|
|
|
|
|
|
|
MesProduceSn oldProduceSn = mesProduceSnRepository.getByProperty(oldSnPackBean);
|
|
|
|
|
if (oldProduceSn == null) {
|
|
|
|
|
MesPcnException.throwFlowException(String.format("原条码信息不存在【%s】", mesProductionAssembly.getProductSn()));
|
|
|
|
|
MesProduceSn produceSnDb = mesProduceSnRepository.getByProperty(oldSnPackBean);
|
|
|
|
|
if (produceSnDb == null) {
|
|
|
|
|
MesPcnException.throwFlowException(String.format("条码【%s】信息不存在", productSn));
|
|
|
|
|
}
|
|
|
|
|
return produceSnDb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldProduceSn, mesProductionAssembly.getModifyUser());
|
|
|
|
|
oldProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue());
|
|
|
|
|
mesProduceSnRepository.update(oldProduceSn);
|
|
|
|
|
private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode) {
|
|
|
|
|
MesWorkCenter workCenterDb = prodOrgExtService.getWorkCenterDb(organizeCode,workCenterCode);
|
|
|
|
|
if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException("产线【%s】信息不存在", workCenterCode);
|
|
|
|
|
return workCenterDb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String doGererateSerialNo(MesPart part,String organizeCode,String userName) {
|
|
|
|
|
if(StringUtils.isEmpty(part.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", part.getPartNo());
|
|
|
|
|
return syncFuncService.syncSerialNo(
|
|
|
|
|
new GenSerialNoModel(part.getProductMatchRule()).partNo(part.getPartNo()).putDataMap(MesPart.class.getSimpleName(), part).organizeCode(organizeCode),
|
|
|
|
|
userName, organizeCode, 1).getResultList().get(0).toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getDestLocateNo(String organizeCode, String productSn) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderBy(null, null, packBean);
|
|
|
|
|
MesMove mesMove = moveRepository.getByProperty(packBean);
|
|
|
|
|
return Objects.isNull(mesMove) ? null : mesMove.getUmlgo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesPartInspection getMesPartInspection(MesReworkTask mesReworkTask) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean);
|
|
|
|
|
|
|
|
|
|
MesPartInspection mesPartInspection = mesPartInspectionRepository.getByProperty(packBean);
|
|
|
|
|
|
|
|
|
|
return mesPartInspection;
|
|
|
|
|
return mesPartInspectionRepository.getByProperty(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesPartInspectionDetail> getMesPartInspectionDetail(List<MesReworkTaskDetail> reworkTaskDetails) {
|
|
|
|
@ -668,27 +821,12 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateMesProduceSn(MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
MesProduceSn produceSn = checkProduceSn(requestModel.getSn(), requestModel.getOrganizeCode());
|
|
|
|
|
MesProduceSn produceSn = getMesProduceSn(requestModel.getOrganizeCode(),requestModel.getSn());
|
|
|
|
|
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSn,requestModel.getUserName());
|
|
|
|
|
mesProduceSnRepository.update(produceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProduceSn checkProduceSn(String serialNumber, String org) {
|
|
|
|
|
//根据扫描的条码查询条码是否存在
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(serialNumber, "productSn", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
|
|
|
|
|
MesProduceSn produceSn = mesProduceSnRepository.getByProperty(packBean);
|
|
|
|
|
|
|
|
|
|
//若不存在则提示条码不存在
|
|
|
|
|
if (StringUtils.isEmpty(produceSn)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码不存在,请检查数据", serialNumber));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return produceSn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesMove createMove(String oldSn, String sn, String organizeCode, String userName) {
|
|
|
|
|
MesMove move = new MesMove();
|
|
|
|
|
move.setOrganizeCode(organizeCode);
|
|
|
|
@ -701,4 +839,40 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, userName);
|
|
|
|
|
return moveRepository.insert(move);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void createMove(MesWorkCenter mesWorkCenter, String destLocate, MesProductionAssemblyModel assemblyModel,String userName) {
|
|
|
|
|
MesMove move = new MesMove();
|
|
|
|
|
move.setMatnr(assemblyModel.getAssemblyPartNo());
|
|
|
|
|
move.setOrganizeCode(mesWorkCenter.getOrganizeCode());
|
|
|
|
|
move.setFactoryCode(mesWorkCenter.getOrganizeCode());
|
|
|
|
|
move.setLgort(mesWorkCenter.getRawLocate());
|
|
|
|
|
move.setUmlgo(destLocate);
|
|
|
|
|
move.setMenge(assemblyModel.getScrapQty());
|
|
|
|
|
move.setPostDate(TimeTool.getToday());
|
|
|
|
|
move.setPostTime(TimeTool.getTimeShortWithColon());
|
|
|
|
|
move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE.getValue());
|
|
|
|
|
move.setProductSn(assemblyModel.getAssemblySn());
|
|
|
|
|
move.setWorkCenter(mesWorkCenter.getErpWorkCenter());
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, userName);
|
|
|
|
|
moveRepository.insert(move);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void createMove(MesReworkTaskRequestModel requestModel,String srcLocate, String destLocate,String workCenterCode,String partNo) {
|
|
|
|
|
MesPartSap mesPartSap = mesPartService.getMesPartSapByPartNo(partNo, requestModel.getOrganizeCode());
|
|
|
|
|
MesMove move = new MesMove();
|
|
|
|
|
move.setMatnr(mesPartSap.getPartNo());
|
|
|
|
|
move.setOrganizeCode(requestModel.getOrganizeCode());
|
|
|
|
|
move.setFactoryCode(requestModel.getOrganizeCode());
|
|
|
|
|
move.setLgort(srcLocate);
|
|
|
|
|
move.setUmlgo(destLocate);
|
|
|
|
|
move.setMenge(1d);
|
|
|
|
|
move.setMeins(mesPartSap.getUnit());
|
|
|
|
|
move.setPostDate(TimeTool.getToday());
|
|
|
|
|
move.setPostTime(TimeTool.getTimeShortWithColon());
|
|
|
|
|
move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE.getValue());
|
|
|
|
|
move.setProductSn(requestModel.getSn());
|
|
|
|
|
move.setWorkCenter(workCenterCode);
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, requestModel.getUserName());
|
|
|
|
|
moveRepository.insert(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|