diff --git a/libs/encrypt/Encryptor.dll b/libs/encrypt/Encryptor.dll new file mode 100644 index 0000000..edee19a Binary files /dev/null and b/libs/encrypt/Encryptor.dll differ diff --git a/modules/common/src/main/java/encryptor/Encryptor.java b/modules/common/src/main/java/encryptor/Encryptor.java new file mode 100644 index 0000000..fe3cf1c --- /dev/null +++ b/modules/common/src/main/java/encryptor/Encryptor.java @@ -0,0 +1,29 @@ +package encryptor; +import java.lang.reflect.Field; + +public class Encryptor { + public native static String encryptStr(String str); + static + { + try{ + String path = System.getProperty("user.dir")+"\\libs\\encrypt"; + + System.setProperty("java.library.path", path); + Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); + fieldSysPath.setAccessible(true); + fieldSysPath.set(null, null); + + System.loadLibrary("Encryptor"); + }catch(Exception e) + { + System.out.println(e); + } + } + public static void main(String[] args) + { + + String noEncrypt = "BFEBFBFF000A06530026_B768_466D_0235."; + String encrypt = Encryptor.encryptStr(noEncrypt); + System.out.println(encrypt); + } +} diff --git a/modules/filter/src/main/java/com/zhehekeji/filter/aspect/LPLicense.java b/modules/filter/src/main/java/com/zhehekeji/filter/aspect/LPLicense.java new file mode 100644 index 0000000..fbc60c3 --- /dev/null +++ b/modules/filter/src/main/java/com/zhehekeji/filter/aspect/LPLicense.java @@ -0,0 +1,99 @@ +package com.zhehekeji.filter.aspect; + +import com.zhehekeji.common.util.FileUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.Scanner; + +@Slf4j +public class LPLicense { + + private static LocalDateTime lastUpdate = null; + + private static String lic_str = null; + + private static String lic_path = "./lp.lic"; + + private static String key_path = "./lp.key"; + + private static String CPU_INFO = null; + + private static String DISK_INFO = null; + + /** + * 初始的时候创建 + */ + public static void createLicKeyIfNotExist(){ + File file = new File(key_path); + if(!file.exists()){ + String cpu = getCpuInfo(); + CPU_INFO = cpu; + String disk = getDiskInfo(); + DISK_INFO = disk; + FileUtil.save(cpu+disk,key_path); + } + } + + private static String getCpuInfo(){ + try { + Process process = Runtime.getRuntime().exec( + new String[] { "wmic", "cpu", "get", "ProcessorId" }); + process.getOutputStream().close(); + Scanner sc = new Scanner(process.getInputStream()); + String property = sc.next(); + String cpu = sc.next(); + return cpu; + } catch (IOException e) { + log.error("GET CPU error:{}",e); + return null; + } + } + + private static String getDiskInfo(){ + try { + Process process = Runtime.getRuntime().exec( + new String[] { "wmic","diskdrive","where","index=0", "get", "serialnumber"}); + process.getOutputStream().close(); + Scanner sc = new Scanner(process.getInputStream()); + String property = sc.next(); + String disk = sc.next(); + return disk; + } catch (IOException e) { + log.error("Get DISK error:{}",e); + return null; + } + } + + public static String getLic(){ + //每小时读取一次lic文件 + if(lastUpdate == null || LocalDateTime.now().toLocalTime().getHour() != lastUpdate.toLocalTime().getHour()){ + lastUpdate = LocalDateTime.now(); + lic_str = FileUtil.getText(lic_path); + CPU_INFO = getCpuInfo(); + DISK_INFO = getDiskInfo(); + } + return lic_str; + } + + public static boolean checkLic(String licStr){ + return CPU_INFO != null && DISK_INFO != null && licStr.equals(encryptor.Encryptor.encryptStr(CPU_INFO+DISK_INFO)); + } + + public static boolean checkLic(){ + String licStr = getLic(); + if(StringUtils.isEmpty(licStr)){ + return false; + } + return checkLic(licStr); + } + + public static void main(String[] args) { + + createLicKeyIfNotExist(); + + } +} diff --git a/modules/filter/src/main/java/com/zhehekeji/filter/aspect/LicenseAspect.java b/modules/filter/src/main/java/com/zhehekeji/filter/aspect/LicenseAspect.java new file mode 100644 index 0000000..9d008c7 --- /dev/null +++ b/modules/filter/src/main/java/com/zhehekeji/filter/aspect/LicenseAspect.java @@ -0,0 +1,24 @@ +package com.zhehekeji.filter.aspect; + +import com.zhehekeji.core.util.Assert; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class LicenseAspect { + + /** + * leaper..*.controller + * leaper 到controller多级目录 + * + * @param + */ + @Before("execution(public * com.zhehekeji..*.controller.*.*(..))") + public void handler(){ + Assert.isTrue(LPLicense.checkLic(),"未获取授权!!请将C:\\hzleaper_auto_install\\logistics_package\\lp.key发送给授权人员"); + } +} diff --git a/web/src/main/java/com/zhehekeji/web/controller/StockController.java b/web/src/main/java/com/zhehekeji/web/controller/StockController.java index 59ac460..0b0837d 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -153,6 +153,14 @@ public class StockController { stockService.allStockCheck(); return Result.success(); } + + + @ApiOperation(value = "清空盘点") + @RequestMapping(value = "/allStockClear", method = RequestMethod.POST) + public Result allStockClear() { + stockService.allStockClear(); + return Result.success(); + } public static void main(String[] args) { String s = "4"; String ss = String.format("%03d", 4); diff --git a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java index 736244d..2d412c2 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java @@ -36,6 +36,8 @@ public class CheckLog { private Integer count; + private String checkNum; + @ApiModelProperty("wms托盘码") private String wmsTrayCode; @@ -44,7 +46,6 @@ public class CheckLog { private Integer status; - private String checkNum; private String pic; diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java index b91a43f..a59e2db 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java @@ -11,20 +11,20 @@ public class StockExportExcel { @ExcelProperty(index = 0, value = "巷道名称") private String streetName; - @ExcelProperty(index = 8, value = "盘点批次号") + @ExcelProperty(index = 7, value = "盘点批次号") private String lotnum; - @ExcelProperty(index = 5, value = "条码") + @ExcelProperty(index = 4, value = "条码") private String code; - @ExcelProperty(index = 6, value = "WMS条码") + @ExcelProperty(index = 5, value = "WMS条码") private String wmsCode; @ExcelProperty(index = 1, value = "左右,1:左侧,2:右侧") private Integer direction; - @ExcelProperty(index = 2, value = "深浅,1:浅货位,2:深货位") - private Integer side; +// @ExcelProperty(index = 2, value = "深浅,1:浅货位,2:深货位") +// private Integer side; // @ExcelProperty(index = 1, value = "货架号") // private String shelveId; @@ -35,13 +35,13 @@ public class StockExportExcel { @ExcelProperty(index = 3, value = "行") private Integer row; - @ExcelProperty(index = 4, value = "列") + @ExcelProperty(index = 2, value = "列") private Integer column; - @ExcelProperty(index = 7, value = "盘点结果", converter = StockStatusConvert.class) + @ExcelProperty(index = 6, value = "盘点结果", converter = StockStatusConvert.class) private Integer status; - @ExcelProperty(index = 9, value = "时间", converter = LocalDateTimeConvert.class) + @ExcelProperty(index = 8, value = "时间", converter = LocalDateTimeConvert.class) private LocalDateTime exportTime; } diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java index 7bd5197..9d1a16a 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java @@ -13,7 +13,7 @@ public enum StockStatus { SUCCESS(2, "盘点准确"), ERROR(1, "核对错误"), - MANUAL(3,"人工核对") + MANUAL(3,"核对正确") ; private Integer status; diff --git a/web/src/main/java/com/zhehekeji/web/service/InitService.java b/web/src/main/java/com/zhehekeji/web/service/InitService.java index 31a61d3..d4b381a 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -1,5 +1,6 @@ package com.zhehekeji.web.service; +import com.zhehekeji.filter.aspect.LPLicense; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.entity.Street; @@ -84,6 +85,7 @@ public class InitService implements ApplicationRunner { LoginThread loginThread = new LoginThread(camera); loginThread.start(); }); + LPLicense.createLicKeyIfNotExist(); //plc连接 if(configProperties.getServerMode() == 0){ log.info("PLC TCP MODE"); diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java index 051893f..74375a1 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java @@ -1,5 +1,6 @@ package com.zhehekeji.web.service; +import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -70,6 +71,8 @@ public class PlcCmdInfo { private String lotnum; + private Integer streetId; + public PlcCmdInfo(String plcId, String taskId, Integer side1, Integer leftRight1, Integer column1, Integer row1, Integer separation1, Integer side2, Integer leftRight2, Integer column2, Integer row2, Integer separation2,String lotnum) { this.taskId = taskId; this.side1 = side1; diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 59a92ec..9249936 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -3,6 +3,7 @@ package com.zhehekeji.web.service; import codeDetector.BarcodeDetector; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.common.util.PathUtil; +import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.*; import com.zhehekeji.web.lib.*; @@ -10,6 +11,8 @@ import com.zhehekeji.web.mapper.*; import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.service.RFID.RFIDMap; import com.zhehekeji.web.service.RFID.RFIDSocket; +import com.zhehekeji.web.service.damLightSource.JYDAMEquip; +import com.zhehekeji.web.service.damLightSource.JYDamHelper; import com.zhehekeji.web.service.hikLightSource.HikControlSocket; import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.sick.SickSocket; @@ -17,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; import javax.annotation.Resource; import java.time.Duration; @@ -52,6 +56,8 @@ public class PlcService { @Resource private StockLogMapper stockLogMapper; + @Resource + private LightSourceService lightSourceService; @Resource private ConfigProperties configProperties; @@ -113,6 +119,7 @@ public class PlcService { return; } } + plcCmdInfo.setStreetId(street.getId()); Order order = new Order(); order.setOrderNum(plcCmdInfo.getOrderNum()); order.setStatus(0); @@ -129,7 +136,41 @@ public class PlcService { OrderRealtime.startOrder(street.getId(), plcCmdInfo.getOrderNum()); } } + public boolean openStreetLightSource( Integer streetId){ + List lightSources = lightSourceService.getLightSourceByStreetId(streetId); + lightSources.forEach(lightSource -> { + if(configProperties.getLightSource().getType() == 1){ + JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); + JYDamHelper.openDO(equip,configProperties.getLightSource().getIndex()); + Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); + log.info("ip:{},status:{}",lightSource.getIp(),status); + equip.DisConnect(); + }else if(configProperties.getLightSource().getType() == 2){ + HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1); + } + + }); + + return true; + } + public boolean closeStreetLightSource( Integer streetId){ + List lightSources = lightSourceService.getLightSourceByStreetId(streetId); + lightSources.forEach(lightSource -> { + if(configProperties.getLightSource().getType() == 1){ + JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); + JYDamHelper.closeDO(equip,configProperties.getLightSource().getIndex()); + Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); + log.info("ip:{},status:{}",lightSource.getIp(),status); + equip.DisConnect(); + }else if(configProperties.getLightSource().getType() == 2){ + HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),0); + } + + }); + + return true; + } /** * 工单结束信息 * 判断有没有告警,有告警的不做处理 @@ -148,6 +189,7 @@ public class PlcService { log.error("订单结束信号,订单不存在,orderNum:{}", plcCmdInfo.getOrderNum()); return; } + plcCmdInfo.setStreetId(street.getId()); OrderRealtime.stopOrder(street.getId()); Order update = new Order(); update.setId(order.getId()); diff --git a/web/src/main/java/com/zhehekeji/web/service/StockService.java b/web/src/main/java/com/zhehekeji/web/service/StockService.java index 159caca..ed5b9ca 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -3,6 +3,7 @@ package com.zhehekeji.web.service; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zhehekeji.core.util.Assert; @@ -343,7 +344,7 @@ public class StockService { stockExportExcel.setStreetName(street.getName()); stockExportExcel.setExportTime(stock.getExportTime()); stockExportExcel.setDirection(stock.getDirection()); - stockExportExcel.setSide(stock.getSide()); + //stockExportExcel.setSide(stock.getSide()); //stockExportExcel.setShelveId(stock.getShelveId()); stockExportExcel.setStatus(stock.getStatus()); stockExportExcels.add(stockExportExcel); @@ -371,7 +372,7 @@ public class StockService { stockExportExcel.setStreetName(streetMap.get(stock.getStreetId())); stockExportExcel.setExportTime(stock.getExportTime()); stockExportExcel.setDirection(stock.getDirection()); - stockExportExcel.setSide(stock.getSide()); + //stockExportExcel.setSide(stock.getSide()); stockExportExcel.setStatus(stock.getStatus()); stockExportExcels.add(stockExportExcel); }); @@ -398,13 +399,14 @@ public class StockService { } else { Street street = streetMapper.selectById(stock.getStreetId()); stock.setStreetName(street.getName()); - } - List stockLogs = stockLogMapper.selectList(new QueryWrapper().eq("`row`", stockCheck.getRow()).eq("`column`", stockCheck.getColumn()).eq("street_id", stockCheck.getStreetId()).eq("direction", stockCheck.getDirection()).eq("side", stockCheck.getSide()).orderByDesc("create_time").last(" limit 2")); - if (stockLogs.size() == 1) { - stock.setOveroperationPic(stockLogs.get(0).getPic()); - } else if (stockLogs.size() == 2) { - stock.setOveroperationPic(stockLogs.get(0).getPic()); - stock.setPreoperationPic(stockLogs.get(1).getPic()); + + List stockLogs = stockLogMapper.selectList(new QueryWrapper().eq("`row`", stockCheck.getRow()).eq("`column`", stockCheck.getColumn()).eq("street_id", stockCheck.getStreetId()).eq("direction", stockCheck.getDirection()).eq("side", stockCheck.getSide()).orderByDesc("create_time").last(" limit 2")); + if (stockLogs.size() == 1) { + stock.setOveroperationPic(stockLogs.get(0).getPic()); + } else if (stockLogs.size() == 2) { + stock.setOveroperationPic(stockLogs.get(0).getPic()); + stock.setPreoperationPic(stockLogs.get(1).getPic()); + } } return stock; } @@ -482,11 +484,17 @@ public class StockService { checkLog.setSide(stock.getSide()); checkLog.setStreetId(stock.getStreetId()); //checkLog.setShelveId(stock.getShelveId()); + checkLog.setLotnum(stock.getLotnum()); checkLog.setStatus(stock.getStatus()); checkLog.setCode(stock.getCode()); checkLog.setCreateTime(LocalDateTime.now()); checkLog.setExportTime(stock.getExportTime()); - checkLogMapper.insert(checkLog); + checkLogMapper.update(checkLog,new UpdateWrapper() + .eq("check_num",stock.getCheckNum()) + .eq("`column`",stock.getColumn()) + .eq("`row`",stock.getRow()) + .eq("direction",stock.getDirection()) + .eq("side",stock.getSide())); } /** @@ -514,8 +522,23 @@ public class StockService { public void allStockCheck() { Stock stock = new Stock(); stock.setStatus(3); + List stockList = stockMapper.selectList(new QueryWrapper().eq("status", "0")); stockMapper.update(stock, new QueryWrapper().eq("status", "0")); + for (Stock s:stockList){ + StockCheck stockCheck = new StockCheck(); + stockCheck.setColumn(s.getColumn()); + stockCheck.setStreetId(s.getStreetId()); + stockCheck.setRow(s.getRow()); + stockCheck.setDirection(s.getDirection()); + stockCheck.setSide(s.getSide()); + stockCheck.setOk(1); + checkCorrect(stockCheck); + } + + } + public void allStockClear() { + stockMapper.truncate(); } // public void init(String shelveId, Integer row, Integer column){ diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java index 73be381..d07dcd4 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java @@ -112,6 +112,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { //任务开始 旋转到原点位 plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.orderStart(plcCmdInfo); + plcService.openStreetLightSource(plcCmdInfo.getStreetId()); }else { log.info("check move"); } @@ -137,6 +138,8 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { } plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.orderStop(plcCmdInfo); + plcService.closeStreetLightSource(plcCmdInfo.getStreetId()); + } } else if (Cmd.C.name().equals(ksecInfo.getType())) {