Commit c1549f9e by 李小惠

Merge branch 'develop' of http://gitlab.sothing.top/843502640/jyzb_platformV2 into develop-lxh

parents 30167ba0 0663c56b
......@@ -53,6 +53,10 @@
<version>2.5.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
</dependencies>
</project>
......
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.util.List;
@Data
public class CabinetPoliceDto {
private String orgId;
private String orgName;
private String ActionUpdateTime;
private String lastAction;
private List<PoliceDetailDto> policeList;
}
\ No newline at end of file
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.util.List;
@Data
public class PoliceDetailDto {
private String id;
private String name;
private String finger;
private String policeCode;
private String photo;
private String cabinetName;
private String serialNum;
private List<String> boxList;
}
\ No newline at end of file
......@@ -19,6 +19,7 @@ public class PolicemanReq extends BaseRequest {
@NotBlank(message = "姓名不能为空")
private String name;
private List<String> orgList;
private String cabinetId;
private List<String> boxList;
......
package com.junmp.jyzb.api.bean.req;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
@Data
public class CabinetDataList {
private String orgId;
List<PoliceListReq> policeList;
}
package com.junmp.jyzb.api.bean.req;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class CabinetPolicemanReq extends BaseRequest {
@NotBlank(message = "警员主键不能为空", groups = {edit.class, delete.class, detail.class})
private String policeId;
@NotBlank(message = "警员名字不能为空", groups = {add.class,edit.class})
private String name;
private String cabinetOrgId;
private String currentCabinetId;
@NotNull(message = "组织机构id不能为空", groups = {add.class,edit.class})
private Long orgId;
@NotBlank(message = "警员编号不能为空", groups = {add.class,edit.class})
private String policeCode;
@NotBlank(message = "人脸信息不能为空", groups = {detail.class})
private String photo;
@NotBlank(message = "主柜不能为空", groups = {add.class,edit.class})
private String serialNum;
/**
* 指纹list
*/
private String finger;
private List<Long> RolesList;
}
\ No newline at end of file
package com.junmp.jyzb.api.bean.req;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class CabinetUploadReq extends BaseRequest {
private String cabinetOrgId;
private String serialNum;
private List<CabinetDataList> dataList;
}
\ No newline at end of file
package com.junmp.jyzb.api.bean.req;
import lombok.Data;
import java.util.List;
@Data
public class PoliceListReq {
private String policeID;
private String policeCode;
private String cabinetBoxId;
private String photo;
private String name;
private String finger;
// /**
// * 角色id列表
// */
private List<Long> rolesList;
}
......@@ -19,7 +19,9 @@ public class UpdatePolicemanReq extends BaseRequest {
@NotBlank(message = "警员名字不能为空", groups = {add.class,edit.class})
private String name;
private String cabinetOrgId;
private String currentCabinetId;
@NotNull(message = "组织机构id不能为空", groups = {add.class,edit.class})
private Long orgId;
......
package com.junmp.jyzb.api.bean.req.wsReq;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class OnOpenReq {
/**
*
*/
private String type;
/**
*
*/
private String typeId;
// 有参构造函数
public OnOpenReq(@JsonProperty("type") String type, @JsonProperty("typeId") String typeId) {
this.type = type;
this.typeId = typeId;
}
}
......@@ -35,5 +35,10 @@ public interface JYZBConstant {
*/
String JYZB_TEMP_PREFIX = "temp:";
/**
* 设备状态前缀
*/
String JYZB_ONLINE_PREFIX = "onlineState:";
String JYZB_JWT_KEY = "JWT";
}
......@@ -9,7 +9,11 @@ public enum UserExceptionEnum implements IExceptionEnum {
/**
* 账号已存在
*/
USER_IS_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE,"账号已存在")
USER_IS_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE,"账号已存在"),
/**
* 账号已存在
*/
POLICE_IS_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE,"警员已存在")
;
/**
* 错误编码
......
package com.junmp.jyzb.cache;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.junmp.jyzb.api.constant.JYZBConstant;
import com.junmp.jyzb.entity.Temp.HumidityAndtemperature;
import com.junmp.jyzb.entity.Temp.OnlineState;
import com.junmp.v2.cache.AbstractRedisCache;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@Component
public class OnlineRedisCache extends AbstractRedisCache<Object> {
public OnlineRedisCache(RedisTemplate<String, Object> redisTemplate) {
super(redisTemplate);
}
@Override
public String getCommonKeyPrefix() {
return JYZBConstant.JYZB_ONLINE_PREFIX;
}
public void addSessionValue(String type,String sessionId,String typeId, long temperature) {
OnlineState data = new OnlineState();
data.setType(type);
data.setTypeId(typeId);
String key = sessionId;
String jsonData;
// 将OnlineState对象转换为JSON字符串
ObjectMapper objectMapper = new ObjectMapper();
try {
jsonData = objectMapper.writeValueAsString(data);
} catch (Exception e) {
// 处理转换异常
e.printStackTrace();
return;
}
getRedisTemplate().opsForValue().set(key, jsonData);
put(key, data);
}
public OnlineState getDataValue(String sessionId) {
boolean exists = getRedisTemplate().hasKey(sessionId);
if (!exists) {
// 处理不存在的情况
return null;
}
Set<Object> dataInRange = getRedisTemplate().opsForZSet().range(sessionId, 0, -1);
// 如果集合非空,返回第一个元素,否则返回null
if (!dataInRange.isEmpty()) {
Object firstElement = dataInRange.iterator().next();
// 检查类型是否为 OnlineState
if (firstElement instanceof OnlineState) {
return (OnlineState) firstElement; // 执行强制类型转换
} else {
// 处理类型不匹配的情况
return null;
}
} else {
return null;
}
}
}
package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import com.junmp.jyzb.api.bean.dto.CabinetPoliceDto;
import com.junmp.jyzb.api.bean.dto.FetchingDataDto.PoliceDto;
import com.junmp.jyzb.api.bean.dto.FetchingDataDto.UserDto;
import com.junmp.jyzb.api.bean.dto.PolicemanDto;
......@@ -8,6 +9,8 @@ import com.junmp.jyzb.api.bean.dto.ReassignmentDto;
import com.junmp.jyzb.api.bean.query.CabinetReq;
import com.junmp.jyzb.api.bean.query.PolicemanReq;
import com.junmp.jyzb.api.bean.query.QueryReassignmentReq;
import com.junmp.jyzb.api.bean.req.CabinetPolicemanReq;
import com.junmp.jyzb.api.bean.req.CabinetUploadReq;
import com.junmp.jyzb.api.bean.req.UpdatePolicemanReq;
import com.junmp.jyzb.api.bean.req.UpdateReassignmentReq;
import com.junmp.jyzb.entity.EquipmentSize;
......@@ -50,6 +53,12 @@ public class PoliceController {
String policeId = policemanService.AddPoliceman(req);
return ApiRes.success(policeId);
}
@PostMapping(path="/AddPolicemanFromCab",name="添加警员信息(单警柜使用)#logType=30")
@ApiOperation("添加警员信息")
public ApiRes<String> AddPolicemanFromCab(@RequestBody @Validated(ValidationApi.add.class) CabinetPolicemanReq req) {
String policeId = policemanService.AddPolicemanFromCab(req);
return ApiRes.success(policeId);
}
//添加警员时先将没有组织机构号的警员查询出来
@PostMapping(path="/GetPoliceWithoutOrg",name="获取没有组织机构的警员信息#enable")
@ApiOperation("/获取没有组织机构的警员信息")
......@@ -94,6 +103,24 @@ public class PoliceController {
}
return ApiRes.success(b);
}
@PostMapping(path="/UploadPolicemanList",name="上传当前所有警员信息#logType=30")
@ApiOperation("上传当前所有警员信息")
public ApiRes<Boolean> UploadPolicemanList(@RequestBody @Validated(ValidationApi.edit.class) CabinetUploadReq req) {
boolean b = policemanService.UploadPolicemanList(req);
if (!b){
return ApiRes.failure("修改失败");
}
return ApiRes.success(b);
}
@PostMapping(path="/UpdatePoliceFromCab",name="修改警员信息(警柜使用)#logType=30")
@ApiOperation("修改警员信息")
public ApiRes<Boolean> UpdatePoliceFromCab(@RequestBody @Validated(ValidationApi.edit.class) CabinetPolicemanReq req) {
boolean b = policemanService.UpdatePoliceFromCab(req);
if (!b){
return ApiRes.failure("修改失败");
}
return ApiRes.success(b);
}
//重置密码
@PostMapping(path="/reSetPassword",name="重置密码#logType=30")
@ApiOperation("重置密码")
......@@ -117,7 +144,12 @@ public class PoliceController {
List<PolicemanDto> policemanDtos = policemanService.GetAllPolicemanList(req);
return ApiRes.success(policemanDtos);
}
@PostMapping(path="/GetListByOrg",name="根据组织机构查询对应警员信息(警柜使用)#enable")
@ApiOperation("根据组织机构查询对应警员信息(警柜使用)")
public ApiRes<List<CabinetPoliceDto>> GetListByOrg(@RequestBody PolicemanReq req){
List<CabinetPoliceDto> policemanDtos = policemanService.GetListByOrgAsync(req);
return ApiRes.success(policemanDtos);
}
//根据组条件查询,只查询本级,不包含下级(page)--可以根据组织机构查询
@PostMapping(path="/ShowPolicePage",name="根据条件查询所有警员信息#enable")
@ApiOperation("根据条件查询所有警员信息(page)")
......
package com.junmp.jyzb.entity;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
......@@ -210,6 +211,15 @@ public class PubOrg implements Serializable {
*/
@TableField(value = "org_name")
private String orgName;
/**
* 最后的警员信息更新终端
*/
@TableField(value = "police_update_service")
private String policeUpdateService;
/**
* 最后警员信息更新时间
*/
@TableField(value = "police_update_time")
private Date policeUpdateTime;
}
\ No newline at end of file
package com.junmp.jyzb.entity.Temp;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@NoArgsConstructor
public class OnlineState {
//类型
private String type;
//类型ID
private String typeId;
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.CabinetPoliceDto;
import com.junmp.jyzb.api.bean.dto.FetchingDataDto.PoliceDto;
import com.junmp.jyzb.api.bean.dto.FetchingDataDto.UserDto;
import com.junmp.jyzb.api.bean.dto.PolicemanDto;
......@@ -9,9 +10,7 @@ import com.junmp.jyzb.api.bean.dto.UploadPolicePhotoDto;
import com.junmp.jyzb.api.bean.query.CabinetReq;
import com.junmp.jyzb.api.bean.query.PolicemanReq;
import com.junmp.jyzb.api.bean.query.QueryReassignmentReq;
import com.junmp.jyzb.api.bean.req.UpdatePolicemanReq;
import com.junmp.jyzb.api.bean.req.UpdateReassignmentReq;
import com.junmp.jyzb.api.bean.req.UploadPolicePhotoReq;
import com.junmp.jyzb.api.bean.req.*;
import com.junmp.jyzb.entity.PoliceEquipment;
import com.junmp.jyzb.entity.Policeman;
import com.junmp.jyzb.entity.Reassignment;
......@@ -30,7 +29,8 @@ public interface PolicemanService extends IService<Policeman> {
//添加警员
String AddPoliceman(UpdatePolicemanReq req);
//添加警员,警柜使用
String AddPolicemanFromCab(CabinetPolicemanReq req);
//获取单个警员信息
PolicemanDto GetOnePolice(PolicemanReq req);
......@@ -42,9 +42,9 @@ public interface PolicemanService extends IService<Policeman> {
//修改警员信息
boolean UpdatePolice(UpdatePolicemanReq req);
boolean UpdatePoliceFromCab(CabinetPolicemanReq req);
boolean UploadPolicemanList(CabinetUploadReq req);
boolean AddFaceInfo(UpdatePolicemanReq req);
......@@ -54,6 +54,9 @@ public interface PolicemanService extends IService<Policeman> {
//通过条件查询警员列表(list)
List<PolicemanDto> GetAllPolicemanList(PolicemanReq req);
//通过组织机构列表查询
List<CabinetPoliceDto> GetListByOrgAsync(PolicemanReq req);
//通过条件查询警员列表(page)
PageResult<PolicemanDto> GetAllPolicemanPage(PolicemanReq req);
......
......@@ -24,6 +24,12 @@ public class RabbitMQSendMsg {
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(name).noargs());
String jsonString = JSON.toJSONString(msg);
// // 创建 MessageProperties 对象,并设置 TTL
// MessageProperties messageProperties = new MessageProperties();
// messageProperties.setExpiration(String.valueOf(ttlMillis));
//
// // 发送带有 TTL 的消息
// rabbitTemplate.send(exchangeName, name, new Message(jsonString.getBytes(), messageProperties));
rabbitTemplate.convertAndSend(exchangeName, name, jsonString);
}
......
package com.junmp.jyzb.websocket;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.junmp.jyzb.api.bean.req.wsReq.OnOpenReq;
import com.junmp.jyzb.cache.OnlineRedisCache;
import com.junmp.jyzb.cache.TemperatureRedisCache;
import com.junmp.jyzb.entity.Cabinet;
import com.junmp.jyzb.entity.Reassignment;
import com.junmp.jyzb.entity.Temp.OnlineState;
import com.junmp.jyzb.service.CabinetService;
import com.junmp.v2.ws.api.enums.ClientMsgType;
import com.junmp.v2.ws.api.enums.ServerMsgType;
import com.junmp.v2.ws.api.enums.SysMsgTypeEnum;
import com.junmp.v2.ws.api.message.WsCallbackApi;
import com.junmp.v2.ws.api.session.bean.WsSession;
import com.junmp.v2.ws.bean.WsMsgDto;
import com.junmp.v2.ws.channel.WsSessionContainer;
import com.junmp.v2.ws.message.WsMessageHandle;
import com.junmp.v2.ws.server.ScreenWebSocketServer;
import com.junmp.v2.ws.session.WsSessionHandle;
import io.jsonwebtoken.JwtException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.time.Instant;
//@Component
//@ServerEndpoint("/notice1/{data}")
//public class CustomScreenWebSocketServer extends ScreenWebSocketServer {
// @Override
//
// public void onOpen(Session session, @PathParam("data") String data) {
// String aa=data;
// // Your custom logic here
// super.onOpen(session, data); // Call the original method if needed
// }
//}
@Component
@ServerEndpoint("/notice1/{data}")
public class CustomScreenWebSocketServer {
private static final Logger log = LoggerFactory.getLogger(com.junmp.v2.ws.server.ScreenWebSocketServer.class);
@Resource
public CabinetService cabinetService;
@Resource
private OnlineRedisCache onlineRedisCache;
public CustomScreenWebSocketServer() {
}
@OnOpen
public void onOpen(Session session, @PathParam("data") String data) {
String userId = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
OnOpenReq onOpenObject = objectMapper.readValue(data, OnOpenReq.class);
String type = onOpenObject.getType();
String typeId = onOpenObject.getTypeId();
// 获取当前时间的时间戳
Instant now = Instant.now();
// 转换为long类型
long timestamp = now.toEpochMilli();
if (type.equals("cabinet"))//警柜已连接
{
Cabinet cabinet=cabinetService.getOne(new LambdaQueryWrapper<Cabinet>()
.eq(Cabinet::getCabinetNum, typeId));
cabinet.setOnlineState(1);
cabinet.setUpdateTime(DateTime.now());
// cabinetService.updateById(cabinet);
// //将数据放入redis
// onlineRedisCache.addSessionValue(session.getId(),type,typeId,timestamp);
} else if (type.equals("warehouse")) {//仓库主机已连接
}
} catch (JwtException | JsonProcessingException var15) {
log.error("建立连接异常>>" + var15.getMessage());
try {
session.close();
log.warn("因连接失败,会话自动关闭");
} catch (IOException var14) {
var14.printStackTrace();
log.error("会话关闭异常>>" + var14.getMessage());
}
}
WsSessionContainer wsContainer = new WsSessionContainer(session);
WsSession<WsSessionContainer> socketSession = new WsSession();
WsMsgDto replyMsg = new WsMsgDto();
boolean var13 = false;
try {
var13 = true;
replyMsg.setServerMsgType(ServerMsgType.REPLY_MSG_TYPE.getCode());
// replyMsg.setToUserId(userId);
replyMsg.setData(session.getId());
socketSession.setSessionId(session.getId());
socketSession.setUserId(userId);
socketSession.setWsApi(wsContainer);
socketSession.setToken(data);
// socketSession.setData();
socketSession.setConnectionTime(System.currentTimeMillis());
WsSessionHandle.addWsSession(socketSession);
var13 = false;
} finally {
if (var13) {
wsContainer.writeAndFlush(replyMsg);
WsCallbackApi wsCallbackApi = WsMessageHandle.getWsCallback(SysMsgTypeEnum.LISTENER_ON_OPEN.getCode());
if (ObjectUtil.isNotEmpty(wsCallbackApi)) {
wsCallbackApi.callback(SysMsgTypeEnum.LISTENER_ON_OPEN.getCode(), (Object)null, socketSession);
}
log.info("已建立连接");
}
}
wsContainer.writeAndFlush(replyMsg);
WsCallbackApi wsCallbackApi = WsMessageHandle.getWsCallback(SysMsgTypeEnum.LISTENER_ON_OPEN.getCode());
if (ObjectUtil.isNotEmpty(wsCallbackApi)) {
wsCallbackApi.callback(SysMsgTypeEnum.LISTENER_ON_OPEN.getCode(), (Object)null, socketSession);
}
log.info("已建立连接");
}
@OnMessage
public void onMessage(String message, Session channel) {
WsMsgDto wsMsgDto = (WsMsgDto) JSON.parseObject(message, WsMsgDto.class);
WsSession<WsSessionContainer> wsSession = WsSessionHandle.getSessionBySessionId(channel.getId());
if (ObjectUtil.isNotEmpty(wsSession) && ClientMsgType.USER_HEART.getCode().equals(wsMsgDto.getClientMsgType())) {
log.info(StrUtil.format("来自与客户端[{}]的心跳消息。", new Object[]{wsMsgDto.getFromUserId()}));
if (ObjectUtil.isNotEmpty(wsSession)) {
wsSession.setLastActiveTime(System.currentTimeMillis());
}
} else if (!ObjectUtil.isEmpty(wsMsgDto.getFromUserId())) {
if (ObjectUtil.isNotEmpty(wsSession)) {
wsSession.setLastActiveTime(System.currentTimeMillis());
WsCallbackApi callbackApi;
if (ClientMsgType.OPEN_AI_TYPE.getCode().equals(wsMsgDto.getClientMsgType())) {
log.info(StrUtil.format("来自与客户端[{}]调用OpenAi的消息。", new Object[]{wsMsgDto.getFromUserId()}));
callbackApi = (WsCallbackApi) SpringUtil.getBean(WsCallbackApi.class);
if (ObjectUtil.isNull(callbackApi)) {
log.warn("回调WsCallbackApi未注册.");
} else {
callbackApi.callback(wsMsgDto.getClientMsgType(), wsMsgDto.getData(), wsSession);
}
} else {
callbackApi = WsMessageHandle.getWsCallback(wsMsgDto.getClientMsgType());
if (ObjectUtil.isNotEmpty(callbackApi)) {
callbackApi.callback(wsMsgDto.getClientMsgType(), wsMsgDto, wsSession);
} else {
log.warn("未知的消息类型");
channel.getAsyncRemote().sendText("{\"serverMsgType\":\"未知的消息类型\"}");
}
}
}
}
}
@OnClose
public void onClose(Session session) {
try {
WsSession<WsSessionContainer> wsSession = WsSessionHandle.getSessionBySessionId(session.getId());
WsCallbackApi wsCallbackApi = WsMessageHandle.getWsCallback(SysMsgTypeEnum.LISTENER_ON_CLOSE.getCode());
if (ObjectUtil.isNotEmpty(wsSession) && ObjectUtil.isNotEmpty(wsCallbackApi)) {
OnlineState os=onlineRedisCache.getDataValue(wsSession.getSessionId());
String type= os.getType();
String typeId=os.getTypeId();
if (type.equals("cabinet"))//警柜断开连接
{
Cabinet cabinet=cabinetService.getOne(new LambdaQueryWrapper<Cabinet>()
.eq(Cabinet::getCabinetNum, typeId));
cabinet.setOnlineState(0);
cabinet.setUpdateTime(DateTime.now());
cabinetService.updateById(cabinet);
onlineRedisCache.remove(wsSession.getSessionId());
} else if (type.equals("warehouse")) {//仓库主机已连接
}
wsCallbackApi.callback(SysMsgTypeEnum.LISTENER_ON_CLOSE.getCode(), (Object)null, wsSession);
}
} finally {
WsSessionHandle.delById(session.getId());
log.warn("会话已关闭");
}
}
@OnError
public void onError(Session session, Throwable error) {
WsSession<WsSessionContainer> wsSession = WsSessionHandle.getSessionBySessionId(session.getId());
WsCallbackApi wsCallbackApi = WsMessageHandle.getWsCallback(SysMsgTypeEnum.LISTENER_ON_ERROR.getCode());
if (ObjectUtil.isNotEmpty(wsCallbackApi)) {
wsCallbackApi.callback(SysMsgTypeEnum.LISTENER_ON_ERROR.getCode(), (Object)null, wsSession);
}
}
}
......@@ -43,6 +43,7 @@ public class ActivitiConfig {
config.setDataSource(dataSource);
config.setTransactionManager(transactionManager);
config.setDisableIdmEngine(true);
config.setAsyncExecutorNumberOfRetries(0);
config.setDatabaseType(ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL);
config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE);
config.setDelegateExpressionFieldInjectionMode(DelegateExpressionFieldInjectionMode.MIXED);
......
......@@ -290,6 +290,22 @@
<version>${junmp.v2.version}</version>
</dependency>
<!--ws模块-->
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>ws-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>ws-sdk</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>ws-boot-starter</artifactId>
<version>${project.version}</version>
</dependency>
<!--消息推送-->
<dependency>
<groupId>com.junmp.v2</groupId>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论