init(): 计划和产出代码上传

This commit is contained in:
Allenxy
2025-08-23 16:28:09 +08:00
parent e97f4a0bcb
commit 22ed5bf746
33 changed files with 937 additions and 650 deletions

View File

@@ -6,11 +6,12 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fizz.business.form.ChangePlanStatusForm;
import com.fizz.business.form.L1OperateMatForm;
import com.fizz.business.service.client.PdiPlanClient;
import com.fizz.business.service.CrmPdiPlanService;
import com.fizz.business.service.client.RedisCacheManager;
import com.fizz.business.service.impl.BeanFactory;
import com.fizz.business.utils.MatmapUtil;
import com.fizz.business.utils.WebSocketUtil;
import com.fizz.business.vo.CrmPdiPlanVO;
import com.fizz.business.vo.PdiPlanVO;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
@@ -74,12 +75,10 @@ public enum L1OperateMatEnum implements IEnum<String>, IOperateMat<L1OperateMatF
@Override
public void operate(L1OperateMatForm form) {
ArrayList<String> status = Lists.newArrayList(PlanStatusEnum.PRODUCING.name(), PlanStatusEnum.PRODUCT.name());
PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class);
PdiPlanVO plan = planClient.detail(form.getPlanId());
CrmPdiPlanService planClient = BeanFactory.getBean(CrmPdiPlanService.class);
CrmPdiPlanVO plan = planClient.getByCoilIdAndOperId(form.getEntryMatId());
Assert.notNull(plan, "计划[{}]不存在", plan.getId());
if (!planClient.isVirtualPlan(plan.getId())) {
Assert.isTrue(status.contains(plan.getStatus()), "当前状态[{}]不支持甩尾", plan.getStatus());
}
MatmapUtil.clearMatmap(form.getPorIdx());
WebSocketUtil.sendSignalMsg(form);
WebSocketUtil.sendMatmapMsg();
@@ -114,15 +113,9 @@ public enum L1OperateMatEnum implements IEnum<String>, IOperateMat<L1OperateMatF
*
* @param planId 计划id
*/
private void syncPlanStatus(Long planId) {
PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class);
if (planClient.isVirtualPlan(planId)) {
RedisCacheManager redisCacheManager = BeanFactory.getBean(RedisCacheManager.class);
PdiPlanVO virtualPlan = redisCacheManager.getVirtualPlan(planId);
virtualPlan.setStatus(this.name());
redisCacheManager.putVirtualPlan(virtualPlan);
return;
}
private void syncPlanStatus(String planId) {
CrmPdiPlanService planClient = BeanFactory.getBean(CrmPdiPlanService.class);
planClient.changeStatus(ChangePlanStatusForm.builder()
.operation(this.name())
.id(planId)

View File

@@ -15,14 +15,15 @@ import com.fizz.business.form.ChangePlanStatusForm;
import com.fizz.business.form.WebOperateMatForm;
import com.fizz.business.mapper.HalfReturnMapper;
import com.fizz.business.mapper.SegmentMapper;
import com.fizz.business.service.CrmPdiPlanService;
import com.fizz.business.service.PdoExCoilService;
import com.fizz.business.service.TrackService;
import com.fizz.business.service.client.PdiPlanClient;
import com.fizz.business.service.client.RedisCacheManager;
import com.fizz.business.service.impl.BeanFactory;
import com.fizz.business.utils.ErrorDataException;
import com.fizz.business.utils.MatmapUtil;
import com.fizz.business.utils.WebSocketUtil;
import com.fizz.business.vo.CrmPdiPlanVO;
import com.fizz.business.vo.PdiPlanVO;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
@@ -48,13 +49,9 @@ public enum WebOperateMatEnum implements IEnum<String>, IOperateMat<WebOperateMa
Assert.notNull(form.getPorIdx(), "开卷机编号不能为空");
// 页面手动上卷时,如果开卷机有卷
// 需要判断正常卷不允许上卷虚拟卷则需要手动更新matmapsegment
PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class);
MatmapDTO porCoil = MatmapUtil.getMatmap(form.getPorIdx());
if (MatmapUtil.already(porCoil)) {
boolean virtualPlan = planClient.isVirtualPlan(porCoil.getPlanId());
if (!virtualPlan) {
throw new ErrorDataException(ExceptionCodeEnum.ERROR, "当前开卷机已有正在运行的钢卷,不支持上卷");
}
ONLINE.syncPlanStatus(form.getPlanId());
ONLINE.replaceVirtualPlan(form, porCoil);
WebSocketUtil.sendSignalMsg(form, true);
@@ -154,9 +151,9 @@ public enum WebOperateMatEnum implements IEnum<String>, IOperateMat<WebOperateMa
@Override
public void operate(WebOperateMatForm form) {
ArrayList<String> status = Lists.newArrayList(PlanStatusEnum.ONLINE.name());
PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class);
PdiPlanVO plan = planClient.detail(form.getPlanId());
if (Objects.nonNull(plan) && !planClient.isVirtualPlan(plan.getId())) {
CrmPdiPlanService planClient = BeanFactory.getBean(CrmPdiPlanService.class);
CrmPdiPlanVO plan = planClient.getByCoilIdAndOperId(form.getEntryMatId());
if (Objects.nonNull(plan) ) {
Assert.isTrue(!status.contains(plan.getStatus()), "当前状态[{}]不支持甩尾", plan.getStatus());
}
MatmapUtil.clearMatmap(form.getPorIdx());
@@ -192,15 +189,9 @@ public enum WebOperateMatEnum implements IEnum<String>, IOperateMat<WebOperateMa
*
* @param planId 计划id
*/
private void syncPlanStatus(Long planId) {
PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class);
if (planClient.isVirtualPlan(planId)) {
RedisCacheManager redisCacheManager = BeanFactory.getBean(RedisCacheManager.class);
PdiPlanVO virtualPlan = redisCacheManager.getVirtualPlan(planId);
virtualPlan.setStatus(this.name());
redisCacheManager.putVirtualPlan(virtualPlan);
return;
}
private void syncPlanStatus(String planId) {
CrmPdiPlanService planClient = BeanFactory.getBean(CrmPdiPlanService.class);
planClient.changeStatus(ChangePlanStatusForm.builder()
.operation(this.name())
.id(planId)
@@ -221,46 +212,20 @@ public enum WebOperateMatEnum implements IEnum<String>, IOperateMat<WebOperateMa
if (!Lists.newArrayList(HALF_RETURN, ALL_RETURN).contains(form.getOperation()))
return;
PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class);
PdiPlanVO plan = planClient.detail(form.getPlanId());
CrmPdiPlanService planClient = BeanFactory.getBean(CrmPdiPlanService.class);
CrmPdiPlanVO plan = planClient.getByCoilIdAndOperId(form.getEntryMatId());
String entryMatId = form.getEntryMatId();
String returnMatId = form.getReturnMatId();
if (StrUtil.isBlank(returnMatId)) {
returnMatId = BeanFactory.getBean(TrackService.class).getHalfReturnMatId(form.getPlanId(), entryMatId).getReturnMatId();
}
if (Objects.equals(form.getOperation(), HALF_RETURN)) {
HalfReturnMapper returnMapper = BeanFactory.getBean(HalfReturnMapper.class);
// 第一次回退,需要将头部卷与尾部卷都记录到回退表中
if (!Objects.equals(plan.getReturnType(), HALF_RETURN.name())) {
String headCoilId = form.getEntryMatId() + "-1";
int lastIndex = returnMatId.lastIndexOf("-");
if (lastIndex != -1 && lastIndex < returnMatId.length() - 1) {
String numberStr = returnMatId.substring(lastIndex + 1);
int number = Integer.parseInt(numberStr) - 1;
headCoilId = returnMatId.substring(0, lastIndex + 1) + number;
}
// 记录回退头部卷信息
HalfReturn headCoil = new HalfReturn();
headCoil.setEntryMatId(entryMatId);
headCoil.setExitMatId(headCoilId);
headCoil.setPlanNo(plan.getPlanNo());
headCoil.setExitMatWeight(plan.getEntryWeight() - form.getReturnWeight());
headCoil.setReturnMatWeight(0d);
headCoil.setReturnType(HALF_RETURN.name());
headCoil.setReturnRemark(form.getReturnRemark());
headCoil.setReturnMatTime(LocalDateTime.now());
returnMapper.insert(headCoil);
} else {
entryMatId = plan.getReturnMatId();
}
// 记录回退尾卷信息
HalfReturn tailCoil = new HalfReturn();
tailCoil.setEntryMatId(entryMatId);
tailCoil.setExitMatId(returnMatId);
tailCoil.setPlanNo(plan.getPlanNo());
tailCoil.setPlanNo(plan.getPlanid());
tailCoil.setExitMatWeight(0d);
tailCoil.setReturnMatWeight(form.getReturnWeight());
tailCoil.setReturnType(HALF_RETURN.name());
@@ -270,7 +235,7 @@ public enum WebOperateMatEnum implements IEnum<String>, IOperateMat<WebOperateMa
returnMapper.insert(tailCoil);
} else {
// 整卷回退删除已有产出
BeanFactory.getBean(PdoExCoilService.class).deleteExistPdo(form.getPlanId());
BeanFactory.getBean(PdoExCoilService.class).deleteExistPdo(form.getEntryMatId(),form.getPlanId());
}
planClient.changeStatus(ChangePlanStatusForm.builder()

View File

@@ -29,6 +29,12 @@ public class CrmPdiPlanController {
return R.ok(crmPdiPlanService.addCrmPdiPlan(crmPdiPlan));
}
@GetMapping("/getByCoilId")
@Operation(summary ="新增计划")
public R<CrmPdiPlanVO> add(@RequestParam String coilId) {
return R.ok(crmPdiPlanService.getByCoilIdAndOperId(coilId));
}
@PutMapping("/update")
@Operation(summary ="修改计划")
public R<Boolean> update(@RequestBody CrmPdiPlan crmPdiPlan) {

View File

@@ -37,11 +37,11 @@ public class CrmPdoExcoilController {
return R.ok(crmPdoExcoilService.updateCrmPdoExcoil(crmPdoExcoil));
}
@DeleteMapping("/delete/{excoilid}/{operid}")
@DeleteMapping("/delete/{excoilid}/{planId}")
@Operation(summary ="删除实绩")
public R<Boolean> delete(@PathVariable String excoilid, @PathVariable Integer operid) {
return R.ok(crmPdoExcoilService.deleteCrmPdoExcoil(excoilid, operid));
public R<Boolean> delete(@PathVariable String excoilid, @PathVariable String planId) {
return R.ok(crmPdoExcoilService.deleteCrmPdoExcoil(excoilid, planId));
}
@PostMapping("/list")

View File

@@ -50,14 +50,6 @@ public class TrackController {
return R.ok(trackService.getReturnInfo(posIdx));
}
@GetMapping("/half/return/mat/id")
@Operation(description = "获取半卷回退卷号")
public R<HalfReturnInfoVO> getHalfReturnMatId(@RequestParam("planId") Long planId,
@RequestParam("entryMatId") String entryMatId) {
return R.ok(trackService.getHalfReturnMatId(planId, entryMatId));
}
@GetMapping("/coil/position")
@Operation(description = "获取跟踪带钢位置")
public R<CoilPositionDTO> getCoilPosition() {

View File

@@ -2,6 +2,7 @@ package com.fizz.business.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@@ -10,111 +11,306 @@ import java.time.LocalDateTime;
@Data
@TableName("crm_pdi_plan")
@Schema(description = "钢卷计划信息表")
public class CrmPdiPlan implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
private Long id; // 主键ID
@Schema(description = "主键ID")
private Long id;
private Integer seqid; // 主键ID
private String coilid; // 钢卷号
private Integer picklingCount; // 酸洗次数
private Integer dummyCoilFlag; // 虚卷标识
private Integer seqno; // 顺序号
private Integer status; // 状态
private String planid; // 计划ID
private String planType; // 计划类型
private BigDecimal yieldPoint; // 屈服点
private BigDecimal entryWeight; // 入口重量(t)
private BigDecimal entryThick; // 入口厚度(mm)
private BigDecimal entryWidth; // 入口宽度(mm)
private BigDecimal entryLength; // 入口长度(mm)
private BigDecimal entryOuterDiameter; // 入口外径(mm)
private BigDecimal entryInnerDiameter; // 入口内径(mm)
private BigDecimal exitInnerDiameter; // 出口内径(mm)
private String steelGrade; // 钢种
private String exitCoilid; // 出口卷号
private Integer tlvFlag; // 张力平整标识
private String orderNo; // 订单号
private String custommerCode; // 客户代码
private BigDecimal orderThick; // 订单厚度(mm)
private BigDecimal orderWidth; // 订单宽度(mm)
private BigDecimal orderLenLow; // 订单长度下限(mm)
private BigDecimal orderLenUp; // 订单长度上限(mm)
private BigDecimal orderWt; // 订单重量(t)
private BigDecimal orderWtLow; // 订单重量下限(t)
private BigDecimal orderWtUp; // 订单重量上限(t)
private BigDecimal orderMetCoatTop; // 订单镀层上
private BigDecimal orderMetCoatBot; // 订单镀层下
private String finalUse; // 最终用途
private String hotCoilCode; // 热卷代码
private BigDecimal exitLengthTar; // 出口目标长度(mm)
private BigDecimal exitLengthTolMax; // 出口长度公差最大值(mm)
private BigDecimal exitLengthTolMin; // 出口长度公差最小值(mm)
private BigDecimal exitThickTar; // 出口目标厚度(mm)
private BigDecimal exitThickTolMax; // 出口厚度公差最大值(mm)
private BigDecimal exitThickTolMin; // 出口厚度公差最小值(mm)
private BigDecimal exitWidthTar; // 出口目标宽度(mm)
private BigDecimal exitWidthTolMax; // 出口宽度公差最大值(mm)
private BigDecimal exitWidthTolMin; // 出口宽度公差最小值(mm)
private String nextWholeBacklogCode; // 下道全流程积压代码
private String prevWholeBacklogCode; // 上道全流程积压代码
private String exitWtMode; // 出口重量模式
private Integer splitNum; // 分卷数量
private BigDecimal exitWeight1; // 出口重量1
private BigDecimal exitWeight2; // 出口重量2
private BigDecimal exitWeight3; // 出口重量3
private BigDecimal exitWeight4; // 出口重量4
private BigDecimal exitWeight5; // 出口重量5
private BigDecimal exitWeight6; // 出口重量6
private String headSampleMode; // 头部取样模式
private String headSamplePosition; // 头部取样位置
private BigDecimal headSampleLength; // 头部取样长度(mm)
private String headSamplePlace; // 头部取样地点
private Integer headSampleNum; // 头部取样数量
private String tailSampleMode; // 尾部取样模式
private String tailSamplePosition; // 尾部取样位置
private BigDecimal tailSampleLength; // 尾部取样长度(mm)
private String tailSamplePlace; // 尾部取样地点
private Integer tailSampleNum; // 尾部取样数量
private LocalDateTime timestamp; // 时间戳
private LocalDateTime onlineDate; // 上线时间
private LocalDateTime startDate; // 开始时间
private LocalDateTime endDate; // 结束时间
private LocalDateTime furInDate; // 进炉时间
private LocalDateTime furOutDate; // 出炉时间
private LocalDateTime createTime; // 创建时间
private LocalDateTime updateTime; // 更新时间
private String surfaceVice; // 副面
private String weldCode; // 焊缝代码
private Integer spmFlag; // SPM标识
private BigDecimal spmElongation; // SPM延伸率(%)
private BigDecimal spmRollforce; // SPM轧制力
private String spmProcessType; // SPM工艺类型
private String spmControlMode; // SPM控制模式
private BigDecimal spmBendingForce; // SPM弯曲力
private BigDecimal spmCrimpingRollMesh; // SPM咬入辊目
private BigDecimal spmBillyRollMesh; // SPM精轧辊目
private Integer trimFlag; // 切边标识
private String tlvMode; // 张力平整模式
private BigDecimal tlvElongation; // 张力平整延伸率(%)
private Integer chromating; // 钝化标识
private String coatingCode; // 镀层代码
private Integer oilingFlag; // 涂油标识
private String oilingType; // 涂油类型
private BigDecimal oilingTop; // 涂油上
private BigDecimal oilingBottom; // 涂油下
private String heatCycle; // 热循环
private String coatingSelection; // 镀层选择
private String coatingType; // 镀层类型
private String chemTreatMode; // 化学处理模式
private BigDecimal aimWeightTop; // 目标重量上
private BigDecimal aimWeightBottom; // 目标重量下
private BigDecimal maxTolWeightTop; // 最大公差重量上
private BigDecimal maxTolWeightBottom; // 最大公差重量下
private BigDecimal headendGaugeLength; // 头端测厚长度(mm)
private BigDecimal tailendGaugeLength; // 尾端测厚长度(mm)
private String origin; // 产地
private String originCoilid; // 原卷号
}
@Schema(description = "顺序号")
private Integer seqid;
@Schema(description = "钢卷号")
private String coilid;
@Schema(description = "机组号")
private String unitCode;
@Schema(description = "虚卷标识")
private Integer dummyCoilFlag;
@Schema(description = "状态")
private String status;
@Schema(description = "计划ID")
private String planid;
@Schema(description = "计划类型")
private String planType;
@Schema(description = "屈服点")
private BigDecimal yieldPoint;
@Schema(description = "入口重量(t)")
private BigDecimal entryWeight;
@Schema(description = "入口厚度(mm)")
private BigDecimal entryThick;
@Schema(description = "入口宽度(mm)")
private BigDecimal entryWidth;
@Schema(description = "入口长度(mm)")
private BigDecimal entryLength;
@Schema(description = "入口外径(mm)")
private BigDecimal entryOuterDiameter;
@Schema(description = "入口内径(mm)")
private BigDecimal entryInnerDiameter;
@Schema(description = "出口内径(mm)")
private BigDecimal exitInnerDiameter;
@Schema(description = "钢种")
private String steelGrade;
@Schema(description = "出口卷号")
private String exitCoilid;
@Schema(description = "张力平整标识")
private Integer tlvFlag;
@Schema(description = "订单号")
private String orderNo;
@Schema(description = "客户代码")
private String custommerCode;
@Schema(description = "订单厚度(mm)")
private BigDecimal orderThick;
@Schema(description = "订单宽度(mm)")
private BigDecimal orderWidth;
@Schema(description = "订单长度下限(mm)")
private BigDecimal orderLenLow;
@Schema(description = "订单长度上限(mm)")
private BigDecimal orderLenUp;
@Schema(description = "订单重量(t)")
private BigDecimal orderWt;
@Schema(description = "订单重量下限(t)")
private BigDecimal orderWtLow;
@Schema(description = "订单重量上限(t)")
private BigDecimal orderWtUp;
@Schema(description = "订单镀层上")
private BigDecimal orderMetCoatTop;
@Schema(description = "订单镀层下")
private BigDecimal orderMetCoatBot;
@Schema(description = "最终用途")
private String finalUse;
@Schema(description = "热卷代码")
private String hotCoilCode;
@Schema(description = "出口目标长度(mm)")
private BigDecimal exitLengthTar;
@Schema(description = "出口长度公差最大值(mm)")
private BigDecimal exitLengthTolMax;
@Schema(description = "出口长度公差最小值(mm)")
private BigDecimal exitLengthTolMin;
@Schema(description = "出口目标厚度(mm)")
private BigDecimal exitThickTar;
@Schema(description = "出口厚度公差最大值(mm)")
private BigDecimal exitThickTolMax;
@Schema(description = "出口厚度公差最小值(mm)")
private BigDecimal exitThickTolMin;
@Schema(description = "出口目标宽度(mm)")
private BigDecimal exitWidthTar;
@Schema(description = "出口宽度公差最大值(mm)")
private BigDecimal exitWidthTolMax;
@Schema(description = "出口宽度公差最小值(mm)")
private BigDecimal exitWidthTolMin;
@Schema(description = "下道全流程积压代码")
private String nextWholeBacklogCode;
@Schema(description = "上道全流程积压代码")
private String prevWholeBacklogCode;
@Schema(description = "出口重量模式")
private String exitWtMode;
@Schema(description = "分卷数量")
private Integer splitNum;
@Schema(description = "出口重量1")
private BigDecimal exitWeight1;
@Schema(description = "出口重量2")
private BigDecimal exitWeight2;
@Schema(description = "出口重量3")
private BigDecimal exitWeight3;
@Schema(description = "出口重量4")
private BigDecimal exitWeight4;
@Schema(description = "出口重量5")
private BigDecimal exitWeight5;
@Schema(description = "出口重量6")
private BigDecimal exitWeight6;
@Schema(description = "头部取样模式")
private String headSampleMode;
@Schema(description = "头部取样位置")
private String headSamplePosition;
@Schema(description = "头部取样长度(mm)")
private BigDecimal headSampleLength;
@Schema(description = "头部取样地点")
private String headSamplePlace;
@Schema(description = "头部取样数量")
private Integer headSampleNum;
@Schema(description = "尾部取样模式")
private String tailSampleMode;
@Schema(description = "尾部取样位置")
private String tailSamplePosition;
@Schema(description = "尾部取样长度(mm)")
private BigDecimal tailSampleLength;
@Schema(description = "尾部取样地点")
private String tailSamplePlace;
@Schema(description = "尾部取样数量")
private Integer tailSampleNum;
@Schema(description = "时间戳")
private LocalDateTime timestamp;
@Schema(description = "上线时间")
private LocalDateTime onlineDate;
@Schema(description = "开始时间")
private LocalDateTime startDate;
@Schema(description = "结束时间")
private LocalDateTime endDate;
@Schema(description = "进炉时间")
private LocalDateTime furInDate;
@Schema(description = "出炉时间")
private LocalDateTime furOutDate;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "副面")
private String surfaceVice;
@Schema(description = "焊缝代码")
private String weldCode;
@Schema(description = "SPM标识")
private Integer spmFlag;
@Schema(description = "SPM延伸率(%)")
private BigDecimal spmElongation;
@Schema(description = "SPM轧制力")
private BigDecimal spmRollforce;
@Schema(description = "SPM工艺类型")
private String spmProcessType;
@Schema(description = "SPM控制模式")
private String spmControlMode;
@Schema(description = "SPM弯曲力")
private BigDecimal spmBendingForce;
@Schema(description = "SPM咬入辊目")
private BigDecimal spmCrimpingRollMesh;
@Schema(description = "SPM精轧辊目")
private BigDecimal spmBillyRollMesh;
@Schema(description = "切边标识")
private Integer trimFlag;
@Schema(description = "张力平整模式")
private String tlvMode;
@Schema(description = "张力平整延伸率(%)")
private BigDecimal tlvElongation;
@Schema(description = "钝化标识")
private Integer chromating;
@Schema(description = "镀层代码")
private String coatingCode;
@Schema(description = "涂油标识")
private Integer oilingFlag;
@Schema(description = "涂油类型")
private String oilingType;
@Schema(description = "涂油上")
private BigDecimal oilingTop;
@Schema(description = "涂油下")
private BigDecimal oilingBottom;
@Schema(description = "热循环")
private String heatCycle;
@Schema(description = "镀层选择")
private String coatingSelection;
@Schema(description = "镀层类型")
private String coatingType;
@Schema(description = "化学处理模式")
private String chemTreatMode;
@Schema(description = "目标重量上")
private BigDecimal aimWeightTop;
@Schema(description = "目标重量下")
private BigDecimal aimWeightBottom;
@Schema(description = "最大公差重量上")
private BigDecimal maxTolWeightTop;
@Schema(description = "最大公差重量下")
private BigDecimal maxTolWeightBottom;
@Schema(description = "头端测厚长度(mm)")
private BigDecimal headendGaugeLength;
@Schema(description = "尾端测厚长度(mm)")
private BigDecimal tailendGaugeLength;
@Schema(description = "原卷号")
private String originCoilid;
}

View File

@@ -12,103 +12,122 @@ import java.sql.Timestamp;
import java.time.LocalDateTime;
@Data
@TableName("crm_pdo_excoil")
@Schema(description = "钢卷生产数据表")
public class CrmPdoExcoil implements Serializable {
@TableId(type = IdType.AUTO)
@Schema(description = "id")
private static final long serialVersionUID = 1L;
@Schema(description = "主键id")
private Long id;
@Schema(description = "成品卷ID")
private String exitCoilid;
@Schema(description = "成品卷")
private String exitMatId;
@Schema(description = "进入卷ID")
private String encoilid;
@Schema(description = "来料卷")
private String entryMatId;
@Schema(description = "钢种")
private String grade;
@Schema(description = "分切数")
private Integer subId;
@Schema(description = "多火轧制次数")
private Integer operid;
@Schema(description = "开始位置")
private Double startPosition;
@Schema(description = "分卷id")
private Integer subid;
@Schema(description = "结束位置")
private Double endPosition;
@Schema(description = "头部位置")
private Double headpos;
@Schema(description = "计划id")
private Long planId;
@Schema(description = "尾部位置")
private Double tailpos;
@Schema(description = "计划号")
private String planNo;
@Schema(description = "班次")
private String shift;
@Schema(description = "产品类型")
private String prodCode;
@Schema(description = "")
private String crew;
@Schema(description = "")
private String groupNo;
@Schema(description = "退火厚度")
private Double annealThick;
@Schema(description = "入口厚度")
private Double entryThick;
@Schema(description = "入口宽度")
private Double entryWidth;
@Schema(description = "入口重量")
private Double entryWeight;
@Schema(description = "成品厚度")
private Double exitThick;
@Schema(description = "成品宽度")
private Double exitWidth;
@Schema(description = "成品长度")
private Double exitLength;
@Schema(description = "成品内径")
private Double exitInnerDiameter;
@Schema(description = "理论出口重量")
private Double calcExitWeight;
@Schema(description = "实际出口重量")
private Double measExitWeight;
@Schema(description = "外径")
private Double outerDiameter;
@Schema(description = "组号")
private String shiftNo;
@Schema(description = "状态")
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "钢种")
private String steelGrade;
@Schema(description = "来料厚度")
private Double entryThick;
@Schema(description = "来料宽带")
private Double entryWidth;
@Schema(description = "来料长度")
private Double entryLength;
@Schema(description = "来料重量")
private Double entryWeight;
@Schema(description = "上表面镀锌")
private Double weightTop;
@Schema(description = "下表面镀锌")
private Double weightBottom;
@Schema(description = "成品长度")
private Double exitLength;
@Schema(description = "成品带涂料重量")
private Double exitNetWeight;
@Schema(description = "理论重量")
private Double theoryWeight;
@Schema(description = "实际重量")
private Double actualWeight;
@Schema(description = "成品外径")
private Double exitOuterDiameter;
@Schema(description = "成品厚度")
private Double exitThickness;
@Schema(description = "成品宽度")
private Double exitWidth;
@Schema(description = "客户")
private String customer;
@Schema(description = "上线时间")
private LocalDateTime onlineDate;
private LocalDateTime onlineTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "开始时间")
private LocalDateTime startDate;
private LocalDateTime startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "结束时间")
private LocalDateTime endDate;
private LocalDateTime endTime;
@Schema(description = "插入日期")
private LocalDateTime insdate;
@Schema(description = "0-未删除 时间戳:已删除")
private Long delFlag;
@Schema(description = "质量")
private Double quality;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "热卷ID")
private String hotCoilid;
@Schema(description = "修改时间")
private LocalDateTime updateTime;
@Schema(description = "机组代码")
private String nextUnit;
@Schema(description = "机组")
private String unitCode;
@Schema(description = "备注")
private String comments;
@Schema(description = "工序号")
private String processCode;
@Schema(description = "目的地")
private String destination;
}
@Schema(description = "是否尾卷")
private Boolean lastFlag;
@Schema(description = "是否分卷")
private Boolean separateFlag;
@Schema(description = "计划来源L3-L3计划MANUAL-人工")
private String planOrigin;
}

