Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X
This commit is contained in:
@@ -140,6 +140,12 @@
|
|||||||
<artifactId>klp-pt</artifactId>
|
<artifactId>klp-pt</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 工艺模型配置模块-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.klp</groupId>
|
||||||
|
<artifactId>klp-pltcm</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
package com.klp.crm.controller;
|
package com.klp.crm.controller;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.klp.aps.domain.bo.ApsPlanDetailBo;
|
import com.klp.aps.domain.bo.ApsPlanDetailBo;
|
||||||
import com.klp.aps.domain.bo.ApsPlanSheetBo;
|
import com.klp.aps.domain.bo.ApsPlanSheetBo;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -23,6 +26,7 @@ import com.klp.common.core.validate.EditGroup;
|
|||||||
import com.klp.common.enums.BusinessType;
|
import com.klp.common.enums.BusinessType;
|
||||||
import com.klp.common.utils.poi.ExcelUtil;
|
import com.klp.common.utils.poi.ExcelUtil;
|
||||||
import com.klp.crm.domain.vo.CrmOrderVo;
|
import com.klp.crm.domain.vo.CrmOrderVo;
|
||||||
|
import com.klp.crm.domain.vo.CrmOrderExportVo;
|
||||||
import com.klp.crm.domain.bo.CrmOrderBo;
|
import com.klp.crm.domain.bo.CrmOrderBo;
|
||||||
import com.klp.crm.service.ICrmOrderService;
|
import com.klp.crm.service.ICrmOrderService;
|
||||||
import com.klp.common.core.page.TableDataInfo;
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
@@ -65,6 +69,35 @@ public class CrmOrderController extends BaseController {
|
|||||||
ExcelUtil.exportExcel(list, "正式订单主", CrmOrderVo.class, response);
|
ExcelUtil.exportExcel(list, "正式订单主", CrmOrderVo.class, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出正式订单主列表(业务精简字段,用于合同编辑详情页导出)
|
||||||
|
*/
|
||||||
|
@Log(title = "正式订单主", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/exportDetail")
|
||||||
|
public void exportDetail(@RequestBody CrmOrderBo bo, HttpServletResponse response) {
|
||||||
|
List<CrmOrderVo> list = iCrmOrderService.queryList(bo);
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
List<CrmOrderExportVo> exportList = list.stream().map(vo -> {
|
||||||
|
CrmOrderExportVo export = new CrmOrderExportVo();
|
||||||
|
BeanUtil.copyProperties(vo, export);
|
||||||
|
// 日期格式化
|
||||||
|
export.setSignTime(vo.getSignTime() != null ? sdf.format(vo.getSignTime()) : null);
|
||||||
|
export.setDeliveryDate(vo.getDeliveryDate() != null ? sdf.format(vo.getDeliveryDate()) : null);
|
||||||
|
// 状态转文本
|
||||||
|
if (vo.getStatus() != null) {
|
||||||
|
switch (vo.getStatus().intValue()) {
|
||||||
|
case 0: export.setStatus("草稿"); break;
|
||||||
|
case 1: export.setStatus("已生效"); break;
|
||||||
|
case 2: export.setStatus("已作废"); break;
|
||||||
|
case 3: export.setStatus("已完成"); break;
|
||||||
|
default: export.setStatus(String.valueOf(vo.getStatus())); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return export;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
ExcelUtil.exportExcel(exportList, "合同编辑详情", CrmOrderExportVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取正式订单主详细信息
|
* 获取正式订单主详细信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
package com.klp.crm.controller;
|
package com.klp.crm.controller;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
@@ -18,6 +22,7 @@ import com.klp.common.core.validate.EditGroup;
|
|||||||
import com.klp.common.enums.BusinessType;
|
import com.klp.common.enums.BusinessType;
|
||||||
import com.klp.common.utils.poi.ExcelUtil;
|
import com.klp.common.utils.poi.ExcelUtil;
|
||||||
import com.klp.crm.domain.vo.CrmOrderItemVo;
|
import com.klp.crm.domain.vo.CrmOrderItemVo;
|
||||||
|
import com.klp.crm.domain.vo.CrmOrderItemExportVo;
|
||||||
import com.klp.crm.domain.vo.CrmContractOrderFinanceVo;
|
import com.klp.crm.domain.vo.CrmContractOrderFinanceVo;
|
||||||
import com.klp.crm.domain.bo.CrmOrderItemBo;
|
import com.klp.crm.domain.bo.CrmOrderItemBo;
|
||||||
import com.klp.crm.service.ICrmOrderItemService;
|
import com.klp.crm.service.ICrmOrderItemService;
|
||||||
@@ -56,6 +61,30 @@ public class CrmOrderItemController extends BaseController {
|
|||||||
ExcelUtil.exportExcel(list, "正式订单明细", CrmOrderItemVo.class, response);
|
ExcelUtil.exportExcel(list, "正式订单明细", CrmOrderItemVo.class, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出正式订单明细列表(业务精简字段,用于订单明细列表页导出)
|
||||||
|
*/
|
||||||
|
@Log(title = "正式订单明细", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/exportDetail")
|
||||||
|
public void exportDetail(@RequestBody CrmOrderItemBo bo, HttpServletResponse response) {
|
||||||
|
List<CrmOrderItemVo> list = iCrmOrderItemService.queryList(bo);
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
List<CrmOrderItemExportVo> exportList = list.stream().map(vo -> {
|
||||||
|
CrmOrderItemExportVo export = new CrmOrderItemExportVo();
|
||||||
|
BeanUtil.copyProperties(vo, export);
|
||||||
|
// 日期格式化
|
||||||
|
export.setSignTime(vo.getSignTime() != null ? sdf.format(vo.getSignTime()) : null);
|
||||||
|
// 展平 orderInfo 中的 salesman、orderCode、contractName
|
||||||
|
if (vo.getOrderInfo() != null) {
|
||||||
|
export.setSalesman(vo.getOrderInfo().getSalesman());
|
||||||
|
export.setOrderCode(vo.getOrderInfo().getOrderCode());
|
||||||
|
export.setContractName(vo.getOrderInfo().getContractName());
|
||||||
|
}
|
||||||
|
return export;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
ExcelUtil.exportExcel(exportList, "订单明细列表", CrmOrderItemExportVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取正式订单明细详细信息
|
* 获取正式订单明细详细信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package com.klp.crm.domain.vo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同编辑详情导出视图对象
|
||||||
|
* 仅包含页面表格展示的业务字段(19列)
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class CrmOrderExportVo {
|
||||||
|
|
||||||
|
@ExcelProperty(value = "合同号")
|
||||||
|
private String contractCode;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供方")
|
||||||
|
private String supplier;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "需方")
|
||||||
|
private String customer;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "业务员")
|
||||||
|
private String salesman;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "签订日期")
|
||||||
|
private String signTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "交货日期")
|
||||||
|
private String deliveryDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "签订地点")
|
||||||
|
private String signLocation;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供方地址")
|
||||||
|
private String supplierAddress;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供方电话")
|
||||||
|
private String supplierPhone;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供方开户行")
|
||||||
|
private String supplierBank;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供方账号")
|
||||||
|
private String supplierAccount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "需方地址")
|
||||||
|
private String customerAddress;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "需方电话")
|
||||||
|
private String customerPhone;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "需方开户行")
|
||||||
|
private String customerBank;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "需方账号")
|
||||||
|
private String customerAccount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "订单金额")
|
||||||
|
private BigDecimal orderAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "已收款")
|
||||||
|
private BigDecimal receivedAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "状态")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "备注")
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -0,0 +1,127 @@
|
|||||||
|
package com.klp.crm.domain.vo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单明细列表导出视图对象
|
||||||
|
* 仅包含页面表格展示的业务字段(32列)
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class CrmOrderItemExportVo {
|
||||||
|
|
||||||
|
// ========== 合同信息(联表) ==========
|
||||||
|
|
||||||
|
@ExcelProperty(value = "合同号")
|
||||||
|
private String contractCode;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "合同名称")
|
||||||
|
private String contractName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "需方")
|
||||||
|
private String customer;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供方")
|
||||||
|
private String supplier;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "业务员")
|
||||||
|
private String salesman;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "签订时间")
|
||||||
|
private String signTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "订单编号")
|
||||||
|
private String orderCode;
|
||||||
|
|
||||||
|
// ========== 明细标识 ==========
|
||||||
|
|
||||||
|
@ExcelProperty(value = "明细ID")
|
||||||
|
private Long itemId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "订单ID")
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
// ========== 产品规格 ==========
|
||||||
|
|
||||||
|
@ExcelProperty(value = "产品类型")
|
||||||
|
private String productType;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "原料规格")
|
||||||
|
private String rawMaterialSpec;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "成品规格")
|
||||||
|
private String finishedProductSpec;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "数量")
|
||||||
|
private Long productNum;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "材质")
|
||||||
|
private String material;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "等级")
|
||||||
|
private String grade;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "宽度")
|
||||||
|
private String width;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "厚度")
|
||||||
|
private String thickness;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "宽度公差")
|
||||||
|
private String widthTolerance;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "厚度公差")
|
||||||
|
private String thicknessTolerance;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "重量")
|
||||||
|
private BigDecimal weight;
|
||||||
|
|
||||||
|
// ========== 价格 ==========
|
||||||
|
|
||||||
|
@ExcelProperty(value = "合同定价")
|
||||||
|
private BigDecimal contractPrice;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "明细金额")
|
||||||
|
private BigDecimal itemAmount;
|
||||||
|
|
||||||
|
// ========== 加工要求 ==========
|
||||||
|
|
||||||
|
@ExcelProperty(value = "表面处理")
|
||||||
|
private String surfaceTreatment;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "包装要求")
|
||||||
|
private String packagingReq;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "切边要求")
|
||||||
|
private String edgeCuttingReq;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "表面质量")
|
||||||
|
private String surfaceQuality;
|
||||||
|
|
||||||
|
// ========== 其他 ==========
|
||||||
|
|
||||||
|
@ExcelProperty(value = "特殊要求")
|
||||||
|
private String specialRequire;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "用途")
|
||||||
|
private String purpose;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "定制人")
|
||||||
|
private String customizer;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "发货人")
|
||||||
|
private String shipper;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "排产批次")
|
||||||
|
private String productionBatch;
|
||||||
|
}
|
||||||
@@ -234,6 +234,12 @@ public class CrmOrderItemVo {
|
|||||||
@ExcelProperty(value = "交货日期")
|
@ExcelProperty(value = "交货日期")
|
||||||
private Date deliveryDate;
|
private Date deliveryDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 销售员(联表查询直接映射)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "销售员")
|
||||||
|
private String salesman;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单信息
|
* 订单信息
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -168,7 +168,11 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
|
|||||||
Map<Long, CrmOrderVo> orderMap = orderList.stream()
|
Map<Long, CrmOrderVo> orderMap = orderList.stream()
|
||||||
.collect(Collectors.toMap(CrmOrderVo::getOrderId, o -> o, (a, b) -> a));
|
.collect(Collectors.toMap(CrmOrderVo::getOrderId, o -> o, (a, b) -> a));
|
||||||
for (CrmOrderItemVo item : records) {
|
for (CrmOrderItemVo item : records) {
|
||||||
item.setOrderInfo(orderMap.get(item.getOrderId()));
|
CrmOrderVo order = orderMap.get(item.getOrderId());
|
||||||
|
item.setOrderInfo(order);
|
||||||
|
if (order != null) {
|
||||||
|
item.setSalesman(order.getSalesman());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,6 +74,7 @@
|
|||||||
<result property="customer" column="customer"/>
|
<result property="customer" column="customer"/>
|
||||||
<result property="signTime" column="sign_time"/>
|
<result property="signTime" column="sign_time"/>
|
||||||
<result property="deliveryDate" column="delivery_date"/>
|
<result property="deliveryDate" column="delivery_date"/>
|
||||||
|
<result property="salesman" column="salesman"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- 根据订单ID列表查询订单明细 -->
|
<!-- 根据订单ID列表查询订单明细 -->
|
||||||
@@ -155,7 +156,8 @@
|
|||||||
o.supplier,
|
o.supplier,
|
||||||
o.customer,
|
o.customer,
|
||||||
o.sign_time,
|
o.sign_time,
|
||||||
o.delivery_date
|
o.delivery_date,
|
||||||
|
o.salesman
|
||||||
FROM crm_order_item i
|
FROM crm_order_item i
|
||||||
LEFT JOIN crm_order o ON i.order_id = o.order_id AND o.del_flag = 0
|
LEFT JOIN crm_order o ON i.order_id = o.order_id AND o.del_flag = 0
|
||||||
<where>
|
<where>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.util.Date;
|
|||||||
public class MesRollGrindVo {
|
public class MesRollGrindVo {
|
||||||
|
|
||||||
private Long grindId;
|
private Long grindId;
|
||||||
|
private Long lineId;
|
||||||
private Long rollId;
|
private Long rollId;
|
||||||
private String rollNo;
|
private String rollNo;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<mapper namespace="com.klp.mes.roll.mapper.MesRollGrindMapper">
|
<mapper namespace="com.klp.mes.roll.mapper.MesRollGrindMapper">
|
||||||
|
|
||||||
<select id="selectByRollId" resultType="com.klp.mes.roll.domain.vo.MesRollGrindVo">
|
<select id="selectByRollId" resultType="com.klp.mes.roll.domain.vo.MesRollGrindVo">
|
||||||
SELECT grind_id, roll_id, roll_no, grind_time, team,
|
SELECT grind_id, line_id, roll_id, roll_no, grind_time, team,
|
||||||
dia_before, dia_after, grind_amount, roll_shape,
|
dia_before, dia_after, grind_amount, roll_shape,
|
||||||
flaw_result,
|
flaw_result,
|
||||||
CASE WHEN hardness = '未倒角' THEN 0 ELSE CAST(hardness AS DECIMAL(10,1)) END AS hardness,
|
CASE WHEN hardness = '未倒角' THEN 0 ELSE CAST(hardness AS DECIMAL(10,1)) END AS hardness,
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectList" resultType="com.klp.mes.roll.domain.vo.MesRollGrindVo">
|
<select id="selectList" resultType="com.klp.mes.roll.domain.vo.MesRollGrindVo">
|
||||||
SELECT g.grind_id, g.roll_id, g.roll_no, g.grind_time, g.team,
|
SELECT g.grind_id, g.line_id, g.roll_id, g.roll_no, g.grind_time, g.team,
|
||||||
g.dia_before, g.dia_after, g.grind_amount, g.roll_shape,
|
g.dia_before, g.dia_after, g.grind_amount, g.roll_shape,
|
||||||
g.flaw_result,
|
g.flaw_result,
|
||||||
CASE WHEN g.hardness = '未倒角' THEN 0 ELSE CAST(g.hardness AS DECIMAL(10,1)) END AS hardness,
|
CASE WHEN g.hardness = '未倒角' THEN 0 ELSE CAST(g.hardness AS DECIMAL(10,1)) END AS hardness,
|
||||||
|
|||||||
22
klp-pltcm/pom.xml
Normal file
22
klp-pltcm/pom.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.klp</groupId>
|
||||||
|
<artifactId>klp-oa</artifactId>
|
||||||
|
<version>0.8.3</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>klp-pltcm</artifactId>
|
||||||
|
<name>klp-pltcm</name>
|
||||||
|
<description>工艺模型配置模块(厚度/宽度/屈服强度分类及比例策略)</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.klp</groupId>
|
||||||
|
<artifactId>klp-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.ModDeviceEnableVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModDeviceEnableBo;
|
||||||
|
import com.klp.pltcm.service.IModDeviceEnableService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/deviceEnable")
|
||||||
|
public class ModDeviceEnableController extends BaseController {
|
||||||
|
|
||||||
|
private final IModDeviceEnableService iModDeviceEnableService;
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<ModDeviceEnableVo> list(ModDeviceEnableBo bo, PageQuery pageQuery) {
|
||||||
|
return iModDeviceEnableService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log(title = "设备启用状态", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(ModDeviceEnableBo bo, HttpServletResponse response) {
|
||||||
|
List<ModDeviceEnableVo> list = iModDeviceEnableService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "设备启用状态", ModDeviceEnableVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<ModDeviceEnableVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
|
||||||
|
return R.ok(iModDeviceEnableService.queryById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log(title = "设备启用状态", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody ModDeviceEnableBo bo) {
|
||||||
|
return toAjax(iModDeviceEnableService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log(title = "设备启用状态", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ModDeviceEnableBo bo) {
|
||||||
|
return toAjax(iModDeviceEnableService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log(title = "设备启用状态", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
|
||||||
|
return toAjax(iModDeviceEnableService.deleteWithValidByIds(Arrays.asList(ids), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.ModStrategyVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModStrategyBo;
|
||||||
|
import com.klp.pltcm.service.IModStrategyService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/strategy")
|
||||||
|
public class ModStrategyController extends BaseController {
|
||||||
|
|
||||||
|
private final IModStrategyService iModStrategyService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询策略关联列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<ModStrategyVo> list(ModStrategyBo bo, PageQuery pageQuery) {
|
||||||
|
return iModStrategyService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出策略关联列表
|
||||||
|
*/
|
||||||
|
@Log(title = "策略关联", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(ModStrategyBo bo, HttpServletResponse response) {
|
||||||
|
List<ModStrategyVo> list = iModStrategyService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "策略关联", ModStrategyVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取策略关联详细信息
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<ModStrategyVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long id) {
|
||||||
|
return R.ok(iModStrategyService.queryById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增策略关联
|
||||||
|
*/
|
||||||
|
@Log(title = "策略关联", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody ModStrategyBo bo) {
|
||||||
|
return toAjax(iModStrategyService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改策略关联
|
||||||
|
*/
|
||||||
|
@Log(title = "策略关联", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ModStrategyBo bo) {
|
||||||
|
return toAjax(iModStrategyService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除策略关联
|
||||||
|
*
|
||||||
|
* @param ids 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "策略关联", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(iModStrategyService.deleteWithValidByIds(Arrays.asList(ids), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.ModThickClassVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModThickClassBo;
|
||||||
|
import com.klp.pltcm.service.IModThickClassService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/thickClass")
|
||||||
|
public class ModThickClassController extends BaseController {
|
||||||
|
|
||||||
|
private final IModThickClassService iModThickClassService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询厚度分类列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<ModThickClassVo> list(ModThickClassBo bo, PageQuery pageQuery) {
|
||||||
|
return iModThickClassService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出厚度分类列表
|
||||||
|
*/
|
||||||
|
@Log(title = "厚度分类", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(ModThickClassBo bo, HttpServletResponse response) {
|
||||||
|
List<ModThickClassVo> list = iModThickClassService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "厚度分类", ModThickClassVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取厚度分类详细信息
|
||||||
|
*
|
||||||
|
* @param classId 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{classId}")
|
||||||
|
public R<ModThickClassVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long classId) {
|
||||||
|
return R.ok(iModThickClassService.queryById(classId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增厚度分类
|
||||||
|
*/
|
||||||
|
@Log(title = "厚度分类", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody ModThickClassBo bo) {
|
||||||
|
return toAjax(iModThickClassService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改厚度分类
|
||||||
|
*/
|
||||||
|
@Log(title = "厚度分类", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ModThickClassBo bo) {
|
||||||
|
return toAjax(iModThickClassService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除厚度分类
|
||||||
|
*
|
||||||
|
* @param classIds 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "厚度分类", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{classIds}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] classIds) {
|
||||||
|
return toAjax(iModThickClassService.deleteWithValidByIds(Arrays.asList(classIds), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.ModWidthClassVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModWidthClassBo;
|
||||||
|
import com.klp.pltcm.service.IModWidthClassService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/widthClass")
|
||||||
|
public class ModWidthClassController extends BaseController {
|
||||||
|
|
||||||
|
private final IModWidthClassService iModWidthClassService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宽度分类列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<ModWidthClassVo> list(ModWidthClassBo bo, PageQuery pageQuery) {
|
||||||
|
return iModWidthClassService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出宽度分类列表
|
||||||
|
*/
|
||||||
|
@Log(title = "宽度分类", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(ModWidthClassBo bo, HttpServletResponse response) {
|
||||||
|
List<ModWidthClassVo> list = iModWidthClassService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "宽度分类", ModWidthClassVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取宽度分类详细信息
|
||||||
|
*
|
||||||
|
* @param classId 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{classId}")
|
||||||
|
public R<ModWidthClassVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long classId) {
|
||||||
|
return R.ok(iModWidthClassService.queryById(classId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增宽度分类
|
||||||
|
*/
|
||||||
|
@Log(title = "宽度分类", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody ModWidthClassBo bo) {
|
||||||
|
return toAjax(iModWidthClassService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改宽度分类
|
||||||
|
*/
|
||||||
|
@Log(title = "宽度分类", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ModWidthClassBo bo) {
|
||||||
|
return toAjax(iModWidthClassService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除宽度分类
|
||||||
|
*
|
||||||
|
* @param classIds 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "宽度分类", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{classIds}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] classIds) {
|
||||||
|
return toAjax(iModWidthClassService.deleteWithValidByIds(Arrays.asList(classIds), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.ModYieldStressClassVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModYieldStressClassBo;
|
||||||
|
import com.klp.pltcm.service.IModYieldStressClassService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/yieldStressClass")
|
||||||
|
public class ModYieldStressClassController extends BaseController {
|
||||||
|
|
||||||
|
private final IModYieldStressClassService iModYieldStressClassService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询屈服强度分类列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<ModYieldStressClassVo> list(ModYieldStressClassBo bo, PageQuery pageQuery) {
|
||||||
|
return iModYieldStressClassService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出屈服强度分类列表
|
||||||
|
*/
|
||||||
|
@Log(title = "屈服强度分类", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(ModYieldStressClassBo bo, HttpServletResponse response) {
|
||||||
|
List<ModYieldStressClassVo> list = iModYieldStressClassService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "屈服强度分类", ModYieldStressClassVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取屈服强度分类详细信息
|
||||||
|
*
|
||||||
|
* @param classId 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{classId}")
|
||||||
|
public R<ModYieldStressClassVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long classId) {
|
||||||
|
return R.ok(iModYieldStressClassService.queryById(classId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增屈服强度分类
|
||||||
|
*/
|
||||||
|
@Log(title = "屈服强度分类", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody ModYieldStressClassBo bo) {
|
||||||
|
return toAjax(iModYieldStressClassService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改屈服强度分类
|
||||||
|
*/
|
||||||
|
@Log(title = "屈服强度分类", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ModYieldStressClassBo bo) {
|
||||||
|
return toAjax(iModYieldStressClassService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除屈服强度分类
|
||||||
|
*
|
||||||
|
* @param classIds 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "屈服强度分类", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{classIds}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] classIds) {
|
||||||
|
return toAjax(iModYieldStressClassService.deleteWithValidByIds(Arrays.asList(classIds), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.SchRatioVo;
|
||||||
|
import com.klp.pltcm.domain.bo.SchRatioBo;
|
||||||
|
import com.klp.pltcm.service.ISchRatioService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/ratio")
|
||||||
|
public class SchRatioController extends BaseController {
|
||||||
|
|
||||||
|
private final ISchRatioService iSchRatioService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询比例列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<SchRatioVo> list(SchRatioBo bo, PageQuery pageQuery) {
|
||||||
|
return iSchRatioService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出比例列表
|
||||||
|
*/
|
||||||
|
@Log(title = "比例表", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(SchRatioBo bo, HttpServletResponse response) {
|
||||||
|
List<SchRatioVo> list = iSchRatioService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "比例表", SchRatioVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取比例详细信息
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<SchRatioVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long id) {
|
||||||
|
return R.ok(iSchRatioService.queryById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增比例
|
||||||
|
*/
|
||||||
|
@Log(title = "比例表", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody SchRatioBo bo) {
|
||||||
|
return toAjax(iSchRatioService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改比例
|
||||||
|
*/
|
||||||
|
@Log(title = "比例表", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SchRatioBo bo) {
|
||||||
|
return toAjax(iSchRatioService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除比例
|
||||||
|
*
|
||||||
|
* @param ids 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "比例表", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(iSchRatioService.deleteWithValidByIds(Arrays.asList(ids), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package com.klp.pltcm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
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.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.pltcm.domain.vo.TdbSteelgradeVo;
|
||||||
|
import com.klp.pltcm.domain.bo.TdbSteelgradeBo;
|
||||||
|
import com.klp.pltcm.service.ITdbSteelgradeService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/pltcm/steelgrade")
|
||||||
|
public class TdbSteelgradeController extends BaseController {
|
||||||
|
|
||||||
|
private final ITdbSteelgradeService iTdbSteelgradeService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询钢种分类列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<TdbSteelgradeVo> list(TdbSteelgradeBo bo, PageQuery pageQuery) {
|
||||||
|
return iTdbSteelgradeService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出钢种分类列表
|
||||||
|
*/
|
||||||
|
@Log(title = "钢种分类", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(TdbSteelgradeBo bo, HttpServletResponse response) {
|
||||||
|
List<TdbSteelgradeVo> list = iTdbSteelgradeService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "钢种分类", TdbSteelgradeVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取钢种分类详细信息
|
||||||
|
*
|
||||||
|
* @param steelGrade 钢种名(主键)
|
||||||
|
*/
|
||||||
|
@GetMapping("/{steelGrade}")
|
||||||
|
public R<TdbSteelgradeVo> getInfo(@NotBlank(message = "钢种名不能为空")
|
||||||
|
@PathVariable String steelGrade) {
|
||||||
|
return R.ok(iTdbSteelgradeService.queryById(steelGrade));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增钢种分类
|
||||||
|
*/
|
||||||
|
@Log(title = "钢种分类", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody TdbSteelgradeBo bo) {
|
||||||
|
return toAjax(iTdbSteelgradeService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改钢种分类
|
||||||
|
*/
|
||||||
|
@Log(title = "钢种分类", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TdbSteelgradeBo bo) {
|
||||||
|
return toAjax(iTdbSteelgradeService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除钢种分类
|
||||||
|
*
|
||||||
|
* @param steelGrades 钢种名串
|
||||||
|
*/
|
||||||
|
@Log(title = "钢种分类", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{steelGrades}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "钢种名不能为空")
|
||||||
|
@PathVariable String[] steelGrades) {
|
||||||
|
return toAjax(iTdbSteelgradeService.deleteWithValidByIds(java.util.Arrays.asList(steelGrades), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备启用状态 mod_device_enable
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("mod_device_enable")
|
||||||
|
public class ModDeviceEnable extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String deviceCode;
|
||||||
|
private String deviceName;
|
||||||
|
private String deviceType;
|
||||||
|
private String workshop;
|
||||||
|
private String lineName;
|
||||||
|
private Integer isEnabled;
|
||||||
|
private Integer sortOrder;
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联表 mod_strategy
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("mod_strategy")
|
||||||
|
public class ModStrategy extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表ID
|
||||||
|
*/
|
||||||
|
private Long ratioTableid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略ID
|
||||||
|
*/
|
||||||
|
private Long strategyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0正常 1删除)
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类 mod_thick_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("mod_thick_class")
|
||||||
|
public class ModThickClass extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
@TableId(value = "class_id", type = IdType.INPUT)
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 边界值
|
||||||
|
*/
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0正常 1删除)
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类 mod_width_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("mod_width_class")
|
||||||
|
public class ModWidthClass extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
@TableId(value = "class_id", type = IdType.INPUT)
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 边界值
|
||||||
|
*/
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0正常 1删除)
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类 mod_yield_stress_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("mod_yield_stress_class")
|
||||||
|
public class ModYieldStressClass extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
@TableId(value = "class_id", type = IdType.INPUT)
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 边界值
|
||||||
|
*/
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0正常 1删除)
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
114
klp-pltcm/src/main/java/com/klp/pltcm/domain/SchRatio.java
Normal file
114
klp-pltcm/src/main/java/com/klp/pltcm/domain/SchRatio.java
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表 sch_ratio
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("sch_ratio")
|
||||||
|
public class SchRatio extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例索引
|
||||||
|
*/
|
||||||
|
private Long ratioIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表ID
|
||||||
|
*/
|
||||||
|
private Long ratioTableid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度ID
|
||||||
|
*/
|
||||||
|
private Long thickId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例
|
||||||
|
*/
|
||||||
|
private Double ratio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准0
|
||||||
|
*/
|
||||||
|
private Double stand0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准1
|
||||||
|
*/
|
||||||
|
private Double stand1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准2
|
||||||
|
*/
|
||||||
|
private Double stand2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准3
|
||||||
|
*/
|
||||||
|
private Double stand3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准4
|
||||||
|
*/
|
||||||
|
private Double stand4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准5
|
||||||
|
*/
|
||||||
|
private Double stand5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准6
|
||||||
|
*/
|
||||||
|
private Double stand6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准7
|
||||||
|
*/
|
||||||
|
private Double stand7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准8
|
||||||
|
*/
|
||||||
|
private Double stand8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准9
|
||||||
|
*/
|
||||||
|
private Double stand9;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合计(STAND0-STAND9之和)
|
||||||
|
*/
|
||||||
|
private Double total;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0正常 1删除)
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package com.klp.pltcm.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类 tdb_steelgrade
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("tdb_steelgrade")
|
||||||
|
public class TdbSteelgrade extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种名
|
||||||
|
*/
|
||||||
|
@TableId(value = "steel_grade", type = IdType.INPUT)
|
||||||
|
private String steelGrade;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 冲压级别
|
||||||
|
*/
|
||||||
|
private String drawingGrade;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度
|
||||||
|
*/
|
||||||
|
private BigDecimal yieldStress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服等级
|
||||||
|
*/
|
||||||
|
private BigDecimal yieldClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 内容/备注
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 焊接代码
|
||||||
|
*/
|
||||||
|
private Long weldCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0正常 1删除)
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ModDeviceEnableBo extends BaseEntity {
|
||||||
|
private Long id;
|
||||||
|
private String deviceCode;
|
||||||
|
private String deviceName;
|
||||||
|
private String deviceType;
|
||||||
|
private String workshop;
|
||||||
|
private String lineName;
|
||||||
|
private Integer isEnabled;
|
||||||
|
private Integer sortOrder;
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联业务对象 mod_strategy
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ModStrategyBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表ID
|
||||||
|
*/
|
||||||
|
private Long ratioTableid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略ID
|
||||||
|
*/
|
||||||
|
private Long strategyId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类业务对象 mod_thick_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ModThickClassBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 边界值
|
||||||
|
*/
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类业务对象 mod_width_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ModWidthClassBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 边界值
|
||||||
|
*/
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类业务对象 mod_yield_stress_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ModYieldStressClassBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 边界值
|
||||||
|
*/
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
}
|
||||||
103
klp-pltcm/src/main/java/com/klp/pltcm/domain/bo/SchRatioBo.java
Normal file
103
klp-pltcm/src/main/java/com/klp/pltcm/domain/bo/SchRatioBo.java
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表业务对象 sch_ratio
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class SchRatioBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例索引
|
||||||
|
*/
|
||||||
|
private Long ratioIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表ID
|
||||||
|
*/
|
||||||
|
private Long ratioTableid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度ID
|
||||||
|
*/
|
||||||
|
private Long thickId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例
|
||||||
|
*/
|
||||||
|
private Double ratio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准0
|
||||||
|
*/
|
||||||
|
private Double stand0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准1
|
||||||
|
*/
|
||||||
|
private Double stand1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准2
|
||||||
|
*/
|
||||||
|
private Double stand2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准3
|
||||||
|
*/
|
||||||
|
private Double stand3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准4
|
||||||
|
*/
|
||||||
|
private Double stand4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准5
|
||||||
|
*/
|
||||||
|
private Double stand5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准6
|
||||||
|
*/
|
||||||
|
private Double stand6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准7
|
||||||
|
*/
|
||||||
|
private Double stand7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准8
|
||||||
|
*/
|
||||||
|
private Double stand8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准9
|
||||||
|
*/
|
||||||
|
private Double stand9;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合计
|
||||||
|
*/
|
||||||
|
private Double total;
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package com.klp.pltcm.domain.bo;
|
||||||
|
|
||||||
|
import com.klp.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类业务对象 tdb_steelgrade
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class TdbSteelgradeBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种名
|
||||||
|
*/
|
||||||
|
private String steelGrade;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 冲压级别
|
||||||
|
*/
|
||||||
|
private String drawingGrade;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度
|
||||||
|
*/
|
||||||
|
private BigDecimal yieldStress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服等级
|
||||||
|
*/
|
||||||
|
private BigDecimal yieldClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入日期
|
||||||
|
*/
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 内容/备注
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 焊接代码
|
||||||
|
*/
|
||||||
|
private Long weldCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.klp.pltcm.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class ModDeviceEnableVo {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
@ExcelProperty(value = "设备编码")
|
||||||
|
private String deviceCode;
|
||||||
|
@ExcelProperty(value = "设备名称")
|
||||||
|
private String deviceName;
|
||||||
|
@ExcelProperty(value = "设备类型")
|
||||||
|
private String deviceType;
|
||||||
|
@ExcelProperty(value = "所属车间")
|
||||||
|
private String workshop;
|
||||||
|
@ExcelProperty(value = "所属产线")
|
||||||
|
private String lineName;
|
||||||
|
@ExcelProperty(value = "是否启用")
|
||||||
|
private Integer isEnabled;
|
||||||
|
@ExcelProperty(value = "排序")
|
||||||
|
private Integer sortOrder;
|
||||||
|
@ExcelProperty(value = "备注")
|
||||||
|
private String remark;
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联视图对象 mod_strategy
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class ModStrategyVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "分类ID")
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "比例表ID")
|
||||||
|
private Long ratioTableid;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "策略ID")
|
||||||
|
private Long strategyId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类视图对象 mod_thick_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class ModThickClassVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "分类ID")
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "边界值")
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "描述")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "录入日期")
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类视图对象 mod_width_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class ModWidthClassVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "分类ID")
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "边界值")
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "描述")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "录入日期")
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.klp.pltcm.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类视图对象 mod_yield_stress_class
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class ModYieldStressClassVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "分类ID")
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "边界值")
|
||||||
|
private Double border;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "描述")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "录入日期")
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package com.klp.pltcm.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表视图对象 sch_ratio
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class SchRatioVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "比例索引")
|
||||||
|
private Long ratioIndex;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "比例表ID")
|
||||||
|
private Long ratioTableid;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "厚度ID")
|
||||||
|
private Long thickId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "比例")
|
||||||
|
private Double ratio;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准0")
|
||||||
|
private Double stand0;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准1")
|
||||||
|
private Double stand1;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准2")
|
||||||
|
private Double stand2;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准3")
|
||||||
|
private Double stand3;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准4")
|
||||||
|
private Double stand4;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准5")
|
||||||
|
private Double stand5;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准6")
|
||||||
|
private Double stand6;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准7")
|
||||||
|
private Double stand7;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准8")
|
||||||
|
private Double stand8;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "标准9")
|
||||||
|
private Double stand9;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "录入日期")
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "合计")
|
||||||
|
private Double total;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.klp.pltcm.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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类视图对象 tdb_steelgrade
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class TdbSteelgradeVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "钢种名")
|
||||||
|
private String steelGrade;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "冲压级别")
|
||||||
|
private String drawingGrade;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "屈服强度")
|
||||||
|
private BigDecimal yieldStress;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "屈服等级")
|
||||||
|
private BigDecimal yieldClass;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "录入日期")
|
||||||
|
private Date insDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "内容/备注")
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "焊接代码")
|
||||||
|
private Long weldCode;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModDeviceEnable;
|
||||||
|
import com.klp.pltcm.domain.vo.ModDeviceEnableVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
public interface ModDeviceEnableMapper extends BaseMapperPlus<ModDeviceEnableMapper, ModDeviceEnable, ModDeviceEnableVo> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModStrategy;
|
||||||
|
import com.klp.pltcm.domain.vo.ModStrategyVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface ModStrategyMapper extends BaseMapperPlus<ModStrategyMapper, ModStrategy, ModStrategyVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModThickClass;
|
||||||
|
import com.klp.pltcm.domain.vo.ModThickClassVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface ModThickClassMapper extends BaseMapperPlus<ModThickClassMapper, ModThickClass, ModThickClassVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModWidthClass;
|
||||||
|
import com.klp.pltcm.domain.vo.ModWidthClassVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface ModWidthClassMapper extends BaseMapperPlus<ModWidthClassMapper, ModWidthClass, ModWidthClassVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModYieldStressClass;
|
||||||
|
import com.klp.pltcm.domain.vo.ModYieldStressClassVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface ModYieldStressClassMapper extends BaseMapperPlus<ModYieldStressClassMapper, ModYieldStressClass, ModYieldStressClassVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.SchRatio;
|
||||||
|
import com.klp.pltcm.domain.vo.SchRatioVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface SchRatioMapper extends BaseMapperPlus<SchRatioMapper, SchRatio, SchRatioVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.pltcm.mapper;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.TdbSteelgrade;
|
||||||
|
import com.klp.pltcm.domain.vo.TdbSteelgradeVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface TdbSteelgradeMapper extends BaseMapperPlus<TdbSteelgradeMapper, TdbSteelgrade, TdbSteelgradeVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.vo.ModDeviceEnableVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModDeviceEnableBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IModDeviceEnableService {
|
||||||
|
ModDeviceEnableVo queryById(Long id);
|
||||||
|
TableDataInfo<ModDeviceEnableVo> queryPageList(ModDeviceEnableBo bo, PageQuery pageQuery);
|
||||||
|
List<ModDeviceEnableVo> queryList(ModDeviceEnableBo bo);
|
||||||
|
Boolean insertByBo(ModDeviceEnableBo bo);
|
||||||
|
Boolean updateByBo(ModDeviceEnableBo bo);
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModStrategy;
|
||||||
|
import com.klp.pltcm.domain.vo.ModStrategyVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModStrategyBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface IModStrategyService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询策略关联
|
||||||
|
*/
|
||||||
|
ModStrategyVo queryById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询策略关联列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<ModStrategyVo> queryPageList(ModStrategyBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询策略关联列表
|
||||||
|
*/
|
||||||
|
List<ModStrategyVo> queryList(ModStrategyBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增策略关联
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(ModStrategyBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改策略关联
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(ModStrategyBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除策略关联信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModThickClass;
|
||||||
|
import com.klp.pltcm.domain.vo.ModThickClassVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModThickClassBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface IModThickClassService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询厚度分类
|
||||||
|
*/
|
||||||
|
ModThickClassVo queryById(Long classId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询厚度分类列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<ModThickClassVo> queryPageList(ModThickClassBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询厚度分类列表
|
||||||
|
*/
|
||||||
|
List<ModThickClassVo> queryList(ModThickClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增厚度分类
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(ModThickClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改厚度分类
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(ModThickClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除厚度分类信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModWidthClass;
|
||||||
|
import com.klp.pltcm.domain.vo.ModWidthClassVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModWidthClassBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface IModWidthClassService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宽度分类
|
||||||
|
*/
|
||||||
|
ModWidthClassVo queryById(Long classId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宽度分类列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<ModWidthClassVo> queryPageList(ModWidthClassBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宽度分类列表
|
||||||
|
*/
|
||||||
|
List<ModWidthClassVo> queryList(ModWidthClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增宽度分类
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(ModWidthClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改宽度分类
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(ModWidthClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除宽度分类信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.ModYieldStressClass;
|
||||||
|
import com.klp.pltcm.domain.vo.ModYieldStressClassVo;
|
||||||
|
import com.klp.pltcm.domain.bo.ModYieldStressClassBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface IModYieldStressClassService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询屈服强度分类
|
||||||
|
*/
|
||||||
|
ModYieldStressClassVo queryById(Long classId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询屈服强度分类列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<ModYieldStressClassVo> queryPageList(ModYieldStressClassBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询屈服强度分类列表
|
||||||
|
*/
|
||||||
|
List<ModYieldStressClassVo> queryList(ModYieldStressClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增屈服强度分类
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(ModYieldStressClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改屈服强度分类
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(ModYieldStressClassBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除屈服强度分类信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.SchRatio;
|
||||||
|
import com.klp.pltcm.domain.vo.SchRatioVo;
|
||||||
|
import com.klp.pltcm.domain.bo.SchRatioBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface ISchRatioService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询比例
|
||||||
|
*/
|
||||||
|
SchRatioVo queryById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询比例列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<SchRatioVo> queryPageList(SchRatioBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询比例列表
|
||||||
|
*/
|
||||||
|
List<SchRatioVo> queryList(SchRatioBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增比例
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(SchRatioBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改比例
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(SchRatioBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除比例信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.klp.pltcm.service;
|
||||||
|
|
||||||
|
import com.klp.pltcm.domain.vo.TdbSteelgradeVo;
|
||||||
|
import com.klp.pltcm.domain.bo.TdbSteelgradeBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
public interface ITdbSteelgradeService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询钢种分类
|
||||||
|
*/
|
||||||
|
TdbSteelgradeVo queryById(String steelGrade);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询钢种分类列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<TdbSteelgradeVo> queryPageList(TdbSteelgradeBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询钢种分类列表
|
||||||
|
*/
|
||||||
|
List<TdbSteelgradeVo> queryList(TdbSteelgradeBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增钢种分类
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(TdbSteelgradeBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改钢种分类
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(TdbSteelgradeBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除钢种分类信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.ModDeviceEnableBo;
|
||||||
|
import com.klp.pltcm.domain.vo.ModDeviceEnableVo;
|
||||||
|
import com.klp.pltcm.domain.ModDeviceEnable;
|
||||||
|
import com.klp.pltcm.mapper.ModDeviceEnableMapper;
|
||||||
|
import com.klp.pltcm.service.IModDeviceEnableService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class ModDeviceEnableServiceImpl implements IModDeviceEnableService {
|
||||||
|
|
||||||
|
private final ModDeviceEnableMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModDeviceEnableVo queryById(Long id) {
|
||||||
|
return baseMapper.selectVoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<ModDeviceEnableVo> queryPageList(ModDeviceEnableBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<ModDeviceEnable> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<ModDeviceEnableVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModDeviceEnableVo> queryList(ModDeviceEnableBo bo) {
|
||||||
|
LambdaQueryWrapper<ModDeviceEnable> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<ModDeviceEnable> buildQueryWrapper(ModDeviceEnableBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<ModDeviceEnable> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getDeviceCode()), ModDeviceEnable::getDeviceCode, bo.getDeviceCode());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), ModDeviceEnable::getDeviceName, bo.getDeviceName());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getDeviceType()), ModDeviceEnable::getDeviceType, bo.getDeviceType());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getWorkshop()), ModDeviceEnable::getWorkshop, bo.getWorkshop());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getLineName()), ModDeviceEnable::getLineName, bo.getLineName());
|
||||||
|
lqw.eq(bo.getIsEnabled() != null, ModDeviceEnable::getIsEnabled, bo.getIsEnabled());
|
||||||
|
lqw.orderByAsc(ModDeviceEnable::getSortOrder);
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(ModDeviceEnableBo bo) {
|
||||||
|
ModDeviceEnable add = BeanUtil.toBean(bo, ModDeviceEnable.class);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(ModDeviceEnableBo bo) {
|
||||||
|
ModDeviceEnable update = BeanUtil.toBean(bo, ModDeviceEnable.class);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.ModStrategyBo;
|
||||||
|
import com.klp.pltcm.domain.vo.ModStrategyVo;
|
||||||
|
import com.klp.pltcm.domain.ModStrategy;
|
||||||
|
import com.klp.pltcm.mapper.ModStrategyMapper;
|
||||||
|
import com.klp.pltcm.service.IModStrategyService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 策略关联Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class ModStrategyServiceImpl implements IModStrategyService {
|
||||||
|
|
||||||
|
private final ModStrategyMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModStrategyVo queryById(Long id) {
|
||||||
|
return baseMapper.selectVoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<ModStrategyVo> queryPageList(ModStrategyBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<ModStrategy> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<ModStrategyVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModStrategyVo> queryList(ModStrategyBo bo) {
|
||||||
|
LambdaQueryWrapper<ModStrategy> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<ModStrategy> buildQueryWrapper(ModStrategyBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<ModStrategy> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.eq(bo.getClassId() != null, ModStrategy::getClassId, bo.getClassId());
|
||||||
|
lqw.eq(bo.getRatioTableid() != null, ModStrategy::getRatioTableid, bo.getRatioTableid());
|
||||||
|
lqw.eq(bo.getStrategyId() != null, ModStrategy::getStrategyId, bo.getStrategyId());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(ModStrategyBo bo) {
|
||||||
|
ModStrategy add = BeanUtil.toBean(bo, ModStrategy.class);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(ModStrategyBo bo) {
|
||||||
|
ModStrategy update = BeanUtil.toBean(bo, ModStrategy.class);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
// TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.ModThickClassBo;
|
||||||
|
import com.klp.pltcm.domain.vo.ModThickClassVo;
|
||||||
|
import com.klp.pltcm.domain.ModThickClass;
|
||||||
|
import com.klp.pltcm.mapper.ModThickClassMapper;
|
||||||
|
import com.klp.pltcm.service.IModThickClassService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度分类Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class ModThickClassServiceImpl implements IModThickClassService {
|
||||||
|
|
||||||
|
private final ModThickClassMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModThickClassVo queryById(Long classId) {
|
||||||
|
return baseMapper.selectVoById(classId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<ModThickClassVo> queryPageList(ModThickClassBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<ModThickClass> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<ModThickClassVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModThickClassVo> queryList(ModThickClassBo bo) {
|
||||||
|
LambdaQueryWrapper<ModThickClass> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<ModThickClass> buildQueryWrapper(ModThickClassBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<ModThickClass> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.eq(bo.getClassId() != null, ModThickClass::getClassId, bo.getClassId());
|
||||||
|
lqw.eq(bo.getBorder() != null, ModThickClass::getBorder, bo.getBorder());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getDescription()), ModThickClass::getDescription, bo.getDescription());
|
||||||
|
lqw.orderByAsc(ModThickClass::getClassId);
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(ModThickClassBo bo) {
|
||||||
|
ModThickClass add = BeanUtil.toBean(bo, ModThickClass.class);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setClassId(add.getClassId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(ModThickClassBo bo) {
|
||||||
|
ModThickClass update = BeanUtil.toBean(bo, ModThickClass.class);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
// TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.ModWidthClassBo;
|
||||||
|
import com.klp.pltcm.domain.vo.ModWidthClassVo;
|
||||||
|
import com.klp.pltcm.domain.ModWidthClass;
|
||||||
|
import com.klp.pltcm.mapper.ModWidthClassMapper;
|
||||||
|
import com.klp.pltcm.service.IModWidthClassService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度分类Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class ModWidthClassServiceImpl implements IModWidthClassService {
|
||||||
|
|
||||||
|
private final ModWidthClassMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModWidthClassVo queryById(Long classId) {
|
||||||
|
return baseMapper.selectVoById(classId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<ModWidthClassVo> queryPageList(ModWidthClassBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<ModWidthClass> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<ModWidthClassVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModWidthClassVo> queryList(ModWidthClassBo bo) {
|
||||||
|
LambdaQueryWrapper<ModWidthClass> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<ModWidthClass> buildQueryWrapper(ModWidthClassBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<ModWidthClass> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.eq(bo.getClassId() != null, ModWidthClass::getClassId, bo.getClassId());
|
||||||
|
lqw.eq(bo.getBorder() != null, ModWidthClass::getBorder, bo.getBorder());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getDescription()), ModWidthClass::getDescription, bo.getDescription());
|
||||||
|
lqw.orderByAsc(ModWidthClass::getClassId);
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(ModWidthClassBo bo) {
|
||||||
|
ModWidthClass add = BeanUtil.toBean(bo, ModWidthClass.class);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setClassId(add.getClassId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(ModWidthClassBo bo) {
|
||||||
|
ModWidthClass update = BeanUtil.toBean(bo, ModWidthClass.class);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
// TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.ModYieldStressClassBo;
|
||||||
|
import com.klp.pltcm.domain.vo.ModYieldStressClassVo;
|
||||||
|
import com.klp.pltcm.domain.ModYieldStressClass;
|
||||||
|
import com.klp.pltcm.mapper.ModYieldStressClassMapper;
|
||||||
|
import com.klp.pltcm.service.IModYieldStressClassService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 屈服强度分类Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class ModYieldStressClassServiceImpl implements IModYieldStressClassService {
|
||||||
|
|
||||||
|
private final ModYieldStressClassMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModYieldStressClassVo queryById(Long classId) {
|
||||||
|
return baseMapper.selectVoById(classId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<ModYieldStressClassVo> queryPageList(ModYieldStressClassBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<ModYieldStressClass> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<ModYieldStressClassVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModYieldStressClassVo> queryList(ModYieldStressClassBo bo) {
|
||||||
|
LambdaQueryWrapper<ModYieldStressClass> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<ModYieldStressClass> buildQueryWrapper(ModYieldStressClassBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<ModYieldStressClass> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.eq(bo.getClassId() != null, ModYieldStressClass::getClassId, bo.getClassId());
|
||||||
|
lqw.eq(bo.getBorder() != null, ModYieldStressClass::getBorder, bo.getBorder());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getDescription()), ModYieldStressClass::getDescription, bo.getDescription());
|
||||||
|
lqw.orderByAsc(ModYieldStressClass::getClassId);
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(ModYieldStressClassBo bo) {
|
||||||
|
ModYieldStressClass add = BeanUtil.toBean(bo, ModYieldStressClass.class);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setClassId(add.getClassId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(ModYieldStressClassBo bo) {
|
||||||
|
ModYieldStressClass update = BeanUtil.toBean(bo, ModYieldStressClass.class);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
// TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.SchRatioBo;
|
||||||
|
import com.klp.pltcm.domain.vo.SchRatioVo;
|
||||||
|
import com.klp.pltcm.domain.SchRatio;
|
||||||
|
import com.klp.pltcm.mapper.SchRatioMapper;
|
||||||
|
import com.klp.pltcm.service.ISchRatioService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比例表Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class SchRatioServiceImpl implements ISchRatioService {
|
||||||
|
|
||||||
|
private final SchRatioMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchRatioVo queryById(Long id) {
|
||||||
|
return baseMapper.selectVoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<SchRatioVo> queryPageList(SchRatioBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<SchRatio> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<SchRatioVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SchRatioVo> queryList(SchRatioBo bo) {
|
||||||
|
LambdaQueryWrapper<SchRatio> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<SchRatio> buildQueryWrapper(SchRatioBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<SchRatio> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.eq(bo.getRatioIndex() != null, SchRatio::getRatioIndex, bo.getRatioIndex());
|
||||||
|
lqw.eq(bo.getRatioTableid() != null, SchRatio::getRatioTableid, bo.getRatioTableid());
|
||||||
|
lqw.eq(bo.getThickId() != null, SchRatio::getThickId, bo.getThickId());
|
||||||
|
lqw.eq(bo.getRatio() != null, SchRatio::getRatio, bo.getRatio());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(SchRatioBo bo) {
|
||||||
|
SchRatio add = BeanUtil.toBean(bo, SchRatio.class);
|
||||||
|
// 替代Oracle触发器: 计算STAND0-STAND9的合计值
|
||||||
|
calculateTotal(add);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(SchRatioBo bo) {
|
||||||
|
SchRatio update = BeanUtil.toBean(bo, SchRatio.class);
|
||||||
|
// 替代Oracle触发器: 计算STAND0-STAND9的合计值
|
||||||
|
calculateTotal(update);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算STAND0-STAND9之和 (替代Oracle触发器 TRG_BEF_SCH_RATIO)
|
||||||
|
*/
|
||||||
|
private void calculateTotal(SchRatio entity) {
|
||||||
|
double total = nvl(entity.getStand0()) + nvl(entity.getStand1())
|
||||||
|
+ nvl(entity.getStand2()) + nvl(entity.getStand3())
|
||||||
|
+ nvl(entity.getStand4()) + nvl(entity.getStand5())
|
||||||
|
+ nvl(entity.getStand6()) + nvl(entity.getStand7())
|
||||||
|
+ nvl(entity.getStand8()) + nvl(entity.getStand9());
|
||||||
|
entity.setTotal(total);
|
||||||
|
}
|
||||||
|
|
||||||
|
private double nvl(Double val) {
|
||||||
|
return val != null ? val : 0D;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
// TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package com.klp.pltcm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.pltcm.domain.bo.TdbSteelgradeBo;
|
||||||
|
import com.klp.pltcm.domain.vo.TdbSteelgradeVo;
|
||||||
|
import com.klp.pltcm.domain.TdbSteelgrade;
|
||||||
|
import com.klp.pltcm.mapper.TdbSteelgradeMapper;
|
||||||
|
import com.klp.pltcm.service.ITdbSteelgradeService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钢种分类Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-07-06
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class TdbSteelgradeServiceImpl implements ITdbSteelgradeService {
|
||||||
|
|
||||||
|
private final TdbSteelgradeMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TdbSteelgradeVo queryById(String steelGrade) {
|
||||||
|
return baseMapper.selectVoById(steelGrade);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<TdbSteelgradeVo> queryPageList(TdbSteelgradeBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<TdbSteelgrade> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<TdbSteelgradeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TdbSteelgradeVo> queryList(TdbSteelgradeBo bo) {
|
||||||
|
LambdaQueryWrapper<TdbSteelgrade> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<TdbSteelgrade> buildQueryWrapper(TdbSteelgradeBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<TdbSteelgrade> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getSteelGrade()), TdbSteelgrade::getSteelGrade, bo.getSteelGrade());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getDrawingGrade()), TdbSteelgrade::getDrawingGrade, bo.getDrawingGrade());
|
||||||
|
lqw.eq(bo.getYieldStress() != null, TdbSteelgrade::getYieldStress, bo.getYieldStress());
|
||||||
|
lqw.eq(bo.getYieldClass() != null, TdbSteelgrade::getYieldClass, bo.getYieldClass());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getContent()), TdbSteelgrade::getContent, bo.getContent());
|
||||||
|
lqw.orderByAsc(TdbSteelgrade::getSteelGrade);
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(TdbSteelgradeBo bo) {
|
||||||
|
TdbSteelgrade add = BeanUtil.toBean(bo, TdbSteelgrade.class);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setSteelGrade(add.getSteelGrade());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(TdbSteelgradeBo bo) {
|
||||||
|
TdbSteelgrade update = BeanUtil.toBean(bo, TdbSteelgrade.class);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
// TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?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.pltcm.mapper.ModDeviceEnableMapper">
|
||||||
|
<resultMap type="com.klp.pltcm.domain.ModDeviceEnable" id="ModDeviceEnableResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="deviceCode" column="device_code"/>
|
||||||
|
<result property="deviceName" column="device_name"/>
|
||||||
|
<result property="deviceType" column="device_type"/>
|
||||||
|
<result property="workshop" column="workshop"/>
|
||||||
|
<result property="lineName" column="line_name"/>
|
||||||
|
<result property="isEnabled" column="is_enabled"/>
|
||||||
|
<result property="sortOrder" column="sort_order"/>
|
||||||
|
<result property="remark" column="remark"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?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.pltcm.mapper.ModStrategyMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.pltcm.domain.ModStrategy" id="ModStrategyResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="classId" column="class_id"/>
|
||||||
|
<result property="ratioTableid" column="ratio_tableid"/>
|
||||||
|
<result property="strategyId" column="strategy_id"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?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.pltcm.mapper.ModThickClassMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.pltcm.domain.ModThickClass" id="ModThickClassResult">
|
||||||
|
<result property="classId" column="class_id"/>
|
||||||
|
<result property="border" column="border"/>
|
||||||
|
<result property="description" column="description"/>
|
||||||
|
<result property="insDate" column="ins_date"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?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.pltcm.mapper.ModWidthClassMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.pltcm.domain.ModWidthClass" id="ModWidthClassResult">
|
||||||
|
<result property="classId" column="class_id"/>
|
||||||
|
<result property="border" column="border"/>
|
||||||
|
<result property="description" column="description"/>
|
||||||
|
<result property="insDate" column="ins_date"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?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.pltcm.mapper.ModYieldStressClassMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.pltcm.domain.ModYieldStressClass" id="ModYieldStressClassResult">
|
||||||
|
<result property="classId" column="class_id"/>
|
||||||
|
<result property="border" column="border"/>
|
||||||
|
<result property="description" column="description"/>
|
||||||
|
<result property="insDate" column="ins_date"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
32
klp-pltcm/src/main/resources/mapper/pltcm/SchRatioMapper.xml
Normal file
32
klp-pltcm/src/main/resources/mapper/pltcm/SchRatioMapper.xml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?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.pltcm.mapper.SchRatioMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.pltcm.domain.SchRatio" id="SchRatioResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="ratioIndex" column="ratio_index"/>
|
||||||
|
<result property="ratioTableid" column="ratio_tableid"/>
|
||||||
|
<result property="thickId" column="thick_id"/>
|
||||||
|
<result property="ratio" column="ratio"/>
|
||||||
|
<result property="stand0" column="stand0"/>
|
||||||
|
<result property="stand1" column="stand1"/>
|
||||||
|
<result property="stand2" column="stand2"/>
|
||||||
|
<result property="stand3" column="stand3"/>
|
||||||
|
<result property="stand4" column="stand4"/>
|
||||||
|
<result property="stand5" column="stand5"/>
|
||||||
|
<result property="stand6" column="stand6"/>
|
||||||
|
<result property="stand7" column="stand7"/>
|
||||||
|
<result property="stand8" column="stand8"/>
|
||||||
|
<result property="stand9" column="stand9"/>
|
||||||
|
<result property="insDate" column="ins_date"/>
|
||||||
|
<result property="total" column="total"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?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.pltcm.mapper.TdbSteelgradeMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.pltcm.domain.TdbSteelgrade" id="TdbSteelgradeResult">
|
||||||
|
<result property="steelGrade" column="steel_grade"/>
|
||||||
|
<result property="drawingGrade" column="drawing_grade"/>
|
||||||
|
<result property="yieldStress" column="yield_stress"/>
|
||||||
|
<result property="yieldClass" column="yield_class"/>
|
||||||
|
<result property="insDate" column="ins_date"/>
|
||||||
|
<result property="content" column="content"/>
|
||||||
|
<result property="weldCode" column="weld_code"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -64,3 +64,13 @@ export function listTodayOrder(query) {
|
|||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出正式订单主列表(业务精简字段)
|
||||||
|
export function exportOrder(query) {
|
||||||
|
return request({
|
||||||
|
url: '/crm/order/exportDetail',
|
||||||
|
method: 'post',
|
||||||
|
data: query,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -42,3 +42,13 @@ export function delOrderItem(itemId) {
|
|||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出正式订单明细列表(业务精简字段)
|
||||||
|
export function exportOrderItem(query) {
|
||||||
|
return request({
|
||||||
|
url: '/crm/orderItem/exportDetail',
|
||||||
|
method: 'post',
|
||||||
|
data: query,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container cost-trend-page">
|
<div class="app-container cost-trend-page">
|
||||||
<!-- 筛选区 -->
|
<!-- 筛选区 -->
|
||||||
<el-card class="mb8">
|
<el-card class="mb8 filter-card">
|
||||||
<div class="filter-bar">
|
<div class="filter-bar">
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-model="selectedLine"
|
v-model="selectedLine"
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
{{ line.lineName }}
|
{{ line.lineName }}
|
||||||
</el-radio-button>
|
</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
|
||||||
<el-button type="primary" size="small" icon="el-icon-search" :loading="loading" @click="fetchData">
|
<el-button type="primary" size="small" icon="el-icon-search" :loading="loading" @click="fetchData">
|
||||||
查询
|
查询
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -47,10 +46,10 @@
|
|||||||
multiple
|
multiple
|
||||||
collapse-tags
|
collapse-tags
|
||||||
placeholder="成本类别(全部)"
|
placeholder="成本类别(全部)"
|
||||||
size="small"
|
|
||||||
style="width:160px"
|
|
||||||
@change="onCategoryChange"
|
|
||||||
clearable
|
clearable
|
||||||
|
size="small"
|
||||||
|
style="width:150px"
|
||||||
|
@change="onCategoryChange"
|
||||||
>
|
>
|
||||||
<el-option label="原料" value="原料" />
|
<el-option label="原料" value="原料" />
|
||||||
<el-option label="能耗" value="能耗" />
|
<el-option label="能耗" value="能耗" />
|
||||||
@@ -67,10 +66,10 @@
|
|||||||
collapse-tags
|
collapse-tags
|
||||||
filterable
|
filterable
|
||||||
placeholder="成本项(全部)"
|
placeholder="成本项(全部)"
|
||||||
size="small"
|
|
||||||
style="width:220px"
|
|
||||||
@change="onItemChange"
|
|
||||||
clearable
|
clearable
|
||||||
|
size="small"
|
||||||
|
style="width:200px"
|
||||||
|
@change="onItemChange"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="it in filteredItemOptions"
|
v-for="it in filteredItemOptions"
|
||||||
@@ -81,13 +80,21 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 图表区 -->
|
<!-- 迷你图表网格 -->
|
||||||
<div class="chart-box" v-loading="loading">
|
<div v-loading="loading" class="mini-charts-grid">
|
||||||
<div ref="trendChart" class="chart-body" />
|
<template v-if="seriesList.length">
|
||||||
</div>
|
<div v-for="s in seriesList" :key="s.key" class="mini-chart-card">
|
||||||
|
<div class="mini-chart-header">
|
||||||
<div v-if="summary.seriesCount > 15" class="legend-hint">
|
<span class="mini-chart-dot" :style="{ background: s.color }" />
|
||||||
<i class="el-icon-info" /> 图例较多,可在下方图例区滚动查看,或缩小筛选范围以减少趋势线数量
|
<span class="mini-chart-name">{{ s.name }}</span>
|
||||||
|
<span class="mini-chart-max">峰值 {{ formatMiniMax(s.maxVal) }}</span>
|
||||||
|
</div>
|
||||||
|
<div ref="miniCharts" class="mini-chart-body" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div v-else-if="!loading && reports.length" class="empty-hint">
|
||||||
|
暂无匹配的成本项数据
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -116,7 +123,8 @@ export default {
|
|||||||
selectedItems: [],
|
selectedItems: [],
|
||||||
allItems: [],
|
allItems: [],
|
||||||
loading: false,
|
loading: false,
|
||||||
chart: null,
|
chartInstances: [],
|
||||||
|
seriesList: [],
|
||||||
reports: [],
|
reports: [],
|
||||||
cachedDetails: [],
|
cachedDetails: [],
|
||||||
summary: { seriesCount: 0, maxLabel: '-' }
|
summary: { seriesCount: 0, maxLabel: '-' }
|
||||||
@@ -128,10 +136,6 @@ export default {
|
|||||||
if (!this.selectedLine || !this.productionLines.length) return null
|
if (!this.selectedLine || !this.productionLines.length) return null
|
||||||
return this.productionLines.find(l => l.lineId === this.selectedLine) || null
|
return this.productionLines.find(l => l.lineId === this.selectedLine) || null
|
||||||
},
|
},
|
||||||
lineNameDisplay() {
|
|
||||||
const line = this.selectedLineObj
|
|
||||||
return line ? line.lineName : ''
|
|
||||||
},
|
|
||||||
filteredItemOptions() {
|
filteredItemOptions() {
|
||||||
if (!this.selectedCategories.length) return this.allItems
|
if (!this.selectedCategories.length) return this.allItems
|
||||||
return this.allItems.filter(it => this.selectedCategories.includes(it.category))
|
return this.allItems.filter(it => this.selectedCategories.includes(it.category))
|
||||||
@@ -143,12 +147,12 @@ export default {
|
|||||||
this.$nextTick(() => this.fetchData())
|
this.$nextTick(() => this.fetchData())
|
||||||
})
|
})
|
||||||
this.loadItems()
|
this.loadItems()
|
||||||
this._resizeHandler = () => { if (this.chart) this.chart.resize() }
|
this._resizeHandler = () => this.resizeAllCharts()
|
||||||
window.addEventListener('resize', this._resizeHandler)
|
window.addEventListener('resize', this._resizeHandler)
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
window.removeEventListener('resize', this._resizeHandler)
|
window.removeEventListener('resize', this._resizeHandler)
|
||||||
if (this.chart) { this.chart.dispose(); this.chart = null }
|
this.disposeAllCharts()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initDefaultLine() {
|
initDefaultLine() {
|
||||||
@@ -186,11 +190,9 @@ export default {
|
|||||||
this.allItems = r.rows || []
|
this.allItems = r.rows || []
|
||||||
} catch (e) { /* ignore */ }
|
} catch (e) { /* ignore */ }
|
||||||
},
|
},
|
||||||
|
|
||||||
async fetchData() {
|
async fetchData() {
|
||||||
if (this.selectedLine == null) {
|
if (this.selectedLine == null) return
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.loading = true
|
this.loading = true
|
||||||
try {
|
try {
|
||||||
@@ -204,13 +206,13 @@ export default {
|
|||||||
const allReports = (reportRes.rows || []).sort((a, b) => {
|
const allReports = (reportRes.rows || []).sort((a, b) => {
|
||||||
return (a.reportDate || '').localeCompare(b.reportDate || '')
|
return (a.reportDate || '').localeCompare(b.reportDate || '')
|
||||||
})
|
})
|
||||||
console.log('[CostTrend] reports:', allReports.length, allReports.map(r => ({ id: r.reportId, title: r.reportTitle, date: r.reportDate })))
|
|
||||||
|
|
||||||
if (!allReports.length) {
|
if (!allReports.length) {
|
||||||
this.$modal.msgWarning('该产线暂无报表')
|
this.$modal.msgWarning('该产线暂无报表')
|
||||||
this.reports = []
|
this.reports = []
|
||||||
|
this.seriesList = []
|
||||||
this.summary = { seriesCount: 0, maxLabel: '-' }
|
this.summary = { seriesCount: 0, maxLabel: '-' }
|
||||||
if (this.chart) this.chart.clear()
|
this.disposeAllCharts()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.reports = allReports
|
this.reports = allReports
|
||||||
@@ -224,15 +226,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 成本项模式 ====================
|
|
||||||
async fetchDetailsAndCache(reports) {
|
async fetchDetailsAndCache(reports) {
|
||||||
const allDetailResults = await Promise.all(
|
const allDetailResults = await Promise.all(
|
||||||
reports.map(r =>
|
reports.map(r =>
|
||||||
listProdDetail({ reportId: r.reportId, pageNum: 1, pageSize: 99999 })
|
listProdDetail({ reportId: r.reportId, pageNum: 1, pageSize: 99999 })
|
||||||
.then(res => {
|
.then(res => ({ reportId: r.reportId, rows: res.rows || [] }))
|
||||||
console.log('[CostTrend] detail for report', r.reportId, 'rows:', (res.rows || []).length)
|
|
||||||
return { reportId: r.reportId, rows: res.rows || [] }
|
|
||||||
})
|
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
console.error('[CostTrend] detail fetch error for report', r.reportId, e)
|
console.error('[CostTrend] detail fetch error for report', r.reportId, e)
|
||||||
return { reportId: r.reportId, rows: [] }
|
return { reportId: r.reportId, rows: [] }
|
||||||
@@ -279,7 +277,7 @@ export default {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const xLabels = reports.map(r => this.reportLabel(r))
|
const xLabels = reports.map(r => this.reportLabel(r))
|
||||||
const series = []
|
const list = []
|
||||||
let globalMax = 0
|
let globalMax = 0
|
||||||
|
|
||||||
Array.from(allItemIds).forEach((key, idx) => {
|
Array.from(allItemIds).forEach((key, idx) => {
|
||||||
@@ -288,115 +286,121 @@ export default {
|
|||||||
const data = reports.map(r => {
|
const data = reports.map(r => {
|
||||||
const sums = reportSums[r.reportId] || {}
|
const sums = reportSums[r.reportId] || {}
|
||||||
const val = sums[key] ?? null
|
const val = sums[key] ?? null
|
||||||
if (val != null && val > globalMax) globalMax = val
|
|
||||||
return val
|
return val
|
||||||
})
|
})
|
||||||
if (data.every(v => v === null)) return
|
if (data.every(v => v === null)) return
|
||||||
|
|
||||||
series.push({
|
const maxVal = Math.max(...data.filter(v => v != null))
|
||||||
|
if (maxVal > globalMax) globalMax = maxVal
|
||||||
|
|
||||||
|
list.push({
|
||||||
|
key,
|
||||||
name,
|
name,
|
||||||
type: 'line',
|
color: COLORS[idx % COLORS.length],
|
||||||
data,
|
data,
|
||||||
smooth: true,
|
xLabels,
|
||||||
symbol: 'circle',
|
maxVal
|
||||||
symbolSize: 6,
|
|
||||||
lineStyle: { width: 2, color: COLORS[idx % COLORS.length] },
|
|
||||||
itemStyle: { color: COLORS[idx % COLORS.length] },
|
|
||||||
emphasis: { focus: 'series' }
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.seriesList = list
|
||||||
this.summary = {
|
this.summary = {
|
||||||
seriesCount: series.length,
|
seriesCount: list.length,
|
||||||
maxLabel: this.formatMoney(globalMax)
|
maxLabel: this.formatMoney(globalMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => this.renderMiniCharts())
|
||||||
setTimeout(() => this.renderChart(xLabels, series, '数量'), 50)
|
},
|
||||||
|
|
||||||
|
// ==================== 迷你图表渲染 ====================
|
||||||
|
disposeAllCharts() {
|
||||||
|
this.chartInstances.forEach(c => {
|
||||||
|
try { c.dispose() } catch (e) { /* ignore */ }
|
||||||
|
})
|
||||||
|
this.chartInstances = []
|
||||||
|
},
|
||||||
|
|
||||||
|
resizeAllCharts() {
|
||||||
|
this.chartInstances.forEach(c => {
|
||||||
|
try { c.resize() } catch (e) { /* ignore */ }
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 图表渲染 ====================
|
renderMiniCharts() {
|
||||||
renderChart(xLabels, series, yAxisName) {
|
this.disposeAllCharts()
|
||||||
console.log('[CostTrend] renderChart called, ref:', !!this.$refs.trendChart, 'series:', series.length, 'xLabels:', xLabels.length)
|
|
||||||
if (!this.$refs.trendChart) return
|
|
||||||
if (this.chart) this.chart.dispose()
|
|
||||||
this.chart = echarts.init(this.$refs.trendChart)
|
|
||||||
|
|
||||||
if (!series.length) {
|
const containers = this.$refs.miniCharts
|
||||||
this.chart.setOption({
|
if (!containers || !containers.length) return
|
||||||
title: { text: '暂无数据', left: 'center', top: 'center', textStyle: { color: '#999', fontSize: 14 } },
|
|
||||||
xAxis: { show: false },
|
|
||||||
yAxis: { show: false },
|
|
||||||
series: []
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.chart.setOption({
|
this.seriesList.forEach((s, idx) => {
|
||||||
tooltip: {
|
const el = containers[idx]
|
||||||
trigger: 'axis',
|
if (!el) return
|
||||||
formatter: function (params) {
|
|
||||||
if (!params || !params.length) return ''
|
const chart = echarts.init(el)
|
||||||
let html = '<b>' + params[0].axisValue + '</b><br/>'
|
chart.setOption({
|
||||||
params.forEach(p => {
|
tooltip: {
|
||||||
if (p.value != null) {
|
trigger: 'axis',
|
||||||
html += '<span style="display:inline-block;width:10px;height:10px;border-radius:50%;background:' +
|
formatter: function(params) {
|
||||||
p.color + ';margin-right:5px;"></span>' +
|
if (!params || !params.length) return ''
|
||||||
p.seriesName + ': <b>' +
|
const p = params[0]
|
||||||
Number(p.value).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) +
|
return '<b>' + p.axisValue + '</b><br/>' +
|
||||||
'</b><br/>'
|
'<span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:' +
|
||||||
}
|
p.color + ';margin-right:4px;"></span>' +
|
||||||
})
|
p.seriesName + ': <b>' +
|
||||||
return html
|
Number(p.value).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) +
|
||||||
}
|
'</b>'
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
type: 'scroll',
|
|
||||||
bottom: 0,
|
|
||||||
textStyle: { fontSize: 11 },
|
|
||||||
pageIconSize: 12,
|
|
||||||
pageTextStyle: { fontSize: 11 }
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
left: '3%',
|
|
||||||
right: '4%',
|
|
||||||
top: '3%',
|
|
||||||
bottom: series.length > 20 ? '18%' : (series.length > 10 ? '14%' : '10%'),
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: xLabels,
|
|
||||||
boundaryGap: false,
|
|
||||||
axisLabel: {
|
|
||||||
fontSize: 11,
|
|
||||||
rotate: xLabels.length > 8 ? 30 : 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value',
|
|
||||||
name: yAxisName,
|
|
||||||
axisLabel: {
|
|
||||||
fontSize: 11,
|
|
||||||
formatter: function (v) {
|
|
||||||
if (v >= 10000) return (v / 10000).toFixed(1) + '万'
|
|
||||||
return v
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
splitLine: { lineStyle: { type: 'dashed', color: '#e8e8e8' } }
|
grid: {
|
||||||
},
|
left: 8,
|
||||||
dataZoom: xLabels.length > 10 ? [
|
right: 12,
|
||||||
{
|
top: 8,
|
||||||
type: 'slider',
|
bottom: 24,
|
||||||
bottom: series.length > 10 ? (series.length > 20 ? 60 : 50) : 35,
|
containLabel: true
|
||||||
height: 16,
|
|
||||||
textStyle: { fontSize: 10 }
|
|
||||||
},
|
},
|
||||||
{ type: 'inside' }
|
xAxis: {
|
||||||
] : [],
|
type: 'category',
|
||||||
series
|
data: s.xLabels,
|
||||||
}, true)
|
boundaryGap: false,
|
||||||
|
axisLabel: {
|
||||||
|
fontSize: 10,
|
||||||
|
rotate: s.xLabels.length > 8 ? 25 : 0,
|
||||||
|
interval: s.xLabels.length > 12 ? 'auto' : 0
|
||||||
|
},
|
||||||
|
axisTick: { show: false },
|
||||||
|
axisLine: { lineStyle: { color: '#ddd' }}
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value',
|
||||||
|
axisLabel: {
|
||||||
|
fontSize: 10,
|
||||||
|
formatter: function(v) {
|
||||||
|
if (v >= 10000) return (v / 10000).toFixed(1) + '万'
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
},
|
||||||
|
splitLine: { lineStyle: { type: 'dashed', color: '#eee' }},
|
||||||
|
splitNumber: 3
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
name: s.name,
|
||||||
|
type: 'line',
|
||||||
|
data: s.data,
|
||||||
|
smooth: true,
|
||||||
|
symbol: 'none',
|
||||||
|
lineStyle: { width: 1.5, color: s.color },
|
||||||
|
itemStyle: { color: s.color },
|
||||||
|
areaStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{ offset: 0, color: s.color + '30' },
|
||||||
|
{ offset: 1, color: s.color + '05' }
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}, true)
|
||||||
|
|
||||||
|
this.chartInstances.push(chart)
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
reportLabel(r) {
|
reportLabel(r) {
|
||||||
@@ -411,78 +415,132 @@ export default {
|
|||||||
const num = Number(val)
|
const num = Number(val)
|
||||||
if (num >= 10000) return (num / 10000).toFixed(2) + '万'
|
if (num >= 10000) return (num / 10000).toFixed(2) + '万'
|
||||||
return num.toFixed(2)
|
return num.toFixed(2)
|
||||||
|
},
|
||||||
|
|
||||||
|
formatMiniMax(val) {
|
||||||
|
if (val == null || isNaN(val)) return '-'
|
||||||
|
if (val >= 10000) return (val / 10000).toFixed(1) + '万'
|
||||||
|
return Number(val).toFixed(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.mb8 { margin-bottom: 10px; }
|
.mb8 { margin-bottom: 8px; }
|
||||||
|
|
||||||
|
.filter-card {
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.filter-card >>> .el-card__body {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.filter-bar {
|
.filter-bar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 10px;
|
gap: 8px;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 统计摘要 */
|
||||||
.stats-row {
|
.stats-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 8px;
|
gap: 6px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
.stat-item {
|
.stat-item {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-width: 100px;
|
min-width: 80px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #ebeef5;
|
border: 1px solid #ebeef5;
|
||||||
border-radius: 2px;
|
border-radius: 4px;
|
||||||
padding: 10px 12px;
|
padding: 8px 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
.stat-val {
|
.stat-val {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 22px;
|
font-size: 20px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: #303133;
|
color: #303133;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
.stat-label {
|
.stat-label {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 12px;
|
font-size: 11px;
|
||||||
color: #909399;
|
color: #909399;
|
||||||
margin-top: 2px;
|
margin-top: 1px;
|
||||||
}
|
}
|
||||||
.stat-blue .stat-val { color: #409eff; }
|
.stat-blue .stat-val { color: #409eff; }
|
||||||
.stat-orange .stat-val { color: #e6a23c; }
|
.stat-orange .stat-val { color: #e6a23c; }
|
||||||
.stat-green .stat-val { color: #67c23a; }
|
.stat-green .stat-val { color: #67c23a; }
|
||||||
|
|
||||||
.chart-box {
|
/* 图表筛选 */
|
||||||
background: #fff;
|
|
||||||
border: 1px solid #ebeef5;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
.chart-filter-bar {
|
.chart-filter-bar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 10px;
|
gap: 8px;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
.chart-filter-bar .filter-label {
|
.chart-filter-bar .filter-label {
|
||||||
font-size: 13px;
|
font-size: 12px;
|
||||||
color: #606266;
|
color: #606266;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
.chart-body {
|
|
||||||
width: 100%;
|
/* 迷你图表网格 */
|
||||||
height: 480px;
|
.mini-charts-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
|
||||||
|
gap: 10px;
|
||||||
}
|
}
|
||||||
.legend-hint {
|
|
||||||
margin-top: 8px;
|
.mini-chart-card {
|
||||||
font-size: 12px;
|
background: #fff;
|
||||||
color: #909399;
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mini-chart-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 4px;
|
gap: 6px;
|
||||||
|
padding: 8px 10px 0 10px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
.mini-chart-dot {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.mini-chart-name {
|
||||||
|
font-weight: 500;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.mini-chart-max {
|
||||||
|
margin-left: auto;
|
||||||
|
font-size: 11px;
|
||||||
|
color: #909399;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mini-chart-body {
|
||||||
|
width: 100%;
|
||||||
|
height: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-hint {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 60px 0;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #909399;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
/>
|
/>
|
||||||
<el-button type="primary" size="small" icon="el-icon-search" @click="handleQuery">筛选</el-button>
|
<el-button type="primary" size="small" icon="el-icon-search" @click="handleQuery">筛选</el-button>
|
||||||
<el-button size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
<el-button size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button size="small" icon="el-icon-download" @click="handleExport">导出</el-button>
|
||||||
<span v-if="total > 0" class="result-count">共 {{ total }} 条记录</span>
|
<span v-if="total > 0" class="result-count">共 {{ total }} 条记录</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -130,6 +131,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<!-- 业务员 -->
|
||||||
|
<el-table-column label="业务员" width="110">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-select v-model="scope.row.salesman" size="small" class="editable-cell" style="width: 100%" @change="saveRow(scope.row)">
|
||||||
|
<el-option v-for="item in dict.type.wip_pack_saleman" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<!-- 签订日期 -->
|
<!-- 签订日期 -->
|
||||||
<el-table-column label="签订日期" prop="signTime" width="100">
|
<el-table-column label="签订日期" prop="signTime" width="100">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@@ -421,8 +430,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listOrder, updateOrder } from '@/api/crm/order'
|
import { listOrder, updateOrder, exportOrder } from '@/api/crm/order'
|
||||||
import { listCustomer } from '@/api/crm/customer'
|
import { listCustomer } from '@/api/crm/customer'
|
||||||
|
import { blobValidate } from "@/utils/klp";
|
||||||
|
import { saveAs } from 'file-saver'
|
||||||
|
|
||||||
const STATUS_MAP = {
|
const STATUS_MAP = {
|
||||||
'0': { label: '草稿', type: 'info' },
|
'0': { label: '草稿', type: 'info' },
|
||||||
@@ -433,6 +444,7 @@ const STATUS_MAP = {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ContractDetailEdit',
|
name: 'ContractDetailEdit',
|
||||||
|
dicts: ['wip_pack_saleman'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
loading: false,
|
||||||
@@ -628,7 +640,38 @@ export default {
|
|||||||
}
|
}
|
||||||
this.customerDialogVisible = false
|
this.customerDialogVisible = false
|
||||||
this.saveRow(row)
|
this.saveRow(row)
|
||||||
}
|
},
|
||||||
|
|
||||||
|
// 导出合同明细(按当前筛选条件)
|
||||||
|
handleExport() {
|
||||||
|
const params = {}
|
||||||
|
if (this.contractQuery.contractCode) params.contractCode = this.contractQuery.contractCode
|
||||||
|
if (this.contractQuery.supplier) params.supplier = this.contractQuery.supplier
|
||||||
|
if (this.contractQuery.customer) params.customer = this.contractQuery.customer
|
||||||
|
if (this.contractQuery.status !== undefined && this.contractQuery.status !== null) params.status = this.contractQuery.status
|
||||||
|
if (this.contractQuery.signDateStart) params.signDateStart = this.contractQuery.signDateStart
|
||||||
|
if (this.contractQuery.signDateEnd) params.signDateEnd = this.contractQuery.signDateEnd
|
||||||
|
if (this.contractQuery.deliveryDateStart) params.deliveryDateStart = this.contractQuery.deliveryDateStart
|
||||||
|
if (this.contractQuery.deliveryDateEnd) params.deliveryDateEnd = this.contractQuery.deliveryDateEnd
|
||||||
|
if (this.contractQuery.signLocation) params.signLocation = this.contractQuery.signLocation
|
||||||
|
exportOrder(params).then((res) => {
|
||||||
|
this.handleExportBlob(res, '合同编辑详情.xlsx')
|
||||||
|
}).catch(() => {})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理blob文件导出
|
||||||
|
async handleExportBlob(res, fileName) {
|
||||||
|
const isBlob = blobValidate(res);
|
||||||
|
if (isBlob) {
|
||||||
|
saveAs(res, fileName);
|
||||||
|
this.$message.success('导出成功!');
|
||||||
|
} else {
|
||||||
|
const resText = await res.text();
|
||||||
|
const rspObj = JSON.parse(resText);
|
||||||
|
const errMsg = rspObj.msg || '导出失败';
|
||||||
|
this.$message.error(errMsg);
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -727,6 +770,22 @@ export default {
|
|||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 业务员下拉框样式 */
|
||||||
|
.select-salesman ::v-deep .el-input__inner {
|
||||||
|
background-color: #f3f0ff;
|
||||||
|
border-color: transparent;
|
||||||
|
padding: 0 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.select-salesman ::v-deep .el-input__inner:focus {
|
||||||
|
border-color: #5F7BA0;
|
||||||
|
background-color: #fff;
|
||||||
|
overflow: visible;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
/* 日期选择器样式 */
|
/* 日期选择器样式 */
|
||||||
.editable-cell-date ::v-deep .el-input__inner {
|
.editable-cell-date ::v-deep .el-input__inner {
|
||||||
background-color: #e6f7ff;
|
background-color: #e6f7ff;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
<el-button type="danger" size="small" icon="el-icon-delete" :disabled="!selection.length" @click="handleBatchDelete">批量删除</el-button>
|
<el-button type="danger" size="small" icon="el-icon-delete" :disabled="!selection.length" @click="handleBatchDelete">批量删除</el-button>
|
||||||
|
<el-button type="primary" size="small" icon="el-icon-download" @click="handleExport">导出</el-button>
|
||||||
<span class="toolbar-tip">合同列为只读;明细列失焦自动保存(需有修改权限)</span>
|
<span class="toolbar-tip">合同列为只读;明细列失焦自动保存(需有修改权限)</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -50,6 +51,9 @@
|
|||||||
<el-table-column label="供方" min-width="120" show-overflow-tooltip>
|
<el-table-column label="供方" min-width="120" show-overflow-tooltip>
|
||||||
<template slot-scope="{ row }">{{ (row.orderInfo && row.orderInfo.supplier) || '-' }}</template>
|
<template slot-scope="{ row }">{{ (row.orderInfo && row.orderInfo.supplier) || '-' }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="业务员" min-width="80" show-overflow-tooltip>
|
||||||
|
<template slot-scope="{ row }">{{ (row.orderInfo && row.orderInfo.salesman) || row.salesman || '-' }}</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="签订时间" width="110">
|
<el-table-column label="签订时间" width="110">
|
||||||
<template slot-scope="{ row }">{{ row.orderInfo && row.orderInfo.signTime ? parseTime(row.orderInfo.signTime, '{y}-{m}-{d}') : '-' }}</template>
|
<template slot-scope="{ row }">{{ row.orderInfo && row.orderInfo.signTime ? parseTime(row.orderInfo.signTime, '{y}-{m}-{d}') : '-' }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -201,7 +205,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listOrderItem, updateOrderItem, delOrderItem } from '@/api/crm/orderItem'
|
import { listOrderItem, updateOrderItem, delOrderItem, exportOrderItem } from '@/api/crm/orderItem'
|
||||||
|
import { blobValidate } from "@/utils/klp";
|
||||||
|
import { saveAs } from 'file-saver'
|
||||||
|
|
||||||
const ITEM_PAYLOAD_KEYS = [
|
const ITEM_PAYLOAD_KEYS = [
|
||||||
'itemId',
|
'itemId',
|
||||||
@@ -354,7 +360,36 @@ export default {
|
|||||||
console.error('批量删除失败:', err)
|
console.error('批量删除失败:', err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
|
|
||||||
|
// 导出订单明细(按当前筛选条件)
|
||||||
|
handleExport() {
|
||||||
|
const params = {}
|
||||||
|
if (this.queryParams.contractCode) params.contractCode = this.queryParams.contractCode
|
||||||
|
if (this.queryParams.customer) params.customer = this.queryParams.customer
|
||||||
|
if (this.queryParams.material) params.material = this.queryParams.material
|
||||||
|
if (this.queryParams.orderId) {
|
||||||
|
const n = Number(this.queryParams.orderId)
|
||||||
|
params.orderId = Number.isNaN(n) ? this.queryParams.orderId : n
|
||||||
|
}
|
||||||
|
exportOrderItem(params).then((res) => {
|
||||||
|
this.handleExportBlob(res, '正式订单明细.xlsx')
|
||||||
|
}).catch(() => {})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理blob文件导出
|
||||||
|
async handleExportBlob(res, fileName) {
|
||||||
|
const isBlob = blobValidate(res);
|
||||||
|
if (isBlob) {
|
||||||
|
saveAs(res, fileName);
|
||||||
|
this.$modal.msgSuccess('导出成功!');
|
||||||
|
} else {
|
||||||
|
const resText = await res.text();
|
||||||
|
const rspObj = JSON.parse(resText);
|
||||||
|
const errMsg = rspObj.msg || '导出失败';
|
||||||
|
this.$modal.msgError(errMsg);
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
/>
|
/>
|
||||||
<el-button type="primary" size="small" icon="el-icon-search" @click="handleQuery">筛选</el-button>
|
<el-button type="primary" size="small" icon="el-icon-search" @click="handleQuery">筛选</el-button>
|
||||||
<el-button size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
<el-button size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button size="small" icon="el-icon-download" @click="handleExport">导出</el-button>
|
||||||
<span class="sort-hint">已按合同签订日期默认当月,结果按交货日期倒序排列</span>
|
<span class="sort-hint">已按合同签订日期默认当月,结果按交货日期倒序排列</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -96,6 +97,11 @@
|
|||||||
<span class="contract-info" :title="row.customer">{{ row.customer }}</span>
|
<span class="contract-info" :title="row.customer">{{ row.customer }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="业务员" width="80">
|
||||||
|
<template slot-scope="{ row }">
|
||||||
|
<span class="contract-info">{{ row._order && row._order.salesman ? row._order.salesman : '-' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="签订日期" prop="signTime" width="100">
|
<el-table-column label="签订日期" prop="signTime" width="100">
|
||||||
<template slot-scope="{ row }">
|
<template slot-scope="{ row }">
|
||||||
<span class="contract-info contract-date">{{ formatDate(row.signTime) }}</span>
|
<span class="contract-info contract-date">{{ formatDate(row.signTime) }}</span>
|
||||||
@@ -270,8 +276,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listOrder, updateOrder } from '@/api/crm/order'
|
import { listOrder, updateOrder, exportOrder } from '@/api/crm/order'
|
||||||
import { parseProductContent, stringifyProductContent, calculateProductFields, recalculateTotals } from '@/utils/productContent'
|
import { parseProductContent, stringifyProductContent, calculateProductFields, recalculateTotals } from '@/utils/productContent'
|
||||||
|
import { blobValidate } from "@/utils/klp";
|
||||||
|
import { saveAs } from 'file-saver'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'OrderItemList',
|
name: 'OrderItemList',
|
||||||
@@ -555,6 +563,34 @@ export default {
|
|||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 导出订单明细(按当前筛选条件)
|
||||||
|
handleExport() {
|
||||||
|
const params = {}
|
||||||
|
if (this.queryParams.contractCode) params.contractCode = this.queryParams.contractCode
|
||||||
|
if (this.queryParams.customer) params.customer = this.queryParams.customer
|
||||||
|
if (this.queryParams.signDateStart) params.signDateStart = this.queryParams.signDateStart
|
||||||
|
if (this.queryParams.signDateEnd) params.signDateEnd = this.queryParams.signDateEnd
|
||||||
|
if (this.queryParams.deliveryDateStart) params.deliveryDateStart = this.queryParams.deliveryDateStart
|
||||||
|
if (this.queryParams.deliveryDateEnd) params.deliveryDateEnd = this.queryParams.deliveryDateEnd
|
||||||
|
exportOrder(params).then((res) => {
|
||||||
|
this.handleExportBlob(res, '订单明细列表.xlsx')
|
||||||
|
}).catch(() => {})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理blob文件导出
|
||||||
|
async handleExportBlob(res, fileName) {
|
||||||
|
const isBlob = blobValidate(res);
|
||||||
|
if (isBlob) {
|
||||||
|
saveAs(res, fileName);
|
||||||
|
this.$message.success('导出成功!');
|
||||||
|
} else {
|
||||||
|
const resText = await res.text();
|
||||||
|
const rspObj = JSON.parse(resText);
|
||||||
|
const errMsg = rspObj.msg || '导出失败';
|
||||||
|
this.$message.error(errMsg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
groupRowClassName({ row, rowIndex }) {
|
groupRowClassName({ row, rowIndex }) {
|
||||||
if (row.productIndex === 0) {
|
if (row.productIndex === 0) {
|
||||||
return 'group-row-a'
|
return 'group-row-a'
|
||||||
|
|||||||
@@ -56,7 +56,12 @@
|
|||||||
<el-col :span="14">
|
<el-col :span="14">
|
||||||
<div class="chart-card">
|
<div class="chart-card">
|
||||||
<div class="chart-header">
|
<div class="chart-header">
|
||||||
<span class="chart-title"><i class="el-icon-data-line" /> 每日磨削趋势</span>
|
<span class="chart-title"><i class="el-icon-data-line" /> {{ trendChartTitle }}</span>
|
||||||
|
<el-radio-group v-model="trendDimension" size="mini" @change="onTrendDimensionChange" style="margin-left:12px">
|
||||||
|
<el-radio-button label="day">按天</el-radio-button>
|
||||||
|
<el-radio-button label="week">按周</el-radio-button>
|
||||||
|
<el-radio-button label="month">按月</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
<div ref="trendChartRef" class="chart-container" style="height:340px"></div>
|
<div ref="trendChartRef" class="chart-container" style="height:340px"></div>
|
||||||
<div v-if="!dailyTrend.length" class="chart-empty">暂无数据</div>
|
<div v-if="!dailyTrend.length" class="chart-empty">暂无数据</div>
|
||||||
@@ -131,6 +136,38 @@
|
|||||||
<el-empty v-else description="暂无磨削记录" />
|
<el-empty v-else description="暂无磨削记录" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 月度产线汇总二维表 -->
|
||||||
|
<div class="table-card mt16">
|
||||||
|
<div class="card-header">
|
||||||
|
<span class="card-title"><i class="el-icon-s-data" /> 月度产线汇总</span>
|
||||||
|
<span class="card-subtitle" v-if="monthlyPivot.length">{{ monthlyPivotMonths.length }} 个月 · {{ monthlyPivot.length }} 条产线</span>
|
||||||
|
<el-button size="mini" type="primary" plain icon="el-icon-download" style="margin-left:8px" @click="exportMonthlyPivot" :disabled="!monthlyPivot.length">导出</el-button>
|
||||||
|
</div>
|
||||||
|
<div style="overflow-x:auto" v-if="monthlyPivot.length">
|
||||||
|
<el-table :data="monthlyPivot" size="small" border stripe style="min-width:100%"
|
||||||
|
:header-cell-style="{ textAlign: 'center', fontWeight: 600 }">
|
||||||
|
<el-table-column label="产线" prop="lineName" fixed="left" width="140" align="center" />
|
||||||
|
<el-table-column v-for="m in monthlyPivotMonths" :key="m" :label="m" align="center">
|
||||||
|
<el-table-column label="磨削次数" align="center" min-width="80">
|
||||||
|
<template slot-scope="{row}">{{ row[m + '_count'] || 0 }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="磨削量(mm)" align="right" min-width="110">
|
||||||
|
<template slot-scope="{row}">{{ (row[m + '_amount'] || 0).toFixed(2) }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="合计" align="center">
|
||||||
|
<el-table-column label="磨削次数" align="center" min-width="80">
|
||||||
|
<template slot-scope="{row}">{{ row.totalCount }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="磨削量(mm)" align="right" min-width="110">
|
||||||
|
<template slot-scope="{row}">{{ row.totalAmount.toFixed(2) }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<el-empty v-else description="暂无磨削记录" />
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -139,12 +176,19 @@ import * as echarts from 'echarts'
|
|||||||
import * as XLSX from 'xlsx'
|
import * as XLSX from 'xlsx'
|
||||||
import { getRollStats, listRollInfo } from '@/api/mes/roll/rollInfo'
|
import { getRollStats, listRollInfo } from '@/api/mes/roll/rollInfo'
|
||||||
import { listRollGrindAll } from '@/api/mes/roll/rollGrind'
|
import { listRollGrindAll } from '@/api/mes/roll/rollGrind'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
import rollLineMixin from '../rollLineMixin'
|
import rollLineMixin from '../rollLineMixin'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'RollReport',
|
name: 'RollReport',
|
||||||
mixins: [rollLineMixin],
|
mixins: [rollLineMixin],
|
||||||
dicts: ['mes_roll_operator'],
|
dicts: ['mes_roll_operator'],
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['productionLines']),
|
||||||
|
trendChartTitle() {
|
||||||
|
return { day: '每日磨削趋势', week: '每周磨削趋势', month: '每月磨削趋势' }[this.trendDimension] || '磨削趋势'
|
||||||
|
}
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
const now = new Date()
|
const now = new Date()
|
||||||
const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
|
const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
|
||||||
@@ -161,7 +205,10 @@ export default {
|
|||||||
trendChart: null,
|
trendChart: null,
|
||||||
pieChart: null,
|
pieChart: null,
|
||||||
_beginTime: fmt(sevenDaysAgo),
|
_beginTime: fmt(sevenDaysAgo),
|
||||||
_endTime: fmt(now)
|
_endTime: fmt(now),
|
||||||
|
monthlyPivot: [],
|
||||||
|
monthlyPivotMonths: [],
|
||||||
|
trendDimension: 'day'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -197,8 +244,8 @@ export default {
|
|||||||
this.stats = statsRes.data || {}
|
this.stats = statsRes.data || {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 获取全部轧辊(用于辊型映射)
|
// 2. 获取全部轧辊(用于辊型映射和产线关联)
|
||||||
const rollRes = await listRollInfo({ pageNum: 1, pageSize: 99999, lineId: this.lineId || undefined })
|
const rollRes = await listRollInfo({ pageNum: 1, pageSize: 99999 })
|
||||||
const rolls = rollRes.rows || []
|
const rolls = rollRes.rows || []
|
||||||
const rollMap = {}
|
const rollMap = {}
|
||||||
rolls.forEach(r => { rollMap[r.rollId] = r })
|
rolls.forEach(r => { rollMap[r.rollId] = r })
|
||||||
@@ -211,10 +258,20 @@ export default {
|
|||||||
const allRecords = grindRes.data || []
|
const allRecords = grindRes.data || []
|
||||||
|
|
||||||
// 4. 汇总计算
|
// 4. 汇总计算
|
||||||
|
this.autoDetectTrendDimension()
|
||||||
this.computeSummary(allRecords, rollMap)
|
this.computeSummary(allRecords, rollMap)
|
||||||
this.computeDailyTrend(allRecords)
|
this.computeTrendData(allRecords)
|
||||||
this.computeRollTypeDist(allRecords, rollMap)
|
this.computeRollTypeDist(allRecords, rollMap)
|
||||||
this.computeOperatorStats(allRecords, rollMap)
|
this.computeOperatorStats(allRecords, rollMap)
|
||||||
|
|
||||||
|
// 5. 月度产线汇总(跨全部产线,不受当前 lineId 限制)
|
||||||
|
await this.$store.dispatch('productionLine/getProductionLines')
|
||||||
|
const allParams = {}
|
||||||
|
if (this._beginTime) allParams.beginTime = this._beginTime
|
||||||
|
if (this._endTime) allParams.endTime = this._endTime + ' 23:59:59'
|
||||||
|
const allGrindRes = await listRollGrindAll(allParams)
|
||||||
|
this.computeMonthlyPivot(allGrindRes.data || [], rollMap)
|
||||||
|
|
||||||
this.updateCharts()
|
this.updateCharts()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('加载报表数据失败', e)
|
console.error('加载报表数据失败', e)
|
||||||
@@ -249,6 +306,56 @@ export default {
|
|||||||
})
|
})
|
||||||
this.dailyTrend = Object.values(dateMap).sort((a, b) => a.grindDate.localeCompare(b.grindDate))
|
this.dailyTrend = Object.values(dateMap).sort((a, b) => a.grindDate.localeCompare(b.grindDate))
|
||||||
},
|
},
|
||||||
|
computeWeeklyTrend(records) {
|
||||||
|
const weekMap = {}
|
||||||
|
const pad = n => String(n).padStart(2, '0')
|
||||||
|
records.forEach(r => {
|
||||||
|
if (!r.grindTime) return
|
||||||
|
const d = new Date(r.grindTime)
|
||||||
|
const dayOfWeek = d.getDay() || 7
|
||||||
|
const monday = new Date(d)
|
||||||
|
monday.setDate(d.getDate() - dayOfWeek + 1)
|
||||||
|
const sunday = new Date(monday)
|
||||||
|
sunday.setDate(monday.getDate() + 6)
|
||||||
|
const key = `${monday.getFullYear()}-${pad(monday.getMonth() + 1)}-${pad(monday.getDate())}`
|
||||||
|
const label = `${pad(monday.getMonth() + 1)}-${pad(monday.getDate())}~${pad(sunday.getMonth() + 1)}-${pad(sunday.getDate())}`
|
||||||
|
if (!weekMap[key]) weekMap[key] = { grindDate: label, grindCount: 0, totalGrindAmount: 0, _sort: key }
|
||||||
|
weekMap[key].grindCount++
|
||||||
|
weekMap[key].totalGrindAmount += Number(r.grindAmount || 0)
|
||||||
|
})
|
||||||
|
this.dailyTrend = Object.values(weekMap).sort((a, b) => a._sort.localeCompare(b._sort))
|
||||||
|
},
|
||||||
|
computeMonthlyTrend(records) {
|
||||||
|
const monthMap = {}
|
||||||
|
records.forEach(r => {
|
||||||
|
if (!r.grindTime) return
|
||||||
|
const m = r.grindTime.substring(0, 7)
|
||||||
|
if (!monthMap[m]) monthMap[m] = { grindDate: m, grindCount: 0, totalGrindAmount: 0 }
|
||||||
|
monthMap[m].grindCount++
|
||||||
|
monthMap[m].totalGrindAmount += Number(r.grindAmount || 0)
|
||||||
|
})
|
||||||
|
this.dailyTrend = Object.values(monthMap).sort((a, b) => a.grindDate.localeCompare(b.grindDate))
|
||||||
|
},
|
||||||
|
computeTrendData(records) {
|
||||||
|
this._cachedRecords = records
|
||||||
|
if (this.trendDimension === 'week') this.computeWeeklyTrend(records)
|
||||||
|
else if (this.trendDimension === 'month') this.computeMonthlyTrend(records)
|
||||||
|
else this.computeDailyTrend(records)
|
||||||
|
},
|
||||||
|
autoDetectTrendDimension() {
|
||||||
|
const [b, e] = this.dateRange
|
||||||
|
if (!b || !e) return
|
||||||
|
const days = (new Date(e) - new Date(b)) / (24 * 60 * 60 * 1000)
|
||||||
|
if (days <= 31) this.trendDimension = 'day'
|
||||||
|
else if (days <= 90) this.trendDimension = 'week'
|
||||||
|
else this.trendDimension = 'month'
|
||||||
|
},
|
||||||
|
onTrendDimensionChange() {
|
||||||
|
if (this._cachedRecords) {
|
||||||
|
this.computeTrendData(this._cachedRecords)
|
||||||
|
this.updateTrendChart()
|
||||||
|
}
|
||||||
|
},
|
||||||
computeRollTypeDist(records, rollMap) {
|
computeRollTypeDist(records, rollMap) {
|
||||||
const typeMap = {}
|
const typeMap = {}
|
||||||
records.forEach(r => {
|
records.forEach(r => {
|
||||||
@@ -420,6 +527,79 @@ export default {
|
|||||||
link.click()
|
link.click()
|
||||||
document.body.removeChild(link)
|
document.body.removeChild(link)
|
||||||
URL.revokeObjectURL(url)
|
URL.revokeObjectURL(url)
|
||||||
|
},
|
||||||
|
computeMonthlyPivot(records, rollMap) {
|
||||||
|
const lineMonthMap = {}
|
||||||
|
const monthSet = new Set()
|
||||||
|
records.forEach(r => {
|
||||||
|
if (!r.grindTime) return
|
||||||
|
const month = r.grindTime.substring(0, 7)
|
||||||
|
const roll = rollMap[r.rollId]
|
||||||
|
const lid = Number(roll?.lineId) || 0
|
||||||
|
if (!lineMonthMap[lid]) {
|
||||||
|
const line = this.productionLines.find(l => Number(l.lineId) === lid)
|
||||||
|
lineMonthMap[lid] = { lineId: lid, lineName: line ? line.lineName : (r.lineName || '未知产线'), months: {} }
|
||||||
|
}
|
||||||
|
if (!lineMonthMap[lid].months[month]) {
|
||||||
|
lineMonthMap[lid].months[month] = { grindCount: 0, totalGrindAmount: 0 }
|
||||||
|
}
|
||||||
|
lineMonthMap[lid].months[month].grindCount++
|
||||||
|
lineMonthMap[lid].months[month].totalGrindAmount += Number(r.grindAmount || 0)
|
||||||
|
monthSet.add(month)
|
||||||
|
})
|
||||||
|
const months = [...monthSet].sort()
|
||||||
|
const rows = this.productionLines.map(line => {
|
||||||
|
const ld = lineMonthMap[line.lineId]
|
||||||
|
const row = { lineId: line.lineId, lineName: line.lineName, totalCount: 0, totalAmount: 0 }
|
||||||
|
months.forEach(m => {
|
||||||
|
if (ld && ld.months[m]) {
|
||||||
|
row[m + '_count'] = ld.months[m].grindCount
|
||||||
|
row[m + '_amount'] = Number(ld.months[m].totalGrindAmount.toFixed(2))
|
||||||
|
row.totalCount += ld.months[m].grindCount
|
||||||
|
row.totalAmount += ld.months[m].totalGrindAmount
|
||||||
|
} else {
|
||||||
|
row[m + '_count'] = 0
|
||||||
|
row[m + '_amount'] = 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
row.totalAmount = Number(row.totalAmount.toFixed(2))
|
||||||
|
return row
|
||||||
|
})
|
||||||
|
this.monthlyPivotMonths = months
|
||||||
|
this.monthlyPivot = rows
|
||||||
|
},
|
||||||
|
exportMonthlyPivot() {
|
||||||
|
const months = this.monthlyPivotMonths
|
||||||
|
const header1 = ['产线']
|
||||||
|
const header2 = ['']
|
||||||
|
months.forEach(m => { header1.push(m, ''); header2.push('磨削次数', '磨削量(mm)') })
|
||||||
|
header1.push('合计', '')
|
||||||
|
header2.push('磨削次数', '磨削量(mm)')
|
||||||
|
const rows = [header1, header2]
|
||||||
|
this.monthlyPivot.forEach(row => {
|
||||||
|
const r = [row.lineName]
|
||||||
|
months.forEach(m => { r.push(row[m + '_count'] || 0, (row[m + '_amount'] || 0).toFixed(2)) })
|
||||||
|
r.push(row.totalCount, row.totalAmount.toFixed(2))
|
||||||
|
rows.push(r)
|
||||||
|
})
|
||||||
|
const ws = XLSX.utils.aoa_to_sheet(rows)
|
||||||
|
// merge header row 1 for month groups
|
||||||
|
ws['!merges'] = []
|
||||||
|
let col = 1
|
||||||
|
months.forEach(() => { ws['!merges'].push({ s: { r: 0, c: col }, e: { r: 0, c: col + 1 } }); col += 2 })
|
||||||
|
ws['!merges'].push({ s: { r: 0, c: col }, e: { r: 0, c: col + 1 } })
|
||||||
|
const wb = XLSX.utils.book_new()
|
||||||
|
XLSX.utils.book_append_sheet(wb, ws, '月度产线汇总')
|
||||||
|
const buf = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })
|
||||||
|
const blob = new Blob([buf], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||||
|
const url = URL.createObjectURL(blob)
|
||||||
|
const link = document.createElement('a')
|
||||||
|
link.href = url
|
||||||
|
link.download = `月度产线汇总_${this._beginTime || ''}_${this._endTime ? this._endTime.substring(0, 10) : ''}.xlsx`
|
||||||
|
document.body.appendChild(link)
|
||||||
|
link.click()
|
||||||
|
document.body.removeChild(link)
|
||||||
|
URL.revokeObjectURL(url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -431,6 +611,7 @@ export default {
|
|||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
}
|
}
|
||||||
.mb16 { margin-bottom: 16px; }
|
.mb16 { margin-bottom: 16px; }
|
||||||
|
.mt16 { margin-top: 16px; }
|
||||||
|
|
||||||
/* 筛选栏 */
|
/* 筛选栏 */
|
||||||
.filter-panel {
|
.filter-panel {
|
||||||
|
|||||||
40
klp-ui/src/views/micro/pages/dr/components/Inventory.vue
Normal file
40
klp-ui/src/views/micro/pages/dr/components/Inventory.vue
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<template>
|
||||||
|
<div class="inventory-container">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="querys"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { DR_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DrInventory',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
querys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
},
|
||||||
|
warehouseOptions: DR_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.inventory-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
39
klp-ui/src/views/micro/pages/dr/components/Processing.vue
Normal file
39
klp-ui/src/views/micro/pages/dr/components/Processing.vue
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<template>
|
||||||
|
<div class="processing-container">
|
||||||
|
<el-tabs v-model="activeTab" type="border-card">
|
||||||
|
<el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.title" :name="tab.name">
|
||||||
|
<DoPage
|
||||||
|
v-if="activeTab === tab.name"
|
||||||
|
:label="tab.label"
|
||||||
|
:tabs="tab.tabs"
|
||||||
|
:useSpecialSplit="tab.useSpecialSplit"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import DoPage from '@/views/wms/coil/panels/do.vue'
|
||||||
|
import { DR_PROCESSING_TABS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DrProcessing',
|
||||||
|
components: {
|
||||||
|
DoPage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'process',
|
||||||
|
tabs: DR_PROCESSING_TABS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.processing-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
92
klp-ui/src/views/micro/pages/dr/components/Quality.vue
Normal file
92
klp-ui/src/views/micro/pages/dr/components/Quality.vue
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<template>
|
||||||
|
<div class="quality-container">
|
||||||
|
<el-tabs v-model="activeTab" class="quality-tabs">
|
||||||
|
<el-tab-pane label="异常钢卷" name="abnormal">
|
||||||
|
<div v-if="activeTab === 'abnormal'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="abnormalQuerys"
|
||||||
|
:labelType="'2'"
|
||||||
|
:hideType="false"
|
||||||
|
:showAbnormal="true"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="次品钢卷" name="defect">
|
||||||
|
<div v-if="activeTab === 'defect'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="defectQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="O卷" name="oil">
|
||||||
|
<div v-if="activeTab === 'oil'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="oilQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { DR_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DrQuality',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'abnormal',
|
||||||
|
abnormalQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
orderByAbnormal: true,
|
||||||
|
},
|
||||||
|
defectQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
OnlyScrap: true,
|
||||||
|
},
|
||||||
|
oilQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
qualityStatus: 'O',
|
||||||
|
},
|
||||||
|
warehouseOptions: DR_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.quality-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.quality-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
67
klp-ui/src/views/micro/pages/dr/components/Report.vue
Normal file
67
klp-ui/src/views/micro/pages/dr/components/Report.vue
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<template>
|
||||||
|
<div class="report-container">
|
||||||
|
<el-tabs v-model="activeTab" class="report-tabs">
|
||||||
|
<el-tab-pane label="综合报表" name="comprehensive">
|
||||||
|
<Comprehensive v-if="activeTab === 'comprehensive'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="日报表" name="day">
|
||||||
|
<DayReport v-if="activeTab === 'day'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="月报表" name="month">
|
||||||
|
<MonthReport v-if="activeTab === 'month'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="年报表" name="year">
|
||||||
|
<YearReport v-if="activeTab === 'year'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="损耗报表" name="loss">
|
||||||
|
<LossReport v-if="activeTab === 'loss'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="产出报表" name="out">
|
||||||
|
<OutReport v-if="activeTab === 'out'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="班报表" name="team">
|
||||||
|
<TeamReport v-if="activeTab === 'team'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Comprehensive from '@/views/wms/report/shuang/comprehensive.vue'
|
||||||
|
import DayReport from '@/views/wms/report/shuang/day.vue'
|
||||||
|
import MonthReport from '@/views/wms/report/shuang/month.vue'
|
||||||
|
import YearReport from '@/views/wms/report/shuang/year.vue'
|
||||||
|
import LossReport from '@/views/wms/report/shuang/loss.vue'
|
||||||
|
import OutReport from '@/views/wms/report/shuang/out.vue'
|
||||||
|
import TeamReport from '@/views/wms/report/shuang/team.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DrReport',
|
||||||
|
components: {
|
||||||
|
Comprehensive,
|
||||||
|
DayReport,
|
||||||
|
MonthReport,
|
||||||
|
YearReport,
|
||||||
|
LossReport,
|
||||||
|
OutReport,
|
||||||
|
TeamReport,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'comprehensive',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.report-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.report-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
79
klp-ui/src/views/micro/pages/dr/components/Shipping.vue
Normal file
79
klp-ui/src/views/micro/pages/dr/components/Shipping.vue
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
<template>
|
||||||
|
<div class="shipping-container">
|
||||||
|
<el-tabs v-model="activeTab" class="shipping-tabs">
|
||||||
|
<el-tab-pane label="配卷情况" name="waybill">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:showWaybill="true"
|
||||||
|
:showNewExport="true"
|
||||||
|
:querys="waybillQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="发货记录" name="ship">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="shipQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showExportTime="true"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { DR_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DrShipping',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'waybill',
|
||||||
|
waybillQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
includeBindInfo: true,
|
||||||
|
},
|
||||||
|
shipQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 1,
|
||||||
|
},
|
||||||
|
warehouseOptions: DR_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.shipping-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.shipping-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
28
klp-ui/src/views/micro/pages/dr/config.js
Normal file
28
klp-ui/src/views/micro/pages/dr/config.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
export const DR_WAREHOUSE_OPTIONS = [
|
||||||
|
{ value: '1992873386047643650', label: '双机架原料库' },
|
||||||
|
{ value: '1992873437713080322', label: '双机架成品库' },
|
||||||
|
{ value: '1988151076996706306', label: '镀铬原料库' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export const DR_PROCESSING_TABS = [
|
||||||
|
{
|
||||||
|
title: '双机架工序',
|
||||||
|
name: 'process',
|
||||||
|
label: '双机架工序',
|
||||||
|
tabs: DR_WAREHOUSE_OPTIONS,
|
||||||
|
useSpecialSplit: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '合卷',
|
||||||
|
name: 'merge',
|
||||||
|
label: '双机架合卷',
|
||||||
|
useSpecialSplit: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '双机架修复',
|
||||||
|
name: 'repair',
|
||||||
|
label: '双机架修复工序',
|
||||||
|
tabs: DR_WAREHOUSE_OPTIONS,
|
||||||
|
useSpecialSplit: true,
|
||||||
|
},
|
||||||
|
]
|
||||||
@@ -2,6 +2,26 @@
|
|||||||
<div class="dr-container">
|
<div class="dr-container">
|
||||||
<div class="dr-sidebar">
|
<div class="dr-sidebar">
|
||||||
<el-menu :default-active="activeMenu" class="sidebar-menu" @select="handleMenuSelect">
|
<el-menu :default-active="activeMenu" class="sidebar-menu" @select="handleMenuSelect">
|
||||||
|
<el-menu-item index="inventory">
|
||||||
|
<i class="el-icon-box"></i>
|
||||||
|
<span slot="title">库存</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="processing">
|
||||||
|
<i class="el-icon-s-operation"></i>
|
||||||
|
<span slot="title">WIP</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="report">
|
||||||
|
<i class="el-icon-document"></i>
|
||||||
|
<span slot="title">报表</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="shipping">
|
||||||
|
<i class="el-icon-truck"></i>
|
||||||
|
<span slot="title">发货</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="quality">
|
||||||
|
<i class="el-icon-warning-outline"></i>
|
||||||
|
<span slot="title">品质</span>
|
||||||
|
</el-menu-item>
|
||||||
<el-menu-item index="plan">
|
<el-menu-item index="plan">
|
||||||
<i class="el-icon-s-order"></i>
|
<i class="el-icon-s-order"></i>
|
||||||
<span slot="title">计划</span>
|
<span slot="title">计划</span>
|
||||||
@@ -23,19 +43,42 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Plan from './components/Plan.vue'
|
import Plan from './components/Plan.vue'
|
||||||
import ProcessSpec from './components/ProcessSpec.vue'
|
import ProcessSpec from './components/ProcessSpec.vue'
|
||||||
import Actual from './components/Actual.vue'
|
import Actual from './components/Actual.vue'
|
||||||
|
import Inventory from './components/Inventory.vue'
|
||||||
|
import Processing from './components/Processing.vue'
|
||||||
|
import Report from './components/Report.vue'
|
||||||
|
import Shipping from './components/Shipping.vue'
|
||||||
|
import Quality from './components/Quality.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DrSystem',
|
name: 'DrSystem',
|
||||||
components: { Plan, ProcessSpec, Actual },
|
components: {
|
||||||
|
Plan,
|
||||||
|
ProcessSpec,
|
||||||
|
Actual,
|
||||||
|
Inventory,
|
||||||
|
Processing,
|
||||||
|
Report,
|
||||||
|
Shipping,
|
||||||
|
Quality,
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return { activeMenu: 'plan' }
|
return { activeMenu: 'inventory' }
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
currentComponent() {
|
currentComponent() {
|
||||||
return { plan: 'Plan', processSpec: 'ProcessSpec', actual: 'Actual' }[this.activeMenu]
|
return {
|
||||||
|
plan: 'Plan',
|
||||||
|
processSpec: 'ProcessSpec',
|
||||||
|
actual: 'Actual',
|
||||||
|
inventory: 'Inventory',
|
||||||
|
processing: 'Processing',
|
||||||
|
report: 'Report',
|
||||||
|
shipping: 'Shipping',
|
||||||
|
quality: 'Quality',
|
||||||
|
}[this.activeMenu]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -45,6 +88,10 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.app-container {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
.dr-container {
|
.dr-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
40
klp-ui/src/views/micro/pages/duge/components/Inventory.vue
Normal file
40
klp-ui/src/views/micro/pages/duge/components/Inventory.vue
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<template>
|
||||||
|
<div class="inventory-container">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="querys"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { DUGE_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DugeInventory',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
querys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
},
|
||||||
|
warehouseOptions: DUGE_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.inventory-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
39
klp-ui/src/views/micro/pages/duge/components/Processing.vue
Normal file
39
klp-ui/src/views/micro/pages/duge/components/Processing.vue
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<template>
|
||||||
|
<div class="processing-container">
|
||||||
|
<el-tabs v-model="activeTab" type="border-card">
|
||||||
|
<el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.title" :name="tab.name">
|
||||||
|
<DoPage
|
||||||
|
v-if="activeTab === tab.name"
|
||||||
|
:label="tab.label"
|
||||||
|
:tabs="tab.tabs"
|
||||||
|
:useSpecialSplit="tab.useSpecialSplit"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import DoPage from '@/views/wms/coil/panels/do.vue'
|
||||||
|
import { DUGE_PROCESSING_TABS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DugeProcessing',
|
||||||
|
components: {
|
||||||
|
DoPage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'process',
|
||||||
|
tabs: DUGE_PROCESSING_TABS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.processing-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
92
klp-ui/src/views/micro/pages/duge/components/Quality.vue
Normal file
92
klp-ui/src/views/micro/pages/duge/components/Quality.vue
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<template>
|
||||||
|
<div class="quality-container">
|
||||||
|
<el-tabs v-model="activeTab" class="quality-tabs">
|
||||||
|
<el-tab-pane label="异常钢卷" name="abnormal">
|
||||||
|
<div v-if="activeTab === 'abnormal'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="abnormalQuerys"
|
||||||
|
:labelType="'2'"
|
||||||
|
:hideType="false"
|
||||||
|
:showAbnormal="true"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="次品钢卷" name="defect">
|
||||||
|
<div v-if="activeTab === 'defect'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="defectQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="O卷" name="oil">
|
||||||
|
<div v-if="activeTab === 'oil'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="oilQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { DUGE_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DugeQuality',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'abnormal',
|
||||||
|
abnormalQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
orderByAbnormal: true,
|
||||||
|
},
|
||||||
|
defectQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
OnlyScrap: true,
|
||||||
|
},
|
||||||
|
oilQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
qualityStatus: 'O',
|
||||||
|
},
|
||||||
|
warehouseOptions: DUGE_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.quality-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.quality-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
67
klp-ui/src/views/micro/pages/duge/components/Report.vue
Normal file
67
klp-ui/src/views/micro/pages/duge/components/Report.vue
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<template>
|
||||||
|
<div class="report-container">
|
||||||
|
<el-tabs v-model="activeTab" class="report-tabs">
|
||||||
|
<el-tab-pane label="综合报表" name="comprehensive">
|
||||||
|
<Comprehensive v-if="activeTab === 'comprehensive'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="日报表" name="day">
|
||||||
|
<DayReport v-if="activeTab === 'day'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="月报表" name="month">
|
||||||
|
<MonthReport v-if="activeTab === 'month'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="年报表" name="year">
|
||||||
|
<YearReport v-if="activeTab === 'year'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="损耗报表" name="loss">
|
||||||
|
<LossReport v-if="activeTab === 'loss'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="产出报表" name="out">
|
||||||
|
<OutReport v-if="activeTab === 'out'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="班报表" name="team">
|
||||||
|
<TeamReport v-if="activeTab === 'team'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Comprehensive from '@/views/wms/report/duge/comprehensive.vue'
|
||||||
|
import DayReport from '@/views/wms/report/duge/day.vue'
|
||||||
|
import MonthReport from '@/views/wms/report/duge/month.vue'
|
||||||
|
import YearReport from '@/views/wms/report/duge/year.vue'
|
||||||
|
import LossReport from '@/views/wms/report/duge/loss.vue'
|
||||||
|
import OutReport from '@/views/wms/report/duge/out.vue'
|
||||||
|
import TeamReport from '@/views/wms/report/duge/team.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DugeReport',
|
||||||
|
components: {
|
||||||
|
Comprehensive,
|
||||||
|
DayReport,
|
||||||
|
MonthReport,
|
||||||
|
YearReport,
|
||||||
|
LossReport,
|
||||||
|
OutReport,
|
||||||
|
TeamReport,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'comprehensive',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.report-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.report-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
79
klp-ui/src/views/micro/pages/duge/components/Shipping.vue
Normal file
79
klp-ui/src/views/micro/pages/duge/components/Shipping.vue
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
<template>
|
||||||
|
<div class="shipping-container">
|
||||||
|
<el-tabs v-model="activeTab" class="shipping-tabs">
|
||||||
|
<el-tab-pane label="配卷情况" name="waybill">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:showWaybill="true"
|
||||||
|
:showNewExport="true"
|
||||||
|
:querys="waybillQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="发货记录" name="ship">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="shipQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showExportTime="true"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { DUGE_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DugeShipping',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'waybill',
|
||||||
|
waybillQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
includeBindInfo: true,
|
||||||
|
},
|
||||||
|
shipQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 1,
|
||||||
|
},
|
||||||
|
warehouseOptions: DUGE_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.shipping-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.shipping-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
27
klp-ui/src/views/micro/pages/duge/config.js
Normal file
27
klp-ui/src/views/micro/pages/duge/config.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
export const DUGE_WAREHOUSE_OPTIONS = [
|
||||||
|
{ value: '1988151076996706306', label: '镀铬原料库' },
|
||||||
|
{ value: '1988151132361519105', label: '镀铬成品库' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export const DUGE_PROCESSING_TABS = [
|
||||||
|
{
|
||||||
|
title: '镀铬工序',
|
||||||
|
name: 'process',
|
||||||
|
label: '镀铬工序',
|
||||||
|
tabs: DUGE_WAREHOUSE_OPTIONS,
|
||||||
|
useSpecialSplit: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '合卷',
|
||||||
|
name: 'merge',
|
||||||
|
label: '镀铬合卷',
|
||||||
|
useSpecialSplit: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '镀铬修复',
|
||||||
|
name: 'repair',
|
||||||
|
label: '镀铬修复工序',
|
||||||
|
tabs: DUGE_WAREHOUSE_OPTIONS,
|
||||||
|
useSpecialSplit: true,
|
||||||
|
},
|
||||||
|
]
|
||||||
129
klp-ui/src/views/micro/pages/duge/index.vue
Normal file
129
klp-ui/src/views/micro/pages/duge/index.vue
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<template>
|
||||||
|
<div class="duge-container">
|
||||||
|
<div class="duge-sidebar">
|
||||||
|
<el-menu :default-active="activeMenu" class="sidebar-menu" @select="handleMenuSelect">
|
||||||
|
<el-menu-item index="inventory">
|
||||||
|
<i class="el-icon-box"></i>
|
||||||
|
<span slot="title">库存</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="processing">
|
||||||
|
<i class="el-icon-s-operation"></i>
|
||||||
|
<span slot="title">WIP</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="report">
|
||||||
|
<i class="el-icon-document"></i>
|
||||||
|
<span slot="title">报表</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="shipping">
|
||||||
|
<i class="el-icon-truck"></i>
|
||||||
|
<span slot="title">发货</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="quality">
|
||||||
|
<i class="el-icon-warning-outline"></i>
|
||||||
|
<span slot="title">品质</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
<div class="duge-content">
|
||||||
|
<component :is="currentComponent" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Inventory from './components/Inventory.vue'
|
||||||
|
import Processing from './components/Processing.vue'
|
||||||
|
import Report from './components/Report.vue'
|
||||||
|
import Shipping from './components/Shipping.vue'
|
||||||
|
import Quality from './components/Quality.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DugeSystem',
|
||||||
|
components: {
|
||||||
|
Inventory,
|
||||||
|
Processing,
|
||||||
|
Report,
|
||||||
|
Shipping,
|
||||||
|
Quality,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeMenu: 'inventory',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
currentComponent() {
|
||||||
|
const componentMap = {
|
||||||
|
inventory: 'Inventory',
|
||||||
|
processing: 'Processing',
|
||||||
|
report: 'Report',
|
||||||
|
shipping: 'Shipping',
|
||||||
|
quality: 'Quality',
|
||||||
|
}
|
||||||
|
return componentMap[this.activeMenu]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleMenuSelect(index) {
|
||||||
|
this.activeMenu = index
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.app-container {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.duge-container {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh - 84px);
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.duge-sidebar {
|
||||||
|
width: 100px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-right: 1px solid #e4e7ed;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.05);
|
||||||
|
|
||||||
|
.sidebar-menu {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
border-right: none;
|
||||||
|
|
||||||
|
::v-deep .el-menu-item {
|
||||||
|
color: #606266;
|
||||||
|
padding: 0 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #ecf5ff;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-active {
|
||||||
|
background-color: #ecf5ff;
|
||||||
|
color: #409eff;
|
||||||
|
border-right: 3px solid #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
font-size: 18px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.duge-content {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
42
klp-ui/src/views/micro/pages/lajiao/components/Inventory.vue
Normal file
42
klp-ui/src/views/micro/pages/lajiao/components/Inventory.vue
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<div class="inventory-container">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="querys"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { LAJIAO_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LajiaoInventory',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 拉矫平整集成库存直接复用钢卷基础查询面板,仅切换逻辑库区范围。
|
||||||
|
querys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
},
|
||||||
|
// 这里使用拉矫平整主链路库区,避免把技术部/废品库等外围库区混入集成入口。
|
||||||
|
warehouseOptions: LAJIAO_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.inventory-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<template>
|
||||||
|
<div class="processing-container">
|
||||||
|
<el-tabs v-model="activeTab" type="border-card">
|
||||||
|
<el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.title" :name="tab.name">
|
||||||
|
<DoPage
|
||||||
|
v-if="activeTab === tab.name"
|
||||||
|
:label="tab.label"
|
||||||
|
:tabs="tab.tabs"
|
||||||
|
:useSpecialSplit="tab.useSpecialSplit"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import DoPage from '@/views/wms/coil/panels/do.vue'
|
||||||
|
import { LAJIAO_PROCESSING_TABS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LajiaoProcessing',
|
||||||
|
components: {
|
||||||
|
DoPage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 拉矫平整 WIP 复用现有工序待办组件,只切换为拉矫平整工序标签与对应逻辑库区。
|
||||||
|
activeTab: 'process',
|
||||||
|
// 配置集中定义在 config.js,便于后续同步调整工序名称与库区映射。
|
||||||
|
tabs: LAJIAO_PROCESSING_TABS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.processing-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
97
klp-ui/src/views/micro/pages/lajiao/components/Quality.vue
Normal file
97
klp-ui/src/views/micro/pages/lajiao/components/Quality.vue
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
<template>
|
||||||
|
<div class="quality-container">
|
||||||
|
<el-tabs v-model="activeTab" class="quality-tabs">
|
||||||
|
<el-tab-pane label="异常钢卷" name="abnormal">
|
||||||
|
<div v-if="activeTab === 'abnormal'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="abnormalQuerys"
|
||||||
|
:labelType="'2'"
|
||||||
|
:hideType="false"
|
||||||
|
:showAbnormal="true"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="次品钢卷" name="defect">
|
||||||
|
<div v-if="activeTab === 'defect'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="defectQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="O卷" name="oil">
|
||||||
|
<div v-if="activeTab === 'oil'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="oilQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { LAJIAO_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LajiaoQuality',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 品质页复用现有异常/次品/O 卷查询逻辑,只切换拉矫平整库区范围。
|
||||||
|
activeTab: 'abnormal',
|
||||||
|
abnormalQuerys: {
|
||||||
|
// 异常钢卷默认按异常信息排序,便于品质人员优先处理。
|
||||||
|
dataType: 1,
|
||||||
|
orderByAbnormal: true,
|
||||||
|
},
|
||||||
|
defectQuerys: {
|
||||||
|
// 次品钢卷使用现有 scrap 口径。
|
||||||
|
dataType: 1,
|
||||||
|
OnlyScrap: true,
|
||||||
|
},
|
||||||
|
oilQuerys: {
|
||||||
|
// O 卷通过质量状态过滤,不额外增加专用接口。
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
qualityStatus: 'O',
|
||||||
|
},
|
||||||
|
// 品质板块的库区范围与拉矫平整集成其余板块一致,保证筛选口径统一。
|
||||||
|
warehouseOptions: LAJIAO_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.quality-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.quality-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
69
klp-ui/src/views/micro/pages/lajiao/components/Report.vue
Normal file
69
klp-ui/src/views/micro/pages/lajiao/components/Report.vue
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<template>
|
||||||
|
<div class="report-container">
|
||||||
|
<el-tabs v-model="activeTab" class="report-tabs">
|
||||||
|
<el-tab-pane label="综合报表" name="comprehensive">
|
||||||
|
<Comprehensive v-if="activeTab === 'comprehensive'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="日报表" name="day">
|
||||||
|
<DayReport v-if="activeTab === 'day'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="月报表" name="month">
|
||||||
|
<MonthReport v-if="activeTab === 'month'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="年报表" name="year">
|
||||||
|
<YearReport v-if="activeTab === 'year'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="损耗报表" name="loss">
|
||||||
|
<LossReport v-if="activeTab === 'loss'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="产出报表" name="out">
|
||||||
|
<OutReport v-if="activeTab === 'out'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="班报表" name="team">
|
||||||
|
<TeamReport v-if="activeTab === 'team'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Comprehensive from '@/views/wms/report/lajiao/comprehensive.vue'
|
||||||
|
import DayReport from '@/views/wms/report/lajiao/day.vue'
|
||||||
|
import MonthReport from '@/views/wms/report/lajiao/month.vue'
|
||||||
|
import YearReport from '@/views/wms/report/lajiao/year.vue'
|
||||||
|
import LossReport from '@/views/wms/report/lajiao/loss.vue'
|
||||||
|
import OutReport from '@/views/wms/report/lajiao/out.vue'
|
||||||
|
import TeamReport from '@/views/wms/report/lajiao/team.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LajiaoReport',
|
||||||
|
components: {
|
||||||
|
Comprehensive,
|
||||||
|
DayReport,
|
||||||
|
MonthReport,
|
||||||
|
YearReport,
|
||||||
|
LossReport,
|
||||||
|
OutReport,
|
||||||
|
TeamReport,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 报表页直接复用 wms/report/lajiao 下的既有报表资源,
|
||||||
|
// 集成页只负责聚合入口,不额外改写报表查询逻辑。
|
||||||
|
activeTab: 'comprehensive',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.report-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.report-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
83
klp-ui/src/views/micro/pages/lajiao/components/Shipping.vue
Normal file
83
klp-ui/src/views/micro/pages/lajiao/components/Shipping.vue
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
<template>
|
||||||
|
<div class="shipping-container">
|
||||||
|
<el-tabs v-model="activeTab" class="shipping-tabs">
|
||||||
|
<el-tab-pane label="配卷情况" name="waybill">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:showWaybill="true"
|
||||||
|
:showNewExport="true"
|
||||||
|
:querys="waybillQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="发货记录" name="ship">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="shipQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showExportTime="true"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { LAJIAO_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LajiaoShipping',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 发货板块沿用现有钢卷发运能力,仅将过滤库区限定为拉矫平整工序链路。
|
||||||
|
activeTab: 'waybill',
|
||||||
|
waybillQuerys: {
|
||||||
|
// 配卷情况需要带上发货绑定信息,便于直接查看配卷结果。
|
||||||
|
dataType: 1,
|
||||||
|
includeBindInfo: true,
|
||||||
|
},
|
||||||
|
shipQuerys: {
|
||||||
|
// 发货记录仅查看已发货数据。
|
||||||
|
dataType: 1,
|
||||||
|
status: 1,
|
||||||
|
},
|
||||||
|
// 发货板块与库存/WIP 保持相同库区口径,避免统计口径不一致。
|
||||||
|
warehouseOptions: LAJIAO_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.shipping-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.shipping-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
40
klp-ui/src/views/micro/pages/lajiao/config.js
Normal file
40
klp-ui/src/views/micro/pages/lajiao/config.js
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
// 拉矫平整集成页公共配置。
|
||||||
|
// 这里统一维护五个板块共用的逻辑库区,保持库存、WIP、发货、品质口径一致。
|
||||||
|
|
||||||
|
// 拉矫平整主链路逻辑库区:
|
||||||
|
// 1. 拉矫原料库:拉矫平整工序入口原料
|
||||||
|
// 2. 拉矫成品库:拉矫平整工序产出成品
|
||||||
|
// 3. 双机架原料库:拉矫下游衔接库区
|
||||||
|
export const LAJIAO_WAREHOUSE_OPTIONS = [
|
||||||
|
{ value: '1988150854442741762', label: '拉矫原料库' },
|
||||||
|
{ value: '1988150915591499777', label: '拉矫成品库' },
|
||||||
|
{ value: '1992873386047643650', label: '双机架原料库' },
|
||||||
|
]
|
||||||
|
|
||||||
|
// 拉矫平整 WIP 直接复用现有 WMS 工序组件:
|
||||||
|
// - 拉矫平整工序、拉矫修复工序走 specialSplit 流程
|
||||||
|
// - 拉矫平整合卷走普通待办流程
|
||||||
|
export const LAJIAO_PROCESSING_TABS = [
|
||||||
|
{
|
||||||
|
title: '拉矫平整工序',
|
||||||
|
name: 'process',
|
||||||
|
label: '拉矫平整工序',
|
||||||
|
// 拉矫平整工序和修复工序都限定在主链路库区内操作。
|
||||||
|
tabs: LAJIAO_WAREHOUSE_OPTIONS,
|
||||||
|
useSpecialSplit: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '合卷',
|
||||||
|
name: 'merge',
|
||||||
|
label: '拉矫平整合卷',
|
||||||
|
// 合卷沿用待办单模式,不需要传入库区页签。
|
||||||
|
useSpecialSplit: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '拉矫修复',
|
||||||
|
name: 'repair',
|
||||||
|
label: '拉矫修复工序',
|
||||||
|
tabs: LAJIAO_WAREHOUSE_OPTIONS,
|
||||||
|
useSpecialSplit: true,
|
||||||
|
},
|
||||||
|
]
|
||||||
133
klp-ui/src/views/micro/pages/lajiao/index.vue
Normal file
133
klp-ui/src/views/micro/pages/lajiao/index.vue
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<template>
|
||||||
|
<div class="lajiao-container">
|
||||||
|
<div class="lajiao-sidebar">
|
||||||
|
<el-menu :default-active="activeMenu" class="sidebar-menu" @select="handleMenuSelect">
|
||||||
|
<!-- 拉矫平整集成页按需求只保留五个核心业务板块 -->
|
||||||
|
<el-menu-item index="inventory">
|
||||||
|
<i class="el-icon-box"></i>
|
||||||
|
<span slot="title">库存</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="processing">
|
||||||
|
<i class="el-icon-s-operation"></i>
|
||||||
|
<span slot="title">WIP</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="report">
|
||||||
|
<i class="el-icon-document"></i>
|
||||||
|
<span slot="title">报表</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="shipping">
|
||||||
|
<i class="el-icon-truck"></i>
|
||||||
|
<span slot="title">发货</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="quality">
|
||||||
|
<i class="el-icon-warning-outline"></i>
|
||||||
|
<span slot="title">品质</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
<div class="lajiao-content">
|
||||||
|
<component :is="currentComponent" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Inventory from './components/Inventory.vue'
|
||||||
|
import Processing from './components/Processing.vue'
|
||||||
|
import Report from './components/Report.vue'
|
||||||
|
import Shipping from './components/Shipping.vue'
|
||||||
|
import Quality from './components/Quality.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LajiaoSystem',
|
||||||
|
components: {
|
||||||
|
Inventory,
|
||||||
|
Processing,
|
||||||
|
Report,
|
||||||
|
Shipping,
|
||||||
|
Quality,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 默认先展示库存板块,与酸轧、镀锌、脱脂集成入口保持一致。
|
||||||
|
activeMenu: 'inventory',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
currentComponent() {
|
||||||
|
// 集成页只作为业务导航壳,具体业务能力由各子组件承载。
|
||||||
|
const componentMap = {
|
||||||
|
inventory: 'Inventory',
|
||||||
|
processing: 'Processing',
|
||||||
|
report: 'Report',
|
||||||
|
shipping: 'Shipping',
|
||||||
|
quality: 'Quality',
|
||||||
|
}
|
||||||
|
return componentMap[this.activeMenu]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleMenuSelect(index) {
|
||||||
|
// 左侧菜单切换时,仅替换右侧业务面板,不做额外路由跳转。
|
||||||
|
this.activeMenu = index
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.app-container {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lajiao-container {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh - 84px);
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lajiao-sidebar {
|
||||||
|
width: 100px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-right: 1px solid #e4e7ed;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.05);
|
||||||
|
|
||||||
|
.sidebar-menu {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
border-right: none;
|
||||||
|
|
||||||
|
::v-deep .el-menu-item {
|
||||||
|
color: #606266;
|
||||||
|
padding: 0 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #ecf5ff;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-active {
|
||||||
|
background-color: #ecf5ff;
|
||||||
|
color: #409eff;
|
||||||
|
border-right: 3px solid #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
font-size: 18px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.lajiao-content {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
41
klp-ui/src/views/micro/pages/split/components/Inventory.vue
Normal file
41
klp-ui/src/views/micro/pages/split/components/Inventory.vue
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<template>
|
||||||
|
<div class="inventory-container">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="querys"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { SPLIT_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SplitInventory',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 分条集成库存直接复用钢卷基础查询面板,仅切换到分条成品链路库区。
|
||||||
|
querys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
},
|
||||||
|
warehouseOptions: SPLIT_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.inventory-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
40
klp-ui/src/views/micro/pages/split/components/Processing.vue
Normal file
40
klp-ui/src/views/micro/pages/split/components/Processing.vue
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<template>
|
||||||
|
<div class="processing-container">
|
||||||
|
<el-tabs v-model="activeTab" type="border-card">
|
||||||
|
<el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.title" :name="tab.name">
|
||||||
|
<DoPage
|
||||||
|
v-if="activeTab === tab.name"
|
||||||
|
:label="tab.label"
|
||||||
|
:tabs="tab.tabs"
|
||||||
|
:useSpecialSplit="tab.useSpecialSplit"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import DoPage from '@/views/wms/coil/panels/do.vue'
|
||||||
|
import { SPLIT_PROCESSING_TABS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SplitProcessing',
|
||||||
|
components: {
|
||||||
|
DoPage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 纵剪分条 WIP 目前仅复用现有“纵剪分条工序”能力,不额外引入不存在的合卷/修复页签。
|
||||||
|
activeTab: 'process',
|
||||||
|
tabs: SPLIT_PROCESSING_TABS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.processing-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
93
klp-ui/src/views/micro/pages/split/components/Quality.vue
Normal file
93
klp-ui/src/views/micro/pages/split/components/Quality.vue
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
<template>
|
||||||
|
<div class="quality-container">
|
||||||
|
<el-tabs v-model="activeTab" class="quality-tabs">
|
||||||
|
<el-tab-pane label="异常钢卷" name="abnormal">
|
||||||
|
<div v-if="activeTab === 'abnormal'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="abnormalQuerys"
|
||||||
|
:labelType="'2'"
|
||||||
|
:hideType="false"
|
||||||
|
:showAbnormal="true"
|
||||||
|
:showControl="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="次品钢卷" name="defect">
|
||||||
|
<div v-if="activeTab === 'defect'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="defectQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="O卷" name="oil">
|
||||||
|
<div v-if="activeTab === 'oil'" class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="oilQuerys"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { SPLIT_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SplitQuality',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 品质页复用现有异常/次品/O 卷查询逻辑,只切换分条成品链路库区范围。
|
||||||
|
activeTab: 'abnormal',
|
||||||
|
abnormalQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
orderByAbnormal: true,
|
||||||
|
},
|
||||||
|
defectQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
OnlyScrap: true,
|
||||||
|
},
|
||||||
|
oilQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 0,
|
||||||
|
qualityStatus: 'O',
|
||||||
|
},
|
||||||
|
warehouseOptions: SPLIT_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.quality-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.quality-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
68
klp-ui/src/views/micro/pages/split/components/Report.vue
Normal file
68
klp-ui/src/views/micro/pages/split/components/Report.vue
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<template>
|
||||||
|
<div class="report-container">
|
||||||
|
<el-tabs v-model="activeTab" class="report-tabs">
|
||||||
|
<el-tab-pane label="综合报表" name="comprehensive">
|
||||||
|
<Comprehensive v-if="activeTab === 'comprehensive'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="日报表" name="day">
|
||||||
|
<DayReport v-if="activeTab === 'day'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="月报表" name="month">
|
||||||
|
<MonthReport v-if="activeTab === 'month'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="年报表" name="year">
|
||||||
|
<YearReport v-if="activeTab === 'year'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="损耗报表" name="loss">
|
||||||
|
<LossReport v-if="activeTab === 'loss'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="产出报表" name="out">
|
||||||
|
<OutReport v-if="activeTab === 'out'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="班报表" name="team">
|
||||||
|
<TeamReport v-if="activeTab === 'team'" />
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Comprehensive from '@/views/wms/report/split/comprehensive.vue'
|
||||||
|
import DayReport from '@/views/wms/report/split/day.vue'
|
||||||
|
import MonthReport from '@/views/wms/report/split/month.vue'
|
||||||
|
import YearReport from '@/views/wms/report/split/year.vue'
|
||||||
|
import LossReport from '@/views/wms/report/split/loss.vue'
|
||||||
|
import OutReport from '@/views/wms/report/split/out.vue'
|
||||||
|
import TeamReport from '@/views/wms/report/split/team.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SplitReport',
|
||||||
|
components: {
|
||||||
|
Comprehensive,
|
||||||
|
DayReport,
|
||||||
|
MonthReport,
|
||||||
|
YearReport,
|
||||||
|
LossReport,
|
||||||
|
OutReport,
|
||||||
|
TeamReport,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 报表页直接复用 wms/report/split 下的既有报表资源。
|
||||||
|
activeTab: 'comprehensive',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.report-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.report-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
80
klp-ui/src/views/micro/pages/split/components/Shipping.vue
Normal file
80
klp-ui/src/views/micro/pages/split/components/Shipping.vue
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<template>
|
||||||
|
<div class="shipping-container">
|
||||||
|
<el-tabs v-model="activeTab" class="shipping-tabs">
|
||||||
|
<el-tab-pane label="配卷情况" name="waybill">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:showWaybill="true"
|
||||||
|
:showNewExport="true"
|
||||||
|
:querys="waybillQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="发货记录" name="ship">
|
||||||
|
<div class="tab-content">
|
||||||
|
<BasePage
|
||||||
|
:qrcode="false"
|
||||||
|
:querys="shipQuerys"
|
||||||
|
:showStatus="false"
|
||||||
|
:hideType="false"
|
||||||
|
:useWarehouseIds="true"
|
||||||
|
:warehouseOptions="warehouseOptions"
|
||||||
|
:showControl="false"
|
||||||
|
:showExportTime="true"
|
||||||
|
:showMaterialType="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BasePage from '@/views/wms/coil/panels/base.vue'
|
||||||
|
import { SPLIT_WAREHOUSE_OPTIONS } from '../config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SplitShipping',
|
||||||
|
components: {
|
||||||
|
BasePage,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 发货板块沿用现有钢卷发运能力,仅将过滤库区限定为分条成品链路。
|
||||||
|
activeTab: 'waybill',
|
||||||
|
waybillQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
includeBindInfo: true,
|
||||||
|
},
|
||||||
|
shipQuerys: {
|
||||||
|
dataType: 1,
|
||||||
|
status: 1,
|
||||||
|
},
|
||||||
|
warehouseOptions: SPLIT_WAREHOUSE_OPTIONS,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.shipping-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.shipping-tabs {
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user