Commit 388991f1 sunke

感应料架提示消息只发送所属用户

PN出库页面服务器排序
1 个父辈 04ec3da6
......@@ -22,6 +22,7 @@ import com.neotel.smfcore.core.system.websocket.SocketMsg;
import com.neotel.smfcore.core.system.websocket.WebSocketServer;
import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.service.manager.IUserManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -43,6 +44,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@Autowired
private TokenProvider tokenProvider;
@Autowired
private IUserManager userManager;
/**
* 扫码
*/
......@@ -50,6 +54,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@PostMapping("/api/sensorShelf/codeIn")
@PreAuthorize("@el.check('sensorShelf:putIn')")
public ResultBean codeIn( @RequestBody Map<String, String> mapValues,HttpServletRequest request) {
String code = mapValues.get("code");
String groupId = mapValues.get("group");
String storageId=mapValues.get("storageId");
......@@ -70,7 +76,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{
if(groupId!=null&&groupId.equals("-1")){
groupId="";
}
// WebSocketServer.sendMsg("", new SocketMsg("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"}));
// WebSocketServer.sendMsg("", new SocketMsg("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"}));
String loginUser = SecurityUtils.getLoginUsername();
Collection<DataLog> queueTasks = taskService.getQueueTasks();
ResultBean resultBean = null;
......@@ -155,7 +162,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
try {
taskService.addTaskToExecute(dataLog);
} catch (Exception e) {
WebSocketServer.sendMsg(token, new SocketMsg(e.getMessage(), MsgType.INFO,"smfclient.nlp.error",new String[]{e.getMessage()}));
return ResultBean.newErrorResult(-1,"smfclient.nlp.error","入库失败:"+e.getMessage(),new String[]{e.getMessage()});
}
......@@ -318,7 +325,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
if(hasReelPosList.length > 1){
String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList);
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.onlyOneTray",new String[]{String.join(",",hasReelPosList)}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
SocketMsg socketMsg = new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.onlyOneTray",new String[]{String.join(",",hasReelPosList)});
WebSocketServer.sendMsg(socketMsg);
for (String posStr : hasReelPosList) {
inNgList.add(posStr);
}
......@@ -327,12 +336,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{"",String.join(",",hasReelPosList)}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers,msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{"",String.join(",",hasReelPosList)}));
}
else if(!pos.getStorageId().equals(storage.getId())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{storage.getName(),String.join(",",hasReelPosList)}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{storage.getName(),String.join(",",hasReelPosList)}));
}
//如果库位有料,直接结束
else if(pos.getBarcode()!=null) {
......@@ -362,11 +374,16 @@ public class NLPShelfHandler extends BaseDeviceHandler{
inOkList.add(hasReelPosList[0]);
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
log.info(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO,"smfclient.nlp.inputOk",new String[]{queueTask.getBarcode(),pos.getPosName()}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.inputOk",new String[]{queueTask.getBarcode(),pos.getPosName()}));
break;
} catch (Exception e) {
log.error("入库出错"+e.getMessage());
WebSocketServer.sendMsg("",new SocketMsg("入库出错:"+e.getMessage(), MsgType.ERROR,"smfclient.nlp.inputError",new String[]{e.getMessage()}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers,"入库出错:"+e.getMessage(), MsgType.ERROR,"smfclient.nlp.inputError",new String[]{e.getMessage()}));
return ResultBean.newErrorResult(-1, "smfcore.inputError", "入库出错:{0}", new String[]{e.getMessage()});
}
}
......@@ -394,12 +411,16 @@ public class NLPShelfHandler extends BaseDeviceHandler{
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{"",String.join(",",hasReelPosList)}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{"",String.join(",",hasReelPosList)}));
}
else if(!pos.getStorageId().equals(storage.getId())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{storage.getName(),String.join(",",hasReelPosList)}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{storage.getName(),String.join(",",hasReelPosList)}));
}else if(pos.getBarcode()==null){
log.info("料架[" + cid + "]出库库位[" + pos.getPosName() + "]已为空 ");
}else{
......@@ -413,11 +434,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{
super.finishedOutPos(cid,posName);
String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功";
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO,"smfclient.nlp.outputOk",new String[]{queueTask.getBarcode(),posName}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.outputOk",new String[]{queueTask.getBarcode(),posName}));
break;
} catch (Exception e) {
log.error("出库出错"+e.getMessage());
WebSocketServer.sendMsg("",new SocketMsg("出库出错:"+e.getMessage(), MsgType.ERROR,"smfclient.nlp.outputError",new String[]{e.getMessage()}));
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, "出库出错:"+e.getMessage(), MsgType.ERROR,"smfclient.nlp.outputError",new String[]{e.getMessage()}));
return ResultBean.newErrorResult(-1,"smfcore.checkoutError","出库出错:{0}" ,new String[]{ e.getMessage()});
}
}
......
......@@ -468,16 +468,14 @@ public class DataCache {
return map;
}
Map<String, InventoryItem> resultMap = new HashMap<>();
for (InventoryItem item :
map.values()) {
for (InventoryItem item : map.values()) {
boolean blurryOk = false;
if (ObjectUtil.isNotEmpty(blurry)) {
String[] blurrys = blurry.split(",");
String[] valueArray = new String[]{item.getPartNumber(),item.getStorageName()};
for (String s : blurrys) {
if (ObjectUtil.isNotEmpty(s)) {
for (String v :
valueArray) {
for (String v : valueArray) {
if(ObjectUtil.isEmpty(v)){
continue;
}
......
......@@ -34,6 +34,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
......@@ -45,6 +46,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@RestController
......@@ -105,12 +107,36 @@ public class MaterialController {
@ApiOperation("策略出库获取库存列表")
@GetMapping(value = "/inventory")
@PreAuthorize("@el.check('tacticsOuput')")
public ResponseEntity<List<InventoryItemDto>> inventory(InventoryQueryCriteria criteria) {
public ResponseEntity<List<InventoryItemDto>> inventory(InventoryQueryCriteria criteria,Pageable pageable, HttpServletRequest request) {
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(criteria.getStorageIdList(),criteria.getBlurry());
List<InventoryItem> list = Lists.newArrayList(inventoryItemMap.values());
List<InventoryItemDto> dtoList = inventoryItemMapper.toDto(list);
Comparator<InventoryItemDto> comparator = Comparator.comparing(InventoryItemDto::getPartNumber);
Sort.Order lockReelOrder = pageable.getSort().getOrderFor("lockReel");
if(lockReelOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getStockReel,Comparator.nullsFirst(Integer::compareTo));
if(lockReelOrder.isDescending()){
comparator = comparator.reversed();
}
}
Sort.Order stockCountOrder = pageable.getSort().getOrderFor("stockCount");
if(stockCountOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getStockCount,Comparator.nullsFirst(Integer::compareTo));
if(stockCountOrder.isDescending()){
comparator = comparator.reversed();
}
}
Sort.Order partNumberOrder = pageable.getSort().getOrderFor("partNumber");
if(partNumberOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getPartNumber,Comparator.nullsFirst(String::compareTo));
if(stockCountOrder.isDescending()){
comparator = comparator.reversed();
}
}
return new ResponseEntity<>(inventoryItemMapper.toDto(list), HttpStatus.OK);
dtoList = dtoList.stream().sorted(comparator).collect(Collectors.toList());
return new ResponseEntity<>(dtoList, HttpStatus.OK);
}
@ApiOperation("策略出库")
......
......@@ -118,6 +118,7 @@ public class MesApiController {
*/
@RequestMapping(value = "/dataUpdate")
@ResponseBody
@AnonymousAccess
public String dataUpdate(HttpServletRequest request) {
try {
String Partnumber = checkParameter(request,"PN");
......@@ -151,6 +152,7 @@ public class MesApiController {
@RequestMapping(value = "/barcode")
@ResponseBody
@AnonymousAccess
public String barcode(HttpServletRequest request) {
try{
String codeStr = checkParameter(request,"codeStr");
......@@ -177,6 +179,7 @@ public class MesApiController {
@RequestMapping(value = "/codeUpdate")
@ResponseBody
@AnonymousAccess
public String codeUpdate(HttpServletRequest request) {
try {
......@@ -209,6 +212,7 @@ public class MesApiController {
@RequestMapping(value = "/stackOut")
@ResponseBody
@AnonymousAccess
public String stackOut(HttpServletRequest request) {
try {
......@@ -239,6 +243,7 @@ public class MesApiController {
@RequestMapping(value = "/unlock")
@ResponseBody
@AnonymousAccess
public String unlock(HttpServletRequest request) {
String orderName = request.getParameter("orderName");//锁定标签
log.info("收到unlock 请求:orderName=" + orderName);
......@@ -261,6 +266,7 @@ public class MesApiController {
@RequestMapping(value = "/lock")
@ResponseBody
@AnonymousAccess
public String lock(HttpServletRequest request){
String orderName = request.getParameter("orderName");//锁定标签
String pn = request.getParameter("pn");//Partnumber
......@@ -306,6 +312,7 @@ public class MesApiController {
@RequestMapping(value = "/pnInventory")
@ResponseBody
@AnonymousAccess
public Map<String,Map<String,Integer>> getParnumberInventory(HttpServletRequest request){
log.info("收到 getParnumberInventory 请求");
Map<String,Map<String,Integer>> partnumberInventory = Maps.newHashMap();
......@@ -337,6 +344,7 @@ public class MesApiController {
@RequestMapping(value = "/history")
@ResponseBody
@AnonymousAccess
public List<Map<String,Object>> history(HttpServletRequest request) {
String bid = request.getParameter("bid");
// String start = request.getParameter("start");
......@@ -382,6 +390,7 @@ public class MesApiController {
@RequestMapping(value = "/status")
@ResponseBody
@AnonymousAccess
public List<Map<String,Object>> status(HttpServletRequest request) {
String cid = request.getParameter("cid");
// Locale localeZh = Language.ZH_CN.getLocale();
......
......@@ -935,7 +935,7 @@ public class TaskService {
task.setOperator(SecurityUtils.getCurrentUsername());
task.setSingleOut(true);
task.setSourceId(null);
task.setSourceName("策略出库");
task.setSourceName("PN");
addTaskToExecute(task);
}
}
......
......@@ -19,6 +19,8 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author ZhangHouYing
* @date 2019-08-10 9:55
......@@ -27,6 +29,12 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class SocketMsg {
/**
* 要通知的用户名称列表
*/
private List<String> users;
private String msg;
private MsgType msgType;
......@@ -35,6 +43,26 @@ public class SocketMsg {
private String[] msgParams;
// public static SocketMsg newErrorMsg(String msgId, String msgCode,String[] msgParams,String defaultMsg){
// SocketMsg sm = new SocketMsg();
// sm.setMsg(defaultMsg);
// sm.setMsgType(MsgType.ERROR);
// sm.setMsgCode(msgCode);
// sm.setMsgId(msgId);
// sm.setMsgParams(msgParams);
// return sm;
// }
//
// public static SocketMsg newInfoMsg(String msgId, String msgCode,String msg, String[] msgParams){
// SocketMsg sm = new SocketMsg();
// sm.setMsg(msg);
// sm.setMsgType(MsgType.INFO);
// sm.setMsgCode(msgCode);
// sm.setMsgId(msgId);
// sm.setMsgParams(msgParams);
// return sm;
// }
// public SocketMsg(String msg, MsgType msgType) {
// this.msg = msg;
// this.msgType = msgType;
......
......@@ -20,7 +20,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "dev")
//@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "dev")
@Configuration
public class WebSocketConfig {
......
......@@ -110,8 +110,7 @@ public class WebSocketServer {
@OnError
public void onError(Session session, Throwable error) {
log.error("发生错误");
error.printStackTrace();
log.error("WebSocket发生错误:"+error.getMessage());
}
/**
* 实现服务器主动推送
......@@ -130,12 +129,12 @@ public class WebSocketServer {
/**
* 发送分组消息
*/
public static void sendMsg(String token, SocketMsg socketMsg) {
String sid ="Bearer "+ token;
if(ObjectUtil.isEmpty(token)){
sid=token;
}
sendInfo(socketMsg,sid);
public static void sendMsg(SocketMsg socketMsg) {
// String sid ="Bearer "+ token;
// if(ObjectUtil.isEmpty(token)){
// sid=token;
// }
sendInfo(socketMsg,"");
}
/**
......
......@@ -188,10 +188,10 @@ public class HellaServiceHandler extends BaseSmfApiListener implements IoHandler
if(respCommand.isOkResp()){
ResultBean okResult = ResultBean.newOkResult("smfcore.loadMaterialFinished","loading material is finished: {0}" ,new String[]{messageText},"");
WebSocketServer.sendMsg(requestCommand.getToken(),new SocketMsg(okResult.getMsg(), MsgType.INFO,"smfclient.loadMaterialFinished",new String[]{messageText}));
WebSocketServer.sendMsg(new SocketMsg(Lists.newArrayList(requestCommand.getLoginUser()), okResult.getMsg(), MsgType.INFO,"smfclient.loadMaterialFinished",new String[]{messageText}));
}else{
ResultBean ngResult = ResultBean.newErrorResult(Integer.valueOf(returnCode),"smfcore.loadMaterialFailed","loading material failed:{0}",new String[]{messageText} );
WebSocketServer.sendMsg(requestCommand.getToken(),new SocketMsg(ngResult.getMsg(), MsgType.ERROR,"smfclient.loadMaterialFailed",new String[]{messageText}));
WebSocketServer.sendMsg(new SocketMsg(Lists.newArrayList(requestCommand.getLoginUser()),ngResult.getMsg(), MsgType.ERROR,"smfclient.loadMaterialFailed",new String[]{messageText}));
}
commandMap.remove(respCommand.getEventId());
}else if(respCommand.isUnloadMaterialCmd()){
......@@ -413,15 +413,15 @@ public class HellaServiceHandler extends BaseSmfApiListener implements IoHandler
try{
taskService.addTaskToExecute(dataLog);
ResultBean okResult = ResultBean.newOkResult("checking material is ok: " + messageText);
WebSocketServer.sendMsg(token,new SocketMsg(okResult.getMsg(), MsgType.INFO,"smfclient.checkingMaterialOk",new String[]{messageText}));
WebSocketServer.sendMsg(new SocketMsg(Lists.newArrayList(loginUser),okResult.getMsg(), MsgType.INFO,"smfclient.checkingMaterialOk",new String[]{messageText}));
}catch(Exception e){
WebSocketServer.sendMsg(token,new SocketMsg(e.getMessage(), MsgType.INFO,"smfclient.nlp.error",new String[]{e.getMessage()}));
WebSocketServer.sendMsg(new SocketMsg(Lists.newArrayList(loginUser),e.getMessage(), MsgType.INFO,"smfclient.nlp.error",new String[]{e.getMessage()}));
}
}else{
//NG,需要在界面上进行提示
ResultBean ngResult = ResultBean.newErrorResult(Integer.valueOf(returnCode),"smfcore.checkNg","checking material is ng:{0}" ,new String[]{messageText} );
WebSocketServer.sendMsg(token,new SocketMsg(ngResult.getMsg(), MsgType.ERROR,"smfclient.checkNg",new String[]{messageText}));
WebSocketServer.sendMsg(new SocketMsg(Lists.newArrayList(loginUser),ngResult.getMsg(), MsgType.ERROR,"smfclient.checkNg",new String[]{messageText}));
}
commandMap.remove(respCommand.getEventId());
}
......
......@@ -66,6 +66,8 @@ public interface IUserManager extends IBaseManager<User> {
List<User> findByRoleId(String roleId);
List<String> findByDeviceGroupId(String deviceGroupId);
void download(List<User> users, HttpServletResponse response, Locale locale) throws IOException;
void updateEmail(String username, String email);
......
package com.neotel.smfcore.security.service.manager.impl;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.security.rest.bean.dto.RoleSmallDto;
import com.neotel.smfcore.security.rest.bean.dto.UserDto;
import com.neotel.smfcore.security.rest.bean.mapstruct.RoleMapper;
import com.neotel.smfcore.security.rest.bean.mapstruct.UserMapper;
import com.neotel.smfcore.security.service.dao.IUserDao;
import com.neotel.smfcore.security.service.manager.IRoleManager;
......@@ -17,7 +13,6 @@ import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
......@@ -28,7 +23,6 @@ import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created by kangmor on 2015/12/1.
......@@ -167,6 +161,21 @@ public class UserManagerImpl implements IUserManager {
List<User> users = userDao.findOneByCondition(new String[] {"roleId"}, new String[] {roleId});
return users;
}
@Override
public List<String> findByDeviceGroupId(String deviceGroupId){
List<String> userNames = new ArrayList<>();
if(deviceGroupId == null || deviceGroupId.isEmpty()){
return userNames;
}
Query query=new Query(Criteria.where("groups").is(deviceGroupId));
List<User> users = userDao.findByQuery(query);
for (User user : users) {
userNames.add(user.getUsername());
}
return userNames;
}
@Override
public void download(List<User> queryAll, HttpServletResponse response,Locale locale) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!