PDA产品加工记录查询&PCN报工功能调整

tags/yfai-pcn-ext-v1.4
jun 9 months ago
parent 6e3c460acb
commit fd2cf6d695

@ -1,5 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; 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.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -40,4 +42,6 @@ public interface IMesProduceSnExtService {
void updateNoSync(MesProduceSn item); void updateNoSync(MesProduceSn item);
@ApiOperation(value = "根据零件条码信息")
ListPager<MesProduceSn> queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager);
} }

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
@ -29,4 +30,7 @@ public interface IMesProductionRecordService {
void updateProductionRecord(String organizeCode, String userName, String sn); void updateProductionRecord(String organizeCode, String userName, String sn);
void updateProductionRecord(String organizeCode, String userName, Long id, String errorMsg); void updateProductionRecord(String organizeCode, String userName, Long id, String errorMsg);
@ApiOperation(value = "根据零件条码查询加工记录信息")
List<MesProductionRecordModel> findMesProductionRecordList(String organizeCode, String productSn);
} }

@ -0,0 +1,62 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
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.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
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 : junsheng.li
* @CreateDate 2024/8/6 20:45
* @Modify:
**/
@RestController
@Api(tags = "业务信息")
@RequestMapping(MesCommonConstant.MES_YANFEN + "/busi")
@Slf4j
public class MesBusiController {
@Autowired
private IMesProduceSnExtService mesProduceSnExtService;
@Autowired
private IMesProductionRecordService mesProductionRecordService;
@GetMapping("/mesProduceSn/query")
@ApiOperation(value = "查询条码信息")
public ResultBean queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) {
try {
return ResultBean.success("查询成功").setListPager(mesProduceSnExtService.queryMesProduceSn(mesProduceSn, pager));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/mesProductionRecord/query")
@ApiOperation(value = "查询加工记录信息")
public ResultBean queryMesProductionRecord(MesProductionRecord mesProductionRecord) {
try {
return ResultBean.success("查询成功").setResultList(mesProductionRecordService.findMesProductionRecordList(mesProductionRecord.getOrganizeCode(), mesProductionRecord.getProductSn()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -66,7 +66,7 @@ public class MesWorkOrderController {
public ResultBean doProductReport(MesWorkOrder mesWorkOrder) { public ResultBean doProductReport(MesWorkOrder mesWorkOrder) {
try { try {
workOrderService.doProductReport(mesWorkOrder, AuthUtil.getSessionUser().getUserName()); workOrderService.doProductReport(mesWorkOrder, AuthUtil.getSessionUser().getUserName());
return ResultBean.success("操作成功") return ResultBean.success("报工成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) { } catch (ImppBusiException e) {
return ResultBean.fail(e).build(); return ResultBean.fail(e).build();

@ -5,8 +5,12 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; 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.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -148,4 +152,14 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
produceSnRepository.updateNoSync(item); produceSnRepository.updateNoSync(item);
} }
@Override
public ListPager<MesProduceSn> queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesProduceSn.getWorkOrderNo(),"workOrderNo",packBean);
DdlPreparedPack.getStringEqualPack(mesProduceSn.getPartNo(),"partNo",packBean);
DdlPreparedPack.getStringEqualPack(mesProduceSn.getPartName(),"partName",packBean);
pager = PagerHelper.getPager(pager, produceSnRepository.findByHqlWhereCount(packBean));
List<MesProduceSn> resultList = produceSnRepository.findByHqlWherePage(packBean, pager);
return new ListPager<>(resultList, pager);
}
} }

@ -6,16 +6,23 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCraft;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.repository.MesTimeEfficientCfgRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
@ -36,6 +43,12 @@ public class MesProductionRecordService implements IMesProductionRecordService {
@Autowired @Autowired
private MesProductionAssemblyRepository productionAssemblyRepository; private MesProductionAssemblyRepository productionAssemblyRepository;
@Autowired
private MesCraftRepository mesCraftRepository;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
@Override @Override
public List<MesProductionRecord> findProductionRecordList(String organizeCode, String productSn) { public List<MesProductionRecord> findProductionRecordList(String organizeCode, String productSn) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null; if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null;
@ -84,4 +97,49 @@ public class MesProductionRecordService implements IMesProductionRecordService {
productionRecordRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","reportStatus", "remark"}, productionRecordRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","reportStatus", "remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue(), errorMsg },ddlPackBean); new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue(), errorMsg },ddlPackBean);
} }
@Override
public List<MesProductionRecordModel> findMesProductionRecordList(String organizeCode, String productSn) {
List<MesProductionRecord> productionRecordList = findProductionRecordList(organizeCode, productSn);
List<MesProductionRecordModel> mesProductionRecordModelList = new ArrayList<>();
if (!CollectionUtils.isEmpty(productionRecordList)) {
Map<String, MesCraft> craftMap = getStringMesCraftMap(organizeCode, productionRecordList.stream().map(MesProductionRecord::getCraftCode).distinct().collect(Collectors.toList()));
Map<String, MesProduceSn> produceSnMap = getStringMesProduceSn(organizeCode, productionRecordList.stream().map(MesProductionRecord::getSerialNumber).distinct().collect(Collectors.toList()));
MesProductionRecordModel mesProductionRecordModel = null;
for (MesProductionRecord mesProductionRecord : productionRecordList) {
mesProductionRecordModel = new MesProductionRecordModel();
BeanUtils.copyProperties(mesProductionRecord, mesProductionRecordModel);
MesCraft mesCraft = Objects.isNull(craftMap) ? null : craftMap.get(mesProductionRecord.getCraftCode());
mesProductionRecordModel.setCraftName(Objects.isNull(mesCraft) ? "" : mesCraft.getCraftName());
MesProduceSn produceSn = Objects.isNull(produceSnMap) ? null : produceSnMap.get(mesProductionRecord.getSerialNumber());
mesProductionRecordModel.setSnStatus(Objects.isNull(produceSn) ? 0 : produceSn.getSnStatus());
mesProductionRecordModel.setSnStatusDesc(Objects.isNull(produceSn) ? "" :MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()));
mesProductionRecordModel.setReportStatusDesc(MesExtEnumUtil.REPORT_STATUS.valueOfDescription(mesProductionRecordModel.getReportStatus()));
mesProductionRecordModelList.add(mesProductionRecordModel);
}
}
return mesProductionRecordModelList;
}
private Map<String, MesCraft> getStringMesCraftMap(String organizeCode, List<String> craftCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(craftCodeList, "craftCode",packBean);
List<MesCraft> craftList = mesCraftRepository.findByHqlWhere(packBean);
Map<String, MesCraft> craftMap = null;
if(!CollectionUtils.isEmpty(craftList)){
craftMap = craftList.stream().collect(Collectors.toMap(MesCraft::getCraftCode, t -> t));
}
return craftMap;
}
private Map<String, MesProduceSn> getStringMesProduceSn(String organizeCode, List<String> snList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(snList, "serialNumber",packBean);
List<MesProduceSn> mesProduceSns = mesProduceSnRepository.findByHqlWhere(packBean);
Map<String, MesProduceSn> mesProduceSnMap = null;
if(!CollectionUtils.isEmpty(mesProduceSns)){
mesProduceSnMap = mesProduceSns.stream().collect(Collectors.toMap(MesProduceSn::getSerialNumber, t -> t));
}
return mesProduceSnMap;
}
} }

@ -8,12 +8,14 @@ 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.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; 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.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.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -108,6 +110,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
@Autowired @Autowired
private IMesProductionRecordService productionRecordService; private IMesProductionRecordService productionRecordService;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Override @Override
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) {
@ -968,11 +973,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty());
mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); mesWorkOrderDb.setRemark(mesWorkOrder.getRemark());
String sn = getOrderNo(mesWorkOrder);
//更新工单 //更新工单
updateMesWorkOrder(mesWorkOrderDb,userName); updateMesWorkOrder(mesWorkOrderDb,userName);
//记录条码表&加工记录表
insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb);
//试制单不报工 //试制单不报工
if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){
String sn = getOrderNo(mesWorkOrder);
//保存数据 //保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
for (MesBom mesBom : mesBoms) { for (MesBom mesBom : mesBoms) {
@ -1212,4 +1219,46 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return newMesProductOffLine; return newMesProductOffLine;
} }
private MesProduceSn insertMesProduceSn(MesPart mesPart, String sn, String userName, MesWorkOrder mesWorkOrder) {
MesProduceSn mesProduceSn = new MesProduceSn();
mesProduceSn.setSerialNumber(snowflakeIdMaker.nextId() + "");
mesProduceSn.setProductSn(sn);
mesProduceSn.setCustSn(sn);
mesProduceSn.setPartNo(mesPart.getPartNo());
mesProduceSn.setPartName(mesPart.getPartName());
mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate());
mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate());
mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate());
mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum()+""));
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue());
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
mesProduceSn.setLotNo(TimeTool.getToday());
mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
mesProduceSn.setPrintCount(MesPcnExtConstWords.ONE);
mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
mesProduceSn.setOrganizeCode(mesPart.getOrganizeCode());
mesProduceSn.setFid(UUID.randomUUID().toString());
ConvertBean.serviceModelInitialize(mesProduceSn, userName);
return mesProduceSnRao.insert(mesProduceSn);
}
private void insertMesProductionRecord(MesProduceSn mesProduceSn,MesWorkOrder mesWorkOrder) {
//生成加工记录
MesProductionRecord productionRecord = new MesProductionRecord();
BeanUtils.copyProperties(mesProduceSn, productionRecord);
productionRecord.setReportType(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue());
productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue());
productionRecord.setModuleStatisticsStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
productionRecord.setAreaCode(mesWorkOrder.getAreaCode());
productionRecord.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
productionRecord.setWorkCellCode(mesWorkOrder.getWorkCellCode());
productionRecord.setIsComplete(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
productionRecord.setCompleteDateTime(productionRecord.getModifyDatetime());
productionRecord.setFid(UUID.randomUUID().toString());
productionRecord.setOneMouldMoreId(UUID.randomUUID().toString());
productionRecordRao.insert(productionRecord);
}
} }

Loading…
Cancel
Save