装车,发运强过,跳过功能开发

tags/yfai-pcn-ext-v1.5
jun 9 months ago
parent a45903ffc7
commit e30b5fcbb5

@ -36,4 +36,7 @@ public interface IMesConfigService {
@ApiOperation(value = "查询分表配置")
List<String> findShardingTablesObjectCfg(String organizeCode, String cfgKey, List<String> itemList);
@ApiOperation(value = "获取配置信息")
List<MesConfig> findMesConfigList(String organizeCode, String cfgCode);
}

@ -18,7 +18,7 @@ import java.util.List;
public interface IMesShippingLoadingCheckService {
@ApiOperation(value = "查询装车单")
MesShippingLoadingCheckModel queryLoadingOrderNo(MesLoadingList loadingVehiclesOrder);
MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingVehiclesOrder);
@ApiOperation(value = "查询装车单-自动推单")
MesLoadingList queryLoadingOrderNoByAutoPushOrder(String shippingGroupNo, String org);

@ -16,7 +16,7 @@ import io.swagger.annotations.ApiOperation;
public interface IMesSortShippingCheckService {
@ApiOperation(value = "扫描发运单")
MesSortShippingCheckModel queryShippingOrderNo(MesShippingOrderManagement shippingOrderManagement);
MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement);
@ApiOperation(value = "保存条码")
MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo);

@ -1,9 +1,11 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
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.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
@ -37,6 +39,9 @@ public class MesBusiController {
@Autowired
private IMesProductionRecordService mesProductionRecordService;
@Autowired
private IMesConfigService mesConfigService;
@GetMapping("/mesProduceSn/query")
@ApiOperation(value = "查询条码信息")
public ResultBean queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) {
@ -62,4 +67,18 @@ public class MesBusiController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/mesConfig/query")
@ApiOperation(value = "查询系统配置")
public ResultBean queryMesConfig(MesConfig mesConfig) {
try {
ValidatorBean.checkNotNull(mesConfig.getOrganizeCode(), "工厂代码不能为空");
ValidatorBean.checkNotNull(mesConfig.getCfgCode(), "配置代码不能为空");
return ResultBean.success("查询成功").setResultList(mesConfigService.findMesConfigList(mesConfig.getOrganizeCode(), mesConfig.getCfgCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesRedisLockUtil;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
@ -61,8 +62,8 @@ public class MesShippingLoadingCheckController {
// 数据校验
ValidatorBean.checkNotNull(loadingVehiclesOrder.getOrderCode(), "装车单不能为空");
loadingVehiclesOrder.setOrganizeCode(organizeCode);
MesShippingLoadingCheckModel model = shippingLoadingCheckService.queryLoadingOrderNo(loadingVehiclesOrder);
ConvertBean.serviceModelUpdate(loadingVehiclesOrder,!StringUtils.isEmpty(loadingVehiclesOrder.getModifyUser()) ? loadingVehiclesOrder.getModifyUser() : AuthUtil.getSessionUser().getUserName());
MesShippingLoadingCheckModel model = shippingLoadingCheckService.doLoadingOrderNoQuery(loadingVehiclesOrder);
return ResultBean.success("查询成功").setResultObject(model);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesRedisLockUtil;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
@ -61,8 +62,8 @@ public class MesSortShippingCheckController {
// 数据校验
ValidatorBean.checkNotNull(shippingOrderManagement.getShippingCode(), "发运单不能为空");
shippingOrderManagement.setOrganizeCode(organizeCode);
MesSortShippingCheckModel model = sortShippingCheckService.queryShippingOrderNo(shippingOrderManagement);
ConvertBean.serviceModelUpdate(shippingOrderManagement,!StringUtils.isEmpty(shippingOrderManagement.getModifyUser()) ? shippingOrderManagement.getModifyUser() : AuthUtil.getSessionUser().getUserName());
MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement);
return ResultBean.success("查询成功").setResultObject(model);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -108,5 +109,14 @@ public class MesConfigService implements IMesConfigService {
return findCfgValueContainItem(organizeCode, MesPcnExtConstWords.MES_SHARDING_TABLES_OBJECT_CFG, cfgKey, CommonEnumUtil.SOFT_TYPE.MES_PCN.name(), MesPcnExtConstWords.COMMA, itemList);
}
@Override
public List<MesConfig> findMesConfigList(String organizeCode, String cfgCode) {
List<MesConfig> configList = getConfigList(organizeCode, cfgCode, null, null);
if(CollectionUtils.isEmpty(configList)){
MesPcnException.throwMesBusiException("配置表数据不存在请维护key【%s】", cfgCode);
}
return configList;
}
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -20,9 +21,11 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description :
@ -55,10 +58,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
private MesPartShippingGroupService mesPartShippingGroupService;
@Override
public MesShippingLoadingCheckModel queryLoadingOrderNo(MesLoadingList loadingList) {
public MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingList) {
//校验装车单
MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode());
MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode(),loadingList.getIsPass(),loadingList.getModifyUser());
//若生成装车单,则一定有装车单明细
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode());
@ -67,7 +70,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
List<MesLoadingListDetail> detailList = vehiclesOrderDetailRepository.findByHqlWhere(orderDetailPackBean);
//是否逆转
if (loadingListResult.getIsReverse() == MesCommonConstant.TRUE_INTEGER) {
if (Objects.equals(loadingListResult.getIsReverse(), MesCommonConstant.TRUE_INTEGER)) {
// 逆转
for (int i = 0; i < detailList.size(); i += loadingListResult.getReverseQuantity()) {
if (i + loadingListResult.getReverseQuantity() - 1 < detailList.size()) {
@ -128,21 +131,23 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
public MesShippingLoadingCheckModel saveVehiclesOrderAndDetail(MesShippingLoadingCheckModel model, String organizeCode, String userInfo) {
//校验装车单
MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode);
MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode,model.getIsPass(),userInfo);
//根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。
if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){
Optional<MesLoadingListDetail> loadingListDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst();
if(loadingListDetailOptional.isPresent()){
MesLoadingListDetail loadingListDetail = loadingListDetailOptional.get();
updateLoadingListDetail(model, userInfo, loadingList, loadingListDetail,MesPcnExtConstWords.SHIP_PASS,MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue());
}else{
throw new ImppBusiException(String.format("【%s】明细已全部扫描完成请检查数据", loadingList.getOrderCode()));
}
}else{
//校验发运单是否存在
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", orderDetailPackBean);
DdlPreparedPack.getStringEqualPack(model.getShippingCode(), "shippingCode", orderDetailPackBean);
MesLoadingListDetail vehiclesOrderDetail = vehiclesOrderDetailRepository.getByProperty(orderDetailPackBean);
if (StringUtils.isEmpty(vehiclesOrderDetail)) {
throw new ImppBusiException(String.format("【%s】此发运单不存在或还未生成装车单明细请检查数据", model.getShippingCode()));
}
checkLoadingList(model, organizeCode, loadingList);
//查询零件发运组
MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, loadingList.getPartShippingGroupCode());
//根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。
Boolean scanflg = false;
boolean scanflg = false;
for (MesLoadingListDetail loadingListDetail : model.getDetailList()) {
if (loadingListDetail.getShippingCode().equals(model.getShippingCode())) {
@ -150,7 +155,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
throw new ImppBusiException(String.format("【%s】此发运单已经扫描过请检查数据", model.getShippingCode()));
}
//校验发运单明细顺序
if(CommonEnumUtil.VALID == shippingGroup.getIsEnableLoadingFailSafe()){
if(!StringUtils.isEmpty(shippingGroup.getIsEnableLoadingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableLoadingFailSafe()){
Optional<MesLoadingListDetail> detail = model.getDetailList().stream().filter(k -> k.getShippingCode().compareTo(loadingListDetail.getShippingCode()) < 0 && !Objects.equals(k.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst();
if(detail.isPresent()){
throw new ImppBusiException(String.format("装车单【%s】启用明细顺序防错发运单【%s】前还有未扫描的发运单请检查数据", loadingList.getOrderCode(), model.getShippingCode()));
@ -158,42 +163,21 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
}
//判断是否需要排序校验 默认排序则需要校验
if (loadingList.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) {
if (!StringUtils.isEmpty(loadingList.getScanSeqWay()) && loadingList.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) {
//获取明细中最小的
Long minSeq = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getScanSn())).mapToLong(k -> k.getSeq()).min().getAsLong();
long minSeq = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getScanSn())).mapToLong(MesLoadingListDetail::getSeq).min().getAsLong();
//若扫描的不是最小顺序 则报错
if (minSeq.longValue() != loadingListDetail.getSeq().longValue()) {
if (minSeq != loadingListDetail.getSeq()) {
throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误请检查数据", model.getShippingCode()));
}
}
loadingListDetail.setScanSn(model.getShippingCode());
loadingListDetail.setTempStatus(MesCommonConstant.TRUE_INTEGER);
loadingListDetail.setTempStatusVal("扫描完成");
//根据是否启动记忆判断 若启用记忆,则根据保存数据库
if (loadingList.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) {
//若装车单状态为创建或发布已生成ASN 则写入开始扫描时间
if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() ||
loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() ||
loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue()) {
loadingList.setStartScanTime(TimeTool.getNowTime(true));
}
loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue());
ConvertBean.serviceModelUpdate(loadingList, userInfo);
update(loadingList);
loadingListDetail.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
ConvertBean.serviceModelUpdate(loadingListDetail, userInfo);
update(loadingListDetail);
}
//更新页面状态
updateLoadingListDetail(model, userInfo, loadingList, loadingListDetail,"扫描完成",MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
//根据扫描的装车单找到是否先装车配置
//若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。
if (loadingList.getIsFirstInstall() == MesCommonConstant.FALSE_INTEGER) {
if (Objects.equals(loadingList.getIsFirstInstall(), MesCommonConstant.FALSE_INTEGER)) {
MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getById(loadingListDetail.getShippingId());
if (!StringUtils.isEmpty(orderManagement)) {
throw new ImppBusiException(String.format("【%s】此装车单中发运单为【%s】还未做完【排序发运校验】请检查数据", model.getShippingCode(), loadingListDetail.getShippingCode()));
@ -203,12 +187,12 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
break;
}
}
if (!scanflg) {
throw new ImppBusiException(String.format("【%s】扫描的发运单号不在【%s】此装车单中请检查数据", model.getShippingCode(), model.getOrderCode()));
}
}
Long count = model.getDetailList().stream().filter(k -> k.getTempStatus() == MesCommonConstant.TRUE_INTEGER).count();
Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).count();
model.setIsScanCount(count.intValue());
//全部扫描完成
@ -240,6 +224,41 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
return model;
}
private void checkLoadingList(MesShippingLoadingCheckModel model, String organizeCode, MesLoadingList loadingList) {
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", orderDetailPackBean);
DdlPreparedPack.getStringEqualPack(model.getShippingCode(), "shippingCode", orderDetailPackBean);
MesLoadingListDetail vehiclesOrderDetail = vehiclesOrderDetailRepository.getByProperty(orderDetailPackBean);
if (StringUtils.isEmpty(vehiclesOrderDetail)) {
throw new ImppBusiException(String.format("【%s】此发运单不存在或还未生成装车单明细请检查数据", model.getShippingCode()));
}
}
private void updateLoadingListDetail(MesShippingLoadingCheckModel model, String userInfo, MesLoadingList loadingList, MesLoadingListDetail loadingListDetail, String tempStatusVal, Integer status) {
loadingListDetail.setScanSn(model.getShippingCode());
loadingListDetail.setTempStatus(MesCommonConstant.TRUE_INTEGER);
loadingListDetail.setTempStatusVal(tempStatusVal);
//根据是否启动记忆判断 若启用记忆,则根据保存数据库
if (Objects.equals(loadingList.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
//若装车单状态为创建或发布已生成ASN 则写入开始扫描时间
if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() ||
loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() ||
loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue()) {
loadingList.setStartScanTime(TimeTool.getNowTime(true));
}
loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue());
ConvertBean.serviceModelUpdate(loadingList, userInfo);
update(loadingList);
loadingListDetail.setStatus(status);
ConvertBean.serviceModelUpdate(loadingListDetail, userInfo);
update(loadingListDetail);
}
}
private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) {
MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode);
if(Objects.isNull(shippingGroup)){
@ -254,7 +273,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
* @param orderCode
* @param org
*/
public MesLoadingList checkLoadingList(String orderCode, String org) {
public MesLoadingList checkLoadingList(String orderCode, String org,Integer isPass,String userName) {
//校验装车单是否存在
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org);
@ -263,7 +282,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
if (StringUtils.isEmpty(loadingList)) {
throw new ImppBusiException(String.format("【%s】此装车单不存在请检查数据", orderCode));
}
//校验装车单状态 必须是未装车条码
if (loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() &&
loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() &&
@ -284,12 +302,18 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue());
orderPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringSmallerNotEqualPack(loadingList.getSeq(), "seq", orderPackBean);
DdlPreparedPack.getStringEqualPack(loadingList.getPartShippingGroupCode(),"partShippingGroupCode",orderPackBean);
DdlPreparedPack.getInPackList(loadingListStatusList, "status", orderPackBean);
int count = vehiclesOrderRepository.findByHqlWhereCount(orderPackBean);
if (count != 0) {
//强过
if(!Objects.isNull(isPass) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isPass){
updateLoadingListClose(loadingListStatusList,loadingList,userName);
}else {
throw new ImppBusiException(String.format("【%s】装车单对应排序【%s】前存在未扫描发运的装车单请检查数据",
orderCode, loadingList.getSeq()));
}
}
return loadingList;
}
@Override
@ -310,4 +334,64 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
vehiclesOrderDetailRepository.update(item);
}
private void updateLoadingListClose(List<Integer> loadingListStatusList,MesLoadingList loadingList,String userName){
List<MesLoadingList> mesLoadingList = getMesLoadingListList(loadingListStatusList, loadingList);
if(CollectionUtils.isEmpty(mesLoadingList)) return;
List<Long> idList = mesLoadingList.stream().map(MesLoadingList::getId).distinct().collect(Collectors.toList());
//关闭装发运单明细
List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), idList);
if(!CollectionUtils.isEmpty(mesShippingOrderManagementList)){
closeShippingOrderDetails(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()));
}
//关闭发运单
closeShippingOrder(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()));
//关闭装车单明细
closeLoadingDetails(loadingList.getOrganizeCode(), userName, idList);
//关闭装车单
closeLoadingOrder(loadingList.getOrganizeCode(), userName, idList);
}
private void closeShippingOrderDetails(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "pid",packBean);
shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private List<MesShippingOrderManagement> getMesShippingOrderManagementList(String organizeCode, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList,"loadingListId",packBean);
return shippingOrderManagementRepository.findByHqlWhere(packBean);
}
private void closeShippingOrder(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id",packBean);
shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private void closeLoadingDetails(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "pid",packBean);
vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private void closeLoadingOrder(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id",packBean);
vehiclesOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.MES_LOADING_STATUS.CLOSED.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private List<MesLoadingList> getMesLoadingListList(List<Integer> loadingListStatusList, MesLoadingList loadingList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode());
DdlPreparedPack.getStringSmallerNotEqualPack(loadingList.getSeq(), "seq", packBean);
DdlPreparedPack.getStringEqualPack(loadingList.getPartShippingGroupCode(),"partShippingGroupCode",packBean);
DdlPreparedPack.getInPackList(loadingListStatusList, "status", packBean);
return vehiclesOrderRepository.findByHqlWhere(packBean);
}
}

