| | |
| | | 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: 工单报工 |
| | |
| | | @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); |
| | |
| | | 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); |
| | | } |
| | | } |