测量点配置

This commit is contained in:
2026-03-28 09:01:16 +08:00
parent 868e3568d7
commit c1258dae5d
17 changed files with 1425 additions and 0 deletions

View File

@ -0,0 +1,21 @@
package com.ktg.mes.board.controller;
import com.ktg.common.core.domain.AjaxResult;
import com.ktg.mes.board.service.IWorkshopBoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/mes/board/workshop")
public class WorkshopBoardController {
@Autowired
private IWorkshopBoardService workshopBoardService;
@GetMapping("/data")
public AjaxResult data(@RequestParam(value = "screenCode", required = false) String screenCode) {
return AjaxResult.success(workshopBoardService.getBoardData(screenCode));
}
}

View File

@ -0,0 +1,88 @@
package com.ktg.mes.board.domain;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class WorkshopBoardData {
private Map<String, Object> header = new LinkedHashMap<String, Object>();
private Map<String, Object> summary = new LinkedHashMap<String, Object>();
private List<Map<String, Object>> faultList = new ArrayList<Map<String, Object>>();
private List<Map<String, Object>> maintenanceList = new ArrayList<Map<String, Object>>();
private List<Map<String, Object>> machineList = new ArrayList<Map<String, Object>>();
private List<Map<String, Object>> detailRealtime = new ArrayList<Map<String, Object>>();
private List<Map<String, Object>> detailSetting = new ArrayList<Map<String, Object>>();
private List<Map<String, Object>> detailProduction = new ArrayList<Map<String, Object>>();
public Map<String, Object> getHeader() {
return header;
}
public void setHeader(Map<String, Object> header) {
this.header = header;
}
public Map<String, Object> getSummary() {
return summary;
}
public void setSummary(Map<String, Object> summary) {
this.summary = summary;
}
public List<Map<String, Object>> getFaultList() {
return faultList;
}
public void setFaultList(List<Map<String, Object>> faultList) {
this.faultList = faultList;
}
public List<Map<String, Object>> getMaintenanceList() {
return maintenanceList;
}
public void setMaintenanceList(List<Map<String, Object>> maintenanceList) {
this.maintenanceList = maintenanceList;
}
public List<Map<String, Object>> getMachineList() {
return machineList;
}
public void setMachineList(List<Map<String, Object>> machineList) {
this.machineList = machineList;
}
public List<Map<String, Object>> getDetailRealtime() {
return detailRealtime;
}
public void setDetailRealtime(List<Map<String, Object>> detailRealtime) {
this.detailRealtime = detailRealtime;
}
public List<Map<String, Object>> getDetailSetting() {
return detailSetting;
}
public void setDetailSetting(List<Map<String, Object>> detailSetting) {
this.detailSetting = detailSetting;
}
public List<Map<String, Object>> getDetailProduction() {
return detailProduction;
}
public void setDetailProduction(List<Map<String, Object>> detailProduction) {
this.detailProduction = detailProduction;
}
}

View File

@ -0,0 +1,7 @@
package com.ktg.mes.board.service;
import com.ktg.mes.board.domain.WorkshopBoardData;
public interface IWorkshopBoardService {
WorkshopBoardData getBoardData(String screenCode);
}

View File

