Commit 935038e2 LN

1.工单出库是否截料条件修改:当前盘数<最小库存。

2.安全库存逻辑修改。
3.UID出库增加供应商,批次,数量区间。
4.增加料架扫码功能。
1 个父辈 f7186bf1
......@@ -123,11 +123,11 @@ public class Component extends BasePo implements Serializable {
private boolean sizeConfirmed = false;
/**
* 最大库存
* 最大库存 盘数
*/
private int maxStoreNum = 999999999;
/**
* 最小库存
* 最小库存 盘数
*/
private int minStoreNum = 0;
/**
......
......@@ -18,6 +18,8 @@ import com.neotel.smfcore.core.hik.bean.ShelfPosInfo;
import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.kanban.rest.bean.dto.BoxStatusDto;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
import com.neotel.smfcore.core.storage.rest.mapstruct.StorageMapper;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
......@@ -74,6 +76,9 @@ public class SingleInController {
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private StorageMapper storageMapper;
@ApiOperation("输入二维码后根据尺寸获取料架列表")
@GetMapping("/shelfPosList")
......@@ -198,6 +203,13 @@ public class SingleInController {
if (pos != null) {
throw new ValidateException("smfcore.materialBox.inPos", "物料已在库位{0}中", new String[]{pos.getPosName()});
}
for (DataLog queueTask : queueTasks) {
if (queueTask.getBarcode()!=null&&queueTask.getBarcode().equals(barcode.getBarcode())) {
log.info("codeIn [" + code + "][" + storageId + "]入库失败:条码[" + queueTask.getBarcode() + "]在料仓["+queueTask.getStorageName()+"]已有入库任务 ");
throw new ValidateException("smfcore.barcode.unfinished", "条码["+queueTask.getBarcode()+"]在料仓["+queueTask.getStorageName()+"]已有入库任务",
new String[]{queueTask.getBarcode(),queueTask.getStorageName()});
}
}
//判断料架是否有空位
for (UsageItem item :
storage.getUsageMap().values()) {
......@@ -297,6 +309,20 @@ public class SingleInController {
return ResultBean.newOkResult("");
}
@ApiOperation("扫码料架功能")
@PostMapping("/shelfCode")
public ResultBean shelfCode( @RequestBody String shelfCode) {
Storage storage = dataCache.getStorageByName(shelfCode);
if(storage==null){
return ResultBean.newErrorResult(-1, "smfcore.shelfNotExist", "{0}对应的料架不存在", new String[]{shelfCode});
}
StorageDto dto=storageMapper.toDto(storage);
return ResultBean.newOkResult(dto);
}
private Barcode resolveBarcode(String code) {
Barcode barcode = codeResolve.resolveOneValideBarcode(code);
if (barcode == null) {
......
......@@ -439,6 +439,7 @@ public class LiteOrderCache implements ITaskListener {
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, taskService.excludePosIds());
int storageNum=0;
int reelNum=posList.size();
for (StoragePos pos :posList
) {
storageNum+=pos.getBarcode().getAmount();
......@@ -449,8 +450,8 @@ public class LiteOrderCache implements ITaskListener {
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息, 缺料 ");
return materialShortPro(userName,cacheOrder);
}
//判断库存
if(storageNum<component.getSafetyStoreNum()){
//判断库存 使用最小库存盘数:当前盘数<最小库存盘数时,需要截料
if(reelNum<component.getMinStoreNum()){
needJieliao=true;
}
//判断库存数量是否小于需求数量,小于直接返回缺料
......
......@@ -164,19 +164,20 @@ public class MaterialStockController {
dto.setPartNumber(com.getPartNumber());
dto.setAmount(com.getAmount());
dto.setSupplementReel(0);
//判断是否需要补充
if (dto.getStockCount() < com.getMinStoreNum()) {
if (dto.getStockReel() > 0 && dto.getStockCount() > 0) {
int reelCount = dto.getStockCount() / dto.getStockReel();
//补充盘数
int needReel = (com.getMinStoreNum() - dto.getStockCount()) / reelCount;
dto.setSupplementReel(needReel);
} else {
int needReel = com.getMinStoreNum() / dto.getAmount();
dto.setSupplementReel(needReel);
}
//判断是否需要补充 判断当前盘数是否小于最小盘数
if (dto.getStockReel() < com.getMinStoreNum()) {
// if (dto.getStockReel() > 0 && dto.getStockCount() > 0) {
//
// int reelCount = dto.getStockCount() / dto.getStockReel();
// //补充盘数
// int needReel = (com.getMinStoreNum() - dto.getStockCount()) / reelCount;
// dto.setSupplementReel(needReel);
// } else {
// int needReel = com.getMinStoreNum() / dto.getAmount();
// dto.setSupplementReel(needReel);
// }
dto.setSupplementReel(com.getMinStoreNum()-dto.getStockReel());
}
if (needSupplement ) {
if(dto.getSupplementReel() > 0){
......
......@@ -296,6 +296,14 @@ public class StoragePosController {
}
}
if(criteria.getMinAmount()!=null){
baseCriteria.and("barcode.amount").gte(criteria.getMinAmount());
}
if(criteria.getMaxAmount()!=null){
baseCriteria.and("barcode.amount").lte(criteria.getMaxAmount());
}
query.addCriteria(baseCriteria);
return query;
}
......@@ -309,6 +317,7 @@ public class StoragePosController {
List<StoragePos> storagePos = storagePosManager.findByQuery(query );
storagePosManager.download(storagePos, response,request.getLocale());
}
//UID出库
@ApiOperation("查找出库列表")
@GetMapping("/find")
@PreAuthorize("@el.check('checkOut')")
......
......@@ -14,7 +14,7 @@ import java.util.List;
@Data
public class StoragePosFindCriteria {
@QueryCondition(blurry = "barcode.partNumber,barcode,posName")
@QueryCondition(blurry = "barcode.partNumber,barcode,posName,barcode.provider,barcode.batch")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "barcode.putInDate")
......@@ -82,6 +82,12 @@ public class StoragePosFindCriteria {
@ApiModelProperty("等级")
private String msl;
@ApiModelProperty("最小数量")
private Integer minAmount;
@ApiModelProperty("最大数量")
private Integer maxAmount;
public int getComponentType(){
int componentType = getType();
if (componentType != -1) {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!