liweidong
liweidong-hj 4 days ago
commit 71d0e4d36e
  1. 35
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/oem/OemOrderOutProcessor.java
  2. 26
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IWorkOrderRunOutClient.java
  3. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java
  4. 11
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClient.java
  5. 5
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClientFallback.java
  6. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderCraftService.java
  7. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java
  8. 27
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/WorkOrderRunOutClient.java
  9. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java
  10. 125
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  11. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  12. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpMesRbWoClient.java
  13. 8
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java
  14. 4
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml
  15. 8
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbWoService.java
  16. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java
  17. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java
  18. 22
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
  19. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java
  20. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml
  21. 1
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.xml
  22. 136
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java

@ -0,0 +1,35 @@
package org.springblade.job.processor.oem;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.produce.feign.IWorkOrderRunOutClient;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
/**
* 外协订单下达ERP定时任务
*
* @author zangzhipeng
*/
@Component
@Slf4j
public class OemOrderOutProcessor implements BasicProcessor {
@Resource
private IWorkOrderRunOutClient workOrderRunOutClient;
@Override
public ProcessResult process(TaskContext context) throws Exception {
log.info("外协订单下达ERP定时任务开始");
try {
workOrderRunOutClient.oemOrderOut();
log.info("外协订单下达ERP定时任务执行完毕");
return new ProcessResult(true);
} catch (Exception e) {
log.error("外协订单下达ERP定时任务执行失败", e);
return new ProcessResult(false, e.getMessage());
}
}
}

@ -0,0 +1,26 @@
package org.springblade.desk.produce.feign;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* 外协订单下达ERP定时任务 Feign接口
*
* @author zangzhipeng
*/
@FeignClient(
value = AppConstant.APPLICATION_DESK_NAME
)
public interface IWorkOrderRunOutClient {
String API_PREFIX = "/feign/client/workOrderRunOut";
String OEM_ORDER_OUT = API_PREFIX + "/oemOrderOut";
/**
* 外协订单下达ERP定时任务调用
*/
@GetMapping(OEM_ORDER_OUT)
R oemOrderOut();
}

@ -26,7 +26,7 @@ public class WorkOrderRun extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public WorkOrderRun(Long woId, String woCode, Short runType, Long outTeam, Long inTeam, Long outCustomer, public WorkOrderRun(Long woId, String woCode, Short runType, Long outTeam, Long inTeam, Long outCustomer,
Long inCustomer, String memo, Long approvalMan, String systemData, String collaborate) { Long inCustomer, String memo, Long approvalMan, String systemData, String collaborate, Short oemStatus) {
this.woId = woId; this.woId = woId;
this.woCode = woCode; this.woCode = woCode;
this.runType = runType; this.runType = runType;
@ -39,6 +39,7 @@ public class WorkOrderRun extends BaseEntity {
this.systemData = systemData; this.systemData = systemData;
this.collaborate = collaborate; this.collaborate = collaborate;
this.runStatus = RUN_STATUS_ISSUED; this.runStatus = RUN_STATUS_ISSUED;
this.oemStatus = oemStatus;
} }
public WorkOrderRun() { public WorkOrderRun() {

@ -8,6 +8,7 @@ import org.springblade.erpdata.pojo.dto.view.MesRbWo;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
@ -35,6 +36,7 @@ public interface IErpMesRbWoClient {
String SYN_OUTSOURCING = API_PREFIX + "/synOutsourcing"; String SYN_OUTSOURCING = API_PREFIX + "/synOutsourcing";
String SYN_CRAFT = API_PREFIX + "/synCraft"; String SYN_CRAFT = API_PREFIX + "/synCraft";
String SYN_SUPPORTING_FACILITIES = API_PREFIX + "/synSupportingFacilities"; String SYN_SUPPORTING_FACILITIES = API_PREFIX + "/synSupportingFacilities";
String GET_DEMAND_DATE = API_PREFIX + "/getDemandDateByWono";
/** /**
* 查询烧结配套信息 * 查询烧结配套信息
@ -73,4 +75,13 @@ public interface IErpMesRbWoClient {
R<Void> synCraft(); R<Void> synCraft();
@GetMapping(SYN_SUPPORTING_FACILITIES) @GetMapping(SYN_SUPPORTING_FACILITIES)
R<Void> synSupportingFacilities(); R<Void> synSupportingFacilities();
/**
* 根据工作订单号查询ERP需求日期
*
* @param wono 工作订单号
* @return 需求日期字符串
*/
@GetMapping(GET_DEMAND_DATE)
R<String> getDemandDateByWono(@RequestParam(required = true) String wono);
} }

@ -75,4 +75,9 @@ public class IErpMesRbWoClientFallback implements IErpMesRbWoClient {
public R<Void> synSupportingFacilities() { public R<Void> synSupportingFacilities() {
return R.fail("获取数据失败"); return R.fail("获取数据失败");
} }
@Override
public R<String> getDemandDateByWono(String wono) {
return R.fail("获取数据失败");
}
} }

@ -50,4 +50,6 @@ public interface IYieldOrderCraftService extends BaseService<YieldOrderCraft> {
* @throws BusinessException * @throws BusinessException
*/ */
void automaticDispatch(List<YieldOrderCraft> yieldOrderCraftList, YieldOrder yieldOrder, Boolean factor, Boolean rxlSpace) throws Exception; void automaticDispatch(List<YieldOrderCraft> yieldOrderCraftList, YieldOrder yieldOrder, Boolean factor, Boolean rxlSpace) throws Exception;
List<YieldOrderCraft> listByYoIdAndNo(Long id, String orders);
} }

