|
|
@ -3,17 +3,23 @@ package com.ccsens.beneficiation.service; |
|
|
|
import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.ccsens.beneficiation.bean.dto.ParameterDto; |
|
|
|
import com.ccsens.beneficiation.bean.po.EquipmentType; |
|
|
|
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 逗 |
|
|
@ -24,6 +30,10 @@ import java.util.List; |
|
|
|
public class ParameterService implements IParameterService{ |
|
|
|
@Resource |
|
|
|
private RecordDao recordDao; |
|
|
|
@Resource |
|
|
|
private EquipmentTypeMapper equipmentTypeMapper; |
|
|
|
@Resource |
|
|
|
private IMessageService messageService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public ParameterVo.QueryParameter queryParameter(Object param) { |
|
|
@ -84,83 +94,141 @@ public class ParameterService implements IParameterService{ |
|
|
|
} |
|
|
|
parameterInfo.setParameter(parameters); |
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// List<ParameterVo.TransducerValue> transducerValues = new ArrayList<>();
|
|
|
|
// ParameterVo.TransducerValue transducer1 = new ParameterVo.TransducerValue(6L,"transducer1","实时/设置1", BigDecimal.valueOf(45));
|
|
|
|
// ParameterVo.TransducerValue transducer2 = new ParameterVo.TransducerValue(7L,"transducer2","实时/设置2", BigDecimal.valueOf(8));
|
|
|
|
// ParameterVo.TransducerValue transducer3 = new ParameterVo.TransducerValue(8L,"transducer3","实时/设置3", BigDecimal.valueOf(67));
|
|
|
|
// ParameterVo.TransducerValue transducer4 = new ParameterVo.TransducerValue(10L,"transducer4","实时/设置4", BigDecimal.valueOf(75));
|
|
|
|
// transducerValues.add(transducer1);
|
|
|
|
// transducerValues.add(transducer2);
|
|
|
|
// transducerValues.add(transducer3);
|
|
|
|
// transducerValues.add(transducer4);
|
|
|
|
//
|
|
|
|
// List<ParameterVo.Transducer> transducers = new ArrayList<>();
|
|
|
|
// ParameterVo.Transducer transducer = new ParameterVo.Transducer();
|
|
|
|
// transducer.setTitle("变频器");
|
|
|
|
// transducer.setValues(transducerValues);
|
|
|
|
// transducers.add(transducer);
|
|
|
|
//
|
|
|
|
// List<ParameterVo.TransducerValue> transducerValues1 = new ArrayList<>();
|
|
|
|
// ParameterVo.TransducerValue transducer11 = new ParameterVo.TransducerValue(6L,"solenoidValue1","实时/设置1", BigDecimal.valueOf(45));
|
|
|
|
// ParameterVo.TransducerValue transducer21 = new ParameterVo.TransducerValue(7L,"solenoidValue2","实时/设置2", BigDecimal.valueOf(8));
|
|
|
|
// transducerValues1.add(transducer11);
|
|
|
|
// transducerValues1.add(transducer21);
|
|
|
|
//
|
|
|
|
// ParameterVo.Transducer transducer12 = new ParameterVo.Transducer();
|
|
|
|
// transducer12.setTitle("电磁阀");
|
|
|
|
// transducer12.setValues(transducerValues1);
|
|
|
|
// transducers.add(transducer12);
|
|
|
|
//
|
|
|
|
// parameterInfo.setTransducers(transducers);
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// List<ParameterVo.BeltWeigher> beltWeighers1 = new ArrayList<>();
|
|
|
|
// ParameterVo.BeltWeigher beltWeigher1 = new ParameterVo.BeltWeigher();
|
|
|
|
// beltWeigher1.setTitle("皮带秤");
|
|
|
|
// List<ParameterVo.BeltWeigherValue> beltWeigherValueList1 = new ArrayList<>();
|
|
|
|
// ParameterVo.BeltWeigherValue beltWeigher01 = new ParameterVo.BeltWeigherValue(1L,"实时/累计", BigDecimal.valueOf(12),BigDecimal.valueOf(1212));
|
|
|
|
// beltWeigherValueList1.add(beltWeigher01);
|
|
|
|
// beltWeigher1.setValues(beltWeigherValueList1);
|
|
|
|
// beltWeighers1.add(beltWeigher1);
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// ParameterVo.BeltWeigher beltWeigher2 = new ParameterVo.BeltWeigher();
|
|
|
|
// beltWeigher2.setTitle("流量计");
|
|
|
|
// List<ParameterVo.BeltWeigherValue> beltWeigherValueList2 = new ArrayList<>();
|
|
|
|
// ParameterVo.BeltWeigherValue beltWeigher02 = new ParameterVo.BeltWeigherValue(2L,"实时/累计", BigDecimal.valueOf(16),BigDecimal.valueOf(1524));
|
|
|
|
// ParameterVo.BeltWeigherValue beltWeigher03 = new ParameterVo.BeltWeigherValue(3L,"实时/累计", BigDecimal.valueOf(5),BigDecimal.valueOf(232));
|
|
|
|
// beltWeigherValueList2.add(beltWeigher02);
|
|
|
|
// beltWeigherValueList2.add(beltWeigher03);
|
|
|
|
// beltWeigher2.setValues(beltWeigherValueList2);
|
|
|
|
// beltWeighers1.add(beltWeigher2);
|
|
|
|
// parameterInfo.setBeltWeigher(beltWeighers1);
|
|
|
|
//
|
|
|
|
// List<ParameterVo.Parameter> parameters = new ArrayList<>();
|
|
|
|
// ParameterVo.Parameter parameter = new ParameterVo.Parameter();
|
|
|
|
// parameter.setTitle("电耳");
|
|
|
|
// List<ParameterVo.ParameterThreshold> parameterThresholds = new ArrayList<>();
|
|
|
|
//
|
|
|
|
// ParameterVo.ParameterThreshold parameterThreshold1 = new ParameterVo.ParameterThreshold(11L,"electricEar1","实时",BigDecimal.valueOf(60),
|
|
|
|
// new ParameterVo.ThresholdValue(1L,"thresholdValue1","阀值1",BigDecimal.valueOf(20),BigDecimal.valueOf(60)),
|
|
|
|
// new ParameterVo.ThresholdValue(2L,"thresholdValue2","阀值2",BigDecimal.valueOf(30),BigDecimal.valueOf(70)),
|
|
|
|
// new ParameterVo.ThresholdValue(3L,"thresholdValue3","阀值3",BigDecimal.valueOf(40),BigDecimal.valueOf(80)));
|
|
|
|
//
|
|
|
|
// ParameterVo.ParameterThreshold parameterThreshold2 = new ParameterVo.ParameterThreshold(12L,"electricEar1","实时",BigDecimal.valueOf(65),
|
|
|
|
// new ParameterVo.ThresholdValue(4L,"thresholdValue1","阀值1",BigDecimal.valueOf(30),BigDecimal.valueOf(70)),
|
|
|
|
// new ParameterVo.ThresholdValue(5L,"thresholdValue2","阀值2",BigDecimal.valueOf(40),BigDecimal.valueOf(80)),
|
|
|
|
// new ParameterVo.ThresholdValue(6L,"thresholdValue3","阀值3",BigDecimal.valueOf(50),BigDecimal.valueOf(90)));
|
|
|
|
// parameterThresholds.add(parameterThreshold1);
|
|
|
|
// parameterThresholds.add(parameterThreshold2);
|
|
|
|
// parameter.setValues(parameterThresholds);
|
|
|
|
// parameters.add(parameter);
|
|
|
|
// parameterInfo.setParameter(parameters);
|
|
|
|
return parameterInfo; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateParameter(ParameterDto.ParameterInfo param) { |
|
|
|
public void updateParameter(ParameterDto.ParameterInfo param) throws Exception { |
|
|
|
if(ObjectUtil.isNull(param)){ |
|
|
|
return; |
|
|
|
} |
|
|
|
//电磁阀1
|
|
|
|
ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); |
|
|
|
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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取设置值的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); |
|
|
|
} |
|
|
|
} |
|
|
|