Commit 935038e2 LN

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

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