Commit f9bf1e74 孙克

Merge remote-tracking branch 'origin/master'

2 个父辈 5a6d6a8c 4b410f44
正在显示 106 个修改的文件 包含 2139 行增加353 行删除
...@@ -89,7 +89,7 @@ public class DataInitManager { ...@@ -89,7 +89,7 @@ public class DataInitManager {
operator = roleManager.save(operator); operator = roleManager.save(operator);
log.info("创建默认角色:" + operator.toString()); log.info("创建默认角色:" + operator.toString());
admin = new User(userName, "admin@neotel.tech", "zh-CN", role.getId(), "$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa", true, true, new Date(), groupIds, ""); admin = new User(userName, "admin@neotel.tech", "zh-CN", role.getId(), "$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa", true, true, new Date(), groupIds, "","");
admin = userManager.save(admin); admin = userManager.save(admin);
log.info("创建默认用户:" + admin.toString()); log.info("创建默认用户:" + admin.toString());
......
...@@ -121,7 +121,7 @@ public class MenuInit { ...@@ -121,7 +121,7 @@ public class MenuInit {
//addDefaultFunctionMenu(-1,null,"Neo Ai","neoai","neoai/index","neoai"); //addDefaultFunctionMenu(-1,null,"Neo Ai","neoai","neoai/index","neoai");
//Mimo看板 //Mimo看板
//addDefaultFunctionMenu(0,null,"SMD BOX MIMO","SMDBOXMIMO", "smdBoxMimo/index","smdMimo"); addDefaultFunctionMenu(0,null,"SMD BOX MIMO","SMDBOXMIMO", "smdBoxMimo/index","smdMimo");
Menu boardMap = Menu.CreatePMenu("仪表盘", 0, "dashBoard", "kanban", null); Menu boardMap = Menu.CreatePMenu("仪表盘", 0, "dashBoard", "kanban", null);
...@@ -150,11 +150,11 @@ public class MenuInit { ...@@ -150,11 +150,11 @@ public class MenuInit {
addDefaultFunctionMenu(2, poutOut,"PN出库", "tacticsOuput", "neolight/tacticsOuput/index", "tacticsOuput",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(2, poutOut,"PN出库", "tacticsOuput", "neolight/tacticsOuput/index", "tacticsOuput",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(3,poutOut,"工单出库","workOrder", "neolight/workOrder/index","orderOut",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(3,poutOut,"工单出库","workOrder", "neolight/workOrder/index","orderOut",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(4,poutOut,"工单","orderkanban", "orderkanban/index","kanban"); // addDefaultFunctionMenu(4,poutOut,"工单","orderkanban", "orderkanban/index","kanban");
addDefaultFunctionMenu(5,poutOut,"库位出库", "posOutput", "system/posOutput/index", "swagger"); addDefaultFunctionMenu(5,poutOut,"库位出库", "posOutput", "system/posOutput/index", "swagger");
addDefaultFunctionMenu(6, poutOut, "物料标签", "labelOuput", "neolight/labelOuput/index", "mgroup"); addDefaultFunctionMenu(6, poutOut, "物料标签", "labelOuput", "neolight/labelOuput/index", "mgroup");
addDefaultFunctionMenu(7, poutOut, "料盒操作", "materialBox", "neolight/materialBox/index", "mIbox"); addDefaultFunctionMenu(7, poutOut, "料盒操作", "materialBox", "neolight/materialBox/index", "mIbox");
addDefaultFunctionMenu(8, poutOut, "出库策略", "outSetting", "system/outSetting/index", "outSet",DEFAULT_SHOW_MENU); // addDefaultFunctionMenu(8, poutOut, "出库策略", "outSetting", "system/outSetting/index", "outSet",DEFAULT_SHOW_MENU);
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet"); // Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addDefaultFunctionMenu(9, poutOut, "入库单", "inList", "system/inList/index", "headIcon"); addDefaultFunctionMenu(9, poutOut, "入库单", "inList", "system/inList/index", "headIcon");
addDefaultFunctionMenu(10, poutOut, "物料入库", "putIn", "system/putIn/index", "headIcon"); addDefaultFunctionMenu(10, poutOut, "物料入库", "putIn", "system/putIn/index", "headIcon");
...@@ -163,7 +163,7 @@ public class MenuInit { ...@@ -163,7 +163,7 @@ public class MenuInit {
// addDefaultFunctionMenu(12, poutOut, "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon"); // addDefaultFunctionMenu(12, poutOut, "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon");
addDefaultFunctionMenu(13, poutOut, "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial"); addDefaultFunctionMenu(13, poutOut, "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial");
//addDefaultFunctionMenu(16, poutOut,"生成工单", "createOrder", "system/createOrder/index", "createOrder"); //addDefaultFunctionMenu(16, poutOut,"生成工单", "createOrder", "system/createOrder/index", "createOrder");
addDefaultFunctionMenu(91,poutOut, "共享文件夹", "orderSetting", "system/orderSetting/index", "sysSet",DEFAULT_SHOW_MENU); // addDefaultFunctionMenu(91,poutOut, "共享文件夹", "orderSetting", "system/orderSetting/index", "sysSet",DEFAULT_SHOW_MENU);
//MSD管理:MSD库存.MSD追溯性.MSD设置 //MSD管理:MSD库存.MSD追溯性.MSD设置
...@@ -181,6 +181,7 @@ public class MenuInit { ...@@ -181,6 +181,7 @@ public class MenuInit {
addDefaultFunctionMenu(34,solderPaste, "设置", "solderPasteSetting", "neolight/solderPasteSetting/index","system",SP_SHOW_MENU); addDefaultFunctionMenu(34,solderPaste, "设置", "solderPasteSetting", "neolight/solderPasteSetting/index","system",SP_SHOW_MENU);
addDefaultFunctionMenu(35,solderPaste, "过期锡膏", "expireSolderPaste", "neolight/expireSolderPaste/index","sMaterial",SP_SHOW_MENU); addDefaultFunctionMenu(35,solderPaste, "过期锡膏", "expireSolderPaste", "neolight/expireSolderPaste/index","sMaterial",SP_SHOW_MENU);
addDefaultFunctionMenu(73, solderPaste,"温湿度", "spHumiture", "humiture/spHumitureReport/index", "humiture");
//档案管理:元器件 //档案管理:元器件
Menu pMenuWl = Menu.CreatePMenu("档案管理", 6, "materiel ", "BOM",null); Menu pMenuWl = Menu.CreatePMenu("档案管理", 6, "materiel ", "BOM",null);
...@@ -189,13 +190,16 @@ public class MenuInit { ...@@ -189,13 +190,16 @@ public class MenuInit {
//条形码:条码管理,条码设置 //条形码:条码管理,条码设置
Menu pMenuBarcode = Menu.CreatePMenu("条形码", 7, "barcodes", "barcodeMenu",null); Menu pMenuBarcode = Menu.CreatePMenu("条形码", 7, "barcodes", "barcodeMenu",null);
addDefaultFunctionMenu(51,pMenuBarcode, "条码管理", "barcode", "barcode/barcode/index","chart",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(51,pMenuBarcode, "条码管理", "barcode", "barcode/barcode/index","chart",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(52, pMenuBarcode, "条码设置","barcodeSetting", "system/barcodeSetting/index", "barcode",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(52, pMenuBarcode, "条码规则","barcodeSetting", "system/barcodeSetting/index", "barcode",DEFAULT_SHOW_MENU);
//日志管理:物料日志 //日志管理:物料日志
Menu pMenuLog = Menu.CreatePMenu("日志管理", 8, "log","log",null); Menu pMenuLog = Menu.CreatePMenu("日志管理", 8, "log","log",null);
addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind"); addDefaultFunctionMenu(63, pMenuLog, "日志监控", "logMonitor", "neolight/logMonitor/index", "logMonitor");
addDefaultFunctionMenu(64, pMenuLog, "物料追溯", "materialTrace", "neolight/materialTrace/index", "trace");
//暂未找到页面
// addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind");
//报表:出入库、库存 //报表:出入库、库存
Menu pMenuReport = Menu.CreatePMenu("报表", 9, "report","inOutData",null); Menu pMenuReport = Menu.CreatePMenu("报表", 9, "report","inOutData",null);
...@@ -205,7 +209,7 @@ public class MenuInit { ...@@ -205,7 +209,7 @@ public class MenuInit {
addDefaultFunctionMenu(71, pMenuReport, "出入库", "inOutDataCount", "neolight/inOutDataCount/index", "outPut",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(71, pMenuReport, "出入库", "inOutDataCount", "neolight/inOutDataCount/index", "outPut",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(72, pMenuReport,"库存", "inventory", "neolight/inventory/index", "inventory"); addDefaultFunctionMenu(72, pMenuReport,"库存", "inventory", "neolight/inventory/index", "inventory");
addDefaultFunctionMenu(73, pMenuReport,"温湿度", "humiture", "humiture/humitureReport/index", "humiture"); addDefaultFunctionMenu(73, pMenuReport,"温湿度", "humiture", "humiture/humitureReport/index", "humiture");
addDefaultFunctionMenu(73, pMenuReport,"温湿度", "spHumiture", "humiture/spHumitureReport/index", "humiture"); // addDefaultFunctionMenu(73, pMenuReport,"温湿度", "spHumiture", "humiture/spHumitureReport/index", "humiture");
addDefaultFunctionMenu(74,pMenuReport, "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory"); addDefaultFunctionMenu(74,pMenuReport, "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory");
addDefaultFunctionMenu(75, pMenuReport,"过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial"); addDefaultFunctionMenu(75, pMenuReport,"过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial");
addDefaultFunctionMenu(81,pMenuReport, "物料追踪", "materialChart", "neolight/materialChart/index", "maChart"); addDefaultFunctionMenu(81,pMenuReport, "物料追踪", "materialChart", "neolight/materialChart/index", "maChart");
...@@ -229,11 +233,14 @@ public class MenuInit { ...@@ -229,11 +233,14 @@ public class MenuInit {
addDefaultFunctionMenu(103, poutSet, "菜单管理", "menu", "system/menu/index", "menu"); addDefaultFunctionMenu(103, poutSet, "菜单管理", "menu", "system/menu/index", "menu");
// Menu sysSetting = new Menu(, "barcode", "条码设置", "barcodeSetting", "system/barcodeSetting/index", "database"); // Menu sysSetting = new Menu(, "barcode", "条码设置", "barcodeSetting", "system/barcodeSetting/index", "database");
// Menu outSet = new Menu(, "outSetting", "出库策略", "outSetting", "system/outSetting/index", "outSet"); // Menu outSet = new Menu(, "outSetting", "出库策略", "outSetting", "system/outSetting/index", "outSet");
addDefaultFunctionMenu(104,poutSet, "系统设置", "sysSetting", "system/sysSetting/index", "sysSet",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(104,poutSet, "系统设置", "sysSetting", "system/sysSetting/index", "sysSet",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(105,poutSet, "资源翻译", "translation", "system/translation/index", "translation"); addDefaultFunctionMenu(105,poutSet, "资源翻译", "translation", "system/translation/index", "translation");
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet"); // Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addDefaultFunctionMenu(106,poutSet, "料架设置", "shelfSetting", "system/shelfSetting/index", "translation",NL_SHOW_MENU); addDefaultFunctionMenu(106,poutSet, "料架设置", "shelfSetting", "system/shelfSetting/index", "translation",NL_SHOW_MENU);
addDefaultFunctionMenu(107,poutSet, "其他设备", "storageOther", "storage/storageOther/index", "storageOther"); addDefaultFunctionMenu(107,poutSet, "其他设备", "storageOther", "storage/storageOther/index", "storageOther");
addDefaultFunctionMenu(108, poutSet, "出库策略", "outSetting", "system/outSetting/index", "outSet",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(109,poutSet, "工单设置", "orderSetting", "system/orderSetting/index", "sysSet",DEFAULT_SHOW_MENU);
Menu helpAbout = Menu.CreatePMenu("帮助", 9999, "help", "help",null); Menu helpAbout = Menu.CreatePMenu("帮助", 9999, "help", "help",null);
addDefaultFunctionMenu(99991, helpAbout, "说明书", "instruction", "system/instruction/index","aboutBook"); addDefaultFunctionMenu(99991, helpAbout, "说明书", "instruction", "system/instruction/index","aboutBook");
......
...@@ -169,6 +169,12 @@ public class Constants { ...@@ -169,6 +169,12 @@ public class Constants {
public static final String CACHE_spSettings="spSettings"; public static final String CACHE_spSettings="spSettings";
/** /**
*锡膏料仓回温完成后自动搅拌,默认=false,需要手动点按钮开始搅拌。true=自动开始搅拌
*/
public static final String CACHE_SP_AUTO_START_MIXED="CACHE_SP_AUTO_START_MIXED";
/**
* 缺料不自动关闭工单 * 缺料不自动关闭工单
*/ */
public static final String CACHE_closeWorkOrder = "CACHE_closeWorkOrder"; public static final String CACHE_closeWorkOrder = "CACHE_closeWorkOrder";
......
...@@ -28,6 +28,7 @@ import org.apache.logging.log4j.util.Strings; ...@@ -28,6 +28,7 @@ import org.apache.logging.log4j.util.Strings;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.io.*; import java.io.*;
import java.net.InetAddress;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
...@@ -148,6 +149,9 @@ public class HttpHelper { ...@@ -148,6 +149,9 @@ public class HttpHelper {
return postJsonWithAuth(url, params, null); return postJsonWithAuth(url, params, null);
} }
public static String postJsonWithAuth(String url, Object params, String auth) throws ApiException { public static String postJsonWithAuth(String url, Object params, String auth) throws ApiException {
return postJsonWithAuth(url,params,auth,CONNECTION_TIMEOUT,READ_DATA_TIMEOUT);
}
public static String postJsonWithAuth(String url, Object params, String auth,int conTimeout,int socketTimeout) throws ApiException {
String requestBody = ""; String requestBody = "";
// 设置请求参数 // 设置请求参数
...@@ -171,6 +175,16 @@ public class HttpHelper { ...@@ -171,6 +175,16 @@ public class HttpHelper {
if (auth != null && !auth.isEmpty()) { if (auth != null && !auth.isEmpty()) {
httpPost.addHeader("Authorization", auth); httpPost.addHeader("Authorization", auth);
} }
if(conTimeout>0&&socketTimeout>0){
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(conTimeout) // 设置连接超时时间为3秒
.setSocketTimeout(socketTimeout) // 设置请求超时时间为3秒
.build();
httpPost.setConfig(requestConfig);
}
httpPost.setEntity(new StringEntity(requestBody, CONTENT_CHARSET)); httpPost.setEntity(new StringEntity(requestBody, CONTENT_CHARSET));
httpClient = HttpClients.createDefault(); httpClient = HttpClients.createDefault();
response = httpClient.execute(httpPost); response = httpClient.execute(httpPost);
...@@ -452,6 +466,59 @@ public class HttpHelper { ...@@ -452,6 +466,59 @@ public class HttpHelper {
} }
} }
public static Map<String,Object> getJsonResult(String url, Object params,int timeoutMS) throws ApiException {
// 设置请求参数
if (params != null) {
try {
ObjectMapper mapper = new ObjectMapper();
String requestBody = mapper.writeValueAsString(params);
List<NameValuePair> nameValuePairs = new LinkedList<>();
nameValuePairs.add(new BasicNameValuePair("JSON", requestBody));
String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs));
url = appendString(url, paramStr);
// url=url+"?JSON="+requestBody;
} catch (Exception e) {
throw new ApiException("getJson append params to [" + url + "] exception:" + e.getMessage());
}
}
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
try {
HttpGet httpGet = new HttpGet(url);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutMS).build();
httpGet.setConfig(requestConfig);
httpGet.addHeader("Content-Type", "application/json;charset=utf-8");
httpClient = HttpClients.createDefault();
response = httpClient.execute(httpGet);
int code = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String responseContent = EntityUtils.toString(entity, CONTENT_CHARSET);
Map<String,Object> resultMap=new HashMap<>();
resultMap.put("code",code);
resultMap.put("responseContent",responseContent);
return resultMap;
//response.close();
//httpClient.close();
// return responseContent;
} catch (Exception e) {
throw new ApiException("Request to [" + url + "] failed:" + e.getMessage());
} finally {
try {
if (response != null) {
response.close();
}
if (httpClient != null) {
httpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static String getJson(String url, Object params) throws ApiException { public static String getJson(String url, Object params) throws ApiException {
// 设置请求参数 // 设置请求参数
if (params != null) { if (params != null) {
...@@ -637,5 +704,17 @@ public class HttpHelper { ...@@ -637,5 +704,17 @@ public class HttpHelper {
stringBuffer.append(paramStr); stringBuffer.append(paramStr);
return stringBuffer.toString(); return stringBuffer.toString();
} }
public static boolean pingIP(String ipAddress, int timeout) {
try {
InetAddress address = InetAddress.getByName(ipAddress);
if (address.isReachable(timeout)) {
return true;
}
} catch (Exception e) {
log.error(e.toString());
}
return false;
}
} }
...@@ -6,21 +6,20 @@ import com.neotel.smfcore.common.exception.ValidateException; ...@@ -6,21 +6,20 @@ import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@Slf4j @Slf4j
public class UserCodeUtil { public class UserCodeUtil {
public static void main(String[] args) { public static void main(String[] args)
{
// FilePro(); // FilePro();
CreateUserCode( ); CreateUserCode( );
} }
public static void CreateUserCode( ) { public static void CreateUserCode( ) {
try { try {
String filePath = "F:\\"; String filePath = "F:\\";
String fileName="用户.csv"; String fileName="2024-11-20 09_24_35-.csv";
List<User> list = ReadFile(filePath+fileName); List<User> list = ReadFile(filePath+fileName);
//创建验证码 //创建验证码
for (int i = 0; i < list.size(); i++ for (int i = 0; i < list.size(); i++
...@@ -29,7 +28,7 @@ public class UserCodeUtil { ...@@ -29,7 +28,7 @@ public class UserCodeUtil {
list.get(i).setCheckCode(code); list.get(i).setCheckCode(code);
} }
String targetFile=filePath+"更新后_"+fileName; String targetFile=filePath+"New_"+fileName;
if(FileUtil.exist(targetFile)){ if(FileUtil.exist(targetFile)){
FileUtil.del(targetFile); FileUtil.del(targetFile);
} }
...@@ -43,7 +42,9 @@ public class UserCodeUtil { ...@@ -43,7 +42,9 @@ public class UserCodeUtil {
// //
// writer.writeRecord(userStr); // writer.writeRecord(userStr);
// } // }
String[] headers=new String[]{"用户ID","用户名", "状态", "创建日期","启用码"}; // String[] headers=new String[]{"用户ID","用户名", "状态", "创建日期","启用码"};
//ID User Name Satus Create Time Enable Code
String[] headers=new String[]{"ID","User Name", "Satus", "Create Time","Enable Code"};
writer.writeRecord(headers); writer.writeRecord(headers);
for (User user : for (User user :
list) { list) {
...@@ -69,6 +70,9 @@ public class UserCodeUtil { ...@@ -69,6 +70,9 @@ public class UserCodeUtil {
} }
protected static List<User> ReadFile(String fileURL ) throws Exception protected static List<User> ReadFile(String fileURL ) throws Exception
{ {
// ID UserName Enable CreateDate CheckCode
String[] headers=new String[]{"ID","User Name", "Satus", "Create Time","Enable Code"};
List<User> list=new ArrayList<User>(); List<User> list=new ArrayList<User>();
CsvReader csvRead = CsvReader.newReader(fileURL,"用户ID","ID"); CsvReader csvRead = CsvReader.newReader(fileURL,"用户ID","ID");
...@@ -107,7 +111,7 @@ public class UserCodeUtil { ...@@ -107,7 +111,7 @@ public class UserCodeUtil {
String langu=""; String langu="";
String roleId=""; String roleId="";
User user=new User(username,email,langu,roleId,"",true User user=new User(username,email,langu,roleId,"",true
,false,new Date(),new HashSet<>(),""); ,false,new Date(),new HashSet<>(),"","");
user.setId(id); user.setId(id);
user.setCreateDate(createData); user.setCreateDate(createData);
list.add(user); list.add(user);
......
package com.neotel.smfcore.core.apiInteraction.bean.query; package com.neotel.smfcore.core.apiInteraction.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status; import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
@Data @Data
public class ApiInteractionQuery { public class ApiInteractionQuery {
@QueryCondition(blurry = "url,param,result")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "createDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition
private Date requestDate; private Date requestDate;
//private String url; //private String url;
...@@ -15,7 +25,9 @@ public class ApiInteractionQuery { ...@@ -15,7 +25,9 @@ public class ApiInteractionQuery {
//private String param; //private String param;
//private String result; //private String result;
@QueryCondition
private String status = ApiInteraction_Status.OK; private String status ="";
@QueryCondition
private String type="";
} }
package com.neotel.smfcore.core.apiInteraction.controller; package com.neotel.smfcore.core.apiInteraction.controller;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.apiInteraction.bean.query.ApiInteractionQuery; import com.neotel.smfcore.core.apiInteraction.bean.query.ApiInteractionQuery;
import com.neotel.smfcore.core.apiInteraction.service.manager.IApiInteractionManager; import com.neotel.smfcore.core.apiInteraction.service.manager.IApiInteractionManager;
import com.neotel.smfcore.core.apiInteraction.service.po.ApiInteraction;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -13,6 +19,13 @@ import org.springframework.data.mongodb.core.query.Query; ...@@ -13,6 +19,13 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@Slf4j @Slf4j
@RequestMapping("/apiInteraction") @RequestMapping("/apiInteraction")
@RestController @RestController
...@@ -26,7 +39,45 @@ public class ApiInteractionController { ...@@ -26,7 +39,45 @@ public class ApiInteractionController {
@AnonymousAccess @AnonymousAccess
public PageData list(ApiInteractionQuery query, Pageable pageable){ public PageData list(ApiInteractionQuery query, Pageable pageable){
Query q = QueryHelp.getQuery(query); Query q = QueryHelp.getQuery(query);
return apiInteractionManager.findByPage(q,pageable); PageData<ApiInteraction> result= apiInteractionManager.findByPage(q,pageable);
return result;
} }
@ApiOperation("接口记录导出")
@RequestMapping("/download")
@AnonymousAccess
public void download(ApiInteractionQuery query, Pageable pageable, HttpServletResponse response, HttpServletRequest request)throws IOException {
Query q = QueryHelp.getQuery(query);
FileUtil.downloadExcel(q, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> header = new ArrayList<>();
Locale locale = request.getLocale();
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.equipApiMsg.updateTime", locale, "时间")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.equipApiMsg.request", locale, "参数")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.equipApiMsg.response", locale, "结果")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.equipApiMsg.url", locale, "地址")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.equipApiMsg.state", locale, "状态")));
return header;
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
PageData<ApiInteraction> apiInfoList = apiInteractionManager.findByPage(q,pageable);
List<List<Object>> dataList = new ArrayList<>();
for (ApiInteraction obj : apiInfoList.getContent()) {
List<Object> data = new ArrayList<>();
data.add(DateUtil.toDateString(obj.getRequestDate()));
data.add(obj.getParam());
data.add(obj.getResult());
data.add(obj.getUrl());
data.add(obj.getStatus());
dataList.add(data);
}
return dataList;
}
});
}
} }
...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.apiInteraction.service.po; ...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.apiInteraction.service.po;
import com.neotel.smfcore.common.base.BasePo; import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status; import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status;
import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -14,6 +15,17 @@ import java.util.Date; ...@@ -14,6 +15,17 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
public class ApiInteraction extends BasePo implements Serializable { public class ApiInteraction extends BasePo implements Serializable {
public ApiInteraction(Date date,String url,String param,String result,String status){
this.requestDate=date;
this.url=url;
this.param=param;
this.result=result;
this.status=status;
this.type=EquipmentType.NEXIM.name();
}
private Date requestDate; private Date requestDate;
private String url; private String url;
...@@ -23,4 +35,7 @@ public class ApiInteraction extends BasePo implements Serializable { ...@@ -23,4 +35,7 @@ public class ApiInteraction extends BasePo implements Serializable {
private String result; private String result;
private String status = ApiInteraction_Status.OK; private String status = ApiInteraction_Status.OK;
//设备类型,nexim,hanwa,pancim
private String type="";
} }
package com.neotel.smfcore.core.barcode.bean;
import lombok.Data;
@Data
public class BarcodeRuleDetail {
private String id;
private String ruleName;
private String rule;
}
package com.neotel.smfcore.core.barcode.rest; package com.neotel.smfcore.core.barcode.rest;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
...@@ -7,9 +9,12 @@ import com.neotel.smfcore.common.csv.CsvReader; ...@@ -7,9 +9,12 @@ import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.bean.BarcodeRule; import com.neotel.smfcore.core.barcode.bean.BarcodeRule;
import com.neotel.smfcore.core.barcode.bean.BarcodeRuleDetail;
import com.neotel.smfcore.core.barcode.bean.CodeBean; import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto; import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeRuleDetailDto;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeRuleDto; import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeRuleDto;
import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.BarcodeMapper; import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.BarcodeMapper;
import com.neotel.smfcore.core.barcode.rest.bean.query.BarcodeQueryCriteria; import com.neotel.smfcore.core.barcode.rest.bean.query.BarcodeQueryCriteria;
...@@ -39,10 +44,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -39,10 +44,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j @Slf4j
@RestController @RestController
...@@ -123,9 +125,34 @@ public class BarcodeController { ...@@ -123,9 +125,34 @@ public class BarcodeController {
public BarcodeRuleDto getRules() { public BarcodeRuleDto getRules() {
Settings settings = dataCache.getSettings(); Settings settings = dataCache.getSettings();
BarcodeRuleDto ruleDto = new BarcodeRuleDto(); BarcodeRuleDto ruleDto = new BarcodeRuleDto();
ruleDto.setCodeRuleList(settings.getCodeRuleList()); List<String> codeRuleList = settings.getCodeRuleList();
ruleDto.setCodeRuleList(codeRuleList);
ruleDto.setPageHeight(settings.getPageHeight()); ruleDto.setPageHeight(settings.getPageHeight());
ruleDto.setPageWidth(settings.getPageWidth()); ruleDto.setPageWidth(settings.getPageWidth());
//兼容以前的
Map<String, BarcodeRuleDetail> barcodeRuleMap = settings.getBarcodeRuleMap();
if (barcodeRuleMap.isEmpty()) {
if (codeRuleList != null && !codeRuleList.isEmpty()) {
for (String codeRule : codeRuleList) {
BarcodeRuleDetail detail = new BarcodeRuleDetail();
detail.setId(RandomUtil.randomString(10));
detail.setRule(codeRule);
barcodeRuleMap.put(detail.getId(),detail);
}
}
settings.setBarcodeRuleMap(barcodeRuleMap);
dataCache.updateSettings(settings);
}
List<BarcodeRuleDetailDto> detailList = new ArrayList<>();
for (BarcodeRuleDetail detail : barcodeRuleMap.values()) {
BarcodeRuleDetailDto dto = new BarcodeRuleDetailDto();
dto.setId(detail.getId());
dto.setRule(detail.getRule());
dto.setRuleName(detail.getRuleName());
detailList.add(dto);
}
ruleDto.setCodeRuleDetailList(detailList);
return ruleDto; return ruleDto;
} }
...@@ -152,6 +179,25 @@ public class BarcodeController { ...@@ -152,6 +179,25 @@ public class BarcodeController {
settings.setCodeRuleList(params.getCodeRuleList()); settings.setCodeRuleList(params.getCodeRuleList());
settings.setPageHeight(params.getPageHeight()); settings.setPageHeight(params.getPageHeight());
settings.setPageWidth(params.getPageWidth()); settings.setPageWidth(params.getPageWidth());
Map<String, BarcodeRuleDetail> barcodeRuleMap = new HashMap<>();
List<BarcodeRuleDetailDto> codeRuleDetailList = params.getCodeRuleDetailList();
if(codeRuleDetailList != null && !codeRuleDetailList.isEmpty()) {
for (BarcodeRuleDetailDto detailDto : codeRuleDetailList) {
String id = detailDto.getId();
if (StringUtils.isEmpty(id)) {
id = RandomUtil.randomString(10);
}
BarcodeRuleDetail detail = new BarcodeRuleDetail();
detail.setRule(detailDto.getRule());
detail.setRuleName(detailDto.getRuleName());
detail.setId(detailDto.getId());
barcodeRuleMap.put(id, detail);
}
}
settings.setBarcodeRuleMap(barcodeRuleMap);
dataCache.updateSettings(settings); dataCache.updateSettings(settings);
//修改设置 //修改设置
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
...@@ -189,9 +235,12 @@ public class BarcodeController { ...@@ -189,9 +235,12 @@ public class BarcodeController {
@ApiOperation("根据条码信息获取条码规则") @ApiOperation("根据条码信息获取条码规则")
@PostMapping(value = "getBarcodeRule") @PostMapping(value = "getBarcodeRule")
@AnonymousAccess //@AnonymousAccess
public ResultBean getBarcodeRule(@RequestBody Map<String, String> paramMap) { public ResultBean getBarcodeRule(@RequestBody Map<String, String> paramMap) {
String codeStr = paramMap.get("codeStr"); String codeStr = paramMap.get("codeStr");
if(ObjectUtil.isEmpty(codeStr)){
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"codeStr"} );
}
paramMap.remove("codeStr"); paramMap.remove("codeStr");
String ruleStr = BarcodeRule.toCodeRule(codeStr, paramMap); String ruleStr = BarcodeRule.toCodeRule(codeStr, paramMap);
return ResultBean.newOkResult(ruleStr); return ResultBean.newOkResult(ruleStr);
...@@ -200,16 +249,27 @@ public class BarcodeController { ...@@ -200,16 +249,27 @@ public class BarcodeController {
@ApiOperation("获取条码内容") @ApiOperation("获取条码内容")
@PostMapping("/getBarCodeInfo") @PostMapping("/getBarCodeInfo")
@AnonymousAccess //@AnonymousAccess
public ResultBean getBarCodeInfo(@RequestBody Map<String, String> paramMap) { public ResultBean getBarCodeInfo(@RequestBody Map<String, String> paramMap) {
//获取条码内容 //获取条码内容
String codeStr = paramMap.get("code"); String codeStr = paramMap.get("code");
List<BarcodeRule> barcodeRuleList = codeResolve.getBarcodeRuleList(); if (ObjectUtil.isEmpty(codeStr)) {
if (barcodeRuleList != null && !barcodeRuleList.isEmpty()) { codeStr = "";
for (BarcodeRule barcodeRule : barcodeRuleList) { }
CodeBean codeBean = barcodeRule.toCodeBean(codeStr); Settings settings = dataCache.getSettings();
if (codeBean.getBarcode() != null) { Map<String, BarcodeRuleDetail> barcodeRuleMap = settings.getBarcodeRuleMap();
return ResultBean.newOkResult(codeBean.getBarcode()); if (barcodeRuleMap != null && !barcodeRuleMap.isEmpty()) {
for (BarcodeRuleDetail detail : barcodeRuleMap.values()) {
String rule = detail.getRule();
if (StringUtils.isNotEmpty(rule)) {
BarcodeRule barcodeRule = BarcodeRule.newRule(rule);
CodeBean codeBean = barcodeRule.toCodeBean(codeStr);
if (codeBean.getBarcode() != null) {
Barcode barcode = codeBean.getBarcode();
BarcodeDto barcodeDto = barcodeMapper.toDto(barcode);
barcodeDto.setOtherField1(detail.getRuleName());
return ResultBean.newOkResult(barcodeDto);
}
} }
} }
} else { } else {
...@@ -218,6 +278,29 @@ public class BarcodeController { ...@@ -218,6 +278,29 @@ public class BarcodeController {
return ResultBean.newErrorResult(1, "smfcore.error.barcode.invalid", "未找到有效条码"); return ResultBean.newErrorResult(1, "smfcore.error.barcode.invalid", "未找到有效条码");
} }
@ApiOperation("获取条码内容(传入条码规则)")
@PostMapping("/getBarCodeInfoByRule")
@AnonymousAccess
public ResultBean getBarCodeInfoByRule(@RequestBody Map<String, String> paramMap) {
//获取条码内容
String codeStr = paramMap.get("code");
if(ObjectUtil.isEmpty(codeStr)){
codeStr="";
}
//传入的条码规则
String ruleStr = paramMap.get("rule");
BarcodeRule barcodeRule = BarcodeRule.newRule(ruleStr);
if (barcodeRule.isValidRule()){
CodeBean codeBean = barcodeRule.toCodeBean(codeStr);
if (codeBean.getBarcode() != null) {
return ResultBean.newOkResult(codeBean.getBarcode());
}
} else {
return ResultBean.newErrorResult(1, "smfcore.error.barcode.noRules", "解析规则未定义");
}
return ResultBean.newErrorResult(1, "smfcore.error.barcode.invalid", "未找到有效条码");
}
protected String handleBarcode(String fileURL) throws Exception { protected String handleBarcode(String fileURL) throws Exception {
log.info("开始读取文件:" + fileURL); log.info("开始读取文件:" + fileURL);
......
package com.neotel.smfcore.core.barcode.rest.bean.dto;
import com.neotel.smfcore.core.barcode.bean.BarcodeRuleDetail;
import lombok.Data;
@Data
public class BarcodeRuleDetailDto extends BarcodeRuleDetail {
}
...@@ -22,4 +22,7 @@ public class BarcodeRuleDto implements Serializable { ...@@ -22,4 +22,7 @@ public class BarcodeRuleDto implements Serializable {
@ApiModelProperty("打印条码的纸张高度") @ApiModelProperty("打印条码的纸张高度")
private int pageHeight = 160; private int pageHeight = 160;
@ApiModelProperty("具体规则详情")
private List<BarcodeRuleDetailDto> codeRuleDetailList = Lists.newArrayList();
} }
...@@ -763,6 +763,9 @@ public class StatusBean { ...@@ -763,6 +763,9 @@ public class StatusBean {
} else if (msg.startsWith("W=")) { } else if (msg.startsWith("W=")) {
msgType = MessageType.WARNING.name(); msgType = MessageType.WARNING.name();
msg = msg.substring(2); msg = msg.substring(2);
} else if (msg.startsWith("C=")){
msgType = MessageType.CRITICAL.name();
msg = msg.substring(2);
} }
if (msgArray.length == 1) { if (msgArray.length == 1) {
......
...@@ -31,6 +31,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStorageManager; ...@@ -31,6 +31,7 @@ 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.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.dao.IAlarmInfoDao; import com.neotel.smfcore.core.system.service.dao.IAlarmInfoDao;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.AlarmInfo; import com.neotel.smfcore.core.system.service.po.AlarmInfo;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
...@@ -82,6 +83,9 @@ public class DeviceController { ...@@ -82,6 +83,9 @@ public class DeviceController {
@Autowired @Autowired
private IBarcodeManager barcodeManager; private IBarcodeManager barcodeManager;
@Autowired
private IDataLogManager dataLogManager;
/** /**
* 权限验证API列表 * 权限验证API列表
*/ */
...@@ -423,9 +427,15 @@ public class DeviceController { ...@@ -423,9 +427,15 @@ public class DeviceController {
boolean cancelResult = taskService.cancelTask(task.getId()); boolean cancelResult = taskService.cancelTask(task.getId());
log.info("客户端取消["+codeStr+"]的未执行完成的出库任务结果:" + cancelResult); log.info("客户端取消["+codeStr+"]的未执行完成的出库任务结果:" + cancelResult);
return ResultBean.newOkResult(cancelResult); return ResultBean.newOkResult(cancelResult);
}else{ } else {
if (!task.isFinished() && !task.isCancel()) {
return ResultBean.newErrorResult(2005, "smfcore.cancelOutTask.taskHasEnd","客户端取消入库任务[{0}]失败:任务已结束或已取消", new String[]{codeStr }); log.info(task.getBarcode()+",库位号为:"+task.getPosName()+",状态为:"+task.getStatus()+"改成关闭状态");
task.setClosed(true);
dataLogManager.save(task);
taskService.removeFinishedTask(task);
} else {
return ResultBean.newErrorResult(2005, "smfcore.cancelOutTask.taskHasEnd", "客户端取消入库任务[{0}]失败:任务已结束或已取消", new String[]{codeStr});
}
} }
// else{ // else{
// //禁用库位 // //禁用库位
......
package com.neotel.smfcore.core.equipment.enums; package com.neotel.smfcore.core.equipment.enums;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import java.util.List; import java.util.List;
...@@ -16,31 +15,35 @@ public enum EquipmentType { ...@@ -16,31 +15,35 @@ public enum EquipmentType {
AUTO(), AUTO(),
/** /**
* 1 扫码贴标 * 扫码贴标
*/ */
@Deprecated
NEOSCAN(), NEOSCAN(),
NS100(),
/** /**
* NS200 * NS200
*/ */
NS200(), NS200(),
/** /**
* 2 点料机 * 点料机
*/ */
COUNTING(), // COUNTING(),
NEOCOUNTER(),
/** /**
* 3 插件机 * 插件机
*/ */
NEOSTATION(), NEOSTATION(),
/** // /**
* 4 FUJINEOLINK // * 4 FUJINEOLINK
*/ // */
FUJINEOLINK(), // FUJINEOLINK(),
/** /**
* 5 PANACIMNEOLINK * 5 PANACIMNEOLINK
...@@ -55,7 +58,7 @@ public enum EquipmentType { ...@@ -55,7 +58,7 @@ public enum EquipmentType {
/** /**
* 韩华 * 韩华
*/ */
HANWHA(), T_SOLUTION(),
/** /**
* NEXIM * NEXIM
...@@ -64,6 +67,16 @@ public enum EquipmentType { ...@@ -64,6 +67,16 @@ public enum EquipmentType {
public static List<EquipmentType> availableTypeList(){ public static List<EquipmentType> availableTypeList(){
return Lists.newArrayList(AUTO,NEOSCAN,NS200,COUNTING,NEOSTATION,FUJINEOLINK,PANACIMNEOLINK,AGV,HANWHA,NEXIM); return Lists.newArrayList(AUTO,NS100,NS200,NEOCOUNTER,PANACIMNEOLINK,AGV,T_SOLUTION,NEXIM);
}
public static List<String> apiTypeList(){
return Lists.newArrayList(T_SOLUTION.name(),PANACIMNEOLINK.name(),NEXIM.name());
}
public static List<String> nsList(){
return Lists.newArrayList(NS100.name(),NS200.name());
} }
} }
package com.neotel.smfcore.core.equipment.rest;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import com.neotel.smfcore.core.equipment.rest.dto.EquipConfigInfoDto;
import com.neotel.smfcore.core.equipment.rest.mapstruct.EquipConfigInfoMapper;
import com.neotel.smfcore.core.equipment.util.EquipConfigUtil;
import com.neotel.smfcore.core.equipment.util.bean.EquipConfigInfo;
import com.neotel.smfcore.custom.hanwha.handler.TMSApis;
import com.neotel.smfcore.custom.hanwha.handler.TMSCommunicator;
import com.neotel.smfcore.custom.panacim.PanaApiController;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@RequestMapping("/equipConfig")
public class EquipConfigController {
@Autowired
private EquipConfigInfoMapper equipConfigInfoMapper;
@Autowired
private EquipConfigUtil equipConfigUtil;
@Autowired
private PanaApiController panaApiController;
@Autowired
private TMSApis tmsApis;
@Autowired
private TMSCommunicator tmsCommunicator;
@ApiOperation("获取配置信息")
@GetMapping("/getConfig")
public ResultBean getCacheConfig(String equipType) {
EquipConfigInfo configInfo= equipConfigUtil.getConfigCache(equipType);
return ResultBean.newOkResult(equipConfigInfoMapper.toDto(configInfo));
}
@ApiOperation("更改配置信息")
@PostMapping("/updateConfig")
public ResultBean updateConfig(@RequestBody EquipConfigInfo cacheConfig) {
if (ObjectUtil.isEmpty(cacheConfig.getEquipType())) {
return ResultBean.newErrorResult(1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"equipType"});
}
equipConfigUtil.updateConfigCache(cacheConfig);
return ResultBean.newOkResult("");
}
@ApiOperation("测试接口是否连通")
@PostMapping("/apiTest")
public ResultBean apiTest(@RequestBody EquipConfigInfoDto configInfoDto) {
if (ObjectUtil.isEmpty(configInfoDto.getEquipType())) {
return ResultBean.newErrorResult(1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"equipType"});
}
//判断测试哪个接口
boolean result = false;
if (configInfoDto.equipType.equals(EquipmentType.T_SOLUTION.name())) {
EquipConfigInfo config = equipConfigInfoMapper.toEntity(configInfoDto);
String ip = config.GetConfigValue("host", "");
if (ObjectUtil.isEmpty(ip)) {
return ResultBean.newErrorResult(1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"host"});
}
if (configInfoDto.apiTestKey.equals("webPort")) {
int webPort = config.GetConfigValue("webPort", 0);
String webUrl = String.format("ws://%s:%d/", ip, webPort);
if (ObjectUtil.isEmpty(webPort) || webPort == 0) {
return ResultBean.newErrorResult(1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"webPort"});
}
if (TMSCommunicator.wsURL.equals(webUrl)) {
result = tmsCommunicator.isConnected();
} else {
result = tmsApis.TestWebSocket(ip, webPort);
}
} else if (configInfoDto.apiTestKey.equals("host")) {
result = HttpHelper.pingIP(ip, 1000);
} else {
int apiPort = config.GetConfigValue("apiPort", 0);
if (ObjectUtil.isEmpty(apiPort) || apiPort == 0) {
return ResultBean.newErrorResult(1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"apiPort"});
}
result = tmsApis.TestApi(ip, apiPort);
}
} else if (configInfoDto.equipType.equals(EquipmentType.PANACIMNEOLINK.name())) {
if (configInfoDto.apiTestKey.equals(Constants.Cache_PanaCIMIP)) {
result = panaApiController.TestIp(1000);
} else {
result = panaApiController.TestApi();
}
}
if (result) {
return ResultBean.newOkResult("OK");
} else {
return ResultBean.newErrorResult(-1, "smfcore.equipconfig.connectTimeout", "连接超时");
}
}
}
...@@ -5,12 +5,15 @@ import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto; ...@@ -5,12 +5,15 @@ import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.equipment.enums.EquipmentType; import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import com.neotel.smfcore.core.equipment.rest.dto.EquipGroupDto;
import com.neotel.smfcore.core.equipment.rest.dto.EquipKanbanDto;
import com.neotel.smfcore.core.equipment.rest.dto.NsViewDto; import com.neotel.smfcore.core.equipment.rest.dto.NsViewDto;
import com.neotel.smfcore.core.equipment.util.EquipmentCache; import com.neotel.smfcore.core.equipment.util.EquipmentCache;
import com.neotel.smfcore.core.equipment.bean.EquipMsg; import com.neotel.smfcore.core.equipment.bean.EquipMsg;
import com.neotel.smfcore.core.equipment.bean.EquipStatusBean; import com.neotel.smfcore.core.equipment.bean.EquipStatusBean;
import com.neotel.smfcore.core.equipment.rest.dto.EquipStatusDto; import com.neotel.smfcore.core.equipment.rest.dto.EquipStatusDto;
import com.neotel.smfcore.core.equipment.service.po.Equipment; import com.neotel.smfcore.core.equipment.service.po.Equipment;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.enums.MessageType; import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
...@@ -19,6 +22,7 @@ import com.neotel.smfcore.core.system.util.EquipStatusUtil; ...@@ -19,6 +22,7 @@ import com.neotel.smfcore.core.system.util.EquipStatusUtil;
import com.neotel.smfcore.custom.fuji.bean.FujiConfig; import com.neotel.smfcore.custom.fuji.bean.FujiConfig;
import com.neotel.smfcore.custom.fuji.config.FujiCacheConfig; import com.neotel.smfcore.custom.fuji.config.FujiCacheConfig;
import com.neotel.smfcore.custom.hanwha.handler.TMSCommunicator; import com.neotel.smfcore.custom.hanwha.handler.TMSCommunicator;
import com.neotel.smfcore.custom.panacim.PanaApiController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -31,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -31,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
@Slf4j @Slf4j
...@@ -49,10 +54,74 @@ public class EquipViewController { ...@@ -49,10 +54,74 @@ public class EquipViewController {
@Autowired @Autowired
private TMSCommunicator tmsCommunicator; private TMSCommunicator tmsCommunicator;
// @ApiOperation("获取看板数据")
// @GetMapping
// @PreAuthorize("@el.check('equipmentView:info')")
// public List<EquipStatusDto> info(HttpServletRequest servletRequest) {
//
// Locale locale=servletRequest.getLocale();
// List<EquipStatusDto> resultList=new ArrayList<>();
// Map<String,Equipment> allEquipList= equipmentCache.getAllEquipment();
// for (Equipment equip :
// allEquipList.values()) {
// EquipStatusDto dto=new EquipStatusDto(equip.getId(),equip.getName(),equip.getCid(),false,0,"",equip.getType(),false);
// if((!equip.isAPIEquip())|| (equip.isActivate())){
// dto.setActivate(true);
// }
// EquipStatusBean bean= EquipStatusUtil.getStatusBean(equip.getCid());
// if(bean!=null){
// if(bean.timeOut()){
// dto.setOnLine(false);
// }else{
// dto.setOnLine(true);
// dto.setStatus(bean.getStatus());
// dto.setMsg(bean.getShowMsg(locale));
// }
// }
//
// if(equip.getType().equalsIgnoreCase(EquipmentType.T_SOLUTION.name())){
// if(tmsCommunicator.isConnected()){
// dto.setOnLine(true);
// dto.setStatus(1);
// }
// } else if (equip.getType().equalsIgnoreCase(EquipmentType.NEXIM.name())){
// if(dto.isActivate()) {
// //配置了且激活就显示在线
// FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name);
// if (config != null) {
//// dto.setStatus(1);
// }
// }
// }
//
// resultList.add(dto);
// }
//
// //再把NLL加进去
// Collection<Storage> storages = dataCache.getAllStorage().values();
// for (Storage storage : storages) {
// if (storage.getType().equals(DeviceType.NLL.name())){
// EquipStatusDto dto=new EquipStatusDto(storage.getId(),storage.getName(),storage.getCid(),false,0,"",storage.getType(),false);
// StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
// if (bean == null || bean.timeOut()){
// dto.setOnLine(false);
// dto.setStatus(0);
// } else {
// dto.setOnLine(true);
// dto.setStatus(bean.getStatus());
// }
// resultList.add(dto);
// }
// }
// return resultList;
// }
@ApiOperation("获取看板数据") @ApiOperation("获取看板数据")
@GetMapping @GetMapping
@PreAuthorize("@el.check('equipmentView:info')") @PreAuthorize("@el.check('equipmentView:info')")
public List<EquipStatusDto> info(HttpServletRequest servletRequest) { public EquipKanbanDto info(HttpServletRequest servletRequest) {
Locale locale=servletRequest.getLocale(); Locale locale=servletRequest.getLocale();
List<EquipStatusDto> resultList=new ArrayList<>(); List<EquipStatusDto> resultList=new ArrayList<>();
...@@ -60,6 +129,9 @@ public class EquipViewController { ...@@ -60,6 +129,9 @@ public class EquipViewController {
for (Equipment equip : for (Equipment equip :
allEquipList.values()) { allEquipList.values()) {
EquipStatusDto dto=new EquipStatusDto(equip.getId(),equip.getName(),equip.getCid(),false,0,"",equip.getType(),false); EquipStatusDto dto=new EquipStatusDto(equip.getId(),equip.getName(),equip.getCid(),false,0,"",equip.getType(),false);
if((!equip.isAPIEquip())|| (equip.isActivate())){
dto.setActivate(true);
}
EquipStatusBean bean= EquipStatusUtil.getStatusBean(equip.getCid()); EquipStatusBean bean= EquipStatusUtil.getStatusBean(equip.getCid());
if(bean!=null){ if(bean!=null){
if(bean.timeOut()){ if(bean.timeOut()){
...@@ -71,38 +143,71 @@ public class EquipViewController { ...@@ -71,38 +143,71 @@ public class EquipViewController {
} }
} }
if(equip.getType().equalsIgnoreCase(EquipmentType.HANWHA.name())){ if(equip.getType().equalsIgnoreCase(EquipmentType.T_SOLUTION.name())){
if(tmsCommunicator.isConnected()){ if(tmsCommunicator.isConnected()){
dto.setOnLine(true); dto.setOnLine(true);
dto.setStatus(1); dto.setStatus(1);
} }
} else if (equip.getType().equalsIgnoreCase(EquipmentType.NEXIM.name())){ } else if (equip.getType().equalsIgnoreCase(EquipmentType.NEXIM.name())){
FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name); if(dto.isActivate()) {
if (config != null){ //配置了且激活就显示在线
dto.setActivate(true); FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name);
if (config != null) {
// dto.setStatus(1);
}
}
}else if(equip.getType().equalsIgnoreCase(EquipmentType.PANACIMNEOLINK.name())) {
if (PanaApiController.isOnLine()) {
dto.setOnLine(true);
dto.setStatus(1);
} }
} }
resultList.add(dto); resultList.add(dto);
} }
//
// //再把NLL加进去
// Collection<Storage> storages = dataCache.getAllStorage().values();
// for (Storage storage : storages) {
// if (storage.getType().equals(DeviceType.NLL.name())){
// EquipStatusDto dto=new EquipStatusDto(storage.getId(),storage.getName(),storage.getCid(),false,0,"",storage.getType(),false);
// StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
// if (bean == null || bean.timeOut()){
// dto.setOnLine(false);
// dto.setStatus(0);
// } else {
// dto.setOnLine(true);
// dto.setStatus(bean.getStatus());
// }
// resultList.add(dto);
// }
// }
//再把NLL加进去 // 把 pana,nexim,t-solution放到 Pick and Place Machine 里面
Collection<Storage> storages = dataCache.getAllStorage().values(); // Neo Scan 包括 Neo Scan 和 Scan Plus
for (Storage storage : storages) { List<EquipGroupDto> list=new ArrayList<>();
if (storage.getType().equals(DeviceType.NLL.name())){ //三个组
EquipStatusDto dto=new EquipStatusDto(storage.getId(),storage.getName(),storage.getCid(),false,0,"",storage.getType(),false); List<EquipStatusDto> apiList=resultList.stream().filter(dto->EquipmentType.apiTypeList().contains(dto.getType())).collect(Collectors.toList());
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid()); if(apiList.size()>0){
if (bean == null || bean.timeOut()){ EquipGroupDto dto=new EquipGroupDto(MessageUtils.getText("smfcore.equipment.view.apigroup",locale,"Pick and Place Machine"),apiList);
dto.setOnLine(false); list.add(dto);
dto.setStatus(0); }
} else { List<EquipStatusDto> nsList=resultList.stream().filter(dto->EquipmentType.nsList().contains(dto.getType())).collect(Collectors.toList());
dto.setOnLine(true); if(nsList.size()>0){
dto.setStatus(bean.getStatus()); EquipGroupDto dto=new EquipGroupDto(MessageUtils.getText("smfcore.equipment.view.nsgroup",locale,"Neo Scan"),nsList);
} list.add(dto);
resultList.add(dto);
}
} }
return resultList; List<String> otherType= new ArrayList<>();
otherType.addAll(EquipmentType.nsList());
otherType.addAll(EquipmentType.apiTypeList() );
List<EquipStatusDto> otherList=resultList.stream().filter(dto->otherType.contains(dto.getType())==false).collect(Collectors.toList());
if(otherList.size()>0){
EquipGroupDto dto=new EquipGroupDto("",otherList);
list.add(dto);
}
EquipKanbanDto ret= new EquipKanbanDto(list);
return ret;
} }
@ApiOperation("获取NS看板数据") @ApiOperation("获取NS看板数据")
......
package com.neotel.smfcore.core.equipment.rest; package com.neotel.smfcore.core.equipment.rest;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
...@@ -22,6 +24,7 @@ import lombok.RequiredArgsConstructor; ...@@ -22,6 +24,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -57,6 +60,13 @@ public class EquipmentController { ...@@ -57,6 +60,13 @@ public class EquipmentController {
Query query= QueryHelp.getQuery(criteria); Query query= QueryHelp.getQuery(criteria);
PageData<Equipment> pages = equipmentManager.findByPage(query, pageable); PageData<Equipment> pages = equipmentManager.findByPage(query, pageable);
List<EquipmentDto> equipmentDtos =equipmentMapper.toDto(pages.getContent()); List<EquipmentDto> equipmentDtos =equipmentMapper.toDto(pages.getContent());
for (int i=0;i<equipmentDtos.size();i++){
if(EquipmentType.apiTypeList().contains(equipmentDtos.get(i).getType())){
equipmentDtos.get(i).setAPIEquip(true);
}
}
return new PageData(equipmentDtos,pages.getTotalElements()); return new PageData(equipmentDtos,pages.getTotalElements());
} }
...@@ -82,6 +92,11 @@ public class EquipmentController { ...@@ -82,6 +92,11 @@ public class EquipmentController {
} }
} }
} }
if(equipment.isAPIEquip()){
equipment.setActivate(false);
}else{
equipment.setActivate(true);
}
equipment = equipmentManager.save(equipment); equipment = equipmentManager.save(equipment);
equipmentCache.reloadEquipment(equipment,equipment.getCid()); equipmentCache.reloadEquipment(equipment,equipment.getCid());
return new ResponseEntity<>(HttpStatus.CREATED); return new ResponseEntity<>(HttpStatus.CREATED);
...@@ -104,6 +119,7 @@ public class EquipmentController { ...@@ -104,6 +119,7 @@ public class EquipmentController {
} if(StringUtils.isEmpty(equipment.getType())){ } if(StringUtils.isEmpty(equipment.getType())){
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"type"} ); throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"type"} );
} }
String oldCid="";
for (Equipment equ : equipmentCache.getAllEquipment().values()) { for (Equipment equ : equipmentCache.getAllEquipment().values()) {
if (!equipment.getId().equals(equ.getId())){ if (!equipment.getId().equals(equ.getId())){
if(equipment.getName().equals(equ.getName())){ if(equipment.getName().equals(equ.getName())){
...@@ -112,10 +128,15 @@ public class EquipmentController { ...@@ -112,10 +128,15 @@ public class EquipmentController {
if(equipment.getCid().equals(equ.getCid())){ if(equipment.getCid().equals(equ.getCid())){
throw new ValidateException("smfcore.valueAlreadyExist","{0}[{1}]已存在",new String[]{"cid",equipment.getCid()}); throw new ValidateException("smfcore.valueAlreadyExist","{0}[{1}]已存在",new String[]{"cid",equipment.getCid()});
} }
}else{
oldCid=equ.getCid();
} }
} }
if(ObjectUtil.isEmpty(oldCid)){
oldCid=equipment.getCid();
}
equipmentManager.save(equipment); equipmentManager.save(equipment);
equipmentCache.reloadEquipment(equipment,equipment.getCid()); equipmentCache.reloadEquipment(equipment,oldCid);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
...@@ -153,4 +174,48 @@ public class EquipmentController { ...@@ -153,4 +174,48 @@ public class EquipmentController {
return allList; return allList;
} }
@RequestMapping(value = "/activation")
@AnonymousAccess
public ResultBean activation( @RequestParam String cid) {
Criteria c = Criteria.where("cid").is(cid);
List<Equipment> equipmentList = equipmentManager.findByQuery(new Query(c));
if (equipmentList == null || equipmentList.size() < 0) {
return ResultBean.newErrorResult(1, "smfcore.msg.noCid", "操作失败,未找到CID");
}
Equipment equipment = equipmentList.get(0);
if (equipment.isActivate()) {
return ResultBean.newOkResult("OK");
}
equipment.setActivate(true);
equipmentManager.save(equipment);
equipmentCache.reloadEquipment(equipment, equipment.getCid());
log.info("设备cid=" + cid + ", equipType=" + equipment.getType() + " setActivate(true)成功");
return ResultBean.newOkResult("OK");
}
@RequestMapping(value = "/deactivation")
@AnonymousAccess
public ResultBean deactivation( @RequestParam String cid) {
Criteria c = Criteria.where("cid").is(cid);
List<Equipment> equipmentList = equipmentManager.findByQuery(new Query(c));
if (equipmentList == null || equipmentList.size() < 0) {
return ResultBean.newErrorResult(1, "smfcore.msg.noCid", "操作失败,未找到CID");
}
Equipment equipment = equipmentList.get(0);
if(!equipment.isAPIEquip()){
return ResultBean.newErrorResult(1, "smfcore.operationFailure", "操作失败");
}
if (!equipment.isActivate()) {
return ResultBean.newOkResult("OK");
}
equipment.setActivate(false);
equipmentManager.save(equipment);
equipmentCache.reloadEquipment(equipment, equipment.getCid());
log.info("设备cid=" + cid + ", equipType=" + equipment.getType() + " setActivate(false)成功");
return ResultBean.newOkResult("OK");
}
} }
package com.neotel.smfcore.core.equipment.rest.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.LinkedHashMap;
@Data
public class EquipConfigInfoDto {
@ApiModelProperty("设备类型")
public String equipType = "";
@ApiModelProperty("启用API连接 默认不启用")
public boolean enableApi;
@ApiModelProperty("配置列表")
public LinkedHashMap<String, Object> apiConfigMap;
@ApiModelProperty("测试连接的Key")
public String apiTestKey;
}
package com.neotel.smfcore.core.equipment.rest.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
public class EquipGroupDto {
@ApiModelProperty("组名称")
private String groupName;
@ApiModelProperty("设备列表")
private List<EquipStatusDto> equipList;
// @ApiModelProperty("ID")
// private String groupId;
// @ApiModelProperty("组类型:=1时点击组名称进入料架分组界面")
// private int groupType;
}
\ No newline at end of file \ No newline at end of file
package com.neotel.smfcore.core.equipment.rest.dto;
import com.neotel.smfcore.core.kanban.rest.bean.dto.GroupStatusDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EquipKanbanDto {
@ApiModelProperty("组列表")
private List<EquipGroupDto> groupList;
}
...@@ -20,6 +20,10 @@ public class EquipmentDto { ...@@ -20,6 +20,10 @@ public class EquipmentDto {
@ApiModelProperty("是否可用") @ApiModelProperty("是否可用")
private boolean available = true; private boolean available = true;
@ApiModelProperty("是否激活")
private boolean activate=true;
@ApiModelProperty("是否是第三方对接设备")
private boolean aPIEquip=false;
private String id; private String id;
} }
package com.neotel.smfcore.core.equipment.rest.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.equipment.rest.dto.EquipConfigInfoDto;
import com.neotel.smfcore.core.equipment.util.bean.EquipConfigInfo;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface EquipConfigInfoMapper extends BaseMapper<EquipConfigInfoDto, EquipConfigInfo> {
}
...@@ -27,7 +27,25 @@ public class Equipment extends BasePo implements Serializable { ...@@ -27,7 +27,25 @@ public class Equipment extends BasePo implements Serializable {
*/ */
private boolean available = true; private boolean available = true;
/**
* 是否激活
*/
private boolean activate=true;
public boolean isNEOSCAN() { public boolean isNEOSCAN() {
return EquipmentType.NEOSCAN.name().equals(type)||EquipmentType.NS200.name().equals(type); return EquipmentType.NEOSCAN.name().equals(type)||EquipmentType.NS200.name().equals(type)||EquipmentType.NS100.name().equals(type);
}
/**
* 是否是接口设备
* @return
*/
public boolean isAPIEquip() {
if(EquipmentType.apiTypeList().contains(type)){
return true;
}
return false;
} }
} }
package com.neotel.smfcore.core.equipment.util;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import com.neotel.smfcore.core.equipment.util.bean.EquipConfigInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedHashMap;
@Slf4j
@Service
public class EquipConfigUtil {
@Autowired
private DataCache dataCache;
private static final String Equip_Config_Cache = "Equip_Config_Cache";
public static String CacheStr(String equipType){
return Equip_Config_Cache+"_"+equipType;
}
public void updateConfigCache(EquipConfigInfo cacheConfig) {
String key=CacheStr(cacheConfig.getEquipType());
EquipConfigInfo configInfo = getConfigCache(cacheConfig.getEquipType());
configInfo.setEnableApi(cacheConfig.isEnableApi());
configInfo.setApiConfigMap(cacheConfig.getApiConfigMap());
dataCache.updateCache(key, configInfo);
log.info("updateConfigCache [" + key + "=" + JsonUtil.toJsonStr(configInfo) + "]");
}
public EquipConfigInfo getConfigCache(String equipType) {
String key=CacheStr(equipType);
EquipConfigInfo configInfo = dataCache.getCache(key);
if (configInfo == null) {
configInfo = new EquipConfigInfo();
configInfo.setEquipType(equipType);
configInfo.setEnableApi(false);
if(equipType.equals(EquipmentType.T_SOLUTION.name())){
LinkedHashMap<String,Object> defMap=new LinkedHashMap<>();
defMap.put("host","");
defMap.put("webPort",1337);
defMap.put("apiPort",8082);
defMap.put("singleOrder",true);
configInfo.setApiConfigMap(defMap);
}else if(equipType.equals(EquipmentType.PANACIMNEOLINK.name())){
//默认启用
configInfo.setEnableApi(true);
}
}
if(equipType.equals(EquipmentType.PANACIMNEOLINK.name())) {
//增加配置
LinkedHashMap<String, Object> defMap = new LinkedHashMap<>();
String ip=dataCache.getCache(Constants.Cache_PanaCIMIP);
if(ip==null){
ip="";
}
String port=dataCache.getCache(Constants.Cache_PanaCIMPort);
if(port==null){
port="";
}
defMap.put("PanaCIMIP", ip);
defMap.put("PanaCIMPort", port);
configInfo.setApiConfigMap(defMap);
}
return configInfo;
}
}
package com.neotel.smfcore.core.equipment.util.bean;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.LinkedHashMap;
import java.util.Map;
@Data
@Slf4j
public class EquipConfigInfo {
public String equipType = "";
/**
* 启用API连接 默认不启用
*/
public boolean enableApi;
/**
* 配置列表
*/
public LinkedHashMap<String, Object> apiConfigMap;
//韩华配置key: host ,webPort, apiPort,singleOrder
public <T> T GetConfigValue(String key,Object defValue) {
try {
if (apiConfigMap != null) {
Object result = apiConfigMap.get(key);
if (result instanceof String && defValue instanceof Integer) {
return (T) (Integer) Integer.parseInt((String) result);
}
else if (result != null) {
return (T) result;
}
}
} catch (Exception exception) {
log.error("GetConfigValue 出错: type=" + equipType + ",key=" + key + ", error =" + exception.toString());
}
if (defValue != null) {
return (T) defValue;
}
return null;
}
}
...@@ -139,7 +139,11 @@ public class HumitureController { ...@@ -139,7 +139,11 @@ public class HumitureController {
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.cid", locale, "CID"))); header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.cid", locale, "CID")));
if (isSpStorage) { if (isSpStorage) {
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.ntemperature", locale, "冷藏温度"))); header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.ntemperature", locale, "冷藏温度")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.ntemperature2", locale, "冷藏温度2")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.ntemperature3", locale, "冷藏温度3")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.codetemperature", locale, "制冷温度"))); header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.codetemperature", locale, "制冷温度")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.codetemperature2", locale, "制冷温度2")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.wtemperature", locale, "回温温度")));
}else{ }else{
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.temperature", locale, "温度"))); header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.temperature", locale, "温度")));
} }
...@@ -147,6 +151,7 @@ public class HumitureController { ...@@ -147,6 +151,7 @@ public class HumitureController {
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.createDate", locale, "时间"))); header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.createDate", locale, "时间")));
// header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.updateDate", locale, "更新时间"))); // header.add(Lists.newArrayList(MessageUtils.getText("smfcore.humiture.updateDate", locale, "更新时间")));
return header; return header;
} }
...@@ -164,12 +169,18 @@ public class HumitureController { ...@@ -164,12 +169,18 @@ public class HumitureController {
data.add(humiture.getCid()); data.add(humiture.getCid());
data.add(humiture.getTemperature()); data.add(humiture.getTemperature());
if (isSpStorage) { if (isSpStorage) {
data.add(humiture.getTemperature2());
data.add(humiture.getTemperature3());
data.add(humiture.getCodeAirTemp()); data.add(humiture.getCodeAirTemp());
data.add(humiture.getCodeAirTemp2() );
data.add(humiture.getWTemp());
} }
data.add(humiture.getHumidity()); data.add(humiture.getHumidity());
data.add(createDate); data.add(createDate);
// data.add(updateDate); // data.add(updateDate);
dataList.add(data); dataList.add(data);
} }
return dataList; return dataList;
} }
......
...@@ -21,10 +21,8 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -21,10 +21,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Set;
@Slf4j @Slf4j
@RestController @RestController
...@@ -36,22 +34,30 @@ public class LanguageSetController { ...@@ -36,22 +34,30 @@ public class LanguageSetController {
@Autowired @Autowired
DataCache dataCache; DataCache dataCache;
public List<LanguageInfo> getAllLanList() { public List<LanguageInfo> getAllLanList( ) {
return getAllLanList(MessageUtils.getDefaultLocal());
}
public List<LanguageInfo> getAllLanList(Locale locale) {
if(locale==null){
locale= MessageUtils.getDefaultLocal();
}
// List<LanguageInfo> lanList = dataCache.getCache(Constants.CACHE_languageType); List<LanguageInfo> lanList = dataCache.getLanguageList();
// if (lanList == null || lanList.size() <= 0) {
// lanList = MessageUtils.getDefaultLanList(); //没有缩写的加上
// dataCache.updateCache(Constants.CACHE_languageType, lanList); for (int i = 0; i < lanList.size(); i++) {
// } String disName = MessageUtils.getText("smfcore.language.displayLanName." + lanList.get(i).getLanCode(), locale, "");
return dataCache.getLanguageList(); lanList.get(i).setDisplayLanName(disName);
}
return lanList;
} }
@ApiOperation("获取语言列表") @ApiOperation("获取语言列表")
@GetMapping @GetMapping
@AnonymousAccess @AnonymousAccess
// @PreAuthorize("@el.check('translation')") // @PreAuthorize("@el.check('translation')")
public List<LanguageInfo> getList(){ public List<LanguageInfo> getList(HttpServletRequest request){
return getAllLanList(); return getAllLanList(request.getLocale());
} }
@ApiOperation("新增语言") @ApiOperation("新增语言")
@PostMapping @PostMapping
......
...@@ -24,6 +24,12 @@ public class LanguageInfo implements Serializable { ...@@ -24,6 +24,12 @@ public class LanguageInfo implements Serializable {
private String lanName; private String lanName;
/** /**
* 登录界面显示的语言名称,简写
*/
@ApiModelProperty("登录界面显示文本:CN,EN 等")
private String displayLanName;
/**
* 语言图标 * 语言图标
*/ */
@ApiModelProperty("语言图标") @ApiModelProperty("语言图标")
......
...@@ -85,6 +85,8 @@ public class MessageUtils { ...@@ -85,6 +85,8 @@ public class MessageUtils {
public static final String ZH_TW = "zh-TW"; public static final String ZH_TW = "zh-TW";
public static final String EN_US = "en-US"; public static final String EN_US = "en-US";
public static final String JA_JP = "ja-JP"; public static final String JA_JP = "ja-JP";
public static final String FR_FR="fr-FR";
public static final String DE_DE="de-DE";
//服务器type //服务器type
public static final String smfcore="smfcore"; public static final String smfcore="smfcore";
...@@ -227,10 +229,12 @@ public class MessageUtils { ...@@ -227,10 +229,12 @@ public class MessageUtils {
List<LanguageInfo> lanList = new ArrayList<>(); List<LanguageInfo> lanList = new ArrayList<>();
if (lanList == null || lanList.size() <= 0) { if (lanList == null || lanList.size() <= 0) {
lanList=new ArrayList<>(); lanList=new ArrayList<>();
lanList.add(new LanguageInfo(MessageUtils.ZH_CN,"简体中文","")); lanList.add(new LanguageInfo(MessageUtils.ZH_CN,"简体中文","CN",""));
lanList.add(new LanguageInfo(MessageUtils.ZH_TW,"繁体中文","")); lanList.add(new LanguageInfo(MessageUtils.ZH_TW,"繁体中文","TC",""));
lanList.add(new LanguageInfo(MessageUtils.EN_US,"English","")); lanList.add(new LanguageInfo(MessageUtils.EN_US,"English","EN",""));
lanList.add(new LanguageInfo(MessageUtils.JA_JP,"日本语","")); lanList.add(new LanguageInfo(MessageUtils.JA_JP,"日本語","JP",""));
lanList.add(new LanguageInfo(MessageUtils.FR_FR,"Français","FR",""));
lanList.add(new LanguageInfo(MessageUtils.DE_DE,"Deutsch","DE",""));
} }
return lanList; return lanList;
} }
......
...@@ -25,4 +25,9 @@ public enum MessageType { ...@@ -25,4 +25,9 @@ public enum MessageType {
* 4 显示数据,仅显示不保存 * 4 显示数据,仅显示不保存
*/ */
SHOW, SHOW,
/**
* 5 需要人员立即操作的
*/
CRITICAL
} }
package com.neotel.smfcore.core.message.rest; package com.neotel.smfcore.core.message.rest;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.base.IExcelDownLoad; import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.BetweenData;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
...@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Locale;
@Slf4j @Slf4j
@RestController @RestController
...@@ -89,6 +91,8 @@ public class MessageController { ...@@ -89,6 +91,8 @@ public class MessageController {
return getMsgReportList(criteria, request.getLocale()); return getMsgReportList(criteria, request.getLocale());
} }
private List<MsgCountDto> getMsgReportList(MessageCriteria criteria,Locale locale) { private List<MsgCountDto> getMsgReportList(MessageCriteria criteria,Locale locale) {
Criteria c = Criteria.where("type").is("ERROR"); Criteria c = Criteria.where("type").is("ERROR");
if (ObjectUtil.isNotEmpty(criteria.getDeviceName())) { if (ObjectUtil.isNotEmpty(criteria.getDeviceName())) {
...@@ -147,5 +151,50 @@ public class MessageController { ...@@ -147,5 +151,50 @@ public class MessageController {
log.info("msgReportCount 导出完成"); log.info("msgReportCount 导出完成");
} }
@ApiOperation("根据type汇总总数量")
@GetMapping("/typeTotalByDate")
@AnonymousAccess
public ResultBean typeTotalByDate(MessageCriteria criteria, HttpServletRequest request) {
//默认取7天的,如果客户端传的有,就用客户端的
Date endDate = new Date();
Date startDate = DateUtil.offsetDay(endDate, -7);
BetweenData<Date> updateDate = criteria.getUpdateDate();
if (updateDate != null && !updateDate.isEmpty()) {
Date from = updateDate.getFrom();
Date to = updateDate.getTo();
if (from != null) {
startDate = from;
}
if (to != null) {
endDate = to;
}
}
List<Message> messageList = messageManager.findByUpdateAndFileds(startDate, endDate, "");
Map<String, List<MessageDto>> resultMap = Maps.newConcurrentMap();
resultMap.put("INFO", new ArrayList<>());
resultMap.put("WARNING", new ArrayList<>());
resultMap.put("ERROR", new ArrayList<>());
resultMap.put("CRITICAL", new ArrayList<>());
if (messageList != null && !messageList.isEmpty()) {
for (Message message : messageList) {
MessageDto dto = messageMapper.toDto(message);
String type = message.getType();
if (ObjectUtil.isNotEmpty(dto.getMsgCode())) {
dto.setMsg(MessageUtils.getText(dto.getMsgCode(), dto.getMsgParams(), request.getLocale(), dto.getMsg()));
}
List<MessageDto> list = resultMap.get(type);
if (list == null) {
list = new ArrayList<>();
}
list.add(dto);
resultMap.put(type, list);
}
}
return ResultBean.newOkResult(resultMap);
}
} }
...@@ -7,6 +7,7 @@ import lombok.Data; ...@@ -7,6 +7,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
public class MessageCriteria { public class MessageCriteria {
...@@ -18,7 +19,7 @@ public class MessageCriteria { ...@@ -18,7 +19,7 @@ public class MessageCriteria {
private BetweenData<Date> createDate; private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> updateDate; private BetweenData<Date> updateDate;
@QueryCondition @QueryCondition
...@@ -36,4 +37,8 @@ public class MessageCriteria { ...@@ -36,4 +37,8 @@ public class MessageCriteria {
@QueryCondition @QueryCondition
@ApiModelProperty("类型") @ApiModelProperty("类型")
private String type; private String type;
@QueryCondition(type = QueryCondition.Type.IN,propName = "type")
@ApiModelProperty("多个类型")
private List<String> typeList;
} }
...@@ -7,6 +7,7 @@ import org.springframework.data.mongodb.core.query.Criteria; ...@@ -7,6 +7,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
...@@ -18,4 +19,6 @@ public interface IMessageManager extends IBaseManager<Message> { ...@@ -18,4 +19,6 @@ public interface IMessageManager extends IBaseManager<Message> {
Message findOne(Query query); Message findOne(Query query);
List<MsgCountDto> getMsgCountList(Criteria criteria); List<MsgCountDto> getMsgCountList(Criteria criteria);
List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field);
} }
...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.PageData; ...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerImpl; import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerImpl;
import com.neotel.smfcore.core.language.service.po.LanguageMsg; import com.neotel.smfcore.core.language.service.po.LanguageMsg;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
...@@ -16,6 +17,7 @@ import com.neotel.smfcore.core.message.service.po.Message; ...@@ -16,6 +17,7 @@ import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.Aggregation;
...@@ -131,6 +133,17 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -131,6 +133,17 @@ public class MessageManagerImpl implements IMessageManager {
return messageDao.getMsgCountList(criteria) ; return messageDao.getMsgCountList(criteria) ;
} }
@Override
public List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field) {
Query q = new Query();
Criteria c = Criteria.where("updateDate").gte(startDate).lt(endDate);
q.addCriteria(c);
if (StringUtils.isNotEmpty(field)) {
q.fields().include(field);
}
return messageDao.findByQuery(q);
}
@Data @Data
private class MsgDeviceName { private class MsgDeviceName {
private String deviceName; private String deviceName;
......
...@@ -97,7 +97,7 @@ public class DeviceMessageUtil { ...@@ -97,7 +97,7 @@ public class DeviceMessageUtil {
if(result){ if(result){
messageManager.save(message); messageManager.save(message);
} }
messageManager.save(message); // messageManager.save(message);
} }
} }
public static void addDeviceMessage(String cid,String msgType, String moudle, String msgCode, String msg, String[] msgParam,String almType,String almCode) { public static void addDeviceMessage(String cid,String msgType, String moudle, String msgCode, String msg, String[] msgParam,String almType,String almCode) {
...@@ -114,7 +114,7 @@ public class DeviceMessageUtil { ...@@ -114,7 +114,7 @@ public class DeviceMessageUtil {
if(result){ if(result){
messageManager.save(message); messageManager.save(message);
} }
messageManager.save(message); // messageManager.save(message);
} }
} }
......
...@@ -60,11 +60,11 @@ public class LiteOrderCache { ...@@ -60,11 +60,11 @@ public class LiteOrderCache {
@Autowired @Autowired
private SmfApi smfApi; private SmfApi smfApi;
//最大工单数 // //最大工单数
public int MaxOrderCount=1; // public int MaxOrderCount=1;
public boolean SingleOrderMode(){ // public boolean SingleOrderMode(){
return MaxOrderCount==1; // return MaxOrderCount==1;
} // }
/** /**
...@@ -496,6 +496,7 @@ public class LiteOrderCache { ...@@ -496,6 +496,7 @@ public class LiteOrderCache {
} }
List<String> availableStorageIds = dataCache.getAvailableStorageIds(cidList); List<String> availableStorageIds = dataCache.getAvailableStorageIds(cidList);
boolean shortage=false;
//其他出库模式一次性全部生成任务 //其他出库模式一次性全部生成任务
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) { for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
orderItem.setOutNum(0); orderItem.setOutNum(0);
...@@ -533,6 +534,7 @@ public class LiteOrderCache { ...@@ -533,6 +534,7 @@ public class LiteOrderCache {
break; break;
} }
}else{ }else{
shortage=true;
log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘["+reelId+"]"); log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘["+reelId+"]");
} }
}else if (Strings.isNullOrEmpty(reelId) && !Strings.isNullOrEmpty(partNumber)){ }else if (Strings.isNullOrEmpty(reelId) && !Strings.isNullOrEmpty(partNumber)){
...@@ -543,6 +545,7 @@ public class LiteOrderCache { ...@@ -543,6 +545,7 @@ public class LiteOrderCache {
} }
if (pos == null) { if (pos == null) {
// log.error("未找到可以出库的物料[" + partNumber + "]"); // log.error("未找到可以出库的物料[" + partNumber + "]");
shortage=true;
break; break;
} else { } else {
assignNum = assignNum + pos.getBarcode().getAmount(); assignNum = assignNum + pos.getBarcode().getAmount();
...@@ -572,6 +575,11 @@ public class LiteOrderCache { ...@@ -572,6 +575,11 @@ public class LiteOrderCache {
} }
if(shortage){
cacheOrder.addAppendDate("shortage","true");
}else{
cacheOrder.addAppendDate("shortage","false");
}
cacheOrder.setTaskReelCount(taskReelCount); cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount); cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount);
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]"); log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]");
...@@ -679,6 +687,7 @@ public class LiteOrderCache { ...@@ -679,6 +687,7 @@ public class LiteOrderCache {
} }
if(shortReel){ if(shortReel){
cacheOrder.addAppendDate("shortage","true");
cacheOrder.setClosed(true); cacheOrder.setClosed(true);
cacheOrder.setStatus(LITEORDER_STATUS.CLOSED); cacheOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrderManager.save(cacheOrder); liteOrderManager.save(cacheOrder);
...@@ -847,6 +856,7 @@ public class LiteOrderCache { ...@@ -847,6 +856,7 @@ public class LiteOrderCache {
cacheOrder.setTaskReelCount(outCount); cacheOrder.setTaskReelCount(outCount);
cacheOrder.setTaskFinishedTime(-1); cacheOrder.setTaskFinishedTime(-1);
cacheOrder.setFinishedReelCount(0); cacheOrder.setFinishedReelCount(0);
cacheOrder.setStatus(LITEORDER_STATUS.ONE);
liteOrderManager.save(cacheOrder); liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder); liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
......
package com.neotel.smfcore.core.order.enums;
public class LITEORDER_STYPE {
/**手动创建的工单*/
public static int MANUAL =0;
/**共享文件夹工单*/
public static int SHAREDFOLDER =1;
/**系统对接的 工单*/
public static int API =2;
}
...@@ -37,7 +37,7 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -37,7 +37,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
protected LiteOrderCache liteOrderCache; protected LiteOrderCache liteOrderCache;
@Override @Override
public boolean handleOrderFile(File orderFile) { public boolean handleOrderFile(File orderFile,int sourceType) {
String fileName = orderFile.getName(); String fileName = orderFile.getName();
//String backupFileName = fileName +"_" + System.currentTimeMillis(); //String backupFileName = fileName +"_" + System.currentTimeMillis();
//看数据库是否已有此工单 //看数据库是否已有此工单
...@@ -64,6 +64,7 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -64,6 +64,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
LiteOrder liteOrder = new LiteOrder(so, liteOrderItems); LiteOrder liteOrder = new LiteOrder(so, liteOrderItems);
liteOrder.setSource(fileName); liteOrder.setSource(fileName);
liteOrder.setSourceType(sourceType);//0=手动创建,1=共享文件夹
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo()); LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
if (dbOrder != null) { if (dbOrder != null) {
......
...@@ -7,6 +7,6 @@ import java.io.File; ...@@ -7,6 +7,6 @@ import java.io.File;
*/ */
public interface IOrderFileListener { public interface IOrderFileListener {
boolean handleOrderFile(File orderFile); boolean handleOrderFile(File orderFile,int sourceType);
} }
...@@ -3,7 +3,6 @@ package com.neotel.smfcore.core.order.rest; ...@@ -3,7 +3,6 @@ package com.neotel.smfcore.core.order.rest;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
...@@ -21,8 +20,10 @@ import com.neotel.smfcore.core.device.util.DataCache; ...@@ -21,8 +20,10 @@ import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderItemDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderItemDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderKanbanDto;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper;
import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition; import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition;
...@@ -38,7 +39,6 @@ import com.neotel.smfcore.core.system.service.po.DataLog; ...@@ -38,7 +39,6 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.rest.bean.query.UserQueryCriteria;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Group; import com.neotel.smfcore.security.service.po.Group;
...@@ -51,23 +51,16 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -51,23 +51,16 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
...@@ -144,7 +137,7 @@ public class OrderController { ...@@ -144,7 +137,7 @@ public class OrderController {
} }
File folder = new File(properties.getPath(), "pos"); File folder = new File(properties.getPath(), "pos");
File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath()); File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
boolean result = orderFileWatch.handleOrderFile(localFile); boolean result = orderFileWatch.handleOrderFile(localFile, LITEORDER_STYPE.MANUAL);
if (result) { if (result) {
return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功"); return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功");
} else { } else {
...@@ -258,6 +251,14 @@ public class OrderController { ...@@ -258,6 +251,14 @@ public class OrderController {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED)); query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
} else if (criteria.getStatus() == 2) { } else if (criteria.getStatus() == 2) {
query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED)); query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
}else if(criteria.getStatus()==3){
//进行中
query.addCriteria(Criteria.where("status").nin(LITEORDER_STATUS.CLOSED,LITEORDER_STATUS.NEW));
}else if(criteria.getStatus()==4){
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.NEW));
}else if(criteria.getStatus()==5){
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED)
.and("appendData.shortage").is("true"));
} }
} }
PageData<LiteOrder> orderList = liteOrderManager.findByPage(query, pageable); PageData<LiteOrder> orderList = liteOrderManager.findByPage(query, pageable);
...@@ -769,4 +770,32 @@ public class OrderController { ...@@ -769,4 +770,32 @@ public class OrderController {
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
@ApiOperation("获取工单看板信息")
@GetMapping("/kanban")
@PreAuthorize("@el.check('workOrder')")
public OrderKanbanDto orderKanban() {
int allCount = liteOrderManager.countByQuery(new Query(Criteria.where("orderNo").exists(true)));
int endCount = liteOrderManager.countByQuery(new Query(Criteria.where("status").is(LITEORDER_STATUS.CLOSED)));
Criteria c = new Criteria();
c.and("status").nin(LITEORDER_STATUS.CLOSED, LITEORDER_STATUS.NEW);
Query query = new Query(c);
int exeCount = liteOrderManager.countByQuery(query);
Query query1=new Query();
query1.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED)
.and("appendData.shortage").is("true"));
int abCount = liteOrderManager.countByQuery(query1);
int waitCount = liteOrderManager.countByQuery(new Query(Criteria.where("status").is(LITEORDER_STATUS.NEW)));
OrderKanbanDto dto = new OrderKanbanDto(allCount, endCount, exeCount, abCount, waitCount);
return dto;
}
@ApiOperation("返回全部线别")
@GetMapping(value = "/getAllLines")
@PreAuthorize("@el.check('workOrder')")
public List<String> getAllLines() {
List<String> allLineList = liteOrderManager.findAllLines();
return allLineList;
}
} }
package com.neotel.smfcore.core.order.rest.bean.dto; package com.neotel.smfcore.core.order.rest.bean.dto;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
...@@ -69,6 +69,8 @@ public class OrderDto implements Serializable { ...@@ -69,6 +69,8 @@ public class OrderDto implements Serializable {
@ApiModelProperty("工单来源") @ApiModelProperty("工单来源")
private String source = ""; private String source = "";
@ApiModelProperty("工单来源类型,0=手动创建,1=共享文件夹,2=系统对接")
private int sourceType = LITEORDER_STYPE.MANUAL;
@ApiModelProperty("任务完成时间(用于关闭页面显示)") @ApiModelProperty("任务完成时间(用于关闭页面显示)")
@Transient @Transient
......
package com.neotel.smfcore.core.order.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderKanbanDto {
@ApiModelProperty("全部工单数")
private int orderCount;
@ApiModelProperty("已完成工单数")
private int endOrderCount;
@ApiModelProperty("执行中工单")
private int executingOrderCount;
@ApiModelProperty("异常工单")
private int abnormalOrderCount;
@ApiModelProperty("等待工单数")
private int waitOrderCount;
}
...@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest.bean.query; ...@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition; import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData; import com.neotel.smfcore.common.bean.BetweenData;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -11,10 +12,14 @@ import java.util.List; ...@@ -11,10 +12,14 @@ import java.util.List;
@Data @Data
public class OrderQueryCondition { public class OrderQueryCondition {
@QueryCondition(blurry = "orderNo") @QueryCondition(blurry = "orderNo,so,soId,source,line")
private String blurry; private String blurry;
@QueryCondition(blurry = "orderNo")
private String orderNo = "";
@QueryCondition(type = QueryCondition.Type.BETWEEN) @QueryCondition(type = QueryCondition.Type.BETWEEN)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> createDate; private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.IN, propName = "source") @QueryCondition(type = QueryCondition.Type.IN, propName = "source")
...@@ -22,8 +27,12 @@ public class OrderQueryCondition { ...@@ -22,8 +27,12 @@ public class OrderQueryCondition {
@QueryCondition(type = QueryCondition.Type.NIN, propName = "source") @QueryCondition(type = QueryCondition.Type.NIN, propName = "source")
private List<String> excludeSourceList; private List<String> excludeSourceList;
//状态,0=所有,1=已关闭,2=未关闭 //状态,0=所有,1=已关闭,2=未关闭,3=进行中,4=等待中
private Integer status; private Integer status;
@QueryCondition(blurry = "line")
private String line;
// //
// @QueryCondition(type=QueryCondition.Type.IN,propName = "status") // @QueryCondition(type=QueryCondition.Type.IN,propName = "status")
// private List<Integer> statusList ; // private List<Integer> statusList ;
......
...@@ -2,5 +2,8 @@ package com.neotel.smfcore.core.order.service.dao; ...@@ -2,5 +2,8 @@ package com.neotel.smfcore.core.order.service.dao;
import com.neotel.smfcore.common.base.IBaseDao; import com.neotel.smfcore.common.base.IBaseDao;
import java.util.List;
public interface ILiteOrderDao extends IBaseDao { public interface ILiteOrderDao extends IBaseDao {
List<String> findAllLines();
} }
package com.neotel.smfcore.core.order.service.dao.impl; package com.neotel.smfcore.core.order.service.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.AbstractBaseDao; import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.order.service.dao.ILiteOrderDao; import com.neotel.smfcore.core.order.service.dao.ILiteOrderDao;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import lombok.Data;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Service @Service
public class LiteOrderDaoImpl extends AbstractBaseDao implements ILiteOrderDao { public class LiteOrderDaoImpl extends AbstractBaseDao implements ILiteOrderDao {
@Override @Override
public Class getEntityClass() { public Class getEntityClass() {
return LiteOrder.class; return LiteOrder.class;
} }
@Override
public List<String> findAllLines() {
Criteria criteria = Criteria.where("line").exists(true).ne(null);
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.group("line")
);
AggregationResults<LineInfo> results = getMongoTemplate().aggregate(agg, getEntityClass(), LineInfo.class);
List<LineInfo> selList = results.getMappedResults();
List<String> result = new ArrayList<>();
for (LineInfo lineInfo : selList
) {
if (ObjectUtil.isEmpty(lineInfo._id)) {
continue;
}
result.add(lineInfo._id);
}
return result;
}
@Data
private class LineInfo implements Serializable {
private String _id;
}
} }
...@@ -4,6 +4,7 @@ import com.neotel.smfcore.common.base.IBaseManager; ...@@ -4,6 +4,7 @@ import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List; import java.util.List;
...@@ -12,9 +13,13 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> { ...@@ -12,9 +13,13 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
int countByCondition(String field, String value); int countByCondition(String field, String value);
int countByQuery(Query query);
LiteOrder createWithItems(LiteOrder liteOrder) throws ValidateException; LiteOrder createWithItems(LiteOrder liteOrder) throws ValidateException;
List<LiteOrder> findUnEndOrdersList(); List<LiteOrder> findUnEndOrdersList();
LiteOrder findBySource(String source); LiteOrder findBySource(String source);
List<String> findAllLines();
} }
...@@ -51,6 +51,13 @@ public class LiteOrderManagerImpl implements ILiteOrderManager { ...@@ -51,6 +51,13 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
} }
@Override @Override
public int countByQuery(Query query) {
if(query==null){
return (int)liteOrderDao.count();
}
return liteOrderDao.countByQuery(query);
}
@Override
public LiteOrder get(String id) { public LiteOrder get(String id) {
LiteOrder order= liteOrderDao.findOneById(id); LiteOrder order= liteOrderDao.findOneById(id);
if(order!=null&& order.getOrderItems()==null){ if(order!=null&& order.getOrderItems()==null){
...@@ -111,6 +118,11 @@ public class LiteOrderManagerImpl implements ILiteOrderManager { ...@@ -111,6 +118,11 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
} }
@Override @Override
public List<String> findAllLines() {
return liteOrderDao.findAllLines();
}
@Override
public PageData<LiteOrder> findByPage(Query query, Pageable pageable) { public PageData<LiteOrder> findByPage(Query query, Pageable pageable) {
int totalCount = liteOrderDao.countByQuery(query); int totalCount = liteOrderDao.countByQuery(query);
List<LiteOrder> list = liteOrderDao.findByQuery(query, pageable); List<LiteOrder> list = liteOrderDao.findByQuery(query, pageable);
......
package com.neotel.smfcore.core.order.service.po; package com.neotel.smfcore.core.order.service.po;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.BasePo; import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import lombok.Data; import lombok.Data;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
...@@ -66,6 +66,11 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -66,6 +66,11 @@ public class LiteOrder extends BasePo implements Serializable {
private boolean closed = false; private boolean closed = false;
/**
* 工单来源类型,0=手动创建,1=共享文件夹,2=系统对接
*/
private int sourceType = LITEORDER_STYPE.MANUAL;
/** /**
* 工单来源 * 工单来源
...@@ -113,6 +118,26 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -113,6 +118,26 @@ public class LiteOrder extends BasePo implements Serializable {
} }
} }
public void setStatus(int s) {
this.status = s;
if(s>LITEORDER_STATUS.NEW&&s<LITEORDER_STATUS.CLOSED){
String lastOutType = getAppend("outType");
int outtype =0;
if (ObjectUtil.isNotEmpty(lastOutType)) {
try {
outtype = Convert.toInt(lastOutType);
} catch (Exception exception) {
}
}
if (outtype < s) {
outtype=s;
addAppendDate("outType", outtype + "");
}
}
}
/** /**
* 是否正在出首套料 * 是否正在出首套料
* @return * @return
......
package com.neotel.smfcore.core.order.util; package com.neotel.smfcore.core.order.util;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.utils.SmbUtil; import com.neotel.smfcore.common.utils.SmbUtil;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.listener.IOrderFileListener; import com.neotel.smfcore.core.order.listener.IOrderFileListener;
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.system.bean.OrderSetting;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.activation.MimeType;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
...@@ -88,7 +78,7 @@ public class OrderFileWatch { ...@@ -88,7 +78,7 @@ public class OrderFileWatch {
} }
}; };
for (File file : orderFolder.listFiles(fileFilter)) { for (File file : orderFolder.listFiles(fileFilter)) {
boolean handled = handleOrderFile(file); boolean handled = handleOrderFile(file, LITEORDER_STYPE.SHAREDFOLDER);
String backupFileName = file.getName() +"_" + System.currentTimeMillis(); String backupFileName = file.getName() +"_" + System.currentTimeMillis();
File resultFile = null; File resultFile = null;
...@@ -114,11 +104,11 @@ public class OrderFileWatch { ...@@ -114,11 +104,11 @@ public class OrderFileWatch {
* @param orderFile * @param orderFile
* @return * @return
*/ */
public boolean handleOrderFile(File orderFile){ public boolean handleOrderFile(File orderFile,int sourceType){
log.info("开始处理Order文件:" + orderFile.getAbsolutePath()); log.info("开始处理Order文件:" + orderFile.getAbsolutePath());
for (IOrderFileListener orderFileListener : orderFileListenerList) { for (IOrderFileListener orderFileListener : orderFileListenerList) {
boolean result = orderFileListener.handleOrderFile(orderFile); boolean result = orderFileListener.handleOrderFile(orderFile,sourceType);
if(result){ if(result){
return true; return true;
} }
......
...@@ -136,6 +136,11 @@ public class SpSolderController { ...@@ -136,6 +136,11 @@ public class SpSolderController {
SpSettingsDto dto = mapper.toDto(spSettings); SpSettingsDto dto = mapper.toDto(spSettings);
dto.setMinTemperature(msdSettiings.getMinTemperature()); dto.setMinTemperature(msdSettiings.getMinTemperature());
dto.setMaxTemperature(msdSettiings.getMaxTemperature()); dto.setMaxTemperature(msdSettiings.getMaxTemperature());
Boolean autoStartMixed=dataCache.getCache(Constants.CACHE_SP_AUTO_START_MIXED);
if(autoStartMixed==null){
autoStartMixed=false;
}
dto.setAutoStartMixed(autoStartMixed);
return dto; return dto;
} }
...@@ -161,6 +166,10 @@ public class SpSolderController { ...@@ -161,6 +166,10 @@ public class SpSolderController {
msdSettiings.setMaxTemperature(dto.getMaxTemperature()); msdSettiings.setMaxTemperature(dto.getMaxTemperature());
dataCache.updateCache(Constants.CACHE_msdSetting, msdSettiings); dataCache.updateCache(Constants.CACHE_msdSetting, msdSettiings);
log.info("更改MSD:CACHE_msdSetting=" + msdSettiings.toString()); log.info("更改MSD:CACHE_msdSetting=" + msdSettiings.toString());
dataCache.updateCache(Constants.CACHE_SP_AUTO_START_MIXED,dto.isAutoStartMixed());
log.info("更改锡膏料仓 CACHE_SP_AUTO_START_MIXED="+dto.isAutoStartMixed());
return ResultBean.newOkResult("保存成功"); return ResultBean.newOkResult("保存成功");
} }
......
...@@ -24,4 +24,7 @@ public class SpSettingsDto { ...@@ -24,4 +24,7 @@ public class SpSettingsDto {
@ApiModelProperty("最高温度") @ApiModelProperty("最高温度")
private float maxTemperature = 38.0F; private float maxTemperature = 38.0F;
@ApiModelProperty("回温完成自动开始搅拌")
private boolean autoStartMixed=false;
} }
...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.solder.util; ...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.solder.util;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS; import com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
...@@ -141,8 +142,22 @@ public class SolderBoxCache { ...@@ -141,8 +142,22 @@ public class SolderBoxCache {
log.info(barcode.getBarcode() + "到达回温时间,搅拌时间为0,修改状态为待出库"); log.info(barcode.getBarcode() + "到达回温时间,搅拌时间为0,修改状态为待出库");
barcode.setSolderStatus(SOLDER_STATUS.TO_BE_OUT.name()); barcode.setSolderStatus(SOLDER_STATUS.TO_BE_OUT.name());
}else{ }else{
log.info(barcode.getBarcode() + "到达回温时间,修改状态为等待搅拌,待手动开始搅拌后再开始搅拌");
barcode.setSolderStatus(SOLDER_STATUS.WAIT_MIXED.name());
//判断是否自动开始搅拌
Boolean autoStartMixed=dataCache.getCache(Constants.CACHE_SP_AUTO_START_MIXED);
if(autoStartMixed==null){
autoStartMixed=false;
}
if(autoStartMixed){
log.info(barcode.getBarcode() + "到达回温时间,已配置CACHE_SP_AUTO_START_MIXED=true,自动开始搅拌,修改状态=TO_BE_MIXED");
barcode.setSolderStatus(SOLDER_STATUS.TO_BE_MIXED.name());
}else{
log.info(barcode.getBarcode() + "到达回温时间,修改状态为等待搅拌,待手动开始搅拌后再开始搅拌");
barcode.setSolderStatus(SOLDER_STATUS.WAIT_MIXED.name());
}
} }
barcode = barcodeManager.save(barcode); barcode = barcodeManager.save(barcode);
......
package com.neotel.smfcore.core.storage.rest; package com.neotel.smfcore.core.storage.rest;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.*; import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE; import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.storage.bean.InventoryItem; import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.rest.dto.*; import com.neotel.smfcore.core.storage.rest.dto.*;
import com.neotel.smfcore.core.storage.rest.mapstruct.InventoryItemMapper; import com.neotel.smfcore.core.storage.rest.mapstruct.InventoryItemMapper;
import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper; import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
...@@ -77,6 +82,9 @@ public class MaterialController { ...@@ -77,6 +82,9 @@ public class MaterialController {
@Autowired @Autowired
private final IGroupManager groupManager; private final IGroupManager groupManager;
@Autowired
private CodeResolve codeResolve;
@ApiOperation("导出库存列表") @ApiOperation("导出库存列表")
@GetMapping(value = "/inventory/download") @GetMapping(value = "/inventory/download")
@PreAuthorize("@el.check('tacticsOuput')") @PreAuthorize("@el.check('tacticsOuput')")
...@@ -388,4 +396,37 @@ public class MaterialController { ...@@ -388,4 +396,37 @@ public class MaterialController {
} }
} }
@ApiOperation("扫描空盘直接出库")
@RequestMapping("/scanEmptyPallet")
public ResultBean scanEmptyPallet(@RequestBody Map<String, String> paramMap) {
String code = paramMap.get("code");
log.info("扫描空盘直接出库,信息为:" + code);
if (StringUtils.isEmpty(code)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"});
}
Barcode barcode = codeResolve.resolveOneValideBarcode("=1x1=" + code);
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码");
}
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
String partNumber = barcode.getPartNumber();
Collection<String> excludePosIds = taskService.excludePosIds();
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
StoragePos pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkOutType);
if (pos == null) {
return ResultBean.newErrorResult(-1, "smfcore.label.noReel", "未找到可出库的物料");
}
log.info("扫描空盘出库,对应的partNumber为:" + barcode.getPartNumber() + ",对应的库位:" + pos.getPosName() + ",进行出库");
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog task = new DataLog(storage,pos.getBarcode(),pos);
task.setType(OP.CHECKOUT);
task.setOperator(SecurityUtils.getCurrentUsername());
task.setSingleOut(true);
task.setSourceId(null);
task.setSourceName("PN");
taskService.addTaskToExecute(task);
return ResultBean.newOkResult("");
}
} }
...@@ -34,6 +34,8 @@ public class OrderSetting implements Serializable { ...@@ -34,6 +34,8 @@ public class OrderSetting implements Serializable {
*/ */
public Map<String,String> appendData = new HashMap<>(); public Map<String,String> appendData = new HashMap<>();
@ApiModelProperty("缺料不自动关闭工单")
private boolean closeWorkOrder = false;
/** /**
* 是否显示料架亮灯方式 * 是否显示料架亮灯方式
*/ */
......
package com.neotel.smfcore.core.system.rest;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.system.rest.bean.dto.MaterialTraceDto;
import com.neotel.smfcore.core.system.rest.bean.mapstruct.MaterialTraceMapper;
import com.neotel.smfcore.core.system.rest.bean.query.MaterialTraceQueryCondition;
import com.neotel.smfcore.core.system.service.manager.IMaterialTraceManager;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@Slf4j
@Api(tags = "物料追溯管理")
@RestController
@RequestMapping("/api/materialTrace")
@RequiredArgsConstructor
public class MaterialTraceController {
@Autowired
private IMaterialTraceManager materialTraceManager;
@Autowired
private MaterialTraceMapper materialTraceMapper;
@ApiOperation("查询物料追溯信息")
@GetMapping("/history")
@PreAuthorize("@el.check('materialTrace')")
@AnonymousAccess
public PageData<MaterialTraceDto> query(MaterialTraceQueryCondition criteria, Pageable pageable) {
Query query = getQuery(criteria);
PageData<MaterialTrace> materialTraceList = materialTraceManager.findByPage(query, pageable);
PageData<MaterialTraceDto> result = materialTraceMapper.toDto(materialTraceList);
return result;
}
@ApiOperation("导出物料追溯日志")
@GetMapping(value = "/history/download")
@PreAuthorize("@el.check('taskLog')")
@AnonymousAccess
public void download(HttpServletResponse response, MaterialTraceQueryCondition criteria, Pageable pageable, HttpServletRequest request) throws IOException {
Query query = getQuery(criteria);
Locale locale = request.getLocale();
log.info("开始导出物料追溯日志");
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> header = new ArrayList<>();
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.barcode",locale,"条码编号")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.partNumber",locale,"料件编号")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.posName",locale,"料仓名称")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.amount",locale,"数量")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.type",locale,"类型")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.orderSource",locale,"来源")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.status",locale,"状态")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.operator",locale,"操作人")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.createDate",locale,"创建时间")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.updateDate",locale,"更新时间")));
return header;
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
List<List<Object>> dataList = new ArrayList<>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<MaterialTrace> materialTraceList = materialTraceManager.findByQuery(query,pageable);
for (MaterialTrace materialTrace : materialTraceList) {
String createDate = dateFormat.format(materialTrace.getCreateDate());
String updateDate = dateFormat.format(materialTrace.getUpdateDate());
List<Object> data = new ArrayList<>();
data.add(materialTrace.getBarcode());
data.add(materialTrace.getPartNumber());
data.add(materialTrace.getPosName() + " " + materialTrace.getStorageName());
data.add(materialTrace.getNum());
String typeKey = "NeoLight.logType." + materialTrace.getType();
String typeMsg = MessageUtils.getSmfClientMsg(typeKey,locale,typeKey);
data.add(typeMsg);
data.add(materialTrace.getSourceName());
String status = materialTrace.getStatus().toLowerCase();
String statusKey = "NeoLight.logStatus." + status;
String statusMsg = MessageUtils.getSmfClientMsg(statusKey,locale,statusKey);
data.add(statusMsg);
data.add(materialTrace.getOperator());
data.add(createDate);
data.add(updateDate);
dataList.add(data);
}
return dataList;
}
});
log.info("物料追溯日志导出完成");
}
private Query getQuery(MaterialTraceQueryCondition criteria){
String un_End = "UN_END";
boolean unEnd = false;
boolean finished=false;
if (criteria.getStatus()!=null&& criteria.getStatus().equals(un_End)) {
criteria.setStatus(null);
unEnd = true;
}else if(criteria.getStatus()!=null&&criteria.getStatus().equals(OP_STATUS.FINISHED.name())){
criteria.setStatus(null);
finished=true;
}
/*if (StringUtils.isBlank(criteria.getStorageId())){
criteria.setStorageIdList(SecurityUtils.getUserGroupStorageId());
}*/
Query query = QueryHelp.getQuery(criteria);
if (unEnd) {
query.addCriteria(Criteria.where("status").nin(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}else if(finished){
query.addCriteria(Criteria.where("status").in(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}
return query;
}
}
...@@ -151,6 +151,10 @@ public class SettingsController { ...@@ -151,6 +151,10 @@ public class SettingsController {
break; break;
} }
} }
Boolean closeWorkOrder = dataCache.getCache(Constants.CACHE_closeWorkOrder);
if(closeWorkOrder!=null){
orderSetting.setCloseWorkOrder(closeWorkOrder);
}
return orderSetting; return orderSetting;
} }
...@@ -208,6 +212,7 @@ public class SettingsController { ...@@ -208,6 +212,7 @@ public class SettingsController {
} }
dataCache.updateCache(Constants.CACHE_OrderSetting, orderSetting); dataCache.updateCache(Constants.CACHE_OrderSetting, orderSetting);
dataCache.updateCache(Constants.CACHE_closeWorkOrder,orderSetting.isCloseWorkOrder());
log.info("更改工单设置:"+Constants.CACHE_OrderSetting+"=" + orderSetting.toString()); log.info("更改工单设置:"+Constants.CACHE_OrderSetting+"=" + orderSetting.toString());
return ResultBean.newOkResult("保存成功"); return ResultBean.newOkResult("保存成功");
......
package com.neotel.smfcore.core.system.rest.bean.dto;
import lombok.Data;
@Data
public class MaterialTraceDto extends TaskDto {
}
package com.neotel.smfcore.core.system.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.system.rest.bean.dto.MaterialTraceDto;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MaterialTraceMapper extends BaseMapper<MaterialTraceDto, MaterialTrace> {
}
package com.neotel.smfcore.core.system.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("查询条件")
public class MaterialTraceQueryCondition {
@QueryCondition(blurry = "barcode,partNumber,posName,sourceName,subSourceInfo,memo")
@ApiModelProperty("模糊搜索")
private String blurry;
@QueryCondition
@ApiModelProperty("条码编号")
private String barcode;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> updateDate;
@QueryCondition
@ApiModelProperty("來源ID")
private String sourceId;
@QueryCondition
@ApiModelProperty("任务状态")
private String status;
@QueryCondition(isDBId =true)
@ApiModelProperty("料仓Id")
private String storageId;
@QueryCondition(type = QueryCondition.Type.IN, propName = "storageId")
private List<String> storageIdList;
@QueryCondition
@ApiModelProperty("出入库类型")
private Integer type;
@ApiModelProperty("分组ID")
private String groupId;
@ApiModelProperty("CID数组")
private String[] cids;
@QueryCondition
@ApiModelProperty("来源名称")
private String sourceName;
@QueryCondition
@ApiModelProperty("出入库类型")
private String inOutType;
@QueryCondition
@ApiModelProperty("操作人")
private String operator;
}
package com.neotel.smfcore.core.system.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface IMaterialTraceDao extends IBaseDao {
}
package com.neotel.smfcore.core.system.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.system.service.dao.IMaterialTraceDao;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.springframework.stereotype.Service;
@Service
public class MaterialTraceDaoImpl extends AbstractBaseDao implements IMaterialTraceDao {
@Override
public Class getEntityClass() {
return MaterialTrace.class;
}
}
package com.neotel.smfcore.core.system.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
public interface IMaterialTraceManager extends IBaseManager<MaterialTrace> {
//List<MaterialTrace> dataLogs = materialTraceManager.findByQuery(query,pageable);
List<MaterialTrace> findByQuery(Query query, Pageable pageable);
}
...@@ -63,6 +63,7 @@ public class DataLogManagerImpl implements IDataLogManager { ...@@ -63,6 +63,7 @@ public class DataLogManagerImpl implements IDataLogManager {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY,-48); calendar.add(Calendar.HOUR_OF_DAY,-48);
c.and("updateDate").gte(calendar.getTime()); c.and("updateDate").gte(calendar.getTime());
c.and("closed").is(false);
Query query = Query.query(c); Query query = Query.query(c);
List<DataLog> unFinishedTasks = findByQuery(query); List<DataLog> unFinishedTasks = findByQuery(query);
if(unFinishedTasks == null){ if(unFinishedTasks == null){
......
package com.neotel.smfcore.core.system.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.system.service.dao.IMaterialTraceDao;
import com.neotel.smfcore.core.system.service.manager.IMaterialTraceManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MaterialTraceManagerImpl implements IMaterialTraceManager {
@Autowired
private IMaterialTraceDao materialTraceDao;
@Override
public MaterialTrace get(String id) {
return null;
}
@Override
public MaterialTrace save(MaterialTrace object) throws ValidateException {
return materialTraceDao.save(object);
}
@Override
public void delete(MaterialTrace object) throws ValidateException {
}
@Override
public PageData<MaterialTrace> findByPage(Query query, Pageable pageable) {
int totalCount = materialTraceDao.countByQuery(query);
List<MaterialTrace> list = materialTraceDao.findByQuery(query, pageable);
return new PageData<MaterialTrace>(list, totalCount);
}
@Override
public List<MaterialTrace> findByQuery(Query query) {
return null;
}
@Override
public List<MaterialTrace> findByQuery(Query query, Pageable pageable) {
return materialTraceDao.findByQuery(query,pageable);
}
}
...@@ -249,6 +249,10 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog> ...@@ -249,6 +249,10 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
private String line = ""; private String line = "";
//是否关闭
private boolean closed = false;
public String getBarcode() { public String getBarcode() {
if(barcode == null){ if(barcode == null){
return ""; return "";
......
package com.neotel.smfcore.core.system.service.po;
import lombok.Data;
/**
* 物料追溯(字段和datalog一样,直接继承使用)
*/
@Data
public class MaterialTrace extends DataLog {
}
...@@ -2,11 +2,14 @@ package com.neotel.smfcore.core.system.service.po; ...@@ -2,11 +2,14 @@ package com.neotel.smfcore.core.system.service.po;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.BasePo; import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.barcode.bean.BarcodeRuleDetail;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Data @Data
public class Settings extends BasePo implements Serializable { public class Settings extends BasePo implements Serializable {
...@@ -181,4 +184,9 @@ public class Settings extends BasePo implements Serializable { ...@@ -181,4 +184,9 @@ public class Settings extends BasePo implements Serializable {
private String notIntoCids = ""; private String notIntoCids = "";
private boolean checkLineShelf = false; private boolean checkLineShelf = false;
/**
* 具体规则详情
*/
private Map<String, BarcodeRuleDetail> barcodeRuleMap = new HashMap<>();
} }
package com.neotel.smfcore.core.system.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.neotel.smfcore.core.system.bean.MSDAppendInfo;
import com.neotel.smfcore.core.system.service.manager.IMaterialTraceManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class MaterialTraceUtil {
@Autowired
private IMaterialTraceManager materialTraceManager;
//把task每个状态都拆分出来 重新保存一张表
public void onTaskStatusChange(DataLog task) {
try {
MaterialTrace materialTrace = dataLogToMaterialTrace(task);
materialTrace.setId("");
materialTrace.setCreateDate(new Date());
materialTrace.setUpdateDate(new Date());
materialTraceManager.save(materialTrace);
} catch (Exception e) {
e.printStackTrace();
}
}
private MaterialTrace dataLogToMaterialTrace(DataLog task) throws JsonProcessingException {
MaterialTrace materialTrace = new MaterialTrace();
materialTrace.setSingleOut(task.isSingleOut());
materialTrace.setStorageName(task.getStorageName());
materialTrace.setCid(task.getCid());
materialTrace.setStorageId(task.getStorageId());
materialTrace.setGroupId(task.getGroupId());
materialTrace.setSourceId(task.getSourceId());
materialTrace.setPosId(task.getPosId());
materialTrace.setPosName(task.getPosName());
materialTrace.setBarcode(task.getBarcode());
materialTrace.setW(task.getW());
materialTrace.setH(task.getH());
materialTrace.setCutReel(task.isCutReel());
materialTrace.setUrgentReel(task.isUrgentReel());
materialTrace.setLessSendReel(task.isLessSendReel());
materialTrace.setNgReel(task.isNgReel());
materialTrace.setPackageReel(task.isPackageReel());
materialTrace.setPartNumber(task.getPartNumber());
materialTrace.setNum(task.getNum());
materialTrace.setType(task.getType());
materialTrace.setStatus(task.getStatus());
materialTrace.setBatchId(task.getBatchId());
materialTrace.setBatchInfo(task.getBatchInfo());
materialTrace.setSourceType(task.getSourceType());
materialTrace.setSourceId(task.getSourceId());
materialTrace.setSourceName(task.getSourceName());
materialTrace.setSubSourceId(task.getSubSourceId());
materialTrace.setSubSourceInfo(task.getSubSourceInfo());
materialTrace.setCreator(task.getCreator());
materialTrace.setOperator(task.getOperator());
materialTrace.setRelationCodes(task.getRelationCodes());
materialTrace.setMemo(task.getMemo());
materialTrace.setMixTime(task.getMixTime());
materialTrace.setLightColor(task.getLightColor());
materialTrace.setExecuteTime(task.getExecuteTime());
materialTrace.setInStoreTime(task.getInStoreTime());
materialTrace.setPutInDate(task.getPutInDate());
materialTrace.setLocInfo(task.getLocInfo());
materialTrace.setInOutType(task.getInOutType());
materialTrace.setProviderNumber(task.getProviderNumber());
materialTrace.setMsdAppendInfo(task.getMsdAppendInfo());
materialTrace.setPriority(task.getPriority());
materialTrace.setLine(task.getLine());
materialTrace.setClosed(task.isClosed());
return materialTrace;
}
}
...@@ -56,6 +56,10 @@ public class TaskService { ...@@ -56,6 +56,10 @@ public class TaskService {
@Autowired @Autowired
protected SelfAuditUtil selfAuditUtil; protected SelfAuditUtil selfAuditUtil;
@Autowired
private MaterialTraceUtil materialTraceUtil;
@Autowired @Autowired
private SmfApi smfApi; private SmfApi smfApi;
...@@ -165,6 +169,7 @@ public class TaskService { ...@@ -165,6 +169,7 @@ public class TaskService {
liteOrderCache.onTaskStatusChange(task); liteOrderCache.onTaskStatusChange(task);
smfApi.onTaskStatusChange(task); smfApi.onTaskStatusChange(task);
selfAuditUtil.onTaskStatusChange(task); selfAuditUtil.onTaskStatusChange(task);
materialTraceUtil.onTaskStatusChange(task);
} }
/** /**
......
...@@ -7,6 +7,7 @@ import com.neotel.smfcore.common.utils.JsonUtil; ...@@ -7,6 +7,7 @@ import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.bean.CodeValidateParam; import com.neotel.smfcore.core.api.bean.CodeValidateParam;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener; import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...@@ -370,6 +371,7 @@ public class AdvantechApi extends BaseSmfApiListener { ...@@ -370,6 +371,7 @@ public class AdvantechApi extends BaseSmfApiListener {
liteOrder.setSoId(wip_no); liteOrder.setSoId(wip_no);
liteOrder.setLine(line_desc); liteOrder.setLine(line_desc);
liteOrder.setSource(line_id); liteOrder.setSource(line_id);
liteOrder.setSourceType(LITEORDER_STYPE.API);
liteOrder.setSo(model_no); liteOrder.setSo(model_no);
} }
......
...@@ -22,8 +22,9 @@ public class FujiMenu { ...@@ -22,8 +22,9 @@ public class FujiMenu {
String menuLabel = "fuji"; String menuLabel = "fuji";
Menu nexim = Menu.CreatePMenu("Nexim", 3, "nexim", "nexim", null); // Menu nexim = Menu.CreatePMenu("Nexim", 3, "nexim", "nexim", null);
MenuInit.addMenu(menuLabel,nexim,3, "Nexim 工单","neximWorkOrder", "neolight/neximWorkOrder/index","neximWorkOrder"); Menu poutOut = Menu.CreatePMenu("物料管理", 3, "order", "workOrder", null);
MenuInit.addMenu(menuLabel,poutOut,3, "Nexim 工单","neximWorkOrder", "neolight/neximWorkOrder/index","neximWorkOrder");
String apiName = smfApi.getApiName(); String apiName = smfApi.getApiName();
if(Strings.isNotBlank(apiName) && apiName.equals(menuLabel)){ if(Strings.isNotBlank(apiName) && apiName.equals(menuLabel)){
......
package com.neotel.smfcore.custom.fuji.bean.dto;
import com.neotel.smfcore.custom.fuji.bean.FujiConfig;
import lombok.Data;
import java.util.Date;
@Data
public class FujiConfigDto extends FujiConfig {
private String etoUpdateDateStr;
private String etnUpdateDateStr;
}
...@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder; ...@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.custom.fuji.FujiApi; import com.neotel.smfcore.custom.fuji.FujiApi;
import com.neotel.smfcore.custom.fuji.bean.FujiConfig; import com.neotel.smfcore.custom.fuji.bean.FujiConfig;
import com.neotel.smfcore.custom.fuji.bean.dto.FujiConfigDto;
import com.neotel.smfcore.custom.fuji.config.FujiCacheConfig; import com.neotel.smfcore.custom.fuji.config.FujiCacheConfig;
import com.neotel.smfcore.custom.fuji.order.service.JobService; import com.neotel.smfcore.custom.fuji.order.service.JobService;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
...@@ -21,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -21,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -71,7 +74,19 @@ public class FujiController { ...@@ -71,7 +74,19 @@ public class FujiController {
if (config == null) { if (config == null) {
config = new FujiConfig(); config = new FujiConfig();
} }
return ResultBean.newOkResult(config); FujiConfigDto dto = new FujiConfigDto();
dto.setAuthUrl(config.getAuthUrl());
dto.setGetDidInfoUrl(config.getGetDidInfoUrl());
dto.setRegisterDidInfoUrl(config.getRegisterDidInfoUrl());
dto.setResult(config.getResult());
dto.setLastUpdateTime(config.getLastUpdateTime());
dto.setInputEto(config.getInputEto());
dto.setOutputEtn(config.getOutputEtn());
dto.setTime(config.getTime());
dto.setEtnUpdateDateStr(getUpdateDate(config.getOutputEtn()));
dto.setEtoUpdateDateStr(getUpdateDate(config.getInputEto()));
return ResultBean.newOkResult(dto);
} }
@ApiOperation("did注册") @ApiOperation("did注册")
...@@ -97,7 +112,7 @@ public class FujiController { ...@@ -97,7 +112,7 @@ public class FujiController {
@ApiOperation("job出库") @ApiOperation("job出库")
@RequestMapping("/jobCheckOut") @RequestMapping("/jobCheckOut")
@AnonymousAccess //@AnonymousAccess
public synchronized ResultBean jobCheckOut(String orderNo) { public synchronized ResultBean jobCheckOut(String orderNo) {
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo); LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo);
if (liteOrder == null){ if (liteOrder == null){
...@@ -117,7 +132,7 @@ public class FujiController { ...@@ -117,7 +132,7 @@ public class FujiController {
@ApiOperation("获取需要出库/正在执行中的job任务") @ApiOperation("获取需要出库/正在执行中的job任务")
@RequestMapping("/jobInfo") @RequestMapping("/jobInfo")
@AnonymousAccess //@AnonymousAccess
public ResultBean getJobInfo() { public ResultBean getJobInfo() {
List<Map<String, Object>> resultList = new ArrayList<>(); List<Map<String, Object>> resultList = new ArrayList<>();
Collection<LiteOrder> allLiteOrder = liteOrderCache.getAllLiteOrder(); Collection<LiteOrder> allLiteOrder = liteOrderCache.getAllLiteOrder();
...@@ -172,4 +187,41 @@ public class FujiController { ...@@ -172,4 +187,41 @@ public class FujiController {
} }
return ResultBean.newOkResult(resultList); return ResultBean.newOkResult(resultList);
} }
@ApiOperation("获取文件修改时间")
@RequestMapping("/getFileUpdateDate")
//@AnonymousAccess
public ResultBean getFileUpdateDate(String param) {
FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name);
if (config == null) {
config = new FujiConfig();
}
String updateStr = "";
String fileName = "";
if (param.contains("eto")) {
fileName = config.getInputEto();
updateStr = getUpdateDate(config.getInputEto());
} else if (param.contains("etn")) {
fileName = config.getOutputEtn();
updateStr = getUpdateDate(config.getOutputEtn());
}
Map<String, String> resultMap = new HashMap<>();
resultMap.put("updateDate", updateStr);
resultMap.put("fileName", fileName);
return ResultBean.newOkResult(resultMap);
}
private String getUpdateDate(String fileName) {
if (StringUtils.isNotEmpty(fileName)) {
File file = new File(fileName);
if (file.exists()) {
long lastModified = file.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date(lastModified));
}
}
return "";
}
} }
...@@ -8,6 +8,7 @@ import com.neotel.smfcore.core.device.enums.OP; ...@@ -8,6 +8,7 @@ import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; 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.LiteOrder;
...@@ -192,6 +193,7 @@ public class JobService { ...@@ -192,6 +193,7 @@ public class JobService {
//设置工单名和额外字段 //设置工单名和额外字段
liteOrder.setOrderNo(jobName + "_" + fileName); liteOrder.setOrderNo(jobName + "_" + fileName);
liteOrder.setSource("nexim"); liteOrder.setSource("nexim");
liteOrder.setSourceType(LITEORDER_STYPE.API);
liteOrder.addAppendDate("jobState", jobState); liteOrder.addAppendDate("jobState", jobState);
liteOrder.addAppendDate("jobName", jobName); liteOrder.addAppendDate("jobName", jobName);
liteOrder.addAppendDate("fileName", fileName); liteOrder.addAppendDate("fileName", fileName);
......
package com.neotel.smfcore.custom.haierIndiaSp1560;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
@Slf4j
public class HaierIndiaSpApi extends BaseSmfApiListener {
// api:
// name: sp1560
// outNotifyUrl: http://xxxxxxxx/interface/fridge
// inNotifyUrl: http://xxxxxxxx/interface/fridge
// taskNotifyUrl: http://xxxxxxxx/interface/fridge
@Autowired
private IStoragePosManager storagePosManager;
@Override
public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("sp1560");
}
@Override
public void inTaskStatusChange(String inNotifyUrl, DataLog task){
TaskStatusChange(inNotifyUrl,task);
}
@Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task){
TaskStatusChange(outNotifyUrl,task);
}
@Override
public void otherTaskStatusChange(String taskNotifyUrl, DataLog task) {
TaskStatusChange(taskNotifyUrl,task);
}
public boolean TaskStatusChange(String url, DataLog task ) {
if (ObjectUtil.isEmpty(url)) {
return false;
}
// 参数名 参数类型 备注
// data JSON 提交JSON数据集
// 参数名 参数类型 备注
// STATUS STRING 操作类型,0出冰箱 1入冰箱 2回温 3 搅拌 4领用5 回收 必填
// ITEM_SN STRING 锡膏SN,必填
// EMP STRING 操作员工号,选填
// OP_TIME STRING 操作时间,必填,格式:yyyy-MM-dd HH:mm:ss
Barcode barcode = barcodeManager.get(task.getBarcode());
int opType = -1;
if (task.isCheckOutTask()) {
//4领用
opType = 4;
} else if (task.isPutInTask()) {
StoragePos pos = storagePosManager.getByPosName(task.getPosName());
if (!pos.isWarmPos()) {
//入库到冷藏区, 1入冰箱
opType = 1;
}
} else if (task.isRewarmTakingTask()) {
//回温取料, 0出冰箱
opType = 0;
} else if (task.isRewarmPuttingTask()) {
//回温放料,2 回温
opType = 2;
}
if (opType == -1) {
return false;
}
try {
Map<String, Object> param = new HashMap<>();
Map<String, String> dataMap = new HashMap<>();
dataMap.put("STATUS", opType + "");
dataMap.put("ITEM_SN", barcode.getBarcode());
String time = DateUtil.toDateString(task.getUpdateDate(), DateUtil.DATE_PATTERN);
dataMap.put("OP_TIME", time);
param.put("date", dataMap);
log.info("TaskStatusChange,url=" + url + ",发送数据=" + JsonUtil.toJsonStr(param) );
String result = HttpHelper.postJson(url, param);
log.info("TaskStatusChange,url=" + url + ",收到数据=" + result);
return true;
} catch (ApiException apiException) {
log.info("TaskStatusChange,url=" + url + " apiException " + apiException.toString());
} catch (Exception exception) {
log.info("TaskStatusChange,url=" + url + " apiException " + exception.toString());
}
return false;
}
}
...@@ -24,7 +24,7 @@ public class HamanOrderFileListener extends DefaultOrderFileListener { ...@@ -24,7 +24,7 @@ public class HamanOrderFileListener extends DefaultOrderFileListener {
protected IHamanBinPosDao hamanBinPosDao; protected IHamanBinPosDao hamanBinPosDao;
@Override @Override
public boolean handleOrderFile(File orderFile) { public boolean handleOrderFile(File orderFile,int sourceType) {
String fileName = orderFile.getName(); String fileName = orderFile.getName();
if(isFileType(fileName,"csv")){ if(isFileType(fileName,"csv")){
......
package com.neotel.smfcore.custom.hanwha.controller;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.custom.hanwha.util.HanwhaApiInfoUtil;
import com.neotel.smfcore.custom.hanwha.util.bean.HanwhaApiInfo;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/hanwhaApiInfo")
public class HanwhaApiInfoController {
@Autowired
private HanwhaApiInfoUtil hanwhaApiInfoUtil;
@ApiOperation("获取列表")
@RequestMapping("/getApiInfoList")
public ResultBean getApiInfoList(){
List<HanwhaApiInfo> apiInfoList = hanwhaApiInfoUtil.getApiInfoList();
return ResultBean.newOkResult(apiInfoList);
}
}
package com.neotel.smfcore.custom.hanwha.controller;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.custom.hanwha.util.HanwhaCacheUtil;
import com.neotel.smfcore.custom.hanwha.util.bean.HanwhaCacheConfig;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/hanwhaConfig")
public class HanwhaConfigController {
@Autowired
private HanwhaCacheUtil hanwhaCacheUtil;
@ApiOperation("获取ip和端口号")
@RequestMapping("/getCacheConfig")
public ResultBean getCacheConfig(){
return ResultBean.newOkResult(hanwhaCacheUtil.getHostAndPortCache());
}
@ApiOperation("修改ip和端口号")
@RequestMapping("/updateCacheConfig")
public ResultBean updateCacheConfig(@RequestBody HanwhaCacheConfig cacheConfig) {
String host = cacheConfig.getHost();
String apiPort = cacheConfig.getApiPort();
String webPort = cacheConfig.getWebPort();
log.info("收到修改ip和端口号,host为[{}],apiPort为[{}],webPort为[{}]",host,apiPort,webPort);
if (StringUtils.isEmpty(host)){
return ResultBean.newErrorResult(1,"smfcore.valueCanotNull", "{0}不能为空", new String[]{"host"});
}
if (StringUtils.isEmpty(webPort)){
return ResultBean.newErrorResult(1,"smfcore.valueCanotNull", "{0}不能为空", new String[]{"webPort"});
}
if (StringUtils.isEmpty(apiPort)){
return ResultBean.newErrorResult(1,"smfcore.valueCanotNull", "{0}不能为空", new String[]{"apiPort"});
}
hanwhaCacheUtil.updateHostAndPort(cacheConfig);
return ResultBean.newOkResult("");
}
}
...@@ -13,10 +13,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -13,10 +13,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
...@@ -45,15 +42,16 @@ public class HanwhaController { ...@@ -45,15 +42,16 @@ public class HanwhaController {
@ApiOperation("更新最大工单数") @ApiOperation("更新最大工单数")
@GetMapping("/UpdateOrderMode") @PostMapping("/UpdateOrderMode")
@AnonymousAccess @AnonymousAccess
public ResultBean UpdateOrderMode(@RequestParam Integer maxOrderCount) { public ResultBean UpdateOrderMode(@RequestParam Integer maxOrderCount) {
if(ObjectUtil.isEmpty(maxOrderCount)){ // if(ObjectUtil.isEmpty(maxOrderCount)){
return ResultBean.newErrorResult(-1,"Error","Error"); // return ResultBean.newErrorResult(-1,"Error","Error");
} // }
liteOrderCache.MaxOrderCount=maxOrderCount; // liteOrderCache.MaxOrderCount=maxOrderCount;
log.info("UpdateOrderMode 设置 liteOrderCache.MaxOrderCount="+liteOrderCache.MaxOrderCount); // log.info("UpdateOrderMode 设置 liteOrderCache.MaxOrderCount="+liteOrderCache.MaxOrderCount);
return ResultBean.newOkResult(maxOrderCount); // return ResultBean.newOkResult(maxOrderCount);
return ResultBean.newOkResult("");
} }
} }
...@@ -5,15 +5,31 @@ import com.neotel.smfcore.common.exception.ApiException; ...@@ -5,15 +5,31 @@ import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.HttpHelper; import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil; import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status;
import com.neotel.smfcore.core.apiInteraction.service.manager.IApiInteractionManager;
import com.neotel.smfcore.core.apiInteraction.service.po.ApiInteraction;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.custom.hanwha.client.MyWebSocketClient;
import com.neotel.smfcore.custom.hanwha.handler.bean.*; import com.neotel.smfcore.custom.hanwha.handler.bean.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.net.URI;
import java.util.*; import java.util.*;
@Service @Service
@Slf4j @Slf4j
public class TMSApis { public class TMSApis {
@Autowired
private IApiInteractionManager apiInteractionManager;
@Autowired
private DataCache dataCache;
/** /**
* 3.16 RequestGetPartInfo * 3.16 RequestGetPartInfo
* Request part information of given ReelCode to TMS (when the Rack needs it). * Request part information of given ReelCode to TMS (when the Rack needs it).
...@@ -473,10 +489,113 @@ public class TMSApis { ...@@ -473,10 +489,113 @@ public class TMSApis {
private String PostJson(String url,Map<String,Object> sendData) throws ApiException { private String PostJson(String url,Map<String,Object> sendData) throws ApiException {
String requestParam = JsonUtil.toJsonStr(sendData);
try {
String responseStr = HttpHelper.postJsonWithAuth(url, sendData, null, 3000, 10000);
log.info("PostJson, url=[" + url + "],send=[" + requestParam + "],response=[" + responseStr + "]");
apiInteractionManager.save(new ApiInteraction(new Date(), url, requestParam, responseStr, ApiInteraction_Status.OK, EquipmentType.T_SOLUTION.name()));
return responseStr;
} catch (ApiException ex) {
log.error(ex.toString());
apiInteractionManager.save(new ApiInteraction(new Date(), url, requestParam, ex.toString(), ApiInteraction_Status.ERROE, EquipmentType.T_SOLUTION.name()));
throw ex;
}
}
public boolean TestApi(String ip,int apiPort ) {
try {
List<String> cids = new ArrayList<>(dataCache.getAllStorage().keySet());
Integer[] statusList= new Integer[0];
List<String> storageIds = new ArrayList<>();
List<String> storageTypes = new ArrayList<>();
List<Integer> isConns = new ArrayList<>();
int i = 0;
for (String cid : cids) {
Storage storage = dataCache.getStorage(cid);
if (storage == null) {
continue;
}
String type = "Storage";
if (storage.isNLShelf() || storage.isNLPShelf() || storage.isNLMShelf() || storage.isShelf()) {
type = "Rack";
}
int status = -1;
if (statusList != null && statusList.length > i) {
status = statusList[i];
} else {
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut()) {
status = -1;
} else {
status = bean.getStatus();
}
}
String conCode = "0";
if(status>=1){
conCode="2";
}
storageIds.add(storage.getCid());
storageTypes.add(type);
isConns.add(Integer.parseInt(conCode));
i++;
break;
}
String responseStr = HttpHelper.postJson(url, sendData); String RequestID="0";
log.info("PostJson, url=["+url+"],send=["+JsonUtil.toJsonStr(sendData)+"],response=["+responseStr+"]"); String url = String.format("http://%s:%d/", ip, apiPort) + "webservice/RequestUpdateStorageConnectionInfo";
return responseStr; Map<String, Object> dataMap = new HashMap<>();
dataMap.put("RequestID", RequestID);
dataMap.put("Indate", getInDataStr());
dataMap.put("StorageID", storageIds);
dataMap.put("StorageType", storageTypes);
dataMap.put("IsConn", isConns);
Map<String, Object> sendData = new HashMap<>();
sendData.put("data", dataMap);
String responseStr = PostJson(url, sendData);
return true;
} catch (Exception ex) {
return false;
}
} }
public boolean TestWebSocket( String ip ,int webPort) {
try {
String webUrl = String.format("ws://%s:%d/", ip, webPort);
MyWebSocketClient websocket = new MyWebSocketClient(new URI(webUrl), null );
websocket.setConnectionLostTimeout(3000);
try {
// 设置连接超时时间为3秒
websocket.connect();
//等待3秒看是否连接
for (int i=0;i<100;i++){
Thread.sleep(30);
if(websocket.isOpen()){
log.info("TestWebSocket "+webUrl+" 已连接");
return true;
}
}
} catch (Exception e) {
return false;
} finally {
try {
websocket.close();
} catch (Exception e) {
log.info(e.toString());
}
}
} catch (Exception ex) {
log.info(ex.toString());
}
return false;
}
} }
...@@ -7,8 +7,12 @@ import com.neotel.smfcore.core.barcode.service.manager.IComponentManager; ...@@ -7,8 +7,12 @@ import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component; import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import com.neotel.smfcore.core.equipment.util.EquipConfigUtil;
import com.neotel.smfcore.core.equipment.util.bean.EquipConfigInfo;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; 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.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...@@ -57,6 +61,9 @@ public class TMSUtil { ...@@ -57,6 +61,9 @@ public class TMSUtil {
@Autowired @Autowired
private TMSApis tmsApis; private TMSApis tmsApis;
@Autowired
private EquipConfigUtil equipConfigUtil;
public TMSReserve GetOrderInfo(LiteOrder liteOrder) { public TMSReserve GetOrderInfo(LiteOrder liteOrder) {
TMSReserve tmsReserve = new TMSReserve(); TMSReserve tmsReserve = new TMSReserve();
...@@ -161,6 +168,7 @@ public class TMSUtil { ...@@ -161,6 +168,7 @@ public class TMSUtil {
LiteOrder liteOrder = new LiteOrder(orderNo, items); LiteOrder liteOrder = new LiteOrder(orderNo, items);
liteOrder.setSource(requestCmd); liteOrder.setSource(requestCmd);
liteOrder.setSourceType(LITEORDER_STYPE.API);
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo()); LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
if (dbOrder != null) { if (dbOrder != null) {
orderNo = orderNo + "-" + requestID; orderNo = orderNo + "-" + requestID;
...@@ -302,7 +310,14 @@ public class TMSUtil { ...@@ -302,7 +310,14 @@ public class TMSUtil {
public boolean HasExeOrder(){ public boolean HasExeOrder(){
if(liteOrderCache.SingleOrderMode()){ EquipConfigInfo config=equipConfigUtil.getConfigCache(EquipmentType.T_SOLUTION.name());
Boolean singleOrderMode= true;
if(config!=null){
singleOrderMode= config.GetConfigValue("singleOrder",true );
}
if(singleOrderMode){
// if(liteOrderCache.SingleOrderMode()){
Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED)); Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
List<LiteOrder> orderList = liteOrderManager.findByQuery(query); List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
List<LiteOrder> nOder=new ArrayList<>(); List<LiteOrder> nOder=new ArrayList<>();
......
package com.neotel.smfcore.custom.hanwha.util;
import com.google.common.collect.Maps;
import com.neotel.smfcore.custom.hanwha.util.bean.HanwhaApiInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
@Slf4j
@Service
public class HanwhaApiInfoUtil {
//api接口信息,默认返回10条
public static List<HanwhaApiInfo> apiInfoList = new CopyOnWriteArrayList<>();
public void updateApiInfoList(String url, String requestParam, String resultReturn) {
HanwhaApiInfo info = new HanwhaApiInfo();
info.setCreateDate(new Date());
info.setUrl(url);
info.setRequestParam(requestParam);
info.setResultReturn(resultReturn);
apiInfoList.add(info);
if (apiInfoList != null && apiInfoList.size() > 10) {
apiInfoList.remove(0);
}
}
public List<HanwhaApiInfo> getApiInfoList(){
List<HanwhaApiInfo> resultList = new ArrayList<>();
if (apiInfoList != null && !apiInfoList.isEmpty()){
resultList = apiInfoList.stream().sorted(Comparator.comparing(HanwhaApiInfo::getCreateDate).reversed()).collect(Collectors.toList());
}
return resultList;
}
}
package com.neotel.smfcore.custom.hanwha.util;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.custom.hanwha.util.bean.HanwhaCacheConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class HanwhaCacheUtil {
@Autowired
private DataCache dataCache;
public static final String Cache_Hanwha_HostAndPost = "Cache_Hanwha_HostAndPost";
public void updateHostAndPort(HanwhaCacheConfig cacheConfig) {
HanwhaCacheConfig hanwhaCacheConfig = dataCache.getCache(Cache_Hanwha_HostAndPost);
if (hanwhaCacheConfig == null) {
hanwhaCacheConfig = new HanwhaCacheConfig();
}
hanwhaCacheConfig.setHost(cacheConfig.getHost());
hanwhaCacheConfig.setWebPort(cacheConfig.getWebPort());
hanwhaCacheConfig.setApiPort(cacheConfig.getApiPort());
hanwhaCacheConfig.setSingleOrder(cacheConfig.isSingleOrder());
dataCache.updateCache(Cache_Hanwha_HostAndPost, hanwhaCacheConfig);
}
public HanwhaCacheConfig getHostAndPortCache(){
HanwhaCacheConfig hostAndPortCache = dataCache.getCache(Cache_Hanwha_HostAndPost);
if (hostAndPortCache == null) {
hostAndPortCache = new HanwhaCacheConfig();
}
return hostAndPortCache;
}
}
package com.neotel.smfcore.custom.hanwha.util.bean;
import lombok.Data;
import java.util.Date;
@Data
public class HanwhaApiInfo {
private String url;
private String requestParam;
private String resultReturn;
private Date createDate;
}
package com.neotel.smfcore.custom.hanwha.util.bean;
import lombok.Data;
@Data
public class HanwhaCacheConfig {
private String host;
private String webPort;
private String apiPort;
private boolean singleOrder = false;
}
...@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.device.enums.OP; ...@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; 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.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...@@ -465,6 +466,7 @@ public class HellaServiceHandler extends BaseSmfApiListener implements IoHandler ...@@ -465,6 +466,7 @@ public class HellaServiceHandler extends BaseSmfApiListener implements IoHandler
} }
liteOrder = new LiteOrder(workorderNumber,items); liteOrder = new LiteOrder(workorderNumber,items);
liteOrder.setSource(groupName); liteOrder.setSource(groupName);
liteOrder.setSourceType(LITEORDER_STYPE.API);
log.info("新增加订单:" + liteOrder.getOrderNo()+",设备组名称["+groupName+"],标签名称["+labelName+"]"); log.info("新增加订单:" + liteOrder.getOrderNo()+",设备组名称["+groupName+"],标签名称["+labelName+"]");
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
......
package com.neotel.smfcore.custom.keboda1335;
import com.neotel.smfcore.custom.neotel.NeotelApi;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Service
public class KebodaApi extends NeotelApi {
@Override
public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("kbd");
}
}
...@@ -135,12 +135,16 @@ public class KebodaController { ...@@ -135,12 +135,16 @@ public class KebodaController {
//已经在任务当中,返回对应的信息 //已经在任务当中,返回对应的信息
if (dataLog.getBarcode().equals(barcode.getBarcode())) { if (dataLog.getBarcode().equals(barcode.getBarcode())) {
if (dataLog.isPutInTask()) { if (dataLog.isPutInTask()) {
//已有入库任务 if (cidList.contains(dataLog.getCid())) {
errorMsg = "物料[" + dataLog.getBarcode() + "]已有入库任务,需继续执行入库动作"; //已有入库任务
resultMap.put("pos", dataLog.getPosName()); errorMsg = "物料[" + dataLog.getBarcode() + "]已有入库任务,需继续执行入库动作";
resultMap.put("barcode", barcode.getBarcode()); resultMap.put("pos", dataLog.getPosName());
resultMap.put("cid", dataLog.getCid()); resultMap.put("barcode", barcode.getBarcode());
return resultMap; resultMap.put("cid", dataLog.getCid());
return resultMap;
} else {
throw new ValidateException("smfcore.error.barcode.taskNotEnd", "料盘[{0}}]的操作未完成,无法执行入库操作", new String[]{barcode.getBarcode()});
}
} else { } else {
//已有出库任务 //已有出库任务
errorMsg = "物料[" + dataLog.getBarcode() + "]已有出库任务,需继续执行出库动作"; errorMsg = "物料[" + dataLog.getBarcode() + "]已有出库任务,需继续执行出库动作";
...@@ -371,7 +375,9 @@ public class KebodaController { ...@@ -371,7 +375,9 @@ public class KebodaController {
private StoragePos findBestFixPos(List<Storage> storageList,Barcode barcode, String rfid, String lastPosId){ private StoragePos findBestFixPos(List<Storage> storageList,Barcode barcode, String rfid, String lastPosId){
StoragePos pos = null; StoragePos pos = null;
for (Storage storage : storageList) { for (Storage storage : storageList) {
StoragePos tempPos = taskService.findEmptyPosForPutIn(storageList, barcode, rfid, lastPosId); List<Storage> newStorageList = new ArrayList<>();
newStorageList.add(storage);
StoragePos tempPos = taskService.findEmptyPosForPutIn(newStorageList, barcode, rfid, lastPosId);
if(tempPos != null){ if(tempPos != null){
if(tempPos.getW() == barcode.getPlateSize() && tempPos.getH() == barcode.getHeight()){ if(tempPos.getW() == barcode.getPlateSize() && tempPos.getH() == barcode.getHeight()){
//库位尺寸与料盘尺寸完全一致,直接返回 //库位尺寸与料盘尺寸完全一致,直接返回
......
...@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.device.bean.BoxStatusBean; ...@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STYPE;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; 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.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...@@ -130,6 +131,7 @@ public class TianTongController { ...@@ -130,6 +131,7 @@ public class TianTongController {
LiteOrder liteOrder = new LiteOrder(); LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(orderNo); liteOrder.setOrderNo(orderNo);
liteOrder.setSource(source); liteOrder.setSource(source);
liteOrder.setSourceType(LITEORDER_STYPE.API);
liteOrder.setSo(so); liteOrder.setSo(so);
liteOrder.setOrderItems(orderItemList); liteOrder.setOrderItems(orderItemList);
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
......
...@@ -105,7 +105,7 @@ public class AuthorizationController { ...@@ -105,7 +105,7 @@ public class AuthorizationController {
try { try {
long seconds = onlineUserService.properties.getTokenValidityInSeconds() / 1000; long seconds = onlineUserService.properties.getTokenValidityInSeconds() / 1000;
Date exTime= DateUtil.addSeconds(new Date(), new Long(seconds).intValue()); Date exTime= DateUtil.addSeconds(new Date(), new Long(seconds).intValue());
onlineUserDto = new OnlineUserDto(jwtUserDto.getUsername(), browser , ip, address, EncryptUtils.desEncrypt(token), new Date(),exTime); onlineUserDto = new OnlineUserDto(jwtUserDto.getUsername(), browser , ip, address, EncryptUtils.desEncrypt(token), new Date(),exTime,jwtUserDto.getImageStr());
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(),e); log.error(e.getMessage(),e);
} }
......
...@@ -20,6 +20,8 @@ import com.neotel.smfcore.common.bean.ResultBean; ...@@ -20,6 +20,8 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.csv.CsvReader; import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.*; import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.service.bean.LanguageInfo;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.bean.RsaProperties; import com.neotel.smfcore.security.bean.RsaProperties;
import com.neotel.smfcore.security.rest.bean.dto.UserDto; import com.neotel.smfcore.security.rest.bean.dto.UserDto;
...@@ -68,6 +70,8 @@ public class UserController { ...@@ -68,6 +70,8 @@ public class UserController {
@Autowired @Autowired
private final FileProperties properties; private final FileProperties properties;
@Autowired
private DataCache dataCache;
@ApiOperation("导出用户数据") @ApiOperation("导出用户数据")
@GetMapping(value = "/download") @GetMapping(value = "/download")
...@@ -85,7 +89,17 @@ public class UserController { ...@@ -85,7 +89,17 @@ public class UserController {
Query query = QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
PageData<User> userPageData = userManager.findByPage(query, pageable); PageData<User> userPageData = userManager.findByPage(query, pageable);
List<UserDto> dtos = userManager.listToDto(userPageData.getContent()); List<UserDto> dtos = userManager.listToDto(userPageData.getContent());
return new PageData<>(dtos,userPageData.getTotalElements()); List<LanguageInfo> lanList = dataCache.getLanguageList();
for (int i = 0; i < dtos.size(); i++) {
String lan=dtos.get(i).getLanguage().replace("_","-");
for (LanguageInfo lang : lanList) {
if (lang.getLanCode().equalsIgnoreCase(dtos.get(i).getLanguage())||lang.getLanCode().equalsIgnoreCase(lan)) {
dtos.get(i).setLanName(lang.getLanName());
break;
}
}
}
return new PageData<>(dtos, userPageData.getTotalElements());
} }
@ApiOperation("新增用户") @ApiOperation("新增用户")
......
...@@ -78,4 +78,10 @@ public class JwtUserDto implements UserDetails { ...@@ -78,4 +78,10 @@ public class JwtUserDto implements UserDetails {
public boolean isEnabled() { public boolean isEnabled() {
return user.getEnabled(); return user.getEnabled();
} }
public String getImageStr(){ return user.getImageStr();}
} }
...@@ -64,5 +64,8 @@ public class OnlineUserDto { ...@@ -64,5 +64,8 @@ public class OnlineUserDto {
*/ */
private Date expiresTime; private Date expiresTime;
/**
* 头像
*/
private String imageStr;
} }
...@@ -52,5 +52,10 @@ public class UserDto implements Serializable { ...@@ -52,5 +52,10 @@ public class UserDto implements Serializable {
@ApiModelProperty("是否已进入调试模式") @ApiModelProperty("是否已进入调试模式")
private Boolean debugModel=false; private Boolean debugModel=false;
@ApiModelProperty("头像")
private String imageStr;
@ApiModelProperty("语言名称:简体中文,繁体中文 等")
private String lanName;
} }
...@@ -100,6 +100,7 @@ public class UserManagerImpl implements IUserManager { ...@@ -100,6 +100,7 @@ public class UserManagerImpl implements IUserManager {
dataUser.setGroups(user.getGroups()); dataUser.setGroups(user.getGroups());
dataUser.setLanguage(user.getLanguage()); dataUser.setLanguage(user.getLanguage());
dataUser.setPwdResetTime(user.getPwdResetTime()); dataUser.setPwdResetTime(user.getPwdResetTime());
dataUser.setImageStr(user.getImageStr());
userDao.save(dataUser); userDao.save(dataUser);
} }
} }
...@@ -114,6 +115,7 @@ public class UserManagerImpl implements IUserManager { ...@@ -114,6 +115,7 @@ public class UserManagerImpl implements IUserManager {
//只能修改邮箱和语言 //只能修改邮箱和语言
dataUser.setEmail(resources.getEmail()); dataUser.setEmail(resources.getEmail());
dataUser.setLanguage(resources.getLanguage()); dataUser.setLanguage(resources.getLanguage());
dataUser.setImageStr(resources.getImageStr());
} }
userDao.save(dataUser); userDao.save(dataUser);
......
...@@ -58,6 +58,12 @@ public class User extends BasePo implements Serializable { ...@@ -58,6 +58,12 @@ public class User extends BasePo implements Serializable {
private String checkCode; private String checkCode;
/**
* 头像
*/
private String imageStr;
public boolean hasGroup(String groupId) { public boolean hasGroup(String groupId) {
if (groupId == null || groupId.equals("") || groupId.equals("-1")) { if (groupId == null || groupId.equals("") || groupId.equals("-1")) {
......
...@@ -76,7 +76,7 @@ smfcore.barcode=\u6761\u7801\u7BA1\u7406 ...@@ -76,7 +76,7 @@ smfcore.barcode=\u6761\u7801\u7BA1\u7406
smfcore.log=\u65E5\u5FD7\u7BA1\u7406 smfcore.log=\u65E5\u5FD7\u7BA1\u7406
smfcore.taskLog=\u7269\u6599\u65E5\u5FD7 smfcore.taskLog=\u7269\u6599\u65E5\u5FD7
smfcore.user=\u7528\u6237\u7BA1\u7406 smfcore.user=\u7528\u6237\u7BA1\u7406
smfcore.peoples=\u7528\u6237\u7BA1\u7406 smfcore.peoples=\u8D26\u53F7\u7BA1\u7406
smfcore.role=\u89D2\u8272\u7BA1\u7406 smfcore.role=\u89D2\u8272\u7BA1\u7406
smfcore.menuNotExist=\u83DC\u5355{0}\u4E0D\u5B58\u5728 smfcore.menuNotExist=\u83DC\u5355{0}\u4E0D\u5B58\u5728
smfcore.noValidStorage=\u6599\u4ED3\u5217\u8868\u4E2D\u672A\u627E\u5230\u53EF\u7528\u7684\u6599\u4ED3 smfcore.noValidStorage=\u6599\u4ED3\u5217\u8868\u4E2D\u672A\u627E\u5230\u53EF\u7528\u7684\u6599\u4ED3
...@@ -402,4 +402,24 @@ smfcore.storagePos.yes=\u662F ...@@ -402,4 +402,24 @@ smfcore.storagePos.yes=\u662F
smfcore.storagePos.no=\u5426 smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u4EEA\u8868\u76D8 smfcore.dashBoard=\u4EEA\u8868\u76D8
smfcore.spHumiture=\u6E29\u6E7F\u5EA6 smfcore.spHumiture=\u6E29\u6E7F\u5EA6
smfcore.storageOther=\u5176\u4ED6\u8BBE\u5907
\ No newline at end of file \ No newline at end of file
smfcore.storageOther=\u5176\u4ED6\u8BBE\u5907
smfcore.humiture.ntemperature2=\u51B7\u85CF\u6E29\u5EA62
smfcore.humiture.ntemperature3=\u51B7\u85CF\u6E29\u5EA63
smfcore.humiture.codetemperature2=\u5236\u51B7\u6E29\u5EA62
smfcore.humiture.wtemperature=\u56DE\u6E29\u6E29\u5EA6
smfcore.equipconfig.connectTimeout=\u8FDE\u63A5\u8D85\u65F6
smfcore.equipApiMsg.url=URL
smfcore.equipApiMsg.request=\u8BF7\u6C42\u4FE1\u606F
smfcore.equipApiMsg.response=\u7ED3\u679C\u4FE1\u606F
smfcore.equipApiMsg.updateTime=\u65F6\u95F4
smfcore.equipApiMsg.state=\u7C7B\u578B
smfcore.equipment.view.nsgroup=Neo Scan
smfcore.equipment.view.apigroup=Pick and Place Machine
smfcore.language.displayLanName.zh-CN=\u4E2D\u6587
smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!