diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/DownCmdParam.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/DownCmdParam.java new file mode 100644 index 00000000..5acfb626 --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/DownCmdParam.java @@ -0,0 +1,30 @@ +package com.cloud.kicc.commonbiz.api.dto; + + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: Mak + * @Description: 下行指令返回值 + * @Date: 2021/9/23 + * @Modified by: + */ +@Data +public class DownCmdParam implements Serializable { + + // 当前指令操作序号 + private String ts; + + // 下行指令 + private Integer cmd; + + // 指令执行的结果状态(0.成功 1.失败) + private Integer status; + + // 指纹ID / 指纹IDs,多个指纹以英文逗号隔开 + private String data; + + +} diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/RfidsParam.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/RfidsParam.java new file mode 100644 index 00000000..21929661 --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/RfidsParam.java @@ -0,0 +1,23 @@ +package com.cloud.kicc.commonbiz.api.dto; + + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: Mak + * @Description: 变动rfids参数 + * @Date: 2021/9/23 + * @Modified by: + */ +@Data +public class RfidsParam implements Serializable { + + // 上报的RFID标签 + private String rfid; + + // 变动类型(1.进 2.出) + private Integer type; + +} diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/UpCmdParam.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/UpCmdParam.java new file mode 100644 index 00000000..7da3769c --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/dto/UpCmdParam.java @@ -0,0 +1,75 @@ +package com.cloud.kicc.commonbiz.api.dto; + + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: Mak + * @Description: 上行指令参数 + * @Date: 2021/9/23 + * @Modified by: + */ +@Data +public class UpCmdParam implements Serializable { + + // 设备编号 + private String code; + // 上行指令代码 + private Integer cmd; + + // 4G卡唯一标识号iccid + private String iccid; + + // 指纹ID + private String fid; + + // 元件异常类型(1.指纹锁 2.制冷片 3.温湿度 4.4G通讯 5.倾斜度 6.语音) + private Integer wrong; + + // 上报的RFID标签,多个以英文逗号隔开 + private String rfids; + + /** + * 以下为心跳上报数据 + */ + /*//设备温度 + private String temp; + //设备湿度 + private String damp; + //经度 + private String lng; + //纬度 + private String lat; + //剩余电量 + private String power; + //倾斜角度(x轴) + private String tiltX; + //倾斜角度(y轴) + private String tiltY; + //震动能量值(值越大倾斜越大) + private String energy;*/ + + //设备温度 + private String tp; + //设备湿度 + private String dp; + //经度 + private String lg; + //纬度 + private String lt; + //剩余电量 + private String pw; + //倾斜角度(x轴) + private String tx; + //倾斜角度(y轴) + private String ty; + //震动能量值(值越大倾斜越大) + private String eg; + //锁状态 (0.关 1.开) + private Integer os; + //制冷状态(0.未制冷 1.已制冷) + private Integer cs; + +} diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/DownCmdVo.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/DownCmdVo.java new file mode 100644 index 00000000..80a88c4f --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/DownCmdVo.java @@ -0,0 +1,33 @@ +package com.cloud.kicc.commonbiz.api.vo; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DownCmdVo implements Serializable { + + // 时间戳 - 用于下行指令的唯一标识 + private String ts; + + // 下行指令代码 + private Integer cmd; + + // 指纹id + //private String fid; + + // 指纹id/语音播报内容 + private String data; + + //温度最低警报值 + private Double tempMin; + //温度最高警报值 + private Double tempMax; + //rfid每隔多少分钟上报一次所有标签 + private Integer rfidMin; + //每隔多少秒上报一次数据 + private Integer beat; + //设备状态 (1.已连接 2.已断开 3.已休眠) + +} diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/EquipBoxCardVo.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/EquipBoxCardVo.java new file mode 100644 index 00000000..c442ba0b --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/EquipBoxCardVo.java @@ -0,0 +1,23 @@ +package com.cloud.kicc.commonbiz.api.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 物联网卡管理(EquipBoxCard)表实体类 + * + * @author Mak + * @since 2022-02-13 12:06:29 + */ +@Data +public class EquipBoxCardVo implements Serializable { + + private Integer cardId; + + private String iccid; + + private String card; + + +} diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/EquipBoxConfigVo.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/EquipBoxConfigVo.java new file mode 100644 index 00000000..6e19fe3b --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/vo/EquipBoxConfigVo.java @@ -0,0 +1,25 @@ +package com.cloud.kicc.commonbiz.api.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 标本箱设备信息(EquipBox)表实体类 + * + * @author Mak + * @since 2021-09-14 19:07:07 + */ +@Data +public class EquipBoxConfigVo implements Serializable { + + //温度最低警报值 + private Double tempMin; + //温度最高警报值 + private Double tempMax; + //rfid每隔多少分钟上报一次所有标签 + private Integer rfidMin; + //每隔多少秒上报一次数据 + private Integer beat; + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/BoxDownCmdServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/BoxDownCmdServiceImpl.java new file mode 100644 index 00000000..54315bcd --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/BoxDownCmdServiceImpl.java @@ -0,0 +1,223 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cloud.kicc.commonbiz.service.*; +import com.cloud.kicc.commonbiz.api.constant.EquipConstants; +import com.cloud.kicc.commonbiz.api.dto.DownCmdParam; +import com.cloud.kicc.commonbiz.api.entity.EquipBox; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxRecord; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxUser; +import com.cloud.kicc.commonbiz.api.enums.CmdEnum; +import com.cloud.kicc.commonbiz.api.enums.CmdStatusEnum; +import com.cloud.kicc.commonbiz.api.vo.DownCmdVo; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + + +/** + * 标本箱下行指令服务实现类 + * + * @author Mak + * @since 2021-09-14 19:07:07 + */ + +@Service +@Slf4j +@AllArgsConstructor + +public class BoxDownCmdServiceImpl implements BoxDownCmdService { + + private final EquipBoxService equipBoxService; + + private final EquipBoxUserService equipBoxUserService; + + private final EquipBoxRecordService equipBoxRecordService; + + private final DownCmdService downCmdService; + +/* public BoxDownCmdServiceImpl(DownCmdService downCmdService,EquipBoxRecordService equipBoxRecordService, + EquipBoxUserService equipBoxUserService,EquipBoxService equipBoxService){ + + this.downCmdService = downCmdService; + this.equipBoxRecordService=equipBoxRecordService; + this.equipBoxUserService=equipBoxUserService; + this.equipBoxService=equipBoxService; + }*/ + + + @Override + public boolean sendVoiceToEquipBox(String boxId, String data) { + EquipBox equipBox = equipBoxService.getById(boxId); + // 发送语音消息给标本箱 + DownCmdVo vo = new DownCmdVo(); + vo.setCmd(CmdEnum.VOICE_D.getCode()); + vo.setData(data); + String rtn = downCmdService.downCmdToBox(equipBox.getBoxCode(), vo); + if (rtn != null){ + // 记录操作日志 + vo.setTs(rtn); + equipBoxRecordService.addData(equipBox.getBoxId(),vo,null); + } + return rtn != null; + //return false; + } + + @Override + public boolean changeEquipUser(String boxUserId, Integer cmd) { + EquipBoxUser boxUser = equipBoxUserService.getById(boxUserId); + + EquipBox equipBox = equipBoxService.getById(boxUser.getBoxId()); + + // 新增/删除指纹 + DownCmdVo vo = new DownCmdVo(); + vo.setCmd(cmd); + if (cmd == CmdEnum.DEL_FID_D.getCode() || cmd == CmdEnum.DISABLE_FID_D.getCode() + || cmd == CmdEnum.ENABLE_FID_D.getCode()){ + vo.setData(boxUser.getFid()); + } + String rtn = downCmdService.downCmdToBox(equipBox.getBoxCode(), vo); + if (rtn != null){ + // 记录操作日志 + vo.setTs(rtn); + equipBoxRecordService.addData(equipBox.getBoxId(),vo,boxUserId); + } + return rtn != null; + //return false; + } + + @Override + public boolean downCmdToEquipBox(String boxId, Integer cmd, String data) { + EquipBox equipBox = equipBoxService.getById(boxId); + + // 下发参数 + DownCmdVo vo = new DownCmdVo(); + vo.setCmd(cmd); + + // 不同指令的参数解析 + if (cmd == CmdEnum.RESET_D.getCode()){ + // 重置标本箱配置信息 + vo.setTempMax(equipBox.getTempMax()); + vo.setTempMin(equipBox.getTempMin()); + vo.setRfidMin(equipBox.getRfidMin()); + vo.setBeat(equipBox.getBeat()); + }else if(cmd == CmdEnum.VOICE_D.getCode() || cmd == CmdEnum.DEL_FID_D.getCode() + || cmd == CmdEnum.DISABLE_FID_D.getCode() || cmd == CmdEnum.ENABLE_FID_D.getCode()){ + vo.setData(data); + } + + String rtn = downCmdService.downCmdToBox(equipBox.getBoxCode(), vo); + if (rtn != null){ + // 记录操作日志 + vo.setTs(rtn); + equipBoxRecordService.addData(equipBox.getBoxId(),vo,null); + } + return rtn != null; + //return false; + } + + + + @Override + public boolean handleDownCmdResult(DownCmdParam downParam) { + // 查询当前记录是否存在 - 状态为正常且指令状态不等于成功的记录 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipBoxRecord::getTimestamp,downParam.getTs()) + .eq(EquipBoxRecord::getCmd,downParam.getCmd()) + .ne(EquipBoxRecord::getCmdStatus, CmdStatusEnum.SUCCESS.getCode()); + EquipBoxRecord boxRecord = equipBoxRecordService.getOne(wrapper); + if (boxRecord == null){ + return false; + } + + // 修改指令记录执行成功与否 + EquipBoxRecord updateRecord = new EquipBoxRecord(); + updateRecord.setId(boxRecord.getId()); + + // 判断客户端返回的指令执行状态是否成功 + if (downParam.getStatus() == 1){ + // 执行失败 + updateRecord.setCmdStatus(CmdStatusEnum.FAIL.getCode()); + return equipBoxRecordService.updateById(updateRecord); + } + + // 修改标本箱状态 + EquipBox updateBox = null; + + boolean rtn = true; + Integer cmd = downParam.getCmd(); + if (cmd == CmdEnum.ADD_FID_D.getCode()){ + // 新增指纹 + EquipBoxUser updateUser = new EquipBoxUser(); + updateUser.setId(boxRecord.getRelationId()); + updateUser.setFid(downParam.getData()); + rtn = equipBoxUserService.updateById(updateUser); + + }else if (cmd == CmdEnum.DEL_FID_D.getCode()){ + // 删除指纹 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(EquipBoxUser::getFid,null).eq(EquipBoxUser::getId,boxRecord.getRelationId()); + rtn = equipBoxUserService.update(updateWrapper); + }else if (cmd == CmdEnum.ALL_FID_D.getCode()){ + // 获取所有指纹 + log.info("获取所有指纹,返回值"+downParam.getData()); + + }else if (cmd == CmdEnum.DEL_ALL_FID_D.getCode()){ + // 删除所有指纹 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(EquipBoxUser::getFid,null).eq(EquipBoxUser::getBoxId,boxRecord.getBoxId()); + rtn = equipBoxUserService.update(updateWrapper); + }else if (cmd == CmdEnum.DISABLE_FID_D.getCode()){ + // 禁用指纹 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(EquipBoxUser::getStatus, EquipConstants.NO_CODE).eq(EquipBoxUser::getId,boxRecord.getRelationId()); + rtn = equipBoxUserService.update(updateWrapper); + }else if (cmd == CmdEnum.ENABLE_FID_D.getCode()){ + // 启用指纹 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(EquipBoxUser::getStatus, EquipConstants.YES_CODE).eq(EquipBoxUser::getId,boxRecord.getRelationId()); + rtn = equipBoxUserService.update(updateWrapper); + }else if (cmd == CmdEnum.OPEN_DATA_D.getCode()){ + // 开启数据上报 + updateBox = new EquipBox(); + updateBox.setBoxStatus(1); + + }else if (cmd == CmdEnum.CLOSE_DATA_D.getCode()){ + // 关闭数据上报 + updateBox = new EquipBox(); + updateBox.setBoxStatus(3); + + }else if (cmd == CmdEnum.OPEN_COLD_D.getCode()){ + // 开启制冷 + updateBox = new EquipBox(); + updateBox.setColdStatus(1); + + }else if (cmd == CmdEnum.CLOSE_COLD_D.getCode()){ + // 关闭制冷 + updateBox = new EquipBox(); + updateBox.setColdStatus(0); + + }else if (cmd == CmdEnum.OPEN_D.getCode()){ + // 开锁 + updateBox = new EquipBox(); + updateBox.setOpenStatus(1); + + }else { + } + + // 修改标本箱各种状态 + if (updateBox != null){ + updateBox.setBoxId(boxRecord.getBoxId()); + rtn = equipBoxService.updateById(updateBox); + } + + // 修改指令记录执行成功与否 + updateRecord.setCmdStatus(rtn?1:2); + return equipBoxRecordService.updateById(updateRecord); + } + + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/BoxUpCmdServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/BoxUpCmdServiceImpl.java new file mode 100644 index 00000000..037db4e4 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/BoxUpCmdServiceImpl.java @@ -0,0 +1,164 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.cloud.kicc.common.core.constant.CommonConstants; +import com.cloud.kicc.commonbiz.config.KiccProperties; +import com.cloud.kicc.commonbiz.service.BoxUpCmdService; +import com.cloud.kicc.commonbiz.service.EquipBoxLogService; +import com.cloud.kicc.commonbiz.service.EquipBoxRfidLogService; +import com.cloud.kicc.commonbiz.service.EquipBoxService; +import com.cloud.kicc.commonbiz.util.BaiduMapUtils; +import com.cloud.kicc.commonbiz.util.GpsGaoAndBaidu; +import com.cloud.kicc.commonbiz.util.Point; +import com.cloud.kicc.commonbiz.api.constant.EquipConstants; +import com.cloud.kicc.commonbiz.api.dto.UpCmdParam; +import com.cloud.kicc.commonbiz.api.entity.EquipBox; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxLog; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxRfidLog; +import com.cloud.kicc.commonbiz.api.enums.BoxStatusEnum; +import com.cloud.kicc.commonbiz.api.enums.CmdEnum; +import com.cloud.kicc.commonbiz.api.vo.EquipBoxConfigVo; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 标本箱上行指令服务实现类 + * + * @author Mak + * @since 2021-09-14 19:07:07 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class BoxUpCmdServiceImpl implements BoxUpCmdService { + + private final EquipBoxService equipBoxService; + + private final EquipBoxLogService equipBoxLogService; + + private final EquipBoxRfidLogService equipBoxRfidLogService; + + private final KiccProperties kiccProperties; + + @Override + public String beginTelnet(String iccid) { + EquipBox box = equipBoxService.getByIccid(iccid); + + // 修改箱子状态 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.lambda().set(EquipBox::getBoxStatus, BoxStatusEnum.TELNET.getCode()) + .set(EquipBox::getConnectTime,new Date()).eq(EquipBox::getBoxId,box.getBoxId()); + boolean rtn = equipBoxService.update(updateWrapper); + if (rtn){ + return box.getBoxCode(); + } + return null; + } + + @Override + public EquipBoxConfigVo getBoxConfig(String boxCode) throws Exception{ + EquipBox box = equipBoxService.getByCode(boxCode); + + return Convert.convert(EquipBoxConfigVo.class, box); + } + + @Override + public boolean beatBoxInfo(UpCmdParam param) throws Exception { + EquipBox equipBox = equipBoxService.getByCode(param.getCode()); + + // 更新主表信息 + EquipBox updateBox = new EquipBox(); + updateBox.setBoxId(equipBox.getBoxId()); + // 温度计算 - 临时处理 + if (StrUtil.isNotBlank(param.getTp())){ + // 他说如果拔了一根,那根默认就会是-60℃,现在拔了2根,说明系统默认是2个-60℃,原先的技算方式是三个加一起÷3, + // 也就是{-60+(-60)+实际温度}÷3=现在显示温度(现在显示是-32.73),倒推实际温度就是,21.83℃ + // 目前仅有第一版的温度有问题 + if(equipBox.getBoxId() == "1"){ + double ttp = NumberUtil.mul(Double.parseDouble(param.getTp()),3) + 120; + updateBox.setTemp(String.valueOf(NumberUtil.round(ttp,1))); + }else{ + updateBox.setTemp(String.valueOf(NumberUtil.round(Double.parseDouble(param.getTp()),1))); + } + } + updateBox.setDamp(param.getDp()); + // 详细地址 + if (StrUtil.isNotBlank(param.getLg()) && StrUtil.isNotBlank(param.getLt())){ + // 如果箱子定位一直未变,为避免重复调用百度api + if (StrUtil.isNotBlank(equipBox.getLng()) || StrUtil.isNotBlank(equipBox.getLat()) + || !equipBox.getLng().equals(param.getLg()) || !equipBox.getLat().equals(param.getLt())){ + updateBox.setLng(param.getLg()); + updateBox.setLat(param.getLt()); + try { + Point point = GpsGaoAndBaidu.gpsAddPrecision(param.getLg(), param.getLt()); + updateBox.setAddr(BaiduMapUtils.getAddress(String.valueOf(point.getLng()),String.valueOf(point.getLat()),kiccProperties.getMapAk())); + }catch (Exception e){ + log.error("标本箱心跳上报经纬度转详细地址失败:"+e.getMessage()); + } + } + } + updateBox.setPower(String.valueOf(NumberUtil.round(Double.parseDouble(param.getPw()),1))); + + // 计算倾斜度 + + updateBox.setOpenStatus(param.getOs()); + updateBox.setColdStatus(param.getCs()); + boolean ret = equipBoxService.updateById(updateBox); + if (ret){ + // 记录心跳日志 + EquipBoxLog boxLog = Convert.convert(EquipBoxLog.class, updateBox); + boxLog.setBoxId(equipBox.getBoxId()); + if(StrUtil.isNotBlank(updateBox.getLng()) || StrUtil.isNotBlank(updateBox.getLat()) + || StrUtil.isNotBlank(updateBox.getAddr())){ + boxLog.setLng(param.getLg()); + boxLog.setLat(param.getLt()); + boxLog.setAddr(equipBox.getAddr()); + } + boxLog.setTiltX(param.getTx()); + boxLog.setTiltY(param.getTy()); + boxLog.setEnergy(param.getEg()); + boxLog.setErrorStatus(equipBox.getErrorStatus()); + equipBoxLogService.save(boxLog); + } + return ret; + } + + @Override + public boolean updateBoxState(UpCmdParam param) { + EquipBox equipBox = equipBoxService.getByCode(param.getCode()); + + EquipBox updateBox = new EquipBox(); + updateBox.setBoxId(equipBox.getBoxId()); + + if (param.getCmd() == CmdEnum.OPEN_U.getCode()){ + //设置开关状态 + updateBox.setOpenStatus(EquipConstants.YES_CODE); + }else if (param.getCmd() == CmdEnum.CLOSE_U.getCode()){ + updateBox.setOpenStatus(EquipConstants.NO_CODE); + }else if (param.getCmd() == CmdEnum.ERROR_U.getCode()){ + updateBox.setErrorStatus(CommonConstants.FAIL); + } + + return equipBoxService.updateById(updateBox); + } + + @Override + public boolean addBoxRfidLog(UpCmdParam param, Integer rfidType) { + EquipBox equipBox = equipBoxService.getByCode(param.getCode()); + EquipBoxRfidLog data = new EquipBoxRfidLog(); + data.setBoxId(equipBox.getBoxId()); + data.setRfids(param.getRfids()); + data.setRfidType(rfidType); + return equipBoxRfidLogService.save(data); + } + + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/DownCmdServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/DownCmdServiceImpl.java new file mode 100644 index 00000000..6077fd24 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/DownCmdServiceImpl.java @@ -0,0 +1,44 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import com.cloud.kicc.commonbiz.service.DownCmdService; +import com.cloud.kicc.commonbiz.api.vo.DownCmdVo; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * 标本箱下行指令服务实现类 + * + * @author Mak + * @since 2021-09-14 19:07:07 + */ +@AllArgsConstructor +@Service +@Slf4j +public class DownCmdServiceImpl implements DownCmdService { + private final Logger logger = LoggerFactory.getLogger(ThreadLocal.class); + + @Override + public String downCmdToBox(String boxCode, DownCmdVo vo){ + String ts = null; + try { +// new Thread().sleep(100); +// ClientSocket socket = SocketPool.get(boxCode); +// if (socket != null){ +// ts = System.currentTimeMillis()+""; +// vo.setTs(ts); +// String msg = JSONObject.toJSONString(vo); +// SocketHandler.sendMessage(socket,msg); +// } + }catch (Exception e){ + e.printStackTrace(); + ts = null; + } + return ts; + } + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxCardServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxCardServiceImpl.java new file mode 100644 index 00000000..7567e149 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxCardServiceImpl.java @@ -0,0 +1,50 @@ +package com.cloud.kicc.commonbiz.service.impl; + + + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.mapper.EquipBoxCardMapper; +import com.cloud.kicc.commonbiz.service.EquipBoxCardService; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxCard; +import com.cloud.kicc.commonbiz.api.vo.EquipBoxCardVo; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 物联网卡管理(EquipBoxCard)表服务实现类 + * + * @author Mak + * @since 2022-02-13 12:06:30 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EquipBoxCardServiceImpl extends ServiceImpl implements EquipBoxCardService { + + + @Override + public List listCardForSelect(Integer isUsed) throws Exception{ + List list = this.lambdaQuery() + .eq(StrUtil.isNotBlank(isUsed.toString()),EquipBoxCard::getIsUsed, isUsed) + .list(); + + return list.stream().map(item -> { + return Convert.convert(EquipBoxCardVo.class, item); + }).collect(Collectors.toList()); + } + + + @Override + public EquipBoxCard getByIccid(String iccid) { + return this.lambdaQuery().eq(StrUtil.isNotBlank(iccid),EquipBoxCard::getIccid, iccid).one(); + } + + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxLogServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxLogServiceImpl.java new file mode 100644 index 00000000..fb43cd82 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxLogServiceImpl.java @@ -0,0 +1,38 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.mapper.EquipBoxLogMapper; +import com.cloud.kicc.commonbiz.service.EquipBoxLogService; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxLog; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 标本箱心跳日志记录(EquipBoxLog)表服务实现类 + * + * @author Mak + * @since 2021-09-17 10:25:07 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EquipBoxLogServiceImpl extends ServiceImpl implements EquipBoxLogService { + + @Override + public List listBoxLogs(Integer boxId) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + + //todo: limit 100 ??? + wrapper.eq(EquipBoxLog::getBoxId,boxId) + .orderByDesc(EquipBoxLog::getBoxLogId).last("limit 100"); + return baseMapper.selectList(wrapper); + } + + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxRecordServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxRecordServiceImpl.java new file mode 100644 index 00000000..f89acc17 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxRecordServiceImpl.java @@ -0,0 +1,71 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.mapper.EquipBoxRecordMapper; +import com.cloud.kicc.commonbiz.service.EquipBoxRecordService; +import com.cloud.kicc.commonbiz.service.EquipBoxService; +import com.cloud.kicc.commonbiz.api.dto.UpCmdParam; +import com.cloud.kicc.commonbiz.api.entity.EquipBox; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxRecord; +import com.cloud.kicc.commonbiz.api.vo.DownCmdVo; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 标本箱操作记录(EquipBoxRecord)表服务实现类 + * + * @author Mak + * @since 2021-09-15 09:39:47 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EquipBoxRecordServiceImpl extends ServiceImpl implements EquipBoxRecordService { + + @Autowired + EquipBoxService equipBoxService; + + @Override + public boolean addData(UpCmdParam param, boolean rtn) { + EquipBox equipBox = equipBoxService.getByCode(param.getCode()); + EquipBoxRecord record = new EquipBoxRecord(); + record.setBoxId(equipBox.getBoxId()); + record.setCmd(param.getCmd()); + record.setFid(param.getFid()); + record.setErrorStatus(param.getWrong()); + record.setDataJson(JSONObject.toJSONString(param)); + record.setCmdStatus(rtn?1:2); + record.setTimestamp(System.currentTimeMillis()+""); + return this.save(record); + } + + @Override + public boolean addData(String boxId, DownCmdVo vo, String relationId) { + EquipBoxRecord record = new EquipBoxRecord(); + record.setBoxId(boxId); + record.setCmd(vo.getCmd()); + record.setTimestamp(vo.getTs()); + record.setRelationId(relationId); + record.setDataJson(JSONObject.toJSONString(vo)); + return this.save(record); + } + + @Override + public List listBoxRecords(String boxId) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + //todo: limit 100 ??? + wrapper.eq(EquipBoxRecord::getBoxId,boxId) + .orderByDesc(EquipBoxRecord::getId).last("limit 100"); + return baseMapper.selectList(wrapper); + } + + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxRfidLogServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxRfidLogServiceImpl.java new file mode 100644 index 00000000..d6d9d120 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxRfidLogServiceImpl.java @@ -0,0 +1,24 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.mapper.EquipBoxRfidLogMapper; +import com.cloud.kicc.commonbiz.service.EquipBoxRfidLogService; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxRfidLog; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 标本箱RFIDj记录信息(EquipBoxRfidLog)表服务实现类 + * + * @author Mak + * @since 2021-09-25 15:10:34 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EquipBoxRfidLogServiceImpl extends ServiceImpl implements EquipBoxRfidLogService { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxServiceImpl.java new file mode 100644 index 00000000..d5bbf26b --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxServiceImpl.java @@ -0,0 +1,98 @@ +package com.cloud.kicc.commonbiz.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.mapper.EquipBoxMapper; +import com.cloud.kicc.commonbiz.service.EquipBoxCardService; +import com.cloud.kicc.commonbiz.service.EquipBoxService; +import com.cloud.kicc.commonbiz.api.constant.EquipConstants; +import com.cloud.kicc.commonbiz.api.entity.EquipBox; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxCard; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 标本箱设备信息(EquipBox)表服务实现类 + * + * @author Mak + * @since 2021-09-14 19:07:07 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EquipBoxServiceImpl extends ServiceImpl implements EquipBoxService { + + + @Autowired + EquipBoxCardService equipBoxCardService; + + @Override + public EquipBox getByCode(String boxCode) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipBox::getBoxCode, boxCode); + return baseMapper.selectOne(wrapper); + } + + @Override + public EquipBox getByIccid(String iccid) { + EquipBoxCard card = equipBoxCardService.getByIccid(iccid); + if (card == null){ + return null; + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipBox::getCardId, card.getId()); + return baseMapper.selectOne(wrapper); + } + + @Override + public EquipBox getData(String id) { + EquipBox box = baseMapper.selectData(id); + return box; + } + + @Override + public boolean addData(EquipBox param) { + // 自定义code - 标本箱已限制最长15位 + boolean rtn = this.save(param); + param.setBoxCode("B"+param.getBoxId()); + if (rtn){ + // 修改物联网卡状态 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper + .set(EquipBoxCard::getIsUsed, EquipConstants.YES_CODE) + .eq(EquipBoxCard::getId, param.getCardId()); + equipBoxCardService.update(updateWrapper); + } + return rtn; + } + + @Override + public boolean updateStatusByCode(String boxCode, Integer boxStatus, Integer openStatus, Integer coldStatus, Integer warnStatus, Integer errorStatus) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + + wrapper.set(StrUtil.isNotBlank(boxStatus.toString()),EquipBox::getBoxStatus,boxStatus) + .set(StrUtil.isNotBlank(openStatus.toString()),EquipBox::getOpenStatus,openStatus) + .set(StrUtil.isNotBlank(coldStatus.toString()),EquipBox::getColdStatus,coldStatus) + .set(StrUtil.isNotBlank(warnStatus.toString()),EquipBox::getWarnStatus,warnStatus) + .set(StrUtil.isNotBlank(errorStatus.toString()),EquipBox::getErrorStatus,errorStatus) + .eq(StrUtil.isNotBlank(boxCode),EquipBox::getBoxCode,boxCode); + + return this.update(wrapper); + } + + + @Override + public IPage pageData(Page page, EquipBox param) { + IPage rtn = baseMapper.pageQuery(page,param); + return rtn; + } + + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxUserServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxUserServiceImpl.java new file mode 100644 index 00000000..ab1f3006 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/EquipBoxUserServiceImpl.java @@ -0,0 +1,53 @@ +package com.cloud.kicc.commonbiz.service.impl; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.common.core.api.R; +import com.cloud.kicc.commonbiz.mapper.EquipBoxUserMapper; +import com.cloud.kicc.commonbiz.service.EquipBoxUserService; +import com.cloud.kicc.commonbiz.api.entity.EquipBoxUser; + +import com.cloud.kicc.system.api.entity.User; +import com.cloud.kicc.system.api.feign.RemoteUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 标本箱指纹用户信息(EquipBoxUser)表服务实现类 + * + * @author Mak + * @since 2021-09-15 09:40:50 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EquipBoxUserServiceImpl extends ServiceImpl implements EquipBoxUserService { + + + private final RemoteUserService remoteUserService; + + @Override + public boolean addData(EquipBoxUser param) { + if (StrUtil.isNotBlank(param.getUserId()) && StrUtil.isBlank(param.getUserName())){ + R byId = remoteUserService.getById(param.getUserId()); + if (byId.getCode() == 200) { + param.setUserName(byId.getData().getUserName()); + } + } + return this.save(param); + } + + @Override + public List listBoxUser(String boxId, String userName) { + EquipBoxUser param = new EquipBoxUser(); + param.setBoxId(boxId); + param.setUserName(userName); + return baseMapper.listQuery(param); + } + + +}