Commit f6f47470 sunke

去除工单中的type字段

工单出库增加singleOut字段标识出库到料串还是紧急料口
代码加密
1 个父辈 1810b4f4
......@@ -26,6 +26,7 @@
<fastjson.version>1.2.70</fastjson.version>
<swagger.version>2.9.2</swagger.version>
<log4j2.version>2.17.0</log4j2.version>
<classfinal.version>1.2.1</classfinal.version>
</properties>
<profiles>
<profile>
......@@ -310,6 +311,46 @@
</execution>
</executions>
</plugin>
<plugin>
<!-- https://gitee.com/roseboy/classfinal -->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>${classfinal.version}</version>
<configuration>
<!--加密密码,如果是#号,则使用无密码模式加密,【加密后没有pom文件,不用担心泄漏】
将加密后的war放在tomcat/webapps下, tomcat/bin/catalina 增加以下配置:
//linux下 catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -javaagent:classfinal-fatjar.jar='-pwd 0000000'";
export CATALINA_OPTS;
//win下catalina.bat
set JAVA_OPTS="-javaagent:classfinal-fatjar.jar=-pwd 000000"
set "JAVA_OPTS=%JAVA_OPTS% -javaagent:classfinal-fatjar.jar='-nopwd'"
//参数说明
// -pwd 加密项目的密码
// -nopwd 无密码加密时启动加上此参数,跳过输密码过程
// -pwdname 环境变量中密码的名字
-->
<password>#</password>
<!-- <code>F0CC84061C58DADF9AC3F20600C6EF6398CB5A55F9A086A9671136521C4B40CF5F7589F6D78A591D6456AA5055E1E9E9</code>-->
<packages>com.neotel</packages>
<cfgfiles>application.yml</cfgfiles>
<excludes>org.spring</excludes>
<!-- <libjars>a.jar,b.jar</libjars>-->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
......
......@@ -20,7 +20,13 @@ import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 加密
......@@ -97,4 +103,98 @@ public class EncryptUtils {
}
return b2;
}
/**
* md5加密
*
* @param str 字符串
* @return md5字串
*/
public static byte[] md5byte(char[] str) {
byte[] b = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] buffer = toBytes(str);
md.update(buffer);
b = md.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return b;
}
/**
* 字符数组转成字节数组
*
* @param chars 字符数组
* @return 字节数组
*/
public static byte[] toBytes(char[] chars) {
char[] chars0 = new char[chars.length];
System.arraycopy(chars, 0, chars0, 0, chars.length);
CharBuffer charBuffer = CharBuffer.wrap(chars0);
ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer);
byte[] bytes = Arrays.copyOfRange(byteBuffer.array(),
byteBuffer.position(), byteBuffer.limit());
Arrays.fill(charBuffer.array(), '\u0000'); // clear sensitive data
Arrays.fill(byteBuffer.array(), (byte) 0); // clear sensitive data
return bytes;
}
/**
* md5
*
* @param str 字串
* @return 32位md5
*/
public static char[] md5(char[] str) {
return md5(str, false);
}
/**
* md5
*
* @param str 字串
* @param sh0rt 是否16位
* @return 32位/16位md5
*/
public static char[] md5(char[] str, boolean sh0rt) {
byte s[] = md5byte(str);
if (s == null) {
return null;
}
int begin = 0;
int end = s.length;
if (sh0rt) {
begin = 8;
end = 16;
}
char[] result = new char[0];
for (int i = begin; i < end; i++) {
result = merger(result, Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6).toCharArray());
}
return result;
}
/**
* 合并byte[]
*
* @param bts 字节数组
* @return 合并后的字节
*/
public static char[] merger(char[]... bts) {
int lenght = 0;
for (char[] b : bts) {
lenght += b.length;
}
char[] bt = new char[lenght];
int lastLength = 0;
for (char[] b : bts) {
System.arraycopy(b, 0, bt, lastLength, b.length);
lastLength += b.length;
}
return bt;
}
}
......@@ -55,12 +55,16 @@ public class SecurityUtils {
return userDetailsService.loadUserByUsername(getCurrentUsername());
}
public static String getCurrentUsername(){
return getLoginUsername();
}
/**
* 获取系统用户名称,如果未登陆抛出异常
*
* @return 系统用户名称
*/
public static String getCurrentUsername() {
public static String getUsername() {
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
throw new ValidateException(HttpStatus.UNAUTHORIZED, "当前登录状态过期");
......@@ -77,7 +81,7 @@ public class SecurityUtils {
*/
public static String getLoginUsername(){
try{
return getCurrentUsername();
return getUsername();
}catch (Exception e){
return "";
}
......
package com.neotel.smfcore.common.utils;
import com.alibaba.excel.util.IoUtils;
import java.io.Closeable;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author sunke
* @date 2022/10/12 10:18 AM
*/
public class SysUtils {
/**
* 运行命令
*
* @param cmd 命令
* @param line 返回第几行结果,0返回所有
* @return 结果
*/
public static String runCmd(String cmd, int line) {
Process process;
Scanner sc = null;
StringBuffer sb = new StringBuffer();
try {
process = Runtime.getRuntime().exec(cmd);
process.getOutputStream().close();
sc = new Scanner(process.getInputStream());
int i = 0;
while (sc.hasNextLine()) {
i++;
String str = sc.nextLine();
if (line <= 0) {
sb.append(str).append("\r\n");
} else if (i == line) {
return str.trim();
}
}
sc.close();
} catch (Exception e) {
} finally {
close(sc);
}
return sb.toString();
}
/**
* 关闭流
*
* @param outs Closeable
*/
public static void close(Closeable... outs) {
if (outs != null) {
for (Closeable out : outs) {
if (out != null) {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
/**
* 运行cmd命令
*
* @param cmd 命令
* @param substr 关键字
* @return 包含关键字的行数
*/
public static String runCmd(String cmd, String substr) {
Process process;
Scanner sc = null;
try {
process = Runtime.getRuntime().exec(cmd);
process.getOutputStream().close();
sc = new Scanner(process.getInputStream());
while (sc.hasNextLine()) {
String str = sc.nextLine();
if (str != null && str.contains(substr)) {
return str.trim();
}
}
sc.close();
} catch (Exception e) {
} finally {
close(sc);
}
return null;
}
/**
* 获取mac地址
*
* @return mac 列表
*/
public static List<String> getMacList() {
ArrayList<String> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
try {
java.util.Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while (en.hasMoreElements()) {
NetworkInterface iface = en.nextElement();
List<InterfaceAddress> addrs = iface.getInterfaceAddresses();
for (InterfaceAddress addr : addrs) {
InetAddress ip = addr.getAddress();
if (ip.isLinkLocalAddress()) {//本地的不要
continue;
}
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
if (network == null) {
continue;
}
byte[] mac = network.getHardwareAddress();
if (mac == null) {
continue;
}
sb.delete(0, sb.length());
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
if (!list.contains(sb.toString())) {
list.add(sb.toString());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 获取cpu序列号
*
* @return 序列号
*/
public static String getCPUSerialNumber() {
String sysName = System.getProperty("os.name");
if (sysName.contains("Windows")) {//win
String str = runCmd("wmic cpu get ProcessorId", 2);
return str;
} else if (sysName.contains("Linux")) {
String str = runCmd("dmidecode |grep -A16 \"Processor Information$\"", "ID");
if (str != null) {
return str.substring(str.indexOf(":")).trim();
}
} else if (sysName.contains("Mac")) {
String str = runCmd("system_profiler SPHardwareDataType", "Serial Number");
if (str != null) {
return str.substring(str.indexOf(":") + 1).trim();
}
}
return "";
}
/**
* 获取硬盘序列号
*
* @return 硬盘序列号
*/
public static String getHardDiskSerialNumber() {
String sysName = System.getProperty("os.name");
if (sysName.contains("Windows")) {//win
String str = runCmd("wmic path win32_physicalmedia get serialnumber", 2);
return str;
} else if (sysName.contains("Linux")) {
String str = runCmd("dmidecode |grep -A16 \"System Information$\"", "Serial Number");
if (str != null) {
return str.substring(str.indexOf(":")).trim();
}
} else if (sysName.contains("Mac")) {
String str = runCmd("system_profiler SPStorageDataType", "Volume UUID");
if (str != null) {
return str.substring(str.indexOf(":") + 1).trim();
}
}
return "";
}
/**
* 生成机器码
*
* @return 机器码
*/
public static char[] makeMarchinCode() {
char[] c1 = EncryptUtils.md5(getMacList().toString().toCharArray());
char[] c2 = EncryptUtils.md5(getCPUSerialNumber().toCharArray());
char[] c3 = EncryptUtils.md5(getHardDiskSerialNumber().toCharArray());
char[] chars = EncryptUtils.merger(c1, c2, c3);
for (int i = 0; i < chars.length; i++) {
chars[i] = Character.toUpperCase(chars[i]);
}
return chars;
}
public static void main(String[] args) {
String code = new String(SysUtils.makeMarchinCode());
System.out.println(code);
}
}
......@@ -79,34 +79,38 @@ public class NLPShelfHandler extends BaseDeviceHandler {
// WebSocketServer.sendMsg("", new SocketMsg("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"}));
String loginUser = SecurityUtils.getLoginUsername();
Collection<DataLog> queueTasks = taskService.getQueueTasks();
ResultBean resultBean = null;
for (DataLog queueTask : queueTasks) {
if (queueTask.isPutInTask() && (queueTask.isWait() || queueTask.isExecuting())) {
if (!Strings.isNullOrEmpty(groupId) && queueTask.getGroupId().equals(groupId)) {
log.info("codeIn [" + code + "][" + groupId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 ");
throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()});
return ResultBean.newErrorResult(-1,"smfcore.unfinished","the task of [{0}] is unfinished",new String[]{queueTask.getBarcode()});
}
if (!Strings.isNullOrEmpty(storageId) && queueTask.getStorageId().equals(storageId)) {
log.info("codeIn [" + code + "][" + storageId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 ");
throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()});
log.info("codeIn [" + code + "][" + storageId + "]入库失败:料架[" + queueTask.getStorageId() + "]的任务还未结束 ");
return ResultBean.newErrorResult(-1,"smfcore.unfinished","the task of [{0}] is unfinished",new String[]{queueTask.getStorageName()});
}
}
}
CodeValidateParam params = new CodeValidateParam(loginUser, groupId, storageId, code, token);
Barcode barcodeSave = smfApi.canPutInBeforeResolve(params);
try{
CodeValidateParam params = new CodeValidateParam(loginUser, groupId, storageId, code, token);
Barcode barcodeSave = smfApi.canPutInBeforeResolve(params);
if (barcodeSave == null) {
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1=" + code);
}
if (barcodeSave == null) {
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1=" + code);
}
//从API验证
Barcode verResult = smfApi.canPutInAfterResolve(barcodeSave);
//从API验证
Barcode verResult = smfApi.canPutInAfterResolve(barcodeSave);
if (verResult != null) {
barcodeSave = verResult;
if (verResult != null) {
barcodeSave = verResult;
}
return putIn(loginUser, groupId, storageId, barcodeSave, token);
}catch (ValidateException ve){
return ResultBean.newErrorResult(-1,ve.getMsgKey(),ve.getDefaultMsg(),ve.getMsgParam());
}
return putIn(loginUser, groupId, storageId, barcodeSave, token);
}
protected ResultBean putIn(String loginUser, String groupId, String storageId, Barcode barcode, String token) {
......@@ -309,11 +313,16 @@ public class NLPShelfHandler extends BaseDeviceHandler {
if (hasReelPosList != null) {
Set<String> disabledPosNameSet = dataCache.getDisabledPosNameSet();
List<String> usedPosList = dataCache.getUsedPosNameList(cid);
List<String> newList=new ArrayList<>();
for (String posName : hasReelPosList) {
if(disabledPosNameSet.contains(posName)){
log.info(cid + "sensorChange hasReelPosList [" + posName + "]库位被禁用,忽略");
continue;
}else if(usedPosList.contains(posName)){
log.info(cid + "sensorChange hasReelPosList [" + posName + "]库位已有物料,加入到ok列表");
inOkList.add(posName);
continue;
}
newList.add(posName);
}
......@@ -505,6 +514,7 @@ public class NLPShelfHandler extends BaseDeviceHandler {
}
String hasReelPosColor = "orange";
//hasReelPosColor = ORDER_COLOR.DARKGREEN.name().toLowerCase();
// if(lightPosCidList.contains(cid)){
// hasReelPosColor = ORDER_COLOR.LIGHTBLUE.name();
// }
......
......@@ -326,10 +326,18 @@ public class LiteOrderCache {
ORDER_COLOR nextColor = ORDER_COLOR.nextColor(currentColors);
return nextColor;
}
/**
* 执行工单出库,批量料仓默认出库到料串上
*/
public String checkOutLiteOrder(String orderNo, boolean outBom){
boolean singleOut = false;
return checkOutLiteOrder(orderNo,outBom,singleOut);
}
/**
* 锁定物料
* 执行工单出库
*/
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom) {
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
......@@ -426,6 +434,7 @@ public class LiteOrderCache {
task.setType(OP.CHECKOUT);
task.setLightColor(nextColor.getRgb());
task.setStatus(OP_STATUS.WAIT.name());
task.setSingleOut(singleOut);
// task = dataLogDao.save(task);
taskService.addTaskToExecute(task);
}
......
......@@ -517,13 +517,10 @@ public class OrderController {
if (checkNum && item.getTotalOutNum() >= item.getNeedNum()) {
continue;
}
//pn
if (liteOrder.getType() == 1) {
if (item.getPn().equals(barcode.getPartNumber())) {
findItem = item;
break;
}
} else if (item.getRi().equals(barcode.getBarcode())) {
if(item.getRi() != null && item.getRi().equals(barcode.getBarcode())){
findItem = item;
break;
}else if(item.getPn() != null && item.getPn().equals(barcode.getPartNumber())){
findItem = item;
break;
}
......
......@@ -23,14 +23,6 @@ public class LiteOrder extends BasePo implements Serializable {
public LiteOrder(String orderNo, List<LiteOrderItem> orderItems) {
this.orderItems = orderItems;
this.orderNo = orderNo;
this.type = 2;
for (LiteOrderItem item :
orderItems) {
if (!StringUtils.isEmpty(item.getPn()) && (StringUtils.isEmpty(item.getRi()))) {
this.type = 1;
break;
}
}
this.status = LITEORDER_STATUS.NEW;
}
......@@ -41,7 +33,7 @@ public class LiteOrder extends BasePo implements Serializable {
/**
* 工单号
*/
private String so;
private String so = "";
/**
* 当前任务盘数
*/
......@@ -92,11 +84,6 @@ public class LiteOrder extends BasePo implements Serializable {
private float orderTimes = 1f;
/**
* 工单类型,默认1=PN,2=RI
*/
private int type=1;
/**
* 订单的详细信息
*/
@Transient
......
......@@ -13,12 +13,12 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
/**
* 物料编号
*/
private String pn;
private String pn = "";
/**
* 唯一码
*/
private String ri;
private String ri = "";
/**
......
......@@ -91,17 +91,20 @@ public class NeotelController {
orderItemList.add(orderItem);
}
}
boolean singleOut = false;
if (paramMap.get("singleOut") != null) {
singleOut = Boolean.valueOf(paramMap.get("singleOut").toString());
}
//开始保存数据
LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(orderNo);
liteOrder.setLine(line);
liteOrder.setSo(so);
liteOrder.setType(2);
liteOrder.setOrderItems(orderItemList);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
if(execute){
liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(),false);
liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(),false, singleOut);
}
}
return ResultBean.newOkResult("");
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!