@ -0,0 +1,152 @@
package com.ktg.mes.board.service.impl;
import com.ktg.common.utils.StringUtils;
import com.ktg.mes.board.domain.WorkshopBoardData;
import com.ktg.mes.board.service.IWorkshopBoardService;
import com.ktg.mes.md.domain.MdMeasurePoint;
import com.ktg.mes.md.domain.MdScreenBinding;
import com.ktg.mes.md.domain.vo.ScreenBindingConfigVo;
import com.ktg.mes.md.domain.vo.ScreenBindingMachineConfig;
import com.ktg.mes.md.service.IMdMeasurePointService;
import com.ktg.mes.md.service.IMdScreenBindingService;
import com.ktg.mes.md.service.impl.ScreenBindingDefaults;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Service
public class WorkshopBoardServiceImpl implements IWorkshopBoardService {
@Autowired
private IMdScreenBindingService mdScreenBindingService;
@Autowired
private IMdMeasurePointService mdMeasurePointService;
@Override
public WorkshopBoardData getBoardData(String screenCode) {
ScreenBindingConfigVo configVo = mdScreenBindingService.getScreenBindingConfig(screenCode);
Map<String, MdMeasurePoint> pointMap = mdMeasurePointService.selectMdMeasurePointMapByPointCodes(collectPointCodes(configVo));
return buildBoardData(configVo, pointMap);
}
private Collection<String> collectPointCodes(ScreenBindingConfigVo configVo) {
List<String> result = new ArrayList<String>();
for (MdScreenBinding binding : configVo.getBasicBindings()) {
collectPointCode(result, binding);
}
for (ScreenBindingMachineConfig machineConfig : configVo.getMachineConfigs()) {
for (MdScreenBinding binding : machineConfig.getBindings()) {
collectPointCode(result, binding);
}
}
return result;
}
private void collectPointCode(List<String> result, MdScreenBinding binding) {
if (binding == null || !ScreenBindingDefaults.SOURCE_POINT.equals(binding.getSourceType()) || StringUtils.isEmpty(binding.getPointCode())) {
return;
}
if (!result.contains(binding.getPointCode())) {
result.add(binding.getPointCode());
}
}
private WorkshopBoardData buildBoardData(ScreenBindingConfigVo configVo, Map<String, MdMeasurePoint> pointMap) {
WorkshopBoardData fallback = ScreenBindingDefaults.createFallbackBoardData();
applyBasicBindings(configVo.getBasicBindings(), fallback, pointMap);
applyMachineBindings(configVo.getMachineConfigs(), fallback, pointMap);
return fallback;
}
private void applyBasicBindings(List<MdScreenBinding> bindings, WorkshopBoardData boardData, Map<String, MdMeasurePoint> pointMap) {
for (MdScreenBinding binding : bindings) {
String bindingKey = binding.getBindingKey();
if (StringUtils.isEmpty(bindingKey) || bindingKey.indexOf(".") < 0) {
continue;
}
String[] segments = bindingKey.split("\\.");
if (segments.length != 2) {
continue;
}
if ("header".equals(segments[0])) {
boardData.getHeader().put(segments[1], resolveBindingValue(binding, pointMap));
} else if ("summary".equals(segments[0])) {
boardData.getSummary().put(segments[1], resolveBindingValue(binding, pointMap));
}
}
}
private void applyMachineBindings(List<ScreenBindingMachineConfig> machineConfigs, WorkshopBoardData boardData, Map<String, MdMeasurePoint> pointMap) {
Map<Long, ScreenBindingMachineConfig> machineMap = new LinkedHashMap<Long, ScreenBindingMachineConfig>();
for (ScreenBindingMachineConfig machineConfig : machineConfigs) {
machineMap.put(machineConfig.getId(), machineConfig);
}
List<Map<String, Object>> newMachineList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> machine : boardData.getMachineList()) {
Long machineId = toLong(machine.get("id"));
ScreenBindingMachineConfig machineConfig = machineMap.get(machineId);
if (machineConfig == null) {
newMachineList.add(machine);
continue;
}
Map<String, Object> newMachine = new LinkedHashMap<String, Object>(machine);
if (StringUtils.isNotEmpty(machineConfig.getStatusClass())) {
newMachine.put("statusClass", machineConfig.getStatusClass());
}
for (MdScreenBinding binding : machineConfig.getBindings()) {
newMachine.put(binding.getBindingKey(), resolveBindingValue(binding, pointMap));
}
newMachineList.add(newMachine);
}
boardData.setMachineList(newMachineList);
}
private String resolveBindingValue(MdScreenBinding binding, Map<String, MdMeasurePoint> pointMap) {
String value;
if (ScreenBindingDefaults.SOURCE_POINT.equals(binding.getSourceType()) && StringUtils.isNotEmpty(binding.getPointCode())) {
MdMeasurePoint point = pointMap.get(binding.getPointCode());
value = point == null ? null : point.getLatestValue();
} else {
value = binding.getFixedValue();
}
if (StringUtils.isEmpty(value)) {
value = binding.getDefaultValue();
}
if (StringUtils.isEmpty(value)) {
return "--";
}
String formatted = formatNumber(value, binding.getPrecisionDigit());
if (StringUtils.isEmpty(binding.getDisplayUnit()) || formatted.contains(binding.getDisplayUnit())) {
return formatted;
}
return formatted + binding.getDisplayUnit();
}
private String formatNumber(String value, Integer precisionDigit) {
if (precisionDigit == null) {
return value;
}
try {
BigDecimal decimal = new BigDecimal(value);
return decimal.setScale(precisionDigit, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
} catch (Exception ex) {
return value;
}
}
private Long toLong(Object value) {
if (value == null) {
return 0L;
}
if (value instanceof Number) {
return ((Number) value).longValue();
}
return Long.valueOf(String.valueOf(value));
}
}