no message

main
HUOJIN\92525 2026-01-16 16:54:36 +08:00
parent 3ccab344bd
commit 88176e1522
4 changed files with 120 additions and 21 deletions

View File

@ -51,7 +51,10 @@ public enum AsnTypeEnum {
AsnTypeEnum.PJ.getValue(),
AsnTypeEnum.JY.getValue(),
AsnTypeEnum.CPC.getValue(),
AsnTypeEnum.PJC.getValue()
AsnTypeEnum.PJC.getValue(),
AsnTypeEnum.SC.getValue(),
AsnTypeEnum.WX.getValue(),
AsnTypeEnum.QC.getValue()
);
}

View File

@ -20,6 +20,14 @@ public enum PickTypeEnum {
JY(7, "检验出库"),
SC(1, "生产出库"),
BF(2, "报废出库"),
WX(3, "维修出库"),
DJ(8, "点检出库"),
;
PickTypeEnum(Integer value, String desc) {
@ -41,7 +49,11 @@ public enum PickTypeEnum {
PickTypeEnum.CP.getValue(),
PickTypeEnum.PJ.getValue(),
PickTypeEnum.FG.getValue(),
PickTypeEnum.JY.getValue()
PickTypeEnum.JY.getValue(),
PickTypeEnum.SC.getValue(),
PickTypeEnum.BF.getValue(),
PickTypeEnum.WX.getValue(),
PickTypeEnum.DJ.getValue()
);
}

View File

@ -230,11 +230,18 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
}
//目前是四个工作站
List<Point> outPoints = pointService.queryPoints(null, null, AreaTypeEnum.CK_DOCK.getValue());
if (CollectionUtils.isEmpty(outPoints)) {
log.info("没有出库工作站");
List<Point> outCpPoints = pointService.queryPoints(null, null, AreaTypeEnum.CK_DOCK.getValue());
if (CollectionUtils.isEmpty(outCpPoints)) {
log.info("没有成品出库工作站");
return;
}
List<Point> outMjPoints = pointService.queryPoints(null, null, AreaTypeEnum.MJCK_DOCK.getValue());
if (CollectionUtils.isEmpty(outMjPoints)) {
log.info("没有模具出库工作站");
return;
}
//当前所有工作站执行中的任务
Map<String, Integer> pointTaskCountMap = queryPointTaskCount();
@ -253,20 +260,28 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
//获取所有出库单明细
List<Long> pickDetailId = taskList.stream().map(Task::getPickDetailId).distinct().toList();
Map<Long, PickDetail> pickDetailMap = pickDetailService.queryByPickDetailIdsToMap(pickDetailId);
List<Point> outPoints;
for (Task task : taskList) {
//起点
Point fromPoint = fromPointMap.get(task.getFromPointId());
//出库单
Pick pick = pickMap.get(task.getPickId());
//选择最优且任务数最少的工作站
Point bestOutPoint = selectBestAvailableOutboundPoint(fromPoint, outPoints, pointTaskCountMap);
Point bestOutPoint;
if(Set.of(4, 5, 6, 7).contains(pick.getOrderType())){
outPoints=outCpPoints;
bestOutPoint = selectBestAvailableOutboundPoint(fromPoint, outPoints, pointTaskCountMap);
}else{
bestOutPoint=outMjPoints.get(0);
}
task.setToPointId(bestOutPoint.getId());
task.setToPointCode(bestOutPoint.getPointCode());
//分配日志
Inventory inventory = inventoryMap.get(task.getInventoryId());
Pick pick = pickMap.get(task.getPickId());
PickDetail pickDetail = pickDetailMap.get(task.getPickDetailId());
if (inventory != null && pick != null && pickDetail != null) {
if (inventory != null && pickDetail != null) {
inventoryLogService.addAllocInventoryLog(inventory, bestOutPoint.getId(),
task.getPlanQty(), pick.getThirdOrderNo(), pickDetail.getId(), pickDetail.getDescription());
}

View File

@ -269,19 +269,88 @@ public class PickProcessor {
* @param pickedQty
* @param pickDetailUpdateMap
*/
private void updatePickDetail(PickData data, Task task, BigDecimal pickedQty,
Map<Long, PickDetail> pickDetailUpdateMap) {
//出库明细
PickDetail pickDetail = data.getPickDetailMap().get(task.getPickDetailId());
//获取map最新的出库明细
PickDetail targetPickDetail = pickDetailUpdateMap.getOrDefault(pickDetail.getId(), pickDetail);
//拣货数量
BigDecimal newPickedQty = BigDecimalUtil.add(targetPickDetail.getPickedQty(), pickedQty, 0);
//状态
Integer status = newPickedQty.compareTo(targetPickDetail.getOrderQty()) >= 0 ? PickStatusEnum.PICKED.getValue() : PickStatusEnum.PICKING.getValue();
targetPickDetail.setPickedQty(newPickedQty);
targetPickDetail.setStatus(status);
pickDetailUpdateMap.put(targetPickDetail.getId(), targetPickDetail);
private void updatePickDetail(
PickData data,
Task task,
BigDecimal pickedQty,
Map<Long, PickDetail> pickDetailUpdateMap
) {
// 从数据中获取原始 PickDetail
PickDetail originalPickDetail = data.getPickDetailMap().get(task.getPickDetailId());
if (originalPickDetail == null) {
return; // 安全保护
}
// 从 Map 获取已累积的 PickDetail可能是已经部分更新过的
PickDetail currentPickDetail = pickDetailUpdateMap
.computeIfAbsent(originalPickDetail.getId(), id -> clonePickDetail(originalPickDetail));
// 累加拣货数量
BigDecimal existingQty = currentPickDetail.getPickedQty() == null
? BigDecimal.ZERO
: currentPickDetail.getPickedQty();
BigDecimal newPickedQty = existingQty.add(pickedQty);
// 订单总数量
BigDecimal orderQty = currentPickDetail.getOrderQty() == null
? BigDecimal.ZERO
: currentPickDetail.getOrderQty();
// 确保 newPickedQty 不超过 orderQty
if (newPickedQty.compareTo(orderQty) > 0) {
newPickedQty = orderQty;
}
// 更新数量
currentPickDetail.setPickedQty(newPickedQty);
// 计算状态:是否完全拣完
Integer status;
if (newPickedQty.compareTo(orderQty) >= 0) {
status = PickStatusEnum.PICKED.getValue();
} else if (newPickedQty.compareTo(BigDecimal.ZERO) > 0) {
status = PickStatusEnum.PICKING.getValue();
}else {
status = currentPickDetail.getStatus();
}
currentPickDetail.setStatus(status);
// 最终写回更新 Map
pickDetailUpdateMap.put(currentPickDetail.getId(), currentPickDetail);
}
private PickDetail clonePickDetail(PickDetail src) {
PickDetail dst = PickDetail.builder()
.id(src.getId())
.pickId(src.getPickId())
.itemId(src.getItemId())
.stockId(src.getStockId())
.lineNo(src.getLineNo())
.unit(src.getUnit())
.project(src.getProject())
.taskNo(src.getTaskNo())
.orderQty(src.getOrderQty())
.allocatedQty(src.getAllocatedQty())
.pickedQty(src.getPickedQty())
.status(src.getStatus())
.propC1(src.getPropC1())
.propC2(src.getPropC2())
.propC3(src.getPropC3())
.propC4(src.getPropC4())
.propD1(src.getPropD1())
.description(src.getDescription())
.sourceId(src.getSourceId())
.sourceName(src.getSourceName())
.tenantId(src.getTenantId())
.sysOrgCode(src.getSysOrgCode())
.createBy(src.getCreateBy())
.createTime(src.getCreateTime())
.updateBy(src.getUpdateBy())
.updateTime(src.getUpdateTime())
.build();
return dst;
}
/**