View File

@@ -20,8 +20,8 @@ import java.time.LocalDateTime;
*/
@Getter
@Setter
@TableName("track_ca1_half_return")
@Schema(title = "TrackCa1HalfReturn对象", description = "半卷整卷回退表")
@TableName("cpg_half_return")
@Schema(title = "CpgHalfReturn对象", description = "半卷整卷回退表")
public class HalfReturn implements Serializable {
private static final long serialVersionUID = 1L;

View File

@@ -78,9 +78,6 @@ public class PdoExcoil implements Serializable {
@Schema(description = "来料重量")
private Double entryWeight;
@Schema(description = "实际来料重量CP/ZR/CA需要修改")
private Double actualEntryWeight;
@Schema(description = "上表面镀锌")
private Double weightTop;

View File

@@ -12,7 +12,7 @@ public class CoilHeadDTO implements Serializable {
private boolean first;
private String matId;
private String planNo;
private Long planId;
private String planId;
private double pos;
private int posIdx;
private int porIdx;

View File

@@ -32,7 +32,7 @@ public class CoilPositionDTO implements Serializable {
public static class CoilStripLocation {
private String matId;
private String planNo;
private Long planId;
private String planId;
private double stripLocation;
private Integer porId;
}

View File

@@ -10,7 +10,7 @@ import java.io.Serializable;
public class MatmapDTO implements Serializable {
private String matId;
private String planNo;
private Long planId;
private String planId;
private String positionNameCn;
private String positionNameEn;
private int posIdx;

View File

@@ -1,5 +1,6 @@
package com.fizz.business.dto;
import com.fizz.business.domain.CrmPdoExcoil;
import com.fizz.business.domain.PdoExcoil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
@@ -16,36 +17,8 @@ import java.util.List;
*/
@Getter
@Setter
public class PdoExCoilDTO extends PdoExcoil implements Serializable {
public class PdoExCoilDTO extends CrmPdoExcoil implements Serializable {
@Schema(description = "机组号")
private String unitCode;
@Schema(description = "工序号")
private String processCode;
@Schema(description = "是否尾卷")
private boolean lastFlag;
@Schema(description = "是否分卷")
private boolean separateFlag;
@Schema(description = "是否并卷")
private boolean mergeFlag;
@Schema(description = "并卷数")
private int mergeNum;
@Schema(description = "计划来源L3-L3计划MANUAL-人工")
private String planOrigin;
@Schema(description = "并卷数据")
private List<PdoExCoilSubDTO> subCoilList;
@Schema(description = "子计划数据")
private List<PdiPlanSubDTO> subPlanList;
@Schema(description = "是否实验卷")
private String isExperiment;
@Schema(description = "实验种类")
private String experimentType;
@Schema(description = "工艺规程id")
private Long setupId;
@Schema(description = "工艺规程名称")
private String setupName;
}

View File

@@ -25,7 +25,7 @@ public class ChangePlanStatusForm implements Serializable {
private String operation;
@NotNull(message = "计划id不能为空")
@Schema(description = "计划id集合")
private Long id;
private String id;
@Schema(description = "半卷回退新卷号")
private String returnMatId;
@Schema(description = "回退重量")

View File

@@ -16,6 +16,7 @@ public class CrmPdiPlanForm {
private Integer seqid; // 主键ID
private String coilid; // 钢卷号
private String unitCode; // 钢卷号
private Integer picklingCount; // 酸洗次数
private Integer dummyCoilFlag; // 虚卷标识
private Integer seqno; // 顺序号

View File

@@ -10,7 +10,7 @@ public class CrmPdoExcoilForm {
@Schema(description = "钢卷号")
private String encoilid;
private String coilid;
@Schema(description = "开始日期")
private String startDate;

View File

@@ -25,7 +25,7 @@ public class L1OperateMatForm extends OperateMatForm implements Serializable {
private L1OperateMatEnum operation;
@Builder
public L1OperateMatForm(Integer porIdx, Integer trIdx, Long planId, String entryMatId, String planNo, L1OperateMatEnum operation) {
public L1OperateMatForm(Integer porIdx, Integer trIdx, String planId, String entryMatId, String planNo, L1OperateMatEnum operation) {
super(porIdx, trIdx, planId, entryMatId, planNo);
this.operation = operation;
}

View File

@@ -31,7 +31,7 @@ public class OperateMatForm implements Serializable {
@NotNull(message = "计划id不能为空")
@Schema(description = "计划id")
private Long planId;
private String planId;
@NotBlank(message = "钢卷号不能为空")
@Schema(description = "钢卷号")

View File

@@ -3,6 +3,7 @@ package com.fizz.business.form;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@@ -12,33 +13,15 @@ public class PlanQueryForm {
@Schema(description = "卷ID")
private String coilid;
@Schema(description = "热轧卷ID")
private String hotCoilid;
@Schema(description = "道次数")
private Integer passno;
@Schema(description = "入口厚度")
private Float entryThick;
private BigDecimal entryThick;
@Schema(description = "入口宽度")
private Float entryWidth;
@Schema(description = "入口内径")
private Integer entryInnerDiameter;
@Schema(description = "入口外径")
private Integer entryOuterDiameter;
private BigDecimal entryWidth;
@Schema(description = "状态")
private String status;
@Schema(description = "记录日期")
private LocalDateTime insdate;
@Schema(description = "上线时间")
private LocalDateTime onlineTime;
@Schema(description = "开始日期")
private LocalDateTime startDate;

View File

@@ -37,7 +37,7 @@ public class WebOperateMatForm extends OperateMatForm implements Serializable {
private Double coilLength;
@Builder
public WebOperateMatForm(Integer porIdx, Integer trIdx, Long planId, String entryMatId, String planNo, WebOperateMatEnum operation, Double returnWeight, String returnRemark) {
public WebOperateMatForm(Integer porIdx, Integer trIdx, String planId, String entryMatId, String planNo, WebOperateMatEnum operation, Double returnWeight, String returnRemark) {
super(porIdx, trIdx, planId, entryMatId, planNo);
this.operation = operation;
this.returnWeight = returnWeight;

View File

@@ -13,15 +13,20 @@ import java.util.List;
public interface CrmPdiPlanService extends IService<CrmPdiPlan> {
public CrmPdiPlanVO getByCoilIdAndOperId(String coilid);
CrmPdiPlanVO getByCoilIdAndOperId(String coilid);
public boolean addCrmPdiPlan(CrmPdiPlan crmPdiPlan);
boolean addCrmPdiPlan(CrmPdiPlan crmPdiPlan);
public boolean updateCrmPdiPlan(CrmPdiPlan crmPdiPlan);
boolean updateCrmPdiPlan(CrmPdiPlan crmPdiPlan);
public boolean deleteCrmPdiPlan(List<Long> coilid);
boolean deleteCrmPdiPlan(List<Long> coilid);
public List<CrmPdiPlanVO> listAll(PlanQueryForm form);
List<CrmPdiPlanVO> listAll(PlanQueryForm form);
/**
* 获取未生产的第一个钢卷(按顺序号或创建时间最早)
*/
CrmPdiPlan getFirstUnProducedCoil();
void changeStatus(ChangePlanStatusForm build);
}

View File

@@ -1,7 +1,9 @@
package com.fizz.business.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fizz.business.domain.CrmPdoExcoil;
import com.fizz.business.domain.PdoExcoil;
import com.fizz.business.form.CrmPdoExcoilForm;
import java.util.List;
@@ -13,8 +15,10 @@ public interface CrmPdoExcoilService extends IService<CrmPdoExcoil> {
boolean updateCrmPdoExcoil(CrmPdoExcoil crmPdoExcoil);
boolean deleteCrmPdoExcoil(String excoilid, Integer operid);
boolean deleteCrmPdoExcoil(String excoilid, String planId);
List<CrmPdoExcoil> listAll(CrmPdoExcoilForm form);
Long getNumber(String matId,String planId,Integer subNumber);
}

View File

@@ -16,5 +16,5 @@ public interface PdoExCoilService {
ExitCoilInfoDTO genExitCoilInfo(MatmapDTO trMatmap, ExitCutTypeEnum cutType);
void deleteExistPdo(Long planId);
void deleteExistPdo(String coilId, String planId);
}

View File

@@ -23,9 +23,6 @@ public interface TrackService {
ReturnInfoVO getReturnInfo(int posIdx);
HalfReturnInfoVO getHalfReturnMatId(Long planId, String entryMatId);
CoilPositionDTO getCoilPosition();
void adjustPosition(AdjustPosForm form);

View File

@@ -1,79 +0,0 @@
package com.fizz.business.service.client;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.JavaType;
import com.fizz.business.constants.enums.PlanStatusEnum;
import com.fizz.business.constants.enums.PlanTypeEnum;
import com.fizz.business.form.ChangePlanStatusForm;
import com.fizz.business.service.CrmPdiPlanService;
import com.fizz.business.vo.CrmPdiPlanVO;
import com.fizz.business.vo.PdiPlanVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* 计划执行接口
*
* @author chenhao
* @date 2023/05/17
*/
@Slf4j
@Component
public class PdiPlanClient {
@Autowired
RedisCacheManager redisCacheManager;
@Value("${plan-execute.url:}")
private String url;
@Value("${plan-execute.timeout:30000}")
private int timeout;
private final String queryTrackPlanList = "/plan/track/plan-mat/list";
private final String queryTrackPlanFirst = "/plan/track/plan-mat/first";
private final String queryList = "/plan/list";
private final String changeStatus = "/plan/track/status/change";
public List<PdiPlanVO> queryList(PlanTypeEnum type, PlanStatusEnum status) {
return null;
}
public List<PdiPlanVO> queryTrackPlanList() {
return null;
}
public PdiPlanVO queryTrackPlanFirst() {
return null;
}
public PdiPlanVO detail(Long planId) {
return null;
}
public void changeStatus(ChangePlanStatusForm form) {
if (isVirtualPlan(form.getId())) {
return;
}
}
public boolean isVirtualPlan(long planId) {
// 2020-01-01 00:00:00-->1577808000000
return planId > 1577808000000L;
}
}

View File

@@ -1,17 +1,77 @@
package com.fizz.business.service.hanle;
import com.fizz.business.anno.OpcMessageHandlerType;
import com.fizz.business.constants.enums.L1OperateMatEnum;
import com.fizz.business.constants.enums.OpcMessageType;
import com.fizz.business.domain.CrmPdiPlan;
import com.fizz.business.domain.msg.EntryMovementMessage;
import com.fizz.business.form.L1OperateMatForm;
import com.fizz.business.service.CrmPdiPlanService;
import com.fizz.business.service.OpcMessageHandler;
import com.fizz.business.service.TrackService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@Slf4j
@OpcMessageHandlerType(OpcMessageType.ENTRY_MOVEMENT)
public class EntryMovementHandler implements OpcMessageHandler<EntryMovementMessage> {
@Autowired
private CrmPdiPlanService crmPdiPlanService;
@Autowired
private TrackService trackService;
@Override
public void handle(EntryMovementMessage message) {
System.out.println("处理入口移动消息: " + message);
Integer src = message.getMaterialPlaceSource();
Integer des = message.getMaterialPlaceDestination();
String action = resolveAction(src, des);
log.info("处理入口移动消息: " + message);
if (action != null) {
log.info("识别到动作: " + action);
// 如果是上卷动作
if (action.contains("上卷")) {
CrmPdiPlan coilPlan = crmPdiPlanService.getFirstUnProducedCoil();
if (coilPlan != null) {
log.info("获取到未生产的钢卷: " + coilPlan.getCoilid());
trackService.l1OperateMat(L1OperateMatForm.builder()
.entryMatId(coilPlan.getCoilid())
.operation(L1OperateMatEnum.ONLINE)
.planId(coilPlan.getPlanid())
.porIdx(des)
.build());
} else {
log.error("未找到可上卷的钢卷计划!");
}
}
} else {
log.error("未识别的组合: SRC=" + src + ", DES=" + des);
}
}
private String resolveAction(Integer src, Integer des) {
if (src == null || des == null) {
return null;
}
if (src == 100 && des == 0) {
return "1#开卷机上卷";
} else if (src == 100 && des == 1) {
return "2#开卷机上卷";
} else if (src == 0 && des == 200) {
return "1#开卷机甩尾";
} else if (src == 1 && des == 200) {
return "2#开卷机甩尾";
}
return null;
}
}

View File

@@ -1,6 +1,7 @@
package com.fizz.business.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -30,15 +31,6 @@ import java.util.List;
public class CrmPdiPlanServiceImpl extends ServiceImpl<CrmPdiPlanMapper, CrmPdiPlan> implements CrmPdiPlanService {
@Resource
ModSetupResultService modSetupResultService;
@Resource
ProMatmapService proMatmapService;
@Resource
ModCoilMapService modCoilMapService;
/**
* 根据卷ID和操作员ID查询单个记录
*
@@ -105,14 +97,66 @@ public class CrmPdiPlanServiceImpl extends ServiceImpl<CrmPdiPlanMapper, CrmPdiP
/**
* 查询所有记录
*
* @param form 查询条件
* @return CrmPdiPlan对象的列表
*/
public List<CrmPdiPlanVO> listAll(PlanQueryForm form) {
QueryWrapper<CrmPdiPlan> queryWrapper = new QueryWrapper<>();
queryWrapper.in("STATUS", "NEW", "READY");
// 卷ID
if (StrUtil.isNotBlank(form.getCoilid())) {
queryWrapper.eq("coilid", form.getCoilid());
}
// 入口厚度
if (form.getEntryThick() != null) {
queryWrapper.eq("entry_thick", form.getEntryThick());
}
// 入口宽度
if (form.getEntryWidth() != null) {
queryWrapper.eq("entry_width", form.getEntryWidth());
}
// 状态
if (StrUtil.isNotBlank(form.getStatus())) {
queryWrapper.eq("status", form.getStatus());
} else {
// 如果没传状态,默认查 NEW 和 READY
queryWrapper.in("status", "新计划", "准备好");
}
// 开始日期
if (form.getStartDate() != null) {
queryWrapper.ge("start_date", form.getStartDate());
}
// 结束日期
if (form.getEndDate() != null) {
queryWrapper.le("end_date", form.getEndDate());
}
// 查询并转成 VO
return BeanUtil.copyToList(this.list(queryWrapper), CrmPdiPlanVO.class);
}
@Override
public CrmPdiPlan getFirstUnProducedCoil() {
return this.lambdaQuery()
.eq(CrmPdiPlan::getStatus, 0) // 0 表示未生产
.orderByAsc(CrmPdiPlan::getSeqid) // 按顺序号排序,取第一个
.last("limit 1")
.one();
}
@Override
public void changeStatus(ChangePlanStatusForm build) {
CrmPdiPlan pdiPlan = baseMapper.selectById(build.getId());
pdiPlan.setStatus(build.getOperation());
}
}

View File

@@ -1,8 +1,10 @@
package com.fizz.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fizz.business.domain.CrmPdoExcoil;
import com.fizz.business.domain.PdoExcoil;
import com.fizz.business.form.CrmPdoExcoilForm;
import com.fizz.business.mapper.CrmPdoExcoilMapper;
import com.fizz.business.service.CrmPdoExcoilService;
@@ -51,12 +53,12 @@ public class CrmPdoExcoilServiceImpl extends ServiceImpl<CrmPdoExcoilMapper, Crm
* 根据退出卷ID和操作员ID删除记录
*
* @param excoilid 退出卷ID
* @param operid 操作员ID
* @param planId 操作员ID
* @return 是否删除成功
*/
public boolean deleteCrmPdoExcoil(String excoilid, Integer operid) {
public boolean deleteCrmPdoExcoil(String excoilid, String planId) {
QueryWrapper<CrmPdoExcoil> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("exit_coilid", excoilid).eq("operid", operid);
queryWrapper.eq("exit_mat_id", excoilid).eq("plan_id", planId);
return this.remove(queryWrapper);
}
@@ -70,15 +72,31 @@ public class CrmPdoExcoilServiceImpl extends ServiceImpl<CrmPdoExcoilMapper, Crm
QueryWrapper<CrmPdoExcoil> queryWrapper = new QueryWrapper<>();
// 根据 exit_coilid 和 encoilid 进行查询
if (!StringUtils.isEmpty(form.getEncoilid())) {
queryWrapper.like("exit_coilid", form.getEncoilid()).like("encoilid", form.getEncoilid());
if (!StringUtils.isEmpty(form.getCoilid())) {
queryWrapper.like("exit_mat_id", form.getCoilid());
return baseMapper.selectList(queryWrapper);
}
queryWrapper.ge("start_date", form.getStartDate() + " 00:00:00");
queryWrapper.le("start_date", form.getEndDate() + " 23:59:59");
queryWrapper.orderByDesc("end_date");
if (!StringUtils.isEmpty(form.getStartDate())&& !StringUtils.isEmpty(form.getEndDate())){
queryWrapper.ge("start_time", form.getStartDate() + " 00:00:00");
queryWrapper.le("end_time", form.getEndDate() + " 23:59:59");
}
queryWrapper.orderByDesc("end_time");
return baseMapper.selectList(queryWrapper);
}
@Override
public Long getNumber(String matId, String planId, Integer subNumber) {
LambdaQueryWrapper<CrmPdoExcoil> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CrmPdoExcoil::getEntryMatId,matId);
queryWrapper.eq(CrmPdoExcoil::getPlanId,planId);
queryWrapper.eq(CrmPdoExcoil::getSubId,subNumber);
return baseMapper.selectCount(queryWrapper);
}
}

View File

@@ -1,6 +1,5 @@
package com.fizz.business.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -9,12 +8,12 @@ import com.fizz.business.domain.PdoExcoil;
import com.fizz.business.dto.ExitCoilInfoDTO;
import com.fizz.business.dto.MatmapDTO;
import com.fizz.business.dto.PdoExCoilDTO;
import com.fizz.business.mapper.PdoExcoilMapper;
import com.fizz.business.service.CrmPdiPlanService;
import com.fizz.business.service.CrmPdoExcoilService;
import com.fizz.business.service.PdoExCoilService;
import com.fizz.business.service.PdoStripValueService;
import com.fizz.business.service.client.PdiPlanClient;
import com.fizz.business.utils.CalcUtil;
import com.fizz.business.vo.PdiPlanVO;
import com.fizz.business.vo.CrmPdiPlanVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -23,10 +22,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Objects;
import static com.fizz.business.constants.CommonConstants.SYSTEM_MODULE;
import static com.fizz.business.constants.enums.ExitCutTypeEnum.SPLIT_CUT;
import static com.fizz.business.constants.enums.ExitCutTypeEnum.WELDER_CUT;
import static com.fizz.business.constants.enums.HalfReturnTypeEnum.HEAD_COIL;
import static com.fizz.business.constants.enums.HalfReturnTypeEnum.TAIL_COIL;
/**
@@ -38,9 +36,9 @@ import static com.fizz.business.constants.enums.HalfReturnTypeEnum.TAIL_COIL;
public class PdoExCoilServiceImpl implements PdoExCoilService {
@Autowired
private PdoExcoilMapper pdoExcoilMapper;
private CrmPdoExcoilService crmPdoExcoilService;
@Autowired
private PdiPlanClient pdiPlanClient;
private CrmPdiPlanService crmPdiPlanService;
@Autowired
private PdoStripValueService pdoStripValueService;
@@ -50,48 +48,43 @@ public class PdoExCoilServiceImpl implements PdoExCoilService {
public PdoExCoilDTO saveExCoil(ExitCoilInfoDTO exitCoil) {
PdoExCoilDTO pdoExCoilDTO = new PdoExCoilDTO();
PdiPlanVO plan = pdiPlanClient.detail(exitCoil.getPlanId());
CrmPdiPlanVO plan = crmPdiPlanService.getByCoilIdAndOperId(exitCoil.getEntryMatId());
double aimWeightTop = 1;
double aimWeightBottom = 1;
pdoExCoilDTO.setPlanOrigin(plan.getOrigin());
pdoExCoilDTO.setUnitCode(plan.getL3UnitCode());
pdoExCoilDTO.setProcessCode(plan.getProcessCode());
pdoExCoilDTO.setPlanOrigin(plan.getUnitCode());
pdoExCoilDTO.setUnitCode(plan.getUnitCode());
pdoExCoilDTO.setProcessCode(SYSTEM_MODULE);
pdoExCoilDTO.setExitMatId(exitCoil.getExitMatId());
pdoExCoilDTO.setEntryMatId(exitCoil.getEntryMatId());
pdoExCoilDTO.setSubId(exitCoil.getSubNum());
pdoExCoilDTO.setStartPosition(exitCoil.getStartPos());
pdoExCoilDTO.setEndPosition(exitCoil.getEndPos());
pdoExCoilDTO.setPlanId(plan.getId());
pdoExCoilDTO.setPlanNo(plan.getPlanNo());
pdoExCoilDTO.setProdCode(plan.getProdCode());
pdoExCoilDTO.setSteelGrade(plan.getSteelGrade());
pdoExCoilDTO.setEntryThick(plan.getEntryThickness());
pdoExCoilDTO.setEntryWidth(plan.getEntryWidth());
pdoExCoilDTO.setEntryLength(plan.getEntryLength());
pdoExCoilDTO.setEntryWeight(plan.getEntryWeight());
pdoExCoilDTO.setActualEntryWeight(plan.getActualEntryWeight());
pdoExCoilDTO.setEntryThick(plan.getEntryThick().doubleValue());
pdoExCoilDTO.setEntryWidth(plan.getEntryWidth().doubleValue());
pdoExCoilDTO.setEntryLength(plan.getEntryLength().doubleValue());
pdoExCoilDTO.setEntryWeight(plan.getEntryWeight().doubleValue());
pdoExCoilDTO.setWeightTop(aimWeightTop);
pdoExCoilDTO.setWeightBottom(aimWeightBottom);
pdoExCoilDTO.setExitLength(exitCoil.getExitCutLength());
double exitWeight = CalcUtil.calcCoilWeight(exitCoil.getExitCutLength(), plan.getTargetThickness(), plan.getTargetWidth());
double exitWeight = CalcUtil.calcCoilWeight(exitCoil.getExitCutLength(), plan.getExitThickTar(), plan.getExitWidthTar());
pdoExCoilDTO.setExitNetWeight(exitWeight);
pdoExCoilDTO.setActualWeight(exitWeight);
pdoExCoilDTO.setTheoryWeight(exitWeight);
double exitOuterDiameter = CalcUtil.calcOuterDiameter(exitWeight, plan.getTargetWidth(), plan.getEntryInnerDiameter());
double exitOuterDiameter = CalcUtil.calcOuterDiameter(exitWeight, exitWeight, plan.getEntryInnerDiameter().doubleValue());
pdoExCoilDTO.setExitOuterDiameter(exitOuterDiameter);
pdoExCoilDTO.setExitThickness(plan.getTargetThickness());
pdoExCoilDTO.setExitWidth(plan.getTargetWidth());
pdoExCoilDTO.setExitThickness(plan.getExitThickTar().doubleValue());
pdoExCoilDTO.setExitWidth(plan.getExitWidthTar().doubleValue());
pdoExCoilDTO.setLastFlag(exitCoil.isLastFlag());
pdoExCoilDTO.setSeparateFlag(exitCoil.isSeparateFlag());
// 计划有子卷需要记录通知L3
if (CollUtil.isNotEmpty(plan.getSubPlanList())) {
pdoExCoilDTO.setSubPlanList(plan.getSubPlanList());
}
pdoExCoilDTO.setOnlineTime(plan.getOnlineTime());
pdoExCoilDTO.setStartTime(plan.getProducingTime());
pdoExCoilDTO.setOnlineTime(plan.getOnlineDate());
pdoExCoilDTO.setStartTime(plan.getStartDate());
LocalDateTime now = LocalDateTime.now();
pdoExCoilDTO.setEndTime(now);
@@ -101,12 +94,9 @@ public class PdoExCoilServiceImpl implements PdoExCoilService {
pdoExCoilDTO.setStatus("UNWEIGHT");
log.info("save pdo exit coil:{}", JSONUtil.toJsonStr(pdoExCoilDTO));
// 虚拟卷不记录产出
if (pdiPlanClient.isVirtualPlan(exitCoil.getPlanId())) {
return pdoExCoilDTO;
}
// 产出实际入库
pdoExcoilMapper.insert(pdoExCoilDTO);
crmPdoExcoilService.addCrmPdoExcoil(pdoExCoilDTO);
// 打包segment
pdoStripValueService.treatStripValues(exitCoil);
return pdoExCoilDTO;
@@ -128,39 +118,17 @@ public class PdoExCoilServiceImpl implements PdoExCoilService {
String trCoilId = trMatmap.getMatId();
//准备的成品子卷号
//考虑依据数据库记录分卷,避免因为平台重启导致分卷丢失或错误
Long subNum = pdoExcoilMapper.selectCount(new LambdaQueryWrapper<PdoExcoil>()
.eq(PdoExcoil::getEntryMatId, trCoilId)
.eq(PdoExcoil::getPlanNo, trMatmap.getPlanNo())
.ne(PdoExcoil::getSubId, 0));
Long subNum = crmPdoExcoilService.getNumber(trCoilId
, trMatmap.getPlanNo(),
0);
PdiPlanVO plan = pdiPlanClient.detail(trMatmap.getPlanId());
boolean halfReturnHeadCoil = Objects.equals(plan.getHalfReturnType(), HEAD_COIL.name());
boolean halfReturnTailCoil = Objects.equals(plan.getHalfReturnType(), TAIL_COIL.name());
CrmPdiPlanVO plan = crmPdiPlanService.getByCoilIdAndOperId(trMatmap.getMatId());
String entryMatId = trCoilId;
String exitMatId = entryMatId;
boolean separateFlag = false;
boolean lastFlag = Objects.equals(cutType, WELDER_CUT);
// 头部卷产出时原料卷号A01, 产出卷号: A01-1, 分卷标识: true, 尾卷标识: false
if (halfReturnHeadCoil) {
entryMatId = plan.getReturnMatId();
// 如果是第一次回退,头部卷产出卷号需要手动拼接“-1”
// 多次回退时,头部卷产出卷号和入口卷号一致
if (Objects.equals(plan.getEntryMatId(), plan.getReturnMatId())) {
exitMatId = entryMatId + "-1";
}
separateFlag = true;
lastFlag = false;
}
// 尾部卷产出时原料卷号A01保存在计划的returnMatId产出卷号: A01-2
if (halfReturnTailCoil) {
entryMatId = plan.getReturnMatId();
exitMatId = plan.getEntryMatId();
separateFlag = true;
}
// 分卷处理
if (subNum != 0 || Objects.equals(cutType, SPLIT_CUT)) {
subNum = subNum + 1;
separateFlag = true;
@@ -180,7 +148,7 @@ public class PdoExCoilServiceImpl implements PdoExCoilService {
}
@Override
public void deleteExistPdo(Long planId) {
pdoExcoilMapper.delete(new LambdaQueryWrapper<PdoExcoil>().eq(PdoExcoil::getPlanId, planId));
public void deleteExistPdo(String coilId, String planId) {
crmPdoExcoilService.deleteCrmPdoExcoil(coilId,planId);
}
}

View File

@@ -17,21 +17,23 @@ import com.fizz.business.form.L1OperateMatForm;
import com.fizz.business.form.WebOperateMatForm;
import com.fizz.business.mapper.HalfReturnMapper;
import com.fizz.business.mapper.SegmentMapper;
import com.fizz.business.service.CrmPdiPlanService;
import com.fizz.business.service.TrackService;
import com.fizz.business.service.client.LocalCacheManager;
import com.fizz.business.service.client.PdiPlanClient;
import com.fizz.business.service.client.RedisCacheManager;
import com.fizz.business.utils.CalcUtil;
import com.fizz.business.utils.CoilMeasUtil;
import com.fizz.business.utils.MatmapUtil;
import com.fizz.business.utils.WebSocketUtil;
import com.fizz.business.vo.CrmPdiPlanVO;
import com.fizz.business.vo.HalfReturnInfoVO;
import com.fizz.business.vo.PdiPlanVO;
import com.fizz.business.vo.ReturnInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;
@@ -51,7 +53,7 @@ public class TrackServiceImpl implements TrackService {
@Autowired
SegmentMapper segmentMapper;
@Autowired
PdiPlanClient pdiPlanClient;
CrmPdiPlanService crmPdiPlanService;
@Override
public void webOperateMat(WebOperateMatForm form) {
@@ -73,16 +75,16 @@ public class TrackServiceImpl implements TrackService {
if (MatmapUtil.notReady(matmap)) {
}
PdiPlanVO planVO = pdiPlanClient.detail(matmap.getPlanId());
CrmPdiPlanVO planVO = crmPdiPlanService.getByCoilIdAndOperId(matmap.getPlanId());
String returnType = null;
double returnWt = 0;
if (Objects.equals(planVO.getStatus(), PlanStatusEnum.PRODUCING.name())) {
double coiledLength = redisCacheManager.getStripLocation();
double calcCoilWeight = CalcUtil.calcCoilWeight(coiledLength, planVO.getEntryThickness(), planVO.getEntryWidth());
returnWt = planVO.getEntryWeight() - calcCoilWeight;
double calcCoilWeight = CalcUtil.calcCoilWeight(coiledLength, planVO.getEntryThick(), planVO.getEntryWidth());
returnWt = planVO.getEntryWeight().divide(BigDecimal.valueOf(calcCoilWeight)).setScale(2, RoundingMode.HALF_UP).doubleValue();
returnType = HALF_RETURN.name();
} else if (Objects.equals(planVO.getStatus(), PlanStatusEnum.ONLINE.name())) {
returnWt = planVO.getEntryWeight();
returnWt = planVO.getEntryWeight().doubleValue();
returnType = ALL_RETURN.name();
} else {
log.error("invalid plan status[{}], planId={}", planVO.getStatus(), planVO.getId());
@@ -91,54 +93,11 @@ public class TrackServiceImpl implements TrackService {
return ReturnInfoVO.builder()
.returnWeight(NumberUtil.round(returnWt, 3).doubleValue())
.returnType(returnType)
.entryMatId(planVO.getEntryMatId())
.entryMatId(planVO.getCoilid())
.planId(planVO.getId())
.planNo(planVO.getPlanNo())
.build();
}
/**
* 获取半卷回退的钢卷号
*
* @param entryMatId
* @return
*/
@Override
public HalfReturnInfoVO getHalfReturnMatId(Long planId, String entryMatId) {
PdiPlanVO plan = pdiPlanClient.detail(planId);
String returnMatId = entryMatId;
HalfReturnMapper returnMapper = BeanFactory.getBean(HalfReturnMapper.class);
// 多次回退
if (Objects.equals(plan.getReturnType(), HALF_RETURN.name())) {
entryMatId = plan.getReturnMatId();
LambdaQueryWrapper<HalfReturn> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HalfReturn::getEntryMatId, entryMatId);
queryWrapper.eq(HalfReturn::getPlanNo, plan.getPlanNo());
queryWrapper.eq(HalfReturn::getReturnType, HALF_RETURN.name());
queryWrapper.orderByDesc(HalfReturn::getId);
queryWrapper.last("limit 1");
HalfReturn halfReturn = returnMapper.selectOne(queryWrapper);
if (Objects.nonNull(halfReturn)) {
String exitMatId = halfReturn.getExitMatId();
int lastIndex = exitMatId.lastIndexOf("-");
if (lastIndex != -1 && lastIndex < exitMatId.length() - 1) {
String numberStr = exitMatId.substring(lastIndex + 1);
int number = Integer.parseInt(numberStr) + 1;
returnMatId = exitMatId.substring(0, lastIndex + 1) + number;
}
}
}
// 第一次回退,需要将头部卷与尾部卷都记录到回退表中
else {
returnMatId = entryMatId + "-2";
}
return HalfReturnInfoVO.builder().returnMatId(returnMatId).build();
}
/**
* 调整钢卷位置
* 更新matmap
@@ -240,7 +199,7 @@ public class TrackServiceImpl implements TrackService {
}
// 判断当前计划状态如果是ONLINE需要变更为PRODUCING
PdiPlanVO plan = pdiPlanClient.detail(curr.getPlanId());
CrmPdiPlanVO plan = crmPdiPlanService.getByCoilIdAndOperId(curr.getMatId());
if (Objects.equals(plan.getStatus(), ONLINE.name())) {
webOperateMat(WebOperateMatForm.builder()
.operation(WebOperateMatEnum.PRODUCING)

View File

@@ -2,6 +2,8 @@ package com.fizz.business.utils;
import cn.hutool.core.util.NumberUtil;
import java.math.BigDecimal;
import static com.fizz.business.constants.CommonConstants.RO;
@@ -32,8 +34,8 @@ public class CalcUtil {
* @param width 宽度[mm]
* @return 重量[T]
*/
public static double calcCoilWeight(double length, double thick, double width) {
double v = thick * width * length * RO / (1000 * 1000);
public static double calcCoilWeight(double length, BigDecimal thick, BigDecimal width) {
double v = thick.doubleValue() * width.doubleValue() * length * RO / (1000 * 1000);
return NumberUtil.round(v, 3).doubleValue();
}
@@ -50,18 +52,4 @@ public class CalcUtil {
double v = 2 * Math.sqrt(((weight * 1000) / (width * RO) + Math.PI * Math.pow(innerRadius, 2)) / Math.PI) * 1000;
return NumberUtil.round(v, 0).doubleValue();
}
public static void main(String[] args) {
// 6882.0m
double length = CalcUtil.calcCoilLength(15, 0.27, 1027);
System.out.println(length);
// 15.0T
double weight = CalcUtil.calcCoilWeight(6882, 0.27, 1027);
System.out.println(weight);
// 1620.0mm
double diameter1 = CalcUtil.calcOuterDiameter(15, 1027, 508);
System.out.println(diameter1);
}
}

View File

@@ -89,7 +89,7 @@ public class MatmapUtil {
redisCacheManager.setMatmap(index, matmap);
}
public static void setMatmap(int index, String matId, Long planId, String planNo) {
public static void setMatmap(int index, String matId, String planId, String planNo) {
MatmapDTO matmap = getMatmap(index);
if (ObjectUtil.isNull(matmap)) {
return;

View File

@@ -1,5 +1,6 @@
package com.fizz.business.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -11,106 +12,303 @@ import java.time.LocalDateTime;
@Data
public class CrmPdiPlanVO {
private Long id; // 主键ID
private static final long serialVersionUID = 1L;
private Integer seqid; // 主键ID
private String coilid; // 钢卷号
private Integer picklingCount; // 酸洗次数
private Integer dummyCoilFlag; // 虚卷标识
private Integer seqno; // 顺序号
private Integer status; // 状态
private String planid; // 计划ID
private String planType; // 计划类型
private BigDecimal yieldPoint; // 屈服点
private BigDecimal entryWeight; // 入口重量(t)
private BigDecimal entryThick; // 入口厚度(mm)
private BigDecimal entryWidth; // 入口宽度(mm)
private BigDecimal entryLength; // 入口长度(mm)
private BigDecimal entryOuterDiameter; // 入口外径(mm)
private BigDecimal entryInnerDiameter; // 入口内径(mm)
private BigDecimal exitInnerDiameter; // 出口内径(mm)
private String steelGrade; // 钢种
private String exitCoilid; // 出口卷号
private Integer tlvFlag; // 张力平整标识
private String orderNo; // 订单号
private String custommerCode; // 客户代码
private BigDecimal orderThick; // 订单厚度(mm)
private BigDecimal orderWidth; // 订单宽度(mm)
private BigDecimal orderLenLow; // 订单长度下限(mm)
private BigDecimal orderLenUp; // 订单长度上限(mm)
private BigDecimal orderWt; // 订单重量(t)
private BigDecimal orderWtLow; // 订单重量下限(t)
private BigDecimal orderWtUp; // 订单重量上限(t)
private BigDecimal orderMetCoatTop; // 订单镀层上
private BigDecimal orderMetCoatBot; // 订单镀层下
private String finalUse; // 最终用途
private String hotCoilCode; // 热卷代码
private BigDecimal exitLengthTar; // 出口目标长度(mm)
private BigDecimal exitLengthTolMax; // 出口长度公差最大值(mm)
private BigDecimal exitLengthTolMin; // 出口长度公差最小值(mm)
private BigDecimal exitThickTar; // 出口目标厚度(mm)
private BigDecimal exitThickTolMax; // 出口厚度公差最大值(mm)
private BigDecimal exitThickTolMin; // 出口厚度公差最小值(mm)
private BigDecimal exitWidthTar; // 出口目标宽度(mm)
private BigDecimal exitWidthTolMax; // 出口宽度公差最大值(mm)
private BigDecimal exitWidthTolMin; // 出口宽度公差最小值(mm)
private String nextWholeBacklogCode; // 下道全流程积压代码
private String prevWholeBacklogCode; // 上道全流程积压代码
private String exitWtMode; // 出口重量模式
private Integer splitNum; // 分卷数量
private BigDecimal exitWeight1; // 出口重量1
private BigDecimal exitWeight2; // 出口重量2
private BigDecimal exitWeight3; // 出口重量3
private BigDecimal exitWeight4; // 出口重量4
private BigDecimal exitWeight5; // 出口重量5
private BigDecimal exitWeight6; // 出口重量6
private String headSampleMode; // 头部取样模式
private String headSamplePosition; // 头部取样位置
private BigDecimal headSampleLength; // 头部取样长度(mm)
private String headSamplePlace; // 头部取样地点
private Integer headSampleNum; // 头部取样数量
private String tailSampleMode; // 尾部取样模式
private String tailSamplePosition; // 尾部取样位置
private BigDecimal tailSampleLength; // 尾部取样长度(mm)
private String tailSamplePlace; // 尾部取样地点
private Integer tailSampleNum; // 尾部取样数量
private LocalDateTime timestamp; // 时间戳
private LocalDateTime onlineDate; // 上线时间
private LocalDateTime startDate; // 开始时间
private LocalDateTime endDate; // 结束时间
private LocalDateTime furInDate; // 进炉时间
private LocalDateTime furOutDate; // 出炉时间
private LocalDateTime createTime; // 创建时间
private LocalDateTime updateTime; // 更新时间
private String surfaceVice; // 副面
private String weldCode; // 焊缝代码
private Integer spmFlag; // SPM标识
private BigDecimal spmElongation; // SPM延伸率(%)
private BigDecimal spmRollforce; // SPM轧制力
private String spmProcessType; // SPM工艺类型
private String spmControlMode; // SPM控制模式
private BigDecimal spmBendingForce; // SPM弯曲力
private BigDecimal spmCrimpingRollMesh; // SPM咬入辊目
private BigDecimal spmBillyRollMesh; // SPM精轧辊目
private Integer trimFlag; // 切边标识
private String tlvMode; // 张力平整模式
private BigDecimal tlvElongation; // 张力平整延伸率(%)
private Integer chromating; // 钝化标识
private String coatingCode; // 镀层代码
private Integer oilingFlag; // 涂油标识
private String oilingType; // 涂油类型
private BigDecimal oilingTop; // 涂油上
private BigDecimal oilingBottom; // 涂油下
private String heatCycle; // 热循环
private String coatingSelection; // 镀层选择
private String coatingType; // 镀层类型
private String chemTreatMode; // 化学处理模式
private BigDecimal aimWeightTop; // 目标重量上
private BigDecimal aimWeightBottom; // 目标重量下
private BigDecimal maxTolWeightTop; // 最大公差重量上
private BigDecimal maxTolWeightBottom; // 最大公差重量下
private BigDecimal headendGaugeLength; // 头端测厚长度(mm)
private BigDecimal tailendGaugeLength; // 尾端测厚长度(mm)
private String origin; // 产地
private String originCoilid; // 原卷号
@TableId
@Schema(description = "主键ID")
private Long id;
@Schema(description = "顺序号")
private Integer seqid;
@Schema(description = "钢卷号")
private String coilid;
@Schema(description = "机组号")
private String unitCode;
@Schema(description = "虚卷标识")
private Integer dummyCoilFlag;
@Schema(description = "状态")
private String status;
@Schema(description = "计划ID")
private String planid;
@Schema(description = "计划类型")
private String planType;
@Schema(description = "屈服点")
private BigDecimal yieldPoint;
@Schema(description = "入口重量(t)")
private BigDecimal entryWeight;
@Schema(description = "入口厚度(mm)")
private BigDecimal entryThick;
@Schema(description = "入口宽度(mm)")
private BigDecimal entryWidth;
@Schema(description = "入口长度(mm)")
private BigDecimal entryLength;
@Schema(description = "入口外径(mm)")
private BigDecimal entryOuterDiameter;
@Schema(description = "入口内径(mm)")
private BigDecimal entryInnerDiameter;
@Schema(description = "出口内径(mm)")
private BigDecimal exitInnerDiameter;
@Schema(description = "钢种")
private String steelGrade;
@Schema(description = "出口卷号")
private String exitCoilid;
@Schema(description = "张力平整标识")
private Integer tlvFlag;
@Schema(description = "订单号")
private String orderNo;
@Schema(description = "客户代码")
private String custommerCode;
@Schema(description = "订单厚度(mm)")
private BigDecimal orderThick;
@Schema(description = "订单宽度(mm)")
private BigDecimal orderWidth;
@Schema(description = "订单长度下限(mm)")
private BigDecimal orderLenLow;
@Schema(description = "订单长度上限(mm)")
private BigDecimal orderLenUp;
@Schema(description = "订单重量(t)")
private BigDecimal orderWt;
@Schema(description = "订单重量下限(t)")
private BigDecimal orderWtLow;
@Schema(description = "订单重量上限(t)")
private BigDecimal orderWtUp;
@Schema(description = "订单镀层上")
private BigDecimal orderMetCoatTop;
@Schema(description = "订单镀层下")
private BigDecimal orderMetCoatBot;
@Schema(description = "最终用途")
private String finalUse;
@Schema(description = "热卷代码")
private String hotCoilCode;
@Schema(description = "出口目标长度(mm)")
private BigDecimal exitLengthTar;
@Schema(description = "出口长度公差最大值(mm)")
private BigDecimal exitLengthTolMax;
@Schema(description = "出口长度公差最小值(mm)")
private BigDecimal exitLengthTolMin;
@Schema(description = "出口目标厚度(mm)")
private BigDecimal exitThickTar;
@Schema(description = "出口厚度公差最大值(mm)")
private BigDecimal exitThickTolMax;
@Schema(description = "出口厚度公差最小值(mm)")
private BigDecimal exitThickTolMin;
@Schema(description = "出口目标宽度(mm)")
private BigDecimal exitWidthTar;
@Schema(description = "出口宽度公差最大值(mm)")
private BigDecimal exitWidthTolMax;
@Schema(description = "出口宽度公差最小值(mm)")
private BigDecimal exitWidthTolMin;
@Schema(description = "下道全流程积压代码")
private String nextWholeBacklogCode;
@Schema(description = "上道全流程积压代码")
private String prevWholeBacklogCode;
@Schema(description = "出口重量模式")
private String exitWtMode;
@Schema(description = "分卷数量")
private Integer splitNum;
@Schema(description = "出口重量1")
private BigDecimal exitWeight1;
@Schema(description = "出口重量2")
private BigDecimal exitWeight2;
@Schema(description = "出口重量3")
private BigDecimal exitWeight3;
@Schema(description = "出口重量4")
private BigDecimal exitWeight4;
@Schema(description = "出口重量5")
private BigDecimal exitWeight5;
@Schema(description = "出口重量6")
private BigDecimal exitWeight6;
@Schema(description = "头部取样模式")
private String headSampleMode;
@Schema(description = "头部取样位置")
private String headSamplePosition;
@Schema(description = "头部取样长度(mm)")
private BigDecimal headSampleLength;
@Schema(description = "头部取样地点")
private String headSamplePlace;
@Schema(description = "头部取样数量")
private Integer headSampleNum;
@Schema(description = "尾部取样模式")
private String tailSampleMode;
@Schema(description = "尾部取样位置")
private String tailSamplePosition;
@Schema(description = "尾部取样长度(mm)")
private BigDecimal tailSampleLength;
@Schema(description = "尾部取样地点")
private String tailSamplePlace;
@Schema(description = "尾部取样数量")
private Integer tailSampleNum;
@Schema(description = "时间戳")
private LocalDateTime timestamp;
@Schema(description = "上线时间")
private LocalDateTime onlineDate;
@Schema(description = "开始时间")
private LocalDateTime startDate;
@Schema(description = "结束时间")
private LocalDateTime endDate;
@Schema(description = "进炉时间")
private LocalDateTime furInDate;
@Schema(description = "出炉时间")
private LocalDateTime furOutDate;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "副面")
private String surfaceVice;
@Schema(description = "焊缝代码")
private String weldCode;
@Schema(description = "SPM标识")
private Integer spmFlag;
@Schema(description = "SPM延伸率(%)")
private BigDecimal spmElongation;
@Schema(description = "SPM轧制力")
private BigDecimal spmRollforce;
@Schema(description = "SPM工艺类型")
private String spmProcessType;
@Schema(description = "SPM控制模式")
private String spmControlMode;
@Schema(description = "SPM弯曲力")
private BigDecimal spmBendingForce;
@Schema(description = "SPM咬入辊目")
private BigDecimal spmCrimpingRollMesh;
@Schema(description = "SPM精轧辊目")
private BigDecimal spmBillyRollMesh;
@Schema(description = "切边标识")
private Integer trimFlag;
@Schema(description = "张力平整模式")
private String tlvMode;
@Schema(description = "张力平整延伸率(%)")
private BigDecimal tlvElongation;
@Schema(description = "钝化标识")
private Integer chromating;
@Schema(description = "镀层代码")
private String coatingCode;
@Schema(description = "涂油标识")
private Integer oilingFlag;
@Schema(description = "涂油类型")
private String oilingType;
@Schema(description = "涂油上")
private BigDecimal oilingTop;
@Schema(description = "涂油下")
private BigDecimal oilingBottom;
@Schema(description = "热循环")
private String heatCycle;
@Schema(description = "镀层选择")
private String coatingSelection;
@Schema(description = "镀层类型")
private String coatingType;
@Schema(description = "化学处理模式")
private String chemTreatMode;
@Schema(description = "目标重量上")
private BigDecimal aimWeightTop;
@Schema(description = "目标重量下")
private BigDecimal aimWeightBottom;
@Schema(description = "最大公差重量上")
private BigDecimal maxTolWeightTop;
@Schema(description = "最大公差重量下")
private BigDecimal maxTolWeightBottom;
@Schema(description = "头端测厚长度(mm)")
private BigDecimal headendGaugeLength;
@Schema(description = "尾端测厚长度(mm)")
private BigDecimal tailendGaugeLength;
@Schema(description = "原卷号")
private String originCoilid;
}