@ -307,6 +307,35 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
this.saveOrUpdateBatch(dispatchCraftList); this.saveOrUpdateBatch(dispatchCraftList);
} }
@Override
public List<YieldOrderCraft> listByYoIdAndNo(Long id, String orders) {
List<YieldOrderCraft> craftList = this.list(Wrappers.lambdaQuery(YieldOrderCraft.class).eq(YieldOrderCraft::getYoId, id)
.gt(YieldOrderCraft::getProcessNo, orders).orderByAsc(YieldOrderCraft::getProcessNo));
craftList.forEach(item -> {
BsProcessSetEntity processSet = processSetService.getById(item.getPpsId());
if (processSet != null) {
item.setProcessCode(processSet.getCode());
item.setProcessName(processSet.getName());
}
if (item.getIsOutsource()) {
if (null != item.getOcId()) {
Oem oem = oemService.getById(item.getOcId());
if (null != oem) {
item.setWorkCenterName(oem.getOcName());
}
}
} else {
if (null != item.getWorkCenterId()) {
WorkCenter workCenter = workCenterService.getById(item.getWorkCenterId());
if (null != workCenter) {
item.setWorkCenterName(workCenter.getWcName());
}
}
}
});
return craftList;
}
/** /**
* @param hostCaId 主工艺能力 * @param hostCaId 主工艺能力
* @param wcMap 拥有主工艺能力的作业中心 * @param wcMap 拥有主工艺能力的作业中心

@ -0,0 +1,27 @@
package org.springblade.desk.produce.feign;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.RequiredArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springframework.web.bind.annotation.RestController;
/**
* 外协订单下达ERP Feign实现
*
* @author zangzhipeng
*/
@NonDS
@Hidden
@RestController
@RequiredArgsConstructor
public class WorkOrderRunOutClient implements IWorkOrderRunOutClient {
private final IWorkOrderRunService workOrderRunService;
@Override
public R oemOrderOut() {
return workOrderRunService.oemOrderOut();
}
}

@ -441,10 +441,8 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
} }
} }
} }
// 不合格生成生产处置单 // 刷新状态和数量
if (InspectionTask.CHECK_RESULT_NO.equals(inspectionTask.getCheckResult())) { inspectionTaskService.refreshStatusAndQty(inspectionTask.getId());
inspectionTaskService.addRsSheet(inspectionTask.getId());
}
// 保存镀后检验数据 // 保存镀后检验数据
// if (save) { // if (save) {
// WorkPlanItemVO workPlanItemVO = saveProCheckDTO.getWorkPlanItemVO(); // WorkPlanItemVO workPlanItemVO = saveProCheckDTO.getWorkPlanItemVO();

