diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/controller/WorkshopBoardController.java b/ktg-mes/src/main/java/com/ktg/mes/board/controller/WorkshopBoardController.java new file mode 100644 index 0000000..bd3816e --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/controller/WorkshopBoardController.java @@ -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)); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/domain/WorkshopBoardData.java b/ktg-mes/src/main/java/com/ktg/mes/board/domain/WorkshopBoardData.java new file mode 100644 index 0000000..40c637d --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/domain/WorkshopBoardData.java @@ -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 header = new LinkedHashMap(); + + private Map summary = new LinkedHashMap(); + + private List> faultList = new ArrayList>(); + + private List> maintenanceList = new ArrayList>(); + + private List> machineList = new ArrayList>(); + + private List> detailRealtime = new ArrayList>(); + + private List> detailSetting = new ArrayList>(); + + private List> detailProduction = new ArrayList>(); + + public Map getHeader() { + return header; + } + + public void setHeader(Map header) { + this.header = header; + } + + public Map getSummary() { + return summary; + } + + public void setSummary(Map summary) { + this.summary = summary; + } + + public List> getFaultList() { + return faultList; + } + + public void setFaultList(List> faultList) { + this.faultList = faultList; + } + + public List> getMaintenanceList() { + return maintenanceList; + } + + public void setMaintenanceList(List> maintenanceList) { + this.maintenanceList = maintenanceList; + } + + public List> getMachineList() { + return machineList; + } + + public void setMachineList(List> machineList) { + this.machineList = machineList; + } + + public List> getDetailRealtime() { + return detailRealtime; + } + + public void setDetailRealtime(List> detailRealtime) { + this.detailRealtime = detailRealtime; + } + + public List> getDetailSetting() { + return detailSetting; + } + + public void setDetailSetting(List> detailSetting) { + this.detailSetting = detailSetting; + } + + public List> getDetailProduction() { + return detailProduction; + } + + public void setDetailProduction(List> detailProduction) { + this.detailProduction = detailProduction; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/service/IWorkshopBoardService.java b/ktg-mes/src/main/java/com/ktg/mes/board/service/IWorkshopBoardService.java new file mode 100644 index 0000000..5feafb6 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/service/IWorkshopBoardService.java @@ -0,0 +1,7 @@ +package com.ktg.mes.board.service; + +import com.ktg.mes.board.domain.WorkshopBoardData; + +public interface IWorkshopBoardService { + WorkshopBoardData getBoardData(String screenCode); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/WorkshopBoardServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/WorkshopBoardServiceImpl.java new file mode 100644 index 0000000..bdce446 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/WorkshopBoardServiceImpl.java @@ -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 pointMap = mdMeasurePointService.selectMdMeasurePointMapByPointCodes(collectPointCodes(configVo)); + return buildBoardData(configVo, pointMap); + } + + private Collection collectPointCodes(ScreenBindingConfigVo configVo) { + List result = new ArrayList(); + 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 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 pointMap) { + WorkshopBoardData fallback = ScreenBindingDefaults.createFallbackBoardData(); + applyBasicBindings(configVo.getBasicBindings(), fallback, pointMap); + applyMachineBindings(configVo.getMachineConfigs(), fallback, pointMap); + return fallback; + } + + private void applyBasicBindings(List bindings, WorkshopBoardData boardData, Map 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 machineConfigs, WorkshopBoardData boardData, Map pointMap) { + Map machineMap = new LinkedHashMap(); + for (ScreenBindingMachineConfig machineConfig : machineConfigs) { + machineMap.put(machineConfig.getId(), machineConfig); + } + List> newMachineList = new ArrayList>(); + for (Map machine : boardData.getMachineList()) { + Long machineId = toLong(machine.get("id")); + ScreenBindingMachineConfig machineConfig = machineMap.get(machineId); + if (machineConfig == null) { + newMachineList.add(machine); + continue; + } + Map newMachine = new LinkedHashMap(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 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)); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdScreenBindingController.java b/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdScreenBindingController.java new file mode 100644 index 0000000..2436f1e --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdScreenBindingController.java @@ -0,0 +1,100 @@ +package com.ktg.mes.md.controller; + +import com.ktg.common.annotation.Log; +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.domain.AjaxResult; +import com.ktg.common.core.page.TableDataInfo; +import com.ktg.common.enums.BusinessType; +import com.ktg.common.utils.poi.ExcelUtil; +import com.ktg.mes.md.domain.MdScreenBinding; +import com.ktg.mes.md.domain.vo.ScreenBindingConfigVo; +import com.ktg.mes.md.service.IMdScreenBindingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +@RestController +@RequestMapping("/mes/md/screenbinding") +public class MdScreenBindingController extends BaseController { + @Autowired + private IMdScreenBindingService mdScreenBindingService; + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:list')") + @GetMapping("/list") + public TableDataInfo list(MdScreenBinding mdScreenBinding) { + startPage(); + List list = mdScreenBindingService.selectMdScreenBindingList(mdScreenBinding); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:export')") + @Log(title = "看板绑定", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, MdScreenBinding mdScreenBinding) { + List list = mdScreenBindingService.selectMdScreenBindingList(mdScreenBinding); + ExcelUtil util = new ExcelUtil(MdScreenBinding.class); + util.exportExcel(response, list, "看板绑定数据"); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:query')") + @GetMapping("/{bindingId}") + public AjaxResult getInfo(@PathVariable("bindingId") Long bindingId) { + return AjaxResult.success(mdScreenBindingService.selectMdScreenBindingByBindingId(bindingId)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:query')") + @GetMapping("/config") + public AjaxResult getConfig(@RequestParam(value = "screenCode", required = false) String screenCode) { + return AjaxResult.success(mdScreenBindingService.getScreenBindingConfig(screenCode)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:add')") + @Log(title = "看板绑定", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody MdScreenBinding mdScreenBinding) { + mdScreenBinding.setCreateBy(getUsername()); + return toAjax(mdScreenBindingService.insertMdScreenBinding(mdScreenBinding)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:edit')") + @Log(title = "看板绑定", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody MdScreenBinding mdScreenBinding) { + mdScreenBinding.setUpdateBy(getUsername()); + return toAjax(mdScreenBindingService.updateMdScreenBinding(mdScreenBinding)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:edit')") + @Log(title = "看板绑定配置", businessType = BusinessType.UPDATE) + @PostMapping("/config") + public AjaxResult saveConfig(@RequestBody ScreenBindingConfigVo configVo) { + mdScreenBindingService.saveScreenBindingConfig(configVo, getUsername()); + return AjaxResult.success("保存成功", mdScreenBindingService.getScreenBindingConfig(configVo.getScreenCode())); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:remove')") + @Log(title = "看板绑定", businessType = BusinessType.DELETE) + @DeleteMapping("/{bindingIds}") + public AjaxResult remove(@PathVariable Long[] bindingIds) { + return toAjax(mdScreenBindingService.deleteMdScreenBindingByBindingIds(bindingIds)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:remove')") + @Log(title = "看板绑定配置", businessType = BusinessType.CLEAN) + @DeleteMapping("/config") + public AjaxResult resetConfig(@RequestParam(value = "screenCode", required = false) String screenCode) { + mdScreenBindingService.resetScreenBindingConfig(screenCode); + return AjaxResult.success("已恢复默认配置", mdScreenBindingService.getScreenBindingConfig(screenCode)); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdScreenBinding.java b/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdScreenBinding.java new file mode 100644 index 0000000..aab39ca --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdScreenBinding.java @@ -0,0 +1,258 @@ +package com.ktg.mes.md.domain; + +import com.ktg.common.annotation.Excel; +import com.ktg.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +public class MdScreenBinding extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long bindingId; + + @Excel(name = "看板编码") + private String screenCode; + + private Long workshopId; + + @Excel(name = "车间编码") + private String workshopCode; + + @Excel(name = "车间名称") + private String workshopName; + + @Excel(name = "绑定范围") + private String bindingScope; + + @Excel(name = "设备卡片ID") + private Long machineId; + + @Excel(name = "绑定键") + private String bindingKey; + + @Excel(name = "绑定名称") + private String bindingName; + + @Excel(name = "来源类型") + private String sourceType; + + private Long pointId; + + @Excel(name = "测量点编码") + private String pointCode; + + @Excel(name = "测量点名称") + private String pointName; + + @Excel(name = "固定值") + private String fixedValue; + + @Excel(name = "默认值") + private String defaultValue; + + @Excel(name = "展示单位") + private String displayUnit; + + @Excel(name = "保留位数") + private Integer precisionDigit; + + @Excel(name = "状态样式") + private String statusClass; + + @Excel(name = "排序号") + private Integer sortNum; + + @Excel(name = "启用状态") + private String enableFlag; + + public Long getBindingId() { + return bindingId; + } + + public void setBindingId(Long bindingId) { + this.bindingId = bindingId; + } + + public String getScreenCode() { + return screenCode; + } + + public void setScreenCode(String screenCode) { + this.screenCode = screenCode; + } + + public Long getWorkshopId() { + return workshopId; + } + + public void setWorkshopId(Long workshopId) { + this.workshopId = workshopId; + } + + public String getWorkshopCode() { + return workshopCode; + } + + public void setWorkshopCode(String workshopCode) { + this.workshopCode = workshopCode; + } + + public String getWorkshopName() { + return workshopName; + } + + public void setWorkshopName(String workshopName) { + this.workshopName = workshopName; + } + + public String getBindingScope() { + return bindingScope; + } + + public void setBindingScope(String bindingScope) { + this.bindingScope = bindingScope; + } + + public Long getMachineId() { + return machineId; + } + + public void setMachineId(Long machineId) { + this.machineId = machineId; + } + + public String getBindingKey() { + return bindingKey; + } + + public void setBindingKey(String bindingKey) { + this.bindingKey = bindingKey; + } + + public String getBindingName() { + return bindingName; + } + + public void setBindingName(String bindingName) { + this.bindingName = bindingName; + } + + public String getSourceType() { + return sourceType; + } + + public void setSourceType(String sourceType) { + this.sourceType = sourceType; + } + + public Long getPointId() { + return pointId; + } + + public void setPointId(Long pointId) { + this.pointId = pointId; + } + + public String getPointCode() { + return pointCode; + } + + public void setPointCode(String pointCode) { + this.pointCode = pointCode; + } + + public String getPointName() { + return pointName; + } + + public void setPointName(String pointName) { + this.pointName = pointName; + } + + public String getFixedValue() { + return fixedValue; + } + + public void setFixedValue(String fixedValue) { + this.fixedValue = fixedValue; + } + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public String getDisplayUnit() { + return displayUnit; + } + + public void setDisplayUnit(String displayUnit) { + this.displayUnit = displayUnit; + } + + public Integer getPrecisionDigit() { + return precisionDigit; + } + + public void setPrecisionDigit(Integer precisionDigit) { + this.precisionDigit = precisionDigit; + } + + public String getStatusClass() { + return statusClass; + } + + public void setStatusClass(String statusClass) { + this.statusClass = statusClass; + } + + public Integer getSortNum() { + return sortNum; + } + + public void setSortNum(Integer sortNum) { + this.sortNum = sortNum; + } + + public String getEnableFlag() { + return enableFlag; + } + + public void setEnableFlag(String enableFlag) { + this.enableFlag = enableFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("bindingId", getBindingId()) + .append("screenCode", getScreenCode()) + .append("workshopId", getWorkshopId()) + .append("workshopCode", getWorkshopCode()) + .append("workshopName", getWorkshopName()) + .append("bindingScope", getBindingScope()) + .append("machineId", getMachineId()) + .append("bindingKey", getBindingKey()) + .append("bindingName", getBindingName()) + .append("sourceType", getSourceType()) + .append("pointId", getPointId()) + .append("pointCode", getPointCode()) + .append("pointName", getPointName()) + .append("fixedValue", getFixedValue()) + .append("defaultValue", getDefaultValue()) + .append("displayUnit", getDisplayUnit()) + .append("precisionDigit", getPrecisionDigit()) + .append("statusClass", getStatusClass()) + .append("sortNum", getSortNum()) + .append("enableFlag", getEnableFlag()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/domain/vo/ScreenBindingConfigVo.java b/ktg-mes/src/main/java/com/ktg/mes/md/domain/vo/ScreenBindingConfigVo.java new file mode 100644 index 0000000..6cd8206 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/domain/vo/ScreenBindingConfigVo.java @@ -0,0 +1,78 @@ +package com.ktg.mes.md.domain.vo; + +import com.ktg.mes.md.domain.MdScreenBinding; + +import java.util.ArrayList; +import java.util.List; + +public class ScreenBindingConfigVo { + private String screenCode; + + private Long workshopId; + + private String workshopCode; + + private String workshopName; + + private String updatedAt; + + private List basicBindings = new ArrayList(); + + private List machineConfigs = new ArrayList(); + + public String getScreenCode() { + return screenCode; + } + + public void setScreenCode(String screenCode) { + this.screenCode = screenCode; + } + + public Long getWorkshopId() { + return workshopId; + } + + public void setWorkshopId(Long workshopId) { + this.workshopId = workshopId; + } + + public String getWorkshopCode() { + return workshopCode; + } + + public void setWorkshopCode(String workshopCode) { + this.workshopCode = workshopCode; + } + + public String getWorkshopName() { + return workshopName; + } + + public void setWorkshopName(String workshopName) { + this.workshopName = workshopName; + } + + public String getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(String updatedAt) { + this.updatedAt = updatedAt; + } + + public List getBasicBindings() { + return basicBindings; + } + + public void setBasicBindings(List basicBindings) { + this.basicBindings = basicBindings; + } + + public List getMachineConfigs() { + return machineConfigs; + } + + public void setMachineConfigs(List machineConfigs) { + this.machineConfigs = machineConfigs; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/domain/vo/ScreenBindingMachineConfig.java b/ktg-mes/src/main/java/com/ktg/mes/md/domain/vo/ScreenBindingMachineConfig.java new file mode 100644 index 0000000..6a21565 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/domain/vo/ScreenBindingMachineConfig.java @@ -0,0 +1,38 @@ +package com.ktg.mes.md.domain.vo; + +import com.ktg.mes.md.domain.MdScreenBinding; + +import java.util.ArrayList; +import java.util.List; + +public class ScreenBindingMachineConfig { + private Long id; + + private String statusClass; + + private List bindings = new ArrayList(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStatusClass() { + return statusClass; + } + + public void setStatusClass(String statusClass) { + this.statusClass = statusClass; + } + + public List getBindings() { + return bindings; + } + + public void setBindings(List bindings) { + this.bindings = bindings; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdMeasurePointMapper.java b/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdMeasurePointMapper.java index 0262f41..7a62585 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdMeasurePointMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdMeasurePointMapper.java @@ -15,6 +15,8 @@ public interface MdMeasurePointMapper { MdMeasurePoint checkPointNameUnique(MdMeasurePoint mdMeasurePoint); + List selectMdMeasurePointByPointCodes(String[] pointCodes); + int insertMdMeasurePoint(MdMeasurePoint mdMeasurePoint); int updateMdMeasurePoint(MdMeasurePoint mdMeasurePoint); diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdScreenBindingMapper.java b/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdScreenBindingMapper.java new file mode 100644 index 0000000..660c690 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdScreenBindingMapper.java @@ -0,0 +1,25 @@ +package com.ktg.mes.md.mapper; + +import com.ktg.mes.md.domain.MdScreenBinding; + +import java.util.List; + +public interface MdScreenBindingMapper { + MdScreenBinding selectMdScreenBindingByBindingId(Long bindingId); + + List selectMdScreenBindingList(MdScreenBinding mdScreenBinding); + + List selectMdScreenBindingByScreenCode(String screenCode); + + int insertMdScreenBinding(MdScreenBinding mdScreenBinding); + + int batchInsertMdScreenBinding(List list); + + int updateMdScreenBinding(MdScreenBinding mdScreenBinding); + + int deleteMdScreenBindingByBindingId(Long bindingId); + + int deleteMdScreenBindingByBindingIds(Long[] bindingIds); + + int deleteMdScreenBindingByScreenCode(String screenCode); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdMeasurePointService.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdMeasurePointService.java index 453f211..621b7bd 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdMeasurePointService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdMeasurePointService.java @@ -3,7 +3,9 @@ package com.ktg.mes.md.service; import com.ktg.mes.md.domain.MdMeasurePoint; import com.ktg.mes.md.domain.MeasurePointHistoryItem; +import java.util.Collection; import java.util.List; +import java.util.Map; public interface IMdMeasurePointService { MdMeasurePoint selectMdMeasurePointByPointId(Long pointId); @@ -27,4 +29,6 @@ public interface IMdMeasurePointService { MdMeasurePoint queryLatestValue(String pointCode); List queryHistory(String pointCode, String range, String interval, String startTime, String endTime); + + Map selectMdMeasurePointMapByPointCodes(Collection pointCodes); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdScreenBindingService.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdScreenBindingService.java new file mode 100644 index 0000000..98cd998 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdScreenBindingService.java @@ -0,0 +1,28 @@ +package com.ktg.mes.md.service; + +import com.ktg.mes.md.domain.MdScreenBinding; +import com.ktg.mes.md.domain.vo.ScreenBindingConfigVo; + +import java.util.List; + +public interface IMdScreenBindingService { + MdScreenBinding selectMdScreenBindingByBindingId(Long bindingId); + + List selectMdScreenBindingList(MdScreenBinding mdScreenBinding); + + List selectMdScreenBindingByScreenCode(String screenCode); + + int insertMdScreenBinding(MdScreenBinding mdScreenBinding); + + int updateMdScreenBinding(MdScreenBinding mdScreenBinding); + + int deleteMdScreenBindingByBindingIds(Long[] bindingIds); + + int deleteMdScreenBindingByBindingId(Long bindingId); + + ScreenBindingConfigVo getScreenBindingConfig(String screenCode); + + int saveScreenBindingConfig(ScreenBindingConfigVo configVo, String operName); + + int resetScreenBindingConfig(String screenCode); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointServiceImpl.java index ad323b4..ce3b86d 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointServiceImpl.java @@ -12,7 +12,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; @Service public class MdMeasurePointServiceImpl implements IMdMeasurePointService { @@ -104,6 +107,20 @@ public class MdMeasurePointServiceImpl implements IMdMeasurePointService { return mdMeasurePointInfluxService.queryHistory(point, range, interval, startTime, endTime); } + @Override + public Map selectMdMeasurePointMapByPointCodes(Collection pointCodes) { + Map result = new LinkedHashMap(); + if (pointCodes == null || pointCodes.isEmpty()) { + return result; + } + List list = mdMeasurePointMapper.selectMdMeasurePointByPointCodes(pointCodes.toArray(new String[0])); + for (MdMeasurePoint point : list) { + mdMeasurePointInfluxService.fillLatestValue(point); + result.put(point.getPointCode(), point); + } + return result; + } + private void fillWorkshopInfo(MdMeasurePoint mdMeasurePoint) { if (mdMeasurePoint.getWorkshopId() == null) { mdMeasurePoint.setWorkshopCode(null); diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdScreenBindingServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdScreenBindingServiceImpl.java new file mode 100644 index 0000000..fbefcd3 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdScreenBindingServiceImpl.java @@ -0,0 +1,245 @@ +package com.ktg.mes.md.service.impl; + +import com.ktg.common.utils.DateUtils; +import com.ktg.common.utils.StringUtils; +import com.ktg.mes.md.domain.MdScreenBinding; +import com.ktg.mes.md.domain.MdWorkshop; +import com.ktg.mes.md.domain.vo.ScreenBindingConfigVo; +import com.ktg.mes.md.domain.vo.ScreenBindingMachineConfig; +import com.ktg.mes.md.mapper.MdScreenBindingMapper; +import com.ktg.mes.md.service.IMdScreenBindingService; +import com.ktg.mes.md.service.IMdWorkshopService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Service +public class MdScreenBindingServiceImpl implements IMdScreenBindingService { + @Autowired + private MdScreenBindingMapper mdScreenBindingMapper; + + @Autowired + private IMdWorkshopService mdWorkshopService; + + @Override + public MdScreenBinding selectMdScreenBindingByBindingId(Long bindingId) { + return mdScreenBindingMapper.selectMdScreenBindingByBindingId(bindingId); + } + + @Override + public List selectMdScreenBindingList(MdScreenBinding mdScreenBinding) { + return mdScreenBindingMapper.selectMdScreenBindingList(mdScreenBinding); + } + + @Override + public List selectMdScreenBindingByScreenCode(String screenCode) { + return mdScreenBindingMapper.selectMdScreenBindingByScreenCode(screenCode); + } + + @Override + public int insertMdScreenBinding(MdScreenBinding mdScreenBinding) { + fillWorkshopInfo(mdScreenBinding); + normalizeBinding(mdScreenBinding); + mdScreenBinding.setCreateTime(DateUtils.getNowDate()); + return mdScreenBindingMapper.insertMdScreenBinding(mdScreenBinding); + } + + @Override + public int updateMdScreenBinding(MdScreenBinding mdScreenBinding) { + fillWorkshopInfo(mdScreenBinding); + normalizeBinding(mdScreenBinding); + mdScreenBinding.setUpdateTime(DateUtils.getNowDate()); + return mdScreenBindingMapper.updateMdScreenBinding(mdScreenBinding); + } + + @Override + public int deleteMdScreenBindingByBindingIds(Long[] bindingIds) { + return mdScreenBindingMapper.deleteMdScreenBindingByBindingIds(bindingIds); + } + + @Override + public int deleteMdScreenBindingByBindingId(Long bindingId) { + return mdScreenBindingMapper.deleteMdScreenBindingByBindingId(bindingId); + } + + @Override + public ScreenBindingConfigVo getScreenBindingConfig(String screenCode) { + String actualScreenCode = StringUtils.isEmpty(screenCode) ? ScreenBindingDefaults.DEFAULT_SCREEN_CODE : screenCode.trim(); + List list = mdScreenBindingMapper.selectMdScreenBindingByScreenCode(actualScreenCode); + if (list == null || list.isEmpty()) { + return ScreenBindingDefaults.createDefaultConfig(actualScreenCode); + } + return buildConfigVo(actualScreenCode, list); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int saveScreenBindingConfig(ScreenBindingConfigVo configVo, String operName) { + String actualScreenCode = StringUtils.isEmpty(configVo.getScreenCode()) ? ScreenBindingDefaults.DEFAULT_SCREEN_CODE : configVo.getScreenCode().trim(); + List rows = flattenConfig(actualScreenCode, configVo, operName); + mdScreenBindingMapper.deleteMdScreenBindingByScreenCode(actualScreenCode); + if (rows.isEmpty()) { + return 1; + } + return mdScreenBindingMapper.batchInsertMdScreenBinding(rows); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int resetScreenBindingConfig(String screenCode) { + String actualScreenCode = StringUtils.isEmpty(screenCode) ? ScreenBindingDefaults.DEFAULT_SCREEN_CODE : screenCode.trim(); + return mdScreenBindingMapper.deleteMdScreenBindingByScreenCode(actualScreenCode); + } + + private List flattenConfig(String screenCode, ScreenBindingConfigVo configVo, String operName) { + List rows = new ArrayList(); + List basicBindings = configVo.getBasicBindings() == null ? new ArrayList() : configVo.getBasicBindings(); + for (MdScreenBinding binding : basicBindings) { + MdScreenBinding normalized = copyBinding(binding); + normalized.setScreenCode(screenCode); + normalized.setBindingScope(ScreenBindingDefaults.SCOPE_BASIC); + normalized.setMachineId(0L); + normalized.setCreateBy(operName); + normalized.setCreateTime(DateUtils.getNowDate()); + fillWorkshopInfo(normalized, configVo); + normalizeBinding(normalized); + rows.add(normalized); + } + List machineConfigs = configVo.getMachineConfigs() == null ? new ArrayList() : configVo.getMachineConfigs(); + for (ScreenBindingMachineConfig machineConfig : machineConfigs) { + List bindings = machineConfig.getBindings() == null ? new ArrayList() : machineConfig.getBindings(); + for (MdScreenBinding binding : bindings) { + MdScreenBinding normalized = copyBinding(binding); + normalized.setScreenCode(screenCode); + normalized.setBindingScope(ScreenBindingDefaults.SCOPE_MACHINE); + normalized.setMachineId(machineConfig.getId() == null ? 0L : machineConfig.getId()); + normalized.setStatusClass(StringUtils.isEmpty(machineConfig.getStatusClass()) ? binding.getStatusClass() : machineConfig.getStatusClass()); + normalized.setCreateBy(operName); + normalized.setCreateTime(DateUtils.getNowDate()); + fillWorkshopInfo(normalized, configVo); + normalizeBinding(normalized); + rows.add(normalized); + } + } + return rows; + } + + private ScreenBindingConfigVo buildConfigVo(String screenCode, List list) { + ScreenBindingConfigVo configVo = new ScreenBindingConfigVo(); + configVo.setScreenCode(screenCode); + if (!list.isEmpty()) { + MdScreenBinding first = list.get(0); + configVo.setWorkshopId(first.getWorkshopId()); + configVo.setWorkshopCode(first.getWorkshopCode()); + configVo.setWorkshopName(first.getWorkshopName()); + configVo.setUpdatedAt(first.getUpdateTime() != null ? DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", first.getUpdateTime()) + : first.getCreateTime() != null ? DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", first.getCreateTime()) : null); + } + Map machineMap = new LinkedHashMap(); + for (MdScreenBinding binding : list) { + if (ScreenBindingDefaults.SCOPE_BASIC.equals(binding.getBindingScope())) { + configVo.getBasicBindings().add(copyBinding(binding)); + continue; + } + Long machineId = binding.getMachineId() == null ? 0L : binding.getMachineId(); + ScreenBindingMachineConfig machineConfig = machineMap.get(machineId); + if (machineConfig == null) { + machineConfig = new ScreenBindingMachineConfig(); + machineConfig.setId(machineId); + machineConfig.setStatusClass(binding.getStatusClass()); + machineMap.put(machineId, machineConfig); + } + machineConfig.getBindings().add(copyBinding(binding)); + } + configVo.setMachineConfigs(new ArrayList(machineMap.values())); + return configVo; + } + + private void fillWorkshopInfo(MdScreenBinding binding) { + if (binding.getWorkshopId() == null) { + binding.setWorkshopCode(null); + binding.setWorkshopName(null); + return; + } + MdWorkshop workshop = mdWorkshopService.selectMdWorkshopByWorkshopId(binding.getWorkshopId()); + if (workshop != null) { + binding.setWorkshopCode(workshop.getWorkshopCode()); + binding.setWorkshopName(workshop.getWorkshopName()); + } + } + + private void fillWorkshopInfo(MdScreenBinding binding, ScreenBindingConfigVo configVo) { + if (binding.getWorkshopId() == null && configVo.getWorkshopId() != null) { + binding.setWorkshopId(configVo.getWorkshopId()); + } + fillWorkshopInfo(binding); + if (binding.getWorkshopId() == null) { + binding.setWorkshopCode(configVo.getWorkshopCode()); + binding.setWorkshopName(configVo.getWorkshopName()); + } + } + + private void normalizeBinding(MdScreenBinding binding) { + if (StringUtils.isEmpty(binding.getScreenCode())) { + binding.setScreenCode(ScreenBindingDefaults.DEFAULT_SCREEN_CODE); + } + if (StringUtils.isEmpty(binding.getBindingScope())) { + binding.setBindingScope(ScreenBindingDefaults.SCOPE_BASIC); + } + if (binding.getMachineId() == null) { + binding.setMachineId(0L); + } + if (StringUtils.isEmpty(binding.getSourceType())) { + binding.setSourceType(ScreenBindingDefaults.SOURCE_FIXED); + } + if (binding.getSortNum() == null) { + binding.setSortNum(1); + } + if (StringUtils.isEmpty(binding.getEnableFlag())) { + binding.setEnableFlag("Y"); + } + if (StringUtils.isEmpty(binding.getStatusClass())) { + binding.setStatusClass("is-running"); + } + if (ScreenBindingDefaults.SOURCE_FIXED.equals(binding.getSourceType())) { + binding.setPointId(null); + binding.setPointCode(null); + binding.setPointName(null); + } + } + + private MdScreenBinding copyBinding(MdScreenBinding source) { + MdScreenBinding target = new MdScreenBinding(); + target.setBindingId(source.getBindingId()); + target.setScreenCode(source.getScreenCode()); + target.setWorkshopId(source.getWorkshopId()); + target.setWorkshopCode(source.getWorkshopCode()); + target.setWorkshopName(source.getWorkshopName()); + target.setBindingScope(source.getBindingScope()); + target.setMachineId(source.getMachineId()); + target.setBindingKey(source.getBindingKey()); + target.setBindingName(source.getBindingName()); + target.setSourceType(source.getSourceType()); + target.setPointId(source.getPointId()); + target.setPointCode(source.getPointCode()); + target.setPointName(source.getPointName()); + target.setFixedValue(source.getFixedValue()); + target.setDefaultValue(source.getDefaultValue()); + target.setDisplayUnit(source.getDisplayUnit()); + target.setPrecisionDigit(source.getPrecisionDigit()); + target.setStatusClass(source.getStatusClass()); + target.setSortNum(source.getSortNum()); + target.setEnableFlag(source.getEnableFlag()); + target.setRemark(source.getRemark()); + target.setCreateBy(source.getCreateBy()); + target.setCreateTime(source.getCreateTime()); + target.setUpdateBy(source.getUpdateBy()); + target.setUpdateTime(source.getUpdateTime()); + return target; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/ScreenBindingDefaults.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/ScreenBindingDefaults.java new file mode 100644 index 0000000..367b7ff --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/ScreenBindingDefaults.java @@ -0,0 +1,167 @@ +package com.ktg.mes.md.service.impl; + +import com.ktg.common.utils.DateUtils; +import com.ktg.mes.board.domain.WorkshopBoardData; +import com.ktg.mes.md.domain.MdScreenBinding; +import com.ktg.mes.md.domain.vo.ScreenBindingConfigVo; +import com.ktg.mes.md.domain.vo.ScreenBindingMachineConfig; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public final class ScreenBindingDefaults { + public static final String DEFAULT_SCREEN_CODE = "WORKSHOP_BOARD_DEFAULT"; + public static final String SCOPE_BASIC = "BASIC"; + public static final String SCOPE_MACHINE = "MACHINE"; + public static final String SOURCE_FIXED = "FIXED"; + public static final String SOURCE_POINT = "POINT"; + + private ScreenBindingDefaults() { + } + + public static ScreenBindingConfigVo createDefaultConfig(String screenCode) { + WorkshopBoardData boardData = createFallbackBoardData(); + String actualScreenCode = screenCode == null || screenCode.trim().isEmpty() ? DEFAULT_SCREEN_CODE : screenCode.trim(); + ScreenBindingConfigVo configVo = new ScreenBindingConfigVo(); + configVo.setScreenCode(actualScreenCode); + configVo.setUpdatedAt(DateUtils.getTime()); + configVo.setBasicBindings(createDefaultBasicBindings(boardData, actualScreenCode)); + configVo.setMachineConfigs(createDefaultMachineConfigs(boardData, actualScreenCode)); + return configVo; + } + + public static WorkshopBoardData createFallbackBoardData() { + WorkshopBoardData data = new WorkshopBoardData(); + data.getHeader().put("screenCode", "HY-CJKB-001"); + data.getHeader().put("ownerName", "张主管"); + + data.getSummary().put("total", "17"); + data.getSummary().put("online", "15"); + data.getSummary().put("running", "15"); + data.getSummary().put("stop", "2"); + data.getSummary().put("startRate", "88.2%"); + + data.getFaultList().add(row("deviceNo", "8#", "faultTime", "09:25", "faultDesc", "模温异常", "owner", "李工", "recoverTime", "10:10")); + data.getFaultList().add(row("deviceNo", "16#", "faultTime", "11:40", "faultDesc", "液压压力波动", "owner", "王工", "recoverTime", "13:00")); + data.getFaultList().add(row("deviceNo", "5#", "faultTime", "13:18", "faultDesc", "送料传感器告警", "owner", "赵工", "recoverTime", "13:45")); + + data.getMaintenanceList().add(row("deviceNo", "2#", "project", "保养润滑系统", "planTime", "2026-03-23 16:00", "status", "待执行")); + data.getMaintenanceList().add(row("deviceNo", "11#", "project", "校验温控模块", "planTime", "2026-03-23 18:00", "status", "待执行")); + data.getMaintenanceList().add(row("deviceNo", "14#", "project", "更换过滤组件", "planTime", "2026-03-24 09:00", "status", "已排期")); + + data.getMachineList().add(machineRow(6L, "6#", "MA2500/1000G", "运行", "is-running", "自动", "13小时", "600个", "2026.3.16-3.18", "25110914", "5000个", "30%", "23W 中间盖", "7037C 灰", "重点订单")); + data.getMachineList().add(machineRow(12L, "12#", "MA1600/540G", "运行", "is-running", "自动", "8小时", "305个", "2026.3.23-3.25", "25110953", "2800个", "27%", "中盖件", "灰色", "正常生产")); + data.getMachineList().add(machineRow(5L, "5#", "MA2500 2S/1000", "运行", "is-running", "自动", "6小时", "210个", "2026.3.22-3.24", "25110937", "3600个", "19%", "卡扣件", "7035 灰", "待维修")); + data.getMachineList().add(machineRow(11L, "11#", "MA3600/2250G", "运行", "is-running", "自动", "15小时", "720个", "2026.3.23-3.25", "25110950", "6500个", "33%", "大型壳体", "深蓝", "计划保养")); + data.getMachineList().add(machineRow(17L, "17#", "MA1600/540G", "运行", "is-running", "自动", "12小时", "510个", "2026.3.23-3.25", "25110961", "3600个", "53%", "面框件", "冷白", "正常生产")); + data.getMachineList().add(machineRow(4L, "4#", "MA2500/1000G", "运行", "is-running", "自动", "10小时", "488个", "2026.3.21-3.22", "25110931", "4500个", "61%", "28W 外壳", "米白", "正常生产")); + data.getMachineList().add(machineRow(10L, "10#", "MA2500/1000G", "运行", "is-running", "自动", "13小时", "610个", "2026.3.23-3.24", "25110946", "5100个", "44%", "挡板件", "黑色", "正常生产")); + data.getMachineList().add(machineRow(16L, "16#", "570", "运行", "is-running", "自动", "5小时", "190个", "2026.3.23-3.25", "25110959", "2400个", "18%", "小型卡件", "浅灰", "液压检修")); + data.getMachineList().add(machineRow(3L, "3#", "MA2500/1000G", "运行", "is-running", "自动", "8小时", "360个", "2026.3.20-3.22", "25110925", "3000个", "58%", "17W 支架", "银色", "等待换模")); + data.getMachineList().add(machineRow(9L, "9#", "MA2500/1000G", "运行", "is-running", "自动", "14小时", "680个", "2026.3.23-3.24", "25110945", "5400个", "52%", "导流板", "银灰", "正常生产")); + data.getMachineList().add(machineRow(15L, "15#", "MA1600/540G", "运行", "is-running", "自动", "11小时", "460个", "2026.3.23-3.25", "25110957", "3500个", "41%", "转接件", "深灰", "正常生产")); + data.getMachineList().add(machineRow(2L, "2#", "MA2500/1000G", "运行", "is-running", "自动", "11小时", "520个", "2026.3.18-3.20", "25110918", "4200个", "42%", "26W 面板", "黑色", "夜班优先")); + data.getMachineList().add(machineRow(8L, "8#", "MA2500/1000G", "运行", "is-running", "自动", "9小时", "430个", "2026.3.22-3.24", "25110941", "4600个", "36%", "封边件", "白色", "温控波动")); + data.getMachineList().add(machineRow(14L, "14#", "MA1600/540G", "运行", "is-running", "自动", "10小时", "395个", "2026.3.23-3.25", "25110955", "3200个", "38%", "扣合件", "亮黑", "正常生产")); + data.getMachineList().add(machineRow(1L, "1#", "MA2500/1000G", "运行", "is-running", "自动", "13小时", "600个", "2026.3.16-3.18", "25110914", "5000个", "30%", "23W 中间盖", "7037C 灰", "重点订单")); + data.getMachineList().add(machineRow(7L, "7#", "MA2500/1000G", "运行", "is-running", "自动", "4小时", "120个", "2026.3.22-3.24", "25110940", "3000个", "12%", "结构件", "深灰", "人工调试")); + data.getMachineList().add(machineRow(13L, "13#", "MA1600/540G", "运行", "is-running", "自动", "7小时", "280个", "2026.3.23-3.25", "25110954", "2600个", "31%", "面罩件", "暖白", "待料")); + + data.getDetailRealtime().add(row("name", "温度一段(A15)", "current", "186℃", "currentTime", "14:20:15", "target", "185℃", "targetTime", "14:05:00", "orderValue", "188℃", "orderTime", "08:30:00")); + data.getDetailRealtime().add(row("name", "温度二段(A16)", "current", "192℃", "currentTime", "14:20:15", "target", "190℃", "targetTime", "14:05:00", "orderValue", "192℃", "orderTime", "08:30:00")); + data.getDetailRealtime().add(row("name", "射胶压力(A243)", "current", "12.3MPa", "currentTime", "14:20:10", "target", "12.0MPa", "targetTime", "14:00:00", "orderValue", "12.5MPa", "orderTime", "08:30:00")); + + data.getDetailSetting().add(row("name", "开模行程(A060)", "setting", "320mm", "settingTime", "13:15:00", "orderValue", "325mm", "orderTime", "08:30:00")); + data.getDetailSetting().add(row("name", "锁模压力(A061)", "setting", "86%", "settingTime", "13:15:00", "orderValue", "85%", "orderTime", "08:30:00")); + data.getDetailSetting().add(row("name", "保压时间(A062)", "setting", "4.5s", "settingTime", "13:15:00", "orderValue", "4.8s", "orderTime", "08:30:00")); + + data.getDetailProduction().add(row("name", "上模循环时(A37)", "value", "28.6s", "collectTime", "14:20:11")); + data.getDetailProduction().add(row("name", "一模产出数", "value", "2", "collectTime", "14:20:11")); + data.getDetailProduction().add(row("name", "累计良品数", "value", "598", "collectTime", "14:20:11")); + return data; + } + + private static List createDefaultBasicBindings(WorkshopBoardData boardData, String screenCode) { + List result = new ArrayList(); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "header.screenCode", "看板编号", boardData.getHeader().get("screenCode"), 1, "is-running")); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "header.ownerName", "管理责任人", boardData.getHeader().get("ownerName"), 2, "is-running")); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "summary.total", "设备总数", boardData.getSummary().get("total"), 3, "is-running")); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "summary.online", "在线数量", boardData.getSummary().get("online"), 4, "is-running")); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "summary.running", "运行数量", boardData.getSummary().get("running"), 5, "is-running")); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "summary.stop", "停止数量", boardData.getSummary().get("stop"), 6, "is-running")); + result.add(binding(screenCode, SCOPE_BASIC, 0L, "summary.startRate", "开机率", boardData.getSummary().get("startRate"), 7, "is-running")); + return result; + } + + private static List createDefaultMachineConfigs(WorkshopBoardData boardData, String screenCode) { + List result = new ArrayList(); + int sortBase = 100; + for (Map machine : boardData.getMachineList()) { + Long machineId = toLong(machine.get("id")); + ScreenBindingMachineConfig machineConfig = new ScreenBindingMachineConfig(); + machineConfig.setId(machineId); + machineConfig.setStatusClass(String.valueOf(machine.get("statusClass"))); + List bindings = new ArrayList(); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "statusText", "状态文本", machine.get("statusText"), sortBase + 1, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "name", "设备编号", machine.get("name"), sortBase + 2, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "model", "设备型号", machine.get("model"), sortBase + 3, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "mode", "运行模式", machine.get("mode"), sortBase + 4, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "runtime", "今日开机时间", machine.get("runtime"), sortBase + 5, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "output", "今日计件数", machine.get("output"), sortBase + 6, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "progress", "任务进度", machine.get("progress"), sortBase + 7, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "workDate", "工单日期", machine.get("workDate"), sortBase + 8, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "batchNo", "批次号", machine.get("batchNo"), sortBase + 9, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "planQty", "计划产量", machine.get("planQty"), sortBase + 10, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "productModel", "产品型号", machine.get("productModel"), sortBase + 11, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "color", "颜色", machine.get("color"), sortBase + 12, machineConfig.getStatusClass())); + bindings.add(binding(screenCode, SCOPE_MACHINE, machineId, "remark", "备注", machine.get("remark"), sortBase + 13, machineConfig.getStatusClass())); + machineConfig.setBindings(bindings); + result.add(machineConfig); + sortBase += 100; + } + return result; + } + + private static MdScreenBinding binding(String screenCode, String scope, Long machineId, String key, String name, Object fixedValue, int sortNum, String statusClass) { + MdScreenBinding binding = new MdScreenBinding(); + binding.setScreenCode(screenCode); + binding.setBindingScope(scope); + binding.setMachineId(machineId); + binding.setBindingKey(key); + binding.setBindingName(name); + binding.setSourceType(SOURCE_FIXED); + binding.setFixedValue(fixedValue == null ? "" : String.valueOf(fixedValue)); + binding.setSortNum(sortNum); + binding.setEnableFlag("Y"); + binding.setStatusClass(statusClass); + return binding; + } + + private static Map machineRow(Long id, String name, String model, String statusText, String statusClass, String mode, + String runtime, String output, String workDate, String batchNo, String planQty, + String progress, String productModel, String color, String remark) { + return row("id", id, "name", name, "model", model, "statusText", statusText, "statusClass", statusClass, "mode", mode, + "runtime", runtime, "output", output, "workDate", workDate, "batchNo", batchNo, "planQty", planQty, + "progress", progress, "productModel", productModel, "color", color, "remark", remark); + } + + private static Map row(Object... values) { + Map result = new LinkedHashMap(); + for (int index = 0; index < values.length; index += 2) { + result.put(String.valueOf(values[index]), values[index + 1]); + } + return result; + } + + private static Long toLong(Object value) { + if (value == null) { + return 0L; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + return Long.valueOf(String.valueOf(value)); + } +} diff --git a/ktg-mes/src/main/resources/mapper/md/MdMeasurePointMapper.xml b/ktg-mes/src/main/resources/mapper/md/MdMeasurePointMapper.xml index bc1ee1b..5f1ef6d 100644 --- a/ktg-mes/src/main/resources/mapper/md/MdMeasurePointMapper.xml +++ b/ktg-mes/src/main/resources/mapper/md/MdMeasurePointMapper.xml @@ -69,6 +69,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" limit 1 + + insert into md_measure_point diff --git a/ktg-mes/src/main/resources/mapper/md/MdScreenBindingMapper.xml b/ktg-mes/src/main/resources/mapper/md/MdScreenBindingMapper.xml new file mode 100644 index 0000000..4ce930b --- /dev/null +++ b/ktg-mes/src/main/resources/mapper/md/MdScreenBindingMapper.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select binding_id, screen_code, workshop_id, workshop_code, workshop_name, binding_scope, machine_id, + binding_key, binding_name, source_type, point_id, point_code, point_name, fixed_value, + default_value, display_unit, precision_digit, status_class, sort_num, enable_flag, + remark, create_by, create_time, update_by, update_time + from md_screen_binding + + + + + + + + + + insert into md_screen_binding + + screen_code, + workshop_id, + workshop_code, + workshop_name, + binding_scope, + machine_id, + binding_key, + binding_name, + source_type, + point_id, + point_code, + point_name, + fixed_value, + default_value, + display_unit, + precision_digit, + status_class, + sort_num, + enable_flag, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{screenCode}, + #{workshopId}, + #{workshopCode}, + #{workshopName}, + #{bindingScope}, + #{machineId}, + #{bindingKey}, + #{bindingName}, + #{sourceType}, + #{pointId}, + #{pointCode}, + #{pointName}, + #{fixedValue}, + #{defaultValue}, + #{displayUnit}, + #{precisionDigit}, + #{statusClass}, + #{sortNum}, + #{enableFlag}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + insert into md_screen_binding + ( + screen_code, workshop_id, workshop_code, workshop_name, binding_scope, machine_id, + binding_key, binding_name, source_type, point_id, point_code, point_name, + fixed_value, default_value, display_unit, precision_digit, status_class, sort_num, + enable_flag, remark, create_by, create_time, update_by, update_time + ) + values + + ( + #{item.screenCode}, #{item.workshopId}, #{item.workshopCode}, #{item.workshopName}, #{item.bindingScope}, #{item.machineId}, + #{item.bindingKey}, #{item.bindingName}, #{item.sourceType}, #{item.pointId}, #{item.pointCode}, #{item.pointName}, + #{item.fixedValue}, #{item.defaultValue}, #{item.displayUnit}, #{item.precisionDigit}, #{item.statusClass}, #{item.sortNum}, + #{item.enableFlag}, #{item.remark}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime} + ) + + + + + update md_screen_binding + + screen_code = #{screenCode}, + workshop_id = #{workshopId}, + workshop_code = #{workshopCode}, + workshop_name = #{workshopName}, + binding_scope = #{bindingScope}, + machine_id = #{machineId}, + binding_key = #{bindingKey}, + binding_name = #{bindingName}, + source_type = #{sourceType}, + point_id = #{pointId}, + point_code = #{pointCode}, + point_name = #{pointName}, + fixed_value = #{fixedValue}, + default_value = #{defaultValue}, + display_unit = #{displayUnit}, + precision_digit = #{precisionDigit}, + status_class = #{statusClass}, + sort_num = #{sortNum}, + enable_flag = #{enableFlag}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where binding_id = #{bindingId} + + + + delete from md_screen_binding where binding_id = #{bindingId} + + + + delete from md_screen_binding where binding_id in + + #{bindingId} + + + + + delete from md_screen_binding where screen_code = #{screenCode} + +