42602 发运后,客退品返工,生成并打印新条码

42582 线边库存报表
tags/yfai-pcn-ext-v1.7
jun 9 months ago
parent 879b6d2f93
commit 3f4af68ed3

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base; package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
@ -39,4 +40,6 @@ public interface IMesReworkTaskService {
void reworkSuccess(MesReworkTaskRequestModel requestModel); void reworkSuccess(MesReworkTaskRequestModel requestModel);
MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel);
} }

@ -131,4 +131,20 @@ public class MesReworkTaskController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e); return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
} }
} }
@GetMapping("/doPrint")
@ApiOperation(value = "打印")
public ResultBean doPrint(MesReworkTaskRequestModel requestModel) {
// 数据校验
ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空");
ValidatorBean.checkNotNull(requestModel.getOrganizeCode(), "工厂代码不能为空");
ValidatorBean.checkNotNull(requestModel.getUserName(), "操作人不能为空");
try {
return ResultBean.success("打印成功").setResultObject(mesReworkTaskService.doPrint(requestModel));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
} }

@ -1,28 +1,33 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesReworkTaskService; 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.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
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.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel;
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.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.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;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail;
import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask;
import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.map.HashedMap; import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -34,7 +39,6 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -76,6 +80,21 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
@Autowired @Autowired
private MesProduceSnRepository mesProduceSnRepository; private MesProduceSnRepository mesProduceSnRepository;
@Autowired
private IMesTemplateService mesTemplateService;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private IMesPartService mesPartService;
@Autowired
private MesMoveRepository moveRepository;
@Autowired
private MesProductionRecordRepository mesProductionRecordRepository;
@Override @Override
public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) {
String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode(); String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode();
@ -206,6 +225,69 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
} }
@Override @Override
public MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel) {
String organizeCode = requestModel.getOrganizeCode();
String userName = requestModel.getUserName();
MesReworkTask mesReworkTask = getMesReworkTask(requestModel);
List<MesReworkTaskDetail> reworkTaskDetails = getMesReworkTaskDetail(mesReworkTask);
if (!CollectionUtils.isEmpty(reworkTaskDetails)) {
MesPcnException.throwFlowException("还有位置未返工完成,请检查");
}
MesProduceSn sn = checkProduceSn(requestModel.getSn(), organizeCode);
//查询物料信息
MesPart mesPart = mesPartService.getMesPartByPartNo(sn.getPartNo(), organizeCode);
String prodLabelTemplate = sn.getProdLabelTemplate();
if (prodLabelTemplate == null) {
MesPcnException.throwMesBusiException("零件号[%s]的模板代码[%s]的模板信息丢失,请配置!", sn.getPartNo(), prodLabelTemplate);
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
// 查模板代码
MesLabelTemplate labelTemplate = mesTemplateService.getMesLabelTemplate(prodLabelTemplate,organizeCode);
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (methodCode == null) {
MesPcnException.throwMesBusiException("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getPartNo(), prodLabelTemplate);
}
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setProductSn(sn.getProductSn());
mesProduceSnPrintModel.setPartNo(sn.getPartNo());
mesProduceSnPrintModel.setOrganizeCode(organizeCode);
List<MesProduceSn> snList = new ArrayList<>();
sn.setDescription(String.format("源条码:%s",sn.getProductSn()));
sn.setProductSn(doGererateSerialNo(mesPart, organizeCode, requestModel.getUserName()));
snList.add(sn);
mesProduceSnPrintModel.getMesProduceSnList().addAll(snList);
//发送新老条码关系给WMS
createMove(requestModel.getSn(),sn.getProductSn(),organizeCode,requestModel.getUserName());
//更新条码
ConvertBean.serviceModelUpdate(sn,requestModel.getUserName());
mesProduceSnRepository.update(sn);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(requestModel.getSn(),"productSn",packBean);
DdlPreparedPack.getStringEqualPack(sn.getPartNo(),"partNo",packBean);
//更新加工记录
mesProductionRecordRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","productSn","description"},
new Object[]{userName, TimeTool.getNowTime(true),sn.getProductSn(),sn.getDescription()},packBean);
//更新装配记录
mesProductionAssemblyRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","productSn","description"},
new Object[]{userName, TimeTool.getNowTime(true),sn.getProductSn(),sn.getDescription()},packBean);
//更新返工记录
mesReworkTaskRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","sn","description"},
new Object[]{userName, TimeTool.getNowTime(true),sn.getProductSn(),sn.getDescription()},packBean);
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
return strategyService.execute(null, mesProduceSnPrintModel, null, null, null, true);
}
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) { public boolean validateSn(MesReworkTaskRequestModel requestModel) {
// //
List<String> snList = Arrays.asList(requestModel.getSn().split(",")); List<String> snList = Arrays.asList(requestModel.getSn().split(","));
@ -448,4 +530,17 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
return produceSn; return produceSn;
} }
private MesMove createMove(String sn, String oldSn, String organizeCode, String userName) {
MesMove move = new MesMove();
move.setOrganizeCode(organizeCode);
move.setFactoryCode(organizeCode);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
move.setMoveType(MesExtEnumUtil.MOVE_TYPE.REWORK_REPLACE.getValue());
move.setProductSn(sn);
move.setProductSnOld(oldSn);
ConvertBean.serviceModelInitialize(move, userName);
return moveRepository.insert(move);
}
} }

