【需求】完成bom清单列表

pull/4/head
zengchenxi 8 months ago
parent 236510d24e
commit a20ebfddff

@ -49,4 +49,16 @@ public class ProcessBomPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
@Schema(description = "生产计划单号")
private String planCode;
@Schema(description = "项目编号")
private String projectCode;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "项目名称")
private String projectName;
}

@ -64,4 +64,16 @@ public class ProcessBomRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
@Schema(description = "计划单号")
private String planCode;
@Schema(description = "项目编号")
private String projectCode;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "项目名称")
private String projectName;
}

@ -43,14 +43,6 @@ public class ProcessBomDO extends BaseDO {
* id
*/
private Long projectSubId;
/**
*
*/
private String projectSubName;
/**
*
*/
private String projectSubCode;
/**
* bom
*/
@ -69,5 +61,21 @@ public class ProcessBomDO extends BaseDO {
* ,12
*/
private Integer status;
/**
*
*/
@TableField(exist = false)
private String projectSubName;
@TableField(exist = false)
private String planCode;
@TableField(exist = false)
private String projectCode;
@TableField(exist = false)
private String customerName;
}
@TableField(exist = false)
private String projectName;
}

@ -1,13 +1,16 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.processbom;
import java.util.*;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*;
import org.springframework.util.StringUtils;
/**
* bom Mapper
@ -18,19 +21,28 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*;
public interface ProcessBomMapper extends BaseMapperX<ProcessBomDO> {
default PageResult<ProcessBomDO> selectPage(ProcessBomPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProcessBomDO>()
.eqIfPresent(ProcessBomDO::getCode, reqVO.getCode())
.eqIfPresent(ProcessBomDO::getPlanId, reqVO.getPlanId())
.eqIfPresent(ProcessBomDO::getProjectId, reqVO.getProjectId())
.eqIfPresent(ProcessBomDO::getProjectSubId, reqVO.getProjectSubId())
.likeIfPresent(ProcessBomDO::getProjectSubName, reqVO.getProjectSubName())
.eqIfPresent(ProcessBomDO::getProjectSubCode, reqVO.getProjectSubCode())
.eqIfPresent(ProcessBomDO::getVersion, reqVO.getVersion())
.eqIfPresent(ProcessBomDO::getBomStatus, reqVO.getBomStatus())
.eqIfPresent(ProcessBomDO::getRemark, reqVO.getRemark())
.eqIfPresent(ProcessBomDO::getStatus, reqVO.getStatus())
.betweenIfPresent(ProcessBomDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ProcessBomDO::getId));
MPJLambdaWrapper<ProcessBomDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProcessBomDO.class)
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName")
.select("d.name as projectSubName")
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, ProcessBomDO::getProjectId)
.leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.leftJoin(ProjectOrderSubDO.class, "d", ProjectOrderSubDO::getId, ProcessBomDO::getProjectSubId)
.orderByDesc(ProcessBomDO::getId)
.disableSubLogicDel()
;
query.like(!StringUtils.isEmpty(reqVO.getCode()), ProcessBomDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getPlanCode()), PlanDO::getPlanNo, reqVO.getPlanCode())
.like(!StringUtils.isEmpty(reqVO.getProjectCode()), ProjectOrderDO::getCode, reqVO.getProjectCode())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
.eq(reqVO.getBomStatus() != null, ProcessBomDO::getBomStatus, reqVO.getBomStatus())
;
return selectPage(reqVO, query);
}
}
}

@ -243,4 +243,5 @@ export enum DICT_TYPE {
HELI_PROJECT_PLAN_STATUS = 'heli_project_plan_status',//生产计划状态
HELI_CRAFT = 'heli_craft',//工艺流程
HELI_PROJECT_MATERIAL_PLAN_STATUS = 'heli_project_material_plan_status',//物料需求计划状态
HELI_BOM_STATUS = 'heli_bom_status', //bom状态
}

@ -1,202 +1,144 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="编号,唯一" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入编号,唯一"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="生产计划id" prop="planId">
<el-input
v-model="queryParams.planId"
placeholder="请输入生产计划id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="项目id" prop="projectId">
<el-input
v-model="queryParams.projectId"
placeholder="请输入项目id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="子项目id" prop="projectSubId">
<el-input
v-model="queryParams.projectSubId"
placeholder="请输入子项目id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="子项目名称" prop="projectSubName">
<el-input
v-model="queryParams.projectSubName"
placeholder="请输入子项目名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="子项目编号" prop="projectSubCode">
<el-input
v-model="queryParams.projectSubCode"
placeholder="请输入子项目编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="bom版本号" prop="version">
<el-input
v-model="queryParams.version"
placeholder="请输入bom版本号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="bom状态 已保存|已提交 1|2" prop="bomStatus">
<el-select
v-model="queryParams.bomStatus"
placeholder="请选择bom状态 已保存|已提交 1|2"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_BOM_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
<el-card class="hl-card">
<template #header>
<span>BOM清单维护</span>
</template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="120px"
>
<el-form-item label="BOM编号" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入BOM编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="状态,1表示正常2表示禁用" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择状态,1表示正常2表示禁用"
clearable
class="!w-240px"
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['heli:process-bom:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['heli:process-bom:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="自增字段,唯一" align="center" prop="id" />
<el-table-column label="编号,唯一" align="center" prop="code" />
<el-table-column label="生产计划id" align="center" prop="planId" />
<el-table-column label="项目id" align="center" prop="projectId" />
<el-table-column label="子项目id" align="center" prop="projectSubId" />
<el-table-column label="子项目名称" align="center" prop="projectSubName" />
<el-table-column label="子项目编号" align="center" prop="projectSubCode" />
<el-table-column label="bom版本号" align="center" prop="version" />
<el-table-column label="bom状态 已保存|已提交 1|2" align="center" prop="bomStatus">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_BOM_STATUS" :value="scope.row.bomStatus" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="状态,1表示正常2表示禁用" align="center" prop="status" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['heli:process-bom:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['heli:process-bom:delete']"
</el-form-item>
<el-form-item label="生产计划单号" prop="planCode">
<el-input
v-model="queryParams.planCode"
placeholder="请输入生产计划单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="项目编号" prop="projectCode">
<el-input
v-model="queryParams.projectCode"
placeholder="请输入项目编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="客户名称" prop="customerName">
<el-input
v-model="queryParams.customerName"
placeholder="请输入客户名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<el-input
v-model="queryParams.projectName"
placeholder="请输入项目名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="子项目名称" prop="projectSubName">
<el-input
v-model="queryParams.projectSubName"
placeholder="请输入子项目名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="单据状态" prop="bomStatus">
<el-select
v-model="queryParams.bomStatus"
placeholder="请选择单据状态"
clearable
class="!w-240px"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_BOM_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ProcessBomForm ref="formRef" @success="getList" />
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column fixed label="序号" type="index" width="60" />
<el-table-column label="BOM编号" align="center" prop="code" width="220" />
<el-table-column label="生产计划单号" align="center" prop="planCode" width="180" />
<el-table-column label="项目编号" align="center" prop="projectCode" width="220" />
<el-table-column label="客户名称" align="center" prop="customerName" width="240" />
<el-table-column label="项目名称" align="center" prop="projectName" width="180" />
<el-table-column label="子项目名称" align="center" prop="projectSubName" width="180" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="220"
/>
<el-table-column label="BOM版本号" align="center" prop="version" width="140" />
<el-table-column label="单据状态" align="center" prop="bomStatus" width="140">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_BOM_STATUS" :value="scope.row.bomStatus" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160">
<template #default="scope">
<el-button
link
type="primary"
@click="openDetail('update', scope.row.id)"
>
编辑
</el-button>
<el-button
link
type="primary"
@click="openDetail('detail', scope.row.id)"
>
查看详情
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
</el-card>
</template>
<script setup lang="ts">
@ -204,13 +146,14 @@ import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as ProcessBomApi from '@/api/heli/processbom'
import ProcessBomForm from './ProcessBomForm.vue'
import {useCommonStateWithOut} from "@/store/modules/common";
defineOptions({ name: 'ProcessBom' })
const commonStore = useCommonStateWithOut()
const message = useMessage() //
const { t } = useI18n() //
const router = useRouter()
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
@ -218,11 +161,11 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
planId: undefined,
projectId: undefined,
projectSubId: undefined,
planCode: undefined,
projectCode: undefined,
customerName: undefined,
projectSubName: undefined,
projectSubName: undefined,
projectSubCode: undefined,
version: undefined,
bomStatus: undefined,
remark: undefined,
@ -290,8 +233,20 @@ const handleExport = async () => {
}
}
/** 添加/修改操作 */
const openDetail = (type: string, id?: number) => {
commonStore.setStore("active", type);
commonStore.setStore("id", id);
router.push({
name: 'ProcessBomDetail',
query: {
operateId: Math.random()
}
})
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>
</script>

@ -197,8 +197,6 @@ CREATE TABLE `pro_process_bom` (
`plan_id` BIGINT(20) NOT NULL COMMENT '生产计划id',
`project_id` BIGINT(20) NOT NULL COMMENT '项目id',
`project_sub_id` bigint(20) NOT NULL COMMENT '子项目id',
`project_sub_name` varchar(128) NOT NULL comment '子项目名称',
`project_sub_code` varchar(128) NOT NULL comment '子项目编号',
`version` int(11) not null DEFAULT '0' COMMENT 'bom版本号',
`bom_status` TINYINT(1) not null comment 'bom状态 已保存|已提交 1|2',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',

Loading…
Cancel
Save