Merge remote-tracking branch 'origin/uat-temp-wj-chongqingdaqu-dev' into uat-temp-wj-chongqingdaqu-dev

uat-temp-wj-chongqingdaqu-dev-temp-logic-20250325-45822
logic.fang 4 months ago
commit bf1030accf

@ -0,0 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageType;
public interface IMesPartPackageTypeService {
MesPartPackageType getMesPartPackageType(String organizeCode, String packageTypeCode);
}

@ -0,0 +1,27 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartPackageTypeService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageType;
import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageTypeRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author jason
*/
@Service
@Slf4j
public class MesPartPackageTypeServiceImpl implements IMesPartPackageTypeService {
@Autowired
private IMesPartPackageTypeRepository partPackageTypeRDao;
@Override
public MesPartPackageType getMesPartPackageType(String organizeCode, String packageTypeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(packageTypeCode, "packageTypeCode", packBean);
return partPackageTypeRDao.getByProperty(packBean);
}
}

@ -0,0 +1,164 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.strategy;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartPackageTypeService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPartShippingGroupService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageType;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.edi.cd.MesCimVolvoJisRackId;
import cn.estsh.i3plus.pojo.mes.bean.edi.cd.MesCimVolvoJisRackIdDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.model.ChengDuVolvoShippingPrintModel;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.edi.cd.MesCimVolvoJisRackIdDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.edi.cd.MesCimVolvoJisRackIdRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @Description : volvo
* @Reference :
* @Author : jason.niu
* @CreateDate : 2025/03/20 16:43
* @Modify:
**/
@Component
@Slf4j
public class ChengDuVolvoShippingPrintStrategyService implements IPrintTemplateStrategyService {
@Autowired
private MesShippingOrderManagementDetailRepository shippingOrderDetailRDao;
@Autowired
private MesCimVolvoJisRackIdRepository rackIdRDao;
@Autowired
private MesCimVolvoJisRackIdDetailRepository rackIdDetailRDao;
@Autowired
private MesPartRepository partRDao;
@Autowired
private IMesPartShippingGroupService shippingGroupService;
@Autowired
private IMesPartPackageTypeService partPackageTypeService;
@Override
public ResultBean execute(MesShippingOrderManagement bean, List<MesShippingOrderManagement> shippingOrderManagementList) {
List<ChengDuVolvoShippingPrintModel> modelList = new ArrayList<>();
for (MesShippingOrderManagement loadingList : shippingOrderManagementList) {
ChengDuVolvoShippingPrintModel model = getPrintData(loadingList);
if (model != null) {
modelList.add(model);
}
}
return ResultBean.success("装车单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList);
}
private ChengDuVolvoShippingPrintModel getPrintData(MesShippingOrderManagement shippingOrder) {
final String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
final String userName = AuthUtil.getSessionUser().getUserName();
ChengDuVolvoShippingPrintModel model = new ChengDuVolvoShippingPrintModel();
DdlPackBean shippingDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(shippingOrder.getId(), "pid", shippingDetailPackBean);
List<MesShippingOrderManagementDetail> shippingDetails = shippingOrderDetailRDao.findByHqlWhere(shippingDetailPackBean);
if (CollectionUtils.isEmpty(shippingDetails)) {
return null;
}
List<String> partNos = new ArrayList<>();
List<Long> rackDetailIdList = new ArrayList<>();
for (MesShippingOrderManagementDetail shippingDetail : shippingDetails) {
if (shippingDetail.getSourceId() != null) {
rackDetailIdList.add(shippingDetail.getSourceId());
}
if (!partNos.contains(shippingDetail.getPartNo())) {
partNos.add(shippingDetail.getPartNo());
}
}
DdlPackBean rackDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(rackDetailIdList, "id", rackDetailPackBean);
List<MesCimVolvoJisRackIdDetail> rackIdDetails = rackIdDetailRDao.findByHqlWhere(rackDetailPackBean);
if (CollectionUtils.isEmpty(rackIdDetails)) {
return null;
}
List<Long> rackIdList = new ArrayList<>();
for (MesCimVolvoJisRackIdDetail rackIdDetail : rackIdDetails) {
if (rackIdDetail.getJisRackIdFid() != null && !rackIdList.contains(rackIdDetail.getJisRackIdFid())) {
rackIdList.add(rackIdDetail.getJisRackIdFid());
}
}
DdlPackBean rackPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(rackIdList, "id", rackPackBean);
List<MesCimVolvoJisRackId> rackIds = rackIdRDao.findByHqlWhere(rackPackBean);
if (CollectionUtils.isEmpty(rackIds)) {
return null;
}
// 净重
double totalNetWeight = 0.0;
// 净重单位
String netWom = "";
// 包装重量
double packageWeight = 0.0;
// 包装重量单位
String tmpGwUom = "";
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(partNos, "partNo", rackPackBean);
List<MesPart> parts = partRDao.findByHqlWhere(partPackBean);
if (!CollectionUtils.isEmpty(parts)) {
for (MesPart mesPart : parts) {
if (mesPart.getNetWeight() != null) {
totalNetWeight += mesPart.getNetWeight();
}
netWom = mesPart.getWeightUom();
}
}
MesPartShippingGroup shippingGroup = shippingGroupService.getMesPartShippingGroup(organizeCode, shippingOrder.getShippingGroupCode());
if (shippingGroup != null && !StringUtils.isEmpty(shippingGroup.getPackageTypeCode()) && (shippingGroup.getPackageTypeCode().startsWith("P") || shippingGroup.getPackageTypeCode().startsWith("p"))) {
MesPartPackageType partPackageType = partPackageTypeService.getMesPartPackageType(organizeCode, shippingGroup.getPackageTypeCode());
if (partPackageType != null) {
packageWeight = partPackageType.getNetWeight() != null ? partPackageType.getNetWeight() : 0;
tmpGwUom = partPackageType.getWeightUom();
}
}
MesCimVolvoJisRackId rackId = rackIds.get(0);
model.setRecelver(rackId.getShipToId());
model.setDock(rackId.getIdForPlaceOfDischarge());
model.setAdviceNoteNo(rackId.getAsnNo());
model.setAdviceNoteBarCode(rackId.getAsnNo());
model.setSupplierAddress(StringUtils.isEmpty(rackId.getShipFrom()) ? rackId.getShipFromId() : rackId.getShipFrom());
model.setNetWeight(String.format("%.2f", totalNetWeight));
model.setNWUom(netWom);
model.setGrossWeight(String.format("%.2f", totalNetWeight + packageWeight));
model.setGWUom(tmpGwUom);
model.setRackId(rackId.getJisRackId());
model.setRackBarCode(rackId.getJisRackId());
model.setFirstPreNo(rackId.getFirstSequenceNumber());
model.setFirstPreBarCode(rackId.getFirstSequenceNumber());
model.setLastPreNo(rackId.getLastSequenceNumber());
model.setLastPreBarCode(rackId.getLastSequenceNumber());
model.setSupplierID(rackId.getSellerId());
model.setSupplierBarCode(rackId.getSellerId());
model.setCountryOfOrigin("CN");
model.setNoofCars(rackDetailIdList.size());
model.setDescription(rackId.getRackReference());
model.setPackageId(rackId.getJisRackId());
model.setPackageBarCode(rackId.getJisRackId());
model.setProcess("LDJIS");
return model;
}
}

@ -153,42 +153,36 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService {
}
//验证是否满足腔数
if (CollectionUtils.isEmpty(curPushList) || curPushList.size() < cellEquipContext.getCavity()) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult,
false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
CollectionUtils.isEmpty(curPushList) ? "当前未接收到工位工单队列,持续监听中..." : String.format("当前接收到到工位工单队列个数[%s]不满足腔数[%s],持续监听中...", curPushList.size(), cellEquipContext.getCavity()),
getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
if (!CollectionUtils.isEmpty(curPushList) && curPushList.size() == cellEquipContext.getCavity()) {
//搜集工单号
List<String> workOrderNoList = curPushList.stream().filter(o -> null != o).map(MesQueueOrderPush::getWorkOrderNo).collect(Collectors.toList());
//搜集工单号
List<String> workOrderNoList = curPushList.stream().filter(o -> null != o).map(MesQueueOrderPush::getWorkOrderNo).collect(Collectors.toList());
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean, workOrderNoList.toString(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean, workOrderNoList.toString(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
workOrderNoList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o ->
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), o, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue())));
//保存上下文扫/读信息:加工单
productionDispatchContextStepService.dispatchScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
workOrderNoList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o ->
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), o, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue())));
//保存上下文扫/读信息:加工单
productionDispatchContextStepService.dispatchScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("获取到工位工单推送队列%s!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("获取到工位工单推送队列%s!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//加工单验证工步 【排序】
stepResult = ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckSortStepService")).executeInState(reqBean);
//加工单验证工步 【排序】
stepResult = ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckSortStepService")).executeInState(reqBean);
if (!stepResult.isCompleted()) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT,
getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
if (stepResult.isCompleted()) {
//保存上下文推单信息
productionDispatchContextStepService.dispatchSortQueuePushContext(reqBean, curPushList);
//保存上下文推单信息
productionDispatchContextStepService.dispatchSortQueuePushContext(reqBean, curPushList);
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- QUEUE_ORDER_PUSH:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(curPushList));
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- QUEUE_ORDER_PUSH:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(curPushList));
return stepResult;
return stepResult;
}
}
} finally {
//当需要加锁且满足腔数的情况下, 保存排序线工单队列推送锁数据
@ -202,6 +196,16 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService {
if (!CollectionUtils.isEmpty(queuePushMap2Locked)) queuePushMap2Locked.values().forEach(o -> unLock(reqBean, o));
}
if (!stepResult.isCompleted()) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT,
getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult,
false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
CollectionUtils.isEmpty(curPushList) ? "当前未接收到工位工单队列,持续监听中..." : String.format("当前接收到到工位工单队列个数[%s]不满足腔数[%s],持续监听中...", curPushList.size(), cellEquipContext.getCavity()),
getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
//加锁

Loading…
Cancel
Save