@ -132,8 +132,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//updateLoadingListClose(statusForCheckList,orderManagement,shippingOrderManagement.getModifyUser()); //updateLoadingListClose(statusForCheckList,orderManagement,shippingOrderManagement.getModifyUser());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "id",packBean); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "id",packBean);
shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","remark"}, shippingOrderManagementRepository.updateByProperties(new String[]{"forceFlag","modifyUser", "modifyDatetime","remark"},
new Object[]{shippingOrderManagement.getModifyUser(), TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean); new Object[]{MesPcnExtConstWords.STRONGER_PASS,shippingOrderManagement.getModifyUser(), TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}else{ }else{
throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单请检查数据", throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单请检查数据",
orderManagement.getShippingCode(), orderManagement.getSeq())); orderManagement.getShippingCode(), orderManagement.getSeq()));

@ -7,7 +7,6 @@ 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.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.util.MesPcnExtConstWords; 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;
@ -154,8 +153,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean); DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean);
DdlPreparedPack.getStringLikerPack(workOrder.getWorkOrderNo(), "workOrderNo", packBean); DdlPreparedPack.getStringLikerPack(workOrder.getWorkOrderNo(), "workOrderNo", packBean);
if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus())) DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean); if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus()))
else DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean); DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean);
else
DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean);
DdlPreparedPack.getStringBiggerPack(workOrder.getStartTimeStart(), "planStartTime", packBean); DdlPreparedPack.getStringBiggerPack(workOrder.getStartTimeStart(), "planStartTime", packBean);
DdlPreparedPack.getStringSmallerPack(workOrder.getStartTimeEnd(), "planStartTime", packBean); DdlPreparedPack.getStringSmallerPack(workOrder.getStartTimeEnd(), "planStartTime", packBean);
@ -170,31 +171,31 @@ public class MesWorkOrderService implements IMesWorkOrderService {
public void doProductReport(List<MesProduceSn> mesProduceSnList, String organizeCode, String userName) { public void doProductReport(List<MesProduceSn> mesProduceSnList, String organizeCode, String userName) {
//新增初始化 todo //新增初始化 todo
Map<String, List<MesProduceSn>> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo)); Map<String, List<MesProduceSn>> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo));
Map<String,MesPart> mesPartMap = new HashMap<>(); Map<String, MesPart> mesPartMap = new HashMap<>();
MesPart mesPart; MesPart mesPart;
//查询工单状态 //查询工单状态
Integer[] orderStatus =new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()}; Integer[] orderStatus = new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()};
for (Map.Entry<String, List<MesProduceSn>> mesProduceSn : mesWorkOrderMap.entrySet()) { for (Map.Entry<String, List<MesProduceSn>> mesProduceSn : mesWorkOrderMap.entrySet()) {
List<MesProduceSn> mesWorkOrderList = mesProduceSn.getValue(); List<MesProduceSn> mesWorkOrderList = mesProduceSn.getValue();
//获取物料信息 //获取物料信息
if(mesPartMap.containsKey(mesProduceSn.getKey())){ if (mesPartMap.containsKey(mesProduceSn.getKey())) {
mesPart = mesPartMap.get(mesProduceSn.getKey()); mesPart = mesPartMap.get(mesProduceSn.getKey());
}else{ } else {
//查询物料信息 //查询物料信息
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesProduceSn.getKey(), "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(mesProduceSn.getKey(), "partNo", ddlPackBean);
mesPart = mesPartRDao.getByProperty(ddlPackBean); mesPart = mesPartRDao.getByProperty(ddlPackBean);
if(Objects.isNull(mesPart)){ if (Objects.isNull(mesPart)) {
throw new ImppBusiException(String.format("物料【%s】信息不存在", mesProduceSn.getKey())); throw new ImppBusiException(String.format("物料【%s】信息不存在", mesProduceSn.getKey()));
} }
mesPartMap.put(mesProduceSn.getKey(),mesPart); mesPartMap.put(mesProduceSn.getKey(), mesPart);
} }
//根据物料获取已发布的工单 //根据物料获取已发布的工单
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getInPackArray(orderStatus, "workOrderStatus", ddlPackBean); DdlPreparedPack.getInPackArray(orderStatus, "workOrderStatus", ddlPackBean);
MesWorkOrder oldMesWorkOrder = workOrderRepository.getByProperty(ddlPackBean); MesWorkOrder oldMesWorkOrder = workOrderRepository.getByProperty(ddlPackBean);
if(Objects.isNull(oldMesWorkOrder)){ if (Objects.isNull(oldMesWorkOrder)) {
throw new ImppBusiException(String.format("物料【%s】状态未已发布的工单信息不存在", mesPart.getPartNo())); throw new ImppBusiException(String.format("物料【%s】状态未已发布的工单信息不存在", mesPart.getPartNo()));
} }
//查询工作中心 //查询工作中心
@ -238,13 +239,14 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} else { } else {
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
} }
ConvertBean.serviceModelUpdate(oldMesWorkOrder,userName); ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName);
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
workOrderExtService.update(oldMesWorkOrder); workOrderExtService.update(oldMesWorkOrder);
//保存数据 //保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
MesProductOffLine newMesProductOffLine; MesProductOffLine newMesProductOffLine;
for (MesProduceSn produceSn : mesWorkOrderList) { for (MesProduceSn produceSn : mesWorkOrderList) {
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) { for (MesBom mesBom : mesBoms) {
newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
@ -266,7 +268,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType()); newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter());
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); ConvertBean.serviceModelInitialize(newMesProductOffLine, userName);
mesProductOffLineList.add(newMesProductOffLine); mesProductOffLineList.add(newMesProductOffLine);
} }
@ -274,7 +276,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
mesProductOffLineRDao.saveAll(mesProductOffLineList); mesProductOffLineRDao.saveAll(mesProductOffLineList);
} }
} }
public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) {
public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName, MesWorkOrder mesWorkOrderDb) {
//查询物料信息 //查询物料信息
DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode()); DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
@ -294,11 +297,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//获取生产版本 //获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
//物料+生产版本获取bom信息 //物料+生产版本获取bom信息
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo()); LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo());
//更新工单 //更新工单
// updateMesWorkOrder(mesWorkOrderDb, userName ); // updateMesWorkOrder(mesWorkOrderDb, userName );
//保存数据 //保存数据
// List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); // List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
@ -307,7 +310,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
// } // }
// mesProductOffLineService.insertBatch(mesProductOffLineList); // mesProductOffLineService.insertBatch(mesProductOffLineList);
LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(),mesProductionRecordList.size()); LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(), mesProductionRecordList.size());
//保存数据 //保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
MesProductOffLine newMesProductOffLine; MesProductOffLine newMesProductOffLine;
@ -340,7 +343,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
mesProductOffLineRDao.saveAll(mesProductOffLineList); mesProductOffLineRDao.saveAll(mesProductOffLineList);
} }
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) {
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName) {
//修改工单,需要重新同步 //修改工单,需要重新同步
mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesWorkOrder, userName); ConvertBean.serviceModelUpdate(mesWorkOrder, userName);
@ -349,11 +353,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//保存记录 //保存记录
saveMesWorkOrderLog(mesWorkOrder); saveMesWorkOrderLog(mesWorkOrder);
} }
public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) {
MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id"); BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id");
mesWorkOrderLogRepository.insert(workOrderLog); mesWorkOrderLogRepository.insert(workOrderLog);
} }
public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) { public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) {
List<MesBom> bomData = new ArrayList<>(); List<MesBom> bomData = new ArrayList<>();
// 递归展开 BOM // 递归展开 BOM
@ -391,6 +397,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
// 返回汇总数据 // 返回汇总数据
return new ArrayList<>(summaryBomMap.values()); return new ArrayList<>(summaryBomMap.values());
} }
/** /**
* BOM * BOM
* *
@ -399,7 +406,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
* @param bomData BOM * @param bomData BOM
*/ */
private void expendBomChild(String organizeCode, String partNo, String bomVersion, List<MesBom> bomData) { private void expendBomChild(String organizeCode, String partNo, String bomVersion, List<MesBom> bomData) {
List<MesBom> bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion); List<MesBom> bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion);
for (MesBom item : bomDetails) { for (MesBom item : bomDetails) {
MesBom newItem = new MesBom(); MesBom newItem = new MesBom();
@ -418,6 +425,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
} }
} }
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) { public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
@ -432,6 +440,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//如果存在多个bomCode取最新的一个 //如果存在多个bomCode取最新的一个
return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode());
} }
private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) { private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
@ -450,11 +459,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean); DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean);
// DdlPreparedPack.getStringEqualPack(sn, "custSn", ddlPackBean); // DdlPreparedPack.getStringEqualPack(sn, "custSn", ddlPackBean);
productionRecordRao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime"}, productionRecordRao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime"},
new Object[]{userName, TimeTool.getNowTime(true)},ddlPackBean); new Object[]{userName, TimeTool.getNowTime(true)}, ddlPackBean);
} }
@Override @Override
@Transactional(propagation= Propagation.REQUIRES_NEW,isolation= Isolation.READ_COMMITTED,readOnly = false,rollbackFor = Exception.class) @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, rollbackFor = Exception.class)
public void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) { public void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) {
//新增初始化 todo //新增初始化 todo
// 根据 // 根据
@ -467,7 +476,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", ddlPackBean); DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", ddlPackBean);
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "reportStatus"}, productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "reportStatus"},
new Object[]{userName, TimeTool.getNowTime(true), productionRecord.getReportStatus()},ddlPackBean); new Object[]{userName, TimeTool.getNowTime(true), productionRecord.getReportStatus()}, ddlPackBean);
return; return;
} }
LOGGER.error("报工条码:{}找不到加工单", productionRecord.getProductSn()); LOGGER.error("报工条码:{}找不到加工单", productionRecord.getProductSn());
@ -476,10 +485,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
report(productionRecord, organizeCode, userName, oldMesWorkOrderList); report(productionRecord, organizeCode, userName, oldMesWorkOrderList);
} } catch (Exception e) {
catch (Exception e) {
String msg = e.getMessage(); String msg = e.getMessage();
if (e instanceof ImppBusiException) { if (e instanceof ImppBusiException) {
msg = ((ImppBusiException) e).getErrorMsg(); msg = ((ImppBusiException) e).getErrorMsg();
} }
e.printStackTrace(); e.printStackTrace();
@ -487,8 +495,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
productionRecordService.updateProductionRecord(organizeCode, userName, productionRecord.getId(), msg); productionRecordService.updateProductionRecord(organizeCode, userName, productionRecord.getId(), msg);
} }
} }
@Override @Override
@Transactional(propagation= Propagation.REQUIRES_NEW,isolation= Isolation.READ_COMMITTED,readOnly = false,rollbackFor = Exception.class) @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, rollbackFor = Exception.class)
public void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) { public void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) {
//新增初始化 todo //新增初始化 todo
// 根据 // 根据
@ -503,7 +512,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
report(productionRecord, organizeCode, userName, oldMesWorkOrders); report(productionRecord, organizeCode, userName, oldMesWorkOrders);
} catch (Exception e) { } catch (Exception e) {
String msg = e.getMessage(); String msg = e.getMessage();
if (e instanceof ImppBusiException) { if (e instanceof ImppBusiException) {
msg = ((ImppBusiException) e).getErrorMsg(); msg = ((ImppBusiException) e).getErrorMsg();
} }
e.printStackTrace(); e.printStackTrace();
@ -515,6 +524,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
/** /**
* *
*
* @param oldMesWorkOrderList * @param oldMesWorkOrderList
* @param mesWorkCenter * @param mesWorkCenter
* @return * @return
@ -528,13 +538,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
for (MesWorkOrder mesWorkOrder : oldMesWorkOrderList) { for (MesWorkOrder mesWorkOrder : oldMesWorkOrderList) {
double reportdQty = MathOperation.add(1, mesWorkOrder.getReportedQty()); double reportdQty = MathOperation.add(1, mesWorkOrder.getReportedQty());
// 如果是允许,则需要判断是否超过比例 // 如果是允许,则需要判断是否超过比例
if (reportdQty <= mesWorkOrder.getQty()) { if (reportdQty <= mesWorkOrder.getQty()) {
return mesWorkOrder; return mesWorkOrder;
} }
if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCenter.getIsCheckOrderQty())) { if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCenter.getIsCheckOrderQty())) {
double remainQty = reportdQty - mesWorkOrder.getQty(); double remainQty = reportdQty - mesWorkOrder.getQty();
double rate = remainQty / mesWorkOrder.getQty(); double rate = remainQty / mesWorkOrder.getQty();
if (rate > mesWorkCenter.getOrderRate()/100) { if (rate > mesWorkCenter.getOrderRate() / 100) {
continue; continue;
} else { } else {
return mesWorkOrder; return mesWorkOrder;
@ -542,10 +552,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
} }
return null; return null;
} }
private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List<MesWorkOrder> oldMesWorkOrderList) { private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List<MesWorkOrder> oldMesWorkOrderList) {
// //
DdlPackBean ddlPackBean; DdlPackBean ddlPackBean;
@ -559,7 +569,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
MesWorkOrder oldMesWorkOrder = getBestWorkOrder(productionRecord, oldMesWorkOrderList, mesWorkCenter); MesWorkOrder oldMesWorkOrder = getBestWorkOrder(productionRecord, oldMesWorkOrderList, mesWorkCenter);
if (oldMesWorkOrder == null) { if (oldMesWorkOrder == null) {
LOGGER.error(String.format("未找到匹配的加工单, 条码=%s",productionRecord.getCustSn())); LOGGER.error(String.format("未找到匹配的加工单, 条码=%s", productionRecord.getCustSn()));
return; return;
//throw new ImppBusiException(String.format("未找到匹配的加工单")); //throw new ImppBusiException(String.format("未找到匹配的加工单"));
} }
@ -591,8 +601,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在", throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在",
productionRecord.getPartNo(), mesProductVersion.getProductVersion())); productionRecord.getPartNo(), mesProductVersion.getProductVersion()));
} }
oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1); oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1);
LOGGER.info("工单报工原数量【{}】", oldMesWorkOrder.getReportedQty()); LOGGER.info("工单报工原数量【{}】", oldMesWorkOrder.getReportedQty());
oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty()));
if (StringUtils.isEmpty(productionRecord.getWorkOrderNo())) { if (StringUtils.isEmpty(productionRecord.getWorkOrderNo())) {
oldMesWorkOrder.setCompleteQty(oldMesWorkOrder.getReportedQty()); oldMesWorkOrder.setCompleteQty(oldMesWorkOrder.getReportedQty());
@ -606,10 +616,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) { if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) {
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else { } else {
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
} }
LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty()); LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty());
ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName); ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName);
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
workOrderExtService.update(oldMesWorkOrder); workOrderExtService.update(oldMesWorkOrder);
@ -622,10 +632,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
MesBom bom = new MesBom(); MesBom bom = new MesBom();
bom.setPartNo(mesBom.getPartNo()); bom.setPartNo(mesBom.getPartNo());
bom.setItemPartNo(mesBom.getItemPartNo()); bom.setItemPartNo(mesBom.getItemPartNo());
return bom; return bom;
})); }));
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) { for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
MesBom mesBom = entry.getValue().get(0); MesBom mesBom = entry.getValue().get(0);
newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName());
@ -657,20 +667,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", snDdlPackBean); DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", snDdlPackBean);
DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", snDdlPackBean); DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", snDdlPackBean);
mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo"}, mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo"},
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()},snDdlPackBean); new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()}, snDdlPackBean);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(); DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", packBean); DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", packBean);
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo", "reportStatus"}, productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo", "reportStatus"},
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()},packBean); new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()}, packBean);
LOGGER.info("条码【{}】报工成功,报工工单【{}】",productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo()); LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo());
} }
/** /**
* *
*
* @param productionRecord * @param productionRecord
* @param organizeCode * @param organizeCode
* @return * @return
@ -695,7 +706,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter)) { if (Objects.isNull(mesWorkCenter)) {
MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode); MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode);
} }
List<MesShift> shiftList = mesShiftService.queryMesShift(organizeCode, workCenterCode); List<MesShift> shiftList = mesShiftService.queryMesShift(organizeCode, workCenterCode);
@ -703,13 +714,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (CollectionUtils.isEmpty(shiftList)) { if (CollectionUtils.isEmpty(shiftList)) {
MesPcnException.throwFlowException(String.format("班次信息未维护,产线=%s"), workCenterCode); MesPcnException.throwFlowException(String.format("班次信息未维护,产线=%s"), workCenterCode);
} }
List<MesShift> shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList()); List<MesShift> shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList());
MesShift currentShift = shifts.stream().filter(mesShift -> Objects.equals(mesShift.getShiftCode(), shiftCode)).findFirst().orElse(null); MesShift currentShift = shifts.stream().filter(mesShift -> Objects.equals(mesShift.getShiftCode(), shiftCode)).findFirst().orElse(null);
String orderDate = productionRecord.getLotNo(); String orderDate = productionRecord.getLotNo();
if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0){ if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) {
// 如果比0点大需要找日期前一天的班次的工单号,如果是0点前date =lotNO 如果是0点后则找lot的前一天 // 如果比0点大需要找日期前一天的班次的工单号,如果是0点前date =lotNO 如果是0点后则找lot的前一天
int hours = transfer(productionRecord.getCompleteDateTime()).getHours(); int hours = transfer(productionRecord.getCompleteDateTime()).getHours();
if (hours < 12) { if (hours < 12) {
@ -727,8 +738,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
// 如果找不到则再根据计划开始时间找 // 如果找不到则再根据计划开始时间找
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
list = oldMesWorkOrders.stream().filter(workOrder ->!StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) && list = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) &&
transfer(productionRecord.getCompleteDateTime()).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(productionRecord.getCompleteDateTime()).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList()); transfer(productionRecord.getCompleteDateTime()).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(productionRecord.getCompleteDateTime()).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
} }
workOrders = list; workOrders = list;
@ -748,16 +759,16 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} else { } else {
date = getDate(productionRecord.getLotNo(), 0); date = getDate(productionRecord.getLotNo(), 0);
} }
String endTime = date + " " +currentShift.getStartTime(); String endTime = date + " " + currentShift.getStartTime();
String startTime = date + " " +currentShift.getEndTime(); String startTime = date + " " + currentShift.getEndTime();
workOrders = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) && workOrders = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) &&
transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList()); transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
} else { } else {
// 早班或者中班 则找当天非当前班次的最早单号 // 早班或者中班 则找当天非当前班次的最早单号
String startTime = date + " " +currentShift.getEndTime(); String startTime = date + " " + currentShift.getEndTime();
String endTime = getDate(date, 2) + " " +currentShift.getStartTime(); String endTime = getDate(date, 2) + " " + currentShift.getStartTime();
for (MesWorkOrder workOrder : oldMesWorkOrders) { for (MesWorkOrder workOrder : oldMesWorkOrders) {
if (transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()) { if (transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()) {
break; break;
@ -799,26 +810,27 @@ public class MesWorkOrderService implements IMesWorkOrderService {
/** /**
* flag = 1 1 = 2 * flag = 1 1 = 2
*
* @param lotNo * @param lotNo
* @param flag * @param flag
* @return * @return
*/ */
public String getDate(String lotNo, int flag) { public String getDate(String lotNo, int flag) {
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = null; Date d = null;
try { try {
d = df.parse(lotNo); d = df.parse(lotNo);
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
Calendar cal=Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.setTime(d); cal.setTime(d);
if (flag == 1) { if (flag == 1) {
cal.add(Calendar.DATE, -1); //减1天 cal.add(Calendar.DATE, -1); //减1天
} else if (flag == 2) { } else if (flag == 2) {
cal.add(Calendar.DATE, 1); //加1天 cal.add(Calendar.DATE, 1); //加1天
} }
return df.format(cal.getTime()).substring(0, 10); return df.format(cal.getTime()).substring(0, 10);
} }
private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) {
@ -834,14 +846,15 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
return mesProductVersion; return mesProductVersion;
} }
@Override @Override
public List<MesProductionRecord> getUnReportMesProduceSn(String organizeCode) { public List<MesProductionRecord> getUnReportMesProduceSn(String organizeCode) {
//1.获取生产加工记录production_record表中report_status为待汇报状态的工单 //1.获取生产加工记录production_record表中report_status为待汇报状态的工单
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList()); List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList());
DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean); DdlPreparedPack.getInPackList(statusList, "reportStatus", ddlPackBean);
DdlPreparedPack.getIsNull("workOrderNo",ddlPackBean); DdlPreparedPack.getIsNull("workOrderNo", ddlPackBean);
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER"); String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
if (!StringUtils.isEmpty(workCenterCodes)) { if (!StringUtils.isEmpty(workCenterCodes)) {
@ -877,8 +890,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//1.获取生产加工记录production_record表中report_status为待汇报状态的工单 //1.获取生产加工记录production_record表中report_status为待汇报状态的工单
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList()); List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList());
DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean); DdlPreparedPack.getInPackList(statusList, "reportStatus", ddlPackBean);
DdlPreparedPack.getIsNotNull("workOrderNo",ddlPackBean); DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean);
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER"); String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
//String workCenterCodes ="B19CK01A"; //String workCenterCodes ="B19CK01A";
if (!StringUtils.isEmpty(workCenterCodes)) { if (!StringUtils.isEmpty(workCenterCodes)) {
@ -912,40 +925,41 @@ public class MesWorkOrderService implements IMesWorkOrderService {
@Override @Override
public List<MesProductionRecord> getPreDayReportMesProductionRecord(String organizeCode,List<MesShift> mesShiftList, String workCenterCode ) { public List<MesProductionRecord> getPreDayReportMesProductionRecord(String organizeCode, List<MesShift> mesShiftList, String workCenterCode) {
//1.获取生产加工记录production_record表中report_status为待汇报状态的工单 //1.获取生产加工记录production_record表中report_status为待汇报状态的工单
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
// DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean); // DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean);
DdlPreparedPack.getInPackList( DdlPreparedPack.getInPackList(
Arrays.asList(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), Arrays.asList(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),
MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()) ,"reportStatus",ddlPackBean); MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()), "reportStatus", ddlPackBean);
List<MesShift> collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("10")).collect(Collectors.toList()); List<MesShift> collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("10")).collect(Collectors.toList());
String startTime=" 08:00:00"; String startTime = " 08:00:00";
if(!CollectionUtils.isEmpty(collect)){ if (!CollectionUtils.isEmpty(collect)) {
MesShift mesShift= collect.get(0); MesShift mesShift = collect.get(0);
startTime= StringUtil.isEmpty(mesShift.getStartTime())?" 08:00:00":" "+mesShift.getStartTime(); startTime = StringUtil.isEmpty(mesShift.getStartTime()) ? " 08:00:00" : " " + mesShift.getStartTime();
} }
//获取前一天的早班到当天早班的区间的所有加工记录,统计个数 //获取前一天的早班到当天早班的区间的所有加工记录,统计个数
DdlPreparedPack.timeBuilder( DdlPreparedPack.timeBuilder(
new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1)) + startTime, new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)) + startTime,
TimeTool.getToday() + startTime, TimeTool.getToday() + startTime,
"completeDateTime", ddlPackBean, false); "completeDateTime", ddlPackBean, false);
return productionRecordRao.findByHqlWhere(ddlPackBean); return productionRecordRao.findByHqlWhere(ddlPackBean);
} }
@Override @Override
public List<MesProduceSn> getPreDayReportMesProduceSn(String organizeCode,List<MesProductionRecord> mesProductionRecordList ) { public List<MesProduceSn> getPreDayReportMesProduceSn(String organizeCode, List<MesProductionRecord> mesProductionRecordList) {
DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()), DdlPreparedPack.getInPackList(mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()),
"productSn",snPackBean); "productSn", snPackBean);
DdlPreparedPack.getIsNotNull("workCenterCode", snPackBean); DdlPreparedPack.getIsNotNull("workCenterCode", snPackBean);
return mesProduceSnRao.findByHqlWhere(snPackBean); return mesProduceSnRao.findByHqlWhere(snPackBean);
} }
@Override @Override
public void doProductReport(MesWorkOrder mesWorkOrder,String userName) { public void doProductReport(MesWorkOrder mesWorkOrder, String userName) {
MesWorkOrder mesWorkOrderDb = mesWorkOrderRDao.getById(mesWorkOrder.getId()); MesWorkOrder mesWorkOrderDb = mesWorkOrderRDao.getById(mesWorkOrder.getId());
if (Objects.isNull(mesWorkOrderDb)) { if (Objects.isNull(mesWorkOrderDb)) {
MesPcnException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId()); MesPcnException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId());
@ -978,8 +992,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty()); MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
} }
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断 // 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()),mesWorkOrderDb.getQty()); double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty());
if (rate > MathOperation.div(workCenter.getOrderRate(),100)) { if (rate > MathOperation.div(workCenter.getOrderRate(), 100)) {
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate()); MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate());
} }
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
@ -990,18 +1004,19 @@ 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,mesPart,userName); String sn = getOrderNo(mesWorkOrder, mesPart, userName);
//更新工单 //更新工单
updateMesWorkOrder(mesWorkOrderDb,userName); updateMesWorkOrder(mesWorkOrderDb, userName);
//记录条码表&加工记录表 //记录条码表&加工记录表
//insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb); //insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb);
insertMesProduceSn(mesPart, sn, userName, mesWorkOrder); insertMesProduceSn(mesPart, sn, userName, mesWorkOrder);
//试制单不报工 //试制单不报工
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())) {
//保存数据 //保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) { for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom)); mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, nowTime));
} }
mesProductOffLineRDao.saveAll(mesProductOffLineList); mesProductOffLineRDao.saveAll(mesProductOffLineList);
} }
@ -1072,9 +1087,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
@Override @Override
public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList, String organizeCode, String userName) { public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName) {
List<MesWorkOrder> mesWorkOrderList=new ArrayList<>(); List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
Map<String, List<MesProductionRecord>> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() +"="+ sn.getPartNo())); Map<String, List<MesProductionRecord>> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo()));
for (Map.Entry<String, List<MesProductionRecord>> stringListEntry : mesProductionRecordListMap.entrySet()) { for (Map.Entry<String, List<MesProductionRecord>> stringListEntry : mesProductionRecordListMap.entrySet()) {
List<MesProductionRecord> value = stringListEntry.getValue(); List<MesProductionRecord> value = stringListEntry.getValue();
MesProductionRecord mesProductionRecord = value.get(0); MesProductionRecord mesProductionRecord = value.get(0);
@ -1086,9 +1101,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter)) { if (Objects.isNull(mesWorkCenter)) {
MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode); MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode);
} }
MesWorkOrder item=new MesWorkOrder(); MesWorkOrder item = new MesWorkOrder();
item.setOrganizeCode(organizeCode); item.setOrganizeCode(organizeCode);
item.setWorkCenterCode(workCenterCode); item.setWorkCenterCode(workCenterCode);
item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter());
@ -1096,21 +1111,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
item.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()); item.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue());
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue());
List<MesShift> collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("20")).collect(Collectors.toList()); List<MesShift> collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("20")).collect(Collectors.toList());
MesShift mesShift= collect.get(0); MesShift mesShift = collect.get(0);
item.setShiftCode(mesShift.getShiftCode()); item.setShiftCode(mesShift.getShiftCode());
item.setShiftName(mesShift.getShiftName()); item.setShiftName(mesShift.getShiftName());
String today = TimeTool.getToday(); String today = TimeTool.getToday();
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)); String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1));
item.setPlanStartTime(dayBefore+" "+mesShift.getStartTime()); item.setPlanStartTime(dayBefore + " " + mesShift.getStartTime());
item.setPlanEndTime(today+" "+mesShift.getEndTime()); item.setPlanEndTime(today + " " + mesShift.getEndTime());
//生成工单号 //生成工单号
List<String> orderList=new ArrayList<>(); List<String> orderList = new ArrayList<>();
GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_CENTER_ORDER_NO"); GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_CENTER_ORDER_NO");
genSerialNoModel.setPartNo(workCenterCode); genSerialNoModel.setPartNo(workCenterCode);
orderList = syncFuncService.syncSerialNo(genSerialNoModel,userName, organizeCode, 1).getResultList(); orderList = syncFuncService.syncSerialNo(genSerialNoModel, userName, organizeCode, 1).getResultList();
String orderNo = "A-"+orderList.get(0); String orderNo = "A-" + orderList.get(0);
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean);
if (mesWorkOrderRDao.isExitByHql(orderPackBean)) { if (mesWorkOrderRDao.isExitByHql(orderPackBean)) {
@ -1141,7 +1156,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
MesProductVersion mesProductVersion = checkMesProductVersion(item); MesProductVersion mesProductVersion = checkMesProductVersion(item);
item.setProductVersion(mesProductVersion.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息 //获取bom信息
List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS //发送工单信息给WMS
saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList));
@ -1171,6 +1186,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
workOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"}, workOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"},
new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean); new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean);
} }
public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) { public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) {
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>(); List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
MesWorkOrderToWms mesWorkOrderToWms = null; MesWorkOrderToWms mesWorkOrderToWms = null;
@ -1187,6 +1203,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
return mesWorkOrderToWmsList; return mesWorkOrderToWmsList;
} }
private MesProductVersion checkMesProductVersion(MesWorkOrder item) { private MesProductVersion checkMesProductVersion(MesWorkOrder item) {
DdlPackBean ddlPackBean; DdlPackBean ddlPackBean;
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
@ -1199,17 +1216,18 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesProductVersion; return mesProductVersion;
} }
private Date transfer(String dateStr){ private Date transfer(String dateStr) {
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT); return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
} }
private String getOrderNo(MesWorkOrder mesWorkOrder,MesPart mesPart,String userName) { private String getOrderNo(MesWorkOrder mesWorkOrder, MesPart mesPart, String userName) {
if (StringUtils.isEmpty(mesPart.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo()); 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(); 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 MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom) { String sn, MesBom mesBom, String nowTime) {
MesProductOffLine newMesProductOffLine; MesProductOffLine newMesProductOffLine;
newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
@ -1231,7 +1249,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
return newMesProductOffLine; return newMesProductOffLine;
} }
@ -1246,7 +1264,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate());
mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate()); mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate());
mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate()); mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate());
mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum()+"")); mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum() + ""));
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue());
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
mesProduceSn.setLotNo(TimeTool.getToday()); mesProduceSn.setLotNo(TimeTool.getToday());
@ -1261,7 +1279,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesProduceSnRao.insert(mesProduceSn); return mesProduceSnRao.insert(mesProduceSn);
} }
private void insertMesProductionRecord(MesProduceSn mesProduceSn,MesWorkOrder mesWorkOrder) { private void insertMesProductionRecord(MesProduceSn mesProduceSn, MesWorkOrder mesWorkOrder) {
//生成加工记录 //生成加工记录
MesProductionRecord productionRecord = new MesProductionRecord(); MesProductionRecord productionRecord = new MesProductionRecord();
BeanUtils.copyProperties(mesProduceSn, productionRecord); BeanUtils.copyProperties(mesProduceSn, productionRecord);

@ -52,4 +52,7 @@ public class MesReworkTaskRequestModel {
@ApiModelProperty("类型") @ApiModelProperty("类型")
private Integer type; private Integer type;
@ApiModelProperty("操作人")
private String userName;
} }

Loading…
Cancel
Save