Commit 58fa5821 zshaohui

功能提交

1 个父辈 ce4f455b
正在显示 127 个修改的文件 包含 150 行增加3435 行删除
......@@ -8,7 +8,7 @@ import com.neotel.smfcore.core.api.bean.CodeValidateParam;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
......
......@@ -5,7 +5,6 @@ import com.google.common.collect.Lists;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.core.barcode.bean.BarcodeRule;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
......@@ -13,14 +12,11 @@ import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.GrLabel;
import com.neotel.smfcore.custom.lizhen.setting.bean.ExpiredSetting;
import com.neotel.smfcore.custom.lizhen.setting.service.manager.ExpiredSettingManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.yaml.snakeyaml.comments.CommentType;
import java.util.*;
......
......@@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.bean.CodeValidateParam;
......@@ -22,8 +21,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.lizhen.innerBox.rest.InnerBoxRestController;
import com.neotel.smfcore.security.TokenProvider;
......@@ -31,8 +29,6 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
......@@ -425,36 +421,6 @@ public class NLShelfHandler extends BaseDeviceHandler {
throw new ValidateException("smfcore.error.barcode.invalid", "{0}不是有效的条码",new String[]{code});
}
//校验是否可以入库
Map<String, Object> brandQty = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (brandQty == null || brandQty.isEmpty()) {
throw new ValidateException("smfcore.error.barcode.partNumber.invalid", "{0}不是有效的料号", new String[]{barcode.getPartNumber()});
}
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
//如果是L开头的去量测
if (barcode.getBarcode().startsWith("L") || barcode.getBarcode().startsWith("l")) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
} else {
if (barcodeApi != null) {
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
}
}
}
if (barcodeApi != null){
barcode = barcodeApi;
}
Date expireDate = barcode.getExpireDate();
if (expireDate != null) {
if (System.currentTimeMillis() > expireDate.getTime()) {
......
......@@ -11,7 +11,6 @@ import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.core.api.listener.ISmfApiListener;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
......@@ -23,9 +22,8 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.dao.IAlarmInfoDao;
import com.neotel.smfcore.core.system.service.po.AlarmInfo;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.lizhen.virtual.service.manager.IVirInventoryManager;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
......@@ -37,12 +35,10 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.beans.Beans;
import java.util.*;
......@@ -208,40 +204,12 @@ public class DeviceController {
virInventoryManager.updateStatus(dataLog);
}
}
//校验是否可以入库
Map<String, Object> brandQty = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (brandQty == null || brandQty.isEmpty()) {
throw new ValidateException("smfcore.error.barcode.partNumber.invalid", "{0}不是有效的料号", new String[]{barcode.getPartNumber()});
}
Barcode barcodeCanPutIn = smfApi.canPutInAfterResolve(barcode);
if (barcodeCanPutIn != null){
barcode = barcodeCanPutIn;
}
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
//如果是L开头的去量测
if (barcode.getBarcode().startsWith("L") || barcode.getBarcode().startsWith("l")) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
throw new ValidateException("", barcode.getBarcode() + "散料未量测");
}
} else {
if (barcodeApi != null) {
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
throw new ValidateException("", barcode.getBarcode() + "散料未量测");
}
}
}
}
if (barcodeApi != null){
barcode = barcodeApi;
}
for (DataLog dataLog : taskService.getAllTasks()) {
// if(!dataLog.isPackageReel()){
//已经在任务当中,返回对应的信息
......
......@@ -30,12 +30,11 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil;
import com.neotel.smfcore.custom.lizhen.third.maicheng.api.MaiZhengApi;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
......
......@@ -20,29 +20,22 @@ import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.rest.dto.TacticsOutDto;
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.StoragePos;
import com.neotel.smfcore.core.system.bean.MSDAppendInfo;
import com.neotel.smfcore.core.system.service.dao.IDataLogDao;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil;
import com.neotel.smfcore.custom.lizhen.virtual.service.manager.IVirInventoryManager;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created by sunke on 2021/7/13.
......
......@@ -24,12 +24,9 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem;
import com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache;
import com.neotel.smfcore.custom.lizhen.third.maicheng.bean.AskReelBoxList;
import com.neotel.smfcore.custom.luxsan.api.LuxsanApi;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
......
......@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.enums.DeviceType;
......@@ -58,6 +59,9 @@ public class AgvBoxDeviceClientController {
@Autowired
private IDataLogDao dataLogDao;
@Autowired
private CodeResolve codeResolve;
/**
* 料箱锁定的目的地
*/
......@@ -195,112 +199,32 @@ public class AgvBoxDeviceClientController {
@ResponseBody
@AnonymousAccess
public ResultBean getTarget(HttpServletRequest request) {
Map<String, String> taskData = new HashMap<>();
taskData.put("barcode", "");
taskData.put("slotCode", "");
String rfid = request.getParameter("barcode");
try {
//"barcode": "CS001"
DataLog opTask = null;
Collection<DataLog> tasks = taskService.getAllTasks();
for (DataLog task : tasks) {
if (!task.isFinished() && !task.isCancel()) {
Storage storage = dataCache.getStorageById(task.getStorageId());
if (storage.isStorage(DeviceType.AGV_BOX)) {
if (isSameBarcodeTask(rfid, task)) {
opTask = task;
break;
}
}
}
Barcode barcode = codeResolve.resolveOneValideBarcode("=2x2=" + rfid);
if (barcode != null){
List<Storage> storageList = new ArrayList<>();
Collection<Storage> storages = dataCache.getAllStorage().values();
for (Storage storage : storages) {
storageList.add(storage);
}
String target = "s0";
String barcode = "";
//"target": "1",//0=工位已有箱子;s1=工位1;s2=工位2;s3=工位3;s4=工位4;s5=工位5;其他值表示入库的目标库位
if (opTask != null) {
barcode = opTask.getBarcode();
if (opTask.isPutInTask()) {
target = opTask.getPosName();
} else {
String loc = lockRfidTarget.get(opTask.getBarcode());
if (loc != null) {
target = loc;
} else {
loc = opTask.getLoc();
if(Strings.isNotBlank(loc)){
//出空箱子时已经指定了工位,先判断该工位是否有料箱
Station station = StationCacheUtil.getStation(loc);
if(station != null){
String stationRfid = station.getCurrentRfid();
if(Strings.isBlank(stationRfid)){
//该工位无料箱, 把空箱子分配到该工位
lockRfidTarget.put(opTask.getBarcode(),station.getName());
log.info("分配用于入库物料的料箱[" + opTask.getBarcode() + "]到" + station.getName());
target = station.getName();
}
}
}else{
for (Station station : StationCacheUtil.getAllStations()) {
String stationRfid = station.getCurrentRfid();
if(Strings.isBlank(stationRfid)){
//该工位目前无料箱
/*if (lockRfidTarget.get(station.getName()) == null) {
//工位未分配过库位
log.info("分配料箱[" + opTask.getBarcode() + "]到" + station.getName());
lockRfidTarget.put(opTask.getBarcode(), station.getName());
target = station.getName();
break;
}*/
Collection<String> names = lockRfidTarget.values();
if (names != null && !names.isEmpty()){
if (!names.contains(station.getName())) {
//工位未分配过库位
log.info("分配料箱[" + opTask.getBarcode() + "]到" + station.getName());
lockRfidTarget.put(opTask.getBarcode(), station.getName());
target = station.getName();
break;
}
} else {
log.info("分配料箱[" + opTask.getBarcode() + "]到" + station.getName());
lockRfidTarget.put(opTask.getBarcode(), station.getName());
target = station.getName();
break;
}
}
}
//如果工位上都是忙碌,则均分
if ("s0".equals(target)){
Map<String,Integer> nameCountMap = new HashMap<>();
for (int i = 1; i < 6; i++) {
nameCountMap.put("s"+i,0);
}
Collection<String> names = lockRfidTarget.values();
for (String name : names) {
Integer count = nameCountMap.get(name);
count ++;
nameCountMap.put(name,count);
}
target = "s5";
int count = nameCountMap.get("s5");
for (Map.Entry<String, Integer> entry : nameCountMap.entrySet()) {
String name = entry.getKey();
Integer nameCount = entry.getValue();
if (count > nameCount){
count = nameCount;
target = name;
}
}
lockRfidTarget.put(opTask.getBarcode(),target);
}
}
}
}
StoragePos pos = taskService.findEmptyPosForPutIn(storageList, barcode, "", "");
if (pos != null){
Storage storage = dataCache.getStorageById(pos.getStorageId());
taskService.addPutInTaskToExecute(storage,barcode,pos,"");
taskData.put("barcode", barcode.getBarcode());
taskData.put("slotCode",pos.getPosName());
}
Map<String, String> taskData = new HashMap<>();
taskData.put("barcode", barcode);
taskData.put("slotCode", target);
return ResultBean.newOkResult(taskData);
} catch (Exception e) {
return ResultBean.newErrorResult(2004, "smfcore.agvBox.getTarget.fail", "获取" + rfid + "目的地失败");
}
return ResultBean.newOkResult(taskData);
}
......
package com.neotel.smfcore.custom.lizhen.agvBox.rest;
import cn.hutool.core.date.DateTime;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.BetweenData;
import com.neotel.smfcore.common.bean.ReelLockPosInfo;
......@@ -21,7 +20,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.InventoryData;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.PartitionInfo;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
......@@ -39,7 +38,6 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
......@@ -624,11 +622,7 @@ public class InventoryController {
if (!posName.startsWith(boxStr)) {
return barcode.getBarcode() + "存在料箱中:" + barcode.getPosName() + "与当前工位上的料箱:" + boxStr + "不一致";
}
//判断料号是否正确
Map<String, Object> barandMap = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (barandMap.get("qty") == null) {
return barcode.getPartNumber() + "MES未返回料卷数量,未找到对应的料卷数量";
}
log.info(barcode.getBarcode() + "隔口信息:" + barcode.getPosName());
//开始查询盘点数据
//盘点批次
......
......@@ -4,7 +4,6 @@ import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
......@@ -24,7 +23,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.agvBox.enums.INOUT_TYPE;
import com.neotel.smfcore.custom.lizhen.agvBox.util.BoxUtil;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
......@@ -236,37 +235,6 @@ public class OutLineController {
}
}
//校验是否可以入库
Map<String, Object> brandQty = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (brandQty == null || brandQty.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.partNumber.invalid", "{0}不是有效的料号", new String[]{barcode.getPartNumber()});
}
//获取mes数量
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
//如果是L开头的去量测
if (barcode.getBarcode().startsWith("L") || barcode.getBarcode().startsWith("l")) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
} else {
if (barcodeApi != null) {
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
}
}
}
if (barcodeApi != null){
barcode = barcodeApi;
}
barcode.setReelAmount(1);
barcode.setWarehouseCode(warehouseCode);
barcode.setPosName(boxPartition);
......
......@@ -21,7 +21,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.GrLabel;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
import com.neotel.smfcore.custom.lizhen.agvBox.enums.INOUT_TYPE;
......@@ -114,39 +114,8 @@ public class WarehouseController {
if (grLabel.getRemainingAmount() <= 0) {
return ResultBean.newErrorResult(-1, "", "Gr:" + grLabel.getLabelId() + "已经失效");
}
//得到料卷总数量与尺寸
Map<String, Object> barandMap = lizhenApi.brandQty(grLabel.getPartNumber(), grLabel.getProvider());
if (barandMap.get("qty") == null) {
return ResultBean.newErrorResult(-1, "", grLabel.getPartNumber() + "MES未返回料卷数量,未找到对应的料卷数量");
}
num = (grLabel.getRemainingAmount() / Integer.valueOf(barandMap.get("qty").toString())) + "";
//校验尺寸,如果没有返回也没有手输,返回错误
if (barandMap.get("reelSize") == null) {
if (StringUtils.isBlank(size)) {
return ResultBean.newErrorResult(-1, "", grLabel.getPartNumber() + "MES未返回物料规格,请选择对应的物料规格");
}
} else {
String reelSize = barandMap.get("reelSize").toString();
if ("7".equals(reelSize)) {
size = "7X8";
} /*else if ("13".equals(reelSize)) {
size = "13X24";
} */else if ("15".equals(reelSize)) {
size = "15X32";
}
}
//得到对应的库别
Map<String, String> fetchGrMap = lizhenApi.fetchGR(grLabel);
if (fetchGrMap.get("warehouseCode") == null) {
if (StringUtils.isBlank(warehouseCode)) {
return ResultBean.newErrorResult(-1, "", grLabel.getLabelId() + "MES未返回库别,请选择对应的库别");
}
} else {
warehouseCode = fetchGrMap.get("warehouseCode");
}
String keeperCode = fetchGrMap.get("keeperCode");
grLabel.setWarehouseCode(warehouseCode);
grLabel.setKeeperCode(keeperCode);
grLabelManager.save(grLabel);
station.setGrLabel(grLabel.getLabelId());
station.setLabelItem(grLabel.getLabelItem());
......@@ -406,37 +375,6 @@ public class WarehouseController {
}
}
//校验是否可以入库
Map<String, Object> brandQty = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (brandQty == null || brandQty.isEmpty()) {
return ResultBean.newErrorResult(-1,"smfcore.error.barcode.partNumber.invalid", "{0}不是有效的料号", new String[]{barcode.getPartNumber()});
}
//获取mes数量
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
//如果是L开头的去量测
if (barcode.getBarcode().startsWith("L") || barcode.getBarcode().startsWith("l")) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
} else {
if (barcodeApi != null) {
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
}
}
}
if (barcodeApi != null){
barcode = barcodeApi;
}
//当前已扫描的料卷数量+1
int reelCurrentNum = station.getReelCurrentNum();
station.setReelCurrentNum(reelCurrentNum + 1);
......
package com.neotel.smfcore.custom.lizhen.api;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.core.api.listener.DefaultSmfApiListener;
import com.neotel.smfcore.custom.lizhen.api.bean.request.GetSpareNoRequest;
import com.neotel.smfcore.custom.lizhen.api.bean.result.GetSpareNoResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class LizhenApi extends DefaultSmfApiListener {
public static String GetSpareNoUrl;
@Value("${api.getSpareNo}")
public void setGetSpareNoUrl(String url) {
LizhenApi.GetSpareNoUrl = url;
}
/*public static GetSpareNoResult getSpareNo(GetSpareNoRequest request) {
log.info("获取入库单号请求为:" + JSON.toJSONString(request));
HttpHelper.sendGet()
}*/
@Override
public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("Lizhen");
}
}
package com.neotel.smfcore.custom.lizhen.api.bean;
import lombok.Data;
@Data
public class LizhenApiResult {
private String msg;
private int code;
private String data;
}
package com.neotel.smfcore.custom.lizhen.api.bean.request;
import lombok.Data;
@Data
public class GetSpareNoRequest {
//厂区
private String deptId;
//功能部门
private String functionDept;
}
package com.neotel.smfcore.custom.lizhen.api.bean.result;
import lombok.Data;
@Data
public class GetSpareNoDetail {
private String partno;
private String partname;
private int inQty;
}
package com.neotel.smfcore.custom.lizhen.api.bean.result;
import lombok.Data;
import java.util.List;
@Data
public class GetSpareNoResult {
private String createBy;
//创建时间
private String createTime; // 使用Date或LocalDateTime等日期类型
//单据号
private String spareNo;
//仓库代码
private String whCode;
//0表示待入库
private String status;
//厂区id
private int deptId;
//料号明细
private List<GetSpareNoDetail> detailList;
//仓库描述
private String whDesc;
}
......@@ -23,7 +23,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.api.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.VirImportLog;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.lizhen.innerBox.service.manager.IVirImportLogManager;
......@@ -126,36 +126,6 @@ public class VirtualRestController {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"库位"});
}
//校验是否可以入库
Map<String, Object> brandQty = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (brandQty == null || brandQty.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.partNumber.invalid", "{0}不是有效的料号", new String[]{barcode.getPartNumber()});
}
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
//如果是L开头的去量测
if (barcode.getBarcode().startsWith("L") || barcode.getBarcode().startsWith("l")) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
} else {
if (barcodeApi != null) {
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
}
}
}
if (barcodeApi != null){
barcode = barcodeApi;
}
//判断是否为禁用料
try {
barcode = smfApi.canPutInAfterResolve(barcode);
......
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
import java.util.List;
/**
* 电子料入退库 请求
*/
@Data
public class BackToWarehouseRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 目标储位
*/
private String BIN_CODE;
/**
* 料卷清单
*/
private List<String> REEL_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
@Data
@AllArgsConstructor
public class BinMoveRequest {
private String PLANT_CODE;
private String BIN_CODE;
private List<String> REEL_LIST;
private int QTY;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class BrandQtyRequest {
private String material_code;
private String brand;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
@Data
public class BrandQtyResult {
private String id;
private String material_code;
private String brand;
private int qty;
private int reel_size;
private String create_by;
private String create_at;
private String update_by;
private String update_at;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 箱去向接口
*/
@Data
public class CartonDstRequest {
//厂区
private String PLANT;
//箱号
private String CARTON_ID;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* PPS CHECK检查结果
*/
@Data
public class CheckLabelRequest {
//箱号
private String CARTON_NO;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* PPS 按栈板获取箱清单
*/
@Data
public class CheckPalletCartonRequest {
//栈板号
private String PALLET_NO;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
@Data
public class CheckPassStationRequest {
// 出货栈板号
private String PALLET_NO;
// 箱号
private String CARTON_NO;
// SSCC/Tracking No
private String BARCODE;
// DN号
private String DN_NO;
// SHIPPINGLABEL/CARRIERLABEL打印类型
private String PRINT_TYPE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 获取不可用(HOLD)库存信息
*/
@Data
public class FetchHoldInfoRequest {
//工厂代码
private String PLANT;
//库别代码
private String WAREHOUSE_CODE;
//物料编号
private String MATERIAL_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* 拉取转库单据
*/
@Data
@AllArgsConstructor
public class FetchMoveTicketRequest {
//工厂代码
private String PLANT_CODE;
//单据号
private String TICKET_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 用栈板号获取箱信息清单
*/
@Data
public class FetchPalletCartonRequest {
//库存栈板号
private String PALLET_ID;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
* 获取栈板信息 请求
*/
@Data
@AllArgsConstructor
public class FetchPalletInfoRequest {
private String REQUEST_ID;
private String PLANT;
private List<String> PALLET_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class FetchShipmentInfoRequest {
/**
* 工厂代码
*/
private String PLANT_CODE;
/**
* 出货单号
*/
private String TICKET_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 获取可用库存
*/
@Data
public class FetchValidInvRequest {
private String REQ_ID;
private String MATERIAL_CODE;
private String WAREHOUSE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* GetInDate 校验DC有效期
*/
@Data
@AllArgsConstructor
public class GetInDateRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 制造商
*/
private String BRAND;
/**
* 日期编码
*/
private String DATE_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* GetPickingItems请求实体类
*/
@Data
@AllArgsConstructor
public class GetPickingItemsRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 任务类型
*/
private String PICKING_ID;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 集货单锁定料箱查询
*/
@Data
public class LockedCartonQueryRequest {
//出货单号
private String SHIPMENT_ID;
//出货栈板号
private String PALLET_NO;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
import java.util.List;
@Data
public class MoveTicketPickData {
// 工厂代码
private String PLANT_CODE;
// 单据号
private String TICKET_CODE;
// 单据行号
private String TICKET_ITEM;
// 料号
private String MATERIAL_CODE;
// 库存栈板清单
private List<String> LABEL_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 转库单据备料
*/
@Data
public class MoveTicketPickRequest {
//工厂代码
private String PLANT_CODE;
//单据号
private String TICKET_CODE;
private MoveTicketPickData DATA;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 转库单据过账
*/
@Data
public class MoveTicketPostRequest {
//工厂代码
private String PLANT_CODE;
//单据号
private String TICKET_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 转库单据备料还原
*/
@Data
public class MoveTicketRestoreRequest {
//工厂代码
private String PLANT_CODE;
//单据号
private String TICKET_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
* 按GR生成标签码并上架 请求
*/
@Data
@AllArgsConstructor
public class NewLabelToCellRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 过账编码
*/
private List<String> UD_LIST;
/**
* 数量
*/
private int QTY;
/**
* 储位号
*/
private String BIN_CODE;
/**
* 料卷行
*/
private List<String> REEL_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
import java.util.List;
/**
* 栈板合并
*/
@Data
public class PalletMergeRequest {
// 合并到
private String MERGE_TO;
// 合并清单
private List<String> MERGE_LIST;
// 厂区
private String PLANT_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 栈板拆分
*/
@Data
public class PalletSplitRequest {
//库存栈板号
private String PALLET_ID;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
* 栈板同库别转移
*/
@Data
public class PalletUpdateRequest {
// 请求标识
private String REQUEST_ID;
// 库存栈板号列表
private List<String> PALLET_LIST;
// 储位号
private String BIN_CODE;
// 业务类型
private String BIZ_TYPE;
/**
* 工厂代码
*/
private String PLANT_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
* PickingIssue请求
*/
@Data
@AllArgsConstructor
public class PickingIssueRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 挑料单号
*/
private String PICKING_ID;
/**
* 行号
*/
private String ITEM_ID;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 库别
*/
private String WAREHOUSE_CODE;
/**
* 制造商
*/
private String BRAND;
/**
* 面别
*/
private String FACE;
/**
* 批次码
*/
private String BATCH_CODE;
/**
* 料卷清单
*/
private List<String> REEL_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* QueryBin请求
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class QueryBinRequest {
/**
* 工厂代码
*/
private String PLANT_CODE;
/**
* 存储类型
*/
private String STORAGE_TYPE;
/**
* 储位状态
*/
private int BIN_STATUS;
/**
* 储位库别
*/
private String WAREHOUSE_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* QueryGr请求实体类
*/
@Data
@AllArgsConstructor
public class QueryGrRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 供应商
*/
private String BRAND;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* GR过账状态查询 请求
*/
@Data
@AllArgsConstructor
public class QueryGrStatusRequest {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 供应商
*/
private String BRAND;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 单据号
*/
private String GR_CODE;
/**
* 单据行
*/
private String GR_ITEM;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class QueryPickingRequest {
private String PLANT_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
/**
* 重置转库单据
*/
@Data
public class ResetMoveTicketRequest {
//工厂代码
private String PLANT_CODE;
//单据号
private String TICKET_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
import java.util.List;
/**
* 料卷退PK 请求
*/
@Data
public class ReturnToPKRequest {
// 厂区
private String PLANT_CODE;
// 挑料单号
private String PICKING_ID;
// 料号
private String MATERIAL_CODE;
// 目标储位
private String BIN_CODE;
// 料卷清单
private List<String> REEL_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class ShipCancelUpshelfRequest {
//工厂代码
private String PLANT_CODE;
//ODN单号
private String TICKET_CODE;
//标签码
private String PALLET_ID;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
import java.util.List;
@Data
public class TicketPostRequest {
// 厂区
private String PLANT_CODE;
// 单据号
private String TICKET_CODE;
// 单据行
private String TICKET_ITEM;
// 料卷清单
private List<String> REEL_LIST;
// 数量
private int QTY;
// 储位号
private String BIN_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.Data;
import java.util.List;
/**
* Tower发料 请求
*/
@Data
public class TowerIssueRequest {
// 厂区
private String PLANT_CODE;
// 挑料单号
private String PICKING_ID;
// 料号
private String MATERIAL_CODE;
// 库别
private String WAREHOUSE_CODE;
// 制造商
private String BRAND;
// 面别
private String FACE;
// 批次码
private String BATCH_CODE;
// 料卷清单
private List<String> REEL_LIST;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* UpdateBin 更新储位 请求
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UpdateBinRequest {
/**
* 工厂代码
*/
private String PLANT_CODE;
/**
* 储位代码
*/
private String BIN_CODE;
/**
* 储位库别
*/
private String WAREHOUSE_CODE;
/**
* 存储类型
*/
private String STORAGE_TYPE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* 校验箱号信息
*/
@Data
@AllArgsConstructor
public class ValidCartonRequest {
// 请求ID
private String REQUEST_ID;
// 卡板ID
private String CARTON_ID;
// 厂区
private String PLANT;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 电子料入退库 结果
*/
@Data
public class BackToWarehouseResult {
/**
*厂区
*/
private String PLANT_CODE;
/**
*标签码
*/
private String LABEL_ID;
/**
*料号
*/
private String MATERIAL_CODE;
/**
*库别
*/
private String WAREHOUSE_CODE;
/**
*数量
*/
private int LABEL_QTY;
/**
*厂商代码
*/
private String VENDOR_CODE;
/**
*厂商名称
*/
private String VENDOR_NAME;
/**
*版本
*/
private String VERSION;
/**
*单据日期
*/
private String GR_DATE;
/**
*异动日期
*/
private String TRAN_DATE;
/**
*状态
*/
private int STATUS;
/**
*仓管员
*/
private String KEEPER_CODE;
/**
*制造商
*/
private String BRAND;
/**
*单位
*/
private String UNIT;
/**
*批次号
*/
private String BATCH_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
@Data
public class BinMoveResult {
//厂区
private String PLANT_CODE;
// 描述: 标签码
private String LABEL_ID;
// 描述: 料号
private String MATERIAL_CODE;
// 描述: 库别
private String WAREHOUSE_CODE;
// 描述: 数量
private Integer LABEL_QTY;
// 描述: 厂商代码
private String VENDOR_CODE;
// 描述: 厂商名称
private String VENDOR_NAME;
// 描述: 版本
private String VERSION;
// 描述: 单据日期
private String GR_DATE;
// 描述: 异动日期
private String TRAN_DATE;
// 描述: 状态
private int STATUS;
// 描述: 仓管员
private String KEEPER_CODE;
// 描述: 制造商
private String BRAND;
// 描述: 单位
private String UNIT;
// 描述: 批次号
private String BATCH_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 箱去向接口
*/
@Data
public class CartonDstResult {
//目的地
private String DESTINATION;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
import java.util.List;
/**
* PPS 按栈板获取箱清单
*/
@Data
public class CheckPalletCartonResult {
// 箱号
private String CARTON_ID;
// 工厂代码
private String PLANT;
private String PART_NO;
// 库别
private String WAREHOUSE_CODE;
// 原产国
private String COO;
private List<String> PALLET_PACK_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 获取不可用(HOLD)库存信息
*/
@Data
public class FetchHoldInfoResult {
// 箱号
private String CARTON_ID;
// 工厂代码
private String PLANT_CODE;
// 批次
private String BATCH_CODE;
// 库存栈板号
private String PALLET_ID;
// 料号
private String MATERIAL_CODE;
// HOLD数量
private Integer HOLD;
// 数量(PCS)
private Integer QTY;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 拉取转库单据
*/
@Data
public class FetchMoveTicketResult {
// 单据行号
private String TICKET_ITEM;
// 料号
private String MATERIAL_CODE;
// 源工厂
private String SRC_PLANT;
// 目的工厂
private String DST_PLANT;
// 来源库别
private String SRC_WAREHOUSE;
// 目的库别
private String DST_WAREHOUSE;
// 来源批次
private String SRC_BATCH;
// 目的批次
private String DST_BATCH;
// 数量
private int QTY;
// 移动类型
private String MOVE_TYPE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 用栈板号获取箱信息清单
*/
@Data
public class FetchPalletCartonResult {
// 箱号
private String CARTON_ID;
// 工厂代码
private String PLANT;
// 料号
private String PN;
// 库存栈板号
private String PALLET_ID;
// 机种
private String MODEL_FAMILY;
// 库别
private String WAREHOUSE_CODE;
// 状态
private String STATUS;
// 是否 HOLD
private String HOLD;
// 数量(PCS)
private Integer QTY;
// 包规
private Integer FULL_QTY;
// 版本号
private String OS_VERSION;
// 原产国
private String COO;
// 包装类型
private String PACK_TYPE;
// 生产日期
private String CREATE_AT;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 获取栈板信息 结果
*/
@Data
public class FetchPalletInfoResult {
// 厂区
private String PLANT;
// 库存栈板号
private String PALLET_ID;
// 机种
private String MODEL_FAMILY;
// 库别
private String WAREHOUSE_CODE;
// 生产日期
private String CREATED_TIME;
// 储位号
private String BIN_CODE;
// 数量
private int QTY;
// 批次
private String BATCH_CODE;
// 料号
private String MATERIAL_CODE;
// 物料类型
private String MATERIAL_TYPE;
// 原产国
private String COO;
// 版本
private String OS_VERSION;
// 包装类型
private String PACK_TYPE;
// 厂区(重复字段名,可能需要根据实际情况调整)
private String PLANT_CODE;
// 状态
private int STATUS;
// 禁用
private int HOLD;
// 失败说明
private String ERROR;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
@Data
public class FetchShipmentInfoResult {
/**
* 行ID
*/
private String RTV_ID;
/**
* 工厂代码
*/
private String PLANT_CODE;
/**
* 出货单号
*/
private String TICKET_CODE;
/**
* 单据行号
*/
private String TICKET_ITEM;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 物料类型
*/
private String MATERIAL_TYPE;
/**
* 仓库代码
*/
private String WAREHOUSE_CODE;
/**
* 供应商代码
*/
private String VENDOR_CODE;
/**
* 单据数量
*/
private int QTY;
/**
* 单位
*/
private String UNIT;
/**
* 状态
*/
private String STATUS;
/**
* 原数量
*/
private int ORIGIN_QTY;
/**
* 制造商
*/
private int MANUFACTURE;
/**
* 报关模式
*/
private String IMPORT_MODE;
/**
* 进口编号
*/
private String IMPORT_CODE;
/**
* 收货工厂
*/
private String SHIP_TO;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 获取可用库存
*/
@Data
public class FetchValidInvResult {
// 料号
private String MATERIAL_CODE;
// 库存栈板号
private String PALLET_ID;
// 数量
private int QTY;
// 扣货
private int HOLD;
// 储位
private String BIN_CODE;
// 库别
private String WAREHOUSE;
// 状态
private int STATUS;
// 批次
private String BATCH_CODE;
// 时间
private String CREATED_AT;
// 原产国
private String COO;
// 版本
private String OS_VERSION;
// 包装类型
private String PACK_TYPE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* GetPickingItems结果实体类
*/
@Data
public class GetPickingItemsResult {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 行号
*/
private String ITEM_ID;
/**
* 挑料单号
*/
private String PICKING_ID;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 库别
*/
private String WAREHOUSE;
/**
* 需求数量
*/
private int REQ_QTY;
/**
* 需求卷数
*/
private int REQ_REEL;
/**
* 传承数量
*/
private int CP_QTY;
/**
* 传承卷数
*/
private int CP_REEL;
/**
* 已发数量
*/
private int ISSUED_QTY;
/**
* 已发卷数
*/
private int ISSUED_REEL;
/**
* 退回数量
*/
private int RET_QTY;
/**
* 面别
*/
private String FACE;
/**
* 批次
*/
private String BATCH_CODE;
/**
* 制造商
*/
private String BRAND;
/**
* 创建日期
*/
private String CREATE_AT;
/**
* 更新日期
*/
private String UPDATE_AT;
private String MO;
private String BIN_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 集货单锁定料箱查询
*/
@Data
public class LockedCartonQueryResult {
// 出货单号
private String SHIPMENT_ID;
// 出货栈板号
private String PALLET_NO;
// 行号
private String ROW_ID;
// 箱号
private String CARTON_ID;
// 锁定时间
private String CREATE_AT;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 按GR生成标签码并上架 返回
*/
@Data
public class NewLabelToCellResult {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 标签码
*/
private String LABEL_ID;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 库别
*/
private String WAREHOUSE_CODE;
/**
* 数量
*/
private int LABEL_QTY;
/**
* 厂商代码
*/
private String VENDOR_CODE;
/**
* 厂商名称
*/
private String VENDOR_NAME;
/**
* 版本
*/
private String VERSION;
/**
* 单据日期
*/
private String GR_DATE;
/**
* 异动日期
*/
private String TRAN_DATE;
/**
* 状态
*/
private int STATUS;
/**
* 仓管员
*/
private String KEEPER_CODE;
/**
* 制造商
*/
private String BRAND;
/**
* 单位
*/
private String UNIT;
/**
* 批次号
*/
private String BATCH_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 栈板合并
*/
@Data
public class PalletMergeResult {
// 库存栈板号
private String PALLET_ID;
// 机种
private String MODEL_FAMILY;
// 库别
private String WAREHOUSE_CODE;
// 生产日期
private String CREATED_TIME;
// 储位号
private String BIN_CODE;
// 数量
private int QTY;
// 批次
private String BATCH_CODE;
// 料号
private String MATERIAL_CODE;
// 物料类型
private String MATERIAL_TYPE;
// 原产国
private String COO;
// 版本
private String OS_VERSION;
// 包装类型
private String PACK_TYPE;
// 厂区
private String PLANT_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 栈板同库别转移
*/
@Data
public class PalletUpdateResult {
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
/**
* PickingIssue返回
*/
public class PickingIssueResult {
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* QueryBin返回
*/
@Data
public class QueryBinResult {
/**
* 储位代码
*/
private String BIN_CODE;
/**
* 储位类型
*/
private String BIN_TYPE;
/**
* 储位状态
*/
private int BIN_STATUS;
/**
* 容量
*/
private int BIN_SIZE;
/**
* 仓管员
*/
private String BIN_KEEPER;
/**
* 储位库别
*/
private String WAREHOUSE_CODE;
/**
* 存储类型
*/
private String STORAGE_TYPE;
/**
* 储位厂区
*/
private String PLANT_CODE;
/**
* 储位楼栋
*/
private String BUILDING;
/**
* 储位分类
*/
private String BIN_CATEGORY;
/**
* 储位点位
*/
private String BIN_ZONE;
/**
* 储位楼层
*/
private String BIN_FLOOR;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* QueryGr结果实体类
*/
@Data
public class QueryGrResult {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 单据号
*/
private String GR_CODE;
/**
* 单据行
*/
private String GR_ITEM;
/**
* 单据日期
*/
private String GR_DATE;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 厂商代码
*/
private String VENDOR_CODE;
/**
* 厂商名称
*/
private String VENDOR_NAME;
/**
* 制造商
*/
private String BRAND;
/**
* 仓管员
*/
private String KEEPER_CODE;
/**
* 库别
*/
private String WAREHOUSE_CODE;
/**
* 批次
*/
private String BATCH_CODE;
/**
* 数量
*/
private int GR_QTY;
/**
* 单据状态
*/
private int POST_STATUS;
/**
* 异动日期
*/
private String POST_DATE;
/**
* 原单据
*/
private String ORIGIN_GR;
/**
* 保税标识
*/
private String MATERIAL_BONDED;
/**
* A级物料
*/
private String MATERIAL_CONTROL;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* GR过账状态查询 返回
*/
@Data
public class QueryGrStatusResult {
/**
* 厂区
*/
private String PLANT_CODE;
/**
* 单据号
*/
private String GR_CODE;
/**
* 单据行
*/
private String GR_ITEM;
/**
* 单据日期
*/
private String GR_DATE;
/**
* 料号
*/
private String MATERIAL_CODE;
/**
* 厂商代码
*/
private String VENDOR_CODE;
/**
* 厂商名称
*/
private String VENDOR_NAME;
/**
* 状态
*/
private String STATUS;
/**
* 供应商
*/
private String BRAND;
/**
* 仓管员
*/
private String KEEPER_CODE;
/**
* 库别
*/
private String WAREHOUSE_CODE;
/**
* 过账代码
*/
private String UD_CODE;
/**
* 过账数量
*/
private String UD_QTY;
/**
* 单据数量
*/
private String LOT_QTY;
/**
* 过账时间
*/
private String POST_DATE;
/**
* 批次
*/
private String BATCH_CODE;
/**
* 原单据
*/
private String ORIGIN_GR;
/**
* 保税标识
*/
private String MATERIAL_BONDED;
/**
* A级物料
*/
private String MATERIAL_CONTROL;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
import java.util.Date;
/**
* 查询挑料单列表
*/
@Data
public class QueryPickingResult {
// 厂区
private String PLANT_CODE;
// 挑料单号
private String PICKING_ID;
// 线别
private String LINE;
// 状态
private Integer STATUS;
// 原单号
private String ORG_PICKING_ID;
// SMT料号
private String SMT_PN;
// 创建时间
private String CREATE_AT;
// 更新时间
private String UPDATE_AT;
// 更新工号
private String UPDATE_BY;
// 更新姓名
private String UPDATE_NAME;
//出库按钮是否置灰
private boolean checkOut = true;
//工单状态
private int orderStatus;
//当前任务盘数
private int taskReelCount = 0;
//当前任务已完成盘数
private int finishedReelCount = 0;
//工单开始时间
private Date startDate;
//工单结束时间
private Date endDate;
//工单完成时间
private Date finishDate;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* 料卷退PK 返回
*/
@Data
public class ReturnToPKResult {
// 厂区
private String PLANT_CODE;
// 标签码
private String LABEL_ID;
// 料号
private String MATERIAL_CODE;
// 库别
private String WAREHOUSE_CODE;
// 数量
private int LABEL_QTY;
// 厂商代码
private String VENDOR_CODE;
// 厂商名称
private String VENDOR_NAME;
// 版本
private String VERSION;
// 单据日期
private String GR_DATE;
// 异动日期
private String TRAN_DATE;
// 状态
private int STATUS;
// 仓管员
private String KEEPER_CODE;
// 制造商
private String BRAND;
// 单位
private String UNIT;
// 批次号
private String BATCH_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
@Data
public class TicketPostResult {
// 厂区
private String PLANT_CODE;
// 标签码
private String LABEL_ID;
// 料号
private String MATERIAL_CODE;
// 库别
private String WAREHOUSE_CODE;
// 数量
private int LABEL_QTY;
// 厂商代码
private String VENDOR_CODE;
// 厂商名称
private String VENDOR_NAME;
// 版本
private String VERSION;
// 单据日期
private String GR_DATE;
// 异动日期
private String TRAN_DATE;
// 状态
private int STATUS;
// 仓管员
private String KEEPER_CODE;
// 制造商
private String BRAND;
// 单位
private String UNIT;
// 批次号
private String BATCH_CODE;
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
/**
* UpdateBin 更新储位 返回
*/
@Data
public class UpdateBinResult {
}
package com.neotel.smfcore.custom.luxsan.api.bean.result;
import lombok.Data;
import java.util.Date;
/**
* 校验箱号信息 返回
*/
@Data
public class ValidCartonResult {
// 厂区
private String PLANT;
// 箱号
private String CARTON_ID;
// 栈板号
private String PALLET_ID;
// 料号
private String PN;
// 机种
private String MODEL_FAMILY;
// 物料类型
private String MATERIAL_TYPE;
// 状态
private int STATUS;
// 库别
private String WAREHOUSE_CODE;
// 是否HOLD
private int HOLD;
// 数量
private int QTY;
// 满箱数量
private int FULL_QTY;
// 包装类型
private String PACK_TYPE;
// 生产日期
private String CREATE_AT;
// 区域
private String REGION;
}
package com.neotel.smfcore.custom.luxsan.api.bean.util;
import lombok.Data;
@Data
public class LuxsanApiResult {
private String MSGTY;
private String MSGTX;
private String DATA;
}
package com.neotel.smfcore.custom.luxsan.api.enums;
/**
* Bin 枚举
*/
public class BinEnum {
//R:货架, P:栈板, C:箱格, B:胶框, T:料塔
public static final String STORAGE_TYPE_R = "R";
public static final String STORAGE_TYPE_P = "P";
public static final String STORAGE_TYPE_C = "C";
public static final String STORAGE_TYPE_B = "B";
public static final String STORAGE_TYPE_T = "T";
//0:空闲, 1:占用, 2:锁定
public static final int BIN_STATUS_0 = 0;
public static final int BIN_STATUS_1 = 1;
public static final int BIN_STATUS_2 = 2;
}
package com.neotel.smfcore.custom.luxsan.api.enums;
public class LuxsanApiEnum {
public static final String SUCCESS = "S";
public static final String ERROR = "E";
}
package com.neotel.smfcore.custom.luxsan.api.enums;
public class PalletEnum {
//待入库
public static final int PENDING_STORAGE = 1;
//单据分配
public static final int DOCUMENT_ALLOCATION = 2;
//已挑料
public static final int MATERIAL_PICKED = 3;
//在库库存
public static final int INVENTORY_IN_WAREHOUSE = 4;
//出货已备料
public static final int SHIPMENT_MATERIALS_PREPARED = 5;
//已过账,待上架
public static final int POSTED_AND_PENDING_SHELVING = 6;
//已出货
public static final int SHIPPED = 7;
//已经生成栈板,待过账
public static final int PENDING_POSTING = 8;
//出货取消
public static final int SHIPMENT_CANCELLATION = 9;
}
package com.neotel.smfcore.custom.luxsan.api.enums;
public class QueryGrEnum {
// -1:已撤消,0:新单据, 1:已过账/待上架
public static final int cancel = -1;
public static final int newDoc = 0;
public static final int pending = 1;
public static String getStatusName(int status) {
if (status == cancel) {
return "已撤消";
} else if (status == newDoc) {
return "新单据";
} else if (status == pending) {
return "已过账/待上架";
}
return "";
}
}
package com.neotel.smfcore.custom.luxsan.api.enums;
public class QueryGrStatusEnum {
//status: -1 Cancel:已撤消,0 New:新单据, 1 PostIn:已过账/待上架
// 2 AllocBin:已分配/待上架 3 In:已上架/已结案 4 AllocInv:已分配待下架
// 5 Picked:已下架待过账 6 PostOut:已下架已过账 7 Out:已发料已结案
// 8 AllocLack:已分配但缺料 10 LackBin:未分配无库存 11 AllocAuto:已分配未完成
public static final String cancel = "Cancel";
public static final String newDoc = "New";
public static final String postIn = "PostIn";
public static final String allocBin = "AllocBin";
public static final String in = "In";
public static final String allocInv = "AllocInv";
public static final String picked = "Picked";
public static final String postOut = "PostOut";
public static final String out = "Out";
public static final String allocLack = "AllocLack";
public static final String lackBin = "LackBin";
public static final String allocAuto = "AllocAuto";
public static String getStatusName(String status) {
if (status.equals(cancel)) {
return "已撤消";
} else if (status.equals(newDoc)) {
return "新单据";
} else if (status.equals(postIn)) {
return "已过账/待上架";
} else if (status.equals(allocBin)) {
return "已分配/待上架";
} else if (status.equals(in)) {
return "已上架/已结案";
} else if (status.equals(allocInv)) {
return "已分配待下架";
} else if (status.equals(picked)) {
return "已下架待过账";
} else if (status.equals(postOut)) {
return "已下架已过账";
} else if (status.equals(out)) {
return "已发料已结案";
} else if (status.equals(allocLack)) {
return "已分配但缺料";
} else if (status.equals(lackBin)) {
return "未分配无库存";
} else if (status.equals(allocAuto)) {
return "已分配未完成";
}
return "";
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.common.bean.request;
import lombok.Data;
@Data
public class SendTicketInfo {
// 厂区
private String PLANT_CODE;
// 单据号
private String TICKET_CODE;
// 单据行号
private String TICKET_ITEM;
// 单据类型
private String TICKET_TYPE;
// 异动类型
private String MOVE_TYPE;
// 料号
private String MATERIAL_CODE;
// 数量
private Double QTY;
// 仓管员
private String KEEPER_CODE;
// 来源厂区
private String SRC_PLANT;
// 来源库别
private String SRC_WAREHOUSE;
// 目的厂区
private String DST_PLANT;
// 目的库别
private String DST_WAREHOUSE;
// 过账数量
private Double POST_QTY;
// 过账日期
private String POST_DATE;
// 状态
private String STATUS;
// 分配数量
private Double ALLOCATE_QTY;
// 挑料数量
private Double PICKED_QTY;
// 源批次
private String SRC_BATCH;
// 目的批次
private String DST_BATCH;
}
package com.neotel.smfcore.custom.luxsan.factory_c.common.bean.result;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class WcsResult {
@JsonProperty("MSGTY")
private String MSGTY;
@JsonProperty("MSGTX")
private String MSGTX;
}
package com.neotel.smfcore.custom.luxsan.factory_c.common.controller;
import com.neotel.smfcore.custom.luxsan.api.LuxsanApi;
import com.neotel.smfcore.custom.luxsan.api.bean.request.*;
import com.neotel.smfcore.custom.luxsan.api.bean.result.*;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CommonUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/luxsanApi")
public class LuxsanApiController {
@ApiOperation("3 GR查询")
@RequestMapping("/queryGr")
@AnonymousAccess
public List<QueryGrResult> queryGr(@RequestBody QueryGrRequest request) {
return LuxsanApi.queryGr(request);
}
@ApiOperation("5 GR过账状态查询")
@RequestMapping("/queryGrStatus")
@AnonymousAccess
public List<QueryGrStatusResult> queryGrStatus(@RequestBody QueryGrStatusRequest request) {
return LuxsanApi.queryGrStatus(request);
}
@ApiOperation("6 按GR生成标签码并上架")
@RequestMapping("/newLabelToCell")
@AnonymousAccess
public NewLabelToCellResult newLabelToCell(@RequestBody NewLabelToCellRequest request) {
return LuxsanApi.newLabelToCell(request);
}
@ApiOperation("11 查询挑料单列表")
@RequestMapping("/queryPicking")
@AnonymousAccess
public List<QueryPickingResult> queryPicking(@RequestBody QueryPickingRequest request) {
return LuxsanApi.queryPicking(request);
}
@ApiOperation("12 获取挑料单详情")
@RequestMapping("/getPickingItems")
@AnonymousAccess
public List<GetPickingItemsResult> getPickingItems(@RequestBody GetPickingItemsRequest request) {
return LuxsanApi.getPickingItems(request);
}
@ApiOperation("14 Picking发料")
@RequestMapping("/pickingIssue")
@AnonymousAccess
public void pickingIssue(@RequestBody PickingIssueRequest request) {
LuxsanApi.pickingIssue(request);
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.common.controller;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.custom.luxsan.api.LuxsanApi;
import com.neotel.smfcore.custom.luxsan.factory_c.common.bean.request.SendTicketInfo;
import com.neotel.smfcore.custom.luxsan.factory_c.common.bean.result.WcsResult;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@Slf4j
@RequestMapping("/wcs")
@RestController
public class WcsController {
@ApiOperation("单据推送")
@RequestMapping("/SendTicketInfo")
@AnonymousAccess
public WcsResult sendTicketInfo(@RequestBody List<SendTicketInfo> paramList){
log.info("收到单据推送请求信息为:"+ JSON.toJSONString(paramList));
WcsResult wcsResult = new WcsResult();
wcsResult.setMSGTX("S");
wcsResult.setMSGTY("接收成功");
return wcsResult;
}
@ApiOperation("砍单通知自动仓")
@RequestMapping("/cancelOdn")
@AnonymousAccess
public WcsResult cancelOdn(@RequestBody Map<String, String> paramMap) {
String plantCode = paramMap.get("PLANT_CODE");
String ticketCode = paramMap.get("TICKET_CODE");
log.info("wms砍单通知自动仓,工厂代码为:" + plantCode + ",出货单为:" + ticketCode);
String msgtx = "S";
String msgty = "";
try {
String resultStr = HttpHelper.postJson(LuxsanApi.cancelOdnUrl, paramMap);
log.info("wms砍单通知自动仓,转发结果为:" + resultStr);
} catch (ApiException e) {
e.printStackTrace();
msgtx = "E";
msgty = e.getMessage();
}
WcsResult wcsResult = new WcsResult();
wcsResult.setMSGTX(msgtx);
wcsResult.setMSGTY(msgty);
return wcsResult;
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean;
import lombok.Data;
/**
* 料串需要绑定的GR信息
*/
@Data
public class BindGrInfo {
//料串信息
private String materialStr;
// 厂区
private String plantCode;
// 单据号
private String grCode;
// 单据行
private String grItem;
// 单据日期
private String grDate;
// 料号
private String materialCode;
// 厂商代码
private String vendorCode;
// 厂商名称
private String vendorName;
// 状态
private String status;
// 供应商
private String brand;
// 仓管员
private String keeperCode;
// 库别
private String warehouseCode;
// 过账代码
private String udCode;
// 过账数量
private Double udQty;
// 单据数量
private Double lotQty;
// 过账时间
private String postDate;
// 批次
private String batchCode;
// 原单据
private String originGr;
// 保税标识
private String materialBonded;
// A级物料
private String materialControl;
private int h;
private int w;
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean;
import lombok.Data;
import java.util.Map;
@Data
public class CtuStatus {
//ctu Id
private String ctuId;
//key为抽屉号, value为
private Map<String,String> usageMap;
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class TicketReturn {
private String material;
private String ticketCode;
private String ticketItem;
private String warehouseCode;
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import lombok.Data;
import java.util.Date;
/**
* @author sunke
* @date 2024/5/9 10:42
*/
@Data
public class CtuTask {
private String id;
/**
* 箱子号
*/
private String boxCode;
/**
* 任务类型, 入库=1或出库=2
*/
private int taskType;
/**
* 起点位置
* 料箱送到库位时,可能的值为In1_DischargeHole,In2_DischargeHole,Out1_DischargeHole,Out2_DischargeHole
* 料箱从库位取出时,值为库位号
*/
private String fromLoc;
/**
* 目的地位置
* 料箱送到库位时, 值为库位号
* 料箱从库位取出时,可能的值为In1_FeedingInlet,In2_FeedingInlet,Out1_FeedingInlet,Out2_FeedingInlet,In_FeedingInlet(入料机构入料口,不指定哪个入料机构),Out_FeedingInlet(出料机构入料口,不指定哪个出料机构)
*/
private String toLoc;
private Date createDate;
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class FetchMoveTicketDto {
// 单据行号
private String ticketItem;
// 料号
private String materialCode;
// 源工厂
private String srcPlant;
// 目的工厂
private String dstPlant;
// 来源库别
private String srcWarehouse;
// 目的库别
private String dstWarehouse;
// 来源批次
private String srcBatch;
// 目的批次
private String dstBatch;
// 数量
private int qty;
// 移动类型
private String moveType;
public static FetchMoveTicketDto convertFetchMoveTicketDto(FetchMoveTicketResult result) {
FetchMoveTicketDto dto = new FetchMoveTicketDto();
dto.setTicketItem(result.getTICKET_ITEM());
dto.setMaterialCode(result.getMATERIAL_CODE());
dto.setSrcPlant(result.getSRC_PLANT());
dto.setDstPlant(result.getDST_PLANT());
dto.setSrcWarehouse(result.getSRC_WAREHOUSE());
dto.setDstWarehouse(result.getDST_WAREHOUSE());
dto.setSrcBatch(result.getSRC_BATCH());
dto.setDstBatch(result.getDST_BATCH());
dto.setQty(result.getQTY());
dto.setMoveType(result.getMOVE_TYPE());
return dto;
}
public static List<FetchMoveTicketDto> convertFetchMoveTicketDto(List<FetchMoveTicketResult> resultList) {
List<FetchMoveTicketDto> dtoList = new ArrayList<>();
for (FetchMoveTicketResult result : resultList) {
dtoList.add(convertFetchMoveTicketDto(result));
}
return dtoList;
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import com.google.common.collect.Lists;
import com.neotel.smfcore.custom.luxsan.api.bean.result.GetPickingItemsResult;
import lombok.Data;
import java.util.List;
@Data
public class GetPickingItemsDto {
/**
* 厂区
*/
private String plantCode;
/**
* 行号
*/
private String itemId;
/**
* 挑料单号
*/
private String pickingId;
/**
* 料号
*/
private String materialCode;
/**
* 库别
*/
private String warehouse;
/**
* 需求数量
*/
private int reqQty;
/**
* 需求卷数
*/
private int reqReel;
/**
* 传承数量
*/
private int cpQty;
/**
* 传承卷数
*/
private int cpReel;
/**
* 已发数量
*/
private int issuedQty;
/**
* 已发卷数
*/
private int issuedReel;
/**
* 退回数量
*/
private int retQty;
/**
* 面别
*/
private String face;
/**
* 批次
*/
private String batchCode;
/**
* 制造商
*/
private String brand;
/**
* 创建日期
*/
private String createAt;
/**
* 更新日期
*/
private String updateAt;
private String mo;
private String binCode;
public static GetPickingItemsDto convertGetPickingItemsResultDto(GetPickingItemsResult result){
GetPickingItemsDto getPickingItemsResultDto = new GetPickingItemsDto();
getPickingItemsResultDto.setPlantCode(result.getPLANT_CODE());
getPickingItemsResultDto.setItemId(result.getITEM_ID());
getPickingItemsResultDto.setPickingId(result.getPICKING_ID());
getPickingItemsResultDto.setMaterialCode(result.getMATERIAL_CODE());
getPickingItemsResultDto.setWarehouse(result.getWAREHOUSE());
getPickingItemsResultDto.setReqQty(result.getREQ_QTY());
getPickingItemsResultDto.setReqReel(result.getREQ_REEL());
getPickingItemsResultDto.setCpQty(result.getCP_QTY());
getPickingItemsResultDto.setCpReel(result.getCP_REEL());
getPickingItemsResultDto.setIssuedQty(result.getISSUED_QTY());
getPickingItemsResultDto.setIssuedReel(result.getISSUED_REEL());
getPickingItemsResultDto.setRetQty(result.getRET_QTY());
getPickingItemsResultDto.setFace(result.getFACE());
getPickingItemsResultDto.setBatchCode(result.getBATCH_CODE());
getPickingItemsResultDto.setBrand(result.getBRAND());
getPickingItemsResultDto.setCreateAt(result.getCREATE_AT());
getPickingItemsResultDto.setUpdateAt(result.getUPDATE_AT());
getPickingItemsResultDto.setMo(result.getMO());
getPickingItemsResultDto.setBinCode(result.getBIN_CODE());
return getPickingItemsResultDto;
}
public static List<GetPickingItemsDto> convertGetPickingItemsResultDto(List<GetPickingItemsResult> resultList) {
List<GetPickingItemsDto> getPickingItemsResultDtolist=Lists.newArrayList();
for (GetPickingItemsResult getPickingItemsResult :resultList) {
getPickingItemsResultDtolist.add(convertGetPickingItemsResultDto(getPickingItemsResult));
}
return getPickingItemsResultDtolist;
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import com.neotel.smfcore.custom.luxsan.api.bean.result.QueryGrResult;
import com.neotel.smfcore.custom.luxsan.api.enums.QueryGrEnum;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class QueryGrDto {
/**
* 厂区
*/
private String plantCode;
/**
* 单据号
*/
private String grCode;
/**
* 单据行
*/
private String grItem;
/**
* 单据日期
*/
private String grDate;
/**
* 料号
*/
private String materialCode;
/**
* 厂商代码
*/
private String vendorCode;
/**
* 厂商名称
*/
private String vendorName;
/**
* 制造商
*/
private String brand;
/**
* 仓管员
*/
private String keeperCode;
/**
* 库别
*/
private String warehouseCode;
/**
* 批次
*/
private String batchCode;
/**
* 数量
*/
private int grQty;
/**
* 单据状态
*/
private String postStatus;
/**
* 异动日期
*/
private String postDate;
/**
* 原单据
*/
private String originGr;
/**
* 保税标识
*/
private String materialBonded;
/**
* A级物料
*/
private String materialControl;
public static QueryGrDto convert(QueryGrResult result){
QueryGrDto queryGrResultDto = new QueryGrDto();
queryGrResultDto.setPlantCode(result.getPLANT_CODE());
queryGrResultDto.setGrCode(result.getGR_CODE());
queryGrResultDto.setGrItem(result.getGR_ITEM());
queryGrResultDto.setGrDate(result.getGR_DATE());
queryGrResultDto.setMaterialCode(result.getMATERIAL_CODE());
queryGrResultDto.setVendorCode(result.getVENDOR_CODE());
queryGrResultDto.setVendorName(result.getVENDOR_NAME());
queryGrResultDto.setBrand(result.getBRAND());
queryGrResultDto.setKeeperCode(result.getKEEPER_CODE());
queryGrResultDto.setWarehouseCode(result.getWAREHOUSE_CODE());
queryGrResultDto.setBatchCode(result.getBATCH_CODE());
queryGrResultDto.setGrQty(result.getGR_QTY());
queryGrResultDto.setPostStatus(QueryGrEnum.getStatusName(result.getPOST_STATUS()));
queryGrResultDto.setPostDate(result.getPOST_DATE());
queryGrResultDto.setOriginGr(result.getORIGIN_GR());
queryGrResultDto.setMaterialBonded(result.getMATERIAL_BONDED());
queryGrResultDto.setMaterialControl(result.getMATERIAL_CONTROL());
return queryGrResultDto;
}
public static List<QueryGrDto> convert(List<QueryGrResult> queryGrResultList){
List<QueryGrDto> resultList = new ArrayList<>();
for (QueryGrResult queryGrResult : queryGrResultList) {
resultList.add(convert(queryGrResult));
}
return resultList;
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import com.neotel.smfcore.custom.luxsan.api.bean.result.QueryGrStatusResult;
import com.neotel.smfcore.custom.luxsan.api.enums.QueryGrStatusEnum;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class QueryGrStatusDto {
/**
* 厂区
*/
private String plantCode;
/**
* 单据号
*/
private String grCode;
/**
* 单据行
*/
private String grItem;
/**
* 单据日期
*/
private String grDate;
/**
* 料号
*/
private String materialCode;
/**
* 厂商代码
*/
private String vendorCode;
/**
* 厂商名称
*/
private String vendorName;
/**
* 状态
*/
private String status;
/**
* 供应商
*/
private String brand;
/**
* 仓管员
*/
private String keeperCode;
/**
* 库别
*/
private String warehouseCode;
/**
* 过账代码
*/
private String udCode;
/**
* 过账数量
*/
private String udQty;
/**
* 单据数量
*/
private String lotQty;
/**
* 过账时间
*/
private String postDate;
/**
* 批次
*/
private String batchCode;
/**
* 原单据
*/
private String originGr;
/**
* 保税标识
*/
private String materialBonded;
/**
* A级物料
*/
private String materialControl;
public static QueryGrStatusDto convertQueryGrStatusResultDto(QueryGrStatusResult result){
QueryGrStatusDto queryGrStatusResultDto = new QueryGrStatusDto();
queryGrStatusResultDto.setPlantCode(result.getPLANT_CODE());
queryGrStatusResultDto.setGrCode(result.getGR_CODE());
queryGrStatusResultDto.setGrItem(result.getGR_ITEM());
queryGrStatusResultDto.setGrDate(result.getGR_DATE());
queryGrStatusResultDto.setMaterialCode(result.getMATERIAL_CODE());
queryGrStatusResultDto.setVendorCode(result.getVENDOR_CODE());
queryGrStatusResultDto.setVendorName(result.getVENDOR_NAME());
queryGrStatusResultDto.setStatus(QueryGrStatusEnum.getStatusName(result.getSTATUS()));
queryGrStatusResultDto.setBrand(result.getBRAND());
queryGrStatusResultDto.setKeeperCode(result.getKEEPER_CODE());
queryGrStatusResultDto.setWarehouseCode(result.getWAREHOUSE_CODE());
queryGrStatusResultDto.setUdCode(result.getUD_CODE());
queryGrStatusResultDto.setUdQty(result.getUD_QTY());
queryGrStatusResultDto.setLotQty(result.getLOT_QTY());
queryGrStatusResultDto.setPostDate(result.getPOST_DATE());
queryGrStatusResultDto.setBatchCode(result.getBATCH_CODE());
queryGrStatusResultDto.setOriginGr(result.getORIGIN_GR());
queryGrStatusResultDto.setMaterialBonded(result.getMATERIAL_BONDED());
queryGrStatusResultDto.setMaterialControl(result.getMATERIAL_CONTROL());
return queryGrStatusResultDto;
}
public static List<QueryGrStatusDto> convertQueryGrStatusResultDto(List<QueryGrStatusResult> queryGrStatusResultList){
List<QueryGrStatusDto> resultList = new ArrayList<>();
for (QueryGrStatusResult queryGrStatusResult : queryGrStatusResultList) {
resultList.add(convertQueryGrStatusResultDto(queryGrStatusResult));
}
return resultList;
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import com.neotel.smfcore.custom.luxsan.api.bean.result.QueryPickingResult;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class QueryPickingDto {
// 厂区
private String plantCode;
// 挑料单号
private String pickingId;
// 线别
private String line;
// 状态
private String status;
// 原单号
private String orgPickingId;
// SMT料号
private String smtPn;
// 创建时间
private String createAt;
// 更新时间
private String updateAt;
// 更新工号
private String updateBy;
// 更新姓名
private String updateName;
//出库按钮是否置灰
private boolean checkOut = true;
//工单状态
private int orderStatus;
//当前任务盘数
private int taskReelCount = 0;
//当前任务已完成盘数
private int finishedReelCount = 0;
//工单开始时间
private Date startDate;
//工单结束时间
private Date endDate;
//工单完成时间
private Date finishDate;
public static QueryPickingDto convertQueryPickingResultDto(QueryPickingResult result){
QueryPickingDto queryPickingResultDto = new QueryPickingDto();
queryPickingResultDto.setPlantCode(result.getPLANT_CODE());
queryPickingResultDto.setPickingId(result.getPICKING_ID());
queryPickingResultDto.setLine(result.getLINE());
queryPickingResultDto.setStatus(result.getSTATUS() == 4 ? "关闭" : "其他:可发料");
queryPickingResultDto.setOrgPickingId(result.getORG_PICKING_ID());
queryPickingResultDto.setSmtPn(result.getSMT_PN());
queryPickingResultDto.setCreateAt(result.getCREATE_AT());
queryPickingResultDto.setUpdateAt(result.getUPDATE_AT());
queryPickingResultDto.setUpdateBy(result.getUPDATE_BY());
queryPickingResultDto.setUpdateName(result.getUPDATE_NAME());
queryPickingResultDto.setOrderStatus(result.getOrderStatus());
queryPickingResultDto.setTaskReelCount(result.getTaskReelCount());
queryPickingResultDto.setFinishedReelCount(result.getFinishedReelCount());
queryPickingResultDto.setStartDate(result.getStartDate());
queryPickingResultDto.setEndDate(result.getEndDate());
queryPickingResultDto.setFinishDate(result.getFinishDate());
queryPickingResultDto.setCheckOut(result.isCheckOut());
return queryPickingResultDto;
}
public static List<QueryPickingDto> convertQueryPickingResultDto(List<QueryPickingResult> result) {
List<QueryPickingDto> resultList = new ArrayList<>();
for (QueryPickingResult queryPickingResult : result) {
resultList.add(convertQueryPickingResultDto(queryPickingResult));
}
return resultList;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!