123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package com.ruoyi.sim.service.impl;
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.sim.constant.CommConst;
- import com.ruoyi.sim.domain.SimMsg;
- import com.ruoyi.sim.util.CRC16Modbus;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import static com.ruoyi.sim.constant.CommConst.*;
- /**
- * 万能询问报文
- * AA000103B100000000E0BE55
- */
- @Service
- public class CommBuildService {
- private static final Logger l = LoggerFactory.getLogger(CommBuildService.class);
- /**
- * CRC-16(Modbus)
- * <p>
- * https://www.23bei.com/tool/59.html
- */
- public static boolean CRC_16_MODBUS = true;
- @Autowired
- private SnowflakeIdService idService;
- /**
- * 读取设备序列号
- *
- * @param simNum sim.sim_num
- */
- public SimMsg buildSendMsgReadSimType(final String simNum) {
- return buildSendMsg(simNum, CMD_READ_TYPE, CMD_ID_GET_SN);
- }
- /**
- * 询问设备类型和序列号
- *
- * @return
- */
- public SimMsg buildSendMsgWhichSim() {
- return buildSendMsg(CommConst.BLANK_SIM_NUM, CMD_READ_TYPE, CMD_ID_GET_SN);
- }
- /**
- * 故障下发
- *
- * @param simNum sim.sim_num
- * @param bindHardwareMsg fault.bind_hardware_msg
- */
- public SimMsg buildSendMsgWriteFault(final String simNum, final String bindHardwareMsg) {
- return buildSendMsg(simNum, CommConst.CMD_SET_FAULT, bindHardwareMsg);
- }
- /**
- * 读取故障
- *
- * @param simNum sim.sim_num
- * @param bindHardwareMsg fault.bind_hardware_msg
- */
- public SimMsg buildSendMsgReadFaultResistance(final String simNum, final String bindHardwareMsg) {
- return buildSendMsg(simNum, CMD_READ_FAULT_RESISTANCE, bindHardwareMsg);
- }
- /**
- * 清除故障
- *
- * @param simNum sim.sim_num
- * @param bindHardwareMsg fault.bind_hardware_msg
- */
- public SimMsg buildSendMsgClearFault(final String simNum, final String bindHardwareMsg) {
- return buildSendMsg(simNum, CMD_CLEAR_FAULT, bindHardwareMsg);
- }
- /**
- * 填充内容为空。
- *
- * @param simNum
- * @param cmd
- * @param cmdId
- * @return
- */
- public SimMsg buildSendMsg(final String simNum, final String cmd, final String cmdId) {
- return buildSendMsg(simNum, ORN_SEND, cmd, cmdId, CommConst.CMD_DATA_PLACE_HOLDER);
- }
- /**
- * 生成发送指令基本方法。
- *
- * @param simNum
- * @param orn
- * @param cmd
- * @param cmdId
- * @param data
- * @return
- */
- public SimMsg buildSendMsg(final String simNum, final String orn, final String cmd, final String cmdId, final String data) {
- SimMsg smS = new SimMsg();
- smS.setSimMsgId(idService.nextId());
- if (StringUtils.isEmpty(simNum) || StringUtils.isEmpty(cmd) || StringUtils.isEmpty(cmdId) || StringUtils.isEmpty(data)) {
- throw new IllegalArgumentException("buildSendMsg error 01");
- }
- if (simNum.length() != LENGTH_2) {
- throw new IllegalArgumentException("buildSendMsg error 02");
- }
- if (cmd.length() != LENGTH_2) {
- throw new IllegalArgumentException("buildSendMsg error 03");
- }
- if (cmdId.length() != LENGTH_2) {
- throw new IllegalArgumentException("buildSendMsg error 04");
- }
- if (data.length() != LENGTH_8) {
- throw new IllegalArgumentException("buildSendMsg error 05");
- }
- StringBuffer m = new StringBuffer();
- m.append(PREFIX);
- m.append(simNum);
- m.append(orn);
- m.append(cmd);
- m.append(cmdId);
- m.append(data);
- // 追加CRC校验
- if (CRC_16_MODBUS) {
- String crcContent = m.toString();
- byte[] sendByteContent = CommSendService.hexStrToByteArrs(crcContent);
- // l.info("sendByteContent = {}", CommSendService.bytesToHexV2(sendByteContent));
- byte[] sendByteCrc = CRC16Modbus.calculateCRC(sendByteContent);
- // l.info("sendByteCrc = {}", CommSendService.bytesToHexV2(sendByteCrc));
- String crc = CommSendService.bytesToHexV2(sendByteCrc);
- // l.debug("crc: {}", crc.toUpperCase());
- m.append(crc.toUpperCase());
- }
- m.append(SUFFIX);
- final String mFinal = m.toString();
- if (mFinal.length() != LENGTH_24) {
- throw new IllegalArgumentException("buildSendMsg error 06");
- }
- smS.setSendMsg(mFinal);
- return smS;
- }
- public AjaxResult buildSendMsgAR(final String simNum, final String orn, final String cmd, final String cmdId, final String data) {
- final SimMsg sm = buildSendMsg(simNum, orn, cmd, cmdId, data);
- return AjaxResult.success(sm);
- }
- }
|