From b6ca71b214affb964904aa6142674aa120b3406a Mon Sep 17 00:00:00 2001 From: dashixiong Date: Wed, 1 Apr 2026 16:23:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E9=87=8F=E7=82=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ktg-admin/src/main/resources/application.yml | 2 +- .../BoardPointBindingController.java | 42 +++ .../controller/BoardScreenInfoController.java | 93 +++++++ .../controller/WorkshopBoardController.java | 5 + .../mes/board/domain/BoardMachineCard.java | 130 +++++++++ .../mes/board/domain/BoardOrderProgress.java | 162 +++++++++++ .../mes/board/domain/BoardPointBinding.java | 117 ++++++++ .../ktg/mes/board/domain/BoardScreenInfo.java | 132 +++++++++ .../board/domain/vo/BoardScreenConfigVo.java | 37 +++ .../mapper/BoardOrderProgressMapper.java | 25 ++ .../board/mapper/BoardPointBindingMapper.java | 25 ++ .../board/mapper/BoardScreenInfoMapper.java | 19 ++ .../service/IBoardPointBindingService.java | 19 ++ .../service/IBoardScreenInfoService.java | 19 ++ .../impl/BoardPointBindingServiceImpl.java | 90 +++++++ .../impl/BoardScreenInfoServiceImpl.java | 76 ++++++ .../impl/WorkshopBoardServiceImpl.java | 198 ++++++-------- .../support/BoardDisplayValueMapper.java | 74 +++++ .../ktg/mes/board/task/BoardQuartzTask.java | 253 ++++++++++++++++++ .../com/ktg/mes/dv/domain/DvCheckPlan.java | 12 + .../java/com/ktg/mes/dv/domain/DvRepair.java | 12 +- .../ktg/mes/dv/domain/dto/DvCheckPlanDTO.java | 19 +- .../ktg/mes/dv/domain/dto/DvRepairDTO.java | 11 +- .../com/ktg/mes/md/config/InfluxDbConfig.java | 9 + .../controller/MdMeasurePointController.java | 19 ++ .../md/service/IMdMeasurePointService.java | 2 + .../impl/MdMeasurePointInfluxService.java | 35 ++- .../impl/MdMeasurePointServiceImpl.java | 146 +++++++++- .../mes/pro/controller/vo/ProRouteHomeVO.java | 25 +- .../pro/controller/vo/ProWorkorderHomeVO.java | 9 +- .../com/ktg/mes/report/bean/PmReportBean.java | 3 + .../com/ktg/mes/websocket/MesWebSocket.java | 3 + .../ktg/mes/wm/domain/vo/WmAreaPrintVO.java | 19 +- .../mapper/board/BoardOrderProgressMapper.xml | 151 +++++++++++ .../mapper/board/BoardPointBindingMapper.xml | 112 ++++++++ .../mapper/board/BoardScreenInfoMapper.xml | 92 +++++++ .../resources/mapper/dv/DvCheckPlanMapper.xml | 10 +- .../resources/mapper/dv/DvMachineryMapper.xml | 4 +- 38 files changed, 2053 insertions(+), 158 deletions(-) create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardPointBindingController.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardScreenInfoController.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardMachineCard.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardOrderProgress.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardPointBinding.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardScreenInfo.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/domain/vo/BoardScreenConfigVo.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardOrderProgressMapper.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardPointBindingMapper.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardScreenInfoMapper.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardPointBindingService.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardScreenInfoService.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardPointBindingServiceImpl.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardScreenInfoServiceImpl.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/support/BoardDisplayValueMapper.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/board/task/BoardQuartzTask.java create mode 100644 ktg-mes/src/main/resources/mapper/board/BoardOrderProgressMapper.xml create mode 100644 ktg-mes/src/main/resources/mapper/board/BoardPointBindingMapper.xml create mode 100644 ktg-mes/src/main/resources/mapper/board/BoardScreenInfoMapper.xml diff --git a/ktg-admin/src/main/resources/application.yml b/ktg-admin/src/main/resources/application.yml index d498460..318affb 100644 --- a/ktg-admin/src/main/resources/application.yml +++ b/ktg-admin/src/main/resources/application.yml @@ -147,5 +147,5 @@ influxdb: bucket: mes token: -okZX8Re-PY3tEPV1_e7w-u9bvZlGnoMwpIEKjTQnpaZ3GyVJM9U72WLb5hNAQIDlCNU0NlfgoFQA__mhyUAxw== measurement: device_point + display-zone: Asia/Shanghai timeout-millis: 10000 - diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardPointBindingController.java b/ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardPointBindingController.java new file mode 100644 index 0000000..fe9b554 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardPointBindingController.java @@ -0,0 +1,42 @@ +package com.ktg.mes.board.controller; + +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.domain.AjaxResult; +import com.ktg.common.core.page.TableDataInfo; +import com.ktg.mes.board.domain.BoardPointBinding; +import com.ktg.mes.board.service.IBoardPointBindingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +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 java.util.List; + +@RestController +@RequestMapping("/mes/board/binding") +public class BoardPointBindingController extends BaseController { + @Autowired + private IBoardPointBindingService boardPointBindingService; + + @GetMapping("/list") + public TableDataInfo list(BoardPointBinding boardPointBinding) { + startPage(); + List list = boardPointBindingService.selectBoardPointBindingList(boardPointBinding); + return getDataTable(list); + } + + @GetMapping("/config") + public AjaxResult config(@RequestParam(value = "screenCode", required = false) String screenCode) { + return AjaxResult.success(boardPointBindingService.selectByScreenCode(screenCode)); + } + + @PostMapping("/config") + public AjaxResult save(@RequestParam(value = "screenCode", required = false) String screenCode, + @RequestBody List bindings) { + boardPointBindingService.saveByScreenCode(screenCode, bindings, getUsername()); + return AjaxResult.success(boardPointBindingService.selectByScreenCode(screenCode)); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardScreenInfoController.java b/ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardScreenInfoController.java new file mode 100644 index 0000000..a296f16 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/controller/BoardScreenInfoController.java @@ -0,0 +1,93 @@ +package com.ktg.mes.board.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.mes.board.domain.BoardScreenInfo; +import com.ktg.mes.board.domain.vo.BoardScreenConfigVo; +import com.ktg.mes.board.service.IBoardPointBindingService; +import com.ktg.mes.board.service.IBoardScreenInfoService; +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 java.util.List; + +@RestController +@RequestMapping("/mes/board/screen") +public class BoardScreenInfoController extends BaseController { + @Autowired + private IBoardScreenInfoService boardScreenInfoService; + + @Autowired + private IBoardPointBindingService boardPointBindingService; + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:list')") + @GetMapping("/list") + public TableDataInfo list(BoardScreenInfo boardScreenInfo) { + startPage(); + List list = boardScreenInfoService.selectBoardScreenInfoList(boardScreenInfo); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:query')") + @GetMapping("/{screenId}") + public AjaxResult getInfo(@PathVariable("screenId") Long screenId) { + return AjaxResult.success(boardScreenInfoService.selectBoardScreenInfoByScreenId(screenId)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:add')") + @Log(title = "看板信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BoardScreenInfo boardScreenInfo) { + boardScreenInfo.setCreateBy(getUsername()); + return toAjax(boardScreenInfoService.insertBoardScreenInfo(boardScreenInfo)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:edit')") + @Log(title = "看板信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BoardScreenInfo boardScreenInfo) { + boardScreenInfo.setUpdateBy(getUsername()); + return toAjax(boardScreenInfoService.updateBoardScreenInfo(boardScreenInfo)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:remove')") + @Log(title = "看板信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{screenIds}") + public AjaxResult remove(@PathVariable Long[] screenIds) { + return toAjax(boardScreenInfoService.deleteBoardScreenInfoByScreenIds(screenIds)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:query')") + @GetMapping("/config") + public AjaxResult getConfig(@RequestParam("screenId") Long screenId) { + return AjaxResult.success(boardPointBindingService.selectByScreenId(screenId)); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:edit')") + @Log(title = "看板绑定配置", businessType = BusinessType.UPDATE) + @PostMapping("/config") + public AjaxResult saveConfig(@RequestBody BoardScreenConfigVo configVo) { + boardPointBindingService.saveByScreenId(configVo.getScreenId(), configVo.getBindings(), getUsername()); + return AjaxResult.success("保存成功", boardPointBindingService.selectByScreenId(configVo.getScreenId())); + } + + @PreAuthorize("@ss.hasPermi('mes:md:screenbinding:remove')") + @Log(title = "看板绑定配置", businessType = BusinessType.CLEAN) + @DeleteMapping("/config") + public AjaxResult resetConfig(@RequestParam("screenId") Long screenId) { + boardPointBindingService.deleteByScreenId(screenId); + return AjaxResult.success("已清空绑定配置"); + } +} 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 index bd3816e..91cfcdc 100644 --- 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 @@ -2,6 +2,7 @@ package com.ktg.mes.board.controller; import com.ktg.common.core.domain.AjaxResult; import com.ktg.mes.board.service.IWorkshopBoardService; +import com.ktg.mes.board.task.BoardQuartzTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,8 +15,12 @@ public class WorkshopBoardController { @Autowired private IWorkshopBoardService workshopBoardService; + @Autowired + private BoardQuartzTask boardQuartzTask; + @GetMapping("/data") public AjaxResult data(@RequestParam(value = "screenCode", required = false) String screenCode) { + boardQuartzTask.syncByScreenCode(screenCode); return AjaxResult.success(workshopBoardService.getBoardData(screenCode)); } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardMachineCard.java b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardMachineCard.java new file mode 100644 index 0000000..7fe29d2 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardMachineCard.java @@ -0,0 +1,130 @@ +package com.ktg.mes.board.domain; + +public class BoardMachineCard { + private Long id; + private String name; + private String model; + private String rawStatus; + private String rawMode; + private String runtime; + private String output; + private String progress; + private String workDate; + private String batchNo; + private String planQty; + private String productModel; + private String color; + private String remark; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getRawStatus() { + return rawStatus; + } + + public void setRawStatus(String rawStatus) { + this.rawStatus = rawStatus; + } + + public String getRawMode() { + return rawMode; + } + + public void setRawMode(String rawMode) { + this.rawMode = rawMode; + } + + public String getRuntime() { + return runtime; + } + + public void setRuntime(String runtime) { + this.runtime = runtime; + } + + public String getOutput() { + return output; + } + + public void setOutput(String output) { + this.output = output; + } + + public String getProgress() { + return progress; + } + + public void setProgress(String progress) { + this.progress = progress; + } + + public String getWorkDate() { + return workDate; + } + + public void setWorkDate(String workDate) { + this.workDate = workDate; + } + + public String getBatchNo() { + return batchNo; + } + + public void setBatchNo(String batchNo) { + this.batchNo = batchNo; + } + + public String getPlanQty() { + return planQty; + } + + public void setPlanQty(String planQty) { + this.planQty = planQty; + } + + public String getProductModel() { + return productModel; + } + + public void setProductModel(String productModel) { + this.productModel = productModel; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardOrderProgress.java b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardOrderProgress.java new file mode 100644 index 0000000..72d927f --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardOrderProgress.java @@ -0,0 +1,162 @@ +package com.ktg.mes.board.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ktg.common.core.domain.BaseEntity; + +import java.util.Date; + +public class BoardOrderProgress extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long progressId; + + private Long screenId; + + private String screenCode; + + private Long machineryId; + + private String machineryCode; + + private String machineryName; + + private String machineryModel; + + private String deviceStatus; + + private String runMode; + + private String todayRunTime; + + private String todayPieceCount; + + private String taskProgress; + + private String batchCode; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date collectTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date refreshTime; + + public Long getProgressId() { + return progressId; + } + + public void setProgressId(Long progressId) { + this.progressId = progressId; + } + + public Long getScreenId() { + return screenId; + } + + public void setScreenId(Long screenId) { + this.screenId = screenId; + } + + public String getScreenCode() { + return screenCode; + } + + public void setScreenCode(String screenCode) { + this.screenCode = screenCode; + } + + public Long getMachineryId() { + return machineryId; + } + + public void setMachineryId(Long machineryId) { + this.machineryId = machineryId; + } + + public String getMachineryCode() { + return machineryCode; + } + + public void setMachineryCode(String machineryCode) { + this.machineryCode = machineryCode; + } + + public String getMachineryName() { + return machineryName; + } + + public void setMachineryName(String machineryName) { + this.machineryName = machineryName; + } + + public String getMachineryModel() { + return machineryModel; + } + + public void setMachineryModel(String machineryModel) { + this.machineryModel = machineryModel; + } + + public String getDeviceStatus() { + return deviceStatus; + } + + public void setDeviceStatus(String deviceStatus) { + this.deviceStatus = deviceStatus; + } + + public String getRunMode() { + return runMode; + } + + public void setRunMode(String runMode) { + this.runMode = runMode; + } + + public String getTodayRunTime() { + return todayRunTime; + } + + public void setTodayRunTime(String todayRunTime) { + this.todayRunTime = todayRunTime; + } + + public String getTodayPieceCount() { + return todayPieceCount; + } + + public void setTodayPieceCount(String todayPieceCount) { + this.todayPieceCount = todayPieceCount; + } + + public String getTaskProgress() { + return taskProgress; + } + + public void setTaskProgress(String taskProgress) { + this.taskProgress = taskProgress; + } + + public String getBatchCode() { + return batchCode; + } + + public void setBatchCode(String batchCode) { + this.batchCode = batchCode; + } + + public Date getCollectTime() { + return collectTime; + } + + public void setCollectTime(Date collectTime) { + this.collectTime = collectTime; + } + + public Date getRefreshTime() { + return refreshTime; + } + + public void setRefreshTime(Date refreshTime) { + this.refreshTime = refreshTime; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardPointBinding.java b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardPointBinding.java new file mode 100644 index 0000000..cf821cd --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardPointBinding.java @@ -0,0 +1,117 @@ +package com.ktg.mes.board.domain; + +import com.ktg.common.core.domain.BaseEntity; + +public class BoardPointBinding extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long bindingId; + + private Long screenId; + + private String screenCode; + + private Long machineryId; + + private String machineryCode; + + private String bindingField; + + private Long pointId; + + private String pointCode; + + private String pointName; + + private Integer sortNum; + + private String enableFlag; + + public Long getBindingId() { + return bindingId; + } + + public void setBindingId(Long bindingId) { + this.bindingId = bindingId; + } + + public Long getScreenId() { + return screenId; + } + + public void setScreenId(Long screenId) { + this.screenId = screenId; + } + + public String getScreenCode() { + return screenCode; + } + + public void setScreenCode(String screenCode) { + this.screenCode = screenCode; + } + + public Long getMachineryId() { + return machineryId; + } + + public void setMachineryId(Long machineryId) { + this.machineryId = machineryId; + } + + public String getMachineryCode() { + return machineryCode; + } + + public void setMachineryCode(String machineryCode) { + this.machineryCode = machineryCode; + } + + public String getBindingField() { + return bindingField; + } + + public void setBindingField(String bindingField) { + this.bindingField = bindingField; + } + + 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 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; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardScreenInfo.java b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardScreenInfo.java new file mode 100644 index 0000000..4482545 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/domain/BoardScreenInfo.java @@ -0,0 +1,132 @@ +package com.ktg.mes.board.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ktg.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +public class BoardScreenInfo extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long screenId; + + private String screenCode; + + private String ownerName; + + private Long workshopId; + + private String workshopCode; + + private String workshopName; + + private Integer deviceTotal; + + private Integer onlineCount; + + private Integer runningCount; + + private Integer stopCount; + + private BigDecimal startRate; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date latestRefreshTime; + + public Long getScreenId() { + return screenId; + } + + public void setScreenId(Long screenId) { + this.screenId = screenId; + } + + public String getScreenCode() { + return screenCode; + } + + public void setScreenCode(String screenCode) { + this.screenCode = screenCode; + } + + public String getOwnerName() { + return ownerName; + } + + public void setOwnerName(String ownerName) { + this.ownerName = ownerName; + } + + 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 Integer getDeviceTotal() { + return deviceTotal; + } + + public void setDeviceTotal(Integer deviceTotal) { + this.deviceTotal = deviceTotal; + } + + public Integer getOnlineCount() { + return onlineCount; + } + + public void setOnlineCount(Integer onlineCount) { + this.onlineCount = onlineCount; + } + + public Integer getRunningCount() { + return runningCount; + } + + public void setRunningCount(Integer runningCount) { + this.runningCount = runningCount; + } + + public Integer getStopCount() { + return stopCount; + } + + public void setStopCount(Integer stopCount) { + this.stopCount = stopCount; + } + + public BigDecimal getStartRate() { + return startRate; + } + + public void setStartRate(BigDecimal startRate) { + this.startRate = startRate; + } + + public Date getLatestRefreshTime() { + return latestRefreshTime; + } + + public void setLatestRefreshTime(Date latestRefreshTime) { + this.latestRefreshTime = latestRefreshTime; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/domain/vo/BoardScreenConfigVo.java b/ktg-mes/src/main/java/com/ktg/mes/board/domain/vo/BoardScreenConfigVo.java new file mode 100644 index 0000000..eb37300 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/domain/vo/BoardScreenConfigVo.java @@ -0,0 +1,37 @@ +package com.ktg.mes.board.domain.vo; + +import com.ktg.mes.board.domain.BoardPointBinding; + +import java.util.List; + +public class BoardScreenConfigVo { + private Long screenId; + + private String screenCode; + + private List bindings; + + public Long getScreenId() { + return screenId; + } + + public void setScreenId(Long screenId) { + this.screenId = screenId; + } + + public String getScreenCode() { + return screenCode; + } + + public void setScreenCode(String screenCode) { + this.screenCode = screenCode; + } + + public List getBindings() { + return bindings; + } + + public void setBindings(List bindings) { + this.bindings = bindings; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardOrderProgressMapper.java b/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardOrderProgressMapper.java new file mode 100644 index 0000000..08e9b91 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardOrderProgressMapper.java @@ -0,0 +1,25 @@ +package com.ktg.mes.board.mapper; + +import com.ktg.mes.board.domain.BoardMachineCard; +import com.ktg.mes.board.domain.BoardOrderProgress; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface BoardOrderProgressMapper { + BoardOrderProgress selectByScreenIdAndMachineryCode(@Param("screenId") Long screenId, @Param("machineryCode") String machineryCode); + + BoardOrderProgress selectByScreenCodeAndMachineryCode(@Param("screenCode") String screenCode, @Param("machineryCode") String machineryCode); + + List selectByScreenId(Long screenId); + + List selectByScreenCode(String screenCode); + + List selectMachineCardListByScreenId(Long screenId); + + List selectMachineCardList(String screenCode); + + int insert(BoardOrderProgress boardOrderProgress); + + int update(BoardOrderProgress boardOrderProgress); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardPointBindingMapper.java b/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardPointBindingMapper.java new file mode 100644 index 0000000..0f9ca5a --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardPointBindingMapper.java @@ -0,0 +1,25 @@ +package com.ktg.mes.board.mapper; + +import com.ktg.mes.board.domain.BoardPointBinding; + +import java.util.List; + +public interface BoardPointBindingMapper { + List selectBoardPointBindingList(BoardPointBinding boardPointBinding); + + List selectByScreenId(Long screenId); + + List selectByScreenCode(String screenCode); + + int insertBoardPointBinding(BoardPointBinding boardPointBinding); + + int updateBoardPointBinding(BoardPointBinding boardPointBinding); + + int deleteBoardPointBindingByBindingIds(Long[] bindingIds); + + int deleteByScreenId(Long screenId); + + int deleteByScreenCode(String screenCode); + + int batchInsertBoardPointBinding(List list); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardScreenInfoMapper.java b/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardScreenInfoMapper.java new file mode 100644 index 0000000..566df13 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/mapper/BoardScreenInfoMapper.java @@ -0,0 +1,19 @@ +package com.ktg.mes.board.mapper; + +import com.ktg.mes.board.domain.BoardScreenInfo; + +import java.util.List; + +public interface BoardScreenInfoMapper { + BoardScreenInfo selectByScreenId(Long screenId); + + BoardScreenInfo selectByScreenCode(String screenCode); + + List selectBoardScreenInfoList(BoardScreenInfo boardScreenInfo); + + int insert(BoardScreenInfo boardScreenInfo); + + int update(BoardScreenInfo boardScreenInfo); + + int deleteByScreenIds(Long[] screenIds); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardPointBindingService.java b/ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardPointBindingService.java new file mode 100644 index 0000000..d787328 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardPointBindingService.java @@ -0,0 +1,19 @@ +package com.ktg.mes.board.service; + +import com.ktg.mes.board.domain.BoardPointBinding; + +import java.util.List; + +public interface IBoardPointBindingService { + List selectBoardPointBindingList(BoardPointBinding boardPointBinding); + + List selectByScreenId(Long screenId); + + List selectByScreenCode(String screenCode); + + int saveByScreenId(Long screenId, List bindings, String operName); + + int saveByScreenCode(String screenCode, List bindings, String operName); + + int deleteByScreenId(Long screenId); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardScreenInfoService.java b/ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardScreenInfoService.java new file mode 100644 index 0000000..f6e91f2 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/service/IBoardScreenInfoService.java @@ -0,0 +1,19 @@ +package com.ktg.mes.board.service; + +import com.ktg.mes.board.domain.BoardScreenInfo; + +import java.util.List; + +public interface IBoardScreenInfoService { + BoardScreenInfo selectBoardScreenInfoByScreenId(Long screenId); + + BoardScreenInfo selectBoardScreenInfoByScreenCode(String screenCode); + + List selectBoardScreenInfoList(BoardScreenInfo boardScreenInfo); + + int insertBoardScreenInfo(BoardScreenInfo boardScreenInfo); + + int updateBoardScreenInfo(BoardScreenInfo boardScreenInfo); + + int deleteBoardScreenInfoByScreenIds(Long[] screenIds); +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardPointBindingServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardPointBindingServiceImpl.java new file mode 100644 index 0000000..872a1ee --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardPointBindingServiceImpl.java @@ -0,0 +1,90 @@ +package com.ktg.mes.board.service.impl; + +import com.ktg.common.utils.DateUtils; +import com.ktg.common.utils.StringUtils; +import com.ktg.mes.board.domain.BoardPointBinding; +import com.ktg.mes.board.domain.BoardScreenInfo; +import com.ktg.mes.board.mapper.BoardPointBindingMapper; +import com.ktg.mes.board.mapper.BoardScreenInfoMapper; +import com.ktg.mes.board.service.IBoardPointBindingService; +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.List; + +@Service +public class BoardPointBindingServiceImpl implements IBoardPointBindingService { + @Autowired + private BoardPointBindingMapper boardPointBindingMapper; + + @Autowired + private BoardScreenInfoMapper boardScreenInfoMapper; + + @Override + public List selectBoardPointBindingList(BoardPointBinding boardPointBinding) { + return boardPointBindingMapper.selectBoardPointBindingList(boardPointBinding); + } + + @Override + public List selectByScreenId(Long screenId) { + return boardPointBindingMapper.selectByScreenId(screenId); + } + + @Override + public List selectByScreenCode(String screenCode) { + return boardPointBindingMapper.selectByScreenCode(screenCode); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int saveByScreenId(Long screenId, List bindings, String operName) { + if (screenId == null) { + return 0; + } + BoardScreenInfo screenInfo = boardScreenInfoMapper.selectByScreenId(screenId); + if (screenInfo == null) { + return 0; + } + boardPointBindingMapper.deleteByScreenId(screenId); + if (bindings == null || bindings.isEmpty()) { + return 1; + } + List rows = new ArrayList(); + int sortNum = 1; + for (BoardPointBinding binding : bindings) { + if (binding == null || StringUtils.isBlank(binding.getBindingField()) || StringUtils.isBlank(binding.getMachineryCode())) { + continue; + } + binding.setBindingId(null); + binding.setScreenId(screenId); + binding.setScreenCode(screenInfo.getScreenCode()); + binding.setSortNum(binding.getSortNum() == null ? sortNum++ : binding.getSortNum()); + binding.setEnableFlag(StringUtils.isBlank(binding.getEnableFlag()) ? "Y" : binding.getEnableFlag()); + binding.setCreateBy(operName); + binding.setCreateTime(DateUtils.getNowDate()); + rows.add(binding); + } + if (rows.isEmpty()) { + return 1; + } + return boardPointBindingMapper.batchInsertBoardPointBinding(rows); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int saveByScreenCode(String screenCode, List bindings, String operName) { + String actualScreenCode = StringUtils.isBlank(screenCode) ? "WORKSHOP_BOARD_DEFAULT" : screenCode.trim(); + BoardScreenInfo screenInfo = boardScreenInfoMapper.selectByScreenCode(actualScreenCode); + if (screenInfo == null) { + return 0; + } + return saveByScreenId(screenInfo.getScreenId(), bindings, operName); + } + + @Override + public int deleteByScreenId(Long screenId) { + return boardPointBindingMapper.deleteByScreenId(screenId); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardScreenInfoServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardScreenInfoServiceImpl.java new file mode 100644 index 0000000..579f161 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/service/impl/BoardScreenInfoServiceImpl.java @@ -0,0 +1,76 @@ +package com.ktg.mes.board.service.impl; + +import com.ktg.common.utils.DateUtils; +import com.ktg.common.utils.StringUtils; +import com.ktg.mes.board.domain.BoardScreenInfo; +import com.ktg.mes.board.mapper.BoardPointBindingMapper; +import com.ktg.mes.board.mapper.BoardScreenInfoMapper; +import com.ktg.mes.board.service.IBoardScreenInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class BoardScreenInfoServiceImpl implements IBoardScreenInfoService { + @Autowired + private BoardScreenInfoMapper boardScreenInfoMapper; + + @Autowired + private BoardPointBindingMapper boardPointBindingMapper; + + @Override + public BoardScreenInfo selectBoardScreenInfoByScreenId(Long screenId) { + return boardScreenInfoMapper.selectByScreenId(screenId); + } + + @Override + public BoardScreenInfo selectBoardScreenInfoByScreenCode(String screenCode) { + return boardScreenInfoMapper.selectByScreenCode(screenCode); + } + + @Override + public List selectBoardScreenInfoList(BoardScreenInfo boardScreenInfo) { + return boardScreenInfoMapper.selectBoardScreenInfoList(boardScreenInfo); + } + + @Override + public int insertBoardScreenInfo(BoardScreenInfo boardScreenInfo) { + boardScreenInfo.setCreateTime(DateUtils.getNowDate()); + if (boardScreenInfo.getDeviceTotal() == null) { + boardScreenInfo.setDeviceTotal(0); + } + if (boardScreenInfo.getOnlineCount() == null) { + boardScreenInfo.setOnlineCount(0); + } + if (boardScreenInfo.getRunningCount() == null) { + boardScreenInfo.setRunningCount(0); + } + if (boardScreenInfo.getStopCount() == null) { + boardScreenInfo.setStopCount(0); + } + return boardScreenInfoMapper.insert(boardScreenInfo); + } + + @Override + public int updateBoardScreenInfo(BoardScreenInfo boardScreenInfo) { + boardScreenInfo.setUpdateTime(DateUtils.getNowDate()); + return boardScreenInfoMapper.update(boardScreenInfo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteBoardScreenInfoByScreenIds(Long[] screenIds) { + if (screenIds == null || screenIds.length == 0) { + return 0; + } + for (Long screenId : screenIds) { + if (screenId == null) { + continue; + } + boardPointBindingMapper.deleteByScreenId(screenId); + } + return boardScreenInfoMapper.deleteByScreenIds(screenIds); + } +} 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 index bdce446..4c494ed 100644 --- 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 @@ -1,152 +1,104 @@ package com.ktg.mes.board.service.impl; import com.ktg.common.utils.StringUtils; +import com.ktg.mes.board.domain.BoardMachineCard; +import com.ktg.mes.board.domain.BoardScreenInfo; import com.ktg.mes.board.domain.WorkshopBoardData; +import com.ktg.mes.board.mapper.BoardOrderProgressMapper; +import com.ktg.mes.board.mapper.BoardScreenInfoMapper; 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 com.ktg.mes.board.support.BoardDisplayValueMapper; 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; + private static final String DEFAULT_SCREEN_CODE = "WORKSHOP_BOARD_DEFAULT"; @Autowired - private IMdMeasurePointService mdMeasurePointService; + private BoardScreenInfoMapper boardScreenInfoMapper; + + @Autowired + private BoardOrderProgressMapper boardOrderProgressMapper; @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(); + String actualScreenCode = StringUtils.isBlank(screenCode) ? DEFAULT_SCREEN_CODE : screenCode.trim(); + WorkshopBoardData data = new WorkshopBoardData(); + BoardScreenInfo screenInfo = boardScreenInfoMapper.selectByScreenCode(actualScreenCode); + if (screenInfo != null) { + data.setHeader(buildHeader(screenInfo, actualScreenCode)); + data.setSummary(buildSummary(screenInfo)); } else { - value = binding.getFixedValue(); + data.getHeader().put("screenCode", actualScreenCode); + data.getHeader().put("ownerName", "--"); + data.getSummary().put("total", "0"); + data.getSummary().put("online", "0"); + data.getSummary().put("running", "0"); + data.getSummary().put("stop", "0"); + data.getSummary().put("startRate", "0%"); } - if (StringUtils.isEmpty(value)) { - value = binding.getDefaultValue(); + List machineCards = screenInfo != null && screenInfo.getScreenId() != null + ? boardOrderProgressMapper.selectMachineCardListByScreenId(screenInfo.getScreenId()) + : boardOrderProgressMapper.selectMachineCardList(actualScreenCode); + for (BoardMachineCard machineCard : machineCards) { + data.getMachineList().add(toMachineMap(machineCard)); } - 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(); + return data; } - 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 Map buildHeader(BoardScreenInfo screenInfo, String screenCode) { + Map header = new LinkedHashMap(); + header.put("screenCode", StringUtils.defaultIfBlank(screenInfo.getScreenCode(), screenCode)); + header.put("ownerName", StringUtils.defaultIfBlank(screenInfo.getOwnerName(), "--")); + return header; } - private Long toLong(Object value) { - if (value == null) { - return 0L; - } - if (value instanceof Number) { - return ((Number) value).longValue(); - } - return Long.valueOf(String.valueOf(value)); + private Map buildSummary(BoardScreenInfo screenInfo) { + Map summary = new LinkedHashMap(); + summary.put("total", String.valueOf(defaultInt(screenInfo.getDeviceTotal()))); + summary.put("online", String.valueOf(defaultInt(screenInfo.getOnlineCount()))); + summary.put("running", String.valueOf(defaultInt(screenInfo.getRunningCount()))); + summary.put("stop", String.valueOf(defaultInt(screenInfo.getStopCount()))); + summary.put("startRate", formatPercent(screenInfo.getStartRate())); + return summary; + } + + private Map toMachineMap(BoardMachineCard machineCard) { + Map map = new LinkedHashMap(); + map.put("id", machineCard.getId()); + map.put("name", defaultText(machineCard.getName())); + map.put("model", defaultText(machineCard.getModel())); + map.put("statusText", BoardDisplayValueMapper.toDeviceStatusText(machineCard.getRawStatus())); + map.put("statusClass", BoardDisplayValueMapper.toStatusClass(machineCard.getRawStatus())); + map.put("mode", BoardDisplayValueMapper.toRunModeText(machineCard.getRawMode())); + map.put("runtime", defaultText(machineCard.getRuntime())); + map.put("output", defaultText(machineCard.getOutput())); + map.put("progress", defaultText(machineCard.getProgress())); + map.put("workDate", defaultText(machineCard.getWorkDate())); + map.put("batchNo", defaultText(machineCard.getBatchNo())); + map.put("planQty", defaultText(machineCard.getPlanQty())); + map.put("productModel", defaultText(machineCard.getProductModel())); + map.put("color", defaultText(machineCard.getColor())); + map.put("remark", defaultText(machineCard.getRemark())); + return map; + } + + private String defaultText(String value) { + return StringUtils.isBlank(value) ? "--" : value; + } + + private int defaultInt(Integer value) { + return value == null ? 0 : value; + } + + private String formatPercent(BigDecimal value) { + BigDecimal actualValue = value == null ? BigDecimal.ZERO : value; + return actualValue.stripTrailingZeros().toPlainString() + "%"; } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/support/BoardDisplayValueMapper.java b/ktg-mes/src/main/java/com/ktg/mes/board/support/BoardDisplayValueMapper.java new file mode 100644 index 0000000..d991b15 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/support/BoardDisplayValueMapper.java @@ -0,0 +1,74 @@ +package com.ktg.mes.board.support; + +import com.ktg.common.utils.StringUtils; + +public final class BoardDisplayValueMapper { + private static final String STATUS_IDLE = "1"; + private static final String STATUS_RUNNING = "2"; + private static final String STATUS_FAULT = "3"; + + private static final String RUN_MODE_MANUAL = "0"; + private static final String RUN_MODE_SEMI_AUTO = "1"; + private static final String RUN_MODE_PHOTOEYE_AUTO = "2"; + private static final String RUN_MODE_TIME_AUTO = "3"; + + private BoardDisplayValueMapper() { + } + + public static String toDeviceStatusText(String rawStatus) { + if (StringUtils.isBlank(rawStatus)) { + return "--"; + } + if (STATUS_IDLE.equals(rawStatus)) { + return "待机"; + } + if (STATUS_RUNNING.equals(rawStatus)) { + return "运行"; + } + if (STATUS_FAULT.equals(rawStatus)) { + return "故障"; + } + return "--"; + } + + public static String toRunModeText(String rawMode) { + if (StringUtils.isBlank(rawMode)) { + return "--"; + } + if (RUN_MODE_MANUAL.equals(rawMode)) { + return "手动"; + } + if (RUN_MODE_SEMI_AUTO.equals(rawMode)) { + return "半自动"; + } + if (RUN_MODE_PHOTOEYE_AUTO.equals(rawMode)) { + return "电眼自动"; + } + if (RUN_MODE_TIME_AUTO.equals(rawMode)) { + return "时间自动"; + } + return "调模使用"; + } + + public static String toStatusClass(String rawStatus) { + if (STATUS_RUNNING.equals(rawStatus)) { + return "is-running"; + } + if (STATUS_FAULT.equals(rawStatus)) { + return "is-stop"; + } + return "is-idle"; + } + + public static boolean isRunning(String rawStatus) { + return STATUS_RUNNING.equals(rawStatus); + } + + public static boolean isOnline(String rawStatus) { + return STATUS_IDLE.equals(rawStatus) || STATUS_RUNNING.equals(rawStatus); + } + + public static boolean isStop(String rawStatus) { + return STATUS_FAULT.equals(rawStatus); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/board/task/BoardQuartzTask.java b/ktg-mes/src/main/java/com/ktg/mes/board/task/BoardQuartzTask.java new file mode 100644 index 0000000..4bf9067 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/board/task/BoardQuartzTask.java @@ -0,0 +1,253 @@ +package com.ktg.mes.board.task; + +import com.ktg.common.utils.DateUtils; +import com.ktg.common.utils.StringUtils; +import com.ktg.mes.board.domain.BoardOrderProgress; +import com.ktg.mes.board.domain.BoardPointBinding; +import com.ktg.mes.board.domain.BoardScreenInfo; +import com.ktg.mes.board.mapper.BoardOrderProgressMapper; +import com.ktg.mes.board.mapper.BoardPointBindingMapper; +import com.ktg.mes.board.mapper.BoardScreenInfoMapper; +import com.ktg.mes.board.support.BoardDisplayValueMapper; +import com.ktg.mes.dv.domain.DvMachinery; +import com.ktg.mes.dv.mapper.DvMachineryMapper; +import com.ktg.mes.md.domain.MdMeasurePoint; +import com.ktg.mes.md.service.IMdMeasurePointService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.util.Date; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.ktg.mes.md.domain.MeasurePointHistoryItem; + +@Component("boardQuartzTask") +public class BoardQuartzTask { + private static final String DEFAULT_SCREEN_CODE = "WORKSHOP_BOARD_DEFAULT"; + + @Autowired + private BoardPointBindingMapper boardPointBindingMapper; + + @Autowired + private BoardOrderProgressMapper boardOrderProgressMapper; + + @Autowired + private BoardScreenInfoMapper boardScreenInfoMapper; + + @Autowired + private IMdMeasurePointService mdMeasurePointService; + + @Autowired + private DvMachineryMapper dvMachineryMapper; + + public void syncDefaultScreen() { + syncConfiguredScreens(); + } + + public void syncConfiguredScreens() { + List screenInfoList = boardScreenInfoMapper.selectBoardScreenInfoList(new BoardScreenInfo()); + if (screenInfoList == null || screenInfoList.isEmpty()) { + return; + } + Set syncedScreenCodes = new HashSet(); + for (BoardScreenInfo screenInfo : screenInfoList) { + if (screenInfo == null || StringUtils.isBlank(screenInfo.getScreenCode())) { + continue; + } + String screenCode = screenInfo.getScreenCode().trim(); + if (!syncedScreenCodes.add(screenCode)) { + continue; + } + syncByScreenCode(screenCode); + } + } + + public void syncByScreenCode(String screenCode) { + String actualScreenCode = StringUtils.isBlank(screenCode) ? DEFAULT_SCREEN_CODE : screenCode.trim(); + BoardScreenInfo screenInfo = boardScreenInfoMapper.selectByScreenCode(actualScreenCode); + if (screenInfo == null || screenInfo.getScreenId() == null) { + return; + } + Long screenId = screenInfo.getScreenId(); + List bindings = boardPointBindingMapper.selectByScreenId(screenId); + Map progressMap = new LinkedHashMap(); + Date now = DateUtils.getNowDate(); + for (BoardPointBinding binding : bindings) { + if (binding == null || StringUtils.isBlank(binding.getMachineryCode())) { + continue; + } + BoardOrderProgress progress = progressMap.get(binding.getMachineryCode()); + if (progress == null) { + progress = loadOrCreateProgress(screenId, actualScreenCode, binding.getMachineryCode(), now); + progressMap.put(binding.getMachineryCode(), progress); + } + applyPointValue(progress, binding); + } + for (BoardOrderProgress progress : progressMap.values()) { + upsertProgress(progress, now); + } + refreshScreenInfo(screenId, actualScreenCode, now); + } + + private BoardOrderProgress loadOrCreateProgress(Long screenId, String screenCode, String machineryCode, Date now) { + BoardOrderProgress progress = boardOrderProgressMapper.selectByScreenIdAndMachineryCode(screenId, machineryCode); + if (progress == null) { + progress = new BoardOrderProgress(); + progress.setScreenId(screenId); + progress.setScreenCode(screenCode); + progress.setMachineryCode(machineryCode); + progress.setCreateBy("quartz"); + progress.setCreateTime(now); + } + DvMachinery machinery = loadMachinery(machineryCode); + if (machinery != null) { + progress.setMachineryId(machinery.getMachineryId()); + progress.setMachineryName(machinery.getMachineryName()); + progress.setMachineryModel(machinery.getMachinerySpec()); + } + return progress; + } + + private DvMachinery loadMachinery(String machineryCode) { + List list = dvMachineryMapper.selectByMachineryCode(machineryCode); + return list == null || list.isEmpty() ? null : list.get(0); + } + + private void applyPointValue(BoardOrderProgress progress, BoardPointBinding binding) { + MdMeasurePoint point = mdMeasurePointService.queryLatestValue(binding.getPointCode()); + if (point == null) { + return; + } + String latestValue = point.getLatestValue(); + if (StringUtils.isBlank(latestValue)) { + return; + } + if ("device_status".equals(binding.getBindingField())) { + progress.setDeviceStatus(latestValue); + } else if ("run_mode".equals(binding.getBindingField())) { + progress.setRunMode(latestValue); + } else if ("today_run_time".equals(binding.getBindingField())) { + progress.setTodayRunTime(calculateTodayRunTime(point, latestValue)); + } else if ("today_piece_count".equals(binding.getBindingField())) { + progress.setTodayPieceCount(latestValue); + } else if ("batch_code".equals(binding.getBindingField())) { + progress.setBatchCode(latestValue); + } + if (StringUtils.isNotBlank(point.getLatestTime())) { + try { + progress.setCollectTime(DateUtils.parseDate(point.getLatestTime())); + } catch (Exception ignored) { + } + } + } + + private String calculateTodayRunTime(MdMeasurePoint point, String latestValue) { + BigDecimal latest = parseDecimal(latestValue); + if (latest == null) { + return latestValue; + } + + BigDecimal yesterdayLastValue = queryYesterdayLastValue(point.getPointCode()); + if (yesterdayLastValue == null) { + return formatDecimal(latest, point.getPrecisionDigit()); + } + + BigDecimal todayRunTime = latest.subtract(yesterdayLastValue); + if (todayRunTime.compareTo(BigDecimal.ZERO) < 0) { + todayRunTime = BigDecimal.ZERO; + } + return formatDecimal(todayRunTime, point.getPrecisionDigit()); + } + + private BigDecimal queryYesterdayLastValue(String pointCode) { + LocalDate today = LocalDate.now(); + String startTime = today.minusDays(1).toString() + " 00:00:00"; + String endTime = today.toString() + " 00:00:00"; + List history = mdMeasurePointService.queryHistory(pointCode, null, null, startTime, endTime); + if (history == null || history.isEmpty()) { + return null; + } + MeasurePointHistoryItem lastItem = history.get(history.size() - 1); + return lastItem == null ? null : lastItem.getValue(); + } + + private BigDecimal parseDecimal(String value) { + if (StringUtils.isBlank(value)) { + return null; + } + try { + return new BigDecimal(value); + } catch (Exception ignored) { + return null; + } + } + + private String formatDecimal(BigDecimal value, Integer precisionDigit) { + if (value == null) { + return null; + } + if (precisionDigit != null && precisionDigit >= 0) { + value = value.setScale(precisionDigit, RoundingMode.HALF_UP); + } + return value.stripTrailingZeros().toPlainString(); + } + + private void upsertProgress(BoardOrderProgress progress, Date now) { + progress.setRefreshTime(now); + progress.setUpdateBy("quartz"); + progress.setUpdateTime(now); + if (progress.getProgressId() == null) { + boardOrderProgressMapper.insert(progress); + return; + } + boardOrderProgressMapper.update(progress); + } + + private void refreshScreenInfo(Long screenId, String screenCode, Date now) { + List list = boardOrderProgressMapper.selectByScreenId(screenId); + int deviceTotal = list.size(); + int onlineCount = 0; + int runningCount = 0; + int stopCount = 0; + for (BoardOrderProgress progress : list) { + String status = StringUtils.defaultString(progress.getDeviceStatus()); + if (BoardDisplayValueMapper.isRunning(status)) { + runningCount++; + onlineCount++; + } else if (BoardDisplayValueMapper.isOnline(status)) { + onlineCount++; + } else if (BoardDisplayValueMapper.isStop(status)) { + stopCount++; + } + } + BoardScreenInfo screenInfo = boardScreenInfoMapper.selectByScreenId(screenId); + if (screenInfo == null) { + screenInfo = new BoardScreenInfo(); + screenInfo.setScreenId(screenId); + screenInfo.setScreenCode(screenCode); + screenInfo.setCreateBy("quartz"); + screenInfo.setCreateTime(now); + } + screenInfo.setDeviceTotal(deviceTotal); + screenInfo.setOnlineCount(onlineCount); + screenInfo.setRunningCount(runningCount); + screenInfo.setStopCount(stopCount); + screenInfo.setStartRate(deviceTotal == 0 ? BigDecimal.ZERO : + new BigDecimal(runningCount).multiply(new BigDecimal("100")).divide(new BigDecimal(deviceTotal), 2, RoundingMode.HALF_UP)); + screenInfo.setLatestRefreshTime(now); + screenInfo.setUpdateBy("quartz"); + screenInfo.setUpdateTime(now); + if (screenInfo.getScreenId() == null) { + boardScreenInfoMapper.insert(screenInfo); + return; + } + boardScreenInfoMapper.update(screenInfo); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvCheckPlan.java b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvCheckPlan.java index 33d9269..a35fdae 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvCheckPlan.java +++ b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvCheckPlan.java @@ -52,6 +52,9 @@ public class DvCheckPlan extends BaseEntity @Excel(name = "状态") private String status; + /** 关联设备编码,逗号分隔 */ + private String machineryCodes; + /** 预留字段1 */ private String attr1; @@ -144,6 +147,14 @@ public class DvCheckPlan extends BaseEntity { return status; } + + public String getMachineryCodes() { + return machineryCodes; + } + + public void setMachineryCodes(String machineryCodes) { + this.machineryCodes = machineryCodes; + } public void setAttr1(String attr1) { this.attr1 = attr1; @@ -193,6 +204,7 @@ public class DvCheckPlan extends BaseEntity ", cycleType='" + cycleType + '\'' + ", cycleCount=" + cycleCount + ", status='" + status + '\'' + + ", machineryCodes='" + machineryCodes + '\'' + ", attr1='" + attr1 + '\'' + ", attr2='" + attr2 + '\'' + ", attr3=" + attr3 + diff --git a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvRepair.java b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvRepair.java index 8d00541..15fb942 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvRepair.java +++ b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/DvRepair.java @@ -53,18 +53,18 @@ public class DvRepair extends BaseEntity private Long machineryTypeId; /** 报修日期 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "报修日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "报修日期", width = 30, dateFormat = "yyyy-MM-dd") private Date requireDate; /** 维修完成日期 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "维修完成日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "维修完成日期", width = 30, dateFormat = "yyyy-MM-dd") private Date finishDate; /** 验收日期 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "验收日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "验收日期", width = 30, dateFormat = "yyyy-MM-dd") private Date confirmDate; /** 维修结果 */ diff --git a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvCheckPlanDTO.java b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvCheckPlanDTO.java index e32f745..a4f1d91 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvCheckPlanDTO.java +++ b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvCheckPlanDTO.java @@ -1,12 +1,23 @@ package com.ktg.mes.dv.domain.dto; -import lombok.Data; - -@Data public class DvCheckPlanDTO { - private String planType; private String machineryCode; + public String getPlanType() { + return planType; + } + + public void setPlanType(String planType) { + this.planType = planType; + } + + public String getMachineryCode() { + return machineryCode; + } + + public void setMachineryCode(String machineryCode) { + this.machineryCode = machineryCode; + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvRepairDTO.java b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvRepairDTO.java index f4f229c..e053d64 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvRepairDTO.java +++ b/ktg-mes/src/main/java/com/ktg/mes/dv/domain/dto/DvRepairDTO.java @@ -1,10 +1,13 @@ package com.ktg.mes.dv.domain.dto; -import lombok.Data; - -@Data public class DvRepairDTO { - private String machineryCode; + public String getMachineryCode() { + return machineryCode; + } + + public void setMachineryCode(String machineryCode) { + this.machineryCode = machineryCode; + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/config/InfluxDbConfig.java b/ktg-mes/src/main/java/com/ktg/mes/md/config/InfluxDbConfig.java index 85f933a..004c64c 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/config/InfluxDbConfig.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/config/InfluxDbConfig.java @@ -12,6 +12,7 @@ public class InfluxDbConfig { private String bucket; private String token; private String measurement; + private String displayZone = "Asia/Shanghai"; private Integer timeoutMillis = 10000; public boolean isEnabled() { @@ -62,6 +63,14 @@ public class InfluxDbConfig { this.measurement = measurement; } + public String getDisplayZone() { + return displayZone; + } + + public void setDisplayZone(String displayZone) { + this.displayZone = displayZone; + } + public Integer getTimeoutMillis() { return timeoutMillis; } diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdMeasurePointController.java b/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdMeasurePointController.java index 1c8a789..85b3bfd 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdMeasurePointController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdMeasurePointController.java @@ -21,6 +21,7 @@ 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 org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.LinkedHashMap; @@ -56,6 +57,24 @@ public class MdMeasurePointController extends BaseController { util.exportExcel(response, list, "测量点数据"); } + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + ExcelUtil util = new ExcelUtil(MdMeasurePoint.class); + util.importTemplateExcel(response, "测量点数据"); + } + + @PreAuthorize("@ss.hasPermi('mes:md:measurepoint:import')") + @Log(title = "测量点", businessType = BusinessType.IMPORT) + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, + @RequestParam(name = "updateSupport", defaultValue = "false") boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil(MdMeasurePoint.class); + List pointList = util.importExcel(file.getInputStream()); + String operName = getUsername(); + String message = mdMeasurePointService.importMeasurePoint(pointList, updateSupport, operName); + return AjaxResult.success(message); + } + @PreAuthorize("@ss.hasPermi('mes:md:measurepoint:query')") @GetMapping("/{pointId}") public AjaxResult getInfo(@PathVariable("pointId") Long pointId) { 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 621b7bd..742707d 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 @@ -31,4 +31,6 @@ public interface IMdMeasurePointService { List queryHistory(String pointCode, String range, String interval, String startTime, String endTime); Map selectMdMeasurePointMapByPointCodes(Collection pointCodes); + + String importMeasurePoint(List pointList, Boolean isUpdateSupport, String operName); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointInfluxService.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointInfluxService.java index 31962ec..6186616 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointInfluxService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdMeasurePointInfluxService.java @@ -22,7 +22,9 @@ import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; import java.time.OffsetDateTime; +import java.time.ZoneId; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -33,6 +35,7 @@ import java.util.Map; @Service public class MdMeasurePointInfluxService { private static final Logger log = LoggerFactory.getLogger(MdMeasurePointInfluxService.class); + private static final DateTimeFormatter DISPLAY_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Autowired private InfluxDbConfig influxDbConfig; @@ -45,7 +48,7 @@ public class MdMeasurePointInfluxService { if (!rows.isEmpty()) { Map row = rows.get(0); point.setLatestValue(formatValue(row.get("_value"), point.getPrecisionDigit())); - point.setLatestTime(row.get("_time")); + point.setLatestTime(formatDisplayTime(row.get("_time"))); } return point; } @@ -61,7 +64,7 @@ public class MdMeasurePointInfluxService { continue; } try { - result.add(new MeasurePointHistoryItem(row.get("_time"), new BigDecimal(row.get("_value")))); + result.add(new MeasurePointHistoryItem(formatDisplayTime(row.get("_time")), new BigDecimal(row.get("_value")))); } catch (Exception ignored) { } } @@ -306,11 +309,37 @@ public class MdMeasurePointInfluxService { } catch (Exception ignored) { } try { - return java.time.LocalDateTime.parse(value, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + return LocalDateTime.parse(value, DISPLAY_TIME_FORMATTER) .atOffset(ZoneOffset.ofHours(8)) .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); } catch (Exception ignored) { } return value; } + + private String formatDisplayTime(String value) { + if (StringUtils.isBlank(value)) { + return value; + } + try { + return OffsetDateTime.parse(value) + .atZoneSameInstant(getDisplayZoneId()) + .format(DISPLAY_TIME_FORMATTER); + } catch (Exception ignored) { + } + try { + return LocalDateTime.parse(value, DISPLAY_TIME_FORMATTER) + .format(DISPLAY_TIME_FORMATTER); + } catch (Exception ignored) { + } + return value; + } + + private ZoneId getDisplayZoneId() { + try { + return ZoneId.of(StringUtils.defaultIfBlank(influxDbConfig.getDisplayZone(), "Asia/Shanghai")); + } catch (Exception ignored) { + return ZoneId.of("Asia/Shanghai"); + } + } } 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 ce3b86d..ae4531b 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 @@ -1,7 +1,11 @@ package com.ktg.mes.md.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.ktg.common.constant.UserConstants; +import com.ktg.common.exception.ServiceException; import com.ktg.common.utils.DateUtils; +import com.ktg.common.utils.StringUtils; +import com.ktg.common.utils.bean.BeanValidators; import com.ktg.mes.md.domain.MdMeasurePoint; import com.ktg.mes.md.domain.MdWorkshop; import com.ktg.mes.md.domain.MeasurePointHistoryItem; @@ -11,6 +15,7 @@ import com.ktg.mes.md.service.IMdWorkshopService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.validation.Validator; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; @@ -28,6 +33,9 @@ public class MdMeasurePointServiceImpl implements IMdMeasurePointService { @Autowired private MdMeasurePointInfluxService mdMeasurePointInfluxService; + @Autowired + protected Validator validator; + @Override public MdMeasurePoint selectMdMeasurePointByPointId(Long pointId) { MdMeasurePoint point = mdMeasurePointMapper.selectMdMeasurePointByPointId(pointId); @@ -42,11 +50,7 @@ public class MdMeasurePointServiceImpl implements IMdMeasurePointService { @Override public List selectMdMeasurePointList(MdMeasurePoint mdMeasurePoint) { - List list = mdMeasurePointMapper.selectMdMeasurePointList(mdMeasurePoint); - for (MdMeasurePoint point : list) { - mdMeasurePointInfluxService.fillLatestValue(point); - } - return list; + return mdMeasurePointMapper.selectMdMeasurePointList(mdMeasurePoint); } @Override @@ -121,6 +125,76 @@ public class MdMeasurePointServiceImpl implements IMdMeasurePointService { return result; } + @Override + public String importMeasurePoint(List pointList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(pointList) || pointList.size() == 0) { + throw new ServiceException("导入测量点数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (MdMeasurePoint point : pointList) { + String pointCode = StringUtils.trimToEmpty(point.getPointCode()); + String pointName = StringUtils.trimToEmpty(point.getPointName()); + try { + if (StringUtils.isEmpty(pointCode)) { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点编码不能为空"); + continue; + } + if (StringUtils.isEmpty(pointName)) { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点 ").append(pointCode).append(" 的名称不能为空"); + continue; + } + if (StringUtils.isEmpty(StringUtils.trimToEmpty(point.getFieldKey()))) { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点 ").append(pointCode).append(" 的字段名不能为空"); + continue; + } + + normalizePoint(point); + resolveWorkshop(point); + BeanValidators.validateWithException(validator, point); + + MdMeasurePoint exists = mdMeasurePointMapper.checkPointCodeUnique(point); + if (StringUtils.isNull(exists)) { + if (UserConstants.NOT_UNIQUE.equals(checkPointNameUnique(point))) { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点 ").append(pointCode).append(" 的名称已存在"); + continue; + } + point.setCreateBy(operName); + insertMdMeasurePoint(point); + successNum++; + } else if (Boolean.TRUE.equals(isUpdateSupport)) { + point.setPointId(exists.getPointId()); + if (UserConstants.NOT_UNIQUE.equals(checkPointNameUnique(point))) { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点 ").append(pointCode).append(" 的名称已存在"); + continue; + } + point.setUpdateBy(operName); + updateMdMeasurePoint(point); + successNum++; + } else { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点 ").append(pointCode).append(" 已存在"); + } + } catch (Exception e) { + failureNum++; + failureMsg.append("
").append(failureNum).append("、测量点 ").append(pointCode).append(" 导入失败:").append(e.getMessage()); + } + } + if (failureNum > 0) { + failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条"); + return successMsg.toString(); + } + private void fillWorkshopInfo(MdMeasurePoint mdMeasurePoint) { if (mdMeasurePoint.getWorkshopId() == null) { mdMeasurePoint.setWorkshopCode(null); @@ -133,4 +207,66 @@ public class MdMeasurePointServiceImpl implements IMdMeasurePointService { mdMeasurePoint.setWorkshopName(workshop.getWorkshopName()); } } + + private void normalizePoint(MdMeasurePoint point) { + point.setPointCode(StringUtils.trim(point.getPointCode())); + point.setPointName(StringUtils.trim(point.getPointName())); + point.setDeviceCode(StringUtils.trim(point.getDeviceCode())); + point.setNodeCode(StringUtils.trim(point.getNodeCode())); + point.setFieldKey(StringUtils.trim(point.getFieldKey())); + point.setTagJson(StringUtils.trim(point.getTagJson())); + point.setUnit(StringUtils.trim(point.getUnit())); + point.setRemark(StringUtils.trim(point.getRemark())); + if (ObjectUtil.isEmpty(point.getPrecisionDigit())) { + point.setPrecisionDigit(2); + } + if (ObjectUtil.isEmpty(point.getSortNum())) { + point.setSortNum(1); + } + if (StringUtils.isEmpty(point.getEnableFlag())) { + point.setEnableFlag(UserConstants.YES); + } else { + point.setEnableFlag(StringUtils.upperCase(StringUtils.trim(point.getEnableFlag()))); + } + } + + private void resolveWorkshop(MdMeasurePoint point) { + if (point.getWorkshopId() != null) { + fillWorkshopInfo(point); + return; + } + String workshopCode = StringUtils.trim(point.getWorkshopCode()); + String workshopName = StringUtils.trim(point.getWorkshopName()); + if (StringUtils.isEmpty(workshopCode) && StringUtils.isEmpty(workshopName)) { + point.setWorkshopId(null); + point.setWorkshopCode(null); + point.setWorkshopName(null); + return; + } + + MdWorkshop query = new MdWorkshop(); + if (StringUtils.isNotEmpty(workshopCode)) { + query.setWorkshopCode(workshopCode); + } else { + query.setWorkshopName(workshopName); + } + List workshops = mdWorkshopService.selectMdWorkshopList(query); + MdWorkshop matched = null; + for (MdWorkshop workshop : workshops) { + if (StringUtils.isNotEmpty(workshopCode) && workshopCode.equals(workshop.getWorkshopCode())) { + matched = workshop; + break; + } + if (StringUtils.isEmpty(workshopCode) && workshopName.equals(workshop.getWorkshopName())) { + matched = workshop; + break; + } + } + if (matched == null) { + throw new ServiceException("所属车间不存在,请填写正确的车间编码或车间名称"); + } + point.setWorkshopId(matched.getWorkshopId()); + point.setWorkshopCode(matched.getWorkshopCode()); + point.setWorkshopName(matched.getWorkshopName()); + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProRouteHomeVO.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProRouteHomeVO.java index ced08a4..a6321f7 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProRouteHomeVO.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProRouteHomeVO.java @@ -1,11 +1,9 @@ package com.ktg.mes.pro.controller.vo; import com.ktg.mes.pro.domain.ProRouteProcess; -import lombok.Data; import java.math.BigDecimal; -@Data public class ProRouteHomeVO extends ProRouteProcess { /** @@ -23,4 +21,27 @@ public class ProRouteHomeVO extends ProRouteProcess { */ private BigDecimal total; + public BigDecimal getCompleteNumber() { + return completeNumber; + } + + public void setCompleteNumber(BigDecimal completeNumber) { + this.completeNumber = completeNumber; + } + + public BigDecimal getIncompleteNumber() { + return incompleteNumber; + } + + public void setIncompleteNumber(BigDecimal incompleteNumber) { + this.incompleteNumber = incompleteNumber; + } + + public BigDecimal getTotal() { + return total; + } + + public void setTotal(BigDecimal total) { + this.total = total; + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProWorkorderHomeVO.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProWorkorderHomeVO.java index 27b7509..e40f722 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProWorkorderHomeVO.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/vo/ProWorkorderHomeVO.java @@ -1,13 +1,18 @@ package com.ktg.mes.pro.controller.vo; import com.ktg.mes.pro.domain.ProWorkorder; -import lombok.Data; import java.util.List; -@Data public class ProWorkorderHomeVO extends ProWorkorder { private List routeHomg; + public List getRouteHomg() { + return routeHomg; + } + + public void setRouteHomg(List routeHomg) { + this.routeHomg = routeHomg; + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/report/bean/PmReportBean.java b/ktg-mes/src/main/java/com/ktg/mes/report/bean/PmReportBean.java index 5f5014c..bf44277 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/report/bean/PmReportBean.java +++ b/ktg-mes/src/main/java/com/ktg/mes/report/bean/PmReportBean.java @@ -8,6 +8,8 @@ import com.ktg.mes.wm.domain.WmBarcode; import com.ktg.mes.wm.service.IWmBarcodeService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -21,6 +23,7 @@ import java.util.Map; @Component @Slf4j public class PmReportBean { + private static final Logger log = LoggerFactory.getLogger(PmReportBean.class); @Autowired private IProWorkorderService proWorkorderService; diff --git a/ktg-mes/src/main/java/com/ktg/mes/websocket/MesWebSocket.java b/ktg-mes/src/main/java/com/ktg/mes/websocket/MesWebSocket.java index 16d03a7..1f29de6 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/websocket/MesWebSocket.java +++ b/ktg-mes/src/main/java/com/ktg/mes/websocket/MesWebSocket.java @@ -2,6 +2,8 @@ package com.ktg.mes.websocket; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.websocket.*; @@ -17,6 +19,7 @@ import java.util.concurrent.ConcurrentHashMap; @Slf4j @Component public class MesWebSocket { + private static final Logger log = LoggerFactory.getLogger(MesWebSocket.class); private static Map sessionMap = new ConcurrentHashMap<>(); public final static String WEBSOCKET_HEARTBEAT = "heartbeat-iot"; /** diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/vo/WmAreaPrintVO.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/vo/WmAreaPrintVO.java index e41afb2..4f850be 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/vo/WmAreaPrintVO.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/vo/WmAreaPrintVO.java @@ -1,12 +1,23 @@ package com.ktg.mes.wm.domain.vo; -import lombok.Data; - -@Data public class WmAreaPrintVO { - private String barcodeContent; private String locationName; + public String getBarcodeContent() { + return barcodeContent; + } + + public void setBarcodeContent(String barcodeContent) { + this.barcodeContent = barcodeContent; + } + + public String getLocationName() { + return locationName; + } + + public void setLocationName(String locationName) { + this.locationName = locationName; + } } diff --git a/ktg-mes/src/main/resources/mapper/board/BoardOrderProgressMapper.xml b/ktg-mes/src/main/resources/mapper/board/BoardOrderProgressMapper.xml new file mode 100644 index 0000000..3129f64 --- /dev/null +++ b/ktg-mes/src/main/resources/mapper/board/BoardOrderProgressMapper.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select progress_id, screen_id, screen_code, machinery_id, machinery_code, machinery_name, machinery_model, device_status, + run_mode, today_run_time, today_piece_count, task_progress, batch_code, collect_time, refresh_time, + remark, create_by, create_time, update_by, update_time + from board_order_progress + + + + + + + + + + + + + + + + insert into board_order_progress + (screen_id, screen_code, machinery_id, machinery_code, machinery_name, machinery_model, device_status, run_mode, + today_run_time, today_piece_count, task_progress, batch_code, collect_time, refresh_time, remark, + create_by, create_time, update_by, update_time) + values + (#{screenId}, #{screenCode}, #{machineryId}, #{machineryCode}, #{machineryName}, #{machineryModel}, #{deviceStatus}, #{runMode}, + #{todayRunTime}, #{todayPieceCount}, #{taskProgress}, #{batchCode}, #{collectTime}, #{refreshTime}, #{remark}, + #{createBy}, #{createTime}, #{updateBy}, #{updateTime}) + + + + update board_order_progress + set machinery_id = #{machineryId}, + machinery_name = #{machineryName}, + machinery_model = #{machineryModel}, + device_status = #{deviceStatus}, + run_mode = #{runMode}, + today_run_time = #{todayRunTime}, + today_piece_count = #{todayPieceCount}, + task_progress = #{taskProgress}, + batch_code = #{batchCode}, + collect_time = #{collectTime}, + refresh_time = #{refreshTime}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + where progress_id = #{progressId} + + diff --git a/ktg-mes/src/main/resources/mapper/board/BoardPointBindingMapper.xml b/ktg-mes/src/main/resources/mapper/board/BoardPointBindingMapper.xml new file mode 100644 index 0000000..a15bd6a --- /dev/null +++ b/ktg-mes/src/main/resources/mapper/board/BoardPointBindingMapper.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select binding_id, screen_id, screen_code, machinery_id, machinery_code, binding_field, point_id, point_code, point_name, + sort_num, enable_flag, remark, create_by, create_time, update_by, update_time + from board_point_binding + + + + + + + + + + insert into board_point_binding + (screen_id, screen_code, machinery_id, machinery_code, binding_field, point_id, point_code, point_name, sort_num, + enable_flag, remark, create_by, create_time, update_by, update_time) + values + (#{screenId}, #{screenCode}, #{machineryId}, #{machineryCode}, #{bindingField}, #{pointId}, #{pointCode}, #{pointName}, #{sortNum}, + #{enableFlag}, #{remark}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}) + + + + insert into board_point_binding + (screen_id, screen_code, machinery_id, machinery_code, binding_field, point_id, point_code, point_name, sort_num, + enable_flag, remark, create_by, create_time, update_by, update_time) + values + + (#{item.screenId}, #{item.screenCode}, #{item.machineryId}, #{item.machineryCode}, #{item.bindingField}, #{item.pointId}, + #{item.pointCode}, #{item.pointName}, #{item.sortNum}, #{item.enableFlag}, #{item.remark}, + #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}) + + + + + update board_point_binding + set screen_id = #{screenId}, + screen_code = #{screenCode}, + machinery_id = #{machineryId}, + machinery_code = #{machineryCode}, + binding_field = #{bindingField}, + point_id = #{pointId}, + point_code = #{pointCode}, + point_name = #{pointName}, + sort_num = #{sortNum}, + enable_flag = #{enableFlag}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + where binding_id = #{bindingId} + + + + delete from board_point_binding + where binding_id in + + #{bindingId} + + + + + delete from board_point_binding where screen_code = #{screenCode} + + + + delete from board_point_binding where screen_id = #{screenId} + + diff --git a/ktg-mes/src/main/resources/mapper/board/BoardScreenInfoMapper.xml b/ktg-mes/src/main/resources/mapper/board/BoardScreenInfoMapper.xml new file mode 100644 index 0000000..2c744d0 --- /dev/null +++ b/ktg-mes/src/main/resources/mapper/board/BoardScreenInfoMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select screen_id, screen_code, owner_name, workshop_id, workshop_code, workshop_name, + device_total, online_count, running_count, stop_count, start_rate, latest_refresh_time, + remark, create_by, create_time, update_by, update_time + from board_screen_info + + + + + + + + + + insert into board_screen_info + (screen_code, owner_name, workshop_id, workshop_code, workshop_name, device_total, online_count, running_count, + stop_count, start_rate, latest_refresh_time, remark, create_by, create_time, update_by, update_time) + values + (#{screenCode}, #{ownerName}, #{workshopId}, #{workshopCode}, #{workshopName}, #{deviceTotal}, #{onlineCount}, #{runningCount}, + #{stopCount}, #{startRate}, #{latestRefreshTime}, #{remark}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}) + + + + update board_screen_info + set owner_name = #{ownerName}, + workshop_id = #{workshopId}, + workshop_code = #{workshopCode}, + workshop_name = #{workshopName}, + device_total = #{deviceTotal}, + online_count = #{onlineCount}, + running_count = #{runningCount}, + stop_count = #{stopCount}, + start_rate = #{startRate}, + latest_refresh_time = #{latestRefreshTime}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + where screen_id = #{screenId} + + + + delete from board_screen_info + where screen_id in + + #{screenId} + + + diff --git a/ktg-mes/src/main/resources/mapper/dv/DvCheckPlanMapper.xml b/ktg-mes/src/main/resources/mapper/dv/DvCheckPlanMapper.xml index 4d6a95a..daf41b8 100644 --- a/ktg-mes/src/main/resources/mapper/dv/DvCheckPlanMapper.xml +++ b/ktg-mes/src/main/resources/mapper/dv/DvCheckPlanMapper.xml @@ -14,6 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -26,7 +27,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select plan_id, plan_code, plan_name,plan_type, start_date, end_date, cycle_type, cycle_count,status, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from dv_check_plan + select p.plan_id, p.plan_code, p.plan_name, p.plan_type, p.start_date, p.end_date, p.cycle_type, p.cycle_count, p.status, + (select group_concat(distinct m.machinery_code order by m.machinery_code separator ',') + from dv_check_machinery m + where m.plan_id = p.plan_id) as machinery_codes, + p.remark, p.attr1, p.attr2, p.attr3, p.attr4, p.create_by, p.create_time, p.update_by, p.update_time + from dv_check_plan p - and machinery_code = #{machineryCode} + and machinery_code like concat('%', #{machineryCode}, '%') and machinery_name like concat('%', #{machineryName}, '%') and machinery_brand = #{machineryBrand} and machinery_spec = #{machinerySpec} @@ -155,4 +155,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{machineryId} - \ No newline at end of file +