计划联动看板用于展示销售订单的全流程联动信息,包括工单、排产、采购、投产、入库等关键节点的计划时间、实际时间及偏差对比。
pr_Mes_LinkagePlan 刷新数据yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/
├── controller/admin/linkage/
│ ├── LinkagePlanController.java # 控制器
│ └── vo/
│ ├── LinkagePlanPageReqVO.java # 分页请求VO
│ └── LinkagePlanRespVO.java # 响应VO
├── service/
│ ├── LinkagePlanService.java # 服务接口
│ └── impl/
│ └── LinkagePlanServiceImpl.java # 服务实现
└── dal/mysql/
└── LinkagePlanMapper.java # Mapper接口
yudao-order-server/src/main/resources/mapper/order/
└── LinkagePlanMapper.xml # MyBatis XML映射
yudao-ui/yudao-ui-admin-vue3/src/
├── api/jiaohuo/
│ └── linkagePlan.ts # API接口定义
└── views/jiaohuo/
└── LinkagePlan.vue # 页面组件
接口地址:GET /admin-api/order/linkage-plan/list
请求参数:
{
billNo?: string // 订单编号(模糊匹配)
customNo?: string // 客户编码(模糊匹配)
orderType?: string // 订单类型:计划/销售
itemNumber?: string // 物料代码
pageNo?: number // 页码
pageSize?: number // 每页数量
initialLoad?: boolean // 是否初始加载(内部使用)
}
响应数据:
{
code: 0,
data: {
list: LinkagePlanRespVO[],
total: number
},
msg: "success"
}
| 字段 | 说明 | 类型 | 备注 |
|---|---|---|---|
| billNo | 订单编号 | String | |
| customNo | 客户编码 | String | |
| orderType | 类型 | String | |
| itemNumber | 物料代码 | String | |
| descr | 物料名称 | String | |
| descr1 | 规格型号 | String | |
| itemType | 产品类型 | String | |
| qty | 数量 | Integer | |
| updateTime | 生产通知 | String | 计划/实际:日期,偏差:天数 |
| sysCapacityDate | 合同交期 | String | 计划/实际:日期,偏差:天数 |
| type | 计划管控 | String | 计划/实际/偏差 |
| bomstart | Bom设计开始 | String | 计划/实际:日期,偏差:天数 |
| bomend | Bom设计结束 | String | 计划/实际:日期,偏差:天数 |
| linestart | 工艺设计开始 | String | 计划/实际:日期,偏差:天数 |
| lineend | 工艺设计结束 | String | 计划/实际:日期,偏差:天数 |
| productstart | 生产开始 | String | 计划/实际:日期,偏差:天数 |
| productend | 生产结束 | String | 计划/实际:日期,偏差:天数 |
| needtime | 物料需求 | String | 计划/实际:日期,偏差:天数 |
| sysMaterialDate | 物料满足 | String | 计划/实际:日期,偏差:天数 |
| cgneedtime | 采购下单 | String | 计划/实际:日期,偏差:天数 |
| cgend | 采购到货 | String | 计划/实际:日期,偏差:天数 |
| blstart | 备料开始 | String | 计划/实际:日期,偏差:天数 |
| blend | 备料结束 | String | 计划/实际:日期,偏差:天数 |
| starttime | 报工开始 | String | 计划/实际:日期,偏差:天数 |
| endtime | 报工结束 | String | 计划/实际:日期,偏差:天数 |
| ipqcjystart | IQC检验开始 | String | 计划/实际:日期,偏差:天数 |
| ipqcjyend | IQC检验结束 | String | 计划/实际:日期,偏差:天数 |
| fqcjystart | FQC检验开始 | String | 计划/实际:日期,偏差:天数 |
| fqcjyend | FQC检验结束 | String | 计划/实际:日期,偏差:天数 |
| rkstart | 入库开始 | String | 计划/实际:日期,偏差:天数 |
| rkend | 入库结束 | String | 计划/实际:日期,偏差:天数 |
| fystarttime | 发运开始 | String | 计划/实际:日期,偏差:天数 |
| fyendtime | 发运结束 | String | 计划/实际:日期,偏差:天数 |
| levelnum | 排序 | Integer | |
| background | 背景色标记 | String | 格式:字段名:颜色; |
重要说明:所有日期字段统一使用String类型,因为:
背景色字段格式:字段名:颜色;字段名:颜色;...
例如:bomstart:red;bomend:yellow;linestart:red;
需要在系统菜单中配置权限标识:order:linkage-plan:query
建议菜单路径:S1产销协同 => 产销协同看板 => 计划联动看板
在路由配置中添加:
{
path: '/jiaohuo/linkage-plan',
name: 'LinkagePlan',
component: () => import('@/views/jiaohuo/LinkagePlan.vue'),
meta: {
title: '计划联动看板',
permission: 'order:linkage-plan:query'
}
}
确保已执行存储过程创建脚本:sql/mysql/pr_Mes_LinkagePlan_fixed.sql
前端使用 isInitialLoad 标志控制是否执行存储过程:
initialLoad=true,执行存储过程initialLoad=false,仅查询initialLoad=true,重新执行存储过程使用 cell-style 属性动态设置单元格背景色:
const getCellStyle = ({ row, column }) => {
const backgroundStr = row.background
const columnProp = column.property
// 解析background字符串
const styles = backgroundStr.split(';')
for (const style of styles) {
const [field, color] = style.split(':')
if (field === columnProp) {
return {
backgroundColor: color === 'red' ? '#fef0f0' : '#fdf6ec'
}
}
}
return {}
}
Service层使用 @Transactional 确保存储过程执行和查询的原子性。
@InterceptorIgnore禁用租户过滤@TableField注解映射Table 'dopdemo.linkage_plan_resp_v_o' doesn't existBaseMapperX<LinkagePlanDO>Unknown column 'tenant_id' in 'where clause'@InterceptorIgnore(tenantLine = "true")注解Unknown column 'item_type' in 'field list'@TableField("ItemType")等注解指定实际字段名Cannot convert string '0' to java.time.LocalDateTime value可以考虑添加以下功能: