Merge remote-tracking branch 'origin/uat-temp-xw-202501200000-44905' into test

tags/yfai-mes-ext-v3.2
王杰 2 months ago
commit 12f0aabdce

@ -3,8 +3,10 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
@ -22,9 +24,28 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic
@ApiOperation("查询发运单明细")
ListPager<MesShippingOrderManagementDetailModel> queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager);
@ApiOperation("查询发运单明细")
ListPager<MesShippingOrderManagementDetailModel> queryMesShippingErrorDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager);
@ApiOperation("根据客户零件匹配零件号")
public ResultBean supplyBycustPartNo(Long[] ids);
@ApiOperation("根据CBR匹配零件号")
public ResultBean supplyByCBR(Long[] ids);
@ApiOperation("手动发运改数量")
public ResultBean updateQty(Long[] ids);
@ApiOperation("同步")
public ResultBean syncShip(Long[] ids);
@ApiOperation("发运退回")
void doShippingBack(Long[] idList,String organizeCode,String userName);
@ApiOperation("查询发运零件子零件明细")
ListPager<MesWorkOrderPart> queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager);
void doHandleCockpitShippingError(MesShippingOrderManagementDetail detail, MesWorkOrder workOrder);
}

@ -3,9 +3,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.MesHandleShippingErrorModel;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
@ -55,6 +57,85 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle
}
}
@ApiOperation(value = "发运单异常明细", notes = "发运单异常明细")
@GetMapping("/master/error/query")
public ResultBean queryMesShippingErrorDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) {
try {
return ResultBean.success("查询成功").setListPager(shippingOrderManagementDetailService.queryMesShippingErrorDetailsByPager(mesShippingOrderManagementDetailModel,pager));
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "cockpit发运处理", notes = "cockpit发运处理")
@PostMapping("/handle-cockpit-shipping-error")
public ResultBean handleCockpitShippingError(@RequestBody MesHandleShippingErrorModel request) {
try {
MesShippingOrderManagementDetail detail = shippingOrderManagementDetailService.get(request.getDetail().getId());
if (detail == null) {
return ResultBean.fail("无效发运单明细");
}
if (detail.getPid() == null) {
return ResultBean.fail("发运单明细未关联有效发运单");
}
shippingOrderManagementDetailService.doHandleCockpitShippingError(detail, request.getWorkOrder());
return ResultBean.success("处理成功");
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "根据客户零件匹配零件号", notes = "根据客户零件匹配零件号")
@GetMapping("/master/part/supplyBycustPartNo")
public ResultBean supplyBycustPartNo(Long[] ids) {
try {
return shippingOrderManagementDetailService.supplyBycustPartNo(ids);
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "根据CBR匹配零件号", notes = "根据CBR匹配零件号")
@GetMapping("/master/part/supplyByCBR")
public ResultBean supplyByCBR(Long[] ids) {
try {
return shippingOrderManagementDetailService.supplyByCBR(ids);
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "修改数量", notes = "修改数量")
@GetMapping("/master/part/updateQty")
public ResultBean updateQty(Long[] ids) {
try {
return shippingOrderManagementDetailService.updateQty(ids);
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "发运同步", notes = "发运同步")
@GetMapping("/master/part/syncShip")
public ResultBean syncShip(Long[] ids) {
try {
return shippingOrderManagementDetailService.syncShip(ids);
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "发运退回", notes = "发运退回")
@PutMapping("/doShippingBack")
public ResultBean doShippingBack(@RequestBody Long[] idList) {

@ -132,7 +132,11 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
query.setParameter("organizeCode", mesShippingOrderManagementDetailModel.getOrganizeCode());
query.setParameter("status", MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
if (mesShippingOrderManagementDetailModel.getStatus() == null) {
query.setParameter("status", MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
} else {
query.setParameter("status", mesShippingOrderManagementDetailModel.getStatus());
}
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingType()))
query.setParameter("shippingType", mesShippingOrderManagementDetailModel.getShippingType());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeStart()))
@ -147,6 +151,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde
query.setParameter("publishTimeStart", mesShippingOrderManagementDetailModel.getPublishTimeStart());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd()))
query.setParameter("publishTimeEnd", mesShippingOrderManagementDetailModel.getPublishTimeEnd());
}
private String getOrderBy(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel) {
@ -166,6 +171,8 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde
commonHql.append(" and d.status = :status ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingCode()))
commonHql.append(" and m.shippingCode like '%").append(mesShippingOrderManagementDetailModel.getShippingCode()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingGroupCode()))
commonHql.append(" and m.shippingGroupCode like '%").append(mesShippingOrderManagementDetailModel.getShippingGroupCode()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getBarcode()))
commonHql.append(" and d.barcode like '%").append(mesShippingOrderManagementDetailModel.getBarcode()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPartNo()))
@ -188,6 +195,8 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde
commonHql.append(" and m.publishTime >= :publishTimeStart ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd()))
commonHql.append(" and m.publishTime <= :publishTimeEnd ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getDetailsStatus()))
commonHql.append(" and d.status = " + mesShippingOrderManagementDetailModel.getDetailsStatus() + "");
return commonHql.toString();
}
@Override

@ -1,34 +1,38 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService;
import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
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.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
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.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@ -42,10 +46,41 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
private MesShippingOrderManagementDetailRepository shippingOrderDetailRepository;
@Autowired
private MesShippingOrderManagementRepository shippingOrderRepository;
@Autowired
private IMesProduceSnService mesProduceSnService;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
@Autowired
private MesCustomerPartRepository mesCustomerPartRepository;
@Autowired
private IMesMoveRuleRepository mesMoveRuleRepository;
@Autowired
private MesCimGmCbrRuleRepository mesCimGmCbrRuleRepository;
@Autowired
private MesWorkOrderRepository mesWorkOrderRDao;
@Autowired
private MesWorkOrderPartRepository mesWorkOrderPartRepository;
@Autowired
private MesPartShippingGroupRepository mesPartShippingGroupRDao;
@Autowired
private MesJisShippingRepository jisShippingRepository;
@Autowired
private MesPartService mesPartService;
@Autowired
private IMesPartShippingGroupService mesPartShippingGroupService;
@Autowired
private IMesConfigService configService;
protected void setPackQueryBean(MesShippingOrderManagementDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
@ -71,6 +106,200 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
}
@Override
public ListPager<MesShippingOrderManagementDetailModel> queryMesShippingErrorDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) {
mesShippingOrderManagementDetailModel.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue());
return shippingOrderManagementDetailDao.queryMesShippingDetailsByPager(mesShippingOrderManagementDetailModel, pager);
}
@Override
public ResultBean supplyBycustPartNo(Long[] ids) {
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
/*String organizeCode = "CR01";
String userName ="zxw";*/
List<MesShippingOrderManagementDetail> detailList = getManagementDetails(ids, organizeCode, userName);
for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) {
DdlPackBean cbrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesShippingOrderManagementDetail.getCustPartNo(), "custPartNo", cbrPackBean);
MesCimGmCbrRule mesCimGmCbrRule = mesCimGmCbrRuleRepository.getByProperty(cbrPackBean);
if (mesCimGmCbrRule != null) {
log.info("CBR规则已配置,不允许此操作,你通过CBR匹配零件号客户零件号:{}", mesShippingOrderManagementDetail.getCustPartNo());
return ResultBean.fail(String.format("CBR规则已配置,不允许此操作,你通过CBR匹配零件号客户零件号:%s", mesShippingOrderManagementDetail.getCustPartNo()));
}
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesShippingOrderManagementDetail.getCustPartNo(), "custPartNo", ddlPackBean);
MesCustomerPart mesCustomerPart = mesCustomerPartRepository.getByProperty(ddlPackBean);
if (mesCustomerPart == null) {
log.info("客户零件号不存在:{}", mesShippingOrderManagementDetail.getCustPartNo());
return ResultBean.fail(String.format("客户零件号不存在:%s", mesShippingOrderManagementDetail.getCustPartNo()));
}
mesShippingOrderManagementDetail.setPartNo(mesCustomerPart.getErpPartNo());
mesShippingOrderManagementDetail.setPartName(mesCustomerPart.getErpPartName());
}
shippingOrderDetailRepository.saveAll(detailList);
return ResultBean.success().setResultList(detailList);
}
@Override
public ResultBean supplyByCBR(Long[] ids) {
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
/*String organizeCode = "CR01";
String userName ="zxw";*/
List<MesShippingOrderManagementDetail> detailList = getManagementDetails(ids, organizeCode, userName);
for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesShippingOrderManagementDetail.getCustPartNo(), "custPartNo", ddlPackBean);
MesCimGmCbrRule mesCimGmCbrRule = mesCimGmCbrRuleRepository.getByProperty(ddlPackBean);
if (mesCimGmCbrRule == null) {
log.info("CBR规则未配置客户零件号:{}", mesShippingOrderManagementDetail.getCustPartNo());
return ResultBean.fail(String.format("CBR规则未配置:客户零件号:%s", mesShippingOrderManagementDetail.getCustPartNo()));
}
mesShippingOrderManagementDetail.setPartNo(mesCimGmCbrRule.getErpPartNo());
mesShippingOrderManagementDetail.setPartName(mesCimGmCbrRule.getErpPartName());
}
shippingOrderDetailRepository.saveAll(detailList);
return ResultBean.success().setResultList(detailList);
}
@Override
public ResultBean updateQty(Long[] ids) {
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
/*String organizeCode = "CR01";
String userName ="zxw";*/
List<MesShippingOrderManagementDetail> detailList = getManagementDetails(ids, organizeCode, userName);
for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) {
if (StringUtils.isEmpty(mesShippingOrderManagementDetail.getPartNo())) {
log.info("发运单明细对应零件号为空");
return ResultBean.fail(String.format("发运单明细对应零件号为空"));
}
mesShippingOrderManagementDetail.setActualQty((int)mesShippingOrderManagementDetail.getPlanQty());
ConvertBean.serviceModelUpdate(mesShippingOrderManagementDetail, userName); }
if (!CollectionUtils.isEmpty(detailList)) {
shippingOrderDetailRepository.saveAll(detailList);
}
return ResultBean.success("操作成功");
}
@Override
public ResultBean syncShip(Long[] ids) {
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
/*String organizeCode = "CR01";
String userName ="zxw";*/
List<MesShippingOrderManagementDetail> detailList = getManagementDetails(ids, organizeCode, userName);
List<Long> idList = detailList.stream().map(MesShippingOrderManagementDetail::getPid).distinct().collect(Collectors.toList());
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id", orderPackBean);
List<MesShippingOrderManagement> shippingOrderManagements = shippingOrderRepository.findByHqlWhere(orderPackBean);
Map<Long, MesShippingOrderManagement> orderMap = shippingOrderManagements.stream().collect(Collectors.toMap(MesShippingOrderManagement::getId, Function.identity()));
List<MesJisShipping> mesJisShippings = new ArrayList<>();
for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) {
MesShippingOrderManagement mesShippingOrderManagement = orderMap.get(mesShippingOrderManagementDetail.getPid());
if (StringUtils.isEmpty(mesShippingOrderManagementDetail.getPartNo())) {
log.info("发运单明细对应零件号为空");
return ResultBean.fail(String.format("发运单明细对应零件号为空"));
}
if ((int) mesShippingOrderManagementDetail.getPlanQty() != mesShippingOrderManagementDetail.getActualQty()) {
log.info("计划数量和实际数量不相等");
return ResultBean.fail(String.format("计划数量和实际数量不相等"));
}
MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(organizeCode, mesShippingOrderManagement.getShippingGroupCode());
mesShippingOrderManagementDetail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
mesShippingOrderManagementDetail.setRemark("手工发运");
ConvertBean.serviceModelUpdate(mesShippingOrderManagementDetail, userName);
mesJisShippings.add(getMesJisShippings(mesShippingOrderManagement, mesShippingOrderManagementDetail, userName, mesPartShippingGroup));
}
if (!CollectionUtils.isEmpty(detailList)) {
shippingOrderDetailRepository.saveAll(detailList);
}
// jis同步
if(!CollectionUtils.isEmpty(mesJisShippings)){
jisShippingRepository.saveAll(mesJisShippings);
}
return ResultBean.success("操作成功");
}
public MesJisShipping getMesJisShippings(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail orderManagementDetail,String userName,MesPartShippingGroup mesPartShippingGroup) {
String warerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WAREHOUS") : mesPartShippingGroup.getSrcWarerhouse();
String erpWarehous = configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WAREHOUS");
String useCustOrderNo = configService.getCfgValue(orderManagement.getOrganizeCode(), "USE_CUST_ORDER_NO");
MesJisShipping jisShipping = new MesJisShipping();
BeanUtils.copyProperties(orderManagement, jisShipping);
BeanUtils.copyProperties(orderManagementDetail, jisShipping);
jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode());
jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setErpWarerhouse(warerhouse);
jisShipping.setErpWarehous(erpWarehous);
jisShipping.setDock(orderManagement.getSendDockCode());
jisShipping.setCusCode(orderManagement.getCustCode());
jisShipping.setCusDock(orderManagement.getCustDockCode());
jisShipping.setCustOrderNo(useCustOrderNo);
// 20241115 没有给carNo赋值
jisShipping.setCarNo(orderManagementDetail.getVin());
jisShipping.setSerialNumber(orderManagementDetail.getBarcode());
jisShipping.setQuantityPerCar(1d);
jisShipping.setPartNo(orderManagementDetail.getPartNo());
jisShipping.setOffTime(TimeTool.getNowTime(true));
jisShipping.setShippingOrderCode(orderManagement.getShippingCode());
jisShipping.setFid(UUID.randomUUID().toString());
jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelInitialize(jisShipping, userName);
return jisShipping;
}
public MesJisShipping getMesJisShipping(MesShippingOrderManagement orderManagement,MesShippingOrderManagementDetail detail, String srcLocateNo, MesWorkOrderPart orderPart, String userName) {
MesJisShipping jisShipping = new MesJisShipping();
BeanUtils.copyProperties(orderManagement, jisShipping, MesExtConstWords.ID);
BeanUtils.copyProperties(detail, jisShipping, MesExtConstWords.ID);
jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode());
jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setErpWarerhouse(srcLocateNo);
jisShipping.setErpWarehous(srcLocateNo);
jisShipping.setDock(orderManagement.getSendDockCode());
jisShipping.setCusCode(orderManagement.getCustCode());
jisShipping.setCusDock(orderManagement.getCustDockCode());
jisShipping.setCustOrderNo(detail.getCustOrderNo());
// 子零件信息赋值
jisShipping.setPartNo(orderPart.getPartNo());
jisShipping.setUnit(orderPart.getItemUnit());
// 20241115 没有给carNo赋值
jisShipping.setCarNo(detail.getVin());
jisShipping.setSerialNumber(orderPart.getWorkOrderNo());
jisShipping.setQuantityPerCar(orderPart.getItemQty());
jisShipping.setOffTime(TimeTool.getNowTime(true));
jisShipping.setShippingOrderCode(orderManagement.getShippingCode());
jisShipping.setFid(UUID.randomUUID().toString());
jisShipping.setRemark(null);
jisShipping.setDescription(null);
jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelInitialize(jisShipping, userName);
return jisShipping;
}
@Override
public void doShippingBack(Long[] idList, String organizeCode, String userName) {
List<MesShippingOrderManagementDetail> detailList = getManagementDetails(idList, organizeCode, userName);
if (CollectionUtils.isEmpty(detailList)) MesException.throwMesBusiException("选择数据无效,请检查");
@ -113,6 +342,7 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
return detailList;
}
@Override
public ListPager<MesWorkOrderPart> queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager) {
List<MesWorkOrderPart> modelList=new ArrayList<>();
List<MesShippingOrderManagementDetail> shippingDetails = shippingOrderManagementDetailDao.queryMesShippingOrderManagementDetail(bean);
@ -140,4 +370,80 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
return new ListPager<>(modelList, pager);
}
@Override
public void doHandleCockpitShippingError(MesShippingOrderManagementDetail detail, MesWorkOrder workOrder) {
if (StringUtils.isEmpty(detail.getPartNo())) {
MesException.throwFlowException("发运单明细对应零件号为空");
}
if (StringUtils.isEmpty(workOrder.getCustSn())) {
MesException.throwMesBusiException("工单【%s】不存在客户条码", workOrder.getWorkOrderNo());
}
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(detail.getPid(), "id", orderPackBean);
MesShippingOrderManagement orderManagement = shippingOrderRepository.getByProperty(orderPackBean);
if (orderManagement == null || StringUtils.isEmpty(orderManagement.getShippingGroupCode())) {
MesException.throwFlowException("发运单主表不存在");
}
DdlPackBean partShippingGroupPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringLikerPack(orderManagement.getShippingGroupCode(), "shippingGroupCode", partShippingGroupPackBean);
MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupRDao.getByProperty(partShippingGroupPackBean);
if (mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getConfirmPartType()) || Integer.parseInt(mesPartShippingGroup.getConfirmPartType()) != MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.SHIPPING_GROUP_CONFIRM_PART_TYPE_30.getValue()) {
MesException.throwFlowException("零件发运组【%s】扫描确认零件方式应为【装配目视单和客户零件条码】", orderManagement.getShippingGroupCode());
}
DdlPackBean workOrderPartPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrder.getWorkOrderNo(), "workOrderNo", workOrderPartPackBean);
List<MesWorkOrderPart> workOrderParts = mesWorkOrderPartRepository.findByHqlWhere(workOrderPartPackBean);
if (!CollectionUtils.isEmpty(workOrderParts)) {
List<MesJisShipping> shippingList = new ArrayList<>();
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_10.getValue(), "groupType", ddlPackBean);
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(), "code", ddlPackBean);
List<MesMoveRule> mesMoveRuleList = mesMoveRuleRepository.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesMoveRuleList)) {
MesException.throwFlowException(String.format("移库规则不存在:发运单编号:%s,发运组代码:%s,", orderManagement.getShippingCode(), orderManagement.getShippingGroupCode()));
}
Map<String, MesMoveRule> mesMoveRuleMap = mesMoveRuleList.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.toMap(MesMoveRule::getSrcType, Function.identity(), (x, y) -> y));
for (MesWorkOrderPart orderPart : workOrderParts) {
MesPart itemPart = mesPartService.getPartByPartNo(orderPart.getPartNo(), organizeCode);
if (itemPart == null) {
continue;
}
MesMoveRule moveRule = mesMoveRuleMap.get(itemPart.getEsd());
if (moveRule != null && Objects.equals(moveRule.getMoveNum(), MesExtEnumUtil.MOVE_RULE_MOVE_NUM.MOVE_RULE_MOVE_NUM_20.getValue()) && MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) {
shippingList.add(getMesJisShipping(orderManagement, detail, moveRule.getErpSrcLocateNo(), orderPart, userName));
} else {
log.info("客供品移库零件【{}】在零件发运组【{}】的移库规则中,汇报类型未维护或不为发运", orderPart.getPartNo(), workOrder.getPartProdGroupCode());
}
}
jisShippingRepository.saveAll(shippingList);
}
MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(organizeCode, workOrder.getCustSn());
if (mesProduceSn != null) {
//更新条码状态为完成
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
mesProduceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(mesProduceSn, userName);
mesProduceSnRepository.update(mesProduceSn);
}
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
workOrder.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrder, userName);
mesWorkOrderRDao.update(workOrder);
detail.setBarcode(workOrder.getWorkOrderNo() + "," + workOrder.getCustSn());
detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
detail.setRemark("cockpit发运处理");
ConvertBean.serviceModelUpdate(detail, userName);
shippingOrderDetailRepository.update(detail);
}
}

@ -0,0 +1,11 @@
package cn.estsh.i3plus.ext.mes.pojo.model;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import lombok.Data;
@Data
public class MesHandleShippingErrorModel {
private MesShippingOrderManagementDetail detail;
private MesWorkOrder workOrder;
}
Loading…
Cancel
Save