package com.qianwen.smartman.modules.smis.service;
|
|
import java.io.IOException;
|
import java.nio.charset.Charset;
|
import java.util.List;
|
|
import org.apache.commons.io.IOUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.qianwen.core.log.exception.ServiceException;
|
import com.qianwen.core.mp.base.BaseServiceImpl;
|
import com.qianwen.smartman.common.mqtt.MqttMessageSender;
|
import com.qianwen.smartman.modules.smis.entity.CollectDeviceType;
|
import com.qianwen.smartman.modules.smis.entity.Workstation;
|
import com.qianwen.smartman.modules.smis.entity.WorkstationDatapoints;
|
import com.qianwen.smartman.modules.smis.mapper.CollectDeviceTypeMapper;
|
import com.qianwen.smartman.modules.smis.mapper.WorkstationDatapointsMapper;
|
import com.qianwen.smartman.modules.smis.mapper.WorkstationMapper;
|
import com.qianwen.smartman.modules.smis.vo.WorkstationDatapointsSubmitVO;
|
import com.qianwen.smartman.modules.smis.vo.WorkstationDatapointsVO;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
@Service
|
public class WorkstationDatapointsService extends BaseServiceImpl<WorkstationDatapointsMapper, WorkstationDatapoints> {
|
private Logger log = LoggerFactory.getLogger(this.getClass());
|
@Autowired
|
private CollectDeviceTypeMapper typeMapper;
|
|
@Autowired
|
private MqttMessageSender mqttSender;
|
|
@Autowired
|
private WorkstationMapper workstationMapper;
|
/**
|
* mqtt topic,用于通知collect应用,数据点改变
|
*/
|
private final String WORKSTATION_DATAPOINT_CHANGED_TOPIC = "mdc/workstation_datapoint_changed";
|
/**
|
* 新增或者修改工位点位配置
|
* @param tplVO
|
*/
|
@Transactional
|
public void submit(WorkstationDatapointsSubmitVO dpVO) {
|
|
if(ObjectUtil.isEmpty(dpVO.getAppId())) {
|
throw new ServiceException("应用ID不能为空");
|
}
|
Workstation usingWorkstation = appIdUsingWorkstation(dpVO.getAppId(),dpVO.getWorkstationId());
|
if(usingWorkstation != null) {
|
//appId被使用
|
String err = "应用ID被占用,工位名称+编号:"+usingWorkstation.getName()+"-"+usingWorkstation.getCode();
|
throw new ServiceException(err);
|
}
|
|
WorkstationDatapoints dp = this.baseMapper.selectOne(Wrappers.<WorkstationDatapoints>lambdaQuery().eq(WorkstationDatapoints::getWorkstationId, dpVO.getWorkstationId()));
|
if (dp == null) {
|
//新增
|
dp = new WorkstationDatapoints();
|
dp.setDpConfig(dpVO.getDpConfig());
|
dp.setIsDeleted(0);
|
dp.setWorkstationId(dpVO.getWorkstationId());
|
dp.setType(dpVO.getType());
|
dp.setAppId(dpVO.getAppId());
|
}else {
|
dp.setDpConfig(dpVO.getDpConfig());
|
dp.setIsDeleted(0);
|
dp.setWorkstationId(dpVO.getWorkstationId());
|
dp.setType(dpVO.getType());
|
dp.setAppId(dpVO.getAppId());
|
}
|
|
saveOrUpdate(dp);
|
|
/*
|
WorkstationAppMapping appMap = mpmapper.selectById(dpVO.getWorkstationId());
|
if(appMap == null) {
|
appMap = new WorkstationAppMapping();
|
appMap.setAppId(dpVO.getAppId());
|
appMap.setWorkstationId(dpVO.getWorkstationId());
|
mpmapper.insert(appMap);
|
}else {
|
appMap.setAppId(dpVO.getAppId());
|
mpmapper.updateById(appMap);
|
}*/
|
|
//发送变更消息
|
JSONObject payloadObj = new JSONObject();
|
payloadObj.put("appId", dpVO.getAppId());
|
payloadObj.put("workstationId", dpVO.getWorkstationId());
|
mqttSender.sendMessage(WORKSTATION_DATAPOINT_CHANGED_TOPIC, payloadObj.toJSONString());
|
}
|
/**
|
* appId是否被其他工位使用,如果使用返回使用的工位数据
|
* @param appId
|
* @param workstationId
|
* @return 使用该appId的工位
|
*/
|
Workstation appIdUsingWorkstation(String appId,long workstationId) {
|
//long cnt = baseMapper.selectCount(Wrappers.<WorkstationDatapoints>lambdaQuery().ne(WorkstationDatapoints::getWorkstationId, workstationId).eq(WorkstationDatapoints::getAppId, appId));
|
//return cnt > 0;
|
List<WorkstationDatapoints> dpList = baseMapper.selectList(Wrappers.<WorkstationDatapoints>lambdaQuery().ne(WorkstationDatapoints::getWorkstationId, workstationId).eq(WorkstationDatapoints::getAppId, appId));
|
|
if(dpList.isEmpty()) {
|
return null;
|
}
|
|
Workstation ws = workstationMapper.selectById(dpList.get(0).getWorkstationId());
|
return ws;
|
}
|
/**
|
* 获取工位数据点配置
|
* @param workstationId
|
* @return
|
*/
|
public WorkstationDatapointsVO getDatapoints(Long workstationId) {
|
log.info("woid={}",workstationId);
|
WorkstationDatapoints dp = baseMapper.selectOne(Wrappers.<WorkstationDatapoints>lambdaQuery().eq(WorkstationDatapoints::getWorkstationId, workstationId));
|
|
log.info("dp={}",dp);
|
|
WorkstationDatapointsVO dpVO = new WorkstationDatapointsVO();
|
dpVO.setWorkstationId(workstationId);
|
if(dp != null) {
|
|
dpVO.setDpConfig(dp.getDpConfig());
|
dpVO.setType(dp.getType());
|
dpVO.setAppId(dp.getAppId());
|
|
Charset utf8charset = Charset.forName("utf8");
|
String startJsonStr= "[]";
|
String endJsonStr = "[]";
|
try {
|
startJsonStr = IOUtils.resourceToString("/dp/dpstart.json", utf8charset);
|
endJsonStr = IOUtils.resourceToString("/dp/dpend.json", utf8charset);
|
} catch (IOException e) {
|
log.error("读取默认dpHead异常",e);
|
}
|
|
CollectDeviceType collectType = typeMapper.selectById(dp.getType());
|
String fullHead = CollectDeviceTypeService.mergeJson(startJsonStr,collectType.getDpHead(),endJsonStr);
|
dpVO.setDpHead(fullHead);
|
|
}
|
return dpVO;
|
}
|
|
/**
|
* 删除工位的采集数据点位配置
|
* @param workstationId
|
*/
|
public void removeByWorkstation(List<Long> workstationIds) {
|
log.info("删除工位数据点配置,workstationIds",workstationIds);
|
baseMapper.delete(Wrappers.<WorkstationDatapoints>lambdaQuery().in(WorkstationDatapoints::getWorkstationId, workstationIds));
|
}
|
}
|