Commit 14e1195f hc

fix:备品仓单据获取和入库出库接口完善

1 个父辈 4088f2f3
...@@ -554,7 +554,7 @@ public class LiteOrderCache { ...@@ -554,7 +554,7 @@ public class LiteOrderCache {
break; break;
} }
try { try {
smfApi.canPutInAfterResolve(pos.getBarcode()); // smfApi.canPutInAfterResolve(pos.getBarcode());
} catch (ValidateException e) { } catch (ValidateException e) {
e.printStackTrace(); e.printStackTrace();
log.error("工单号:" + orderNo + "唯一码:" + pos.getBarcode().getBarcode() + ":" + e.getMessage()); log.error("工单号:" + orderNo + "唯一码:" + pos.getBarcode().getBarcode() + ":" + e.getMessage());
...@@ -858,6 +858,18 @@ public class LiteOrderCache { ...@@ -858,6 +858,18 @@ public class LiteOrderCache {
return ""; return "";
} }
public LiteOrder getExecutingOrder() {
Collection<LiteOrder> liteOrders = getAllLiteOrder();
if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isTaskFinished() && !liteOrder.isNew() && !liteOrder.isClosed()) {
return liteOrder;
}
}
}
return null;
}
/** /**
* 获取所有liteOrder * 获取所有liteOrder
......
...@@ -374,7 +374,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -374,7 +374,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String brand) { public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String brand) {
Criteria c = Criteria.where("barcode.partNumber").is(pn) Criteria c = Criteria.where("barcode.subCodeList.partNumber").is(pn)
.and("id").nin(excludePosIds) .and("id").nin(excludePosIds)
.and("enabled").is(true)//可用 .and("enabled").is(true)//可用
.and("barcode.lockId").is(null);//没有被锁定的仓位; .and("barcode.lockId").is(null);//没有被锁定的仓位;
......
...@@ -152,9 +152,6 @@ public class SpBoxCheckOutController { ...@@ -152,9 +152,6 @@ public class SpBoxCheckOutController {
barcodeManager.save(boxBarcode); barcodeManager.save(boxBarcode);
if (!finish) {
return ResultBean.newOkResult("");
}
//5.寻找空库位 //5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode); StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
if (pos == null){ if (pos == null){
......
...@@ -9,8 +9,10 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode; ...@@ -9,8 +9,10 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.dao.impl.DataLogDaoImpl;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station; import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
...@@ -65,6 +67,10 @@ public class SpBoxPutInController { ...@@ -65,6 +67,10 @@ public class SpBoxPutInController {
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
@Autowired
private DataCache dataCache;
@Autowired
private DataLogDaoImpl dataLogDaoImpl;
@ApiOperation("获取当前工位的料箱信息") @ApiOperation("获取当前工位的料箱信息")
@RequestMapping("/getStationInfo") @RequestMapping("/getStationInfo")
......
package com.neotel.smfcore.custom.luxsan_sp.controller; package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.inList.service.manager.IInListManager;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi; import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetUnclaimedRequest; import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetUnclaimedRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult; import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed; import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import com.neotel.smfcore.custom.luxsan_sp.bean.UnclaimedDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus; import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import com.neotel.smfcore.custom.luxsan_sp.util.OrderNoCache; import com.neotel.smfcore.custom.luxsan_sp.util.OrderNoCache;
...@@ -20,7 +25,9 @@ import lombok.extern.slf4j.Slf4j; ...@@ -20,7 +25,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import sun.util.calendar.BaseCalendar;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -44,6 +51,9 @@ public class SpUnclaimedController { ...@@ -44,6 +51,9 @@ public class SpUnclaimedController {
private IUnclaimedManager unclaimedManager; private IUnclaimedManager unclaimedManager;
@Autowired @Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private TaskService taskService; private TaskService taskService;
@ApiOperation("获取正在执行出库单") @ApiOperation("获取正在执行出库单")
...@@ -69,6 +79,24 @@ public class SpUnclaimedController { ...@@ -69,6 +79,24 @@ public class SpUnclaimedController {
unclaimedManager.save(unclaimed); unclaimedManager.save(unclaimed);
} }
unclaimedList.add(unclaimed); unclaimedList.add(unclaimed);
String orderNo = unclaimed.getOrderNo();
// if (ObjectUtil.isNotNull(liteOrderManager.findByOrderNo(orderNo))) {
// continue;
// }
List<LiteOrderItem> liteOrderItems = new ArrayList<>();
for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) {
LiteOrderItem liteOrderItem = new LiteOrderItem();
liteOrderItem.setPn(unclaimedDetail.getPartno());
// 需求数量
liteOrderItem.setNeedReelCount(unclaimedDetail.getApplyQty());
liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty());
liteOrderItem.setLine("s1");
liteOrderItems.add(liteOrderItem);
}
LiteOrder liteOrder = new LiteOrder(orderNo, liteOrderItems);
liteOrder.setLine("s1");
liteOrderManager.createWithItems(liteOrder);
} }
return ResultBean.newOkResult(unclaimedList); return ResultBean.newOkResult(unclaimedList);
} }
......
...@@ -4,11 +4,14 @@ import com.neotel.smfcore.common.bean.ReelLockPosInfo; ...@@ -4,11 +4,14 @@ import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.utils.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.util.bean.BoxTaskDetail; import com.neotel.smfcore.custom.luxsan_sp.bean.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -16,18 +19,28 @@ import org.springframework.stereotype.Service; ...@@ -16,18 +19,28 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class SpBoxUtil { public class SpBoxUtil {
private static BoxTaskDetail boxTaskDetail;
public void setBoxTaskDetail(BoxTaskDetail boxTaskDetail) {
this.boxTaskDetail = boxTaskDetail; private static IStoragePosManager storagePosManager;
private static SpareNoCache spareNoCache;
@Autowired
public void setSpareNoCache(SpareNoCache spareNoCache){
SpBoxUtil.spareNoCache = spareNoCache;
} }
private static ReturnNoCache returnNoCache;
@Autowired
public void setReturnNoCache(ReturnNoCache returnNoCache){
SpBoxUtil.returnNoCache = returnNoCache;
}
private static IStoragePosManager storagePosManager;
@Autowired @Autowired
public void setStoragePosManager(IStoragePosManager manager){ public void setStoragePosManager(IStoragePosManager manager){
...@@ -48,6 +61,42 @@ public class SpBoxUtil { ...@@ -48,6 +61,42 @@ public class SpBoxUtil {
SpBoxUtil.dataCache = cache; SpBoxUtil.dataCache = cache;
} }
private static LiteOrderCache liteOrderCache;
@Autowired
public void setLiteOrderCache(LiteOrderCache liteOrderCache){
SpBoxUtil.liteOrderCache = liteOrderCache;
}
private static OrderNoCache orderNoCache;
@Autowired
public void setOrderNoCache(OrderNoCache orderNoCache) {SpBoxUtil.orderNoCache = orderNoCache;}
/**
* 获取当前正在执行的工单的详情信息
* @return
*/
public static List<SpareNoDetail> getActiveDetails() {
List<SpareNoDetail> spareNoDetails = null;
// 获取正在执行入库的工单
BaseNo no = spareNoCache.getExecutIngSpareNo();
spareNoDetails = no.getDetailList();
if (spareNoDetails == null) {
no = returnNoCache.getExecutingOrderNo();
spareNoDetails = no.getDetailList();
}
// 获取正在执行出库的工单
if (spareNoDetails == null) {
Unclaimed orderNo = orderNoCache.getExecutingOrderNo();
spareNoDetails = orderNo.getDetailList().stream().map((Function<UnclaimedDetail, SpareNoDetail>) unclaimedDetail -> {
SpareNoDetail detail = new SpareNoDetail();
detail.setAlrInQty(unclaimedDetail.getAlrInQty());
detail.setInQty(unclaimedDetail.getApplyQty());
detail.setPartno(unclaimedDetail.getPartno());
detail.setPartname(unclaimedDetail.getPartname());
return null;
}).collect(Collectors.toList());
}
return spareNoDetails;
}
public static List<List<Object>> getBoxInfo(Barcode barcode, String suffix) { public static List<List<Object>> getBoxInfo(Barcode barcode, String suffix) {
...@@ -55,15 +104,26 @@ public class SpBoxUtil { ...@@ -55,15 +104,26 @@ public class SpBoxUtil {
List<Barcode> subCodeList = barcode.getSubCodeList(); List<Barcode> subCodeList = barcode.getSubCodeList();
String boxStr = barcode.getBarcode(); String boxStr = barcode.getBarcode();
if (!boxTaskDetail.getBoxBarcode().equals(boxStr)) {
return null;
}
List<List<Object>> pars = new ArrayList<>(); List<List<Object>> pars = new ArrayList<>();
// 正在执行的任务的details
List<SpareNoDetail> activeDetails = getActiveDetails();
for (int i = 1; i <= 6; i++) { for (int i = 1; i <= 6; i++) {
List<Object> par = new ArrayList<>(); List<Object> par = new ArrayList<>();
String materialBarcode = boxStr + "-0" + i;
String partNumber = getPartNumber(subCodeList, materialBarcode);
for (SpareNoDetail activeDetail : activeDetails) {
if (activeDetail.getPartno().equals(partNumber)) {
par.add(activeDetail.getInQty()); // 该pn总共需要的数量
}
}
par.add(getAmount(subCodeList, materialBarcode)); //数量
par.add(i); //隔口号 par.add(i); //隔口号
par.add(getAmount(subCodeList,boxStr+"-0"+i)); //数量 par.add(partNumber); //料号
par.add(getPartNumber(subCodeList,boxStr+"-0"+i)); //料号 for (SpareNoDetail activeDetail : activeDetails) {
if (activeDetail.getPartno().equals(partNumber)) {
par.add(activeDetail.getAlrInQty()); // 该pn已完成数量
}
}
pars.add(par); pars.add(par);
} }
......
package com.neotel.smfcore.custom.luxsan_sp.util.bean;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.util.OrderNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.ReturnNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import lombok.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BoxTaskDetail {
// 类型
private Integer type;
// 单号
private String orderNo;
// 箱号
private String boxBarcode;
// 具体到格口的任务内容
private List<BinDetail> binDetails;
@Data
public static class BinDetail {
private Integer binNum;
private String partNumber;
private Integer qty;
private Integer arlQty;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!