package com.zy.asrs.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.Cools;
|
import com.core.common.R;
|
import com.zy.asrs.entity.param.MesToCombParam;
|
import com.zy.asrs.entity.param.OpenOrderPakoutPauseParam;
|
import com.zy.asrs.entity.param.OutTaskParam;
|
import com.zy.asrs.service.ExternalTaskFacadeService;
|
import com.zy.asrs.service.LocDetlService;
|
import com.zy.asrs.service.OpenService;
|
import com.zy.asrs.service.WaitPakinService;
|
import com.zy.asrs.service.WrkDetlService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Objects;
|
|
/**
|
* 对外任务门面。
|
* 把 Controller 里的校验和放行逻辑沉到 service,便于 HTTP 和 MQTT 两条入口共用。
|
*/
|
@Service
|
public class ExternalTaskFacadeServiceImpl implements ExternalTaskFacadeService {
|
|
@Autowired
|
private OpenService openService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
@Autowired
|
private WaitPakinService waitPakinService;
|
|
/**
|
* 复用现有入库通知建档逻辑,并补充托盘重复校验。
|
*/
|
@Override
|
public R acceptInboundNotice(MesToCombParam param) {
|
if (param == null) {
|
return R.error("请求参数不能为空");
|
}
|
if (Cools.isEmpty(param.getPalletId())) {
|
return R.error("palletId不能为空");
|
}
|
if (Cools.isEmpty(param.getBizNo())) {
|
return R.error("bizNo不能为空");
|
}
|
|
int countLoc = locDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.LocDetl>().eq("zpallet", param.getPalletId()));
|
int countWrk = wrkDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.WrkDetl>().eq("zpallet", param.getPalletId()));
|
if (countLoc > 0 || countWrk > 0) {
|
return R.error("托盘已在库存中/已开始入库");
|
}
|
|
if (waitPakinService.selectCount(new EntityWrapper<com.zy.asrs.entity.WaitPakin>()
|
.eq("zpallet", param.getPalletId())
|
.eq("io_status", "N")) > 0) {
|
// 同托盘存在旧的待入库通知时,删除旧记录,保留最新一次预登记。
|
waitPakinService.delete(new EntityWrapper<com.zy.asrs.entity.WaitPakin>().eq("zpallet", param.getPalletId()));
|
}
|
|
R result = openService.mesToComb(param);
|
return result == null ? R.ok() : result;
|
}
|
|
/**
|
* 复用现有出库建单逻辑;当 autoConfirm=true 时,继续调用原有确认接口自动放行。
|
*/
|
@Override
|
public R createOutboundTask(OutTaskParam param, boolean autoConfirm) {
|
if (param == null) {
|
return R.error("请求参数不能为空");
|
}
|
if (Cools.isEmpty(param.getOrderId())) {
|
return R.error("出库单号不能为空");
|
}
|
if (Cools.isEmpty(param.getPalletId())) {
|
return R.error("palletId不能为空");
|
}
|
if (Cools.isEmpty(param.getStationId())) {
|
return R.error("stationId不能为空");
|
}
|
int countLoc = locDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.LocDetl>().eq("zpallet", param.getPalletId()));
|
if (countLoc == 0) {
|
return R.error("库存中不存在该托盘");
|
}
|
|
if (param.getSeq() == null) {
|
param.setSeq(1);
|
}
|
|
R result = openService.outOrder(param, 1);
|
if (!Objects.equals(result.get("code"), 200) || !autoConfirm) {
|
return result;
|
}
|
|
// IoT pick 约定为“收到即执行”,因此这里直接复用原有确认放行接口。
|
OpenOrderPakoutPauseParam executeParam = new OpenOrderPakoutPauseParam();
|
executeParam.setOrderId(param.getOrderId());
|
executeParam.setExecute(1);
|
R confirmResult = openService.pakoutOrderPause(executeParam);
|
if (result.get("wrkNo") != null) {
|
confirmResult.add(Cools.add("wrkNo", result.get("wrkNo")));
|
}
|
return confirmResult;
|
}
|
}
|