@ -3,6 +3,7 @@ package org.springblade.desk.produce.service.impl;
import com.alibaba.excel.util.StringUtils; import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.sourceforge.barbecue.Barcode; import net.sourceforge.barbecue.Barcode;
@ -24,6 +25,7 @@ import org.springblade.desk.basic.mapper.TeamSetMapper;
import org.springblade.desk.basic.pojo.entity.Oem; import org.springblade.desk.basic.pojo.entity.Oem;
import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity; import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity;
import org.springblade.desk.basic.pojo.entity.TeamSet; import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; import org.springblade.desk.dashboard.mapper.BsProcessSetMapper;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.oem.pojo.request.*; import org.springblade.desk.oem.pojo.request.*;
@ -43,6 +45,7 @@ import org.springblade.desk.produce.service.IPlateAroundService;
import org.springblade.desk.produce.service.IWorkOrderRunService; import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkOrderService; import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.erpdata.feign.IErpDataOemClient; import org.springblade.erpdata.feign.IErpDataOemClient;
import org.springblade.erpdata.feign.IErpMesRbWoClient;
import org.springblade.system.cache.DictCache; import org.springblade.system.cache.DictCache;
import org.springblade.system.cache.UserCache; import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
@ -102,6 +105,8 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
private final IErpDataOemClient erpDataOemClient; private final IErpDataOemClient erpDataOemClient;
private final IErpMesRbWoClient erpMesRbWoClient;
@Resource @Resource
@Lazy @Lazy
private void setPostHandleService(IPlateAroundService plateAroundService) { private void setPostHandleService(IPlateAroundService plateAroundService) {
@ -167,8 +172,9 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
workOrderRun.getCreateTime(), new Date(), oemTakeBack.getDeliverKey(), workOrderRun.getCreateTime(), new Date(), oemTakeBack.getDeliverKey(),
scrapQty, testQty); scrapQty, testQty);
// 调用转厂内自动分派逻辑 // 调用转厂内自动分派逻辑,只查询外协工序之后的工序
List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoId(yieldOrder.getId()); List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoIdAndNo(yieldOrder.getId(), deliverablePlan.getOrders());
// List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoId(yieldOrder.getId(), deliverablePlan.getOrders());
try { try {
yieldOrderCraftService.automaticDispatch(yieldOrderCrafts, yieldOrder, Boolean.TRUE, null); yieldOrderCraftService.automaticDispatch(yieldOrderCrafts, yieldOrder, Boolean.TRUE, null);
} catch (Exception e) { } catch (Exception e) {
@ -403,52 +409,6 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//更新车间订单主责任单位 //更新车间订单主责任单位
workOrderService.updateHostWorkUnit(wo); workOrderService.updateHostWorkUnit(wo);
workPlanMapper.updateById(wpList); workPlanMapper.updateById(wpList);
// 调用外协接收
String wxWoCode = null;
Oem oem = oemMapper.selectById(workOrderRun.getInCustomer());
User planner = UserCache.getUser(wo.getPlanner());
if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) {
List<BsProcessSetEntity> processSets = processSetMapper.selectByIds(wpList.stream().filter(workPlan -> oem.getId().equals(workPlan.getOcId())).map(WorkPlan::getPpsId).collect(Collectors.toList()));
String ppsName = processSets.stream().map(BsProcessSetEntity::getName).collect(Collectors.joining(","));
// 获取wpList最大的计划结束时间
LocalDateTime maxPlanEndTime = wpList.stream().map(WorkPlan::getPlanEndTime).max(LocalDateTime::compareTo).orElse(null);
if (maxPlanEndTime == null) {
maxPlanEndTime = LocalDateTime.now();
}
wxWoCode = erpDataOemClient.fullOrderOutsourcing(yo.getPartCode(), yo.getProductIdent(), wo.getBatchNo(), oem != null ? oem.getCode() : "", ppsName, yo.getYoCode(),
planner != null ? planner.getName() : "", maxPlanEndTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), wo.getMakeQty(), "").getData();
} else {
User user = UserCache.getUser(workOrderRun.getCreateUser());
User dispatcher = UserCache.getUser(wo.getDispatcher());
String roamNo = null;
String craftNo = null;
Long craftId = yo.getCraftId();
// 返工单号
if (craftId != null && wo.getReworkCode() == null) {
Map<String, String> craftInfo = baseMapper.selectRoamAndCraftNoByCraftId(craftId);
roamNo = craftInfo.get("ROAMNO");
craftNo = craftInfo.get("CRAFTNO");
if (roamNo == null) {
craftInfo = baseMapper.selectRoamAndCraftNoByPartCode(yo.getPartCode());
roamNo = craftInfo.get("ROAMNO");
craftNo = craftInfo.get("CRAFTNO");
}
} else if (StringUtils.isNotBlank(wo.getReworkCode())) {
roamNo = wo.getReworkCode();
craftNo = "返修";
craftId = Long.valueOf(wo.getReworkNo());
}
String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(yo.getDemandDate().toInstant());
wxWoCode = erpDataOemClient.collaborativeOutsourcing(yo.getPartCode(), yo.getProductIdent(), format, wo.getMakeQty(), yo.getUseDeptCode(), yo.getUseDept(),
wo.getBatchNo(), oem != null ? oem.getCode() : "", yo.getPlate(), yo.getYpCode(), yo.getYoCode(), user != null ? user.getName() : "",
planner != null ? planner.getName() : "", dispatcher != null ? dispatcher.getName() : "", roamNo, craftNo, craftId).getData();
}
// 赋值wx号,erp返回
workOrderRun.setWoCode(wxWoCode);
if (StringUtils.isNotBlank(wxWoCode)) {
updateWorkPlanAndOrderStatus(wo, wxWoCode);
}
} else { } else {
//转厂内业务 //转厂内业务
WorkPlan nextWorkPlan; WorkPlan nextWorkPlan;
@ -619,8 +579,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (workPlan.getStatus() == 3) { if (workPlan.getStatus() == 3) {
// 更新下一道工序 // 更新下一道工序
if (workPlan.getNextWpId() != null) { if (workPlan.getNextWpId() != null) {
WorkPlan nextPlan = new WorkPlan(); WorkPlan nextPlan = workPlanMapper.selectById(workPlan.getNextWpId());
nextPlan.setId(workPlan.getNextWpId());
nextPlan.setFactStartTime(date); nextPlan.setFactStartTime(date);
nextPlan.setStatus(WorkPlan.STATUS_START); nextPlan.setStatus(WorkPlan.STATUS_START);
nextPlan.setWxNo(wxCode); nextPlan.setWxNo(wxCode);
@ -628,23 +587,19 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
} }
// 更新当前工序为完成 // 更新当前工序为完成
WorkPlan currentPlan = new WorkPlan(); workPlan.setFactEndTime(date);
currentPlan.setId(workPlan.getId()); workPlan.setStatus(WorkPlan.STATUS_COMPLETE);
currentPlan.setFactEndTime(date); workPlan.setWxNo(wxCode);
currentPlan.setStatus(WorkPlan.STATUS_COMPLETE); workPlanMapper.updateById(workPlan);
currentPlan.setWxNo(wxCode);
workPlanMapper.updateById(currentPlan);
// 更新订单当前工序 // 更新订单当前工序
workOrder.setWpId(workPlan.getNextWpId()); workOrder.setWpId(workPlan.getNextWpId());
} else { } else {
// 更新当前工序为进行中 // 更新当前工序为进行中
WorkPlan currentPlan = new WorkPlan(); workPlan.setFactStartTime(date);
currentPlan.setId(workPlan.getId()); workPlan.setStatus(WorkPlan.STATUS_START);
currentPlan.setFactStartTime(date); workPlan.setWxNo(wxCode);
currentPlan.setStatus(WorkPlan.STATUS_START); workPlanMapper.updateById(workPlan);
currentPlan.setWxNo(wxCode);
workPlanMapper.updateById(currentPlan);
} }
workOrder.setOemOut(String.valueOf(1)); workOrder.setOemOut(String.valueOf(1));
@ -684,7 +639,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
} }
// 首道工序 → 生产订单状态设为加工中 // 首道工序 → 生产订单状态设为加工中
if (wp.getFrontWpId() == null) { if (wp.getFrontWpId() == null) {
yo.setStatus(5); yo.setStatus(YieldOrderEnum.STATUS_PROCESSING.getCode());
yieldOrderMapper.updateById(yo); yieldOrderMapper.updateById(yo);
} }
@ -737,6 +692,13 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (yo.getDemandDate() != null) { if (yo.getDemandDate() != null) {
demandDateStr = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") demandDateStr = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
.withZone(ZoneId.systemDefault()).format(yo.getDemandDate().toInstant()); .withZone(ZoneId.systemDefault()).format(yo.getDemandDate().toInstant());
} else {
// 需求日期为空时从ERP视图查询,查不到默认当天+10天
Date demandDate = fetchDemandDateFromErp(yo.getYpCode());
yo.setDemandDate(demandDate);
yieldOrderMapper.updateById(yo);
demandDateStr = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
.withZone(ZoneId.systemDefault()).format(demandDate.toInstant());
} }
wxWoCode = erpDataOemClient.collaborativeOutsourcing( wxWoCode = erpDataOemClient.collaborativeOutsourcing(
yo.getPartCode(), yo.getProductIdent(), demandDateStr, wo.getMakeQty(), yo.getPartCode(), yo.getProductIdent(), demandDateStr, wo.getMakeQty(),
@ -787,6 +749,28 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return R.success("外协订单下达完成"); return R.success("外协订单下达完成");
} }
/**
* 从ERP视图查询需求日期查不到则返回当前日期+10天
*
* @param ypCode ERP工作订单号
* @return 需求日期
*/
private Date fetchDemandDateFromErp(String ypCode) {
try {
R<String> result = erpMesRbWoClient.getDemandDateByWono(ypCode);
if (result.isSuccess() && StringUtils.isNotBlank(result.getData())) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(result.getData());
}
} catch (Exception e) {
log.warn("从ERP查询需求日期失败,ypCode={},使用默认值");
}
// 默认当前日期+10天
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 10);
return cal.getTime();
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public R changeOemManufacturer(Long worId, Long ocId) { public R changeOemManufacturer(Long worId, Long ocId) {
@ -924,7 +908,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
throw new ServiceException("车间订单已交接,无法再次收回"); throw new ServiceException("车间订单已交接,无法再次收回");
} }
workOrder.setWpId(deliverablePlan.getId()); workOrder.setWpId(deliverablePlan.getId());
workOrder.setRunStatus(3); // 加工中 workOrder.setRunStatus(WorkOrder.RUN_STATUS_RECEIVE); // 加工中
workOrder.setMakeQty(workOrder.getMakeQty() - scrapQty - testQty); workOrder.setMakeQty(workOrder.getMakeQty() - scrapQty - testQty);
workOrder.setScrapQty(workOrder.getScrapQty() + scrapQty); workOrder.setScrapQty(workOrder.getScrapQty() + scrapQty);
workOrder.setTestQty(workOrder.getTestQty() + testQty); workOrder.setTestQty(workOrder.getTestQty() + testQty);
@ -944,15 +928,11 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
WorkOrderRun workOrderRun, WorkOrder workOrder, WorkOrderRun workOrderRun, WorkOrder workOrder,
Date startTime, Date endTime) { Date startTime, Date endTime) {
// 将本次外协的全部工序报工完成 // 将本次外协的全部工序报工完成
List<WorkPlanRun> wprList = workPlanRunMapper.selectList( List<WorkPlan> oemPlans = workPlanMapper.selectList(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getOem, "1")
new LambdaQueryWrapper<WorkPlanRun>() .eq(WorkPlan::getWoId, deliverablePlan.getWoId()).lt(WorkPlan::getStatus, WorkPlan.STATUS_WORK_OK)
.eq(WorkPlanRun::getWorId, workOrderRun.getId())); .lt(WorkPlan::getOrders, deliverablePlan.getOrders()));
if (!wprList.isEmpty()) {
List<Long> wpIds = wprList.stream().map(WorkPlanRun::getWpId).collect(Collectors.toList());
List<WorkPlan> oemPlans = workPlanMapper.selectList(
new LambdaQueryWrapper<WorkPlan>().in(WorkPlan::getId, wpIds));
for (WorkPlan wp : oemPlans) { for (WorkPlan wp : oemPlans) {
wp.setStatus(WorkPlan.STATUS_WORK_OK); wp.setStatus(WorkPlan.STATUS_COMPLETE);
wp.setFactStartTime(startTime); wp.setFactStartTime(startTime);
wp.setFactEndTime(endTime); wp.setFactEndTime(endTime);
wp.setWorkQty(workOrder.getMakeQty()); wp.setWorkQty(workOrder.getMakeQty());
@ -960,7 +940,6 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
} }
workPlanMapper.updateById(oemPlans); workPlanMapper.updateById(oemPlans);
} }
}
/** /**
* 更新运行记录状态 * 更新运行记录状态

@ -2936,7 +2936,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//产生外协生产进度记录信息 //产生外协生产进度记录信息
WorkOrderRun wr = new WorkOrderRun(workOrder.getId(), workOrder.getWoCode(), WorkOrderRun.RUN_TYPE_1, WorkOrderRun wr = new WorkOrderRun(workOrder.getId(), workOrder.getWoCode(), WorkOrderRun.RUN_TYPE_1,
null, null, null, prWorkPlan.getOcId(), "分派默认(厂外)", null, null, null, prWorkPlan.getOcId(), "分派默认(厂外)",
null, "1", workOrder.getCollaborate()); null, "1", "0", WorkOrderRun.OEM_STATUS_IN);
workOrderRunService.save(wr); workOrderRunService.save(wr);
//更改订单调度员和计划员 //更改订单调度员和计划员
OemCraftAbilityEntity oa = oemCraftAbilityService.findBsOemAbility(prWorkPlan.getOcId(), prWorkPlan.getCaId()); OemCraftAbilityEntity oa = oemCraftAbilityService.findBsOemAbility(prWorkPlan.getOcId(), prWorkPlan.getCaId());
@ -2949,7 +2949,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//产生车间运行记录信息 //产生车间运行记录信息
WorkOrderRun wr = new WorkOrderRun(workOrder.getId(), workOrder.getWoCode(), WorkOrderRun.RUN_TYPE_2, WorkOrderRun wr = new WorkOrderRun(workOrder.getId(), workOrder.getWoCode(), WorkOrderRun.RUN_TYPE_2,
null, prWorkPlan.getMakeTeam(), null, null, "分派默认(厂内)", null, prWorkPlan.getMakeTeam(), null, null, "分派默认(厂内)",
null, "1", workOrder.getCollaborate()); null, "1", "0", null);
workOrderRunService.save(wr); workOrderRunService.save(wr);
//更改订单调度员和计划员 //更改订单调度员和计划员

@ -107,4 +107,9 @@ public class ErpMesRbWoClient implements IErpMesRbWoClient {
log.info("同步配套订单定时任务结束"); log.info("同步配套订单定时任务结束");
return R.success(); return R.success();
} }
@Override
public R<String> getDemandDateByWono(String wono) {
return R.data(erpMesRbWoService.getDemandDateByWono(wono));
}
} }

@ -20,4 +20,12 @@ public interface ErpMesRbWoMapper extends Mapper {
List<MesRbWo> getYieldPlanErpList(String newlevdateMax); List<MesRbWo> getYieldPlanErpList(String newlevdateMax);
String getNewlevdateMax(String selectTime); String getNewlevdateMax(String selectTime);
/**
* 根据工作订单号查询需求日期
*
* @param wono 工作订单号
* @return 需求日期字符串
*/
String getDemandDateByWono(String wono);
} }

