package com.zy.bms.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zy.bms.common.ServerResponse; import com.zy.bms.common.enums.ResponseCode; import com.zy.bms.entity.DeviceBase; import com.zy.bms.entity.User; import com.zy.bms.entity.UserPrivilege; import com.zy.bms.entity.lp.LpInfoState; import com.zy.bms.pojo.io.LpInfoRecordIO; import com.zy.bms.service.*; import com.zy.bms.service.lp.ILpInfoRecordService; import com.zy.bms.service.lp.ILpInfoStateService; import com.zy.bms.utils.AesUtil; import com.zy.bms.utils.RabbitMQApi; import com.zy.bms.utils.RandomCode; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; /** * 普适型,路牌 微信小程序接口 * * @author yang xiao kun * create on 2021/8/24 */ @RestController @RequestMapping("/bms/api/wx_app") public class UbiLpWxController extends BaseController { @Resource private IUserService userService; @Resource private IUserPrivilegeService userPrivilegeService; @Resource private IGroupService groupService; @Resource private IDeviceBaseService deviceBaseService; @Resource private IPostMqttMsgService postMqttMsgService; @Resource private ILpInfoStateService lpInfoStateService; @Resource private ILpInfoRecordService lpInfoRecordService; /** * 微信登录 * * @return 用户 加密userId */ @PostMapping("login.do") public ServerResponse login(String code) { String openId = userService.getWxAppId(code); if (openId == null) return ServerResponse.error(); User user = userService.getOne(new QueryWrapper().eq("open_id", openId)); //保存新用户 if (user == null) { user = new User(); user.setOpenId(openId); user.setRandomCode(RandomCode.UUID_8()); userService.save(user); } Map res = new HashMap<>(); res.put("userId", AesUtil.encrypt(user.getId().toString())); res.put("uuid", user.getRandomCode()); res.put("admin", user.getAdmin().toString()); return ServerResponse.success(res); } /** * 查看当前在线设备 rabbitMQ */ @GetMapping("connections.do") public ServerResponse connections() { User user = userService.getOne(new QueryWrapper().eq("user_id", userId())); if (user == null || user.getAdmin() != 1) { return ServerResponse.custom(ResponseCode.AUTHOR); } return ServerResponse.success(RabbitMQApi.connections()); } /** * 查看当前注册的用户 rabbitMQ */ @GetMapping("users.do") public ServerResponse users() { User user = userService.getOne(new QueryWrapper().eq("user_id", userId())); if (user == null || user.getAdmin() != 1) { return ServerResponse.custom(ResponseCode.AUTHOR); } return ServerResponse.success(RabbitMQApi.users()); } /** * 查看用户拥有权限的设备组列表 */ @GetMapping("getGroups.do") public ServerResponse getGroupsByUserId() { return ServerResponse.success(groupService.getByUserId(userId())); } /** * 校验设备码是否存在 */ @GetMapping("checkOpenNum.do") public ServerResponse checkOpenNum(String openNum) { return ServerResponse.success(deviceBaseService.checkOpenNum(openNum)); } /** * 通过设备组ID查询设备列表 */ @GetMapping("getDevicesByGroupId.do") public ServerResponse getDevicesByGroupId(String groupId) { Set groupIds = new HashSet<>(userPrivilegeService.getGroupIdsByUserId(userId())); if (!groupIds.contains(groupId)) return ServerResponse.warning("无权限"); return ServerResponse.success(deviceBaseService.listByGroupIdWx(groupId)); } /** * 分组查询设备列表 */ @GetMapping("getDevicesByUserId.do") public ServerResponse getDevicesByUserId() { List groupIds = userPrivilegeService.getGroupIdsByUserId(userId()); if (groupIds.isEmpty()) return ServerResponse.success(null); return ServerResponse.success(deviceBaseService.listByGroupIdsWx(groupIds)); } /** * 扫码查询 */ @GetMapping("scan.do") public ServerResponse scan(String openNum) { DeviceBase device = deviceBaseService.getOne(new QueryWrapper().eq("open_num", openNum)); if (device == null) return ServerResponse.warning("设备码错误!"); //如果该用户没有该设备组权限,则加上权限 UserPrivilege userPrivilege = userPrivilegeService.getOne(new QueryWrapper() .eq("group_id", device.getGroupId()).eq("user_id", userId())); if (userPrivilege == null) { UserPrivilege entity = new UserPrivilege(); entity.setUserId(userId()); entity.setGroupId(device.getGroupId()); userPrivilegeService.save(entity); } return ServerResponse.success(device.getType()); } /** * 获取设备详情信息 */ @GetMapping("getDeviceDetail.do") public ServerResponse getDeviceDetail(String openNum) { return ServerResponse.success(deviceBaseService.getDetailWx(openNum)); } /** * 更新唤醒时间和阈值 */ @PostMapping("updateLp.do") public ServerResponse updateLp(LpInfoState entity) { return ServerResponse.success(lpInfoStateService.updateWakeAndThresh(entity)); } /** * 蜂鸣器 */ @GetMapping("buzzing.do") public ServerResponse buzzing(String openNum) { postMqttMsgService.requestBuzzingUbi(openNum); return ServerResponse.success(); } /** * 立即请求获取最新心跳包 */ @GetMapping("heartbeat.do") public ServerResponse heartbeat(String openNum) { postMqttMsgService.requestHeartbeatUbi(openNum); return ServerResponse.success(); } /** * 查询路牌设备历史记录 */ @GetMapping("getLpHistoryData.do") public ServerResponse getLpHistoryData(LpInfoRecordIO io) { return ServerResponse.success(lpInfoRecordService.getHistoryList(io)); } }