package org.jeecg.modules.mes.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.exception.JeecgBootException;
|
import org.jeecg.modules.base.entity.Factory;
|
import org.jeecg.modules.base.entity.LineSideWarehouse;
|
import org.jeecg.modules.base.entity.Shift;
|
import org.jeecg.modules.base.service.IFactoryService;
|
import org.jeecg.modules.base.service.ILineSideWarehouseService;
|
import org.jeecg.modules.base.service.IShiftService;
|
import org.jeecg.modules.lsw.entity.LswMaterial;
|
import org.jeecg.modules.lsw.entity.LswMaterialInbound;
|
import org.jeecg.modules.lsw.enums.MaterialCategory;
|
import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
|
import org.jeecg.modules.lsw.service.ILswMaterialService;
|
import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
|
import org.jeecg.modules.mes.entity.MesWorkReporting;
|
import org.jeecg.modules.mes.mapper.MesWorkReportingMapper;
|
import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
|
import org.jeecg.modules.mes.service.IMesWorkReportingService;
|
import org.jeecg.modules.mes.utils.CommonUtils;
|
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.Optional;
|
|
/**
|
* @Description: 工单报工
|
* @Author: jeecg-boot
|
* @Date: 2025-07-04
|
* @Version: V1.0
|
*/
|
@Service
|
public class MesWorkReportingServiceImpl extends ServiceImpl<MesWorkReportingMapper, MesWorkReporting> implements IMesWorkReportingService {
|
|
@Autowired
|
private IMesProductionWorkOrderService mesProductionWorkOrderService;
|
@Autowired
|
private ILswMaterialService lswMaterialService;
|
@Autowired
|
private IFactoryService factoryService;
|
@Autowired
|
private IShiftService shiftService;
|
@Autowired
|
private ILineSideWarehouseService lineSideWarehouseService;
|
@Autowired
|
private ILswMaterialInboundService lswMaterialInboundService;
|
@Autowired
|
private ISysBusinessCodeRuleService sysBusinessCodeRuleService;
|
|
@Override
|
public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
|
return baseMapper.queryWorkReportingByWorkOrderId(workOrderId);
|
}
|
|
@Override
|
public List<MesWorkReporting> queryWorkReportingByOrderId(String orderId) {
|
return baseMapper.queryWorkReportingByOrderId(orderId);
|
}
|
|
@Override
|
public void addReporting(MesWorkReporting mesWorkReporting) {
|
MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(mesWorkReporting.getWorkOrderId());
|
if (workOrder == null) {
|
throw new JeecgBootException("工单不存在!");
|
}
|
LswMaterial material = lswMaterialService.list(new LambdaQueryWrapper<LswMaterial>()
|
.eq(LswMaterial::getMaterialNumber, workOrder.getMaterialNumber())
|
.eq(LswMaterial::getDelFlag, CommonConstant.DEL_FLAG_0)).stream()
|
.findAny().orElse(null);
|
if (material == null) {
|
throw new JeecgBootException("物料不存在!");
|
}
|
MaterialCategory materialCategory = MaterialCategory.fromName(material.getMaterialCategory());
|
if (materialCategory == null) {
|
throw new JeecgBootException("未知的物料类型!");
|
}
|
//生产批次号
|
String batchNumber = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingBatchNumber");
|
mesWorkReporting.setBatchNumber(batchNumber);
|
LineSideWarehouse lineSideWarehouse = lineSideWarehouseService.list(new LambdaQueryWrapper<LineSideWarehouse>()
|
.eq(LineSideWarehouse::getFactoryId, mesWorkReporting.getFactoryId())
|
.eq(LineSideWarehouse::getDelFlag, CommonConstant.DEL_FLAG_0))
|
.stream().findAny().orElse(null);
|
if (lineSideWarehouse == null) {
|
throw new JeecgBootException("线边仓库不存在!");
|
}
|
mesWorkReporting.setWarehouseId(lineSideWarehouse.getId());
|
mesWorkReporting.setReporter(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername());
|
mesWorkReporting.setReportTime(new Date());
|
String date = DateUtil.format(new Date(), "yyMMdd");
|
switch (materialCategory) {
|
case FINISHED:
|
//成品报工逻辑
|
String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
|
String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
|
mesWorkReporting.setPalletNumber(finishedPalletNumber);
|
//todo 扣减内法兰(对应机加内法兰线边库)、外法兰(对应机加外法兰线边库)、小内圈(对应装配线边库)库存,调用SAP投料接口
|
//todo 调用SAP工序报工
|
//todo 打印成品托标签、检验标识卡、移库单、完工检验工单;判断生产订单是否需要关闭(合格数量 = 订单数量)
|
break;
|
case HALF:
|
case RAW:
|
//半成品报工逻辑
|
Factory factory = factoryService.getById(mesWorkReporting.getFactoryId());
|
Shift shift = shiftService.getById(workOrder.getShiftId());
|
String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
|
//拼接半成品报工托号
|
String halfPalletNumber = factory.getFactoryCode() + material.getMaterialNumber() + date + shift.getShiftCode() + palletNumber6;
|
mesWorkReporting.setPalletNumber(halfPalletNumber);
|
//todo 扣减对应线边库(外法兰毛坯、内法兰毛坯)库存后,调用SAP投料接口
|
//todo 调用SAP工序报工
|
break;
|
case PARTS:
|
break;
|
}
|
save(mesWorkReporting);
|
//线边库入库逻辑
|
LswMaterialInbound lswMaterialInbound = new LswMaterialInbound()
|
.setFactoryId(mesWorkReporting.getFactoryId())
|
.setMaterialNumber(material.getMaterialNumber())
|
.setMaterialName(material.getMaterialName())
|
.setBatchNumber(batchNumber)
|
.setQuantity(mesWorkReporting.getQuantity())
|
.setWarehouseId(lineSideWarehouse.getId());
|
lswMaterialInboundService.save(lswMaterialInbound);
|
}
|
}
|