@ -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 ) ;
}
}