基础版 优化

merge-requests/3/head
qiushui 4 years ago
parent af5dcc45a6
commit a394004c66

@ -55,11 +55,6 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
</dependencies>
<profiles>

@ -28,11 +28,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.google.guava</groupId>-->
<!-- <artifactId>guava</artifactId>-->
<!-- <version>18.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

@ -29,6 +29,8 @@ public class ConfigProperties {
private String userUrl;
private KSEC ksec;
@Data
public static class CameraConfig{
@ -52,4 +54,10 @@ public class ConfigProperties {
private String mediaPath;
private String mp4Path;
}
@Data
public static class KSEC{
private String ip;
private Integer port;
}
}

@ -119,10 +119,4 @@ public class StockController {
}
@ApiOperation(value = "currentPosition")
@RequestMapping(value = "/currentPosition", method = RequestMethod.GET)
public Result currentPosition(Integer cameraId,Integer ptzId) {
JoywarePtzControlModule.turn360C8(cameraId,ptzId);
return Result.success();
}
}

@ -20,6 +20,8 @@ public class Category {
@TableId(type = IdType.AUTO)
private Integer id;
private String code;
private String name;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

@ -1,24 +0,0 @@
package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
/**
*
*/
@Data
@TableName("ksec_up_pc_info")
public class KsecUpPcInfo {
private Integer id;
private String ip;
private Integer port;
private String name;
private LocalDateTime createTime;
}

@ -19,6 +19,9 @@ public class Stock {
private String orderNum;
@ApiModelProperty("条码")
private String code;
@ApiModelProperty("品规名称")
private String category;

@ -6,6 +6,6 @@ import org.apache.ibatis.annotations.Select;
public interface CategoryMapper extends BaseMapper<Category> {
@Select(" select * from category where name = #{name} limit 1")
Category getByName(String name);
@Select(" select * from category where code = #{code} limit 1")
Category getByCode(String code);
}

@ -1,7 +0,0 @@
package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.KsecUpPcInfo;
public interface KsecUpPcMapper extends BaseMapper<KsecUpPcInfo> {
}

@ -6,8 +6,8 @@ import lombok.Data;
@Data
public class StockExcel {
@ExcelProperty(index = 0, value = "品规")
private String category;
@ExcelProperty(index = 0, value = "条码")
private String code;
@ExcelProperty(index = 1, value = "数量")
private Integer count;

@ -0,0 +1,48 @@
package com.zhehekeji.web.service;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zhehekeji.web.entity.CameraIOConfig;
import com.zhehekeji.web.entity.Category;
import com.zhehekeji.web.mapper.CameraIOConfigMapper;
import com.zhehekeji.web.mapper.CategoryMapper;
import com.zhehekeji.web.pojo.camera.IOImport;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* IO
*/
@Slf4j
public class CategoryImportListener extends AnalysisEventListener<Category> {
private CategoryMapper categoryMapper;
public CategoryImportListener(CategoryMapper categoryMapper){
this.categoryMapper = categoryMapper;
}
@Override
public void invoke(Category category, AnalysisContext analysisContext) {
Category old = categoryMapper.getByCode(category.getCode());
if(old == null){
category.setUpdateTime(LocalDateTime.now());
categoryMapper.insert(category);
}else {
//更改名字
old.setName(category.getName());
old.setUpdateTime(LocalDateTime.now());
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}

@ -1,6 +1,7 @@
package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
@ -8,6 +9,7 @@ import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Category;
import com.zhehekeji.web.mapper.CategoryMapper;
import com.zhehekeji.web.pojo.camera.IOImport;
import com.zhehekeji.web.pojo.category.CategoryExcel;
import com.zhehekeji.web.pojo.category.CategoryModel;
import com.zhehekeji.web.pojo.category.PageSearch;
@ -76,6 +78,11 @@ public class CategoryService {
return category.getId();
}
// public void importExcel(MultipartFile file) throws IOException {
// EasyExcel.read(file.getInputStream(), Category.class, new CategoryImportListener(categoryMapper)).sheet().doRead();
// return;
// }
public Integer importExcel(MultipartFile file) throws IOException {
XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = wb.getSheetAt(0);
@ -97,36 +104,28 @@ public class CategoryService {
int columns = firstRow.getLastCellNum();
for (int i = 1; i < rows; i++) {
XSSFRow row = sheet.getRow(i);
StringBuffer category = new StringBuffer();
for(int j = 0;j<columns;j++){
XSSFCell cell = row.getCell(j);
Category category = new Category();
XSSFCell cell = row.getCell(0);
if(cell != null){
String name = cell.getStringCellValue();
if(!StringUtils.isEmpty(name)) {
category.append(name).append("-");
}
}
}
if(category.length() > 0){
category.deleteCharAt(category.length()-1);
}
insert(category.toString());
}
category.setCode(name);
}
public Integer insert(String name){
Category category = categoryMapper.getByName(name);
if(category == null){
category = new Category();
XSSFCell cell1 = row.getCell(1);
if(cell1 != null){
String name = cell.getStringCellValue();
category.setName(name);
}
Category old = categoryMapper.getByCode(category.getCode());
if(old == null){
category.setUpdateTime(LocalDateTime.now());
try {
categoryMapper.insert(category);
}catch (DuplicateKeyException e){
log.warn("品规已存在:{}",name);
}else {
//更改名字
old.setName(category.getName());
old.setUpdateTime(LocalDateTime.now());
categoryMapper.updateById(old);
}
}
return category.getId();
}
}

@ -2,17 +2,14 @@ package com.zhehekeji.web.service;
import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.entity.KsecUpPcInfo;
import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.lib.*;
import com.zhehekeji.web.lib.joyware.NetSDKLib;
import com.zhehekeji.web.mapper.CameraMapper;
import com.zhehekeji.web.mapper.KsecUpPcMapper;
import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.service.ksec.KsecNettyClient;
import com.zhehekeji.web.service.robotic.NettyClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@ -44,9 +41,6 @@ public class InitService implements ApplicationRunner {
@Resource
private ConfigProperties configProperties;
@Resource
private KsecUpPcMapper upPcMapper;
@Override
public void run(ApplicationArguments args) throws Exception {
//球机登录
@ -74,7 +68,7 @@ public class InitService implements ApplicationRunner {
}else if(configProperties.getServerMode() == 1){
log.info("KESC JSON MODE");
// 昆船协议
KsecUpPcInfo ksec = upPcMapper.selectById(1);
ConfigProperties.KSEC ksec = configProperties.getKsec();
if(ksec != null){
StreetConn.init(1,"ksec");
try {

@ -63,7 +63,7 @@ public class PlcService {
}
/**
*
* robotic plcIdplcId,plcIdsrmNumber
* @param plcOrderInfo
* @param plcId
*/

@ -8,6 +8,8 @@ import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.charset.Charset;
@ -17,6 +19,8 @@ import java.nio.charset.Charset;
@Slf4j
public class KsecDecoder extends DelimiterBasedFrameDecoder {
private static final Logger tcpLogger = LoggerFactory.getLogger("tcp");
private PlcService plcService;
public KsecDecoder(int maxFrameLength, ByteBuf delimiter, PlcService plcService) {
@ -32,6 +36,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
// 去掉首尾标识符
body = body.substring(1, body.length());
KsecInfo ksecInfo = JSONObject.parseObject(body, KsecInfo.class);
tcpLogger.info("info:{}",body);
log.info("receieve info:{}", ksecInfo);
KsecDataInfo dataInfo = ksecInfo.getData();
PlcOrderInfo plcOrderInfo = null;

@ -1,8 +1,7 @@
package com.zhehekeji.web.service.ksec;
import com.zhehekeji.web.entity.KsecUpPcInfo;
import com.zhehekeji.web.mapper.KsecUpPcMapper;
import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.service.PlcService;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
@ -23,7 +22,7 @@ public class KsecNettyClient {
@Resource
private PlcService plcService;
@Resource
private KsecUpPcMapper ksecUpPcMapper;
private ConfigProperties configProperties;
/**
*
@ -32,7 +31,7 @@ public class KsecNettyClient {
private static Channel channel;
public void createClient(KsecUpPcInfo ksec){
public void createClient(ConfigProperties.KSEC ksec){
if (StringUtils.isEmpty(ksec.getIp()) || ksec.getPort() == null) {
return;
}
@ -59,7 +58,7 @@ public class KsecNettyClient {
public void reconnect(Integer upId) {
Boolean isConnected = false;
int num = 0;
KsecUpPcInfo ksec = ksecUpPcMapper.selectById(upId);
ConfigProperties.KSEC ksec = configProperties.getKsec();
if (ksec == null) {
log.error("reconnect ,upPc is null ,id:{}", upId);
return;
@ -78,7 +77,7 @@ public class KsecNettyClient {
if (isConnected) {
log.info("plc reconnect success");
} else {
log.error("plc reconnect error .upPcId:{},reconnect num:{},name:{},ip:{},port:{}", upId, num, ksec.getName(), ksec.getIp(), ksec.getPort());
log.error("plc reconnect error .upPcId:{},reconnect num:{},ip:{},port:{}", upId, num, ksec.getIp(), ksec.getPort());
}
}

@ -7,6 +7,8 @@ import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.FixedLengthFrameDecoder;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.charset.Charset;
@ -14,6 +16,8 @@ import java.nio.charset.Charset;
@Slf4j
public class ProtocolDecoder extends FixedLengthFrameDecoder {
private static final Logger tcpLogger = LoggerFactory.getLogger("tcp");
private PlcService plcService;
public ProtocolDecoder(PlcService plcService) {
@ -85,7 +89,8 @@ public class ProtocolDecoder extends FixedLengthFrameDecoder {
//String barCodeSys = String.valueOf(b5)+b6+b7+b8;
String barCodeSys = new String(bytesBarNumSys, "UTF-8");
if(!type.equals(HEART)){
log.info("plcId:{},原始信号:{}", plcId, signal);
//log.info("plcId:{},原始信号:{}", plcId, signal);
tcpLogger.info("plcId:{},原始信号:{}", plcId, signal);
}
if (type.equals(HEART)) {
//心跳

@ -1,8 +1,3 @@
logging:
level:
com.zhehekeji: debug
org.springframework.web: info
root: info
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
@ -22,13 +17,6 @@ spring:
url: jdbc:mysql://115.236.65.98:12004/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
validationQuery: SELECT 1 FROM DUAL
zhehe:
common:
redis:
prefix: spring
filter:
enable: true
postToken: w89euijon2&UHBTY$%huni34ri
# --------本服务端口号
server:
port: 8099
@ -48,8 +36,11 @@ cameraConfig:
savePath:
mediaPath: d:\\data\media\
mp4Path: d:\\data\mp4\
# ------------服务端类型 0TCP(罗伯泰克) 1:JSON昆船
# ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
serverMode: 1
ksec:
ip: 127.0.0.1
port: 3000
# ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig:
videoStyleRow: 2

@ -1,8 +1,3 @@
logging:
level:
com.zhehekeji: debug
org.springframework.web: info
root: info
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
@ -22,13 +17,6 @@ spring:
url: jdbc:mysql://115.236.65.98:12004/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
validationQuery: SELECT 1 FROM DUAL
zhehe:
common:
redis:
prefix: spring
filter:
enable: true
postToken: w89euijon2&UHBTY$%huni34ri
# --------本服务端口号
server:
port: 8099
@ -37,19 +25,28 @@ server:
userUrl: http://115.236.65.98:11001
# -----------
# ----默认摄像头的连接信息
cameraConfig:
# ------------球機選擇--- 0:中威 1海康
cameraType: 0
cameraPassword: admin123
cameraUser: admin
cameraPort: 37777
# ------------
# -----图片 mp4下载地址
savePath:
mediaPath: d:\\data\media\
mp4Path: d:\\data\mp4\
# ------------球機選擇--- 0:中威 1海康
cameraType: 1
# ------------服务端类型 0TCP 1:JSON
# ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
serverMode: 1
ksec:
ip: 127.0.0.1
port: 3000
# ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig:
videoStyleRow: 2
videoStyleColumn: 2
# ------------球机m3u8默认地址 %d是球机数据库id如果数据库没有就使用此默认值
mediaServer: http://127.0.0.1:9080/hls/camera%d.m3u8
rtcServer:
rtcServerIp: 127.0.0.1
rtcServerPort: 8083

@ -1,8 +1,3 @@
logging:
level:
com.zhehekeji: debug
org.springframework.web: info
root: info
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
@ -22,13 +17,6 @@ spring:
url: jdbc:mysql://115.236.65.98:12004/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
validationQuery: SELECT 1 FROM DUAL
zhehe:
common:
redis:
prefix: spring
filter:
enable: true
postToken: w89euijon2&UHBTY$%huni34ri
# --------本服务端口号
server:
port: 8099
@ -37,19 +25,28 @@ server:
userUrl: http://115.236.65.98:11001
# -----------
# ----默认摄像头的连接信息
cameraConfig:
# ------------球機選擇--- 0:中威 1海康
cameraType: 0
cameraPassword: admin123
cameraUser: admin
cameraPort: 37777
# ------------
# -----图片 mp4下载地址
savePath:
mediaPath: d:\\data\media\
mp4Path: d:\\data\mp4\
# ------------球機選擇--- 0:中威 1海康
cameraType: 1
# ------------服务端类型 0TCP 1:JSON
# ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
serverMode: 1
ksec:
ip: 127.0.0.1
port: 3000
# ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig:
videoStyleRow: 2
videoStyleColumn: 2
# ------------球机m3u8默认地址 %d是球机数据库id如果数据库没有就使用此默认值
mediaServer: http://127.0.0.1:9080/hls/camera%d.m3u8
rtcServer:
rtcServerIp: 127.0.0.1
rtcServerPort: 8083

@ -2,7 +2,7 @@ spring:
profiles:
active: @profileActive@
application:
name: springbootstart-web
name: duoji-web
mvc:
#视图路径配置
view:
@ -21,3 +21,12 @@ mapper:
identity: MYSQL
not-empty: true
style: normal
zhehe:
common:
redis:
prefix: spring
filter:
enable: true
postToken: w89euijon2&UHBTY$%huni34ri
logging:
config: classpath:logback-spring.xml

@ -2,13 +2,16 @@
<configuration>
<property name="LOG_HOME" value=".log"></property>
<springProperty scope="context" name="logName" source="spring.application.name" defaultValue="localhost.log"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %p (%file:%line\)- %m%n</pattern>
<!--自定义控制台日志格式-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--系统INFO级别日志-滚动记录日志-->
<appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/${logName}-info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${logName}-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
@ -29,7 +32,8 @@
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<appender name="SYS_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/${logName}-warn.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${logName}-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
@ -45,12 +49,14 @@
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--系统ERROR级别日志-滚动记录日志-->
<appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/${logName}-error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${logName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
@ -72,29 +78,41 @@
</filter>
</appender>
<springProfile name="test">
<root level="INFO">
<appender-ref ref="FILEINFO"/>
<appender-ref ref="FILEWARN"/>
<appender-ref ref="FILEERROR"/>
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="FILEINFO"/>
<appender-ref ref="FILEWARN"/>
<appender-ref ref="FILEERROR"/>
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<!--不同业务逻辑的日志打印到不同文件见下面2种业务日志-->
<springProfile name="prod">
<!--业务business-1日志-->
<appender name="tcpAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/${logName}-tcp.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${logName}-tcp-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>
%d %p (%file:%line\)- %m%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- additivity属性为false表示此logger的打印信息不再向上级传递(注该值默认为truelogger的日志信息会依次向上级传递最高级logger为root如果不加则至少打印2次本身一次root一次)-->
<logger name="tcp" additivity="false" level="INFO">
<appender-ref ref="tcpAppender"/>
</logger>
<!--info和error分开打印ERROR > WARN > INFO > DEBUG > TRACE-->
<root level="INFO">
<appender-ref ref="FILEINFO"/>
<appender-ref ref="FILEWARN"/>
<appender-ref ref="FILEERROR"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="SYS_INFO"/>
<appender-ref ref="SYS_ERROR"/>
</root>
</springProfile>
</configuration>
Loading…
Cancel
Save