@ -43,4 +43,8 @@
a.wopordat >= TO_DATE(#{selectTime}, 'YYYY-MM-DD HH24:MI:SS') a.wopordat >= TO_DATE(#{selectTime}, 'YYYY-MM-DD HH24:MI:SS')
</where> </where>
</select> </select>
<select id="getDemandDateByWono" resultType="java.lang.String">
SELECT MAX(a.woreqdat) FROM dba_mgr.v_mes_rb_wo a WHERE a.wono = #{wono}
</select>
</mapper> </mapper>

@ -56,4 +56,12 @@ public interface IErpMesRbWoService {
* 同步配套数据 * 同步配套数据
*/ */
void synSupportingFacilities(); void synSupportingFacilities();
/**
* 根据工作订单号查询ERP需求日期
*
* @param wono 工作订单号
* @return 需求日期字符串查不到返回null
*/
String getDemandDateByWono(String wono);
} }

@ -325,7 +325,7 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService {
Map<String, Object> inParams = new HashMap<>(); Map<String, Object> inParams = new HashMap<>();
inParams.put("v_prtno", goodsCode == null ? "" : goodsCode); inParams.put("v_prtno", goodsCode == null ? "" : goodsCode);
inParams.put("v_prtdesc", goodsName == null ? "" : goodsName); inParams.put("v_prtdesc", goodsName == null ? "" : goodsName);
inParams.put("v_desno", null); inParams.put("v_desno", "");
// 执行存储过程 // 执行存储过程
Map<String, Object> resultMap = jdbcCall.execute(inParams); Map<String, Object> resultMap = jdbcCall.execute(inParams);

@ -817,6 +817,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
// apsOrderClient.saveOrderList(yieldOrderList); // apsOrderClient.saveOrderList(yieldOrderList);
} }
@Override
public String getDemandDateByWono(String wono) {
return mesRbWoMapper.getDemandDateByWono(wono);
}
private YieldOrder updateYieldType(YieldOrder yieldOrder,String pritno,String firseq){ private YieldOrder updateYieldType(YieldOrder yieldOrder,String pritno,String firseq){
//从零件表中查询零件信息 //从零件表中查询零件信息
DsPartEntity part=apsOrderClient.getDsCraftListByCode(pritno); DsPartEntity part=apsOrderClient.getDsCraftListByCode(pritno);

@ -2174,27 +2174,27 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
int x = partCz.size(); int x = partCz.size();
int y = partBlb.size(); int y = partBlb.size();
if (sumOfQuota <= 5) { if (sumOfQuota <= 5) {
result = (5.5 * sumOfQuota + 20) / 60 + 0.8; result = (6.2 * sumOfQuota + 20) / 60 + 0.8;
} }
if (sumOfQuota <= 20 && sumOfQuota > 5) { if (sumOfQuota <= 20 && sumOfQuota > 5) {
result = (5.8 * sumOfQuota + 20) / 60 + 0.8; result = (6.2 * sumOfQuota + 20) / 60 + 0.8;
if (y > 2) { if (y > 2) {
result = 1.5 * result; result = 1.5 * result;
} }
if (hb) { if (hb) {
result = result + 0.5 * sumOfQuota / 60 + 0.2; result = result + 1 * sumOfQuota / 60 + 0.2;
} }
if (x > 3) { if (x > 3) {
result = 1.2 * result + 3; result = 1.2 * result + 3;
} }
} }
if (sumOfQuota <= 30 && sumOfQuota > 20) { if (sumOfQuota <= 30 && sumOfQuota > 20) {
result = (6 * sumOfQuota + 20) / 60 + 0.8; result = (6.5 * sumOfQuota + 20) / 60 + 0.8;
if (y > 2) { if (y > 2) {
result = 1.6 * result; result = 1.6 * result;
} }
if (hb) { if (hb) {
result = result + (1 * sumOfQuota) / 60 + 0.2; result = result + (1.3 * sumOfQuota) / 60 + 0.2;
} }
if (x > 3) { if (x > 3) {
result = 1.5 * result + 5; result = 1.5 * result + 5;
@ -2206,7 +2206,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
result = 1.8 * result; result = 1.8 * result;
} }
if (hb) { if (hb) {
result = result + (2 * sumOfQuota) / 60 + 0.3; result = result + (2 * sumOfQuota) / 60 + 1;
} }
if (x > 3) { if (x > 3) {
result = 1.8 * result + 6; result = 1.8 * result + 6;
@ -2215,10 +2215,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (sumOfQuota <= 80 && sumOfQuota > 50) { if (sumOfQuota <= 80 && sumOfQuota > 50) {
result = (6.4 * sumOfQuota + 25) / 60 + 1.5; result = (6.4 * sumOfQuota + 25) / 60 + 1.5;
if (y > 2) { if (y > 2) {
result = 2 * result; result = 2.1 * result;
} }
if (hb) { if (hb) {
result = result + (3 * sumOfQuota) / 60 + 0.5; result = result + (3 * sumOfQuota) / 60 + 1.5;
} }
if (x > 3) { if (x > 3) {
result = 2.2 * result + 9; result = 2.2 * result + 9;
@ -2227,10 +2227,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (sumOfQuota <= 100 && sumOfQuota > 80) { if (sumOfQuota <= 100 && sumOfQuota > 80) {
result = (6.5 * sumOfQuota + 25) / 60 + 1.8; result = (6.5 * sumOfQuota + 25) / 60 + 1.8;
if (y > 2) { if (y > 2) {
result = 2 * result; result = 2.1 * result;
} }
if (hb) { if (hb) {
result = result + (3.5 * sumOfQuota) / 60 + 0.7; result = result + (3.5 * sumOfQuota) / 60 + 2;
} }
if (x > 3) { if (x > 3) {
result = 2.5 * result + 12; result = 2.5 * result + 12;
@ -2242,7 +2242,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
result = 2 * result; result = 2 * result;
} }
if (hb) { if (hb) {
result = result + (4 * sumOfQuota) / 60 + 1; result = result + (4 * sumOfQuota) / 60 + 3;
} }
if (x > 3) { if (x > 3) {
result = 2.5 * result + 15; result = 2.5 * result + 15;

@ -55,6 +55,6 @@ public interface StGlassCakeOutMapper extends BaseMapper<StGlassCakeOut> {
List<YieldOrder> getYieldOrderList(Long id, String yieldType); List<YieldOrder> getYieldOrderList(Long id, String yieldType);
DsPartRelationEntity getPartQuota(String partCode, String goodsCode); DsPartRelationEntity getPartQuota(String partCode, String subCode);
} }

@ -41,7 +41,7 @@
gco.part_name, gco.batch_code, gco.card_no, gco.quantity, gco.require_qty, gco.part_name, gco.batch_code, gco.card_no, gco.quantity, gco.require_qty,
gco.stove_pi_no, gco.out_qty, gco.cur_status, gco.est_use_time, gco.out_time, gco.stove_pi_no, gco.out_qty, gco.cur_status, gco.est_use_time, gco.out_time,
gco.out_users, gco.out_code, gco.out_users, gco.out_code,
gco.memo, gco.picker, gco.memo, gco.picker, gco.pre_out_qty,
-- 物料表字段(根据实际ST_GOODS字段调整,无则删对应行) -- 物料表字段(根据实际ST_GOODS字段调整,无则删对应行)
g.goods_code, g.goods_code,
g.id AS goodsId, g.id AS goodsId,

@ -35,6 +35,7 @@
gmo.sir_id, gmo.yo_code, gmo.pi_no, gmo.sir_id, gmo.yo_code, gmo.pi_no,
gmo.card_no, gmo.need_quantity, gmo.outed_quantity, gmo.card_no, gmo.need_quantity, gmo.outed_quantity,
gmo.cur_status, gmo.out_time, gmo.out_user, gmo.out_code, gmo.picker, gmo.cur_status, gmo.out_time, gmo.out_user, gmo.out_code, gmo.picker,
gmo.parent_out_code, gmo.complete_quantity,
-- 物料表字段 -- 物料表字段
g.goods_code, g.goods_code,
g.id AS goodsId, g.id AS goodsId,

@ -1,6 +1,5 @@
package org.springblade.wms.service.impl; package org.springblade.wms.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -22,8 +21,6 @@ import org.springblade.wms.mapper.StGraphiteMoldOutMapper;
import org.springblade.wms.mapper.StRealtimeStockMapper; import org.springblade.wms.mapper.StRealtimeStockMapper;
import org.springblade.wms.mapper.StStockInoutRecordMapper; import org.springblade.wms.mapper.StStockInoutRecordMapper;
import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO; import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO;
import org.springblade.wms.pojo.dto.StockOccupyTempDTO;
import org.springblade.wms.pojo.dto.SubItemStockDTO;
import org.springblade.wms.pojo.entity.*; import org.springblade.wms.pojo.entity.*;
import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO; import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO;
import org.springblade.wms.service.*; import org.springblade.wms.service.*;
@ -105,83 +102,36 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
} }
} }
List<SubItemStockDTO> sourceSubStockList = new ArrayList<>(); int maxCanMakeSet = (int) Math.floor(totalNeedSetInt);
for (DsPartEntity bom : allChildPartList) { for (DsPartEntity sub : allChildPartList) {
SubItemStockDTO item = new SubItemStockDTO(); String subCode = sub.getPartCode();
item.setSubGoodsCode(bom.getPartCode()); DsPartRelationEntity dsPartRelation = stGlassCakeOutMapper.getPartQuota(faYieldOrder.getPartCode(), subCode);
// 单套子件耗用数量 double singleUse = dsPartRelation.getQuota();
DsPartRelationEntity dsPartRelation = stGlassCakeOutMapper.getPartQuota(faYieldOrder.getPartCode(), item.getSubGoodsCode());
item.setSingleUseQty(dsPartRelation.getQuota());
// 查询该子件所有可用库存
List<StRealtimeStock> stockAll = stRealtimeStockMapper.selectMaxUsableStockByMoldAttr(item.getSubGoodsCode());
item.setStockList(stockAll);
// 实时剩余可用总库存(动态变化,逐套消耗)
double usableTotal = 0D;
if (CollUtil.isNotEmpty(stockAll)) {
usableTotal = stockAll.stream()
.mapToDouble(s -> s.getQuantity() - Optional.ofNullable(s.getOccupyQuantity()).orElse(0D))
.sum();
}
item.setRemainUsable(usableTotal);
sourceSubStockList.add(item);
}
// 存放最终要生成的出库明细、占用、锁库数据
List<StockOccupyTempDTO> needOccupyList = new ArrayList<>();
// 成功齐套的套数
int successSet = 0;
// 2、逐套循环校验,能齐一套算一套
for (; successSet < totalNeedSetInt; ) {
boolean oneSetAllOk = true;
// 本套需要占用的临时数据
List<StockOccupyTempDTO> tempOccupy = new ArrayList<>();
for (SubItemStockDTO sub : sourceSubStockList) { // 查询该子件所有可用库存
double needPerSet = sub.getSingleUseQty(); List<StRealtimeStock> stockList = stRealtimeStockMapper.selectMaxUsableStockByMoldAttr(subCode);
// 当前子件剩余可用不足单套用量 → 本套不齐套,跳出 if (stockList == null || stockList.isEmpty()) {
if (sub.getRemainUsable() < needPerSet - 0.001) { maxCanMakeSet = 0;
oneSetAllOk = false;
break; break;
} }
// 从子件库存里扣对应数量,优先耗前面批次库存 // 总可用库存
double surplusNeed = needPerSet; double totalUsable = stockList.stream()
List<StRealtimeStock> stockList = sub.getStockList(); .mapToDouble(s -> s.getQuantity() - Optional.ofNullable(s.getOccupyQuantity()).orElse(0D))
for (StRealtimeStock stock : stockList) { .filter(v -> v > 0)
if (surplusNeed <= 0.001) break; .sum();
double occ = Optional.ofNullable(stock.getOccupyQuantity()).orElse(0D);
double usable = stock.getQuantity() - occ;
if (usable <= 0) continue;
double takeQty = Math.min(usable, surplusNeed);
// 暂存本次占用信息,齐套成功才真正落库
StockOccupyTempDTO temp = new StockOccupyTempDTO();
temp.setStock(stock);
temp.setTakeQty(takeQty);
temp.setSubGoodsCode(sub.getSubGoodsCode());
tempOccupy.add(temp);
surplusNeed -= takeQty;
}
// 子件总可用扣减本套耗用
sub.setRemainUsable(sub.getRemainUsable() - needPerSet);
}
if (oneSetAllOk) { // 当前子件最多可做套数
// 本套齐套,临时占用转正,加入最终列表 int subCanMake = (int) Math.floor(totalUsable / singleUse);
needOccupyList.addAll(tempOccupy); maxCanMakeSet = Math.min(maxCanMakeSet, subCanMake);
successSet++;
} else {
// 任意子件不齐套,终止整套循环,不再尝试后续套数
break;
}
} }
if (CollUtil.isEmpty(needOccupyList)) { // 无可齐套套数,直接返回
log.info("父件{}无任何可齐套库存,需求{}套,生成0套预出库", partOne.getPartCode(), totalNeedSet); if (maxCanMakeSet <= 0) {
log.info("父件【{}】无可用齐套库存,需求{}套,生成0套预出库", faYieldOrder.getPartCode(), totalNeedSetInt);
return Collections.emptyList(); return Collections.emptyList();
} }
log.info("父件【{}】最终可齐套套数:{} 套", faYieldOrder.getPartCode(), maxCanMakeSet);
List<StGraphiteMoldOut> preOutStockList = new ArrayList<>(); List<StGraphiteMoldOut> preOutStockList = new ArrayList<>();
@ -195,12 +145,31 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
} }
int childNum = 1; int childNum = 1;
// 3、遍历占用明细:更新库存占用、新增锁库、生成预出库单据 // 遍历每个子件
for (StockOccupyTempDTO temp : needOccupyList) { for (DsPartEntity subItem : allChildPartList) {
lastNum++; String subCode = subItem.getPartCode();
StRealtimeStock maxStock = temp.getStock(); DsPartRelationEntity dsPartRelation = stGlassCakeOutMapper.getPartQuota(faYieldOrder.getPartCode(), subCode);
Double takeQty = temp.getTakeQty(); double singleUse = dsPartRelation.getQuota();
double totalNeed = singleUse * maxCanMakeSet; // 子件总需求数量
// 查询该子件所有可用库存
List<StRealtimeStock> stockList = stRealtimeStockMapper.selectMaxUsableStockByMoldAttr(subCode);
double remainNeed = totalNeed;
// 遍历库存,一个不够用下一个,自动生成多条出库
for (StRealtimeStock maxStock : stockList) {
if (remainNeed <= 0.001) {
break;
}
double occupyQty = Optional.ofNullable(maxStock.getOccupyQuantity()).orElse(0D);
double usableQty = maxStock.getQuantity() - occupyQty;
if (usableQty <= 0) {
continue;
}
// 本次实际扣减数量
double actualTake = Math.min(usableQty, remainNeed);
StGraphiteMoldOut preOutStock = new StGraphiteMoldOut(); StGraphiteMoldOut preOutStock = new StGraphiteMoldOut();
preOutStock.setYoCode(faYieldOrder.getYoCode()); preOutStock.setYoCode(faYieldOrder.getYoCode());
preOutStock.setCardNo(dto.getCardNo()); preOutStock.setCardNo(dto.getCardNo());
@ -211,11 +180,8 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
preOutStock.setOutCode(outCode); preOutStock.setOutCode(outCode);
childNum++; childNum++;
// preOutStock.setOutCode(stStockInoutRecordService.generateCode()); // preOutStock.setOutCode(stStockInoutRecordService.generateCode());
SubItemStockDTO currSub = sourceSubStockList.stream() preOutStock.setNeedQuantity(singleUse * totalNeedSet);
.filter(s -> s.getSubGoodsCode().equals(temp.getSubGoodsCode())) preOutStock.setCompleteQuantity(totalNeed);
.findFirst().get();
preOutStock.setNeedQuantity(currSub.getSingleUseQty() * totalNeedSet);
preOutStock.setCompleteQuantity(takeQty);
preOutStock.setGoodsId(maxStock.getGoodsId()); preOutStock.setGoodsId(maxStock.getGoodsId());
StGoods stGoods = stGoodsService.getById(maxStock.getGoodsId()); StGoods stGoods = stGoodsService.getById(maxStock.getGoodsId());
preOutStock.setGoodsName(stGoods.getGoodsName()); preOutStock.setGoodsName(stGoods.getGoodsName());
@ -237,17 +203,19 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
System.out.println("石墨模子件[编码:" + preOutStock.getGoodsCode() + "]库存充足,已构建预出库信息,库存ID:" + maxStock.getId()); System.out.println("石墨模子件[编码:" + preOutStock.getGoodsCode() + "]库存充足,已构建预出库信息,库存ID:" + maxStock.getId());
// 更新实时库存占用数量 // 更新实时库存占用数量
double oldOccupy = Optional.ofNullable(maxStock.getOccupyQuantity()).orElse(0D); maxStock.setOccupyQuantity(occupyQty + actualTake);
maxStock.setOccupyQuantity(oldOccupy + takeQty);
stRealtimeStockService.updateById(maxStock); stRealtimeStockService.updateById(maxStock);
StRealtimeStockLock lock = new StRealtimeStockLock(); StRealtimeStockLock lock = new StRealtimeStockLock();
lock.setId(IdUtil.getSnowflake().nextId()); lock.setId(IdUtil.getSnowflake().nextId());
lock.setRlsId(maxStock.getId()); lock.setRlsId(maxStock.getId());
lock.setWoNo(preOutStock.getCardNo()); lock.setWoNo(preOutStock.getCardNo());
lock.setOccupyQuantity(takeQty); lock.setOccupyQuantity(actualTake);
lock.setStatus(0); lock.setStatus(0);
stRealtimeStockMapper.insertStockLock(lock); stRealtimeStockMapper.insertStockLock(lock);
remainNeed -= actualTake;
}
} }
System.out.println("石墨模子件预出库全部完成!"); System.out.println("石墨模子件预出库全部完成!");

Loading…
Cancel
Save