Commit 19826964 LN

出库测试修改

1 个父辈 96119e73
......@@ -112,7 +112,7 @@ public class DataInitManager {
Message message=Message.newMsg(MessageType.INFO ,"server", "", "", "smfcore.messages.serverStart","服务器启动",null,"");
messageManager.save(message);
dataCache.getAllInventory(null,"");
dataCache.getAllInventory(null,"" );
} catch (Exception exception) {
log.error("初始化环境出错..." + exception.toString(),exception);
......
......@@ -203,6 +203,31 @@ public class Barcode extends BasePo implements Serializable {
extraDataMap.put(key, value);
}
}
public int getNeedOutNum(){
String v= getExtraData("needOutNum");
try{
return Integer.parseInt(v);
}catch (Exception exception){
}
return 0;
}
public int getNeedInNum(){
String v= getExtraData("needInNum");
try{
return Integer.parseInt(v);
}catch (Exception exception){
}
return 0;
}
public void updateNeedInNum(int num){
updateExtraData("needInNum",num+"");
}
public void updateNeedOutNum(int num){
updateExtraData("needOutNum",num+"");
}
private int subListNum=0;
......
......@@ -449,11 +449,14 @@ public class DataCache {
updateStorageInventory(cid,partNumberInventory);
}
}
public Map<String,InventoryItem> getAllInventory(List<String> storageIds,String blurry ) {
return getAllInventory(storageIds,blurry ,"","" );
}
/**
* 获取库存信息,key 为 PN
*/
public Map<String,InventoryItem> getAllInventory(List<String> storageIds,String blurry) {
public Map<String,InventoryItem> getAllInventory(List<String> storageIds,String blurry,String pn,String wCode) {
Map<String, Storage> allStorages = getAllStorage();
List<Storage> storages = Lists.newArrayList();
for (Storage storage : allStorages.values()) {
......@@ -466,11 +469,27 @@ public class DataCache {
Map<String, InventoryItem> map = getInventory(storages);
Map<String, InventoryItem> resultMap = new HashMap<>();
for (InventoryItem item : map.values()) {
boolean add=true;
if (ObjectUtil.isNotEmpty(blurry)) {
if (item.getPartNumber().contains(blurry)) {
resultMap.put(item.getPartNumber(), item);
if (item.getPartNumber().contains(blurry)||item.getWareHouseCode().contains(blurry)||item.getPartname().contains(blurry)) {
}else{
add=false;
}
} else {
}
if(ObjectUtil.isNotEmpty(pn)){
if(!item.getPartNumber().contains(pn)){
add=false;
}
}
if(ObjectUtil.isNotEmpty(wCode)){
if(!item.getWareHouseCode().contains(wCode)){
add=false;
}
}
if(add){
resultMap.put(item.getPartNumber(), item);
}
}
......@@ -502,6 +521,10 @@ public class DataCache {
pnInventoryItem.setLockCount(pnInventoryItem.getLockCount() + storageInventoryItem.getLockCount());
pnInventoryItem.setStockReel(pnInventoryItem.getStockReel() + storageInventoryItem.getStockReel());
pnInventoryItem.setLockReel(pnInventoryItem.getLockReel() + storageInventoryItem.getLockReel());
pnInventoryItem.setWareHouseCode(storageInventoryItem.getWareHouseCode());
pnInventoryItem.setPartname(storageInventoryItem.getPartname());
pnInventoryItem.setGekouName(storageInventoryItem.getGekouName());
pnInventoryItem.setPosName(storageInventoryItem.getPosName());
resultMap.put(partNumber,pnInventoryItem);
}
......@@ -541,20 +564,6 @@ public class DataCache {
storageInventoryMap.remove(key );
}
}
//未完成的 Task 也需要锁定
// List<InventoryItem> feederLockInventories = dataLogDao.getStorageLockCount(storage.getId());
// for (InventoryItem feederInventoryItem : feederLockInventories){
// String partNumber = feederInventoryItem.getPartNumber();
// if(!Strings.isNullOrEmpty(partNumber)){
// InventoryItem inventoryItem = storageInventoryMap.get(partNumber);
// if(inventoryItem != null){
// int lockReel = inventoryItem.getLockReel() + feederInventoryItem.getLockReel();
// inventoryItem.setLockReel(lockReel);
// storageInventoryMap.put(partNumber, inventoryItem);
// }
// }
// }
log.info("初始化料仓["+cid+"]的库存信息["+storageInventoryMap.size()+"]条");
inventoryMap.put(cid, storageInventoryMap);
......
......@@ -255,12 +255,9 @@ public class LiteOrderCache {
} else if (liteOrder.isOutBom()) {
liteOrder.setStatus(LITEORDER_STATUS.BOM_FINISHED);
} else if (liteOrder.isOutTails()) {
//if (!"out".equals(liteOrder.getLogo())) {
//liteOrder.setClosed(true);
//} else {
liteOrder.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
//}
//liteOrder.setClosed(true);
liteOrder.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder.setClosed(true);
} /*else if (liteOrder.isTaskFinished()) {
liteOrder.setClosed(true);
}*/
......@@ -1153,7 +1150,7 @@ public class LiteOrderCache {
//}
}
//得到库存信息
Map<String, InventoryItem> inventoryMap = dataCache.getAllInventory(storageIds, null);
Map<String, InventoryItem> inventoryMap = dataCache.getAllInventory(storageIds, null,null,null);
if (inventoryMap != null) {
for (LiteOrder liteOrder : liteOrders) {
//状态是未关闭的,未出库的
......@@ -1360,17 +1357,17 @@ public class LiteOrderCache {
LiteOrder cacheOrder = liteOrderManager.findByOrderNo(orderNo);
if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息");
return "预约单"+orderNo+"不存在";
return "预约单不存在";
}
if (cacheOrder.isClosed()) {
log.info("工单:" + orderNo + "已经关闭");
return "预约单"+orderNo+"已关闭";
return "预约单已关闭";
}
if (cacheOrder.isOutTails()) {
log.info("工单:" + orderNo + "正在执行中");
return "预约单"+orderNo+"正在执行中";
return "预约单正在执行中";
}
log.info("开始执行预约单:" + liteOrder.getOrderNo());
......@@ -1399,7 +1396,7 @@ public class LiteOrderCache {
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, "");
if (pos == null) {
log.info("预约单 " + liteOrder.getOrderNo() + " 的物料 " + item.getPn() + "未找到");
return "预约单" + liteOrder.getOrderNo() + " 的物料 " + item.getPn() + "未找到";
return "物料 " + item.getPn() + "未找到";
}
cacheOrder.setTaskReelCount(item.getNeedNum());
......@@ -1411,7 +1408,7 @@ public class LiteOrderCache {
if (pn.equals(subCode.getPartNumber())) {
// 数量不足
if (subCode.getAmount() < needOutNum) {
return "预约单" + liteOrder.getOrderNo() + " 的物料 " + item.getPn() + "数量" + subCode.getAmount() + "不足";
return "物料 " + item.getPn() + "数量" + subCode.getAmount() + "不足";
}
assignNum = assignNum + subCode.getAmount();
......@@ -1456,8 +1453,9 @@ public class LiteOrderCache {
boolean hasSmpPn = false;
Barcode barcode = pos.getBarcode();
List<Barcode> subCodeList = barcode.getSubCodeList();
for (Barcode subCode : subCodeList) {
if (pn.equals(subCode.getPartNumber())) {
Barcode subCode=barcode.getSubCode(pn);
if (subCode!=null) {
// 数量不足
if (subCode.getAmount() < needOutNum) {
throw new Exception("库存不足");
......@@ -1465,21 +1463,20 @@ public class LiteOrderCache {
subCode.setOut(true);
subCode.setOrderItemId(item.getId());
subCode.setOrderId(cacheOrder.getId());
subCode.updateExtraData("needOutNum", needOutNum + "");
if(ObjectUtil.isNotEmpty(item.getPartname())){
subCode.setPn(item.getPosName());
subCode.updateNeedOutNum(needOutNum);
if (ObjectUtil.isNotEmpty(item.getPartname())) {
subCode.setPn(item.getPartname());
}
subCode = barcodeManager.save(subCode);
barcode.updateSubCodes(subCode);
barcodeManager.save(barcode);
log.info("预约单 " + liteOrder.getOrderNo() + " 的 " + item.getPn() + "找到格口:"+subCode.getBarcode());
pos.setBarcode(barcode);
storagePosManager.save(pos);
log.info("预约单 " + liteOrder.getOrderNo() + " 的 " + item.getPn() + "找到格口:" + subCode.getBarcode() + ",设置需出库数量:" + needOutNum);
assignNum = assignNum + subCode.getAmount();
hasSmpPn = true;
break;
}
}
if (hasSmpPn) {
......
......@@ -203,7 +203,7 @@ public class ReportController {
@Autowired
private InventoryItemMapper inventoryItemMapper;
private List<InventoryItemDto> getInventory(InventoryQueryCriteria criteria, Pageable pageable) {
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(criteria.getStorageIdList(), criteria.getBlurry());
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(criteria.getStorageIdList(), criteria.getBlurry(),criteria.getPartNumber(),criteria.getWarehouseCode());
List<InventoryItem> list = Lists.newArrayList(inventoryItemMap.values());
List<InventoryItemDto> dtoList = inventoryItemMapper.toDto(list);
List<InventoryItemDto> resultList = new ArrayList<>();
......
......@@ -13,6 +13,10 @@ public class InventoryQueryCriteria {
@QueryCondition(isDBId =true)
private String storageId;
private String warehouseCode;
private String partNumber;
@QueryCondition(type = QueryCondition.Type.IN, propName = "storageId")
private List<String> storageIdList;
}
......@@ -133,7 +133,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
//获取agv类型的库存
Map<String,InventoryItem> agvInventory = getAgvBoxInventory(storageIds);
Map<String,InventoryItem> agvInventory = getAgvBoxInventory( inventoryMap,storageIds);
if (agvInventory != null && agvInventory.size() >0){
inventoryMap.putAll(agvInventory);
}
......@@ -152,7 +152,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
* @param storageIds
* @return
*/
private Map<String, InventoryItem> getAgvBoxInventory(String...storageIds) {
private Map<String, InventoryItem> getAgvBoxInventory(Map<String, InventoryItem> inventoryMap,String...storageIds) {
Map<String, InventoryItem> resultMap = new HashMap<>();
for (String storageId : storageIds) {
/*Storage storage = dataCache.getStorageById(storageId);
......@@ -166,7 +166,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
List<Barcode> subCodeList = pos.getBarcode().getSubCodeList();
if (subCodeList != null && !subCodeList.isEmpty()) {
for (Barcode barcode : subCodeList) {
InventoryItem item = resultMap.get(barcode.getPartNumber());
InventoryItem item = inventoryMap.get(barcode.getPartNumber());
if (item != null) {
item.setStockReel(item.getStockReel() + 1);
item.setStockCount(item.getStockCount() + barcode.getAmount());
......
......@@ -90,7 +90,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public static List<GetUnclaimedResult> getUnclaimedDetails(GetUnclaimedRequest request) {
if(Debug) {
String msg = "{\"msg\":\"操作成功\",\"code\":200,\"data\":[{\"searchValue\":null,\"createBy\":null,\"createTime\":\"2024-08-02 08:40:43\",\"updateBy\":null,\"updateTime\":\"2024-08-02 08:41:26\",\"remark\":null,\"params\":{},\"id\":null,\"flag\":null,\"status\":\"1\",\"orderNo\":\"SA2024080200223\",\"applicantNo\":null,\"applicantName\":null,\"applicantTime\":null,\"project\":null,\"process\":null,\"functionDept\":\"MLB MFG\",\"section\":null,\"line\":null,\"floor\":null,\"delFlag\":null,\"whCode\":null,\"whCodes\":null,\"provideNo\":null,\"receiveNo\":null,\"estimatedTime\":null,\"deptId\":220,\"spareApplyDetail\":[{\"searchValue\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"remark\":null,\"params\":{},\"id\":null,\"orderNo\":\"SA2024080200223\",\"deptId\":220,\"partNo\":\"1950130060061A\",\"partName\":\"DEK300mm阶梯刮刀片刀刃0.15刀身0.3|DEK\",\"groupCode\":null,\"applyQty\":5,\"giveOutQty\":null,\"expectQty\":5,\"delFlag\":null,\"spareApplyDetail\":null}]}]}\n";
msg="{\"msg\":\"操作成功\",\"code\":200,\"data\":[{\"searchValue\":null,\"createBy\":null,\"createTime\":\"2024-08-02 10:25:23\",\"updateBy\":null,\"updateTime\":\"2024-08-02 10:25:50\",\"remark\":null,\"params\":{},\"id\":null,\"flag\":null,\"status\":\"1\",\"orderNo\":\"SA2024080200381\",\"applicantNo\":null,\"applicantName\":null,\"applicantTime\":null,\"project\":null,\"process\":null,\"functionDept\":\"MLB MFG\",\"section\":null,\"line\":null,\"floor\":null,\"delFlag\":null,\"whCode\":null,\"whCodes\":null,\"provideNo\":null,\"receiveNo\":null,\"estimatedTime\":null,\"deptId\":220,\"spareApplyDetail\":[{\"searchValue\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"remark\":null,\"params\":{},\"id\":null,\"orderNo\":\"SA2024080200381\",\"deptId\":220,\"partNo\":\"A01-008-001883-9F\",\"partName\":\"CABLE,38.0FT MECH. GRADE 1(传动钢丝);Spec:72\",\"groupCode\":null,\"applyQty\":3,\"giveOutQty\":null,\"expectQty\":3,\"delFlag\":null,\"spareApplyDetail\":null},{\"searchValue\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"remark\":null,\"params\":{},\"id\":null,\"orderNo\":\"SA2024080200381\",\"deptId\":220,\"partNo\":\"F05-008-011901-9F\",\"partName\":\"Asymtek7213248传动轮\",\"groupCode\":null,\"applyQty\":3,\"giveOutQty\":null,\"expectQty\":3,\"delFlag\":null,\"spareApplyDetail\":null}]}]}\n";
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(msg, LuxsanSpApiResult.class);
List<GetUnclaimedResult> testO = JSONObject.parseArray(lizhenApiResult.getData(), GetUnclaimedResult.class);
if (testO != null && !testO.isEmpty()) {
......
......@@ -14,4 +14,6 @@ public class SpareNoDetail {
private int alrInQty = 0; //已经放入数量
private String location="";
}
......@@ -2,14 +2,18 @@ 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.exception.ValidateException;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
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.bean.request.GetSpareNoRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
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.ReturnNoCache;
......@@ -101,8 +105,8 @@ public class SpSpareNoController {
return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息");
}
String exeResult = spareNoCache.ExecuteSpare(spareNo);
if(ObjectUtil.isNotEmpty(exeResult)){
return ResultBean.newErrorResult(-1, "", "执行退库单失败:"+exeResult);
if (ObjectUtil.isNotEmpty(exeResult)) {
return ResultBean.newErrorResult(-1, "", "执行退库单失败:" + exeResult);
}
// spareNo.setSpareStatus(SpareNostatus.EXECUTING_STATUS);
// spareNoCache.addToMap(spareNo);
......@@ -131,5 +135,40 @@ public class SpSpareNoController {
return ResultBean.newOkResult("");
}
@ApiOperation("重发入库单")
@RequestMapping("/reSend")
@AnonymousAccess
public ResultBean resend(String spareNoStr) {
try {
log.info("入库单:"+spareNoStr+",点击重发");
SpareNo spareNo = spareNoCache.getBySpareNo(spareNoStr);
if (spareNo == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息");
}
if (!spareNo.getStatus().equals(SpareNostatus.CLOSE_STATUS + "")) {
return ResultBean.newErrorResult(-1, "", spareNoStr + "入库单未结束,不能重发");
}
if(spareNo.isConfirmed()){
return ResultBean.newErrorResult(-1, "", spareNoStr + "入库单已确认,不需要重发");
}
List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : spareNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
spareInHourseDetail.setInQty(detail.getInQty());
spareInHourseDetail.setPartno(detail.getPartno());
spareInHourseDetail.setLocationCode(detail.getLocation());
details.add(spareInHourseDetail);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(spareNo.getDeptId(), spareNo.getNo(), spareNo.getWhCode(), details));
spareNo.setConfirmed(true);
spareNoManager.save(spareNo);
spareNoCache.addToMap(spareNo);
return ResultBean.newOkResult("重发成功");
} catch (ValidateException ex) {
return ResultBean.newErrorResult(-1, "", "重发失败:" + ex.getMessage());
}
}
}
......@@ -164,6 +164,9 @@ public class SpUnclaimedController {
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
} else if (liteOrder.isClosed()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}else if(liteOrder.isTaskFinished()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
unclaimedDetails.add(unclaimedDetail);
}
......@@ -223,6 +226,7 @@ public class SpUnclaimedController {
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单已经关闭");
}
log.info("放弃出库单:"+orderNoStr);
liteOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrder.setClosed(true);
liteOrderCache.addOrderToMap(liteOrder);
......
......@@ -108,9 +108,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
if (ObjectUtil.isEmpty(gekouBarcode.getPartNumber()) || gekouBarcode.getPartNumber().equals(boxBarcode.getPartNumber())) {
// 判断物料是否在其他格口
String currP= barcodeManager.getPNCurrGeKou( codeBarcode.getPartNumber());
if (ObjectUtil.isNotEmpty(currP)&&(!currP.equals(gekouCodeStr))) {
throw new Exception(codeBarcode.getPartNumber() + "已在"+currP+"中");
String currP = barcodeManager.getPNCurrGeKou(codeBarcode.getPartNumber());
if (ObjectUtil.isNotEmpty(currP) && (!currP.equals(gekouCodeStr))) {
throw new Exception(codeBarcode.getPartNumber() + "已在" + currP + "中");
}
//是新格口物料
......@@ -140,7 +140,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
List<Barcode> subCodeList = boxBarcode.getSubCodeList();
if (ObjectUtil.isEmpty(subCodeList)) {
}else {
} else {
for (Barcode barcode : subCodeList) {
String inNum = barcode.getExtraData("needInNum");
if (ObjectUtil.isEmpty(inNum) || inNum.equals("0")) {
......@@ -156,7 +156,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
}
}
boolean finish = true;
// boolean finish = true;
//判断当前入库的是否和入库单一样
if (isOrderPutIn) {
List<SpareNoDetail> detailList = baseNo.getDetailList();
......@@ -185,15 +185,20 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
// 开始放入料箱
gekouBarcode.setPartNumber(codeBarcode.getPartNumber());
gekouBarcode.setAmount(gekouBarcode.getAmount() + codeBarcode.getQty());
gekouBarcode.updateExtraData("needInNum", "0");
int neeIn = gekouBarcode.getNeedInNum();
neeIn = neeIn - codeBarcode.getQty();
if (neeIn < 0) {
neeIn = 0;
}
gekouBarcode.updateNeedInNum(neeIn);
boxBarcode.updateSubCodes(gekouBarcode);
boxBarcode.setStatus(BARCODE_STATUS.OUT_NORMAL);
if (pos == null){
throw new Exception(boxStr+"未找到可用的库位");
if (pos == null) {
throw new Exception(boxStr + "未找到可用的库位");
}
log.info("reelToBox 入库成功 : boxStr=" + boxStr + ",codeStr=" + rellCodeStr + ",binCodeStr=" + gekouCodeStr + ",数量:" + codeBarcode.getQty()+",当前数量:"+gekouBarcode.getAmount());
log.info("reelToBox 入库成功 : boxStr=" + boxStr + ",codeStr=" + rellCodeStr + ",binCodeStr=" + gekouCodeStr + ",数量:" + codeBarcode.getQty() + ",当前数量:" + gekouBarcode.getAmount());
//6.生成入库任务
DataLog dataLog = new DataLog();
dataLog.setBarcode(rellCodeStr);
......@@ -209,90 +214,22 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
pos.setUsed(true);
storagePosManager.save(pos);
barcodeManager.save(gekouBarcode);
barcodeManager.save(boxBarcode);
//更新库存
Storage storage=dataCache.getStorageById(pos.getStorageId());
dataCache.updateInventoryAmount(storage.getCid(),codeBarcode.getPartNumber(), codeBarcode.getQty());
Map<String,String> res=new HashMap<>();
res.put("PN",codeBarcode.getPartNumber());
res.put("InPutNum",codeBarcode.getQty()+"");
res.put("CurrNum",gekouBarcode.getAmount()+"");
res.put("Code",gekouBarcode.getBarcode());
Storage storage = dataCache.getStorageById(pos.getStorageId());
dataCache.updateInventoryAmount(storage.getCid(), codeBarcode.getPartNumber(), codeBarcode.getQty());
Map<String, String> res = new HashMap<>();
res.put("PN", codeBarcode.getPartNumber());
res.put("InPutNum", codeBarcode.getQty() + "");
res.put("CurrNum", gekouBarcode.getAmount() + "");
res.put("Code", gekouBarcode.getBarcode());
taskService.updateFinishedTask(dataLog);
if (isOrderPutIn) {
if (baseNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
} else {
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
}
if(isOrderPutIn){
List<SpareNoDetail> detailList = baseNo.getDetailList();
SpareNoDetail spareNoDetail = null;
for (SpareNoDetail detail : detailList) {
//如果相同的话,判断数量是否大于需求数量
if (detail.getPartno().equals(codeBarcode.getPartNumber())) {
spareNoDetail = detail;
break;
}
}
if(spareNoDetail!=null) {
//数量加
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty() + codeBarcode.getQty());
baseNo.updateDetailList(spareNoDetail);
log.info("开始判断是否完成入库单");
for (SpareNoDetail noDetail : baseNo.getDetailList()) {
if (noDetail.getInQty() > noDetail.getAlrInQty()) {
log.info("入库未完成");
finish = false;
break;
}
log.info("入料noDetail.getInQty()" + noDetail.getInQty() + "noDetail.getAlrInQty()" + noDetail.getAlrInQty());
}
// 最后刷新不能回滚的
if (finish ) {
try {
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId());
dataLog.setSourceName(spareNo.getSpareNo());
((SpareNo) baseNo).setStatus(SpareNostatus.CLOSE_STATUS+"");
((SpareNo) baseNo).setConfirmed(false);
log.info("入库单已完成,关闭入库单" + baseNo.getNo() );
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));
spareNo.setConfirmed(true);
log.info("入库单通知API成功,更改状态为已确认:" + baseNo.getNo() );
}
} catch (Exception e) {
log.info("调用入库接口失败,失败原因" + e.getMessage());
spareNo.setConfirmed(false);
throw new Exception(e.getMessage());
} finally {
spareNoManager.save(spareNo);
}
}
}
if (isOrderPutIn) {
spareNoCache.reelPutEnd(baseNo, codeBarcode.getPartNumber(), codeBarcode.getQty(), pos.getPosName());
}
return res;
......@@ -307,9 +244,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
public void addBackupObj(Object o) {
if (o instanceof Barcode) {
backupBarcodes.add(DeepCopyUtil.deepCopy((Barcode) o));
}else if (o instanceof BaseNo) {
} else if (o instanceof BaseNo) {
backupSpareNo = DeepCopyUtil.deepCopy((SpareNo) o);
}else if (o instanceof StoragePos) {
} else if (o instanceof StoragePos) {
backupPos = DeepCopyUtil.deepCopy((StoragePos) o);
}
}
......@@ -321,27 +258,27 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
if (ObjectUtil.isNotEmpty(backupBarcodes)) {
for (Barcode backupBarcode : backupBarcodes) {
barcodeManager.save(backupBarcode);
log.info(String.format("条码[%s]回滚为"+backupBarcode, backupBarcode.getBarcode()));
log.info(String.format("条码[%s]回滚为" + backupBarcode, backupBarcode.getBarcode()));
}
}
if (ObjectUtil.isNotNull(backupSpareNo)) {
if (backupSpareNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap((SpareNo) backupSpareNo);
spareNoManager.save((SpareNo) backupSpareNo);
log.info(String.format("入库单[%s]回滚为"+backupSpareNo, backupSpareNo.getNo()));
log.info(String.format("入库单[%s]回滚为" + backupSpareNo, backupSpareNo.getNo()));
} else {
returnNoCache.addToMap((ReturnInventoryNo) backupSpareNo);
returnNoManager.save((ReturnInventoryNo) backupSpareNo);
log.info(String.format("退库单[%s]回滚为"+backupSpareNo, backupSpareNo.getNo()));
log.info(String.format("退库单[%s]回滚为" + backupSpareNo, backupSpareNo.getNo()));
}
}
if (ObjectUtil.isNotNull(backupPos)) {
storagePosManager.save(backupPos);
log.info(String.format("库位[%s]回滚为"+backupPos, backupPos.getPosName()));
log.info(String.format("库位[%s]回滚为" + backupPos, backupPos.getPosName()));
}
}catch (Exception e) {
throw new Exception("回滚失败,失败原因:"+e.getMessage());
}finally {
} catch (Exception e) {
throw new Exception("回滚失败,失败原因:" + e.getMessage());
} finally {
backupBarcodes = new ArrayList<>();
backupPos = null;
backupSpareNo = null;
......
......@@ -125,27 +125,32 @@ public class SpBoxUtil {
int max=barcode.getMaxSubNum();
for (int i = 1; i <= max; i++) {
List<Object> par = new ArrayList<>();
String materialBarcode = boxStr + "-0" + i;
String partNumber = getPartNumber(subCodeList, materialBarcode);
String gekouCode = boxStr + "-" + i;
// String partNumber = getPartNumber(subCodeList, materialBarcode);
Barcode gekou=barcode.getSubCodeByGeKou(gekouCode);
SpareNoDetail activeDetail = null;
if (ObjectUtil.isNotNull(activeDetails)) {
List<SpareNoDetail> spareNoDetails = activeDetails.stream()
.filter(spareNoDetail -> spareNoDetail.getPartno().equals(partNumber))
.limit(1)
.collect(Collectors.toList());
if (!spareNoDetails.isEmpty()) {
activeDetail = spareNoDetails.get(0);
if(gekou!=null){
if (ObjectUtil.isNotNull(activeDetails)) {
List<SpareNoDetail> spareNoDetails = activeDetails.stream()
.filter(spareNoDetail -> spareNoDetail.getPartno().equals(gekou.getPartNumber()))
.limit(1)
.collect(Collectors.toList());
if (!spareNoDetails.isEmpty()) {
activeDetail = spareNoDetails.get(0);
}
}
}
//待领取
if (ObjectUtil.isNull(activeDetail)) {
par.add(0);
}else {
par.add(activeDetail.getInQty()); // 该pn总共需要的数量
}
par.add(getAmount(subCodeList, materialBarcode)); //数量
par.add(gekou==null?0:gekou.getAmount()); //数量
par.add(i); //隔口号
par.add(partNumber); //料号
par.add(gekou==null?"":gekou.getPartNumber()); //料号
if (ObjectUtil.isNull(activeDetail)) {
par.add(0);
}else {
......
......@@ -13,8 +13,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.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.BaseNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
......@@ -203,7 +206,7 @@ public class SpareNoCache {
boxBarcode.getSubCodeList()) {
if (subBarcode.getPartNumber().equals(pn)) {
subBarcode.setOut(false);
subBarcode.updateExtraData("needInNum", detail.getInQty() + "");
subBarcode.updateNeedInNum(detail.getInQty() );
log.info("入库单" + orderNo + ", Pn=" + pn + ",查找到库位号=" + pos.getPosName() + ",料箱号=" + boxBarcode.getBarcode() + ",格口号=" + subBarcode.getBarcode() + ",需要入库数量=" + detail.getInQty());
}
}
......@@ -227,7 +230,7 @@ public class SpareNoCache {
newPn.setAmount(0);
newPn.setInitialAmount(0);
newPn.setOut(false);
newPn.updateExtraData("needInNum", detail.getInQty() + "");
newPn.updateNeedInNum( detail.getInQty() );
//查找准备出库的料箱中是否有空格口
StoragePos emptyPos = null;
for (StoragePos exPos :
......@@ -334,4 +337,83 @@ public class SpareNoCache {
}
public String reelPutEnd(BaseNo baseNo ,String pn,int qty,String posName) {
String msg = "";
if (baseNo == null) {
return msg;
}
List<SpareNoDetail> detailList = baseNo.getDetailList();
SpareNoDetail spareNoDetail = null;
for (SpareNoDetail detail : detailList) {
//如果相同的话,判断数量是否大于需求数量
if (detail.getPartno().equals(pn)) {
spareNoDetail = detail;
break;
}
}
if (spareNoDetail == null) {
return "";
}
boolean finish = true;
//数量加
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty() + qty);
spareNoDetail.setLocation(posName);
baseNo.updateDetailList(spareNoDetail);
log.info("开始判断是否完成入库单");
for (SpareNoDetail noDetail : baseNo.getDetailList()) {
if (noDetail.getInQty() > noDetail.getAlrInQty()) {
log.info("入库未完成");
finish = false;
break;
}
log.info("入料noDetail.getInQty()" + noDetail.getInQty() + "noDetail.getAlrInQty()" + noDetail.getAlrInQty());
}
// 最后刷新不能回滚的
try {
if (finish) {
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
// dataLog.setSourceId(baseNo.getId());
// dataLog.setSourceName(spareNo.getSpareNo());
((SpareNo) baseNo).setStatus(SpareNostatus.CLOSE_STATUS + "");
((SpareNo) baseNo).setConfirmed(false);
log.info("入库单已完成,关闭入库单" + baseNo.getNo());
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(detail.getLocation());
details.add(spareInHourseDetail);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(), baseNo.getNo(), baseNo.getWhCode(), details));
((SpareNo) baseNo).setConfirmed(true);
log.info("入库单通知API成功,更改状态为已确认:" + baseNo.getNo());
}
}
} catch (Exception e) {
log.info("调用入库接口失败,失败原因" + e.getMessage());
msg = e.getMessage();
throw e;
} finally {
if (baseNo.getClass().equals(SpareNo.class)) {
addToMap((SpareNo) baseNo);
spareNoManager.save((SpareNo) baseNo);
} else {
returnNoCache.addToMap((ReturnInventoryNo) baseNo);
returnNoManager.save((ReturnInventoryNo) baseNo);
}
}
return msg;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!