@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesSortShippingCheckService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -81,9 +82,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
private MesPartShippingGroupService mesPartShippingGroupService;
@Override
public MesSortShippingCheckModel queryShippingOrderNo(MesShippingOrderManagement shippingOrderManagement) {
public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) {
//校验发运单是否存在
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(shippingOrderManagement.getShippingCode(), "shippingCode", orderManagementPackBean);
@ -107,16 +106,21 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue());
orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", orderManagementPackBean);
DdlPreparedPack.getStringEqualPackOr(orderManagement.getShippingGroupCode(),"shippingGroupCode",orderManagementPackBean);
DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean);
int queryCount = shippingOrderManagementRepository.findByHqlWhereCount(orderManagementPackBean);
if (queryCount != 0) {
if(!Objects.isNull(shippingOrderManagement.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == shippingOrderManagement.getIsPass()){
updateLoadingListClose(statusForCheckList,shippingOrderManagement,shippingOrderManagement.getModifyUser());
}else{
throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单请检查数据",
orderManagement.getShippingCode(), orderManagement.getSeq()));
}
}
//根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据!
if (orderManagement.getIsLoading() == MesCommonConstant.TRUE_INTEGER) {
if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) {
if (StringUtils.isEmpty(orderManagement.getOrderCode()) ) {
throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没绑定装车单号,请检查数据!", shippingOrderManagement.getShippingCode()));
@ -132,7 +136,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//判断是否先装车
if (orderManagement.getIsFirstInstall() == MesCommonConstant.TRUE_INTEGER) {
if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) {
//若没进行装车校验,则提示【%s】此发运单对应的【%s】此装车单状态为【%s】请选择状态为【%s】的数据
if (loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()) {
@ -205,15 +209,25 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
@Override
public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo) {
//校验条码
MesProduceSn produceSn = checkSn(model, organizeCode);
//校验发运单是否存在
MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, organizeCode);
//零件发运组
MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode());
//根据条码找到对应的物料号若物料号一致则修改扫描flg将flg改为true.
//根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。
if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){
Optional<MesShippingOrderManagementDetail> shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst();
if(shippingOrderManagementDetailOptional.isPresent()){
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get();
MesProduceSn produceSn = new MesProduceSn();
produceSn.setProductSn(model.getSn());
updateOrderManagementDetails(userInfo, produceSn, orderManagement, mesShippingOrderManagementDetail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(),MesPcnExtConstWords.SHIP_PASS);
}else{
throw new ImppBusiException(String.format("【%s】明细已全部扫描完成请检查数据", orderManagement.getShippingCode()));
}
}else{
//校验条码
MesProduceSn produceSn = checkSn(model, organizeCode);
boolean scanFlg = false;
for (MesShippingOrderManagementDetail detail : model.getDetailList()) {
if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode())) {
@ -237,13 +251,37 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
}
scanFlg = true;
updateOrderManagementDetails(userInfo, produceSn, orderManagement, detail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),"扫描完成");
break;
}
}
if (!scanFlg) {
throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配请检查数据", model.getSn(), produceSn.getPartNo()));
}
}
Long count = model.getDetailList().stream().filter(k -> k.getIsScanFlg() == MesCommonConstant.TRUE_INTEGER).count();
model.setIsScanCount(count.intValue());
//当前发运单全部扫描完成 并且不需要扫位置码
if (count.intValue() == model.getDetailList().size() && StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
//保存数据库
saveDate(orderManagement, model, organizeCode, userInfo);
}
return model;
}
private void updateOrderManagementDetails(String userInfo, MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail,Integer status,String remark) {
detail.setBarcode(produceSn.getProductSn());
if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
//根据是否启动记忆判断 若启用记忆,则根据保存数据库
if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && orderManagement.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) {
if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
//若发运单状态为创建或发布 则写入开始扫描时间
if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() ||
@ -256,7 +294,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
update(orderManagement);
detail.setActualQty(1);
detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
detail.setStatus(status);
detail.setRemark(remark);
ConvertBean.serviceModelUpdate(detail, userInfo);
updateDetail(detail);
//内部条码更新条码状态
@ -267,25 +306,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
}
}
}
break;
}
}
if (!scanFlg) {
throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配请检查数据", model.getSn(), produceSn.getPartNo()));
}
Long count = model.getDetailList().stream().filter(k -> k.getIsScanFlg() == MesCommonConstant.TRUE_INTEGER).count();
model.setIsScanCount(count.intValue());
//当前发运单全部扫描完成 并且不需要扫位置码
if (count.intValue() == model.getDetailList().size() && StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
//保存数据库
saveDate(orderManagement, model, organizeCode, userInfo);
}
return model;
}
@Override
@ -548,4 +568,45 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
public void updateDetail(MesShippingOrderManagementDetail item) {
shippingOrderManagementDetailRepository.update(item);
}
private void updateLoadingListClose(List<Integer> loadingListStatusList,MesShippingOrderManagement orderManagement,String userName){
List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesLoadingListList(loadingListStatusList, orderManagement);
if(CollectionUtils.isEmpty(mesShippingOrderManagementList)) return;
List<Long> idList = mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).distinct().collect(Collectors.toList());
//关闭发运单明细
closeShippingOrderDetails(orderManagement.getOrganizeCode(), userName, idList);
//关闭发运单
closeShippingOrder(orderManagement.getOrganizeCode(), userName, idList);
//更新装车单明细
updateLoadingDetails(orderManagement.getOrganizeCode(), userName, idList);
}
private List<MesShippingOrderManagement> getMesLoadingListList(List<Integer> statusForCheckList, MesShippingOrderManagement orderManagement) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", packBean);
DdlPreparedPack.getStringEqualPackOr(orderManagement.getShippingGroupCode(),"shippingGroupCode",packBean);
DdlPreparedPack.getInPackList(statusForCheckList, "status", packBean);
return shippingOrderManagementRepository.findByHqlWhere(packBean);
}
private void closeShippingOrderDetails(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "pid",packBean);
shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(), MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private void closeShippingOrder(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id",packBean);
shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private void updateLoadingDetails(String organizeCode, String userName, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "shippingId",packBean);
vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
}

@ -34,6 +34,9 @@ public class MesShippingLoadingCheckModel {
@ApiParam("已扫描数量")
private Integer isScanCount = 0;
@ApiParam("跳过")
private Integer isPass;
@ApiParam("装车单明细")
private List<MesLoadingListDetail> detailList;

@ -30,6 +30,8 @@ public class MesSortShippingCheckModel {
private String sn;
@ApiParam("位置码")
private String locationCode;
@ApiParam("跳过")
private Integer isPass;
@ApiParam("已扫描数量")
private Integer isScanCount = 0;

@ -396,5 +396,8 @@ public class MesPcnExtConstWords {
//条码打印产线
public static final String PRINT_WORK_CENTER_COED = "PRINT_WORK_CENTER_COED";
//强过
public static final String SHIP_PASS = "跳过";
public static final String STRONGER_PASS = "强过";
}

Loading…
Cancel
Save