双机架轧辊管理
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package com.klp.mes.roll.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.mes.roll.domain.bo.MesRollChangeBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollChangeVo;
|
||||
import com.klp.mes.roll.service.IMesRollChangeService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 换辊记录
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/mes/rollChange")
|
||||
public class MesRollChangeController extends BaseController {
|
||||
|
||||
private final IMesRollChangeService iMesRollChangeService;
|
||||
|
||||
/** 分页列表(支持按机架、换辊类型、时间筛选) */
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<MesRollChangeVo> list(MesRollChangeBo bo, PageQuery pageQuery) {
|
||||
return iMesRollChangeService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询指定机架当前在机轧辊(最近一次换辊记录)
|
||||
* GET /mes/rollChange/current?standNo=1%23
|
||||
*/
|
||||
@GetMapping("/current")
|
||||
public R<MesRollChangeVo> current(@RequestParam String standNo) {
|
||||
return R.ok(iMesRollChangeService.queryCurrentByStand(standNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询指定机架当前轧辊的实时工作长度(m)
|
||||
* GET /mes/rollChange/workLength?standNo=1%23
|
||||
*/
|
||||
@GetMapping("/workLength")
|
||||
public R<BigDecimal> workLength(@RequestParam String standNo) {
|
||||
return R.ok(iMesRollChangeService.queryRealtimeWorkLength(standNo));
|
||||
}
|
||||
|
||||
/** 详情 */
|
||||
@GetMapping("/{changeId}")
|
||||
public R<MesRollChangeVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long changeId) {
|
||||
return R.ok(iMesRollChangeService.queryById(changeId));
|
||||
}
|
||||
|
||||
/** 新增换辊记录 */
|
||||
@Log(title = "换辊记录", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Long> add(@Validated @RequestBody MesRollChangeBo bo) {
|
||||
return R.ok(iMesRollChangeService.addChange(bo));
|
||||
}
|
||||
|
||||
/** 修改换辊记录 */
|
||||
@Log(title = "换辊记录", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated @RequestBody MesRollChangeBo bo) {
|
||||
return toAjax(iMesRollChangeService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/** 删除换辊记录 */
|
||||
@Log(title = "换辊记录", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{changeIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] changeIds) {
|
||||
return toAjax(iMesRollChangeService.deleteWithValidByIds(Arrays.asList(changeIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package com.klp.mes.roll.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.mes.roll.domain.bo.MesRollInfoBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollInfoVo;
|
||||
import com.klp.mes.roll.service.IMesRollInfoService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 轧辊库(轧辊总览页)
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/mes/rollInfo")
|
||||
public class MesRollInfoController extends BaseController {
|
||||
|
||||
private final IMesRollInfoService iMesRollInfoService;
|
||||
|
||||
/** 分页列表 */
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<MesRollInfoVo> list(MesRollInfoBo bo, PageQuery pageQuery) {
|
||||
return iMesRollInfoService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/** 状态统计卡片数据 */
|
||||
@GetMapping("/stats")
|
||||
public R<Map<String, Object>> stats() {
|
||||
return R.ok(iMesRollInfoService.queryStatusStats());
|
||||
}
|
||||
|
||||
/** 轧辊编号下拉列表(按辊型 + 状态过滤,均可为空) */
|
||||
@GetMapping("/options")
|
||||
public R<List<String>> options(String rollType, String status) {
|
||||
return R.ok(iMesRollInfoService.queryRollNoList(rollType, status));
|
||||
}
|
||||
|
||||
/** 详情 */
|
||||
@GetMapping("/{rollId}")
|
||||
public R<MesRollInfoVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long rollId) {
|
||||
return R.ok(iMesRollInfoService.queryById(rollId));
|
||||
}
|
||||
|
||||
/** 新增 */
|
||||
@Log(title = "轧辊库", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Long> add(@Validated(AddGroup.class) @RequestBody MesRollInfoBo bo) {
|
||||
return R.ok(iMesRollInfoService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/** 修改 */
|
||||
@Log(title = "轧辊库", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody MesRollInfoBo bo) {
|
||||
return toAjax(iMesRollInfoService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/** 删除 */
|
||||
@Log(title = "轧辊库", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{rollIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] rollIds) {
|
||||
return toAjax(iMesRollInfoService.deleteWithValidByIds(Arrays.asList(rollIds), true));
|
||||
}
|
||||
|
||||
/** 封闭轧辊(状态改为 Scrapped / 报废) */
|
||||
@Log(title = "轧辊库-封闭", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/{rollId}/scrap")
|
||||
public R<Void> scrap(@NotNull(message = "主键不能为空") @PathVariable Long rollId) {
|
||||
return toAjax(iMesRollInfoService.scrapRoll(rollId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 从换辊记录同步在线状态
|
||||
* 将当前各机架在机轧辊的状态强制修正为 Online,解决状态数据不一致问题
|
||||
*/
|
||||
@Log(title = "轧辊库-状态同步", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/syncStatus")
|
||||
public R<Void> syncStatus() {
|
||||
iMesRollInfoService.syncStatusFromChange();
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/** 导出 */
|
||||
@Log(title = "轧辊库", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(MesRollInfoBo bo, HttpServletResponse response) {
|
||||
List<MesRollInfoVo> list = iMesRollInfoService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "轧辊数据", MesRollInfoVo.class, response);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.klp.mes.roll.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.mes.roll.domain.bo.MesRollStandbyBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollStandbyVo;
|
||||
import com.klp.mes.roll.service.IMesRollStandbyService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 下批轧辊(备用辊)
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/mes/rollStandby")
|
||||
public class MesRollStandbyController extends BaseController {
|
||||
|
||||
private final IMesRollStandbyService iMesRollStandbyService;
|
||||
|
||||
/**
|
||||
* 查询指定机架的下批轧辊列表
|
||||
* GET /mes/rollStandby/list?standNo=1%23
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public R<List<MesRollStandbyVo>> list(@RequestParam String standNo) {
|
||||
return R.ok(iMesRollStandbyService.queryByStand(standNo));
|
||||
}
|
||||
|
||||
/** 详情 */
|
||||
@GetMapping("/{standbyId}")
|
||||
public R<MesRollStandbyVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long standbyId) {
|
||||
return R.ok(iMesRollStandbyService.queryById(standbyId));
|
||||
}
|
||||
|
||||
/** 新增下批轧辊 */
|
||||
@Log(title = "下批轧辊", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Long> add(@Validated(AddGroup.class) @RequestBody MesRollStandbyBo bo) {
|
||||
return R.ok(iMesRollStandbyService.addStandby(bo));
|
||||
}
|
||||
|
||||
/** 修改下批轧辊 */
|
||||
@Log(title = "下批轧辊", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated @RequestBody MesRollStandbyBo bo) {
|
||||
return toAjax(iMesRollStandbyService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/** 删除单条下批轧辊,同时将辊状态恢复为 Offline */
|
||||
@Log(title = "下批轧辊", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{standbyId}")
|
||||
public R<Void> remove(@NotNull(message = "主键不能为空") @PathVariable Long standbyId) {
|
||||
return toAjax(iMesRollStandbyService.deleteById(standbyId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空指定机架的全部下批轧辊
|
||||
* DELETE /mes/rollStandby/clear?standNo=1%23
|
||||
*/
|
||||
@Log(title = "下批轧辊", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/clear")
|
||||
public R<Void> clear(@RequestParam String standNo) {
|
||||
return toAjax(iMesRollStandbyService.clearByStand(standNo));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.klp.mes.roll.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 换辊记录 mes_roll_change
|
||||
* 四辊轧机,双机架(1# / 2#)
|
||||
* 每次换辊记录 4 支辊:上工作辊、下工作辊、上支撑辊、下支撑辊
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("mes_roll_change")
|
||||
public class MesRollChange extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "change_id")
|
||||
private Long changeId;
|
||||
|
||||
/** 换辊编号 */
|
||||
private String changeNo;
|
||||
|
||||
/** 换辊时间 */
|
||||
private Date changeTime;
|
||||
|
||||
/** 机架号:1# / 2# */
|
||||
private String standNo;
|
||||
|
||||
/** 换辊类型: 计划换辊 / 紧急换辊 */
|
||||
private String changeType;
|
||||
|
||||
/** 换辊状态 */
|
||||
private String changeStatus;
|
||||
|
||||
/** 操作人 */
|
||||
private String operator;
|
||||
|
||||
/** 上工作辊 */
|
||||
private String upperWrNo;
|
||||
private BigDecimal upperWrDia;
|
||||
|
||||
/** 下工作辊 */
|
||||
private String lowerWrNo;
|
||||
private BigDecimal lowerWrDia;
|
||||
|
||||
/** 上支撑辊 */
|
||||
private String upperBrNo;
|
||||
private BigDecimal upperBrDia;
|
||||
|
||||
/** 下支撑辊 */
|
||||
private String lowerBrNo;
|
||||
private BigDecimal lowerBrDia;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.klp.mes.roll.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 轧辊库 mes_roll_info
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("mes_roll_info")
|
||||
public class MesRollInfo extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "roll_id")
|
||||
private Long rollId;
|
||||
|
||||
/** 轧辊编号 */
|
||||
private String rollNo;
|
||||
|
||||
/** 辊型: WR=工作辊 / IR=中间辊 / BR=支撑辊 */
|
||||
private String rollType;
|
||||
|
||||
/** 状态: Offline / Standby / Online / Scrapped */
|
||||
private String status;
|
||||
|
||||
/** 初始辊径(mm) */
|
||||
private BigDecimal initialDia;
|
||||
|
||||
/** 当前辊径(mm) */
|
||||
private BigDecimal currentDia;
|
||||
|
||||
/** 最小可用辊径(mm) */
|
||||
private BigDecimal minDia;
|
||||
|
||||
/** 粗糙度 Ra(μm) */
|
||||
private BigDecimal roughness;
|
||||
|
||||
/** 凸度(mm) */
|
||||
private BigDecimal crown;
|
||||
|
||||
/** 材质 */
|
||||
private String material;
|
||||
|
||||
/** 磨削次数 */
|
||||
private Integer grindCount;
|
||||
|
||||
/** 累计轧制重量(t) */
|
||||
private BigDecimal totalRolledWeight;
|
||||
|
||||
/** 累计轧制长度(m) */
|
||||
private BigDecimal totalRolledLength;
|
||||
|
||||
/** 累计轧制卷数 */
|
||||
private Integer totalRolledCount;
|
||||
|
||||
/** 制造日期 */
|
||||
private Date manufactureDate;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.klp.mes.roll.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 下批轧辊(备用辊,等待换上) mes_roll_standby
|
||||
*
|
||||
* 每条记录代表一个具体辊位的备用辊,例如:
|
||||
* 机架 1#、上工作辊位、辊号 WR-020
|
||||
*
|
||||
* 辊型(rollType):WR = 工作辊,BR = 支撑辊
|
||||
* 辊位(position):UP = 上,DOWN = 下
|
||||
* 机架(standNo):1# / 2#
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("mes_roll_standby")
|
||||
public class MesRollStandby extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "standby_id")
|
||||
private Long standbyId;
|
||||
|
||||
/** 机架号:1# / 2# */
|
||||
private String standNo;
|
||||
|
||||
/** 轧辊编号(关联 mes_roll_info.roll_no) */
|
||||
private String rollNo;
|
||||
|
||||
/** 辊型:WR(工作辊)/ BR(支撑辊) */
|
||||
private String rollType;
|
||||
|
||||
/** 辊位:UP(上)/ DOWN(下) */
|
||||
private String position;
|
||||
|
||||
/** 当前直径 */
|
||||
private BigDecimal diameter;
|
||||
|
||||
/** 粗糙度 */
|
||||
private BigDecimal roughness;
|
||||
|
||||
/** 凸度 */
|
||||
private BigDecimal crown;
|
||||
|
||||
/** 备用就绪时间 */
|
||||
private Date readyTime;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.klp.mes.roll.domain.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 换辊记录 业务对象
|
||||
* 四辊轧机,双机架(1# / 2#)
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MesRollChangeBo extends BaseEntity {
|
||||
|
||||
private Long changeId;
|
||||
|
||||
private String changeNo;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date changeTime;
|
||||
|
||||
/** 机架号:1# / 2#,列表筛选用 */
|
||||
private String standNo;
|
||||
|
||||
/** 换辊类型(列表筛选用) */
|
||||
private String changeType;
|
||||
|
||||
private String changeStatus;
|
||||
|
||||
private String operator;
|
||||
|
||||
/** 上工作辊 */
|
||||
private String upperWrNo;
|
||||
private BigDecimal upperWrDia;
|
||||
|
||||
/** 下工作辊 */
|
||||
private String lowerWrNo;
|
||||
private BigDecimal lowerWrDia;
|
||||
|
||||
/** 上支撑辊 */
|
||||
private String upperBrNo;
|
||||
private BigDecimal upperBrDia;
|
||||
|
||||
/** 下支撑辊 */
|
||||
private String lowerBrNo;
|
||||
private BigDecimal lowerBrDia;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.klp.mes.roll.domain.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 轧辊库 业务对象
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MesRollInfoBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "轧辊ID不能为空", groups = EditGroup.class)
|
||||
private Long rollId;
|
||||
|
||||
@NotBlank(message = "轧辊编号不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String rollNo;
|
||||
|
||||
@NotBlank(message = "辊型不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String rollType;
|
||||
|
||||
private String status;
|
||||
|
||||
private BigDecimal initialDia;
|
||||
|
||||
private BigDecimal currentDia;
|
||||
|
||||
private BigDecimal minDia;
|
||||
|
||||
private BigDecimal roughness;
|
||||
|
||||
private BigDecimal crown;
|
||||
|
||||
private String material;
|
||||
|
||||
private Integer grindCount;
|
||||
|
||||
private BigDecimal totalRolledWeight;
|
||||
|
||||
private BigDecimal totalRolledLength;
|
||||
|
||||
private Integer totalRolledCount;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date manufactureDate;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.klp.mes.roll.domain.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 下批轧辊 业务对象
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MesRollStandbyBo extends BaseEntity {
|
||||
|
||||
private Long standbyId;
|
||||
|
||||
/** 机架号:1# / 2# */
|
||||
@NotBlank(message = "机架号不能为空", groups = AddGroup.class)
|
||||
private String standNo;
|
||||
|
||||
/** 轧辊编号 */
|
||||
@NotBlank(message = "轧辊编号不能为空", groups = AddGroup.class)
|
||||
private String rollNo;
|
||||
|
||||
/** 辊型:WR / BR */
|
||||
@NotBlank(message = "辊型不能为空", groups = AddGroup.class)
|
||||
private String rollType;
|
||||
|
||||
/** 辊位:UP / DOWN */
|
||||
@NotBlank(message = "辊位不能为空", groups = AddGroup.class)
|
||||
private String position;
|
||||
|
||||
private BigDecimal diameter;
|
||||
|
||||
private BigDecimal roughness;
|
||||
|
||||
private BigDecimal crown;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date readyTime;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.klp.mes.roll.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 换辊记录 视图对象
|
||||
* 四辊轧机,双机架(1# / 2#)
|
||||
*/
|
||||
@Data
|
||||
public class MesRollChangeVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long changeId;
|
||||
|
||||
private String changeNo;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date changeTime;
|
||||
|
||||
/** 机架号:1# / 2# */
|
||||
private String standNo;
|
||||
|
||||
private String changeType;
|
||||
|
||||
private String changeStatus;
|
||||
|
||||
private String operator;
|
||||
|
||||
/** 上工作辊 */
|
||||
private String upperWrNo;
|
||||
private BigDecimal upperWrDia;
|
||||
|
||||
/** 下工作辊 */
|
||||
private String lowerWrNo;
|
||||
private BigDecimal lowerWrDia;
|
||||
|
||||
/** 上支撑辊 */
|
||||
private String upperBrNo;
|
||||
private BigDecimal upperBrDia;
|
||||
|
||||
/** 下支撑辊 */
|
||||
private String lowerBrNo;
|
||||
private BigDecimal lowerBrDia;
|
||||
|
||||
private String remark;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
/** 本次换辊方案的累计工作长度(m),由 WMS 卷料数据计算得出 */
|
||||
private BigDecimal workLength;
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.klp.mes.roll.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 轧辊库 视图对象
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class MesRollInfoVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("轧辊ID")
|
||||
private Long rollId;
|
||||
|
||||
@ExcelProperty("轧辊编号")
|
||||
private String rollNo;
|
||||
|
||||
@ExcelProperty("辊型")
|
||||
private String rollType;
|
||||
|
||||
@ExcelProperty("状态")
|
||||
private String status;
|
||||
|
||||
@ExcelProperty("初始辊径(mm)")
|
||||
private BigDecimal initialDia;
|
||||
|
||||
@ExcelProperty("当前辊径(mm)")
|
||||
private BigDecimal currentDia;
|
||||
|
||||
@ExcelProperty("最小辊径(mm)")
|
||||
private BigDecimal minDia;
|
||||
|
||||
@ExcelProperty("粗糙度")
|
||||
private BigDecimal roughness;
|
||||
|
||||
@ExcelProperty("凸度(mm)")
|
||||
private BigDecimal crown;
|
||||
|
||||
@ExcelProperty("材质")
|
||||
private String material;
|
||||
|
||||
@ExcelProperty("磨削次数")
|
||||
private Integer grindCount;
|
||||
|
||||
@ExcelProperty("累计重量(t)")
|
||||
private BigDecimal totalRolledWeight;
|
||||
|
||||
@ExcelProperty("累计长度(m)")
|
||||
private BigDecimal totalRolledLength;
|
||||
|
||||
@ExcelProperty("累计卷数")
|
||||
private Integer totalRolledCount;
|
||||
|
||||
@ExcelProperty("制造日期")
|
||||
private Date manufactureDate;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.klp.mes.roll.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 下批轧辊 视图对象
|
||||
*/
|
||||
@Data
|
||||
public class MesRollStandbyVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long standbyId;
|
||||
|
||||
/** 机架号:1# / 2# */
|
||||
private String standNo;
|
||||
|
||||
/** 轧辊编号 */
|
||||
private String rollNo;
|
||||
|
||||
/** 辊型:WR(工作辊)/ BR(支撑辊) */
|
||||
private String rollType;
|
||||
|
||||
/** 辊位:UP(上)/ DOWN(下) */
|
||||
private String position;
|
||||
|
||||
/** 辊位中文展示:上工作辊 / 下工作辊 / 上支撑辊 / 下支撑辊 */
|
||||
private String positionLabel;
|
||||
|
||||
private BigDecimal diameter;
|
||||
|
||||
private BigDecimal roughness;
|
||||
|
||||
private BigDecimal crown;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date readyTime;
|
||||
|
||||
private String remark;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.klp.mes.roll.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.mes.roll.domain.MesRollChange;
|
||||
import com.klp.mes.roll.domain.vo.MesRollChangeVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 换辊记录 Mapper
|
||||
*/
|
||||
public interface MesRollChangeMapper extends BaseMapperPlus<MesRollChangeMapper, MesRollChange, MesRollChangeVo> {
|
||||
|
||||
/** 查询指定机架最新一次换辊记录(当前在机轧辊) */
|
||||
MesRollChangeVo selectLatestByStand(@Param("standNo") String standNo);
|
||||
|
||||
/**
|
||||
* 查询同机架下一次换辊时间(用于确定本次换辊的服务结束时刻)
|
||||
* 返回 null 表示该辊仍在机
|
||||
*/
|
||||
Date selectNextChangeTime(@Param("standNo") String standNo, @Param("changeTime") Date changeTime);
|
||||
|
||||
/**
|
||||
* 统计指定时间区间内的卷料实测长度之和(mm→调用方除以1000转m)
|
||||
* endTime 为 null 时统计到当前时刻
|
||||
*/
|
||||
BigDecimal selectWorkLength(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.klp.mes.roll.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.mes.roll.domain.MesRollInfo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollInfoVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 轧辊库 Mapper
|
||||
*/
|
||||
public interface MesRollInfoMapper extends BaseMapperPlus<MesRollInfoMapper, MesRollInfo, MesRollInfoVo> {
|
||||
|
||||
/**
|
||||
* 按状态统计数量(用于总览卡片)
|
||||
*/
|
||||
List<Map<String, Object>> selectStatusStats();
|
||||
|
||||
/**
|
||||
* 查询轧辊编号列表(用于下拉选择,可按辊型和状态过滤)
|
||||
*/
|
||||
List<String> selectRollNoList(@Param("rollType") String rollType, @Param("status") String status);
|
||||
|
||||
/**
|
||||
* 按轧辊编号查询(用于换辊时同步状态)
|
||||
*/
|
||||
MesRollInfo selectByRollNo(@Param("rollNo") String rollNo);
|
||||
|
||||
/**
|
||||
* 更新轧辊状态
|
||||
*/
|
||||
int updateStatusByRollNo(@Param("rollNo") String rollNo, @Param("status") String status);
|
||||
|
||||
/**
|
||||
* 条件更新:仅当辊当前状态等于 onlyIfStatus 时才更新(用于避免误覆盖已 Online 的辊)
|
||||
*/
|
||||
int updateStatusByRollNoIfStatus(@Param("rollNo") String rollNo,
|
||||
@Param("status") String status,
|
||||
@Param("onlyIfStatus") String onlyIfStatus);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.klp.mes.roll.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.mes.roll.domain.MesRollStandby;
|
||||
import com.klp.mes.roll.domain.vo.MesRollStandbyVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 下批轧辊 Mapper
|
||||
*/
|
||||
public interface MesRollStandbyMapper extends BaseMapperPlus<MesRollStandbyMapper, MesRollStandby, MesRollStandbyVo> {
|
||||
|
||||
/** 按机架查询下批轧辊列表 */
|
||||
List<MesRollStandbyVo> selectByStand(@Param("standNo") String standNo);
|
||||
|
||||
/** 清空某机架的下批轧辊 */
|
||||
int clearByStand(@Param("standNo") String standNo);
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.klp.mes.roll.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.mes.roll.domain.bo.MesRollChangeBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollChangeVo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 换辊记录 Service 接口
|
||||
*/
|
||||
public interface IMesRollChangeService {
|
||||
|
||||
MesRollChangeVo queryById(Long changeId);
|
||||
|
||||
/** 查询指定机架当前在机轧辊(最新一次换辊记录) */
|
||||
MesRollChangeVo queryCurrentByStand(String standNo);
|
||||
|
||||
TableDataInfo<MesRollChangeVo> queryPageList(MesRollChangeBo bo, PageQuery pageQuery);
|
||||
|
||||
/** 新增换辊记录,同步将涉及的轧辊状态更新为 Online */
|
||||
Long addChange(MesRollChangeBo bo);
|
||||
|
||||
Boolean updateByBo(MesRollChangeBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 查询指定机架当前在机轧辊的实时工作长度(m)
|
||||
* 从最近一次换辊时间到现在,统计 WMS 卷料实测长度之和
|
||||
*/
|
||||
BigDecimal queryRealtimeWorkLength(String standNo);
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.mes.roll.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.mes.roll.domain.bo.MesRollInfoBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollInfoVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 轧辊库 Service 接口
|
||||
*/
|
||||
public interface IMesRollInfoService {
|
||||
|
||||
MesRollInfoVo queryById(Long rollId);
|
||||
|
||||
TableDataInfo<MesRollInfoVo> queryPageList(MesRollInfoBo bo, PageQuery pageQuery);
|
||||
|
||||
List<MesRollInfoVo> queryList(MesRollInfoBo bo);
|
||||
|
||||
/** 按状态统计(总览卡片) */
|
||||
Map<String, Object> queryStatusStats();
|
||||
|
||||
/** 轧辊编号下拉列表(status 为 null 时不过滤状态) */
|
||||
List<String> queryRollNoList(String rollType, String status);
|
||||
|
||||
Long insertByBo(MesRollInfoBo bo);
|
||||
|
||||
Boolean updateByBo(MesRollInfoBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/** 封闭轧辊:状态设为 Scrapped */
|
||||
Boolean scrapRoll(Long rollId);
|
||||
|
||||
/**
|
||||
* 从换辊记录同步在线状态:
|
||||
* 每个机架最新一次换辊记录中的 4 支辊 → Online;
|
||||
* 下批辊列表中的辊 → Standby(已由 addStandby 维护,此处不重复处理);
|
||||
* 其余不变,仅修正当前在机辊的状态数据不一致问题。
|
||||
*/
|
||||
void syncStatusFromChange();
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.klp.mes.roll.service;
|
||||
|
||||
import com.klp.mes.roll.domain.bo.MesRollStandbyBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollStandbyVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 下批轧辊 Service 接口
|
||||
*/
|
||||
public interface IMesRollStandbyService {
|
||||
|
||||
MesRollStandbyVo queryById(Long standbyId);
|
||||
|
||||
/** 查询指定机架的下批轧辊列表 */
|
||||
List<MesRollStandbyVo> queryByStand(String standNo);
|
||||
|
||||
/** 新增下批轧辊,同步将该辊状态更新为 Standby */
|
||||
Long addStandby(MesRollStandbyBo bo);
|
||||
|
||||
/** 修改下批轧辊 */
|
||||
Boolean updateByBo(MesRollStandbyBo bo);
|
||||
|
||||
/** 删除某条下批轧辊,同步将该辊状态恢复为 Offline */
|
||||
Boolean deleteById(Long standbyId);
|
||||
|
||||
/** 清空指定机架的全部下批轧辊,并将对应辊状态恢复为 Offline */
|
||||
Boolean clearByStand(String standNo);
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package com.klp.mes.roll.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.helper.LoginHelper;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.mes.roll.domain.MesRollChange;
|
||||
import com.klp.mes.roll.domain.bo.MesRollChangeBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollChangeVo;
|
||||
import com.klp.mes.roll.mapper.MesRollChangeMapper;
|
||||
import com.klp.mes.roll.mapper.MesRollInfoMapper;
|
||||
import com.klp.mes.roll.service.IMesRollChangeService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 换辊记录 Service 实现
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class MesRollChangeServiceImpl implements IMesRollChangeService {
|
||||
|
||||
private final MesRollChangeMapper baseMapper;
|
||||
private final MesRollInfoMapper rollInfoMapper;
|
||||
|
||||
@Override
|
||||
public MesRollChangeVo queryById(Long changeId) {
|
||||
return baseMapper.selectVoById(changeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesRollChangeVo queryCurrentByStand(String standNo) {
|
||||
return baseMapper.selectLatestByStand(standNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<MesRollChangeVo> queryPageList(MesRollChangeBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<MesRollChange> lqw = buildQueryWrapper(bo);
|
||||
Page<MesRollChangeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
// 为每条换辊记录计算工作长度(上辊时间 → 下辊时间,下辊时间为 null 时统计到 NOW())
|
||||
for (MesRollChangeVo vo : result.getRecords()) {
|
||||
Date endTime = baseMapper.selectNextChangeTime(vo.getStandNo(), vo.getChangeTime());
|
||||
BigDecimal lengthMm = baseMapper.selectWorkLength(vo.getChangeTime(), endTime);
|
||||
// mm 转 m,保留 2 位小数
|
||||
vo.setWorkLength(lengthMm == null ? BigDecimal.ZERO
|
||||
: lengthMm.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP));
|
||||
}
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal queryRealtimeWorkLength(String standNo) {
|
||||
MesRollChangeVo latest = baseMapper.selectLatestByStand(standNo);
|
||||
if (latest == null || latest.getChangeTime() == null) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
BigDecimal lengthMm = baseMapper.selectWorkLength(latest.getChangeTime(), null);
|
||||
return lengthMm == null ? BigDecimal.ZERO
|
||||
: lengthMm.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<MesRollChange> buildQueryWrapper(MesRollChangeBo bo) {
|
||||
LambdaQueryWrapper<MesRollChange> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStandNo()), MesRollChange::getStandNo, bo.getStandNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), MesRollChange::getChangeType, bo.getChangeType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getChangeStatus()), MesRollChange::getChangeStatus, bo.getChangeStatus());
|
||||
if (bo.getChangeTime() != null) {
|
||||
lqw.ge(MesRollChange::getChangeTime, bo.getChangeTime());
|
||||
}
|
||||
lqw.orderByDesc(MesRollChange::getChangeTime, MesRollChange::getChangeId);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long addChange(MesRollChangeBo bo) {
|
||||
MesRollChange add = BeanUtil.toBean(bo, MesRollChange.class);
|
||||
if (StringUtils.isBlank(add.getChangeNo())) {
|
||||
add.setChangeNo("RC" + IdUtil.fastSimpleUUID().substring(0, 8).toUpperCase());
|
||||
}
|
||||
// 换辊时间强制使用服务器当前时间
|
||||
add.setChangeTime(new Date());
|
||||
// 操作人取当前登录用户昵称
|
||||
add.setOperator(LoginHelper.getNickName());
|
||||
// 换辊类型固定为"计划换辊"(通过页面触发)
|
||||
if (StringUtils.isBlank(add.getChangeType())) {
|
||||
add.setChangeType("三级换辊");
|
||||
}
|
||||
// 换辊前:将上一批在机轧辊状态改为 Offline
|
||||
MesRollChangeVo prev = baseMapper.selectLatestByStand(add.getStandNo());
|
||||
if (prev != null) {
|
||||
for (String rollNo : Arrays.asList(
|
||||
prev.getUpperWrNo(), prev.getLowerWrNo(),
|
||||
prev.getUpperBrNo(), prev.getLowerBrNo())) {
|
||||
if (StringUtils.isNotBlank(rollNo)) {
|
||||
rollInfoMapper.updateStatusByRollNo(rollNo, "Offline");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
baseMapper.insert(add);
|
||||
|
||||
// 将本次换上的 4 支辊状态同步为 Online
|
||||
List<String> rollNos = Arrays.asList(
|
||||
add.getUpperWrNo(), add.getLowerWrNo(),
|
||||
add.getUpperBrNo(), add.getLowerBrNo()
|
||||
);
|
||||
for (String rollNo : rollNos) {
|
||||
if (StringUtils.isNotBlank(rollNo)) {
|
||||
rollInfoMapper.updateStatusByRollNo(rollNo, "Online");
|
||||
}
|
||||
}
|
||||
|
||||
return add.getChangeId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(MesRollChangeBo bo) {
|
||||
MesRollChange update = BeanUtil.toBean(bo, MesRollChange.class);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
package com.klp.mes.roll.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.mes.roll.domain.MesRollInfo;
|
||||
import com.klp.mes.roll.domain.bo.MesRollInfoBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollInfoVo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollChangeVo;
|
||||
import com.klp.mes.roll.mapper.MesRollChangeMapper;
|
||||
import com.klp.mes.roll.mapper.MesRollInfoMapper;
|
||||
import com.klp.mes.roll.service.IMesRollInfoService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 轧辊库 Service 实现
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class MesRollInfoServiceImpl implements IMesRollInfoService {
|
||||
|
||||
private final MesRollInfoMapper baseMapper;
|
||||
private final MesRollChangeMapper rollChangeMapper;
|
||||
|
||||
@Override
|
||||
public MesRollInfoVo queryById(Long rollId) {
|
||||
return baseMapper.selectVoById(rollId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<MesRollInfoVo> queryPageList(MesRollInfoBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<MesRollInfo> lqw = buildQueryWrapper(bo);
|
||||
Page<MesRollInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MesRollInfoVo> queryList(MesRollInfoBo bo) {
|
||||
LambdaQueryWrapper<MesRollInfo> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> queryStatusStats() {
|
||||
List<Map<String, Object>> rows = baseMapper.selectStatusStats();
|
||||
Map<String, Object> result = new HashMap<String, Object>(8);
|
||||
int total = 0;
|
||||
for (Map<String, Object> row : rows) {
|
||||
String status = (String) row.get("status");
|
||||
Number cnt = (Number) row.get("cnt");
|
||||
result.put(status, cnt.intValue());
|
||||
total += cnt.intValue();
|
||||
}
|
||||
result.put("total", total);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> queryRollNoList(String rollType, String status) {
|
||||
return baseMapper.selectRollNoList(rollType, status);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<MesRollInfo> buildQueryWrapper(MesRollInfoBo bo) {
|
||||
LambdaQueryWrapper<MesRollInfo> lqw = Wrappers.lambdaQuery();
|
||||
lqw.like(StringUtils.isNotBlank(bo.getRollNo()), MesRollInfo::getRollNo, bo.getRollNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getRollType()), MesRollInfo::getRollType, bo.getRollType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), MesRollInfo::getStatus, bo.getStatus());
|
||||
lqw.orderByAsc(MesRollInfo::getRollType, MesRollInfo::getRollId);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long insertByBo(MesRollInfoBo bo) {
|
||||
MesRollInfo add = BeanUtil.toBean(bo, MesRollInfo.class);
|
||||
if (StringUtils.isBlank(add.getStatus())) {
|
||||
add.setStatus("Offline");
|
||||
}
|
||||
if (add.getGrindCount() == null) {
|
||||
add.setGrindCount(0);
|
||||
}
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setRollId(add.getRollId());
|
||||
}
|
||||
return add.getRollId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(MesRollInfoBo bo) {
|
||||
MesRollInfo update = BeanUtil.toBean(bo, MesRollInfo.class);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean scrapRoll(Long rollId) {
|
||||
MesRollInfo current = baseMapper.selectById(rollId);
|
||||
if (current == null || !"Offline".equals(current.getStatus())) {
|
||||
throw new RuntimeException("只有离线状态的轧辊才可封闭");
|
||||
}
|
||||
MesRollInfo update = new MesRollInfo();
|
||||
update.setRollId(rollId);
|
||||
update.setStatus("Scrapped");
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncStatusFromChange() {
|
||||
// 从每个机架最新换辊记录中取出在机辊号,更新为 Online
|
||||
for (String standNo : Arrays.asList("1#", "2#")) {
|
||||
MesRollChangeVo latest = rollChangeMapper.selectLatestByStand(standNo);
|
||||
if (latest == null) continue;
|
||||
for (String rollNo : Arrays.asList(
|
||||
latest.getUpperWrNo(), latest.getLowerWrNo(),
|
||||
latest.getUpperBrNo(), latest.getLowerBrNo())) {
|
||||
if (StringUtils.isNotBlank(rollNo)) {
|
||||
baseMapper.updateStatusByRollNo(rollNo, "Online");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package com.klp.mes.roll.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.mes.roll.domain.MesRollStandby;
|
||||
import com.klp.mes.roll.domain.bo.MesRollStandbyBo;
|
||||
import com.klp.mes.roll.domain.vo.MesRollStandbyVo;
|
||||
import com.klp.mes.roll.mapper.MesRollInfoMapper;
|
||||
import com.klp.mes.roll.mapper.MesRollStandbyMapper;
|
||||
import com.klp.mes.roll.service.IMesRollStandbyService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 下批轧辊 Service 实现
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class MesRollStandbyServiceImpl implements IMesRollStandbyService {
|
||||
|
||||
private final MesRollStandbyMapper baseMapper;
|
||||
private final MesRollInfoMapper rollInfoMapper;
|
||||
|
||||
@Override
|
||||
public MesRollStandbyVo queryById(Long standbyId) {
|
||||
return baseMapper.selectVoById(standbyId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MesRollStandbyVo> queryByStand(String standNo) {
|
||||
return baseMapper.selectByStand(standNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long addStandby(MesRollStandbyBo bo) {
|
||||
MesRollStandby add = BeanUtil.toBean(bo, MesRollStandby.class);
|
||||
if (add.getReadyTime() == null) {
|
||||
add.setReadyTime(new Date());
|
||||
}
|
||||
baseMapper.insert(add);
|
||||
// 将该辊状态更新为 Standby(下批待用)
|
||||
if (StringUtils.isNotBlank(add.getRollNo())) {
|
||||
rollInfoMapper.updateStatusByRollNo(add.getRollNo(), "Standby");
|
||||
}
|
||||
return add.getStandbyId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(MesRollStandbyBo bo) {
|
||||
MesRollStandby update = BeanUtil.toBean(bo, MesRollStandby.class);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteById(Long standbyId) {
|
||||
MesRollStandbyVo vo = baseMapper.selectVoById(standbyId);
|
||||
boolean ok = baseMapper.deleteById(standbyId) > 0;
|
||||
// 只有仍处于 Standby 状态时才回退为 Offline(若已换上变 Online 则不干涉)
|
||||
if (ok && vo != null && StringUtils.isNotBlank(vo.getRollNo())) {
|
||||
rollInfoMapper.updateStatusByRollNoIfStatus(vo.getRollNo(), "Offline", "Standby");
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean clearByStand(String standNo) {
|
||||
// 先查出所有辊号再清空
|
||||
List<MesRollStandbyVo> list = baseMapper.selectByStand(standNo);
|
||||
int rows = baseMapper.clearByStand(standNo);
|
||||
for (MesRollStandbyVo vo : list) {
|
||||
if (StringUtils.isNotBlank(vo.getRollNo())) {
|
||||
// 只有仍处于 Standby 状态时才回退为 Offline(换辊后已变 Online 的不动)
|
||||
rollInfoMapper.updateStatusByRollNoIfStatus(vo.getRollNo(), "Offline", "Standby");
|
||||
}
|
||||
}
|
||||
return rows > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.mes.roll.mapper.MesRollChangeMapper">
|
||||
|
||||
<!-- 查询指定机架最新一次换辊记录(即当前在机轧辊) -->
|
||||
<select id="selectLatestByStand" resultType="com.klp.mes.roll.domain.vo.MesRollChangeVo">
|
||||
SELECT change_id, change_no, change_time, stand_no, change_type, change_status, operator,
|
||||
upper_wr_no, upper_wr_dia, lower_wr_no, lower_wr_dia,
|
||||
upper_br_no, upper_br_dia, lower_br_no, lower_br_dia,
|
||||
remark, create_time
|
||||
FROM mes_roll_change
|
||||
WHERE del_flag = 0
|
||||
AND stand_no = #{standNo}
|
||||
ORDER BY change_time DESC, change_id DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 查询同机架在本次换辊之后最近一次换辊的时间 -->
|
||||
<select id="selectNextChangeTime" resultType="java.util.Date">
|
||||
SELECT MIN(change_time)
|
||||
FROM mes_roll_change
|
||||
WHERE del_flag = 0
|
||||
AND stand_no = #{standNo}
|
||||
AND change_time > #{changeTime}
|
||||
</select>
|
||||
|
||||
<!--
|
||||
统计 [startTime, endTime) 时间段内,
|
||||
符合条件的 wms_coil_pending_action 记录关联的卷料实测长度之和(mm)。
|
||||
endTime 为 null 时取 NOW() 作为上界。
|
||||
processed_coil_ids 存储逗号分隔的 material_id 列表,使用 FIND_IN_SET 关联。
|
||||
-->
|
||||
<select id="selectWorkLength" resultType="java.math.BigDecimal">
|
||||
SELECT IFNULL(SUM(mc.actual_length), 0)
|
||||
FROM wms_coil_pending_action cpa
|
||||
INNER JOIN wms_material_coil mc
|
||||
ON FIND_IN_SET(mc.coil_id, cpa.processed_coil_ids) > 0
|
||||
WHERE cpa.del_flag = 0
|
||||
AND cpa.action_status = 2
|
||||
AND cpa.action_type IN (205, 504, 524)
|
||||
AND cpa.create_time >= #{startTime}
|
||||
AND cpa.create_time < IFNULL(#{endTime}, NOW())
|
||||
AND mc.create_time >= #{startTime}
|
||||
AND mc.create_time < IFNULL(#{endTime}, NOW())
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
45
klp-mes/src/main/resources/mapper/roll/MesRollInfoMapper.xml
Normal file
45
klp-mes/src/main/resources/mapper/roll/MesRollInfoMapper.xml
Normal file
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.mes.roll.mapper.MesRollInfoMapper">
|
||||
|
||||
<select id="selectStatusStats" resultType="map">
|
||||
SELECT status, COUNT(*) AS cnt
|
||||
FROM mes_roll_info
|
||||
WHERE del_flag = 0
|
||||
GROUP BY status
|
||||
</select>
|
||||
|
||||
<select id="selectRollNoList" resultType="string">
|
||||
SELECT roll_no FROM mes_roll_info
|
||||
WHERE del_flag = 0
|
||||
AND status != 'Scrapped'
|
||||
<if test="rollType != null and rollType != ''">
|
||||
AND roll_type = #{rollType}
|
||||
</if>
|
||||
<if test="status != null and status != ''">
|
||||
AND status = #{status}
|
||||
</if>
|
||||
ORDER BY roll_no ASC
|
||||
</select>
|
||||
|
||||
<select id="selectByRollNo" resultType="com.klp.mes.roll.domain.MesRollInfo">
|
||||
SELECT * FROM mes_roll_info
|
||||
WHERE del_flag = 0 AND roll_no = #{rollNo}
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<update id="updateStatusByRollNo">
|
||||
UPDATE mes_roll_info
|
||||
SET status = #{status}, update_time = NOW()
|
||||
WHERE del_flag = 0 AND roll_no = #{rollNo}
|
||||
</update>
|
||||
|
||||
<update id="updateStatusByRollNoIfStatus">
|
||||
UPDATE mes_roll_info
|
||||
SET status = #{status}, update_time = NOW()
|
||||
WHERE del_flag = 0 AND roll_no = #{rollNo} AND status = #{onlyIfStatus}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.mes.roll.mapper.MesRollStandbyMapper">
|
||||
|
||||
<!-- 按机架查询下批轧辊,附带辊位中文标签 -->
|
||||
<select id="selectByStand" resultType="com.klp.mes.roll.domain.vo.MesRollStandbyVo">
|
||||
SELECT
|
||||
standby_id, stand_no, roll_no, roll_type, position,
|
||||
CASE
|
||||
WHEN roll_type = 'BR' AND position = 'UP' THEN '上支撑辊'
|
||||
WHEN roll_type = 'WR' AND position = 'UP' THEN '上工作辊'
|
||||
WHEN roll_type = 'WR' AND position = 'DOWN' THEN '下工作辊'
|
||||
WHEN roll_type = 'BR' AND position = 'DOWN' THEN '下支撑辊'
|
||||
ELSE CONCAT(position, roll_type)
|
||||
END AS position_label,
|
||||
diameter, roughness, crown, ready_time, remark, create_time
|
||||
FROM mes_roll_standby
|
||||
WHERE del_flag = 0
|
||||
AND stand_no = #{standNo}
|
||||
ORDER BY
|
||||
FIELD(roll_type, 'BR', 'WR', 'WR', 'BR'),
|
||||
FIELD(position, 'UP', 'UP', 'DOWN', 'DOWN')
|
||||
</select>
|
||||
|
||||
<!-- 逻辑删除指定机架所有下批轧辊(清空) -->
|
||||
<update id="clearByStand">
|
||||
UPDATE mes_roll_standby
|
||||
SET del_flag = 1
|
||||
WHERE del_flag = 0
|
||||
AND stand_no = #{standNo}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user