Commit b50db589 hc

fix:条码为零不再报错,条码唯一码适配两个空格和&&,出库单拉箱子需要当前格口中有相应数量的相应物料,物料出库展示详细箱子信息,入料和出料的保存放到接口的最后

1 个父辈 925fbf53
......@@ -63,7 +63,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
@Autowired
private IHumitureManager humitureManager;
@Autowired
protected IBarcodeManager barcodeManager;
......@@ -349,7 +349,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
}
if (barcodeSave.getAmount() <= 0) {
throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}" , new String[]{barcodeSave.getBarcode(), barcodeSave.getAmount() + ""});
// throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}" , new String[]{barcodeSave.getBarcode(), barcodeSave.getAmount() + ""});
}
// if(barcodeSave.getPlateSize() <=0 || barcodeSave.getHeight() <= 0){
......
......@@ -124,7 +124,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
}
if (barcode.getAmount() <= 0) {
throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}" , new String[]{barcode.getBarcode(), barcode.getAmount() + ""});
// throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}" , new String[]{barcode.getBarcode(), barcode.getAmount() + ""});
}
Date expireDate = barcode.getExpireDate();
......@@ -536,4 +536,4 @@ public class NLPShelfHandler extends BaseDeviceHandler{
public DeviceType getDeviceType() {
return DeviceType.NLP;
}
}
\ No newline at end of file
}
......@@ -1359,7 +1359,7 @@ public class LiteOrderCache {
}
public synchronized String checkOutUnclaimed(LiteOrder liteOrder) {
public synchronized String checkOutUnclaimed(LiteOrder liteOrder) throws Exception {
String orderNo = liteOrder.getOrderNo();
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
......@@ -1392,7 +1392,7 @@ public class LiteOrderCache {
int totalOutNum = item.getTotalOutNum();
int assignNum = 0;
int needOutNum = totalOutNum - needNum;
int needOutNum = needNum - totalOutNum;
while (assignNum < needOutNum) {
......@@ -1407,7 +1407,7 @@ public class LiteOrderCache {
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, "");
if (pos == null) {
log.info(item.getPn() + "未找到可用库位,跳过");
continue;
break;
}
//进行标记
......@@ -1416,10 +1416,14 @@ public class LiteOrderCache {
List<Barcode> subCodeList = barcode.getSubCodeList();
for (Barcode subCode : subCodeList) {
if (pn.equals(subCode.getPartNumber())){
// 数量不足
if (subCode.getAmount() < needOutNum) {
throw new Exception("库存不足");
}
subCode.setOut(true);
subCode.setOrderItemId(item.getId());
subCode.setOrderId(cacheOrder.getId());
barcodeManager.save(subCode);
subCode = barcodeManager.save(subCode);
barcode.updateSubCodes(subCode);
barcodeManager.save(barcode);
......@@ -1432,7 +1436,7 @@ public class LiteOrderCache {
if (hasSmpPn){
boxCheckOutNum = boxCheckOutNum + 1;
Storage storage = dataCache.getStorageById(pos.getId());
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setSourceId(cacheOrder.getId());
dataLog.setSourceName(cacheOrder.getOrderNo());
......
......@@ -105,73 +105,32 @@ public class TaskService {
* 条码入库,加入要执行的任务
*/
public synchronized DataLog addPutInTaskToExecute(Storage storage, Barcode barcode, StoragePos storagePos, String boxLoc) throws ValidateException {
log.info("Entering addPutInTaskToExecute method");
DataLog task = new DataLog(storage, barcode, storagePos);
log.info("DataLog task created");
task.setType(OP.PUT_IN);
log.info("Task type set to PUT_IN");
task.setStatus(OP_STATUS.WAIT.name());
log.info("Task status set to WAIT");
task.setLoc(boxLoc);
log.info("Task location set to: " + boxLoc);
if (barcode != null) {
task.setWarehouseCode(barcode.getWarehouseCode());
log.info("Warehouse code set to: " + barcode.getWarehouseCode());
task.setDescribe(barcode.getDescribe());
log.info("Description set to: " + barcode.getDescribe());
task.setBatchInfo(barcode.getBatch());
log.info("Batch info set to: " + barcode.getBatch());
task.setDateCode(barcode.getDateCode());
log.info("Date code set to: " + barcode.getDateCode());
task.setProvider(barcode.getProvider());
log.info("Provider set to: " + barcode.getProvider());
task.setProviderNumber(barcode.getProviderNumber());
log.info("Provider number set to: " + barcode.getProviderNumber());
task.setKeeperCode(barcode.getKeeperCode());
log.info("Keeper code set to: " + barcode.getKeeperCode());
task.setNum(barcode.getAmount());
log.info("Amount set to: " + barcode.getAmount());
barcode.setPutInTime(System.currentTimeMillis());
log.info("Put in time set");
barcode.updateSluggishTime(dataCache.getPNsluggishDay(barcode.getPartNumber()));
log.info("Sluggish time updated");
log.info("任务生成准备完成");
barcodeManager.saveBarcode(barcode);
log.info("Barcode saved");
}
String loginUser = DevicesStatusUtil.getLastOpUsername(storage.getCid());
if (Strings.isNullOrEmpty(loginUser)) {
loginUser = SecurityUtils.getLoginUsername();
}
log.info("Login user set to: " + loginUser);
task.setOperator(loginUser);
log.info("Operator set to: " + loginUser);
task = updateQueueTask(task);
log.info("Queue task updated");
log.info("cid:[" + storage.getCid() + "] barcode:[" + barcode.getBarcode() + "] partNumber:[" + task.getPartNumber() + "]位置[" + storagePos.getPosName() + "]的入库操作成功加入队列");
log.info("Exiting addPutInTaskToExecute method");
return task;
}
......@@ -1016,7 +975,7 @@ public class TaskService {
if (!barcodeSave.getBarcode().startsWith("C07") && !barcodeSave.getBarcode().startsWith("C13") && !barcodeSave.getBarcode().startsWith("C15")) {
if (barcodeSave.getAmount() <= 0) {
throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}", new String[]{barcodeSave.getBarcode(), barcodeSave.getAmount() + ""});
// throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}", new String[]{barcodeSave.getBarcode(), barcodeSave.getAmount() + ""});
}
}
}
......
......@@ -57,7 +57,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
String url = GetReturnInventory + getQueryStr(request);
// 发送GET请求并获取JSON格式的响应字符串
String resJsonStr = HttpHelper.sendGet(url);
log.info("备品仓退库查询接口返回为:" + JSON.toJSONString(resJsonStr));
log.info("备品仓退库查询接口返回为:" + resJsonStr);
// 将响应字符串解析为LizhenApiResult对象
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
// 检查API调用是否成功,并返回结果对象
......@@ -83,10 +83,10 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public static List<GetUnclaimedResult> getUnclaimedDetails(GetUnclaimedRequest request) {
try {
log.info("预约待领取接口请求为:" + request);
log.info("预约待领取接口请求为:" + JSON.toJSONString(request));
String url = GetUnclaimedUrl + getQueryStr(request);
String resJsonStr = HttpHelper.sendGet(url);
log.info("预约待领取接口请求返回:" + JSON.toJSONString(resJsonStr));
log.info("预约待领取接口请求返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
if (lizhenApiResult.getCode() != 200) {
throw new Exception(String.format("预约待领取接口接口请求失败, 错误代码[%d],错误原因[%s]",
......@@ -109,7 +109,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
try {
log.info("备品仓入库接口请求为:" + JSON.toJSONString(request));
String resJsonStr = HttpHelper.postJson(SpareInHourseUrl, request);
log.info("备品仓入库接口返回:" + JSON.toJSONString(resJsonStr));
log.info("备品仓入库接口返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
if (lizhenApiResult.getCode() != 200) {
throw new ApiException(String.format("备品仓入库接口请求失败, 错误代码[%d],错误原因[%s]",
......@@ -128,6 +128,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
String url = GetSpareNoUrl + getQueryStr(request);
log.info("获取入库单号请求为:" + request);
String resJsonStr = HttpHelper.sendGet(url);
// String resJsonStr = HttpHelper.sendGet(url);
log.info("获取入库单号返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
if (lizhenApiResult.getCode() != 200) {
......
......@@ -208,7 +208,6 @@ public class SpAgvDeviceClientController {
String rfid = request.getParameter("barcode");
Barcode barcode = codeResolve.resolveOneValideBarcode("=2x2=" + rfid);
log.info("getTarget"+ JSON.toJSONString(barcode));
if (barcode != null){
barcode.setAmount(1);
barcodeManager.save(barcode);
......@@ -224,27 +223,20 @@ public class SpAgvDeviceClientController {
if (task.getBarcode().equals(barcode.getBarcode())) {
taskData.put("barcode", barcode.getBarcode());
taskData.put("slotCode", task.getPosName());
log.info(barcode+"已有任务");
return ResultBean.newOkResult(taskData);
}
}
}
log.info("getTarget"+ request.getParameter("barcode")+"没有正在执行的任务");
StoragePos pos = SpBoxUtil.locOnePos(barcode);
log.info("getTarget"+ request.getParameter("barcode定位后的信息")+JSON.toJSONString(pos));
if (pos != null){
log.info("开始生成新任务");
Storage storage = dataCache.getStorageById(pos.getStorageId());
log.info("库位信息"+JSON.toJSONString(storage));
taskService.addPutInTaskToExecute(storage,barcode,pos,"");
log.info("生成完成");
taskData.put("barcode", barcode.getBarcode());
taskData.put("slotCode",pos.getPosName());
}
}
log.info(barcode.getBarcode()+"生成ctu的任务信息"+JSON.toJSONString(taskData));
} catch (Exception e) {
e.printStackTrace();
log.info(e.getMessage());
......
......@@ -134,11 +134,10 @@ public class SpBoxCheckOutController {
}
//4.开始放入料箱
//4.开始拿出料箱
binBarcode.setAmount(binBarcode.getAmount()-codeBarcode.getQty());
boxBarcode.updateSubCodes(binBarcode);
barcodeManager.save(boxBarcode);
//5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
......@@ -159,6 +158,7 @@ public class SpBoxCheckOutController {
pos.setBarcode(boxBarcode);
pos.setUsed(true);
storagePosManager.save(pos);
barcodeManager.save(boxBarcode);
return ResultBean.newOkResult("");
}
......@@ -169,9 +169,12 @@ public class SpBoxCheckOutController {
List<LiteOrderItem> orderItemList = liteOrder.getOrderItems();
for (LiteOrderItem item : orderItemList) {
if (item.getId().equals(orderItemId)) {
if (item.getTotalOutNum() - item.getNeedNum() <= 0) {
if (item.getNeedNum() - item.getTotalOutNum() <= 0) {
return liteOrder.getOrderNo() + "预约单中:" + item.getPn() + "已经出库完成,不允许出库";
}
if ((item.getTotalOutNum() + amount) > item.getNeedNum()) {
return liteOrder.getOrderNo() + "预约单中:" + item.getPn() + "超出总需求数量,不允许出库";
}
int totalOutNum = item.getTotalOutNum();
item.setTotalOutNum(totalOutNum + amount);
liteOrderItemManager.save(item);
......
package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
......@@ -209,7 +210,7 @@ public class SpBoxPutInController {
//数量加1
//数量加
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty()+ codeBarcode.getQty());
baseNo.updateDetailList(spareNoDetail);
......@@ -223,30 +224,7 @@ public class SpBoxPutInController {
log.info("入料noDetail.getInQty()"+noDetail.getInQty()+"noDetail.getAlrInQty()"+noDetail.getAlrInQty());
}
if (finish){
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : baseNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
spareInHourseDetail.setInQty(detail.getInQty());
spareInHourseDetail.setPartno(detail.getPartno());
String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
spareInHourseDetail.setLocationCode(location);
// spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
details.add(spareInHourseDetail);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(),baseNo.getNo(),baseNo.getWhCode(), details));
}
}
if (baseNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
}else {
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
}
......@@ -254,11 +232,9 @@ public class SpBoxPutInController {
binBarcode.setPartNumber(codePartNumber);
binBarcode.setAmount(binBarcode.getAmount()+codeBarcode.getQty());
barcodeManager.save(binBarcode);
boxBarcode.updateSubCodes(binBarcode);
barcodeManager.save(boxBarcode);
// if (!finish) {
// return ResultBean.newOkResult("");
......@@ -277,11 +253,38 @@ public class SpBoxPutInController {
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setPosName(binBarcode.getBarcode());
dataLog.setType(OP.PUT_IN);
taskService.updateFinishedTask(dataLog);
pos.setBarcode(boxBarcode);
pos.setUsed(true);
if (finish){
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : baseNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
spareInHourseDetail.setInQty(detail.getInQty());
spareInHourseDetail.setPartno(detail.getPartno());
String location = boxStr;
// String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
spareInHourseDetail.setLocationCode(location);
// spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
details.add(spareInHourseDetail);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(),baseNo.getNo(),baseNo.getWhCode(), details));
}
}
if (baseNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
}else {
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
storagePosManager.save(pos);
barcodeManager.save(binBarcode);
barcodeManager.save(boxBarcode);
taskService.updateFinishedTask(dataLog);
return ResultBean.newOkResult("");
}
......
......@@ -120,7 +120,7 @@ public class SpUnclaimedController {
@ApiOperation("选中出库单")
@RequestMapping("/checkOrderNo")
@AnonymousAccess
public ResultBean checkOrderNo(String orderNoStr) {
public ResultBean checkOrderNo(String orderNoStr) throws Exception {
//判断有没有正在执行的任务单
String no = liteOrderCache.hasExecutingOrder();
if (StringUtils.isNotEmpty(no)) {
......
......@@ -10,12 +10,15 @@ public class CodeUtil {
public static CodeBarcode getCodeBarcode(String codeStr){
if (!codeStr.contains(" ")){
if (!(codeStr.contains(" ") || codeStr.contains("&&"))){
return null;
}
try {
String[] split = codeStr.split(" ");
if (split.length != 2) {
split = codeStr.split("&&");
}
String partNumber = split[0];
int qty = Integer.parseInt(split[1]);
......@@ -32,5 +35,9 @@ public class CodeUtil {
return null;
}
public static void main(String[] args) {
CodeBarcode codeBarcode = getCodeBarcode("sss&&1");
System.out.println(codeBarcode);
}
}
......@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -83,23 +84,34 @@ public class SpBoxUtil {
if (type == 1) {
BaseNo no = spareNoCache.getExecutIngSpareNo();
if (ObjectUtil.isNull(no)) {
return null;
}
spareNoDetails = no.getDetailList();
if (spareNoDetails == null) {
no = returnNoCache.getExecutingOrderNo();
spareNoDetails = no.getDetailList();
}
spareNoDetails = no.getDetailList();
} else if (type == 2) {
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;
LiteOrder executingOrder = liteOrderCache.getExecutingOrder();
if (executingOrder == null) {
return spareNoDetails;
}
List<LiteOrderItem> orderItems = executingOrder.getOrderItems();
spareNoDetails = orderItems.stream().map(new Function<LiteOrderItem, SpareNoDetail>() {
@Override
public SpareNoDetail apply(LiteOrderItem liteOrderItem) {
SpareNoDetail detail = new SpareNoDetail();
detail.setAlrInQty(liteOrderItem.getTotalOutNum());
detail.setInQty(liteOrderItem.getNeedNum());
detail.setPartno(liteOrderItem.getPn());
return detail;
}
}).collect(Collectors.toList());
// Unclaimed orderNo = orderNoCache.getExecutingOrderNo();
// spareNoDetails = orderNo.getDetailList().stream().map(unclaimedDetail -> {
// SpareNoDetail detail = new SpareNoDetail();
// detail.setAlrInQty(unclaimedDetail.getAlrInQty());
// detail.setInQty(unclaimedDetail.getApplyQty());
// detail.setPartno(unclaimedDetail.getPartno());
// detail.setPartname(unclaimedDetail.getPartname());
// return detail;
// }).collect(Collectors.toList());
}
return spareNoDetails;
}
......@@ -140,6 +152,7 @@ public class SpBoxUtil {
pars.add(par);
}
if (boxStr.startsWith("CS")) {
if ("A".equals(suffix)) {
resultList.add(pars.get(1));
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!