|
|
@ -8,16 +8,18 @@ import com.ccsens.beneficiation.bean.po.EquipmentTypeExample; |
|
|
|
import com.ccsens.beneficiation.bean.vo.ParameterVo; |
|
|
|
import com.ccsens.beneficiation.persist.dao.RecordDao; |
|
|
|
import com.ccsens.beneficiation.persist.mapper.EquipmentTypeMapper; |
|
|
|
import com.ccsens.beneficiation.util.Constant; |
|
|
|
import com.ccsens.util.CRCUtil; |
|
|
|
import com.ccsens.util.bean.message.common.InMessage; |
|
|
|
import com.ccsens.util.bean.message.common.MessageConstant; |
|
|
|
import com.ccsens.util.bean.message.common.MessageRule; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* @author 逗 |
|
|
@ -30,6 +32,8 @@ public class ParameterService implements IParameterService{ |
|
|
|
private RecordDao recordDao; |
|
|
|
@Resource |
|
|
|
private EquipmentTypeMapper equipmentTypeMapper; |
|
|
|
@Resource |
|
|
|
private IMessageService messageService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public ParameterVo.QueryParameter queryParameter(Object param) { |
|
|
@ -94,72 +98,137 @@ public class ParameterService implements IParameterService{ |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateParameter(ParameterDto.ParameterInfo param) { |
|
|
|
public void updateParameter(ParameterDto.ParameterInfo param) throws Exception { |
|
|
|
if(ObjectUtil.isNull(param)){ |
|
|
|
return; |
|
|
|
} |
|
|
|
byte[] header = new byte[]{(byte)0xff,(byte)0xfe,(byte)0x00}; |
|
|
|
|
|
|
|
//电磁阀1
|
|
|
|
ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); |
|
|
|
if(ObjectUtil.isNotNull(solenoidValue1)){ |
|
|
|
if(ObjectUtil.isNotNull(solenoidValue1.getSettingValue())){ |
|
|
|
//根据id和数据类型 查找该设备的addr 设置值是1
|
|
|
|
EquipmentTypeExample equipmentTypeExample = new EquipmentTypeExample(); |
|
|
|
equipmentTypeExample.createCriteria().andEquipmentIdEqualTo(solenoidValue1.getId()).andTypeEqualTo((byte) 1); |
|
|
|
List<EquipmentType> equipmentTypes = equipmentTypeMapper.selectByExample(equipmentTypeExample); |
|
|
|
if(CollectionUtil.isNotEmpty(equipmentTypes)){ |
|
|
|
EquipmentType equipmentType = equipmentTypes.get(0); |
|
|
|
//计算value的高低值
|
|
|
|
byte uc1 = (byte) (solenoidValue1.getSettingValue().intValue() >> 8); |
|
|
|
byte uc2 = (byte) (solenoidValue1.getSettingValue().intValue() & 0xff); |
|
|
|
//计算addr的高低值
|
|
|
|
byte addr1 = (byte) (equipmentType.getAddr() >> 8); |
|
|
|
byte addr2 = (byte) (equipmentType.getAddr() & 0xff); |
|
|
|
//TODO 长度未处理 传感器地址未处理
|
|
|
|
byte[] center = new byte[]{(byte)0x00,(byte)0x06,addr1,addr2,uc1,uc2}; |
|
|
|
byte[] crc = new byte[2]; |
|
|
|
CRCUtil.crc16(crc,center,0,center.length); |
|
|
|
|
|
|
|
byte[] all = new byte[header.length + center.length + crc.length]; |
|
|
|
System.arraycopy(header,0,all,0,header.length); |
|
|
|
System.arraycopy(center,0,all,header.length,center.length); |
|
|
|
System.arraycopy(crc,0,all,header.length + center.length,crc.length); |
|
|
|
|
|
|
|
all[2] = (byte) (all.length - 3); |
|
|
|
transducer(solenoidValue1); |
|
|
|
//电磁阀2
|
|
|
|
ParameterDto.Parameter solenoidValue2 = param.getSolenoidValue2(); |
|
|
|
transducer(solenoidValue2); |
|
|
|
//变频器1
|
|
|
|
ParameterDto.Parameter transducer1 = param.getTransducer1(); |
|
|
|
transducer(transducer1); |
|
|
|
//变频器2
|
|
|
|
ParameterDto.Parameter transducer2 = param.getTransducer1(); |
|
|
|
transducer(transducer2); |
|
|
|
//变频器3
|
|
|
|
ParameterDto.Parameter transducer3 = param.getTransducer1(); |
|
|
|
transducer(transducer3); |
|
|
|
//变频器4
|
|
|
|
ParameterDto.Parameter transducer4 = param.getTransducer1(); |
|
|
|
transducer(transducer4); |
|
|
|
|
|
|
|
//电耳1
|
|
|
|
ParameterDto.ParameterThreshold electricEar1 = param.getElectricEar1(); |
|
|
|
electric(electricEar1); |
|
|
|
//电耳2
|
|
|
|
ParameterDto.ParameterThreshold electricEar2 = param.getElectricEar2(); |
|
|
|
electric(electricEar2); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void transducer(ParameterDto.Parameter transducer3) throws Exception { |
|
|
|
if (ObjectUtil.isNotNull(transducer3)) { |
|
|
|
if (ObjectUtil.isNotNull(transducer3.getSettingValue())) { |
|
|
|
getBytes(transducer3.getId(), transducer3.getSettingValue().intValue(), Constant.Type.SET_VALUE); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void electric(ParameterDto.ParameterThreshold electricEar) throws Exception { |
|
|
|
if (ObjectUtil.isNotNull(electricEar)) { |
|
|
|
//最低值
|
|
|
|
if (ObjectUtil.isNotNull(electricEar.getThresholdValue1())) { |
|
|
|
ParameterDto.Threshold threshold = electricEar.getThresholdValue1(); |
|
|
|
//低
|
|
|
|
if (ObjectUtil.isNotNull(threshold.getMinValue())) { |
|
|
|
getBytes(electricEar.getId(), threshold.getMinValue().intValue(), Constant.Type.MINIMUM_VALUE_MIN); |
|
|
|
} |
|
|
|
//高
|
|
|
|
if (ObjectUtil.isNotNull(threshold.getMaxValue())) { |
|
|
|
getBytes(electricEar.getId(), threshold.getMaxValue().intValue(), Constant.Type.MINIMUM_VALUE_MAX); |
|
|
|
} |
|
|
|
} |
|
|
|
//理想值
|
|
|
|
if (ObjectUtil.isNotNull(electricEar.getThresholdValue2())) { |
|
|
|
ParameterDto.Threshold threshold = electricEar.getThresholdValue2(); |
|
|
|
//低
|
|
|
|
if (ObjectUtil.isNotNull(threshold.getMinValue())) { |
|
|
|
getBytes(electricEar.getId(), threshold.getMinValue().intValue(), Constant.Type.MINIMUM_VALUE_MIN); |
|
|
|
} |
|
|
|
//高
|
|
|
|
if (ObjectUtil.isNotNull(threshold.getMaxValue())) { |
|
|
|
getBytes(electricEar.getId(), threshold.getMaxValue().intValue(), Constant.Type.MINIMUM_VALUE_MAX); |
|
|
|
} |
|
|
|
} |
|
|
|
//最高值
|
|
|
|
if (ObjectUtil.isNotNull(electricEar.getThresholdValue3())) { |
|
|
|
ParameterDto.Threshold threshold = electricEar.getThresholdValue3(); |
|
|
|
//低
|
|
|
|
if (ObjectUtil.isNotNull(threshold.getMinValue())) { |
|
|
|
getBytes(electricEar.getId(), threshold.getMinValue().intValue(), Constant.Type.MINIMUM_VALUE_MIN); |
|
|
|
} |
|
|
|
//高
|
|
|
|
if (ObjectUtil.isNotNull(threshold.getMaxValue())) { |
|
|
|
getBytes(electricEar.getId(), threshold.getMaxValue().intValue(), Constant.Type.MINIMUM_VALUE_MAX); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// //电磁阀1
|
|
|
|
// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1();
|
|
|
|
// if(ObjectUtil.isNotNull(solenoidValue1)){
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// //电磁阀1
|
|
|
|
// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1();
|
|
|
|
// if(ObjectUtil.isNotNull(solenoidValue1)){
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// //电磁阀1
|
|
|
|
// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1();
|
|
|
|
// if(ObjectUtil.isNotNull(solenoidValue1)){
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// //电磁阀1
|
|
|
|
// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1();
|
|
|
|
// if(ObjectUtil.isNotNull(solenoidValue1)){
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// //电磁阀1
|
|
|
|
// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1();
|
|
|
|
// if(ObjectUtil.isNotNull(solenoidValue1)){
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//生成数组
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取设置值的byte数组 并发送消息 |
|
|
|
*/ |
|
|
|
private void getBytes(Long id, int value,byte type) throws Exception { |
|
|
|
//根据id和数据类型 查找该设备的addr 设置值是1
|
|
|
|
EquipmentTypeExample equipmentTypeExample = new EquipmentTypeExample(); |
|
|
|
equipmentTypeExample.createCriteria().andEquipmentIdEqualTo(id).andTypeEqualTo(type); |
|
|
|
List<EquipmentType> equipmentTypes = equipmentTypeMapper.selectByExample(equipmentTypeExample); |
|
|
|
if(CollectionUtil.isNotEmpty(equipmentTypes)){ |
|
|
|
EquipmentType equipmentType = equipmentTypes.get(0); |
|
|
|
log.info("查找设备配置信息:{}",equipmentType); |
|
|
|
|
|
|
|
byte[] header = new byte[]{(byte)0xff,(byte)0xfe,(byte)0x00}; |
|
|
|
|
|
|
|
byte uc1 = (byte) (value >> 8); |
|
|
|
byte uc2 = (byte) (value & 0xff); |
|
|
|
log.info("计算value的高低值:{}---{}",uc1,uc2); |
|
|
|
|
|
|
|
byte addr1 = (byte) (equipmentType.getAddr() >> 8); |
|
|
|
byte addr2 = (byte) (equipmentType.getAddr() & 0xff); |
|
|
|
log.info("计算addr的高低值:{}---{}",addr1,addr2); |
|
|
|
|
|
|
|
byte[] center = new byte[]{(byte)0x10,(byte)0x06,addr1,addr2,uc1,uc2}; |
|
|
|
byte[] crc = new byte[2]; |
|
|
|
CRCUtil.crc16(crc,center,0,center.length); |
|
|
|
log.info("计算crc校验:{}---{}",crc[0],crc[1]); |
|
|
|
|
|
|
|
byte[] all = new byte[header.length + center.length + crc.length]; |
|
|
|
System.arraycopy(header,0,all,0,header.length); |
|
|
|
System.arraycopy(center,0,all,header.length,center.length); |
|
|
|
System.arraycopy(crc,0,all,header.length + center.length,crc.length); |
|
|
|
|
|
|
|
all[2] = (byte) (all.length - 3); |
|
|
|
sendInMessage(all); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 生成InMessage消息并发送 |
|
|
|
*/ |
|
|
|
private void sendInMessage(byte[] all) throws Exception { |
|
|
|
Set<String> userIdSet = new HashSet<>(); |
|
|
|
userIdSet.add(String.valueOf(2)); |
|
|
|
MessageRule messageRule = MessageRule.defaultRule(MessageConstant.DomainType.User); |
|
|
|
messageRule.setAckRule(MessageRule.AckRule.NONE); |
|
|
|
messageRule.setOfflineDiscard((byte) 1); |
|
|
|
String s = Arrays.toString(all); |
|
|
|
InMessage inMessage = InMessage.newToUserMessage(null,userIdSet,null,messageRule,s); |
|
|
|
//发送消息
|
|
|
|
messageService.sendToCarRecord(inMessage); |
|
|
|
} |
|
|
|
} |
|
|
|