yangys
2025-04-10 220141036107ef2103833fcd878de43307ca0905
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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));
    }
}