Commit 4ac70fd1 LN

海拉修改:1.标签出库增加设备分组,设备,入库时间过滤。2.orderMaterialExt根据设备分组和标签名称过滤。3.getInventory料架名改为设备组名。

1 个父辈 cc9c50f7
......@@ -566,6 +566,26 @@ public class DataCache {
}
return cidList;
}
public List<String> getStorageIdsByGroupId(String groupId,boolean nullReturnAll){
if(groupId!=null&&groupId.equals("-1")){
groupId="";
}
List<String> storageIds = Lists.newArrayList();
for (Storage storage : getAllStorage().values()) {
if (groupId!=null) {
if(storage.IsRightGroup(groupId)){
storageIds.add(storage.getId());
}
} else if(nullReturnAll){
storageIds.add(storage.getId());
}
}
return storageIds;
}
public List<String> getAvailableStorageIds(){
List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) {
......
......@@ -25,6 +25,8 @@ 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.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.po.Group;
import com.neotel.smfcore.security.service.po.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -69,6 +71,9 @@ public class MaterialController {
@Autowired
private final IBarcodeManager barcodeManager;
@Autowired
private final IGroupManager groupManager;
@ApiOperation("导出库存列表")
@GetMapping(value = "/inventory/download")
@PreAuthorize("@el.check('tacticsOuput')")
......@@ -135,14 +140,25 @@ public class MaterialController {
@GetMapping("/labelOuput")
@PreAuthorize("@el.check('labelOuput')")
public PageData<StoragePosDto> storagePosFind(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
if (criteria.getStorageId() != null && criteria.getStorageId().equals("0")) {
if (ObjectUtil.isEmpty(criteria.getStorageId()) ||criteria.getStorageId().equals("0") ){
criteria.setStorageId(null);
}
boolean noLabelSearch=false;
if(ObjectUtil.isNull(criteria.getLabelId())){
criteria.setLabelId(null);
}
if(criteria.getLabelId()!=null&&criteria.getLabelId().equals("0")){
criteria.setLabelId("");
noLabelSearch=true;
}
if(criteria.getStorageId()==null&&criteria.getGroupId()!=null){
if(criteria.getGroupId().equals("0")||criteria.getGroupId().equals("")){
criteria.setGroupId(null);
}else{
criteria.setStorageIdList(dataCache.getStorageIdsByGroupId(criteria.getGroupId(),false));
}
}
Query query = QueryHelp.getQuery(criteria);
Criteria baseCriteria = Criteria.where("used").is(true);
......@@ -181,13 +197,24 @@ public class MaterialController {
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
for (StoragePosDto dto : StoragePosDtos
) {
if (dto.getLabelId() != null) {
if (ObjectUtil.isNotEmpty( dto.getLabelId()) ) {
Label label = labelManager.get(dto.getLabelId());
if (label != null) {
dto.setLabelName(label.getLabelName());
}
}
Storage storage=dataCache.getStorageById(dto.getStorageId());
if(storage!=null){
dto.setStorageName(storage.getName());
if(ObjectUtil.isNotEmpty(storage.getGroupId())){
Group group=groupManager.get(storage.getGroupId());
if(group!=null){
dto.setGroupId(group.getId());
dto.setGroupName(group.getGroupName());
}
}
}
}
return new PageData(StoragePosDtos, pages.getTotalElements());
......
package com.neotel.smfcore.core.storage.rest;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
......@@ -116,17 +117,25 @@ public class StorageController {
@ApiOperation("根据组权限返回所有料仓")
@GetMapping(value = "/all")
// @PreAuthorize("@el.check('storage:list')")
public List<StorageSearchDto> query() {
String userId = SecurityUtils.getCurrentUserId();
User user = userManager.get(userId);
Set<String> mygroups = user.getGroups();
public List<StorageSearchDto> query(String groupId) {
// String userId = SecurityUtils.getCurrentUserId();
// User user = userManager.get(userId);
Set<String> mygroups = new HashSet<>();
if (ObjectUtil.isNotEmpty(groupId)) {
mygroups = new HashSet<>();
mygroups.add(groupId);
} else {
String userId = SecurityUtils.getCurrentUserId();
User user = userManager.get(userId);
mygroups = user.getGroups();
}
mygroups.add("");
List<Storage> allStorages = storageManager.findAll();
List<Storage> myStorages=new ArrayList<>();
for (Storage s:allStorages
List<Storage> myStorages = new ArrayList<>();
for (Storage s : allStorages
) {
if(mygroups.contains(s.getGroupId())){
if (mygroups.contains(s.getGroupId())) {
myStorages.add(s);
}
}
......
......@@ -49,7 +49,7 @@ public class StorageDto implements Serializable {
@ApiModelProperty("是否可用")
private boolean available = true;
@ApiModelProperty("分组")
@ApiModelProperty("分组ID")
private String groupId = "";
@ApiModelProperty("组名称")
......
......@@ -72,4 +72,9 @@ public class StoragePosDto implements Serializable {
@ApiModelProperty("设备名称")
private String storageName;
@ApiModelProperty("分组")
private String groupId = "";
@ApiModelProperty("组名称")
private String groupName = "";
}
......@@ -15,4 +15,7 @@ public class StorageSearchDto implements Serializable {
@ApiModelProperty("料仓CID")
private String cid;
@ApiModelProperty("分组ID")
private String groupId = "";
}
......@@ -19,6 +19,10 @@ public class StoragePosFindCriteria {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> updateDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "barcode.putInDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> putInDate;
@QueryCondition
@ApiModelProperty("料仓ID")
private String storageId;
......@@ -39,6 +43,9 @@ public class StoragePosFindCriteria {
@ApiModelProperty("标签ID")
private String labelId;
@ApiModelProperty("分组")
private String groupId = "";
@ApiModelProperty("类型")
private int type =-1 ;
......
......@@ -10,4 +10,6 @@ public interface ILabelManager extends IBaseManager<Label> {
List<Label> findAll();
Label saveLabel(Label resources);
Label getBylabelName(String labelName);
}
......@@ -29,6 +29,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
void removePosByStorageId(String storageId);
void deletePoss(Set<String> ids);
......
......@@ -46,6 +46,12 @@ public class LabelManagerImpl implements ILabelManager {
}
@Override
public Label getBylabelName(String labelName) {
Query query=new Query(Criteria.where("labelName").is(labelName));
return labelDao.findOne(query);
}
@Override
public Label get(String id) {
return labelDao.findOneById(id);
}
......
......@@ -213,26 +213,32 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) {
return findPartNumberInStorages(storageIdList,"",pn,excludePosIds,checkOutType);
}
@Override
public StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) {
Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds)
.and("enabled").is(true)//可用
.and("barcode.lockId").is(null);//没有被锁定的仓位;
if(storageIdList != null){
if (storageIdList != null) {
c = c.and("storageId").in(storageIdList);
}
if (ObjectUtil.isNotEmpty(labelId)) {
c.and("labelId").is(labelId);
}
Query q = new Query(c);
Sort sort = getSortByCheckOutType(checkOutType);
q.with(sort);
StoragePos pos=storagePosDao.findOne(q);
if(pos==null){
log.info("使用"+checkOutType+" 策略出库 partNumber="+pn+",未找到可以出库的物料 ");
}else{
log.info("使用"+checkOutType+" 策略出库 partNumber="+pn+",找到出仓位置【"+ pos.getPosName()+"】,RI【"+pos.getBarcode().getBarcode()+"】 ");
StoragePos pos = storagePosDao.findOne(q);
if (pos == null) {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",未找到可以出库的物料 ");
} else {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",找到出仓位置【" + pos.getPosName() + "】,RI【" + pos.getBarcode().getBarcode() + "】 ");
}
return pos;
}
/**
* 根据出库方式获取不同的 Sort
*/
......
......@@ -19,7 +19,9 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
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.service.manager.ILabelManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Label;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.listener.ITaskListener;
......@@ -81,6 +83,9 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
private IGroupManager groupManager;
@Autowired
private ILabelManager labelManager;
@Autowired
private CodeResolve codeResolve;
protected final static Logger log = LogManager.getLogger();
......@@ -232,46 +237,64 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
handleOrderMaterialExtCmd(session,resposArr);
}else if(respCommand.isGetInventoryCmd()){
//<STX>getInventory;eventId;shelfNumber<CR><LF>
String shelfNumber = resposArr[2];
Storage shelf = null;
if(ObjectUtil.isNotEmpty(shelfNumber)) {
Collection<Storage> allStorages = dataCache.getAllStorage().values();
for (Storage storage : allStorages) {
if (storage.getName().equals(shelfNumber)) {
shelf = storage;
}
//20220217修改: <STX>getInventory;eventId;lineNumber<CR><LF>
// String shelfNumber = resposArr[2];
// Storage shelf = null;
// if(ObjectUtil.isNotEmpty(shelfNumber)) {
// Collection<Storage> allStorages = dataCache.getAllStorage().values();
// for (Storage storage : allStorages) {
// if (storage.getName().equals(shelfNumber)) {
// shelf = storage;
// }
// }
// }
String lineNumber=resposArr[2];
List<String> shelfIds=new ArrayList<>();
if(ObjectUtil.isNotEmpty(lineNumber)){
Group group= groupManager.getByGroupName(lineNumber);
if(group!=null){
shelfIds =dataCache. getStorageIdsByGroupId(group.getId(), false);
}
}
String resultCode = "0";
String resultMsg = "OK";
String dataStr = "";
if(ObjectUtil.isNotEmpty(shelfNumber)&&shelf == null){
// if(ObjectUtil.isNotEmpty(shelfNumber)&&shelf == null){
if(ObjectUtil.isNotEmpty(lineNumber)&&shelfIds.size()<=0){
//<STX>getInventoryResp;eventId;returnCode;messageText;numberofResults;partNumber1;containerNumber;remainQuantity;MSL;lightClass;SelfPosition;reserved;…;partNumberN;containerNumberN;remainQuantityN;MSLN;lightClassN;SelfPositionN;reservedN;<CR><LF>
resultCode = "-1";
resultMsg = "Shelf is not found";
dataStr = "0";
}else{
String shelfId="";
if(!(shelf==null)){
shelfId=shelf.getId();
}else {
// String shelfId="";
// if(!(shelf==null)){
// shelfId=shelf.getId();
// }
if(shelfIds.size()<=0){
shelfIds.add("");
}
List<StoragePos> posList = storagePosManager.findNotEmptyByStorageId(shelfId);
int numberOfResult = posList.size();
dataStr = "" + numberOfResult;
for (StoragePos storagePos : posList) {
Barcode barcode = storagePos.getBarcode();
String pn = barcode.getPartNumber();
String reelId = barcode.getBarcode();
int qty = barcode.getAmount();
String msl = barcode.getMsl();
String lightClass = barcode.getBatch();
String posName = storagePos.getPosName();
String reserved = "0";
if(Strings.isNotBlank(barcode.getLockId())){
reserved = "1";
for (String shelfId :
shelfIds) {
List<StoragePos> posList = storagePosManager.findNotEmptyByStorageId(shelfId);
int numberOfResult = posList.size();
dataStr = "" + numberOfResult;
for (StoragePos storagePos : posList) {
Barcode barcode = storagePos.getBarcode();
String pn = barcode.getPartNumber();
String reelId = barcode.getBarcode();
int qty = barcode.getAmount();
String msl = barcode.getMsl();
String lightClass = barcode.getBatch();
String posName = storagePos.getPosName();
String reserved = "0";
if (Strings.isNotBlank(barcode.getLockId())) {
reserved = "1";
}
dataStr = dataStr + ";" + pn + ";" + reelId + ";" + qty + ";" + msl + ";" + lightClass + ";" + posName + ";" + reserved;
}
dataStr = dataStr + ";" + pn + ";" + reelId + ";" + qty + ";" + msl + ";" + lightClass + ";" + posName + ";" + reserved;
}
}
......@@ -409,21 +432,23 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
private void handleOrderMaterialExtCmd(IoSession session, String[] resposArr) throws ValidateException {
//工单出库
//<STX>orderMaterialExt;eventId;lineNumber;workorderNumber;currentWorkorderflag;reflowgroupNumber;numberofPartnumbers;partNumber1;numberofReels;…;partNumberN;numberofReels<CR><LF>
//20220217 修改工单出库参数
//<STX>orderMaterialExt;eventId;lineNumber;CRPNumber;currentWorkorderflag;productGroup;numberofPartnumbers;partNumber1;numberofReels;…;partNumberN;numberofReels<CR><LF>
String responseEventId = resposArr[1];
String groupName = resposArr[2];
String groupName = resposArr[2];//设备组名称
String workorderNumber = resposArr[3];
// workorderNumber=responseEventId;
//currentWorkorderflag 0 for current workorder; 1 for next workorder
String currentWorkorderflag = resposArr[4];
String reflowgroupNumber = resposArr[5];
// String reflowgroupNumber = resposArr[5];
String labelName=resposArr[5];//标签名称
String numberofPartnumbers = resposArr[6];
LiteOrder liteOrder = liteOrderManager.findByOrderNo(workorderNumber);
if(liteOrder != null){
log.info("数据库中已存在工单号为["+workorderNumber+"]的工单,忽略");
int resultCode=-1;
String resultMsg="workorderNumber ["+workorderNumber+"] already exists";
String respMsg = "orderMaterialExtResp;"+ responseEventId+";" + resultCode+";"+resultMsg+";"+workorderNumber+";"+currentWorkorderflag+";"+reflowgroupNumber+";"+numberofPartnumbers ;
String respMsg = "orderMaterialExtResp;"+ responseEventId+";" + resultCode+";"+resultMsg+";"+workorderNumber+";"+currentWorkorderflag+";"+labelName+";"+numberofPartnumbers ;
HellaTcpClient.sendMsg(respMsg,session);
}else{
......@@ -440,7 +465,7 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
}
liteOrder = new LiteOrder(workorderNumber,items);
liteOrder.setSource(groupName);
log.info("新增加订单:" + liteOrder.getOrderNo());
log.info("新增加订单:" + liteOrder.getOrderNo()+",设备组名称["+groupName+"],标签名称["+labelName+"]");
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
//对工单进行锁定
......@@ -457,6 +482,16 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
}
}
//增加标签过滤
String labelId="";
if(ObjectUtil.isNotEmpty(labelName)){
Label label=labelManager.getBylabelName(labelName );
if(label!=null){
labelId=label.getId() ;
}
}
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
Collection<String> excludePosIds = new ArrayList<>();
......@@ -468,7 +503,7 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
String pn = liteOrderItem.getPn();
int lockCount = 0;
while(lockCount < reelCount){
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType);
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList,labelId, pn, excludePosIds, checkOutType);
if(pos == null){
break;
}else{
......@@ -506,7 +541,7 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
//<STX>orderMaterialExtResp;1;0;OK;61598;1;325.618-01;3;790.130-13;abcde;3000; 790.131-01;abcdf;5000;790.131-01;abcdg;2580<CR><LF>
//orderMaterialExtResp;0;-1;Some material not on the shelf;1408;1;325.618-01;1;;791.704-06NOT_FOUND;0
//<STX>orderMaterialExtResp;eventId;returnCode;messageText;workorderNumber;currentWorkorderflag;reflowgroupNumber;numberofPartnumbers;partNumber1;containerNumber;quantity;…;partNumberN;containerNumberN;quantityN<CR><LF>
String respMsg = "orderMaterialExtResp;"+ responseEventId+";" + resultCode+";"+resultMsg+";"+workorderNumber+";"+currentWorkorderflag+";"+reflowgroupNumber+";"+numberofPartnumbers +resultDataStr;
String respMsg = "orderMaterialExtResp;"+ responseEventId+";" + resultCode+";"+resultMsg+";"+workorderNumber+";"+currentWorkorderflag+";"+labelName+";"+numberofPartnumbers +resultDataStr;
// log.info("工单结果:" + respMsg);
// session.write("\02"+respMsg);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!