| | |
| | | * 添加的form字段 |
| | | */ |
| | | const formItems = reactive([ |
| | | // { |
| | | // label: '单据编号', |
| | | // prop: 'orderNo', |
| | | // el: 'input', |
| | | // disabled: disabled, |
| | | // placeholder: '请输入单据编号', |
| | | // rules: [{ required: true, message: '单据编号不能为空', trigger: 'blur' }], |
| | | // }, |
| | | // { |
| | | // label: '单据状态', |
| | | // prop: 'orderStatus', |
| | | // el: 'select', |
| | | // disabled: disabled, |
| | | // placeholder: '请输入单据状态', |
| | | // rules: [{ required: true, message: '单据状态不能为空', trigger: 'blur' }], |
| | | // }, |
| | | |
| | | { |
| | | label: '单据编号', |
| | | prop: 'orderNo', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请输入单据编号', |
| | | rules: [{ required: true, message: '单据编号不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '单据状态', |
| | | prop: 'orderStatus', |
| | | label: '单据类型', |
| | | prop: 'orderType', |
| | | el: 'select', |
| | | disabled: disabled, |
| | | placeholder: '请输入单据状态', |
| | | rules: [{ required: true, message: '单据状态不能为空', trigger: 'blur' }], |
| | | placeholder: '请输入单据类型', |
| | | rules: [{ required: true, message: '单据类型不能为空', trigger: 'blur' }], |
| | | }, |
| | | // { |
| | | // label: '操作类型', |
| | | // prop: 'stockType', |
| | | // el: 'select', |
| | | // disabled: disabled, |
| | | // placeholder: '请输入操作类型', |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '操作类型不能为空', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | // }, |
| | | { |
| | | label: '物料编号', |
| | | prop: 'materialNo', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请输入物料编号', |
| | | rules: [{ required: true, message: '物料编号不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '物料名称', |
| | |
| | | placeholder: '请输入物料名称', |
| | | }, |
| | | { |
| | | label: '物料件号', |
| | | prop: 'materialNo', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请输入物料件号', |
| | | rules: [{ required: true, message: '物料件号不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '型号', |
| | | prop: 'materialModel', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请输入型号', |
| | | }, |
| | | { |
| | | label: '批次号', |
| | | prop: 'materialBatch', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请输入批次号', |
| | | rules: [{ required: true, message: '批次号不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '单据类型', |
| | | prop: 'orderType', |
| | | el: 'select', |
| | | disabled: disabled, |
| | | placeholder: '请输入单据类型', |
| | | rules: [{ required: true, message: '单据类型不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '操作类型', |
| | | prop: 'stockType', |
| | | el: 'select', |
| | | disabled: disabled, |
| | | placeholder: '请输入操作类型', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '操作类型不能为空', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '单据数量', |
| | |
| | | placeholder: '请输入单据数量', |
| | | rules: [{ required: true, message: '单据数量不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '下发数量', |
| | | prop: 'distributeNumber', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | disabled: disabled, |
| | | placeholder: '请输入下发数量', |
| | | rules: [{ required: true, message: '下发数量不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '完成数量', |
| | | prop: 'completeNumber', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | disabled: disabled, |
| | | placeholder: '请输入完成数量', |
| | | rules: [{ required: true, message: '完成数量不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '优先级', |
| | | prop: 'priority', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入优先级', |
| | | rules: [{ required: true, message: '优先级不能为空', trigger: 'blur' }], |
| | | }, |
| | | // { |
| | | // label: '下发数量', |
| | | // prop: 'distributeNumber', |
| | | // el: (props: any, { attrs }: SetupContext) => { |
| | | // return h(inputNumber, { |
| | | // ...props, |
| | | // clearable: true, |
| | | // ...attrs, |
| | | // }) |
| | | // }, |
| | | // width: '100%', |
| | | // step: 1, |
| | | // precision: 0, |
| | | // disabled: disabled, |
| | | // placeholder: '请输入下发数量', |
| | | // rules: [{ required: true, message: '下发数量不能为空', trigger: 'blur' }], |
| | | // }, |
| | | // { |
| | | // label: '完成数量', |
| | | // prop: 'completeNumber', |
| | | // el: (props: any, { attrs }: SetupContext) => { |
| | | // return h(inputNumber, { |
| | | // ...props, |
| | | // clearable: true, |
| | | // ...attrs, |
| | | // }) |
| | | // }, |
| | | // width: '100%', |
| | | // step: 1, |
| | | // precision: 0, |
| | | // disabled: disabled, |
| | | // placeholder: '请输入完成数量', |
| | | // rules: [{ required: true, message: '完成数量不能为空', trigger: 'blur' }], |
| | | // }, |
| | | // { |
| | | // label: '优先级', |
| | | // prop: 'priority', |
| | | // el: (props: any, { attrs }: SetupContext) => { |
| | | // return h(inputNumber, { |
| | | // ...props, |
| | | // clearable: true, |
| | | // ...attrs, |
| | | // }) |
| | | // }, |
| | | // width: '100%', |
| | | // step: 1, |
| | | // precision: 0, |
| | | // //disabled: disabled, |
| | | // placeholder: '请输入优先级', |
| | | // rules: [{ required: true, message: '优先级不能为空', trigger: 'blur' }], |
| | | // }, |
| | | { |
| | | label: '关联计划编号', |
| | | prop: 'planNo', |
| | |
| | | disabled: disabled, |
| | | placeholder: '请输入关联计划编号', |
| | | }, |
| | | { |
| | | label: '操作时间', |
| | | prop: 'operateTime', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(dateTimePicker, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | //disabled: disabled, |
| | | placeholder: '请输入操作时间', |
| | | }, |
| | | // { |
| | | // label: '操作时间', |
| | | // prop: 'operateTime', |
| | | // el: (props: any, { attrs }: SetupContext) => { |
| | | // return h(dateTimePicker, { |
| | | // ...props, |
| | | // clearable: true, |
| | | // ...attrs, |
| | | // }) |
| | | // }, |
| | | // width: '100%', |
| | | // //disabled: disabled, |
| | | // placeholder: '请输入操作时间', |
| | | // }, |
| | | { |
| | | label: '备注', |
| | | prop: 'remark', |
| | |
| | | import { ref, onMounted, reactive, Ref, nextTick, computed } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsInOutStockRecord } from '../Models/WmsInOutStockRecord' |
| | | import { ElMessage } from 'element-plus' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { useFile } from './File' |
| | | |
| | | interface CurrentType { |
| | | row: any |
| | | index: number |
| | | } |
| | | export const useWmsInOutStockRecord = (props: any, ctx?: any) => { |
| | | const wmsInOutStockRecord = injectModel<WmsInOutStockRecord>('wmsInOutStockRecord') |
| | | const { exportFile } = useFile() |
| | | /** |
| | | * 头部配置 |
| | | */ |
| | | const headers = ref({}) |
| | | /** |
| | | * 动态列配置 |
| | | */ |
| | | const wmsInOutStockRecordColumns = ref<Record<string, any>>([]) |
| | | /** |
| | | * 搜索值 |
| | | */ |
| | | const search = ref('') |
| | | |
| | | /** |
| | | * 排序 |
| | | */ |
| | | const sort = ref(0) |
| | | /** |
| | | * 选择项 |
| | | */ |
| | | const selection = ref([]) |
| | | /** |
| | | * 当前选中的行 |
| | | */ |
| | | const current = ref<any>(null) |
| | | /** |
| | | * 数据源 |
| | | */ |
| | | const dataSource: Ref<any[]> = ref([]) |
| | | |
| | | /** |
| | | * 表格 |
| | | */ |
| | | const tableRef = ref() |
| | | const dialogConfig = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | isAdd: false, |
| | | }) |
| | | const dialogConfigForQuery = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | isAdd: false, |
| | | }) |
| | | |
| | | |
| | | const dialogSettingConfig = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | }) |
| | | |
| | | /** |
| | | * 分页数据 |
| | | */ |
| | | const paginationParams = ref({}) |
| | | |
| | | /** |
| | | * 打开详情 |
| | | * @param row |
| | | */ |
| | | const openDetail = (row: any) => { |
| | | current.value = row |
| | | dialogConfig.visible = true |
| | | dialogConfig.title = row.name |
| | | dialogConfig.isAdd = false |
| | | sort.value = row.sort |
| | | } |
| | | |
| | | const contextMenu = [ |
| | | { |
| | | label: '展开详情', |
| | | fn: (c: CurrentType) => { |
| | | current.value = null |
| | | sort.value = c.row.sort |
| | | nextTick(() => openDetail(c.row)) |
| | | }, |
| | | divided: true, |
| | | icon: 'o', |
| | | }, |
| | | // { |
| | | // label: '向上添加', |
| | | // fn: (c: CurrentType, pageNum: number) => { |
| | | // current.value = null |
| | | // sort.value = c.index + 1 + (pageNum - 1) * 50 |
| | | // dialogConfig.visible = true |
| | | // dialogConfig.title = '添加' |
| | | // dialogConfig.isAdd = false |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'up', |
| | | // }, |
| | | // { |
| | | // label: '向下添加', |
| | | // fn: (c: CurrentType, pageNum: number) => { |
| | | // current.value = null |
| | | // sort.value = c.index + 2 + (pageNum - 1) * 50 |
| | | // dialogConfig.visible = true |
| | | // dialogConfig.title = '添加' |
| | | // dialogConfig.isAdd = false |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'down', |
| | | // }, |
| | | // { |
| | | // label: '创建副本', |
| | | // fn: async ({ row }: CurrentType) => { |
| | | // await wmsInOutStockRecord.cloneData([row.id]) |
| | | // ElMessage.success('创建副本成功') |
| | | // tableRef.value?.getList() |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'copy', |
| | | // }, |
| | | { |
| | | label: '删除', |
| | | fn: async (c: CurrentType) => { |
| | | const names = selection.value.map((item: { id: string }) => item.id) |
| | | ConfirmBox( |
| | | `是否删除${names.length ? names.join(',') : c.row.id}` |
| | | ).then(async () => { |
| | | const ids = selection.value.map((item: { id: string }) => item.id) |
| | | await wmsInOutStockRecord.deleteWmsInOutStockRecords(ids.length ? ids : [c.row.id]) |
| | | ElMessage.success('删除成功') |
| | | tableRef.value.getList() |
| | | }) |
| | | }, |
| | | icon: 'close', |
| | | }, |
| | | ] |
| | | |
| | | const onCheck = (records: any) => { |
| | | selection.value = records |
| | | } |
| | | |
| | | const onAddWmsInOutStockRecord = () => { |
| | | const params = tableRef.value?.getPaginationParams() |
| | | current.value = null |
| | | dialogConfig.visible = true |
| | | dialogConfig.isAdd = true |
| | | dialogConfig.title = '添加' |
| | | sort.value = params.totalCount + 1 |
| | | } |
| | | |
| | | //点击按钮【高级查询】 |
| | | const onAdvancedQuery = () => { |
| | | const params = tableRef.value?.getPaginationParams() |
| | | current.value = null |
| | | dialogConfigForQuery.visible = true |
| | | dialogConfigForQuery.isAdd = true |
| | | dialogConfigForQuery.title = '高级查询' |
| | | } |
| | | |
| | | const onConfirmWmsInOutStockRecord = async () => { |
| | | dialogConfig.visible = false |
| | | if (dialogConfig.isAdd) { |
| | | tableRef.value?.scrollToRow({ |
| | | skip: true, |
| | | }) |
| | | } else { |
| | | await tableRef.value?.getList() |
| | | } |
| | | } |
| | | /** |
| | | * 行点击时更新current |
| | | */ |
| | | const onRowClick = ({ row }: any) => { |
| | | if (dialogConfig.visible && current.value) { |
| | | current.value = row |
| | | } |
| | | } |
| | | /** |
| | | * 导出 |
| | | */ |
| | | const onExport = (data={}) => { |
| | | //const params = tableRef.value?.getParams() |
| | | exportFile('/api/v1/HIAWms/wmsInOutStockRecord/export', data, 'wmsInOutStockRecord') |
| | | } |
| | | |
| | | /** |
| | | * 关键字搜索 |
| | | */ |
| | | const onSearch = () => { |
| | | tableRef.value?.getList({ |
| | | Filter: search.value, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 重置表格数据 |
| | | */ |
| | | const reloadList = () => { |
| | | tableRef.value?.getList() |
| | | } |
| | | /** |
| | | * 上传成功 |
| | | */ |
| | | const onSuccess = () => { |
| | | tableRef.value?.getList() |
| | | ElMessage.success('导入成功') |
| | | } |
| | | /** |
| | | * 失败 |
| | | * @param err |
| | | */ |
| | | const onError = (err: any) => { |
| | | try { |
| | | const message = JSON.parse(err.message) |
| | | ElMessage.error(message.msg) |
| | | } catch (error) { |
| | | ElMessage.error('导入失败') |
| | | } |
| | | } |
| | | /** |
| | | * 上传钩子 |
| | | */ |
| | | const onBeforeUpload = (file: File) => { |
| | | const format = ['xlsx', 'xls', 'csv'] |
| | | if (!format.includes(file.name.split('.')[1])) { |
| | | ElMessage.error('导入文件格式不正确,请导入.xlsx/.xls与.csv格式的文件') |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | onMounted(() => { |
| | | headers.value = { |
| | | Authorization: `Bearer ${sessionStorage.getItem('Token')}`, |
| | | 'X-Project': sessionStorage.getItem('X-Project'), |
| | | } |
| | | }) |
| | | |
| | | ctx.expose({ |
| | | reloadList, |
| | | }) |
| | | |
| | | return { |
| | | dataSource, |
| | | contextMenu, |
| | | dialogConfig, |
| | | dialogConfigForQuery, |
| | | dialogSettingConfig, |
| | | tableRef, |
| | | current, |
| | | search, |
| | | sort, |
| | | wmsInOutStockRecordColumns, |
| | | paginationParams, |
| | | headers, |
| | | onBeforeUpload, |
| | | onError, |
| | | onSuccess, |
| | | openDetail, |
| | | onSearch, |
| | | onExport, |
| | | onRowClick, |
| | | onConfirmWmsInOutStockRecord, |
| | | onCheck, |
| | | onAddWmsInOutStockRecord, |
| | | onAdvancedQuery |
| | | } |
| | | } |
| | | import { ref, onMounted, reactive, Ref, nextTick, computed } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsInOutStockRecord } from '../Models/WmsInOutStockRecord' |
| | | import { ElMessage } from 'element-plus' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { useFile } from './File' |
| | | |
| | | interface CurrentType { |
| | | row: any |
| | | index: number |
| | | } |
| | | export const useWmsInOutStockRecord = (props: any, ctx?: any) => { |
| | | const wmsInOutStockRecord = injectModel<WmsInOutStockRecord>( |
| | | 'wmsInOutStockRecord' |
| | | ) |
| | | const { exportFile } = useFile() |
| | | /** |
| | | * 头部配置 |
| | | */ |
| | | const headers = ref({}) |
| | | /** |
| | | * 动态列配置 |
| | | */ |
| | | const wmsInOutStockRecordColumns = ref<Record<string, any>>([]) |
| | | /** |
| | | * 搜索值 |
| | | */ |
| | | const search = ref('') |
| | | |
| | | /** |
| | | * 排序 |
| | | */ |
| | | const sort = ref(0) |
| | | /** |
| | | * 选择项 |
| | | */ |
| | | const selection = ref([]) |
| | | /** |
| | | * 当前选中的行 |
| | | */ |
| | | const current = ref<any>(null) |
| | | /** |
| | | * 数据源 |
| | | */ |
| | | const dataSource: Ref<any[]> = ref([]) |
| | | |
| | | /** |
| | | * 表格 |
| | | */ |
| | | const tableRef = ref() |
| | | const dialogConfig = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | isAdd: false, |
| | | }) |
| | | const dialogConfigForQuery = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | isAdd: false, |
| | | }) |
| | | |
| | | const dialogSettingConfig = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | }) |
| | | |
| | | /** |
| | | * 分页数据 |
| | | */ |
| | | const paginationParams = ref({}) |
| | | |
| | | /** |
| | | * 打开详情 |
| | | * @param row |
| | | */ |
| | | const openDetail = (row: any) => { |
| | | current.value = row |
| | | dialogConfig.visible = true |
| | | dialogConfig.title = row.name |
| | | dialogConfig.isAdd = false |
| | | sort.value = row.sort |
| | | } |
| | | |
| | | const contextMenu = [ |
| | | // { |
| | | // label: '展开详情', |
| | | // fn: (c: CurrentType) => { |
| | | // current.value = null |
| | | // sort.value = c.row.sort |
| | | // nextTick(() => openDetail(c.row)) |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'o', |
| | | // }, |
| | | // { |
| | | // label: '向上添加', |
| | | // fn: (c: CurrentType, pageNum: number) => { |
| | | // current.value = null |
| | | // sort.value = c.index + 1 + (pageNum - 1) * 50 |
| | | // dialogConfig.visible = true |
| | | // dialogConfig.title = '添加' |
| | | // dialogConfig.isAdd = false |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'up', |
| | | // }, |
| | | // { |
| | | // label: '向下添加', |
| | | // fn: (c: CurrentType, pageNum: number) => { |
| | | // current.value = null |
| | | // sort.value = c.index + 2 + (pageNum - 1) * 50 |
| | | // dialogConfig.visible = true |
| | | // dialogConfig.title = '添加' |
| | | // dialogConfig.isAdd = false |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'down', |
| | | // }, |
| | | // { |
| | | // label: '创建副本', |
| | | // fn: async ({ row }: CurrentType) => { |
| | | // await wmsInOutStockRecord.cloneData([row.id]) |
| | | // ElMessage.success('创建副本成功') |
| | | // tableRef.value?.getList() |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'copy', |
| | | // }, |
| | | { |
| | | label: '删除', |
| | | fn: async (c: CurrentType) => { |
| | | const names = selection.value.map((item: { id: string }) => item.id) |
| | | ConfirmBox(`是否删除${names.length ? names.join(',') : c.row.id}`).then( |
| | | async () => { |
| | | const ids = selection.value.map((item: { id: string }) => item.id) |
| | | await wmsInOutStockRecord.deleteWmsInOutStockRecords( |
| | | ids.length ? ids : [c.row.id] |
| | | ) |
| | | ElMessage.success('删除成功') |
| | | tableRef.value.getList() |
| | | } |
| | | ) |
| | | }, |
| | | icon: 'close', |
| | | }, |
| | | ] |
| | | |
| | | const onCheck = (records: any) => { |
| | | selection.value = records |
| | | } |
| | | |
| | | const onAddWmsInOutStockRecord = () => { |
| | | const params = tableRef.value?.getPaginationParams() |
| | | current.value = null |
| | | dialogConfig.visible = true |
| | | dialogConfig.isAdd = true |
| | | dialogConfig.title = '添加' |
| | | sort.value = params.totalCount + 1 |
| | | } |
| | | |
| | | //点击按钮【高级查询】 |
| | | const onAdvancedQuery = () => { |
| | | const params = tableRef.value?.getPaginationParams() |
| | | current.value = null |
| | | dialogConfigForQuery.visible = true |
| | | dialogConfigForQuery.isAdd = true |
| | | dialogConfigForQuery.title = '高级查询' |
| | | } |
| | | |
| | | const onConfirmWmsInOutStockRecord = async () => { |
| | | dialogConfig.visible = false |
| | | if (dialogConfig.isAdd) { |
| | | tableRef.value?.scrollToRow({ |
| | | skip: true, |
| | | }) |
| | | } else { |
| | | await tableRef.value?.getList() |
| | | } |
| | | } |
| | | /** |
| | | * 行点击时更新current |
| | | */ |
| | | const onRowClick = ({ row }: any) => { |
| | | if (dialogConfig.visible && current.value) { |
| | | current.value = row |
| | | } |
| | | } |
| | | /** |
| | | * 导出 |
| | | */ |
| | | const onExport = (data = {}) => { |
| | | //const params = tableRef.value?.getParams() |
| | | exportFile( |
| | | '/api/v1/HIAWms/wmsInOutStockRecord/export', |
| | | data, |
| | | 'wmsInOutStockRecord' |
| | | ) |
| | | } |
| | | |
| | | /** |
| | | * 关键字搜索 |
| | | */ |
| | | const onSearch = () => { |
| | | tableRef.value?.getList({ |
| | | Filter: search.value, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 重置表格数据 |
| | | */ |
| | | const reloadList = () => { |
| | | tableRef.value?.getList() |
| | | } |
| | | /** |
| | | * 上传成功 |
| | | */ |
| | | const onSuccess = () => { |
| | | tableRef.value?.getList() |
| | | ElMessage.success('导入成功') |
| | | } |
| | | /** |
| | | * 失败 |
| | | * @param err |
| | | */ |
| | | const onError = (err: any) => { |
| | | try { |
| | | const message = JSON.parse(err.message) |
| | | ElMessage.error(message.msg) |
| | | } catch (error) { |
| | | ElMessage.error('导入失败') |
| | | } |
| | | } |
| | | /** |
| | | * 上传钩子 |
| | | */ |
| | | const onBeforeUpload = (file: File) => { |
| | | const format = ['xlsx', 'xls', 'csv'] |
| | | if (!format.includes(file.name.split('.')[1])) { |
| | | ElMessage.error('导入文件格式不正确,请导入.xlsx/.xls与.csv格式的文件') |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | onMounted(() => { |
| | | headers.value = { |
| | | Authorization: `Bearer ${sessionStorage.getItem('Token')}`, |
| | | 'X-Project': sessionStorage.getItem('X-Project'), |
| | | } |
| | | }) |
| | | |
| | | ctx.expose({ |
| | | reloadList, |
| | | }) |
| | | |
| | | return { |
| | | dataSource, |
| | | contextMenu, |
| | | dialogConfig, |
| | | dialogConfigForQuery, |
| | | dialogSettingConfig, |
| | | tableRef, |
| | | current, |
| | | search, |
| | | sort, |
| | | wmsInOutStockRecordColumns, |
| | | paginationParams, |
| | | headers, |
| | | onBeforeUpload, |
| | | onError, |
| | | onSuccess, |
| | | openDetail, |
| | | onSearch, |
| | | onExport, |
| | | onRowClick, |
| | | onConfirmWmsInOutStockRecord, |
| | | onCheck, |
| | | onAddWmsInOutStockRecord, |
| | | onAdvancedQuery, |
| | | } |
| | | } |
| | |
| | | [styles.wmsMaterialContainerList]: true, |
| | | }} |
| | | > |
| | | <BaseTable |
| | | {/* <BaseTable |
| | | ref={tableRef} |
| | | url={url} |
| | | sortUrlTpl="/api/v1/HIAWms/wmsMaterialContainer/{id}/adjustsort/{sort}" |
| | |
| | | ) |
| | | }, |
| | | }} |
| | | ></BaseTable> |
| | | ></BaseTable> */} |
| | | <ElForm> |
| | | <ElFormItem label="物料码"> |
| | | <ElInput |
| | | v-model={queryForm.value.searchVal} |
| | | placeholder="请输入" |
| | | clearable |
| | | class={styles.formItem} |
| | | /> |
| | | </ElFormItem> |
| | | <ElFormItem label="库位号"> |
| | | <ElInput |
| | | v-model={queryForm.value.searchVal} |
| | | placeholder="请输入" |
| | | clearable |
| | | class={styles.formItem} |
| | | /> |
| | | </ElFormItem> |
| | | <ElFormItem label="数量"> |
| | | <ElInput |
| | | v-model={queryForm.value.searchVal} |
| | | placeholder="请输入" |
| | | clearable |
| | | class={styles.formItem} |
| | | /> |
| | | </ElFormItem> |
| | | </ElForm> |
| | | </div> |
| | | ) |
| | | } |
| | |
| | | return () => { |
| | | return ( |
| | | <div class={styles.wmsMaterialContainerContent}> |
| | | <ElForm> |
| | | <ElFormItem label="关键字"> |
| | | <ElInput |
| | | v-model={queryForm.value.searchVal} |
| | | placeholder="请输入" |
| | | clearable |
| | | class={styles.formItem} |
| | | /> |
| | | </ElFormItem> |
| | | </ElForm> |
| | | {/* 添加/编辑 */} |
| | | <WmsMaterialContainerDrawer |
| | | {/* <WmsMaterialContainerDrawer |
| | | v-model={dialogConfig.visible} |
| | | title={dialogConfig.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirm={onConfirmWmsMaterialContainer} |
| | | /> |
| | | /> */} |
| | | {/* 高级查询 */} |
| | | <WmsMaterialContainerQueryDrawer |
| | | {/* <WmsMaterialContainerQueryDrawer |
| | | ref="wmsMaterialContainerQueryDrawerRef" |
| | | v-model={dialogConfigForQuery.visible} |
| | | title={dialogConfigForQuery.title} |
| | |
| | | onConfirmQuery={handleQuery} |
| | | onRestQuery={resetQuery} |
| | | onClose={closeQuery} |
| | | /> |
| | | /> */} |
| | | |
| | | <div class={styles.headerContent}> |
| | | {/* <div class={styles.headerContent}> |
| | | <div class={styles.header}> |
| | | <IconButton |
| | | v-permission="wmsMaterialContainer-add" |
| | |
| | | <el-divider direction="vertical" /> |
| | | |
| | | <el-divider direction="vertical" /> |
| | | {/* <el-upload |
| | | <el-upload |
| | | v-permission="wmsMaterialContainer-import" |
| | | name="file" |
| | | accept=".xlsx,.xls,.csv" |
| | |
| | | onClick={handleExport} |
| | | > |
| | | 导出 |
| | | </IconButton> */} |
| | | </IconButton> |
| | | </div> |
| | | <ElFormItem style={{ marginTop: '15px' }}> |
| | | <ElFormItem label="关键字"> |
| | |
| | | > |
| | | 查询 |
| | | </IconButton> |
| | | {/* <IconButton style="" icon="refresh" onClick={resetQuery}> |
| | | 重置 |
| | | </IconButton> */} |
| | | |
| | | <IconButton |
| | | v-permission="wmsMaterialContainer-add" |
| | | icon="search" |
| | |
| | | dataSource={dataSource} |
| | | isChecked={true} |
| | | isDrag={true} |
| | | /> |
| | | /> */} |
| | | </div> |
| | | ) |
| | | } |
| | |
| | | prop: 'materialName', |
| | | el: 'input', |
| | | placeholder: '请输入物料名称', |
| | | rules: [ |
| | | { required: true, message: '物料名称不能为空', trigger: 'blur' }, |
| | | { max: 100, message: '长度不能超过100个字符', trigger: 'blur' }, |
| | | ], |
| | | }, |
| | | // 容器信息 |
| | | { |
| | |
| | | formData.value = { |
| | | isLock: 0, |
| | | emptyContainer: 0, |
| | | checkStatus: 2, |
| | | inStockTime: new Date(), |
| | | } |
| | | updateCheckData() |
| | |
| | | placeholder: '请输入来源单据号', |
| | | }, |
| | | { |
| | | label: '下个任务是否生成成功', |
| | | label: '下个任务是否生成', |
| | | prop: 'isNextTask', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared; |
| | | using CmsQueryExtensions; |
| | | using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder; |
| | | using CmsQueryExtensions.Extension; |
| | | using System.Linq.Expressions; |
| | | using Volo.Abp; |
| | | using Volo.Abp.Application.Dtos; |
| | | using Volo.Abp.Data; |
| | | using Volo.Abp.ObjectExtending; |
| | | using Volo.Abp.ObjectMapping; |
| | | |
| | | namespace CMS.Plugin.HIAWms.Application.Implements; |
| | | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared; |
| | | using CmsQueryExtensions; |
| | | using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder; |
| | | using CmsQueryExtensions.Extension; |
| | | using System.Linq.Expressions; |
| | | using Volo.Abp; |
| | | using Volo.Abp.Application.Dtos; |
| | | using Volo.Abp.Data; |
| | | using Volo.Abp.ObjectExtending; |
| | | using Volo.Abp.ObjectMapping; |
| | | using CMS.Plugin.HIAWms.Domain.WmsMaterials; |
| | | |
| | | namespace CMS.Plugin.HIAWms.Application.Implements; |
| | | |
| | | /// <summary> |
| | | /// 出入库单据应用服务 |
| | | /// </summary> |
| | | public class WmsInOutStockOrderAppService : CMSPluginAppService, IWmsInOutStockOrderAppService |
| | | { |
| | | private readonly IWmsInOutStockOrderRepository wmsInOutStockOrderRepository; |
| | | |
| | | public class WmsInOutStockOrderAppService : CMSPluginAppService, IWmsInOutStockOrderAppService |
| | | { |
| | | private readonly IWmsInOutStockOrderRepository wmsInOutStockOrderRepository; |
| | | private readonly IWmsMaterialRepository _wmsMaterialRepository; |
| | | |
| | | /// <summary> |
| | | /// Initializes a new instance of the <see cref="WmsInOutStockOrderAppService"/> class. |
| | | /// </summary> |
| | | /// <param name="WmsInOutStockOrderRepository">The task job repository.</param> |
| | | public WmsInOutStockOrderAppService(IWmsInOutStockOrderRepository _WmsInOutStockOrderRepository) |
| | | { |
| | | wmsInOutStockOrderRepository = _WmsInOutStockOrderRepository; |
| | | } |
| | | |
| | | public WmsInOutStockOrderAppService(IWmsInOutStockOrderRepository _WmsInOutStockOrderRepository, IWmsMaterialRepository wmsMaterialRepository) |
| | | { |
| | | wmsInOutStockOrderRepository = _WmsInOutStockOrderRepository; |
| | | _wmsMaterialRepository = wmsMaterialRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取指定出入库单据 |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<WmsInOutStockOrderDto> GetAsync(Guid id) |
| | | { |
| | | return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(await wmsInOutStockOrderRepository.GetAsync(id)); |
| | | } |
| | | |
| | | public virtual async Task<WmsInOutStockOrderDto> GetAsync(Guid id) |
| | | { |
| | | return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(await wmsInOutStockOrderRepository.GetAsync(id)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分页获取出入库单据 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<PagedResultDto<WmsInOutStockOrderDto>> GetListAsync(GetWmsInOutStockOrderInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WmsInOutStockOrder.Sort); |
| | | } |
| | | |
| | | public virtual async Task<PagedResultDto<WmsInOutStockOrderDto>> GetListAsync(GetWmsInOutStockOrderInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WmsInOutStockOrder.Sort); |
| | | } |
| | | |
| | | #region 动态构造查询条件 |
| | | |
| | | |
| | | //动态构造查询条件 |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var count = await wmsInOutStockOrderRepository.GetCountAsync(whereConditions); |
| | | var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); |
| | | |
| | | return new PagedResultDto<WmsInOutStockOrderDto>(count, ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list)); |
| | | } |
| | | |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var count = await wmsInOutStockOrderRepository.GetCountAsync(whereConditions); |
| | | var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); |
| | | |
| | | return new PagedResultDto<WmsInOutStockOrderDto>(count, ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 动态构造查询条件 |
| | | /// </summary> |
| | | /// <param name="input">输入参数</param> |
| | | /// <returns></returns> |
| | | private FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> DynamicGetQueryParams(GetWmsInOutStockOrderInput input) |
| | | { |
| | | private FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> DynamicGetQueryParams(GetWmsInOutStockOrderInput input) |
| | | { |
| | | //动态构造查询条件 |
| | | var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockOrder, GetWmsInOutStockOrderInput>(input); |
| | | if (!whereConditions.IsSuccess) |
| | | { |
| | | throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg); |
| | | } |
| | | |
| | | var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockOrder, GetWmsInOutStockOrderInput>(input); |
| | | if (!whereConditions.IsSuccess) |
| | | { |
| | | throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg); |
| | | } |
| | | |
| | | //也可再次自定义构建查询条件 |
| | | Expression<Func<WmsInOutStockOrder, bool>> extendExpression = a => a.IsDeleted == false; |
| | | Expression<Func<WmsInOutStockOrder, bool>> extendExpression = a => a.IsDeleted == false; |
| | | // 使用 System.Linq.PredicateBuilder 的 And |
| | | var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockOrder, bool>>)(whereConditions.data); |
| | | whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); |
| | | |
| | | return whereConditions; |
| | | } |
| | | |
| | | var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockOrder, bool>>)(whereConditions.data); |
| | | whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); |
| | | |
| | | return whereConditions; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 新建出入库单据 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public virtual async Task<WmsInOutStockOrderDto> CreateAsync(WmsInOutStockOrderCreateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]); |
| | | } |
| | | |
| | | var maxSort = await wmsInOutStockOrderRepository.GetMaxSortAsync(); |
| | | var sort = input.Sort ?? maxSort; |
| | | |
| | | var insertObj = ObjectMapper.Map<WmsInOutStockOrderCreateDto, WmsInOutStockOrder>(input); |
| | | insertObj.Sort = sort; |
| | | input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | await wmsInOutStockOrderRepository.InsertAsync(insertObj); |
| | | |
| | | public virtual async Task<WmsInOutStockOrderDto> CreateAsync(WmsInOutStockOrderCreateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var material = await _wmsMaterialRepository.FindByNameAsync(input.MaterialNo); |
| | | if (material == null) |
| | | { |
| | | throw new UserFriendlyException("物料信息不存在"); |
| | | } |
| | | |
| | | var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]); |
| | | } |
| | | |
| | | var maxSort = await wmsInOutStockOrderRepository.GetMaxSortAsync(); |
| | | var sort = input.Sort ?? maxSort; |
| | | |
| | | var maxPriority = await wmsInOutStockOrderRepository.GetMaxPriorityAsync(); |
| | | var priority = input.Priority > 0 ? input.Priority : maxPriority; |
| | | |
| | | var insertObj = ObjectMapper.Map<WmsInOutStockOrderCreateDto, WmsInOutStockOrder>(input); |
| | | insertObj.MaterialName = material.MaterialName; |
| | | insertObj.MaterialModel = material.MaterialModel; |
| | | insertObj.OrderStatus = Domain.Shared.Enums.OrderStatusEnum.NoStart; |
| | | |
| | | var type = "RK-"; |
| | | insertObj.StockType = Domain.Shared.Enums.StockTypeEnum.InBound; |
| | | if (input.OrderType == Domain.Shared.Enums.OrderTypeEnum.PRODUCTCALL || input.OrderType == Domain.Shared.Enums.OrderTypeEnum.PERSONOT) |
| | | { |
| | | type = "CK-"; |
| | | insertObj.StockType = Domain.Shared.Enums.StockTypeEnum.OutBound; |
| | | } |
| | | insertObj.OrderNo = type + DateTime.Now.ToString("yyyyMMddHHmmssfff"); |
| | | insertObj.Sort = sort; |
| | | insertObj.Priority = priority; |
| | | input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | await wmsInOutStockOrderRepository.InsertAsync(insertObj); |
| | | |
| | | //if (input.Sort.HasValue && insertObj.Sort != maxSort) |
| | | //{ |
| | | // await AdjustSortAsync(insertObj.Id, insertObj.Sort); |
| | | //} |
| | | |
| | | return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(insertObj); |
| | | } |
| | | |
| | | |
| | | return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(insertObj); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新出入库单据 |
| | | /// </summary> |
| | |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public virtual async Task<WmsInOutStockOrderDto> UpdateAsync(Guid id, WmsInOutStockOrderUpdateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var updateObj = await wmsInOutStockOrderRepository.GetAsync(id); |
| | | var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo, updateObj.Id); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]); |
| | | } |
| | | |
| | | updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); |
| | | input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | updateObj.OrderNo = input.OrderNo; |
| | | public virtual async Task<WmsInOutStockOrderDto> UpdateAsync(Guid id, WmsInOutStockOrderUpdateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var updateObj = await wmsInOutStockOrderRepository.GetAsync(id); |
| | | var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo, updateObj.Id); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]); |
| | | } |
| | | |
| | | updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); |
| | | input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | updateObj.OrderNo = input.OrderNo; |
| | | updateObj.OrderStatus = input.OrderStatus; |
| | | updateObj.MaterialName = input.MaterialName; |
| | | updateObj.MaterialNo = input.MaterialNo; |
| | |
| | | updateObj.OperateTime = input.OperateTime; |
| | | updateObj.Remark = input.Remark; |
| | | updateObj.IsDisabled = input.IsDisabled; |
| | | |
| | | |
| | | await wmsInOutStockOrderRepository.UpdateAsync(updateObj); |
| | | |
| | | return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(updateObj); |
| | | } |
| | | |
| | | |
| | | |
| | | await wmsInOutStockOrderRepository.UpdateAsync(updateObj); |
| | | |
| | | return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(updateObj); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 克隆出入库单据 |
| | | /// </summary> |
| | | /// <param name="ids"></param> |
| | | /// <returns></returns> |
| | | public async Task<List<WmsInOutStockOrderDto>> CloneAsync(IEnumerable<Guid> ids) |
| | | { |
| | | public async Task<List<WmsInOutStockOrderDto>> CloneAsync(IEnumerable<Guid> ids) |
| | | { |
| | | //var wmsInOutStockOrders = new List<WmsInOutStockOrder>(); |
| | | //if (ids != null) |
| | | //{ |
| | |
| | | // name += WmsInOutStockOrderConsts.CloneTag; |
| | | // continue; |
| | | // } |
| | | |
| | | |
| | | // notExist = true; |
| | | // } |
| | | |
| | | |
| | | // //WmsInOutStockOrder = await wmsInOutStockOrderRepository.InsertAsync(WmsInOutStockOrder.Clone(GuidGenerator.Create(), name, sort++)); |
| | | // wmsInOutStockOrders.Add(WmsInOutStockOrder); |
| | | // } |
| | | // } |
| | | //} |
| | | |
| | | |
| | | //return ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(wmsInOutStockOrders); |
| | | return new List<WmsInOutStockOrderDto>(); |
| | | } |
| | | |
| | | return new List<WmsInOutStockOrderDto>(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除单个出入库单据 |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | public virtual Task DeleteAsync(Guid id) |
| | | { |
| | | return wmsInOutStockOrderRepository.DeleteAsync(id); |
| | | } |
| | | |
| | | public virtual async Task DeleteAsync(Guid id) |
| | | { |
| | | var order = await wmsInOutStockOrderRepository.GetAsync(id); |
| | | if(order != null && order.OrderStatus != Domain.Shared.Enums.OrderStatusEnum.NoStart) |
| | | { |
| | | throw new UserFriendlyException("只能删除未开始的单据"); |
| | | } |
| | | await wmsInOutStockOrderRepository.DeleteAsync(id); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除多个出入库单据 |
| | | /// </summary> |
| | | /// <param name="ids"></param> |
| | | /// <returns></returns> |
| | | public async Task DeleteManyAsync(IEnumerable<Guid> ids) |
| | | { |
| | | foreach (var id in ids) |
| | | { |
| | | await DeleteAsync(id); |
| | | } |
| | | } |
| | | |
| | | public async Task DeleteManyAsync(IEnumerable<Guid> ids) |
| | | { |
| | | foreach (var id in ids) |
| | | { |
| | | await DeleteAsync(id); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调整排序出入库单据 |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <param name="sort"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task AdjustSortAsync(Guid id, int sort) |
| | | { |
| | | var list = await wmsInOutStockOrderRepository.GetListAsync(null, nameof(WmsInOutStockOrder.Sort)); |
| | | if (list != null && list.Any()) |
| | | { |
| | | var initSort = 1; |
| | | list.ForEach(x => x.AdjustSort(initSort++)); |
| | | var entity = list.FirstOrDefault(x => x.Id == id); |
| | | if (entity != null) |
| | | { |
| | | if (sort == 1) |
| | | { |
| | | list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | } |
| | | else if (entity.Sort > sort) |
| | | { |
| | | list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | } |
| | | else if (entity.Sort < sort) |
| | | { |
| | | list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | } |
| | | |
| | | entity.AdjustSort(sort); |
| | | } |
| | | } |
| | | |
| | | await wmsInOutStockOrderRepository.UpdateManyAsync(list); |
| | | } |
| | | |
| | | public virtual async Task AdjustSortAsync(Guid id, int sort) |
| | | { |
| | | var list = await wmsInOutStockOrderRepository.GetListAsync(null, nameof(WmsInOutStockOrder.Sort)); |
| | | if (list != null && list.Any()) |
| | | { |
| | | var initSort = 1; |
| | | list.ForEach(x => x.AdjustSort(initSort++)); |
| | | var entity = list.FirstOrDefault(x => x.Id == id); |
| | | if (entity != null) |
| | | { |
| | | if (sort == 1) |
| | | { |
| | | list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | } |
| | | else if (entity.Sort > sort) |
| | | { |
| | | list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | } |
| | | else if (entity.Sort < sort) |
| | | { |
| | | list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | } |
| | | |
| | | entity.AdjustSort(sort); |
| | | } |
| | | } |
| | | |
| | | await wmsInOutStockOrderRepository.UpdateManyAsync(list); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导入出入库单据 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public async Task ImportAsync(WmsInOutStockOrdersImportModel input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | var wmsInOutStockOrderCreateDtos = new List<(int RowIndex, WmsInOutStockOrderCreateDto Item)>(); |
| | | var wmsInOutStockOrderUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockOrderUpdateDto Item)>(); |
| | | var importItems = input.WmsInOutStockOrders; |
| | | |
| | | if (importItems != null && importItems.Any()) |
| | | { |
| | | public async Task ImportAsync(WmsInOutStockOrdersImportModel input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | var wmsInOutStockOrderCreateDtos = new List<(int RowIndex, WmsInOutStockOrderCreateDto Item)>(); |
| | | var wmsInOutStockOrderUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockOrderUpdateDto Item)>(); |
| | | var importItems = input.WmsInOutStockOrders; |
| | | |
| | | if (importItems != null && importItems.Any()) |
| | | { |
| | | #region 导入校验 |
| | | |
| | | |
| | | // 判断名称是否重复,并输出第几行重复 |
| | | var duplicateWmsInOutStockOrders = importItems.GroupBy(x => x.OrderNo).Where(x => x.Count() > 1).ToList(); |
| | | if (duplicateWmsInOutStockOrders?.Any() == true) |
| | | { |
| | | var duplicateWmsInOutStockOrderMsgs = duplicateWmsInOutStockOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); |
| | | var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockOrderMsgs)},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | foreach (var impItem in importItems) |
| | | { |
| | | if (impItem.OrderNo.IsNullOrWhiteSpace()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (impItem.OrderNo.IsNullOrWhiteSpace()) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockOrder名称不能为空"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | var oldWmsInOutStockOrder = await wmsInOutStockOrderRepository.FindByNameAsync(impItem.OrderNo); |
| | | if (oldWmsInOutStockOrder != null) |
| | | { |
| | | var wmsInOutStockOrderUpdateDto = new WmsInOutStockOrderUpdateDto |
| | | { |
| | | var duplicateWmsInOutStockOrders = importItems.GroupBy(x => x.OrderNo).Where(x => x.Count() > 1).ToList(); |
| | | if (duplicateWmsInOutStockOrders?.Any() == true) |
| | | { |
| | | var duplicateWmsInOutStockOrderMsgs = duplicateWmsInOutStockOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); |
| | | var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockOrderMsgs)},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | foreach (var impItem in importItems) |
| | | { |
| | | if (impItem.OrderNo.IsNullOrWhiteSpace()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (impItem.OrderNo.IsNullOrWhiteSpace()) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockOrder名称不能为空"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | var oldWmsInOutStockOrder = await wmsInOutStockOrderRepository.FindByNameAsync(impItem.OrderNo); |
| | | if (oldWmsInOutStockOrder != null) |
| | | { |
| | | var wmsInOutStockOrderUpdateDto = new WmsInOutStockOrderUpdateDto |
| | | { |
| | | OrderNo = impItem.OrderNo, |
| | | OrderStatus = impItem.OrderStatus, |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | MaterialBatch = impItem.MaterialBatch, |
| | | OrderType = impItem.OrderType, |
| | | StockType = impItem.StockType, |
| | | MaterialNumber = impItem.MaterialNumber, |
| | | DistributeNumber = impItem.DistributeNumber, |
| | | CompleteNumber = impItem.CompleteNumber, |
| | | Priority = impItem.Priority, |
| | | PlanNo = impItem.PlanNo, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockOrderUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockOrder.Id, wmsInOutStockOrderUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsInOutStockOrderCreateDto = new WmsInOutStockOrderCreateDto |
| | | { |
| | | OrderStatus = impItem.OrderStatus, |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | MaterialBatch = impItem.MaterialBatch, |
| | | OrderType = impItem.OrderType, |
| | | StockType = impItem.StockType, |
| | | MaterialNumber = impItem.MaterialNumber, |
| | | DistributeNumber = impItem.DistributeNumber, |
| | | CompleteNumber = impItem.CompleteNumber, |
| | | Priority = impItem.Priority, |
| | | PlanNo = impItem.PlanNo, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockOrderUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockOrder.Id, wmsInOutStockOrderUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsInOutStockOrderCreateDto = new WmsInOutStockOrderCreateDto |
| | | { |
| | | OrderNo = impItem.OrderNo, |
| | | OrderStatus = impItem.OrderStatus, |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | MaterialBatch = impItem.MaterialBatch, |
| | | OrderType = impItem.OrderType, |
| | | StockType = impItem.StockType, |
| | | MaterialNumber = impItem.MaterialNumber, |
| | | DistributeNumber = impItem.DistributeNumber, |
| | | CompleteNumber = impItem.CompleteNumber, |
| | | Priority = impItem.Priority, |
| | | PlanNo = impItem.PlanNo, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockOrderCreateDtos.Add((impItem.RowIndex, wmsInOutStockOrderCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | OrderStatus = impItem.OrderStatus, |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | MaterialBatch = impItem.MaterialBatch, |
| | | OrderType = impItem.OrderType, |
| | | StockType = impItem.StockType, |
| | | MaterialNumber = impItem.MaterialNumber, |
| | | DistributeNumber = impItem.DistributeNumber, |
| | | CompleteNumber = impItem.CompleteNumber, |
| | | Priority = impItem.Priority, |
| | | PlanNo = impItem.PlanNo, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockOrderCreateDtos.Add((impItem.RowIndex, wmsInOutStockOrderCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 新增 |
| | | foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderCreateDtos) |
| | | { |
| | | try |
| | | { |
| | | await CreateAsync(wmsInOutStockOrderDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | |
| | | foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderCreateDtos) |
| | | { |
| | | try |
| | | { |
| | | await CreateAsync(wmsInOutStockOrderDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | |
| | | // 更新 |
| | | foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderUpdateDtos) |
| | | { |
| | | try |
| | | { |
| | | await UpdateAsync(wmsInOutStockOrderDto.Id, wmsInOutStockOrderDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderUpdateDtos) |
| | | { |
| | | try |
| | | { |
| | | await UpdateAsync(wmsInOutStockOrderDto.Id, wmsInOutStockOrderDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导出出入库单据 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WmsInOutStockOrder.Sort); |
| | | } |
| | | |
| | | public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WmsInOutStockOrder.Sort); |
| | | } |
| | | |
| | | #region 动态构造查询条件 |
| | | |
| | | |
| | | //动态构造查询条件 |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); |
| | | var result = ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list); |
| | | |
| | | var sheets = new Dictionary<string, object> |
| | | { |
| | | ["配置"] = ExportHelper.ConvertListToExportData(result), |
| | | }; |
| | | |
| | | var fileName = result.Count > 1 ? "出入库单据列表" : result.Count == 1 ? result[0]?.OrderNo : "WmsInOutStockOrder模版"; |
| | | return (sheets, fileName); |
| | | } |
| | | |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); |
| | | var result = ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list); |
| | | |
| | | var sheets = new Dictionary<string, object> |
| | | { |
| | | ["配置"] = ExportHelper.ConvertListToExportData(result), |
| | | }; |
| | | |
| | | var fileName = result.Count > 1 ? "出入库单据列表" : result.Count == 1 ? result[0]?.OrderNo : "WmsInOutStockOrder模版"; |
| | | return (sheets, fileName); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 校验出入库单据,当新建或更新时 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockOrderCreateOrUpdateDtoBase input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | Check.NotNullOrWhiteSpace(input.OrderNo, "单据编号", 50); |
| | | Check.NotNull(input.OrderStatus, "单据状态"); |
| | | Check.NotNullOrWhiteSpace(input.MaterialNo, "物料件号", 50); |
| | | protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockOrderCreateOrUpdateDtoBase input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | Check.NotNullOrWhiteSpace(input.MaterialNo, "物料编号", 50); |
| | | Check.NotNullOrWhiteSpace(input.MaterialBatch, "批次号", 50); |
| | | Check.NotNull(input.OrderType, "单据类型"); |
| | | Check.NotNull(input.StockType, "操作类型(枚举值)"); |
| | | Check.NotNull(input.StockType, "操作类型"); |
| | | Check.NotNull(input.MaterialNumber, "单据数量"); |
| | | Check.NotNull(input.DistributeNumber, "下发数量"); |
| | | Check.NotNull(input.CompleteNumber, "完成数量"); |
| | | Check.NotNull(input.Priority, "优先级"); |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | } |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | } |
| | |
| | | { |
| | | throw new UserFriendlyException("库位库区信息不存在"); |
| | | } |
| | | var wmsmaterialstockList = await _wmsmaterialstockRepository.GetStockListAsync(new WmsMaterialStock { PlaceNo = input.PlaceNo }); |
| | | if (wmsmaterialstockList.Count > 0) |
| | | { |
| | | if (wmsmaterialstockList[0].MaterialNo != input.MaterialNo) |
| | | { |
| | | throw new UserFriendlyException("当前库位已存放别的物料"); |
| | | } |
| | | } |
| | | |
| | | var maxSort = await _wmsmaterialstockRepository.GetMaxSortAsync(); |
| | | var sort = input.Sort ?? maxSort; |
| | | var wmsmaterialstock = ObjectMapper.Map<WmsMaterialStockCreateDto, WmsMaterialStock>(input); |
| | |
| | | stock = JsonSerializer.Deserialize<WmsMaterialStock>(json); |
| | | stock.MaterialId = Guid.NewGuid().ToString("N"); |
| | | stock.StockNumber = 1; |
| | | stockList.Add(stock); |
| | | stockList.Add(stock); |
| | | } |
| | | |
| | | await _wmsmaterialstockRepository.InsertManyAsync(stockList); |
| | |
| | | await _wmscontainerRepository.UpdateAsync(container); |
| | | await _wmsplaceRepository.UpdateAsync(place); |
| | | |
| | | if (input.Sort.HasValue && wmsmaterialstock.Sort != maxSort) |
| | | { |
| | | await AdjustSortAsync(wmsmaterialstock.Id, wmsmaterialstock.Sort); |
| | | } |
| | | //if (input.Sort.HasValue && wmsmaterialstock.Sort != maxSort) |
| | | //{ |
| | | // await AdjustSortAsync(wmsmaterialstock.Id, wmsmaterialstock.Sort); |
| | | //} |
| | | await uow.SaveChangesAsync(); |
| | | await uow.CompleteAsync(); |
| | | return ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(wmsmaterialstock); |
| | |
| | | /// 获取最大排序出入库单据 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | Task<int> GetMaxSortAsync(); |
| | | |
| | | Task<int> GetMaxSortAsync(); |
| | | |
| | | /// <summary> |
| | | /// 获取最大优先级值 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | Task<int> GetMaxPriorityAsync(); |
| | | |
| | | /// <summary> |
| | | /// 获取分页列表出入库单据 |
| | | /// </summary> |
| | |
| | | var sort = await (await GetQueryableAsync()) |
| | | .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); |
| | | return sort + 1; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取最大优先级值 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public async Task<int> GetMaxPriorityAsync() |
| | | { |
| | | // 获取今天的日期(时间部分为00:00:00) |
| | | var today = DateTime.Today; |
| | | |
| | | var queryable = await GetQueryableAsync(); |
| | | var query = queryable |
| | | .Where(x => x.CreationTime > today) |
| | | .Where(x => !x.IsDeleted); |
| | | |
| | | var hasAny = await query.AnyAsync(); |
| | | if (!hasAny) |
| | | { |
| | | return 1; |
| | | } |
| | | |
| | | // 获取最大Sort值并加1 |
| | | var maxSort = await query.MaxAsync(x => x.Sort); |
| | | return maxSort + 1; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取分页列表出入库单据 |
| | | /// </summary> |