bug修改

master
LAPTOP-S9HJSOEB\昊天 9 months ago
parent befae82898
commit 0fedc117bf

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

@ -14,7 +14,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
*/
public interface GlobalErrorCodeConstants {
ErrorCode SUCCESS = new ErrorCode(0, "成功");
ErrorCode SUCCESS = new ErrorCode(200, "成功");
// ========== 客户端错误段 ==========

@ -70,6 +70,15 @@ public class CommonResult<T> implements Serializable {
return result;
}
public static <T> CommonResult<T> success(T data, String message) {
CommonResult<T> result = new CommonResult<>();
result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
result.data = data;
result.msg = "";
result.message = message;
return result;
}
public static boolean isSuccess(Integer code) {
return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode());
}

@ -7,6 +7,8 @@ import cn.iocoder.yudao.framework.web.core.filter.DemoFilter;
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import jakarta.annotation.Resource;
import jakarta.servlet.Filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@ -25,8 +27,7 @@ import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import jakarta.annotation.Resource;
import jakarta.servlet.Filter;
import java.time.Duration;
@AutoConfiguration
@EnableConfigurationProperties(WebProperties.class)
@ -125,7 +126,11 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
@Bean
@ConditionalOnMissingBean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.build();
return restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(5000)) // 连接超时 5秒
.setReadTimeout(Duration.ofMillis(20000)) // 读取超时 20秒
.build();
}
}

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.camera.lib.camera.CameraModFactory;
import cn.iocoder.yudao.module.camera.service.camera.CameraService;
import cn.iocoder.yudao.module.camera.service.channel.CameraChannel;
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
@ -38,11 +39,6 @@ public class MyInitializer {
private CameraService cameraService;
public static void main(String[] args) {
MyInitializer myInitializer = new MyInitializer();
myInitializer.checkAndAddRtspProxies();
}
@Scheduled(fixedRate = 30000) // 每分钟执行一次
@ -54,6 +50,15 @@ public class MyInitializer {
zlmConf(list);
cameraLogin(list);
}
@PostConstruct
public void init() {
// 应用启动时执行一次
try {
checkAndAddRtspProxies();
} catch (Exception e) {
e.printStackTrace();
}
}
@Resource CameraModFactory cameraModFactory;
private void cameraLogin(List<CameraDO> list) {

@ -342,7 +342,6 @@ public class cameraControlController {
cameraControlModule.ptzControlIrisDecEnd(cameraDO.getId(),0);
return success("ok");
}
@PostMapping("/pic")
@Operation(summary = "立刻拍照")
@Parameter(name = "id", description = "球机id", required = true)

@ -10,6 +10,7 @@ public class RtspSessionResponse {
private int code;
private List<RtspSession> data;
private boolean result;
@Data
public static class RtspSession {

@ -13,7 +13,7 @@ public class CameraConnMap {
public static void conn(Integer cameraId,Integer handlerId){
conn.put(cameraId,handlerId);
conn.put(cameraId,handlerId);
}
@ -29,14 +29,15 @@ public class CameraConnMap {
public static NetSDKLib.LLong getConnIdDh(Integer cameraId){
return connDh.get(cameraId);
}
public static void disConn(Integer cameraId){
conn.remove(cameraId);
}
public static Integer getConnId(Integer cameraId){
return conn.get(cameraId);
}
public static void disConn(Integer cameraId){
conn.remove(cameraId);
}
public static Integer getCameraIdByLoginId(Integer lLong){

@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
@Service
public class CameraModFactory {
@Autowired
private ApplicationContext context;

@ -69,7 +69,7 @@ public class DhControlModuleImpl implements CameraModule {
//先注销,再登录
if(CameraConnMap.getConnIdDh(cameraId)!=null){
if (loginout(cameraId)){
log.info("hik camera:{}注销",cameraId);
log.info("dh camera:{}注销",cameraId);
}
}
init();
@ -91,6 +91,10 @@ public class DhControlModuleImpl implements CameraModule {
@Override
public Boolean loginout(Integer cameraId) {
if (CameraConnMap.getConnId(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return true;
}
CameraConnMap.disConnDh(cameraId);
netSdk.CLIENT_Logout(CameraConnMap.getConnIdDh(cameraId));
@ -107,6 +111,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlUpStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("up start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
@ -115,6 +123,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlUpEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("up end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
@ -125,6 +137,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlDownStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("down start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
@ -132,6 +148,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlDownEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("down end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
@ -142,6 +162,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlLeftStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("left start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
@ -149,6 +173,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlLeftEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("left end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
@ -159,6 +187,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlRightStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("right start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
@ -167,6 +199,10 @@ public class DhControlModuleImpl implements CameraModule {
public boolean ptzControlRightEnd(Integer cameraId, int nChannelID) {
log.info("right end");
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
0, 0, 0, 1);
@ -178,6 +214,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlLeftUpStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("up left start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
@ -185,6 +225,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlLeftUpEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("up left end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
@ -195,6 +239,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlRightUpStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("up right start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
@ -202,6 +250,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlRightUpEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info("up right end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
@ -212,6 +264,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlLeftDownStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info(" left down start");
Boolean ok = netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
@ -223,6 +279,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlLeftDownEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info(" left down end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
@ -233,6 +293,10 @@ public class DhControlModuleImpl implements CameraModule {
*
*/
public boolean ptzControlRightDownStart(Integer cameraId, int nChannelID, int lParam1, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info(" right down start");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
@ -240,6 +304,10 @@ public class DhControlModuleImpl implements CameraModule {
}
public boolean ptzControlRightDownEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
log.info(" right down end");
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
@ -250,12 +318,20 @@ public class DhControlModuleImpl implements CameraModule {
* +
*/
public boolean ptzControlZoomAddStart(Integer cameraId, int nChannelID, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
0, lParam2, 0, 0);
}
public boolean ptzControlZoomAddEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
0, 0, 0, 1);
@ -265,12 +341,20 @@ public class DhControlModuleImpl implements CameraModule {
* -
*/
public boolean ptzControlZoomDecStart(Integer cameraId, int nChannelID, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
0, lParam2, 0, 0);
}
public boolean ptzControlZoomDecEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
0, 0, 0, 1);
@ -280,12 +364,21 @@ public class DhControlModuleImpl implements CameraModule {
* +
*/
public boolean ptzControlFocusAddStart(Integer cameraId, int nChannelID, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
0, lParam2, 0, 0);
}
public boolean ptzControlFocusAddEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
0, 0, 0, 1);
@ -295,12 +388,20 @@ public class DhControlModuleImpl implements CameraModule {
* -
*/
public boolean ptzControlFocusDecStart(Integer cameraId, int nChannelID, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
0, lParam2, 0, 0);
}
public boolean ptzControlFocusDecEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
0, 0, 0, 1);
@ -310,12 +411,22 @@ public class DhControlModuleImpl implements CameraModule {
* +
*/
public boolean ptzControlIrisAddStart(Integer cameraId, int nChannelID, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
0, lParam2, 0, 0);
}
public boolean ptzControlIrisAddEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
0, 0, 0, 1);
@ -325,12 +436,22 @@ public class DhControlModuleImpl implements CameraModule {
* -
*/
public boolean ptzControlIrisDecStart(Integer cameraId, int nChannelID, int lParam2) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
0, lParam2, 0, 0);
}
public boolean ptzControlIrisDecEnd(Integer cameraId, int nChannelID) {
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
return netSdk.CLIENT_DHPTZControlEx(CameraConnMap.getConnIdDh(cameraId), nChannelID,
NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
0, 0, 0, 1);
@ -350,6 +471,10 @@ public class DhControlModuleImpl implements CameraModule {
// }
// return ok;
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return false;
}
PathUtil.checkDirc(realPath);
if (!netSdk.CLIENT_CapturePictureEx(CameraConnMap.getConnIdDh(cameraId), realPath, NetSDKLib.NET_CAPTURE_FORMATS.NET_CAPTURE_JPEG)) {
System.err.printf("CLIENT_CapturePicture Failed!" + ToolKits.getErrorCodePrint());
@ -381,6 +506,10 @@ public class DhControlModuleImpl implements CameraModule {
NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE net_out_download_by_data_type = new NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE();
net_out_download_by_data_type.write();
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("error camera conn is null,cameraId:{}",cameraId);
return;
}
NetSDKLib.LLong l = netSdk.CLIENT_DownloadByDataType(CameraConnMap.getConnIdDh(cameraId), download_by_data_type.getPointer(), net_out_download_by_data_type.getPointer(), 8000);
if(l.longValue() != 0){
log.info("start download mp4 path:{},startTime:{} ,endTime:{},now:{},status:{},cameraId:{}", path, start, end, LocalDateTime.now(),l.longValue(),cameraId);
@ -399,6 +528,11 @@ public class DhControlModuleImpl implements CameraModule {
*/
public void ptz(Integer ptzId, String name, Integer cameraId) {
int dwzCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL;
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("toPtz error camera conn is null,ptzId:{},cameraId:{}",ptzId,cameraId);
return;
}
Boolean ok = netSdk.CLIENT_DHPTZControlEx2(CameraConnMap.getConnIdDh(cameraId), 0, dwzCommand, 0, ptzId, 0, 0, ToolKits.GetGBKStringToPointer(name));
if (!ok) {
log.error("ptz error :{},cameraId:{}", ToolKits.getErrorCodePrint(),cameraId);
@ -415,6 +549,11 @@ public class DhControlModuleImpl implements CameraModule {
public void toPtz(Integer ptzId, Integer cameraId) {
log.info("to ptz,ptzId:{},cameraId:{}",ptzId,cameraId);
int dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL;
if (CameraConnMap.getConnIdDh(cameraId) == null){
log.error("toPtz error camera conn is null,ptzId:{},cameraId:{}",ptzId,cameraId);
return;
}
Boolean ok = netSdk.CLIENT_DHPTZControlEx2(CameraConnMap.getConnIdDh(cameraId), 0, dwPTZCommand, 0, ptzId, 0, 0, null);
if (!ok) {
log.error("toPtz error, cameraId:{},ptzId:{},errorCode:{}", cameraId, ptzId,ToolKits.getErrorCodePrint());

@ -56,13 +56,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlUpStart(Integer cameraId, int nChannelID, int dwPTZCommand,int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 0);
}
public boolean ptzControlUpEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 1);
}
@ -71,13 +81,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_DOWN, 0);
}
public boolean ptzControlDownEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_DOWN, 1);
}
@ -86,13 +106,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlLeftStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 0);
}
public boolean ptzControlLeftEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 1);
}
/**
@ -100,13 +130,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlRightStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 0);
}
public boolean ptzControlRightEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 1);
}
/**
@ -114,13 +154,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlLeftUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_LEFT, 0);
}
public boolean ptzControlLeftUpEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_LEFT, 1);
}
@ -129,14 +179,24 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlRightUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_RIGHT, 0);
}
public boolean ptzControlRightUpEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_RIGHT, 1);
}
/**
@ -144,7 +204,12 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlLeftDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
Boolean ok = hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_LEFT, 0);
if(!ok){
log.error("error:{},cameraId:{}", hcNetsdk.NET_DVR_GetLastError(),cameraId);
@ -153,7 +218,12 @@ public class HikControlModuleImpl implements CameraModule {
}
public boolean ptzControlLeftDownEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_LEFT, 1);
}
/**
@ -161,13 +231,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlRightDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_RIGHT, 0);
}
public boolean ptzControlRightDownEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_RIGHT, 1);
}
@ -176,13 +256,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlZoomAddStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_IN, 0);
}
public boolean ptzControlZoomAddEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_IN, 1);
}
@ -191,13 +281,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlZoomDecStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_OUT, 0);
}
public boolean ptzControlZoomDecEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_OUT, 1);
}
/**
@ -205,13 +305,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlFocusAddStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_NEAR, 0);
}
public boolean ptzControlFocusAddEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_NEAR, 1);
}
/**
@ -219,13 +329,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlFocusDecStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_FAR, 0);
}
public boolean ptzControlFocusDecEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_FAR, 1);
}
@ -234,13 +354,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlIrisAddStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_OPEN, 0);
}
public boolean ptzControlIrisAddEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_OPEN, 1);
}
@ -249,13 +379,23 @@ public class HikControlModuleImpl implements CameraModule {
*/
public boolean ptzControlIrisDecStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
return hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_CLOSE, 0);
}
public boolean ptzControlIrisDecEnd(Integer cameraId, int nChannelID)
{
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
Boolean ok = hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_CLOSE, 1);
return ok;
}
@ -263,7 +403,11 @@ public class HikControlModuleImpl implements CameraModule {
public boolean pic(Integer cameraId, int nChannelID, String path)
{
PathUtil.checkDirc(path);
int lUserId = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
return false;
}
short wPicSize = 3;
short wPicQuality = 0;
HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(wPicSize, wPicQuality);
@ -284,9 +428,13 @@ public class HikControlModuleImpl implements CameraModule {
endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond());
log.info("start download mp4 path:{} ,cameraId:{},start_time{}end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime());
int lUserID = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
}
int result = hcNetsdk.NET_DVR_GetFileByTime(lUserID, 1, startTime, endTime, path);
int result = hcNetsdk.NET_DVR_GetFileByTime(lUserId, 1, startTime, endTime, path);
if (result == -1) {
log.error("downloadMp4 error code:{},cameraId:{},path:{}", hcNetsdk.NET_DVR_GetLastError(),cameraId,path);
} else {
@ -306,9 +454,13 @@ public class HikControlModuleImpl implements CameraModule {
endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond());
log.info("start download mp4 path:{} ,cameraId:{},start_time{}end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime());
int lUserID = CameraConnMap.getConnId(cameraId);
Integer lUserId = CameraConnMap.getConnId(cameraId);
if (lUserId == null){
log.error("pic error:lUserId is null,cameraId:{}",cameraId);
}
int result = hcNetsdk.NET_DVR_GetFileByTime(lUserID, channel, startTime, endTime, path);
int result = hcNetsdk.NET_DVR_GetFileByTime(lUserId, channel, startTime, endTime, path);
if (result == -1) {
log.error("downloadMp4 error code:{},cameraId:{},path:{}", hcNetsdk.NET_DVR_GetLastError(),cameraId,path);
} else {
@ -435,6 +587,11 @@ public class HikControlModuleImpl implements CameraModule {
public void toPtz(Integer ptzId, Integer cameraId)
{
int dwPTZCommand = HCNetSDK.GOTO_PRESET;
if (CameraConnMap.getConnId(cameraId) == null){
log.error("toPtz error camera conn is null,ptzId:{},cameraId:{}",ptzId,cameraId);
return;
}
Boolean ok = hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId), 1, dwPTZCommand, ptzId);
if(!ok){
log.error("toPtz error:{},cameraId:{}", hcNetsdk.NET_DVR_GetLastError(),cameraId);
@ -478,7 +635,7 @@ public class HikControlModuleImpl implements CameraModule {
m_strLoginInfo.wPort = (short) m_nPort;
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录0- 否1- 是
m_strLoginInfo.bUseAsynLogin = true; //是否异步登录0- 否1- 是
m_strLoginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息

@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.camera.dal.entity.TreeVo;
import cn.iocoder.yudao.module.camera.framework.netty.intellBlink.CameraPhotoDecoder;
import cn.iocoder.yudao.module.camera.framework.netty.intellBlink.CameraPhotoInfo;
import cn.iocoder.yudao.module.camera.service.camera.CameraService;
import cn.iocoder.yudao.module.camera.service.streamingMedia.ZLMediaKitService;
import cn.iocoder.yudao.module.camera.service.street.StreetService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -29,6 +30,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@ -45,6 +47,8 @@ public class CameraController {
@Resource
private StreetService streetService;
@Resource
ZLMediaKitService zLMediaKitService;
@PostMapping("/logisticsResults")
@Operation(summary = "货位状态查看")
@PermitAll
@ -66,6 +70,17 @@ public class CameraController {
}
@PostMapping("/pic")
@Operation(summary = "拍照")
@PermitAll
public CommonResult<String> pic(@Valid @RequestBody CameraSaveReqVO createReqVO) {
CameraDO cameraDO = cameraService.getCamera(createReqVO.getId());
zLMediaKitService.pic(cameraDO,"D://data/"+new Date().getTime()+".jpg");
return success("");
}
@PostMapping("/create")
@Operation(summary = "创建相机")
@PreAuthorize("@ss.hasPermission('logistics:camera:create')")

@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
public class CheckLogPageReqVO extends PageParam {
@Schema(description = "盘点批次号", example = "001_11")
private String lotnum;
private String batchNumber;
@Schema(description = "层")
private Short row;

@ -21,7 +21,7 @@ public class CheckLogRespVO {
@Schema(description = "盘点批次号", example = "001_11")
@ExcelProperty("盘点批次号")
private String lotnum;
private String batchNumber;
@Schema(description = "层")
@ExcelProperty("层")

@ -0,0 +1,89 @@
package cn.iocoder.yudao.module.camera.controller.admin.kesc;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import cn.iocoder.yudao.module.camera.service.plc.PLCService;
import cn.iocoder.yudao.module.system.service.sse.SseClient;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Tag(name = "管理后台 - 随行盘点")
@RestController
@RequestMapping("/logistics/StockController")
@Validated
@Slf4j
public class StockControlController {
@Resource
PLCService plcService;
@Resource
SseClient sseClient;
@PostMapping("/openCamera")
@Operation(summary = "随行盘点开始任务")
@ResponseBody
@PermitAll
public CommonResult<String> openCamera(@RequestBody KsecDataInfo kescEntity){
kescEntity = kescEntity.fromBySRMNumber(kescEntity);
// 随行开始
if (kescEntity.getCmdName().equals("B1")){
plcService.orderStart(kescEntity);
}else if (kescEntity.getCmdName().equals("E")){
// 盘点
plcService.checkStart(kescEntity);
}
return CommonResult.success("","OK");
}
@PostMapping("/updateResult")
@Operation(summary = "模拟随行盘点结果返回状态")
@ResponseBody
@PermitAll
public CommonResult<KsecDataInfo> updateResult( KsecDataInfo kescEntity){
log.info("模拟随行盘点结果返回状态:{}",kescEntity);
return CommonResult.success(kescEntity,"OK");
}
@PostMapping("/setUpdateStatus")
@Operation(summary = "随行盘点更新状态")
@ResponseBody
@PermitAll
public CommonResult<KsecDataInfo> setUpdateStatus(KsecDataInfo kescEntity){
log.info("随行盘点更新状态:{}",kescEntity);
return CommonResult.success(kescEntity,"OK");
}
@PostMapping("/updateStatus")
@Operation(summary = "随行盘点更新状态")
@ResponseBody
@PermitAll
public CommonResult<String> updateStatus(@RequestBody KsecDataInfo kescEntity){
if (kescEntity.getCmdName().equals("B2")){
// 随行结束
plcService.orderStop(kescEntity.getTaskId());
}else if (kescEntity.getCmdName().startsWith("E")){
// 盘点操作
plcService.check(kescEntity.getTaskId(),kescEntity.getCmdName());
if (kescEntity.getCmdName().equals("E3")){
plcService.checkStop(kescEntity.getTaskId());
}
}else if (kescEntity.getCmdName().startsWith("C")){
plcService.action(kescEntity.getTaskId(),kescEntity.getCmdName());
}
return CommonResult.success("","OK");
}
}

@ -21,6 +21,10 @@ public class OrderRespVO {
@ExcelProperty("开始时间")
private LocalDateTime startTime;
@Schema(description = "结束时间")
@ExcelProperty("结束时间")
private LocalDateTime endTime;
@Schema(description = "巷道id")
@ExcelProperty("巷道id")
private String srmNumber;

@ -0,0 +1,93 @@
package cn.iocoder.yudao.module.camera.controller.admin.shelfCode;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodePageReqVO;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodeRespVO;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodeSaveReqVO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import cn.iocoder.yudao.module.camera.service.shelfCode.ShelfCodeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ShelfCode")
@RestController
@RequestMapping("/logistics/ShelfCode")
@Validated
public class ShelfCodeController {
@Resource
private ShelfCodeService shelfCodeService;
@PostMapping("/create")
@Operation(summary = "创建ShelfCode")
@PreAuthorize("@ss.hasPermission('logistics:ShelfCode:create')")
public CommonResult<Integer> createShelfCode(@Valid @RequestBody ShelfCodeSaveReqVO createReqVO) {
return success(shelfCodeService.createShelfCode(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新ShelfCode")
@PreAuthorize("@ss.hasPermission('logistics:ShelfCode:update')")
public CommonResult<Boolean> updateShelfCode(@Valid @RequestBody ShelfCodeSaveReqVO updateReqVO) {
shelfCodeService.updateShelfCode(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除ShelfCode")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('logistics:ShelfCode:delete')")
public CommonResult<Boolean> deleteShelfCode(@RequestParam("id") Integer id) {
shelfCodeService.deleteShelfCode(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得ShelfCode")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('logistics:ShelfCode:query')")
public CommonResult<ShelfCodeRespVO> getShelfCode(@RequestParam("id") Integer id) {
ShelfCodeDO ShelfCode = shelfCodeService.getShelfCode(id);
return success(BeanUtils.toBean(ShelfCode, ShelfCodeRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得ShelfCode分页")
@PreAuthorize("@ss.hasPermission('logistics:ShelfCode:query')")
public CommonResult<PageResult<ShelfCodeRespVO>> getShelfCodePage(@Valid ShelfCodePageReqVO pageReqVO) {
PageResult<ShelfCodeDO> pageResult = shelfCodeService.getShelfCodePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ShelfCodeRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出ShelfCode Excel")
@PreAuthorize("@ss.hasPermission('logistics:ShelfCode:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportShelfCodeExcel(@Valid ShelfCodePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ShelfCodeDO> list = shelfCodeService.getShelfCodePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "ShelfCode.xls", "数据", ShelfCodeRespVO.class,
BeanUtils.toBean(list, ShelfCodeRespVO.class));
}
}

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - ShelfCode分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ShelfCodePageReqVO extends PageParam {
@Schema(description = "巷道id", example = "8923")
private Integer streetId;
@Schema(description = "方向")
private Integer direction;
@Schema(description = "separation")
@ExcelProperty("separation")
private String separation;
@Schema(description = "货架号")
@ExcelProperty("货架号")
private String shelfCode;
}

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - ShelfCode Response VO")
@Data
@ExcelIgnoreUnannotated
public class ShelfCodeRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3186")
@ExcelProperty("id")
private Integer id;
@Schema(description = "巷道id", example = "8923")
@ExcelProperty("巷道id")
private Integer streetId;
@Schema(description = "方向")
@ExcelProperty(value = "方向", converter = DictConvert.class)
@DictFormat("direction") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer direction;
@Schema(description = "separation")
@ExcelProperty("separation")
private String separation;
@Schema(description = "货架号")
@ExcelProperty("货架号")
private String shelfCode;
}

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - ShelfCode新增/修改 Request VO")
@Data
public class ShelfCodeSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3186")
private Integer id;
@Schema(description = "巷道id", example = "8923")
private Integer streetId;
@Schema(description = "方向")
private Integer direction;
@Schema(description = "separation")
@ExcelProperty("separation")
private String separation;
@Schema(description = "货架号")
@ExcelProperty("货架号")
private String shelfCode;
}

@ -182,17 +182,19 @@ public class StockController {
dictCode.set(scanStatus, scanCode.get(finalScan));
dictWmsCode.set(scanStatus, scanWmsCode.get(finalScan));
// 打印 ScanStatus 的字段值
System.out.println("ScanStatus Code: " + dictCode.get(scanStatus));
System.out.println("ScanStatus WMS Code: " + dictWmsCode.get(scanStatus));
} else {
System.out.println("Fields not found in the hierarchy.");
}
// 打印 ScanStatus 的字段值
System.out.println("ScanStatus Code: " + dictCode.get(scanStatus));
System.out.println("ScanStatus WMS Code: " + dictWmsCode.get(scanStatus));
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
scanStatuses.add(scanStatus);

@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
public class StockPageReqVO extends PageParam {
@Schema(description = "盘点批次好")
private String lotnum;
private String batchNumber;
@Schema(description = "工单任务号")
private String orderNum;

@ -18,7 +18,7 @@ public class StockRespVO {
@Schema(description = "盘点批次好")
@ExcelProperty("盘点批次好")
private String lotnum;
private String batchNumber;
@Schema(description = "工单任务号")
@ExcelProperty("工单任务号")

@ -13,7 +13,7 @@ public class StockSaveReqVO {
private Long id;
@Schema(description = "盘点批次好")
private String lotnum;
private String batchNumber;
@Schema(description = "工单任务号")
private String orderNum;

@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.camera.controller.admin.street.vo.StreetSaveReqVO
import cn.iocoder.yudao.module.camera.dal.dataobject.lightsource.LightSourceDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.rfid.RfidDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.sensorgun.SensorGunDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.framework.light.LightFactory;
import cn.iocoder.yudao.module.camera.service.lightsource.LightSourceService;
@ -139,6 +140,14 @@ public class StreetController {
public CommonResult<List<RfidDO>> getRFIDListByStreetId(@RequestParam("streetId") Integer streetId) {
return success(streetService.getRFIDListByStreetId(streetId));
}
@GetMapping("/shelfCode/list-by-street-id")
@Operation(summary = "获得货架列表")
@Parameter(name = "streetId", description = "巷道id")
@PreAuthorize("@ss.hasPermission('logistics:street:query')")
public CommonResult<List<ShelfCodeDO>> getShelfCodeListByStreetId(@RequestParam("streetId") Integer streetId) {
return success(streetService.getShelfCodeListByStreetId(streetId));
}
@GetMapping("/lightSource/open")
@Operation(summary = "开启全部光源")
@Parameter(name = "streetId", description = "巷道id")

@ -30,16 +30,16 @@ public class CheckLogDO extends BaseDO {
/**
*
*/
private String lotnum;
private String batchNumber;
/**
*
*
* <p>
* {@link TODO direction }
*/
private Integer direction;
/**
*
*
* <p>
* {@link TODO side }
*/
private Integer side;
@ -79,7 +79,7 @@ public class CheckLogDO extends BaseDO {
/**
*
*
* <p>
* {@link TODO check_status }
*/
private Integer status;
@ -130,5 +130,14 @@ public class CheckLogDO extends BaseDO {
*/
private String statusVision;
private String shelfCode;
private String pltCode;
private String itemCode;
private String countNumber;
private String wmsShelfCode;
private String wmsPltCode;
private String wmsItemCode;
private String wmsCountNumber;
}

@ -32,6 +32,7 @@ public class OrderDO extends BaseDO {
private String srmNumber ;
private String cmdName ;
private String taskId ;
private String shelfCode;
private int fromSide ;
private int fromDirection ;
private int fromColumn ;
@ -49,7 +50,7 @@ public class OrderDO extends BaseDO {
private String trayCode ;
@TableField(exist = false)
private String lotnum ;
private String batchNumber ;
private String storageCode ;
private LocalDateTime createTime ;
private LocalDateTime endTime ;

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import org.glassfish.jaxb.core.v2.TODO;
/**
* RFID DO
*
* @author
*/
@TableName("logistics_shelf_Code")
@KeySequence("logistics_shelf_Code_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ShelfCodeDO extends BaseDO {
/**
* id
*/
@TableId
private Integer id;
/**
* id
*/
private Integer streetId;
/**
*
*
* {@link TODO direction }
*/
private Integer direction;
/**
* 2 1
*/
private Integer separation;
private String shelfCode;
}

@ -40,7 +40,7 @@ public class StockDO extends BaseDO {
/**
*
*/
private String lotnum;
private String batchNumber;
/**
*
*/
@ -87,6 +87,7 @@ public class StockDO extends BaseDO {
*
*/
private Integer side;
private Integer separation;
/**
*
*/
@ -137,7 +138,7 @@ public class StockDO extends BaseDO {
/**
* taskId
*/
private String taskWmsId;
private String taskId;
/**
*
*/
@ -151,4 +152,14 @@ public class StockDO extends BaseDO {
*/
private String statusVision;
private String shelfCode;
private String pltCode;
private String itemCode;
private String countNumber;
private String wmsShelfCode;
private String wmsPltCode;
private String wmsItemCode;
private String wmsCountNumber;
}

@ -0,0 +1,111 @@
package cn.iocoder.yudao.module.camera.dal.entity;
import lombok.Data;
/**
*
*
*/
@Data
public class WarehouseOperation {
/**
* B= C= D= E=
*/
private String type;
/**
*
*/
private String SRMNumber;
/**
*
*/
private String cmdName;
/**
*
*/
private String taskId;
/**
* 1= 2=
*/
private Integer fromSide;
/**
* 1= 2=
*/
private Integer fromDirection;
/**
*
*/
private Integer fromColumn;
/**
*
*/
private Integer fromRow;
/**
* 2 1
*/
private Integer fromSeparation;
/**
* 1= 2=
*/
private Integer toSide;
/**
* 1= 2=
*/
private Integer toDirection;
/**
*
*/
private Integer toColumn;
/**
*
*/
private Integer toRow;
/**
* 2 1
*/
private Integer toSeparation;
/**
* typeD使
*/
private String warnCode;
/**
*
*/
private String shelfCode;
/**
*
*/
private String pltCode;
/**
*
*/
private String batchNumber;
/**
*
*/
private String itemCode;
/**
*
*/
private String countNumber;
}

@ -16,7 +16,7 @@ import org.apache.ibatis.annotations.Mapper;
public interface CheckLogMapper extends BaseMapperX<CheckLogDO> {
default PageResult<CheckLogDO> selectPage(CheckLogPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<CheckLogDO>()
.eqIfPresent(CheckLogDO::getLotnum, reqVO.getLotnum())
.eqIfPresent(CheckLogDO::getBatchNumber, reqVO.getBatchNumber())
.eqIfPresent(CheckLogDO::getRow, reqVO.getRow())
.eqIfPresent(CheckLogDO::getColumn, reqVO.getColumn())
.eqIfPresent(CheckLogDO::getStreetId, reqVO.getStreetId())
@ -25,8 +25,7 @@ public interface CheckLogMapper extends BaseMapperX<CheckLogDO> {
.eqIfPresent(CheckLogDO::getDirection, reqVO.getDirection())
.eqIfPresent(CheckLogDO::getSide, reqVO.getSide())
.eqIfPresent(CheckLogDO::getStatus, reqVO.getStatus())
.orderByDesc(CheckLogDO::getId));
.orderByDesc(CheckLogDO::getCreateTime));
}
}

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.camera.dal.mysql.shelfCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodePageReqVO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* RFID Mapper
*
* @author
*/
@Mapper
public interface ShelfCodeMapper extends BaseMapperX<ShelfCodeDO> {
default PageResult<ShelfCodeDO> selectPage(ShelfCodePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ShelfCodeDO>()
.eqIfPresent(ShelfCodeDO::getStreetId, reqVO.getStreetId())
.eqIfPresent(ShelfCodeDO::getDirection, reqVO.getDirection())
.eqIfPresent(ShelfCodeDO::getShelfCode, reqVO.getShelfCode())
.eqIfPresent(ShelfCodeDO::getSeparation, reqVO.getSeparation())
.orderByDesc(ShelfCodeDO::getId));
}
default List<ShelfCodeDO> selectListByStreetId(Integer streetId) {
return selectList(ShelfCodeDO::getStreetId, streetId);
}
default int deleteByStreetId(Integer streetId) {
return delete(ShelfCodeDO::getStreetId, streetId);
}
}

@ -17,7 +17,7 @@ public interface StockMapper extends BaseMapperX<StockDO> {
default PageResult<StockDO> selectPage(StockPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<StockDO>()
.eqIfPresent(StockDO::getLotnum, reqVO.getLotnum())
.eqIfPresent(StockDO::getBatchNumber, reqVO.getBatchNumber())
.eqIfPresent(StockDO::getOrderNum, reqVO.getOrderNum())
.eqIfPresent(StockDO::getCheckNum, reqVO.getCheckNum())
.eqIfPresent(StockDO::getCode, reqVO.getCode())
@ -40,7 +40,7 @@ public interface StockMapper extends BaseMapperX<StockDO> {
.betweenIfPresent(StockDO::getExportTime, reqVO.getExportTime())
.eqIfPresent(StockDO::getSubtag, reqVO.getSubtag())
.eqIfPresent(StockDO::getReply, reqVO.getReply())
.eqIfPresent(StockDO::getTaskWmsId, reqVO.getTaskWmsId())
.eqIfPresent(StockDO::getTaskId, reqVO.getTaskWmsId())
.eqIfPresent(StockDO::getAddre, reqVO.getAddre())
.eqIfPresent(StockDO::getCheckId, reqVO.getCheckId())
.eqIfPresent(StockDO::getStatusVision, reqVO.getStatusVision())

@ -1,10 +1,13 @@
package cn.iocoder.yudao.module.camera.framework.netty.ksec;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class KsecDataInfo {
@JsonProperty("SRMNumber")
private String SRMNumber;
private String cmdName;
@ -19,7 +22,7 @@ public class KsecDataInfo {
private Integer fromSide;
private Integer fromSeparation;
private Integer fromSeparation = 1;
private Integer toColumn;
@ -29,26 +32,78 @@ public class KsecDataInfo {
private Integer toSide;
private Integer toSeparation;
private String code;
private Integer toSeparation = 1;
private String warnCode;
private Integer ackStatus;
private String code;
private String trayCode;
private String category;
private String count;
//品规码
private String itemCode;
//货架码
private String shelfCode;
// 托盘码
private String pltCode;
//数量
private String countNumber;
private String wmsCode;
private String wmsTrayCode;
private String wmsCategory;
private String wmsCount;
//品规码
private String wmsItemCode;
//货架码
private String wmsShelfCode;
// 托盘码
private String wmsPltCode;
//数量
private String wmsCountNumber;
/**
*
*/
private String lotnum;
private String batchNumber;
public KsecDataInfo fromBySRMNumber(KsecDataInfo data) {
if (data.getSRMNumber()!=null && data.getSRMNumber().length()>=13){
// 001为巷道号
//2为左右方向
//003为行
//004为列
//000为申请货位
data.fromDirection = Integer.valueOf(data.getSRMNumber().substring(3, 4));
data.fromRow = Integer.valueOf(data.getSRMNumber().substring(4, 7));
data.fromColumn = Integer.valueOf(data.getSRMNumber().substring(7, 10));
data.SRMNumber = data.getSRMNumber().substring(0, 3);
}
return data;
}
// public static void main(String[] args) {
// KsecDataInfo data = new KsecDataInfo();
// data.SRMNumber = "0012003004000";
// data = KsecDataInfo.fromBySRMNumber(data);
// System.out.println(data.toString());
// }
public static KsecDataInfo toFrom(KsecDataInfo data) {
data.fromColumn = data.toColumn;
@ -58,4 +113,24 @@ public class KsecDataInfo {
data.fromSeparation = data.toSeparation;
return data;
}
public KsecDataInfo toWMSData() {
this.wmsCode = this.code;
this.wmsTrayCode = this.trayCode;
this.wmsCategory = this.category;
this.wmsCount = this.count;
this.wmsItemCode = this.itemCode;
this.wmsShelfCode = this.shelfCode;
this.wmsPltCode = this.pltCode;
this.wmsCountNumber = this.countNumber;
this.code = null;
this.trayCode = null;
this.category = null;
this.count = null;
this.itemCode = null;
this.shelfCode = null;
this.pltCode = null;
this.countNumber = null;
return this;
}
}

@ -25,11 +25,6 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
private static final Logger tcpLogger = LoggerFactory.getLogger("tcp");
public static void setLastLotnum(String lotnum){
lastLotnum = lotnum;
}
private static String lastLotnum;
public static Map<String,KsecDataInfo> ksecInfoMap = new HashMap<>();
@ -99,7 +94,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
plcService.orderStart(dataInfo);
}else if(dataInfo.getCmdName().equals("B2")){
plcService.orderStop(dataInfo);
// plcService.orderStop(dataInfo);
}
log.debug("receieve heart ");
}else if (Cmd.C.name().equals(ksecInfo.getType())) {
@ -107,14 +102,14 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
//动作
String code = dataInfo.getCmdName();
log.info("action code,{},orderInfo:{}", code, dataInfo.toString());
plcService.action(dataInfo);
// plcService.action(dataInfo);
} else if (Cmd.D.name().equals(ksecInfo.getType())) {
} else if (Cmd.E.name().equals(ksecInfo.getType())) {
//智能盘点
dataInfo.setCount("正常");
plcService.check( dataInfo);
// plcService.check( dataInfo);
}

@ -5,7 +5,6 @@ import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.HikPythonEntity;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import cn.iocoder.yudao.module.camera.service.resources.URLResourcesService;
import cn.iocoder.yudao.module.camera.service.scan.ScanService;
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
@ -102,6 +101,9 @@ public class HikFlaskApiService implements ScanService {
String responseBody = Objects.requireNonNull(response.body()).string();
return gson.fromJson(responseBody, HikPythonEntity.class);
}catch (Exception e){
log.error("Error occurred while calling /api/picComputeAll", e);
return null;
}
}
@ -135,7 +137,7 @@ public class HikFlaskApiService implements ScanService {
URLResourcesService urlResourcesService;
// 识别结果是正常或缺件
@Override
public ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(StreetDO streetDO, StockDO stockDO) {
ScanData scanData = new ScanData();
@ -144,9 +146,9 @@ public class HikFlaskApiService implements ScanService {
try {
scanData.setCode("缺件");
HikPythonEntity hikPythonEntity = picComputeAll(dataInfo.getCategory(),urlPath);
HikPythonEntity hikPythonEntity = picComputeAll(stockDO.getWmsItemCode(),urlPath);
System.out.println(hikPythonEntity);
if (hikPythonEntity != null){
if (hikPythonEntity != null && !hikPythonEntity.getStatus().equals("ERROR")){
if (hikPythonEntity.getLack()!= null && hikPythonEntity.getLack()) {
}else {
scanData.setCode("正常");

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.camera.service.cameraio;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.camera.controller.admin.cameraio.vo.CameraIoPageReqVO;
import cn.iocoder.yudao.module.camera.controller.admin.cameraio.vo.CameraIoSaveReqVO;
import cn.iocoder.yudao.module.camera.dal.dataobject.cameraio.CameraIoDO;
@ -30,7 +31,12 @@ public class CameraIoServiceImpl extends ServiceImpl<CameraIoMapper, CameraIoDO>
public Integer createCameraIo(CameraIoSaveReqVO createReqVO) {
// 插入
CameraIoDO cameraIo = BeanUtils.toBean(createReqVO, CameraIoDO.class);
cameraIoMapper.insert(cameraIo);
if(cameraIoMapper.selectCount(new LambdaQueryWrapperX<CameraIoDO>().eq(CameraIoDO::getCode,createReqVO.getCode()).eq(CameraIoDO::getCameraId,createReqVO.getCameraId()))>0){
return cameraIo.getId();
}else {
cameraIoMapper.insert(cameraIo);
}
// 返回
return cameraIo.getId();
}

@ -209,7 +209,7 @@ public class OrderServiceImpl implements OrderService {
seriesList.add(series);
for (String date : data) {
Map<String, Long> countMap = map.get(street.getPlcId());
Long count = countMap != null ? countMap.get(date) : 0L;
Long count = (countMap != null && countMap.get(date) !=null ) ? countMap.get(date) : 0L;
series.getData().add(count);
}
}

@ -5,12 +5,14 @@ import cn.iocoder.yudao.module.camera.framework.netty.streetAlgorithm.executor.A
public interface PLCService {
void action(KsecDataInfo dataInfo);
void action(String taskId,String cmd);
void checkStart(KsecDataInfo dataInfo);
void checkStop(String taskId);
void orderStart(KsecDataInfo kescEntity);
void orderStop(KsecDataInfo kescEntity);
void orderStart(KsecDataInfo kescEntity);
void orderStop(String taskId);
void check(KsecDataInfo dataInfo);
void check(String taskId, String cmd);
void stockSave(AlgorithmDelayTask algorithmDelayTask);
}

@ -1,15 +1,13 @@
package cn.iocoder.yudao.module.camera.service.plc;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.camera.dal.dataobject.camera.CameraDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.cameraio.CameraIoDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.checklog.CheckLogDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.order.OrderDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.resources.URLResourcesDo;
import cn.iocoder.yudao.module.camera.dal.dataobject.sensorgun.SensorGunDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.stocklog.StockLogDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.KescEntity;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.dal.mysql.checklog.CheckLogMapper;
import cn.iocoder.yudao.module.camera.dal.mysql.order.OrderMapper;
@ -19,7 +17,6 @@ import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import cn.iocoder.yudao.module.camera.framework.netty.streetAlgorithm.executor.AlgorithmDelayTask;
import cn.iocoder.yudao.module.camera.framework.netty.streetAlgorithm.executor.GetPhotoDelayExecutor;
import cn.iocoder.yudao.module.camera.lib.camera.CameraModFactory;
import cn.iocoder.yudao.module.camera.lib.camera.TaskDelayExecutor;
import cn.iocoder.yudao.module.camera.service.camera.CameraService;
import cn.iocoder.yudao.module.camera.service.cameraio.CameraIoService;
import cn.iocoder.yudao.module.camera.service.checklog.CheckLogService;
@ -28,26 +25,34 @@ import cn.iocoder.yudao.module.camera.service.scan.ScanServiceFactory;
import cn.iocoder.yudao.module.camera.service.stock.StockService;
import cn.iocoder.yudao.module.camera.service.streamingMedia.ZLMediaKitService;
import cn.iocoder.yudao.module.camera.service.street.StreetService;
import cn.iocoder.yudao.module.camera.service.threeInOneCode.ScanningGun;
import cn.iocoder.yudao.module.camera.util.PathUtil;
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
import cn.iocoder.yudao.module.system.service.sse.SseClient;
import cn.iocoder.yudao.module.system.util.RedisUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.danielbechler.util.Strings;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.lang.reflect.Field;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
@ -105,7 +110,8 @@ public class PLCServiceImpl implements PLCService {
log.error("ptz not found ,code{},cameraId:{}", code, cameraDO.getId());
}
}
// public void plcService (KescEntity kescEntity){
// public void plcService (KescEntity kescEntity){
//
//
// //获取配置信息
@ -118,8 +124,8 @@ public class PLCServiceImpl implements PLCService {
// //任务
// if (Cmd.B1.name().equals(kescEntity.getData().getCmdName())) {
// //昆船盘点模式下也会发B1 ,但是不会发送B2
// //这里判断下,是否存在盘点批次号 若存在既是盘点的B1,无需处理;若不存在lotnum则是随行的B1
// if(StringUtils.isEmpty(kescEntity.getData().getLotnum())){
// //这里判断下,是否存在盘点批次号 若存在既是盘点的B1,无需处理;若不存在batchNumber则是随行的B1
// if(StringUtils.isEmpty(kescEntity.getData().getBatchNumber())){
// //任务开始 旋转到原点位
// gyrateCamera(kescEntity,Cmd.C5.name());
// //orderStart(kescEntity);
@ -165,26 +171,99 @@ public class PLCServiceImpl implements PLCService {
//
// }
// }
@Resource
RestTemplate restTemplate;
@Resource
RedisUtil redisUtil;
void setUpdateResult(String taskId) {
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("base_conf");
if (dictDataList.get("cssc_update_result_api") != null) {
String url = dictDataList.get("cssc_update_result_api").getValue();
Integer count = Integer.valueOf(dictDataList.get("cssc_set_max_count").getValue());
Map<String, String> resultMap = redisUtil.hmget("stock:task:" + taskId);
setHttp(url, resultMap, count);
}
}
void setUpdateStatus(String taskId, String cmd) {
char secondChar = cmd.charAt(1); // 获取第二个字符
int number = Character.getNumericValue(secondChar); // 将字符转换为数字
cmd = "E" + (number + 1);
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("base_conf");
if (dictDataList.get("cssc_update_status_api") != null) {
String url = dictDataList.get("cssc_update_status_api").getValue();
Integer count = Integer.valueOf(dictDataList.get("cssc_set_max_count").getValue());
Map<String, String> resultMap = new HashMap<>();
resultMap.put("cmdName", cmd);
resultMap.put("taskId", taskId);
setHttp(url, resultMap, count);
}
}
void setHttp(String url, Map<String, String> resultMap, Integer count) {
if (count == 0) {
return;
}
count--;
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json"); // 设置 Content-Type 为 JSON
// 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
// 将对象转换为 JSON 字符串
try {
String jsonString = objectMapper.writeValueAsString(resultMap);
// 创建 HttpEntity
HttpEntity<String> entity = new HttpEntity<>(jsonString, headers);
log.info("request json: " + jsonString);
// 发起 POST 请求
ResponseEntity<String> response = restTemplate.exchange(
url, // 替换为你的 API 地址
HttpMethod.POST,
entity,
String.class
);
// 输出响应结果
log.info("Status Code: " + response.getStatusCode());
log.info("Response Body: " + response.getBody());
if (!response.getStatusCode().is2xxSuccessful()) {
setHttp(url, resultMap, count);
}
} catch (Exception e) {
e.printStackTrace();
setHttp(url, resultMap, count);
}
}
@Override
public void action(KsecDataInfo dataInfo) {
public void action(String taskId, String cmd) {
OrderDO order = orderMapper.selectOne(new LambdaQueryWrapper<OrderDO>()
.eq(OrderDO::getTaskId, dataInfo.getTaskId())
.eq(OrderDO::getTaskId, taskId)
.orderByDesc(OrderDO::getCreateTime)
.last("limit 1"));
StreetDO street = streetService.getStreetByPlcId(dataInfo.getSRMNumber());
StreetDO street = streetService.getStreetByPlcId(order.getSrmNumber());
if (street == null) {
log.error("street not found ,plcId :{}", dataInfo.getSRMNumber());
log.error("street not found ,plcId :{}", order.getSrmNumber());
return;
}
//OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, times, code);
//判断是否拍照
boolean needCapture = false;
String picCmd = dataInfo.getCmdName().substring(0, 2);
Integer direction = dataInfo.getFromDirection();
String picCmd = cmd.substring(0, 2);
Integer direction = order.getFromDirection();
if (picCmd.equals("C4") || picCmd.equals("C3")) {
needCapture = true;
direction = dataInfo.getToDirection();
direction = order.getToDirection();
} else if (picCmd.equals("C1") || picCmd.equals("C2")) {
needCapture = true;
@ -193,27 +272,27 @@ public class PLCServiceImpl implements PLCService {
}
String saveApiPath = dictDataService.parseDictData("base_conf", "data_api_path").getValue();
KescEntity kescEntity = new KescEntity();
kescEntity.setData(dataInfo);
// 判断巷道有几个相机 如果只有一个,则调用一个,如果是两个,先判断是否有对拍设置决定那个相机拍摄
CameraDO camera = getCameraByLeftRight(street, direction);
// 调用预置点位
gyrateCameraByCode(camera, picCmd);
int time = Integer.parseInt(dictDataService.parseDictData("camera_conf", "delay_preset_time").getValue());
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
// int time = Integer.parseInt(dictDataService.parseDictData("camera_conf", "delay_preset_time").getValue());
// try {
// Thread.sleep(time);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
KsecDataInfo dataInfoData = BeanUtils.toBean(order, KsecDataInfo.class);
if (needCapture) {
String pathSrc = PathUtil.createFileName(dataInfo, street, picCmd, ".jpg");
pathSrc = cameraCapture(camera, false, pathSrc, dictDataService.getDictDataList("camera_conf"));
String pathSrc = PathUtil.createFileName(dataInfoData, street, picCmd, ".jpg");
pathSrc = cameraCapture(camera, true, pathSrc, dictDataService.getDictDataList("camera_conf"));
order.setPics(Strings.hasText(order.getPics()) ? order.getPics() + ";" +saveApiPath+ pathSrc : saveApiPath+pathSrc);
order.setPics(Strings.hasText(order.getPics()) ? order.getPics() + ";" + saveApiPath + pathSrc : saveApiPath + pathSrc);
orderMapper.updateById(order);
}
//转向原点位
gyrateCameraByCode(camera, "C5");
// gyrateCameraByCode(camera, "C5");
}
@Resource
@ -227,20 +306,25 @@ public class PLCServiceImpl implements PLCService {
long timeout = 5000;
@Override
public void check(KsecDataInfo dataInfo) {
public void checkStart(KsecDataInfo dataInfo) {
dataInfo.setCountNumber("正常");
dataInfo = dataInfo.toWMSData();
String saveApiPath = dictDataService.parseDictData("base_conf", "data_api_path").getValue();
long startTime = System.currentTimeMillis();
String uuid = UUID.randomUUID().toString();
//头部拍照
StreetDO street = streetService.getStreetByPlcId(dataInfo.getSRMNumber());
sseClient.sendMessage(street.getPlcId()+"巷道开始盘点");
StockDO newStock = BeanUtils.toBean(dataInfo, StockDO.class);
// 获取记录
StockDO stock = stockService.getOne(
new QueryWrapper<StockDO>()
.eq("direction", dataInfo.getFromDirection())
.eq("side", dataInfo.getFromSide())
.eq("separation", dataInfo.getFromSeparation())
.eq("`row`", dataInfo.getFromRow())
.eq("`column`", dataInfo.getFromColumn())
.eq("street_id", street.getId())
@ -248,108 +332,49 @@ public class PLCServiceImpl implements PLCService {
);
if (stock == null) {
stock = StockDO.builder()
.checkNum(dataInfo.getTaskId())
.lotnum(dataInfo.getLotnum())
.streetId(street.getId())
.direction(dataInfo.getFromDirection())
.side(dataInfo.getFromSide())
.row(dataInfo.getFromRow())
.status("0")
.column(dataInfo.getFromColumn())
.exportTime(LocalDateTime.now()).build();
} else {
stock.setLotnum(dataInfo.getLotnum());
stock = newStock;
stock.setStreetId(street.getId());
stock.setCheckNum(dataInfo.getTaskId());
stock.setDirection(dataInfo.getFromDirection());
stock.setSide(dataInfo.getFromSide());
stock.setSeparation(dataInfo.getFromSeparation());
stock.setRow(dataInfo.getFromRow());
stock.setColumn(dataInfo.getFromColumn());
stock.setStatus("0");
stock.setExportTime(LocalDateTime.now());
stock.setCode("");
stock.setWmsCode("");
stock.setTrayCode("");
stock.setWmsCategory("");
stock.setCount("0");
stock.setWmsCount("0");
stock.setCategory("");
stock.setWmsTrayCode("");
// 盘点数据保存
} else {
newStock.setStreetId(street.getId());
newStock.setCheckNum(dataInfo.getTaskId());
newStock.setDirection(dataInfo.getFromDirection());
newStock.setSide(dataInfo.getFromSide());
newStock.setSeparation(dataInfo.getFromSeparation());
newStock.setRow(dataInfo.getFromRow());
newStock.setColumn(dataInfo.getFromColumn());
newStock.setId(stock.getId());
stock = newStock;
stock.setStatus("0");
stock.setCheckNum(dataInfo.getTaskId());
stock.setExportTime(LocalDateTime.now());
// 将盘点数据保存
}
stock.setCheckPic(uuid);
//拍照记录
String pathSrc = PathUtil.createFileName(dataInfo, street, "E1", ".jpg");
CameraDO camera = cameraService.getById(dataInfo.getFromDirection() == 1 ? street.getCamera1Id() : street.getCamera2Id());
pathSrc = cameraCapture(camera, false, pathSrc, dictDataService.getDictDataList("camera_conf"));
urlResourcesService.save(URLResourcesDo.builder().url(saveApiPath+pathSrc).uuid(uuid).type("1").little("球机拍照").build());
urlResourcesService.save(URLResourcesDo.builder().url(saveApiPath + pathSrc).uuid(uuid).type("1").little("球机拍照").build());
// 先记录正常未盘点情况
stockService.saveOrUpdate(stock);
//根据扫码配置 获取扫码结果
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("scan_conf");
// 默认正确
AtomicReference<String> status = new AtomicReference<>("2");
StockDO finalStock = stock;
List<CompletableFuture<ScanData>> futures = dictDataList.values().stream()
.filter(dictDataDO -> !dictDataDO.getValue().equals("0"))
.map(dictDataDO -> CompletableFuture.supplyAsync(() ->
// 调用扫码服务,包含图片保存等不进行修改finalStock
scanServiceFactory.scan(dictDataDO.getValue(), street, dataInfo, finalStock)
).thenApply(result -> {
// 任务完成后,基于返回的结果进行操作
// 如果有扫码结果,并且扫码结果为假,则修改状态为错误
// 获取字段对象
try {
String wmsType = "wms" + capitalize(dictDataDO.getLabel());
Field stockField = finalStock.getClass().getDeclaredField(dictDataDO.getLabel());
Field wmsField = KsecDataInfo.class.getDeclaredField(dictDataDO.getLabel());
Field stockWmsField = finalStock.getClass().getDeclaredField(wmsType);
wmsField.setAccessible(true);
stockField.setAccessible(true);
stockWmsField.setAccessible(true);
String wmsCode = (String) wmsField.get(dataInfo);
if (!result.getCode().equals(wmsCode)) {
status.set("1");
}
stockField.set(finalStock, result.getCode());
stockWmsField.set(finalStock, wmsCode);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
status.set("1");
}
return result;
}
).orTimeout(10, TimeUnit.SECONDS)
.exceptionally(ex -> {
if (ex instanceof TimeoutException) {
status.set("1");
}
return null;
})
)
.toList();
// 等待所有异步任务完成
CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
try {
allOf.get(); // 阻塞直到所有任务完成
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
// 打印修改后的对象
finalStock.setStatus(status.get());
// ScanStatus scanStatus = scanServiceFactory.action(isCheck,code, dataInfo.getCode(), trayCode, dataInfo.getTrayCode());
stockService.saveOrUpdate(finalStock);
checkLog(finalStock);
redisUtil.hset("stock:task:" + dataInfo.getTaskId(), "taskId", dataInfo.getTaskId());
checkLog(stock);
// StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties,sensorGun);
// threadPoolExecutor.execute(stockCheckRunnable);
//还原相机
@ -362,6 +387,93 @@ public class PLCServiceImpl implements PLCService {
// getPhotoDelayExecutor.communicationFactory(algorithmDelayTask);
}
public void check(String taskId, String cmd) {
//根据扫码配置 获取扫码结果
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("scan_conf");
Map<String, DictDataDO> csscStartList = dictDataService.getDictDataList("cssc_scan");
// 如果存在扫码情况,进行扫码
if (csscStartList.get(cmd) != null) {
String[] scanTypes = csscStartList.get(cmd).getValue().split(";");
StockDO stock = stockService.getOne(
new QueryWrapper<StockDO>()
.eq("task_id", taskId)
);
StreetDO street = streetService.getById(stock.getStreetId());
for (String scanType : scanTypes) {
DictDataDO dictDataDO = dictDataList.get(scanType);
ScanData scanData = scanServiceFactory.scan(dictDataDO.getValue(), street, stock);
redisUtil.hset("stock:task:" + taskId, scanType, scanData.getCode());
try {
String wmsType = "wms" + capitalize(scanType);
Field stockField = stock.getClass().getDeclaredField(scanType);
Field stockWmsField = stock.getClass().getDeclaredField(wmsType);
stockField.setAccessible(true);
stockWmsField.setAccessible(true);
// String wmsCode = (String) wmsField.get(stock);
// stockField.set(stock, scanData.getCode());
stockField.set(stock, scanData.getCode());
redisUtil.hset("stock:task:" + taskId, scanType, scanData.getCode());
} catch (IllegalAccessException e) {
log.error("scan error", e);
} catch (NoSuchFieldException e) {
log.error("scan error", e);
}
}
stockService.updateById(stock);
checkLog(stock);
}
setUpdateStatus(taskId, cmd);
}
public void checkStop(String taskId) {
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("base_conf");
Map<String, DictDataDO> csscStartList = dictDataService.getDictDataList("cssc_scan");
StockDO stock = stockService.getOne(
new QueryWrapper<StockDO>()
.eq("task_id", taskId)
);
if (stock == null) {
log.error("taskId:{}不存在", taskId);
return;
}
stock.setStatus("2");
for (String key : csscStartList.keySet()) {
if (key.startsWith("E")) {
String[] split = csscStartList.get(key).getValue().split(",");
for (String s : split) {
String wmsType = "wms" + capitalize(s);
try {
Field stockField = StockDO.class.getDeclaredField(s);
Field wmsField = StockDO.class.getDeclaredField(wmsType);
// 添加以下两行代码,设置字段可访问
stockField.setAccessible(true);
wmsField.setAccessible(true);
if (!wmsField.get(stock).toString().equals(stockField.get(stock).toString())) {
stock.setStatus("1");
}
} catch (Exception e) {
stock.setStatus("1");
log.error("scan error", e);
}
}
}
}
stockService.updateById(stock);
checkLog(stock);
setUpdateResult(taskId);
redisUtil.del("stock:task:" + taskId);
}
public static String capitalize(String str) {
if (str == null || str.isEmpty()) {
return str;
@ -376,88 +488,29 @@ public class PLCServiceImpl implements PLCService {
CheckLogMapper checkLogMapper;
public void checkLog(StockDO stock) {
CheckLogDO checkLog = new CheckLogDO();
checkLog.setCheckNum(stock.getCheckNum());
CheckLogDO checkLog = BeanUtils.toBean(stock, CheckLogDO.class);
CheckLogDO checkLogDO = checkLogMapper.selectOne(
new QueryWrapper<CheckLogDO>()
.eq("task_id", stock.getCheckNum()).last("limit 1")
);
if (checkLogDO != null) {
checkLog.setId(checkLogDO.getId());
}
checkLog.setPic(stock.getCheckPic());
checkLog.setStreetId(stock.getStreetId());
checkLog.setDirection(stock.getDirection());
checkLog.setSide(stock.getSide());
checkLog.setCode(stock.getCode());
checkLog.setWmsCode(stock.getWmsCode());
checkLog.setStatus(Integer.valueOf(stock.getStatus()));
checkLog.setRow(stock.getRow());
checkLog.setColumn(stock.getColumn());
checkLog.setTrayCode(stock.getTrayCode());
checkLog.setWmsTrayCode(stock.getWmsTrayCode());
checkLog.setCount(stock.getCount());
checkLog.setWmsCount(stock.getWmsCount());
checkLog.setWmsCategory(stock.getWmsCategory());
checkLog.setCategory(stock.getCategory());
checkLog.setWmsTrayCode(stock.getWmsTrayCode());
checkLog.setLotnum(stock.getLotnum());
checkLog.setCreateTime(LocalDateTime.now());
checkLogMapper.insert(checkLog);
log.info("checkLogMapper insert");
}
public void stockSave(KsecDataInfo ksecDataInfo, StreetDO streetDO, String trayCode) {
StockDO stockDO = stockService.getOne(new QueryWrapper<StockDO>()
.eq("street_id", streetDO.getId())
.eq("direction", ksecDataInfo.getFromDirection())
.eq("side", ksecDataInfo.getFromSide())
.eq("`row`", ksecDataInfo.getFromRow())
.eq("`column`", ksecDataInfo.getFromColumn()));
String cameraType = ksecDataInfo.getSRMNumber() + "-" + ksecDataInfo.getCmdName() + "-" + ksecDataInfo.getToDirection() + "-" + "up";
if (stockDO == null) {
stockDO = StockDO.builder()
.checkNum(ksecDataInfo.getTaskId())
.lotnum(ksecDataInfo.getLotnum())
.taskWmsId(ksecDataInfo.getTaskId())
.wmsCode(trayCode)
.code(trayCode)
.streetId(streetDO.getId())
.direction(ksecDataInfo.getFromDirection())
.row(ksecDataInfo.getFromRow())
.column(ksecDataInfo.getFromColumn())
.status("0")
.checkPic("http://" + streetDO.getPlcIp() + ":9007/pic/" + ksecDataInfo.getTaskId() + "_" + cameraType + ".JPEG;")
.exportTime(LocalDateTime.now()).build();
stockService.save(stockDO);
} else {
stockDO.setStatus("0");
stockDO.setLotnum(ksecDataInfo.getLotnum());
stockDO.setExportTime(LocalDateTime.now());
stockDO.setCheckPic(ksecDataInfo.getTaskId() + "_" + cameraType);
stockDO.setCheckNum(ksecDataInfo.getTaskId());
stockDO.setCode(trayCode);
stockDO.setWmsCode(trayCode);
stockDO.setTaskWmsId(ksecDataInfo.getTaskId());
stockService.updateById(stockDO);
if (checkLogDO == null) {
checkLog.setId(null);
checkLogMapper.insert(checkLog);
}else {
checkLogMapper.updateById(checkLog);
}
CheckLogDO checkLog = new CheckLogDO();
checkLog.setCheckNum(stockDO.getCheckNum());
checkLog.setPic(stockDO.getCheckPic());
checkLog.setStreetId(stockDO.getStreetId());
checkLog.setTaskId(stockDO.getTaskWmsId());
checkLog.setDirection(stockDO.getDirection());
checkLog.setSide(stockDO.getSide());
checkLog.setCode(trayCode);
checkLog.setWmsCode(trayCode);
checkLog.setStatus(Integer.valueOf(stockDO.getStatus()));
checkLog.setRow(stockDO.getRow());
checkLog.setColumn(stockDO.getColumn());
checkLog.setTrayCode(stockDO.getTrayCode());
checkLog.setWmsTrayCode(stockDO.getWmsTrayCode());
checkLog.setLotnum(stockDO.getLotnum());
checkLog.setCreateTime(LocalDateTime.now());
checkLogService.save(checkLog);
log.info("checkLogMapper insert");
}
@Override
public void stockSave(AlgorithmDelayTask algorithmDelayTask) {
StockDO stockDO = stockService.getOne(new QueryWrapper<StockDO>().eq("task_Wms_Id", algorithmDelayTask.getTaskId()));
@ -484,7 +537,7 @@ public class PLCServiceImpl implements PLCService {
public void orderStart(KsecDataInfo kescEntity) {
StreetDO street = streetService.getStreetByPlcId(kescEntity.getSRMNumber());
sseClient.sendMessage(street.getPlcId()+"巷道开始随行记录");
if (street != null) {
OrderDO order = new OrderDO();
@ -492,10 +545,17 @@ public class PLCServiceImpl implements PLCService {
order.setCreateTime(LocalDateTime.now());
order.setSrmNumber(kescEntity.getSRMNumber());
order.setFromSide(kescEntity.getFromSide());
order.setFromSide(kescEntity.getToSide());
order.setFromSeparation(kescEntity.getFromSeparation());
order.setFromDirection(kescEntity.getFromDirection());
order.setFromColumn(kescEntity.getFromColumn());
order.setFromRow(kescEntity.getFromRow());
order.setToSide(kescEntity.getToSide());
order.setToSeparation(kescEntity.getToSeparation());
order.setToDirection(kescEntity.getToDirection());
order.setToColumn(kescEntity.getToColumn());
order.setToRow(kescEntity.getToRow());
order.setStartTime(LocalDateTime.now());
//todo 昆船的项目 ,取货 放货是独立的
@ -517,31 +577,30 @@ public class PLCServiceImpl implements PLCService {
// OrderRealtime.startOrder(street.getId(), plcCmdInfo.getOrderNum());
}
}
@Resource
ZLMediaKitService zLMediaKitService;
public void orderStop(KsecDataInfo ksecDataInfo) {
public void orderStop(String taskId) {
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("camera_conf");
LocalDateTime endTime = LocalDateTime.now();
StreetDO street = streetService.getStreetByPlcId(ksecDataInfo.getSRMNumber());
if (street == null) {
return;
}
OrderDO order = orderMapper.selectOne(new LambdaQueryWrapper<OrderDO>()
.eq(OrderDO::getTaskId, ksecDataInfo.getTaskId())
.eq(OrderDO::getTaskId, taskId)
.orderByDesc(OrderDO::getCreateTime)
.last("limit 1"));
if (order == null) {
log.error("订单结束信号订单不存在orderNum:{}", ksecDataInfo.getTaskId());
log.error("订单结束信号订单不存在orderNum:{}", taskId);
return;
}
StreetDO street = streetService.getStreetByPlcId(order.getSrmNumber());
sseClient.sendMessage(street.getPlcId()+"巷道结束随行记录");
if (street == null) {
return;
}
//OrderRealtime.stopOrder(street.getId());
OrderDO update = new OrderDO();
update.setId(order.getId());
update.setEndTime(endTime);
update.setToSide(ksecDataInfo.getToSide());
update.setToDirection(ksecDataInfo.getToDirection());
update.setToColumn(ksecDataInfo.getToColumn());
update.setToRow(ksecDataInfo.getToRow());
// OrderDO update = new OrderDO();
order.setEndTime(endTime);
LocalDateTime endDownLoadTime = endTime.plusSeconds(10);
Duration duration = Duration.between(order.getCreateTime(), endDownLoadTime);
@ -550,8 +609,10 @@ public class PLCServiceImpl implements PLCService {
}
if (street.getCamera1Id() != null) {
for (int i = 0; i < 5; i++) {
zLMediaKitService.stopRecord("live", street.getCamera1Id().toString());
zLMediaKitService.stopRecord("live", street.getCamera1Id().toString());
}
// String path = cameraVideo(street.getCamera1Id(), pathSrc, order.getCreateTime(), endDownLoadTime, dictDataList);
}
@ -560,7 +621,9 @@ public class PLCServiceImpl implements PLCService {
}
orderMapper.updateById(update);
orderMapper.updateById(order);
sseClient.sendMessage(street.getPlcId()+"巷道结束盘点");
}
/**
@ -572,126 +635,14 @@ public class PLCServiceImpl implements PLCService {
*/
public void orderStop(KescEntity kescEntity) {
LocalDateTime endTime = LocalDateTime.now();
StreetDO street = streetService.getStreetByPlcId(kescEntity.getData().getSRMNumber());
if (street == null) {
return;
}
OrderDO order = orderMapper.selectOne(new QueryWrapper<OrderDO>().eq("task_id", kescEntity.getData().getTaskId()));
if (order == null) {
log.error("订单结束信号订单不存在orderNum:{}", kescEntity.getData().getTaskId());
return;
}
//OrderRealtime.stopOrder(street.getId());
order.setId(order.getId());
order.setEndTime(endTime);
order.setToSide(kescEntity.getData().getToSide());
order.setToDirection(kescEntity.getData().getToDirection());
order.setToColumn(kescEntity.getData().getToColumn());
order.setToRow(kescEntity.getData().getToRow());
//拍照相机id获取
String cameraType = kescEntity.getData().getSRMNumber() + "-" + kescEntity.getData().getToDirection() + "-" + "up";
List<SensorGunDO> sensorGunDOS = sensorGunMapper.selectListByStreetId(street.getId());
//扫码枪校验
String sensorGunCode = "";
for (SensorGunDO sensorGunDO : sensorGunDOS) {
if (sensorGunDO.getDirection() == kescEntity.getData().getFromDirection()) {
int time = Integer.parseInt(dictDataService.parseDictData("sensorFun_conf", "order_sensorFun_scan_time").getValue());
sensorGunCode = ScanningGun.readOCR(sensorGunDO.getIp(), sensorGunDO.getPort(), "start", time);
}
}
//拍照i
//CheckIntellBlinkChanel.pictures(street.getPlcId(), kescEntity.getData().getTaskId(),cameraType,dictDataService.parseDictData("camera_position", cameraType).getValue());
AlgorithmDelayTask algorithmDelayTask = new AlgorithmDelayTask(kescEntity.getData().getToDirection(), street.getPlcId()
, kescEntity.getData().getTaskId(), 10000, sensorGunCode, "C3", kescEntity.getData().getToRow(), kescEntity.getData().getToColumn());
String picPath = algorithmDelayTask.getSRMNumber() + "-" + algorithmDelayTask.getCmdName() + "-" + algorithmDelayTask.getDirection() + "-" + "up";
KsecDataInfo ksecDataInfo = KsecDataInfo.toFrom(kescEntity.getData());
stockSave(ksecDataInfo, street, sensorGunCode);
getPhotoDelayExecutor.communicationFactory(algorithmDelayTask);
order.setPics(order.getPics() == null ? "" : order.getPics() + "http://" + street.getPlcIp() + ":9007/pic/" + kescEntity.getData().getTaskId() + "_" + picPath + ".JPEG;");
orderMapper.updateById(order);
}
@Resource
GetPhotoDelayExecutor getPhotoDelayExecutor;
@Resource
SensorGunMapper sensorGunMapper;
@Resource
TaskDelayExecutor taskDelayExecutor;
public String cameraVideo(Integer cameraId, String path, LocalDateTime startTime, LocalDateTime endTime, Map<String, DictDataDO> map) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String realPath = map.get("mp4_path").getValue() + path;
TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, Long.valueOf(map.get("delay_mp4_time").getValue()));
}
});
thread.start();
//cameraControlModule.downloadMp4(cameraId,realPath,startTime,endTime);
return path;
}
/**
* //times == 1 ,做动作
* //times == 2 ,拍照
* //times == 3 ,做动作
* //times == 4 ,拍照
*
*/
// public void action(KsecDataInfo ksecDataInfo , Map<String, DictDataDO> dictDataList) throws InterruptedException {
// StreetDO street = streetService.getStreetByPlcId(ksecDataInfo.getSRMNumber());
// if (street == null) {
// log.error("street not found ,plcId :{}", ksecDataInfo.getSRMNumber());
// return;
// }
// //OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, times, code);
// String path = null;
// //判断是否拍照
// boolean needCapture = false;
// String picCmd = ksecDataInfo.getCode().substring(0, 2);
// if (picCmd.equals("C2") || picCmd.equals("C4") || picCmd.equals("C1") || picCmd.equals("C3")) {
// needCapture = true;
// }
// boolean time = (picCmd.equals("C3") || picCmd.equals("C4"));
// /***
// * 判断该巷道有几个相机
// * 如果有一个相机,就一个相机转
// * 如果有两个相机则左侧转camera1
// * 右侧转camera2
// * 没有就不管了
// */
// Integer leftRight =time ? ksecDataInfo.getToDirection() : ksecDataInfo.getFromDirection();
// Integer cameraId = getCameraByPlcCmd(street,leftRight);
// gyrateCameraByCode(cameraId,getPresetString(ksecDataInfo.getCode(),picCmd,ksecDataInfo));
// if(needCapture){
// if(time){
//
// path = PathUtil.createFileNameByRowColumn("jpg",cameraId,ksecDataInfo.getToRow(),ksecDataInfo.getToColumn());
// }else {
// path = PathUtil.createFileNameByRowColumn("jpg",cameraId,ksecDataInfo.getFromRow(),ksecDataInfo.getFromColumn());
// }
// path = cameraCapture(cameraId,true,path,dictDataList);
// }
// //update order info after capture
// if (path != null && needCapture) {
// captureUpdateOrderAndStock(ksecDataInfo, path,street.getId());
// }
// //转向原点位
//
// gyrateCameraByCode(cameraId,"C5");
// }
// 创建一个单线程的调度执行器
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
/**
* capture picture by camera
@ -701,22 +652,32 @@ public class PLCServiceImpl implements PLCService {
public String cameraCapture(CameraDO camera, Boolean delay, String path, Map<String, DictDataDO> map) {
//String path = PathUtil.createFileName("jpg",cameraId);
String realPath = map.get("media_path").getValue() + path;
if (delay) {
TaskDelayExecutor.addPicDelayTask(camera.getId(), realPath, Long.valueOf(map.get("delay_capture_time").getValue()));
} else {
scheduler.schedule(() -> {
try {
zLMediaKitService.pic(camera, realPath);
log.info("延迟截图执行完成cameraId:{}, path:{}", camera.getId(), realPath);
} catch (Exception e) {
log.error("延迟截图执行失败cameraId:{}", camera.getId(), e);
}
}, Long.valueOf(map.get("delay_capture_time").getValue()), TimeUnit.MILLISECONDS);
}else {
cameraModFactory.get(camera.getType()).pic(camera.getId(), 0, realPath);
log.info("cameraID: {} capture photo :{}", camera.getId(), realPath);
zLMediaKitService.pic(camera, realPath);
log.info("capture picture success,path:{}", realPath);
}
return path;
}
String getPresetString(String code, String picCmd, KsecDataInfo ksecDataInfo) {
Integer side = 1;
Integer leftRight = 1;
if (picCmd.equals("C2") || picCmd.equals("C1")) {
side = ksecDataInfo.getFromSide();
side = ksecDataInfo.getFromSeparation();
leftRight = ksecDataInfo.getFromDirection();
} else {
@ -726,47 +687,6 @@ public class PLCServiceImpl implements PLCService {
return code + (leftRight == 1 ? "-L-" : "-R-") + (side == 1 ? "" : "-OUT");
}
/**
* capture ,and update the picture path in order and stock
*
* @param orderInfo
* @param path
*/
public void captureUpdateOrderAndStock(KsecDataInfo orderInfo, String path, Integer streetId) {
synchronized (orderInfo.getTaskId().intern()) {
OrderDO order = orderMapper.selectOne(new LambdaQueryWrapper<OrderDO>().eq(OrderDO::getTaskId, orderInfo.getTaskId()));
if (order != null) {
//记录送货完成
if (orderInfo.getCode().startsWith("C4")) {
StockLogDO stockLog = new StockLogDO();
stockLog.setStreetId(streetId);
stockLog.setDirection(orderInfo.getToDirection());
stockLog.setSide(orderInfo.getToSeparation());
stockLog.setRow(orderInfo.getToRow());
stockLog.setColumn(orderInfo.getToColumn());
stockLog.setPic(path);
String type = orderInfo.getCode().substring(1, 2);
stockLog.setType(Integer.valueOf(type));
stockLog.setOrderNum(orderInfo.getTaskId());
stockLog.setCreateTime(LocalDateTime.now());
stockLogMapper.insert(stockLog);
}
String pics = order.getPics();
if (org.springframework.util.StringUtils.isEmpty(pics)) {
order.setPics(path);
} else {
order.setPics(pics + "," + path);
}
OrderDO update = new OrderDO();
update.setId(order.getId());
update.setPics(order.getPics());
log.debug(" update order set pics:{},orderNum:{}", update.getPics(), orderInfo.getTaskId());
orderMapper.updateById(update);
}
}
}
public CameraDO getCameraByLeftRight(StreetDO street, Integer leftRight) {
Integer cameraId = null;

@ -4,7 +4,6 @@ import cn.iocoder.yudao.module.camera.dal.dataobject.resources.URLResourcesDo;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import cn.iocoder.yudao.module.camera.service.resources.URLResourcesService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -24,16 +23,16 @@ public class OpencvServiceImpl implements ScanService {
URLResourcesService urlResourcesService;
@Override
public ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(StreetDO streetDO, StockDO stockDO) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//
ScanData scanData = new ScanData();
scanData.setCode(dataInfo.getCategory());
scanData.setCode(stockDO.getCategory());
scanData.setIp(streetDO.getPlcIp());
scanData.setPort(streetDO.getPlcPort());
scanData.setUuid(stockDO.getCheckPic());
scanData.setDirection(dataInfo.getFromDirection());
scanData.setDirection(stockDO.getDirection());
HttpEntity<ScanData> request = new HttpEntity<>(scanData, headers);
String url = "http://" + streetDO.getPlcIp() + ":" + streetDO.getPlcPort() + "/match/match2D";
scanData = restTemplate.postForObject(url, request, ScanData.class);

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.camera.service.scan;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
@ -19,16 +18,16 @@ public class PCDServiceImpl implements ScanService{
@Resource
RestTemplate restTemplate;
@Override
public ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(StreetDO streetDO, StockDO stockDO) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//
ScanData scanData = new ScanData();
scanData.setCode(dataInfo.getCategory());
scanData.setCode(stockDO.getCategory());
scanData.setIp(streetDO.getPlcIp());
scanData.setPort(streetDO.getPlcPort());
scanData.setUuid(stockDO.getCheckPic());
scanData.setDirection(dataInfo.getFromDirection());
scanData.setDirection(stockDO.getDirection());
HttpEntity<ScanData> request = new HttpEntity<>(scanData, headers);
String url = "http://"+streetDO.getPlcIp()+":"+streetDO.getPlcPort()+"/match/match3D";

@ -3,13 +3,12 @@ package cn.iocoder.yudao.module.camera.service.scan;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import org.springframework.stereotype.Service;
@Service("rfidScanService")
public class RFIDScanServiceImpl implements ScanService{
@Override
public ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(StreetDO streetDO, StockDO stockDO) {
return null;
}
}

@ -4,7 +4,6 @@ import cn.iocoder.yudao.module.camera.dal.dataobject.sensorgun.SensorGunDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import cn.iocoder.yudao.module.camera.service.sensorgun.CognexSocket;
import cn.iocoder.yudao.module.camera.service.sensorgun.SensorGunService;
import cn.iocoder.yudao.module.camera.service.sensorgun.SickSocket;
@ -82,12 +81,12 @@ public class ScanGunScanServiceImpl implements ScanService{
return bd.readLine();
}
@Override
public ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(StreetDO streetDO, StockDO stockDO) {
ScanData scanData = new ScanData();
SensorGunDO sensorGun = sensorService.getOne(new QueryWrapper<SensorGunDO>().eq("street_id", streetDO.getId()).eq("direction", dataInfo.getFromDirection()));
SensorGunDO sensorGun = sensorService.getOne(new QueryWrapper<SensorGunDO>().eq("street_id", streetDO.getId()).eq("direction", stockDO.getDirection()));
String trayCode = "";
if (sensorGun == null) {
log.error("no sensor gun config in database ,street id:{},direction:{}", streetDO.getId(), dataInfo.getFromDirection());
log.error("no sensor gun config in database ,street id:{},direction:{}", streetDO.getId(), stockDO.getDirection());
} else {
// sick扫码
if (sensorGun.getType() == 1){

@ -3,8 +3,7 @@ package cn.iocoder.yudao.module.camera.service.scan;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
public interface ScanService {
ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO);
ScanData scan(StreetDO streetDO, StockDO stockDO);
}

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.camera.service.scan;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import cn.iocoder.yudao.module.camera.service.Hik3D.HikFlaskApiService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -26,39 +25,49 @@ public class ScanServiceFactory {
private HikFlaskApiService hikFlaskApiService;
// 返回的ScanData的code会将作为扫描结果如果和wms的一致则记录为成功
// 图片保存将在scan方法中实现
public ScanData scan(String type, StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(String type, StreetDO streetDO, StockDO stockDO) {
try {
switch (type) {
case "0":
return null;
// 扫码枪扫码
case "1":
return scanGunScanService.scan(streetDO, dataInfo, stockDO);
// RFID扫码
case "2":
return rfidScanService.scan(streetDO, dataInfo, stockDO);
// 视觉扫码
case "3":
return yoloService.scan(streetDO, dataInfo, stockDO);
switch (type) {
case "0":
return null;
// 扫码枪扫码
case "1":
log.info("扫码枪扫码");
return scanGunScanService.scan(streetDO, stockDO);
// RFID扫码
case "2":
log.info("RFID扫码");
return rfidScanService.scan(streetDO, stockDO);
// 视觉扫码
case "3":
log.info("视觉扫码");
return yoloService.scan(streetDO, stockDO);
// 3D扫码
case "4":
return pcdService.scan(streetDO, dataInfo, stockDO);
// 3D扫码
case "4":
log.info("3D扫码");
return pcdService.scan(streetDO, stockDO);
// opencv扫码
case "5":
return opencvService.scan(streetDO, dataInfo, stockDO);
// opencv扫码
case "5":
log.info("opencv扫码");
return opencvService.scan(streetDO, stockDO);
// hik3d识别扫码
case "6":
return hikFlaskApiService.scan(streetDO, dataInfo, stockDO);
// 默认情况处理
default:
return null;
// hik3d识别扫码
case "6":
log.info("hik3d识别扫码");
return hikFlaskApiService.scan(streetDO, stockDO);
// 默认情况处理
default:
return new ScanData();
}
} catch (Exception e) {
log.error("scan error", e);
return new ScanData();
}
}

@ -3,13 +3,12 @@ package cn.iocoder.yudao.module.camera.service.scan;
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
import cn.iocoder.yudao.module.camera.framework.netty.ksec.KsecDataInfo;
import org.springframework.stereotype.Service;
@Service("yoloService")
public class YoloServiceImpl implements ScanService{
@Override
public ScanData scan(StreetDO streetDO, KsecDataInfo dataInfo, StockDO stockDO) {
public ScanData scan(StreetDO streetDO, StockDO stockDO) {
return null;
}
}

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.camera.service.shelfCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodePageReqVO;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodeSaveReqVO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import jakarta.validation.Valid;
/**
* RFID Service
*
* @author
*/
public interface ShelfCodeService {
/**
* RFID
*
* @param createReqVO
* @return
*/
Integer createShelfCode(@Valid ShelfCodeSaveReqVO createReqVO);
/**
* RFID
*
* @param updateReqVO
*/
void updateShelfCode(@Valid ShelfCodeSaveReqVO updateReqVO);
/**
* RFID
*
* @param id
*/
void deleteShelfCode(Integer id);
/**
* RFID
*
* @param id
* @return RFID
*/
ShelfCodeDO getShelfCode(Integer id);
/**
* RFID
*
* @param pageReqVO
* @return RFID
*/
PageResult<ShelfCodeDO> getShelfCodePage(ShelfCodePageReqVO pageReqVO);
}

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.camera.service.shelfCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodePageReqVO;
import cn.iocoder.yudao.module.camera.controller.admin.shelfCode.vo.ShelfCodeSaveReqVO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import cn.iocoder.yudao.module.camera.dal.mysql.shelfCode.ShelfCodeMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.RFID_NOT_EXISTS;
/**
* RFID Service
*
* @author
*/
@Service
@Validated
public class ShelfCodeServiceImpl implements ShelfCodeService {
@Resource
private ShelfCodeMapper shelfCodeMapper;
@Override
public Integer createShelfCode(ShelfCodeSaveReqVO createReqVO) {
// 插入
ShelfCodeDO shelfCode = BeanUtils.toBean(createReqVO, ShelfCodeDO.class);
shelfCodeMapper.insert(shelfCode);
// 返回
return shelfCode.getId();
}
@Override
public void updateShelfCode(ShelfCodeSaveReqVO updateReqVO) {
// 校验存在
validateShelfCodeExists(updateReqVO.getId());
// 更新
ShelfCodeDO updateObj = BeanUtils.toBean(updateReqVO, ShelfCodeDO.class);
shelfCodeMapper.updateById(updateObj);
}
@Override
public void deleteShelfCode(Integer id) {
// 校验存在
validateShelfCodeExists(id);
// 删除
shelfCodeMapper.deleteById(id);
}
private void validateShelfCodeExists(Integer id) {
if (shelfCodeMapper.selectById(id) == null) {
throw exception(RFID_NOT_EXISTS);
}
}
@Override
public ShelfCodeDO getShelfCode(Integer id) {
return shelfCodeMapper.selectById(id);
}
@Override
public PageResult<ShelfCodeDO> getShelfCodePage(ShelfCodePageReqVO pageReqVO) {
return shelfCodeMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,11 @@
package cn.iocoder.yudao.module.camera.service.shelfCode;
import lombok.extern.slf4j.Slf4j;
/**
* sick
*/
@Slf4j
public class ShelfCodeSocket {
}

@ -1,13 +1,15 @@
package cn.iocoder.yudao.module.camera.service.streamingMedia;
import cn.iocoder.yudao.module.camera.dal.dataobject.camera.CameraDO;
import cn.iocoder.yudao.module.camera.dal.zlm.RtspSessionResponse;
import java.util.List;
public interface ZLMediaKitService {
String startRecord(String app, String stream);
void stopRecord(String app, String stream);
RtspSessionResponse stopRecord(String app, String stream);
void addRtspProxy(CameraDO camera, String zlmApiUrl, String zlmApiSecret);
void pic(CameraDO camera, String zlmApiUrl);
void zlmConf( List<CameraDO> list);
void deleteRecordDirectory(String app, String stream, String period);
}

@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.camera.dal.dataobject.camera.CameraDO;
import cn.iocoder.yudao.module.camera.dal.zlm.RtspSessionResponse;
import cn.iocoder.yudao.module.camera.service.channel.CameraChannel;
import cn.iocoder.yudao.module.camera.util.PathUtil;
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -40,6 +41,7 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
@Resource
private DictDataService dictDataService;
@Override
public String
startRecord(String app, String cameraId) {
@ -52,7 +54,14 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
addParams.put("app", "live");
addParams.put("stream","camera"+ cameraId);
// addParams.put("url", CameraChannel.getRtspUrl(camera.getIp(), camera.getRtspPort(), camera.getChannel(), camera.getUser(), camera.getPassword(),camera.getType()));
sendHttp(addParams, "startRecord");
// sendHttp(addParams, "startRecord");
// 查看是否录像,为录像则重新出发录像
for (int i = 0; i <=5; i++) {
RtspSessionResponse rtspSessionResponse = sendHttp(addParams, "startRecord");
if (rtspSessionResponse != null && rtspSessionResponse.isResult()){
break;
}
}
log.info("startRecord camera:"+cameraId);
String path = checkHiddenFilesInDirectory(app,cameraId);
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@ -104,6 +113,62 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
return "";
}
/**
* ZLMediaKitgetSnap
*
* @param savePath
* @return 访null
*/
public void captureSnapshot(CameraDO camera, String savePath) {
PathUtil.checkDirc(savePath);
String zlmApiUrl = dictDataService.parseDictData("ZLMediaKit_conf", "Apiurl").getValue();
String zlmApiSecret = dictDataService.parseDictData("ZLMediaKit_conf", "secret").getValue();
try {
// 构建getSnap请求参数
Map<String, Object> snapParams = new HashMap<>();
snapParams.put("secret", zlmApiSecret);
snapParams.put("vhost", "__defaultVhost__");
snapParams.put("expire_sec",1);
snapParams.put("url",CameraChannel.getRtspUrl(camera.getIp(), camera.getRtspPort(), camera.getChannel(), camera.getUser(), camera.getPassword(),camera.getType()));
snapParams.put("timeout_sec", 10); // 设置超时时间
// 构建请求URL
String snapUrl = buildUrl(zlmApiUrl + "getSnap", null, snapParams);
// 发送请求并获取截图
Request request = new Request.Builder()
.url(snapUrl)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
// 保存图片到指定位置
byte[] imageBytes = response.body().bytes();
Path savePathObj = Paths.get(savePath);
// 确保目录存在
Files.createDirectories(savePathObj.getParent());
// 写入文件
Files.write(savePathObj, imageBytes);
log.info("截图保存成功: {}", savePath);
// 返回访问路径(根据你的需求调整)
String mp4SaveApi = dictDataService.parseDictData("ZLMediaKit_conf", "mp4SaveApi").getValue();
} else {
log.error("获取截图失败HTTP状态码: {}", response.code());
}
}
} catch (Exception e) {
log.error("截图过程中发生错误", e);
}
}
public static String removeLeadingDot(String input) {
if (input == null || input.isEmpty()) {
return input;
@ -114,7 +179,7 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
return input;
}
@Override
public void stopRecord(String app, String stream) {
public RtspSessionResponse stopRecord(String app, String stream) {
String zlmApiSecret = dictDataService.parseDictData("ZLMediaKit_conf", "secret").getValue();
Map<String, Object> addParams = new HashMap<>();
@ -124,8 +189,8 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
addParams.put("app", "live");
addParams.put("stream","camera"+ stream);
// addParams.put("url", CameraChannel.getRtspUrl(camera.getIp(), camera.getRtspPort(), camera.getChannel(), camera.getUser(), camera.getPassword(),camera.getType()));
sendHttp(addParams, "stopRecord");
RtspSessionResponse rtspSessionResponse = sendHttp(addParams, "stopRecord");
return rtspSessionResponse;
}
@Override
@ -184,11 +249,17 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
}
System.out.println("Add RTSP Proxy Response: " + response);
}
@Override
public void pic(CameraDO camera, String zlmApiUrl) {
captureSnapshot(camera, zlmApiUrl);
}
@Override
public void deleteRecordDirectory(String app, String stream, String period) {
}
public void sendHttp(Map<String, Object> queryParams ,String url){
public RtspSessionResponse sendHttp(Map<String, Object> queryParams ,String url){
String zlmApiUrl = dictDataService.parseDictData("ZLMediaKit_conf", "Apiurl").getValue();
try {
@ -196,8 +267,10 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService{
String queryUrl = buildUrl(zlmApiUrl +url,null , queryParams);
String response = get(queryUrl);
RtspSessionResponse rtspSessionResponse = JsonUtils.parseObject(response, RtspSessionResponse.class);
return rtspSessionResponse;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.camera.controller.admin.street.vo.StreetSaveReqVO
import cn.iocoder.yudao.module.camera.dal.dataobject.lightsource.LightSourceDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.rfid.RfidDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.sensorgun.SensorGunDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid;
@ -85,6 +86,8 @@ public interface StreetService extends IService<StreetDO> {
List<RfidDO> getRFIDListByStreetId(Integer streetId);
List<ShelfCodeDO> getShelfCodeListByStreetId(Integer streetId);
void getCameraName(StreetRespVO streetRespVO);
void getCameraName(List<StreetRespVO> streetRespVO);
}

@ -9,10 +9,12 @@ import cn.iocoder.yudao.module.camera.dal.dataobject.camera.CameraDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.lightsource.LightSourceDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.rfid.RfidDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.sensorgun.SensorGunDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.shelfCode.rfid.ShelfCodeDO;
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
import cn.iocoder.yudao.module.camera.dal.mysql.lightsource.LightSourceMapper;
import cn.iocoder.yudao.module.camera.dal.mysql.rfid.RfidMapper;
import cn.iocoder.yudao.module.camera.dal.mysql.sensorgun.SensorGunMapper;
import cn.iocoder.yudao.module.camera.dal.mysql.shelfCode.ShelfCodeMapper;
import cn.iocoder.yudao.module.camera.dal.mysql.street.StreetMapper;
import cn.iocoder.yudao.module.camera.service.camera.CameraService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -47,6 +49,9 @@ public class StreetServiceImpl extends ServiceImpl<StreetMapper, StreetDO> imple
@Resource
private RfidMapper rfidMapper;
@Resource
private ShelfCodeMapper shelfCodeMapper;
@Override
public StreetDO getStreetByPlcId(String code) {
@ -176,6 +181,12 @@ public class StreetServiceImpl extends ServiceImpl<StreetMapper, StreetDO> imple
return rfidMapper.selectListByStreetId(streetId);
}
@Override
public List<ShelfCodeDO> getShelfCodeListByStreetId(Integer streetId) {
return null;
}
private void createLightSourceList(Integer streetId, List<LightSourceDO> list) {
list.forEach(o -> o.setStreetId(streetId));
lightSourceMapper.insertBatch(list);

@ -20,14 +20,6 @@ public class SpecificationsAndOCR {
private static final Logger tcpLogger = LoggerFactory.getLogger("sick");
public static void main(String[] args) {
System.out.println(UUID.randomUUID());
Map<String,String> map = new HashMap<>();
map.put("Lotnum","");
map.put("2","");
Map<String,String> code = readOCR("127.0.0.1", 554);
System.out.println(map);
}
/*
* OCR

@ -52,9 +52,12 @@ public class DictDataServiceImpl extends ServiceImpl<DictDataMapper,DictDataDO>
@PostConstruct
void init(){
// log.info("init DictDataServiceImpl");
// 删除
List<DictDataDO> list = dictDataMapper.selectList();
Map<String,List<DictDataDO>> map = list.stream().collect(Collectors.groupingBy(DictDataDO::getDictType));
map.forEach((k,v)->{
redisUtil.del("dict:"+k);
redisUtil.hsetList("dict:"+k, v.stream().collect(Collectors.toMap(DictDataDO::getLabel,DictDataDO::getValue)));
});
}

Loading…
Cancel
Save