From 82f7b3c19adfac9f2ccde3e09097d1c0b2cfd7ed Mon Sep 17 00:00:00 2001 From: liuying <1427574514@qq.com> Date: 周二, 23 4月 2024 19:18:22 +0800 Subject: [PATCH] 控制属性规则 --- iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/excelForm.vue | 181 ++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx | 0 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs | 418 ++++++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs | 247 +++ iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue | 604 +++++++++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.cs | 22 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.cs | 22 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue | 107 + iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js | 114 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue | 521 +++++++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx | 0 iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js | 114 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs | 18 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs | 18 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs | 592 ++++++++ iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue | 131 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue | 94 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs | 57 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs | 82 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue | 2 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue | 109 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue | 123 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue | 181 ++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs | 166 ++ 24 files changed, 3,922 insertions(+), 1 deletions(-) diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js new file mode 100644 index 0000000..6c6af3d --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js @@ -0,0 +1,114 @@ +锘縤mport { axios } from '@/utils/request' + +/** + * 鏌ヨ鎺у埗灞炴�ц鍒欐槑缁� + * + * @author ly + */ +export function WmsControlRuleDetailPage (parameter) { + return axios({ + url: '/WmsControlRuleDetail/page', + method: 'get', + params: parameter + }) +} + +/** + * 鎺у埗灞炴�ц鍒欐槑缁嗗垪琛� + * + * @author ly + */ +export function WmsControlRuleDetailList (parameter) { + return axios({ + url: '/WmsControlRuleDetail/list', + method: 'get', + params: parameter + }) +} + +/** + * 娣诲姞鎺у埗灞炴�ц鍒欐槑缁� + * + * @author ly + */ +export function WmsControlRuleDetailAdd (parameter) { + return axios({ + url: '/WmsControlRuleDetail/add', + method: 'post', + data: parameter + }) +} + +/** + * 缂栬緫鎺у埗灞炴�ц鍒欐槑缁� + * + * @author ly + */ +export function WmsControlRuleDetailEdit (parameter) { + return axios({ + url: '/WmsControlRuleDetail/edit', + method: 'post', + data: parameter + }) +} + +/** + * 鍒犻櫎鎺у埗灞炴�ц鍒欐槑缁� + * + * @author ly + */ +export function WmsControlRuleDetailDelete (parameter) { + return axios({ + url: '/WmsControlRuleDetail/delete', + method: 'post', + data: parameter + }) +} + + +/** + * 瀵煎嚭鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsControlRuleDetailToExcel (parameter) { + return axios({ + url: '/WmsControlRuleDetail/toExcel', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + +/** + * 瀵煎叆鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsControlRuleDetailImportExcel (data, parameter) { + return axios({ + url: '/WmsControlRuleDetail/importExcel', + method: 'post', + data: data, + params: parameter + + }) +} + + +/** + * 涓嬭浇鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel瀵煎叆妯℃澘 + * + * @author ly + */ +export function WmsControlRuleDetailDownloadExcelTemplate(parameter) { + return axios({ + url: '/WmsControlRuleDetail/downloadExcelTemplate', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + + + diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js new file mode 100644 index 0000000..aea9545 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js @@ -0,0 +1,114 @@ +锘縤mport { axios } from '@/utils/request' + +/** + * 鏌ヨ鎺у埗灞炴�ц鍒� + * + * @author ly + */ +export function WmsControlRulePage (parameter) { + return axios({ + url: '/WmsControlRule/page', + method: 'get', + params: parameter + }) +} + +/** + * 鎺у埗灞炴�ц鍒欏垪琛� + * + * @author ly + */ +export function WmsControlRuleList (parameter) { + return axios({ + url: '/WmsControlRule/list', + method: 'get', + params: parameter + }) +} + +/** + * 娣诲姞鎺у埗灞炴�ц鍒� + * + * @author ly + */ +export function WmsControlRuleAdd (parameter) { + return axios({ + url: '/WmsControlRule/add', + method: 'post', + data: parameter + }) +} + +/** + * 缂栬緫鎺у埗灞炴�ц鍒� + * + * @author ly + */ +export function WmsControlRuleEdit (parameter) { + return axios({ + url: '/WmsControlRule/edit', + method: 'post', + data: parameter + }) +} + +/** + * 鍒犻櫎鎺у埗灞炴�ц鍒� + * + * @author ly + */ +export function WmsControlRuleDelete (parameter) { + return axios({ + url: '/WmsControlRule/delete', + method: 'post', + data: parameter + }) +} + + +/** + * 瀵煎嚭鎺у埗灞炴�ц鍒欑殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsControlRuleToExcel (parameter) { + return axios({ + url: '/WmsControlRule/toExcel', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + +/** + * 瀵煎叆鎺у埗灞炴�ц鍒欑殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsControlRuleImportExcel (data, parameter) { + return axios({ + url: '/WmsControlRule/importExcel', + method: 'post', + data: data, + params: parameter + + }) +} + + +/** + * 涓嬭浇鎺у埗灞炴�ц鍒欑殑Excel瀵煎叆妯℃澘 + * + * @author ly + */ +export function WmsControlRuleDownloadExcelTemplate(parameter) { + return axios({ + url: '/WmsControlRule/downloadExcelTemplate', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + + + diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue new file mode 100644 index 0000000..3d0e4ed --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue @@ -0,0 +1,94 @@ +锘�<template> + <a-modal + title="鏂板鎺у埗灞炴�ц鍒�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="瑙勫垯缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" v-decorator="['ruleCode', {rules: [{required: true, message: '璇疯緭鍏ヨ鍒欑紪鍙凤紒'}]}]" /> + </a-form-item> + <a-form-item label="瑙勫垯鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヨ鍒欏悕绉�" v-decorator="['ruleName', {rules: [{required: true, message: '璇疯緭鍏ヨ鍒欏悕绉帮紒'}]}]" /> + </a-form-item> + <a-form-item label="瑙勫垯鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヨ鍒欐弿杩�" v-decorator="['ruleDesc']" /> + </a-form-item> + <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> + import moment from 'moment' + import { + WmsControlRuleAdd + } from '@/api/modular/main/WmsBase/WmsControlRuleManage' + export default { + data () { + return { + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + visible: false, + confirmLoading: false, + form: this.$form.createForm(this) + } + }, + methods: { + moment, + // 鍒濆鍖栨柟娉� + add (record) { + this.visible = true + this.$nextTick(() => { + + }); + }, + /** + * 鎻愪氦琛ㄥ崟 + */ + handleSubmit () { + const { form: { validateFields } } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (typeof (values[key]) === 'object') { + values[key] = JSON.stringify(values[key]) + } + } + WmsControlRuleAdd(values).then((res) => { + if (res.success) { + this.$message.success('鏂板鎴愬姛') + this.confirmLoading = false + this.$emit('ok', values) + this.handleCancel() + } else { + this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message)) + } + }).finally((res) => { + this.confirmLoading = false + }) + } else { + this.confirmLoading = false + } + }) + }, + handleCancel () { + this.form.resetFields() + this.visible = false + } + } + } +</script> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue new file mode 100644 index 0000000..4a39c8f --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue @@ -0,0 +1,107 @@ +锘�<template> + <!-- @ok="handleSubmit" --> + <a-modal + title="鎺у埗灞炴�ц鍒欐槑缁�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @cancel="handleCancel" + > + <a-spin :spinning="confirmLoading"> + <control-rule-detail ref="controlRuleDetail" @ok="handleOk" /> + </a-spin> + </a-modal> + +</template> + +<script> +import moment from 'moment' +import { WmsControlRuleEdit } from '@/api/modular/main/WmsBase/WmsControlRuleManage' + +import ControlRuleDetail from '@/views/main/WmsBase/WmsControlRuleDetail/index.vue' + +export default { + components: { + ControlRuleDetail + }, + data() { + return { + Id: 0, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + record: {}, + visible: false, + confirmLoading: false, + form: this.$form.createForm(this) + } + }, + methods: { + moment, + // 鍒濆鍖栨柟娉� + edit(record) { + this.visible = true + this.Id = record.id + this.$nextTick(() => {}) + //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔� + this.record = JSON.parse(JSON.stringify(record)) + this.$nextTick(() => { + this.form.setFieldsValue({ + id: record.id, + ruleCode: record.ruleCode, + ruleName: record.ruleName, + ruleDesc: record.ruleDesc, + isDisabled: record.isDisabled + }) + }) + }, + handleOk(){ + + }, + handleSubmit() { + const { + form: { validateFields } + } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (values[key] == null) continue + if (typeof values[key] === 'object') { + values[key] = JSON.stringify(values[key]) + this.record[key] = values[key] + } else { + this.record[key] = values[key] + } + } + WmsControlRuleEdit(this.record) + .then(res => { + if (res.success) { + this.$message.success('缂栬緫鎴愬姛') + this.confirmLoading = false + this.$emit('ok', this.record) + this.handleCancel() + } else { + this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message)) + } + }) + .finally(res => { + this.confirmLoading = false + }) + } else { + this.confirmLoading = false + } + }) + }, + handleCancel() { + this.form.resetFields() + this.visible = false + } + } +} +</script> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue new file mode 100644 index 0000000..ea11e1c --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue @@ -0,0 +1,123 @@ +锘�<template> + <a-modal + title="缂栬緫鎺у埗灞炴�ц鍒�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel" + > + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="瑙勫垯缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input + placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" + v-decorator="['ruleCode', { rules: [{ required: true, message: '璇疯緭鍏ヨ鍒欑紪鍙凤紒' }] }]" + /> + </a-form-item> + <a-form-item label="瑙勫垯鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input + placeholder="璇疯緭鍏ヨ鍒欏悕绉�" + v-decorator="['ruleName', { rules: [{ required: true, message: '璇疯緭鍏ヨ鍒欏悕绉帮紒' }] }]" + /> + </a-form-item> + <a-form-item label="瑙勫垯鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヨ鍒欐弿杩�" v-decorator="['ruleDesc']" /> + </a-form-item> + <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch + v-decorator="[ + 'isDisabled', + { rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked' } + ]" + /> + </a-form-item> + <a-form-item v-show="false"><a-input v-decorator="['id']"/></a-form-item> + </a-form> + </a-spin> + </a-modal> + +</template> + +<script> +import moment from 'moment' +import { WmsControlRuleEdit } from '@/api/modular/main/WmsBase/WmsControlRuleManage' +export default { + data() { + return { + Id: 0, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + record: {}, + visible: false, + confirmLoading: false, + form: this.$form.createForm(this) + } + }, + methods: { + moment, + // 鍒濆鍖栨柟娉� + edit(record) { + this.visible = true + this.Id = record.id + this.$nextTick(() => {}) + //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔� + this.record = JSON.parse(JSON.stringify(record)) + this.$nextTick(() => { + this.form.setFieldsValue({ + id: record.id, + ruleCode: record.ruleCode, + ruleName: record.ruleName, + ruleDesc: record.ruleDesc, + isDisabled: record.isDisabled + }) + }) + }, + handleSubmit() { + const { + form: { validateFields } + } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (values[key] == null) continue + if (typeof values[key] === 'object') { + values[key] = JSON.stringify(values[key]) + this.record[key] = values[key] + } else { + this.record[key] = values[key] + } + } + WmsControlRuleEdit(this.record) + .then(res => { + if (res.success) { + this.$message.success('缂栬緫鎴愬姛') + this.confirmLoading = false + this.$emit('ok', this.record) + this.handleCancel() + } else { + this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message)) + } + }) + .finally(res => { + this.confirmLoading = false + }) + } else { + this.confirmLoading = false + } + }) + }, + handleCancel() { + this.form.resetFields() + this.visible = false + } + } +} +</script> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue new file mode 100644 index 0000000..cc33122 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue @@ -0,0 +1,181 @@ +锘�<template> + <a-modal + :width="850" + :destroyOnClose="true" + :visible="visible" + :forceRender="true" + title="鎵归噺瀵煎叆" + cancelText="鍙栨秷涓婁紶" + okText="寮�濮嬩笂浼�" + @cancel="handleCancel" + @ok="handleSubmit"> + <a-spin :spinning="confirmLoading"> + <a-row :span="24"> + <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span> + </a-row> + <p></p> + <a-row> + <a-col :span="16"> + <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload"> + <a-icon style="font-size: 40px;" type="cloud-upload" /> + </a-upload-dragger> + </a-col> + <!--<a-col :span="8"> + <span>瀵煎叆妯″紡锛�</span> + <a-select + style="width: 130px" + placeholder="璇烽�夋嫨瀵煎叆妯″紡" + v-model="importExcelType"> + <a-select-option + v-for="(item,index) in importExcelTypeData" + :key="index" + :value="item.code">{{ item.name }} + </a-select-option> + </a-select> + </a-col>--> + </a-row> + <a-row :span="24"> + <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed"> + 鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰 + </a-button>--> + <span>銆�</span> + <a-button style="width: 90px;text-align: left;" @click="wmsControlRuleDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶 + <span>銆�</span> + <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed"> + 鏀惰捣 + </a-button> + </a-row> + <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24"> + <a-breadcrumb> + <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item> + </a-breadcrumb> + </a-row> + <pre v-show="detailed"> + <div v-html="demandText"></div> + </pre> + <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table> + <pre v-show="detailed"> + <div v-html="columnText"></div> + </pre> + </a-spin> + </a-modal> +</template> + +<script> + import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util' + + import { WmsControlRuleImportExcel, WmsControlRuleDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsControlRuleManage' + import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage' + export default { + components: { + }, + data() { + return { + visible: false, + detailed: false, + confirmLoading: false, + fileList: [], + importExcelTypeData: [], + importExcelType: '1', + uploadFile: null, + columns: [], + dataList: [], + demandText:'', + columnText: '' + } + }, + methods: { + index() { + this.visible = true; + this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type') + this.demandText = parseDemandText("wmsControlRuleDownloadExcelTemplate") + window.downloadFile = this.wmsControlRuleDownloadExcelTemplate; + this.getTable(); + }, + showDemand() { + this.detailed = !this.detailed; + }, + customRequest(document) { + this.uploadFile = document + }, + getTable() { + sysExcelTemplateGetColumnList({className: "WmsControlRule"}).then(res => + { + if (res.success) { + this.columns =[]; + this.dataList = [{}]; + res.data.forEach(x => { + this.columns.push({ + dataIndex: x.columnName, + key: x.columnName, + title: x.columnComment + }); + this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�" + }); + this.columnText = parseExcelFieldText(res.data); + } + }); + }, + beforeUpload(fileInfo) { + let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']); + if (!res.success) { + this.$message.warning(res.msg) + return false + } + setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000) + }, + handleChange(fileInfo) { + if (fileInfo.file.status === 'error') { + fileInfo.fileList.splice(0, 1) + } + if (fileInfo.file.status === 'done') { + if (fileInfo.fileList.length > 1) { + fileInfo.fileList.splice(0, 1) + } + this.fileList = fileInfo.file + } + }, + handleSubmit() { + this.confirmLoading = true + const formData = new FormData() + formData.append('file', this.uploadFile.file) + WmsControlRuleImportExcel(formData, {importExcelType: this.importExcelType}).then(res => { + this.$message.success('鎿嶄綔鎴愬姛') + this.confirmLoading = false + this.$emit('ok', []) + this.handleCancel() + }).finally((res)=>{this.confirmLoading = false}) + }, + handleCancel() { + this.visible = false + this.detailed = false + }, + wmsControlRuleDownloadExcelTemplate() { + WmsControlRuleDownloadExcelTemplate({version: "v2"}).then((res) => { + downloadFile(res); + }).catch((err) => { + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + } + } + } +</script> + +<style scoped> +::v-deep .ant-upload.ant-upload-drag { + position: relative; + width: 140px; + height: 135px; + text-align: center; + background: #fafafa; + border: 1px dashed #d9d9d9; + border-radius: 2px; + cursor: pointer; + -webkit-transition: border-color 0.3s; + transition: border-color 0.3s; +} +::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) { + color: #ffc53d; + border-color: white; +} +</style> \ No newline at end of file diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue new file mode 100644 index 0000000..4c663d2 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue @@ -0,0 +1,521 @@ +锘�<template> + <!-- 鎺у埗灞炴�ц鍒� --> + <div ref="boxOutWrap" class="boxOutWrap"> + <div ref="boxForm" class="boxForm"> + <a-card :bordered="false" :bodyStyle="tstyle"> + <div class="table-page-search-wrapper" v-if="hasPerm('WmsControlRule:page')"> + <a-form layout="inline"> + <a-row :gutter="48"> + <a-col :md="8" :sm="24"> + <a-form-item label="瑙勫垯缂栧彿"> + <a-input v-model="queryParam.ruleCode" allow-clear placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" /> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="瑙勫垯鍚嶇О"> + <a-input v-model="queryParam.ruleName" allow-clear placeholder="璇疯緭鍏ヨ鍒欏悕绉�" /> + </a-form-item> </a-col + ><template v-if="advanced"> + <a-col :md="8" :sm="24"> + <a-form-item label="瑙勫垯鎻忚堪"> + <a-input v-model="queryParam.ruleDesc" allow-clear placeholder="璇疯緭鍏ヨ鍒欐弿杩�" /> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏄惁绂佺敤"> + <a-select + :allowClear="true" + style="width: 100%" + v-model="queryParam.isDisabled" + placeholder="璇烽�夋嫨鏄惁绂佺敤" + > + <a-select-option v-for="(item, index) in isDisabledData" :key="index" :value="item.code">{{ + item.name + }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鏃堕棿"> + <a-range-picker + style="width: 100%" + :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" + :show-time="{ + format: 'HH:mm:ss', + defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')] + }" + v-model="queryParam.createdTime" + value-format="YYYY-MM-DD HH:mm:ss" + format="YYYY-MM-DD HH:mm:ss" + @change="onChangecreatedTime" + /> + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鏇存柊鏃堕棿"> + <a-range-picker + style="width: 100%" + :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" + :show-time="{ + format: 'HH:mm:ss', + defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')] + }" + v-model="queryParam.updatedTime" + value-format="YYYY-MM-DD HH:mm:ss" + format="YYYY-MM-DD HH:mm:ss" + @change="onChangeupdatedTime" + /> + </a-form-item> + </a-col> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鑰呭悕绉�"> + <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�" /> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="淇敼鑰呭悕绉�"> + <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�" /> + </a-form-item> + </a-col> + </template> + + <a-col :md="8" :sm="24"> + <span class="table-page-search-submitButtons"> + <a-button type="primary" @click="$refs.table.refresh(true)">鏌ヨ</a-button> + <a-button style="margin-left: 8px" @click="() => (queryParam = {})">閲嶇疆</a-button> + <a @click="toggleAdvanced" style="margin-left: 8px"> + {{ advanced ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="advanced ? 'up' : 'down'" /> + </a> + </span> + </a-col> + </a-row> + </a-form> + </div> + </a-card> + </div> + <a-card :bordered="false"> + <s-table + ref="table" + :columns="columns" + :data="loadData" + :alert="true" + @changeTablePage="pageInfo = $event" + :scroll="{ x: true, y: tableHeight }" + :rowKey="record => record.id" + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" + > + <template class="table-operator" slot="operator" v-if="hasPerm('WmsControlRule:add')"> + <div ref="actionBar" class="actionBar"> + <a-button + type="info" + v-if="hasPerm('sysExcelTemplate:importExcel')" + icon="upload" + @click="$refs.excelForm.index()" + > + 瀵煎叆 + </a-button> + <a-button + type="info" + v-if="hasPerm('WmsControlRule:exportExcel')" + icon="download" + @click="WmsControlRuleToExcel()" + > + 瀵煎嚭 + </a-button> + <a-button type="primary" v-if="hasPerm('WmsControlRule:add')" icon="plus" @click="$refs.addForm.add()" + >鏂板鎺у埗灞炴�ц鍒�</a-button + > + </div> + </template> + <span slot="isDisabledscopedSlots" slot-scope="text"> + <div v-if="text === true"> + <a-tag color="green">鏄�</a-tag> + </div> + <div v-else-if="text == false"> + <a-tag color="volcano">鍚�</a-tag> + </div> + <div v-else=""></div> + </span> + <span slot="action" slot-scope="text, record"> + <!-- 鑷畾涔� --> + <a v-if="hasPerm('WmsControlRule:getdetail')" @click="$refs.detailForm.edit(record)">璇︽儏</a> + + <a v-if="hasPerm('WmsControlRule:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a> + <a-divider type="vertical" v-if="hasPerm('WmsControlRule:edit') & hasPerm('WmsControlRule:delete')" /> + <a-popconfirm + v-if="hasPerm('WmsControlRule:delete')" + placement="topRight" + title="纭鍒犻櫎锛�" + @confirm="() => WmsControlRuleDelete(record)" + > + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </s-table> + <add-form ref="addForm" @ok="handleOk" /> + <edit-form ref="editForm" @ok="handleOk" /> + <excel-form ref="excelForm" @ok="handleOk" /> + + <!-- 鑷畾涔� --> + <detail-form ref="detailForm" @ok="handleOk" /> + + </a-card> + </div> +</template> +<script> +import { STable } from '@/components' +import moment from 'moment' +import { + WmsControlRulePage, + WmsControlRuleDelete, + WmsControlRuleToExcel +} from '@/api/modular/main/WmsBase/WmsControlRuleManage' +//鑷畾涔塼able楂樺害 +import setTableHtMixin from '@/mixins/handleTableHt.js' +import addForm from './addForm.vue' +import { exportExcel } from '@/utils/exportToExcel' +import { downloadFile } from '@/utils/util' +import editForm from './editForm.vue' +import excelForm from './excelForm.vue' +import detailForm from './details.vue' + + +export default { + mixins: [setTableHtMixin], + components: { + STable, + addForm, + editForm, + excelForm, + detailForm + }, + data() { + return { + advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴 + queryParam: {}, + pageInfo: { + current: 1, + pageSize: 10 + }, + columns: [ + { + title: '搴忓彿', + width: '60px', + align: 'center', + customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}` + }, + { + title: '瑙勫垯缂栧彿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'ruleCode' + }, + { + title: '瑙勫垯鍚嶇О', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'ruleName' + }, + { + title: '瑙勫垯鎻忚堪', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'ruleDesc' + }, + { + title: '鏄惁绂佺敤', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'isDisabled', + scopedSlots: { customRender: 'isDisabledscopedSlots' } + }, + { + title: '鍒涘缓鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdTime' + }, + { + title: '鏇存柊鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedTime' + }, + { + title: '鍒涘缓鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdUserName' + }, + { + title: '淇敼鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px' //鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedUserName' + } + ], + tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' }, + // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄 + loadData: parameter => { + return WmsControlRulePage(Object.assign(parameter, this.switchingDate())).then(res => { + return res.data + }) + }, + selectedRowKeys: [], + selectedRows: [] + } + }, + created() { + if (this.hasPerm('WmsControlRule:edit') || this.hasPerm('WmsControlRule:delete')) { + this.columns.push({ + title: '鎿嶄綔', + width: '150px', + dataIndex: 'action', + scopedSlots: { customRender: 'action' } + }) + } + const path = this.$route.path + const columnStr = window.localStorage.getItem(path) + if (columnStr) { + var _columns = JSON.parse(columnStr) + this.columns.forEach(element => { + var fObj = _columns.find((item, index) => { + return item.dataIndex === element.dataIndex + }) + if (fObj != undefined && fObj != null) { + element.checked = fObj.checked + } + }) + } + const isDisabledOption = this.$options + this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false') + + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + window.addEventListener( + 'resize', + () => { + this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害 + }, + false + ) + }, + methods: { + moment, + /** + * 鏌ヨ鍙傛暟缁勮 + */ + switchingDate() { + const obj = JSON.parse(JSON.stringify(this.queryParam)) + return obj + }, + WmsControlRuleDelete(record) { + WmsControlRuleDelete(record).then(res => { + if (res.success) { + this.$message.success('鍒犻櫎鎴愬姛') + this.$refs.table.refresh() + } else { + this.$message.error('鍒犻櫎澶辫触') // + res.message + } + }) + }, + + WmsControlRuleToExcel() { + this.loading = true + let entozh = {} + const path = this.$route.path + if (window.localStorage.getItem(path)) { + JSON.parse(window.localStorage.getItem(path)).forEach(item => { + if (item.dataIndex != 'action' && item.checked) { + entozh[item.dataIndex] = item.title + } + }) + } else { + //鐩存帴鐐瑰鍑� + this.columns.forEach(item => { + if (item.dataIndex != 'action') { + entozh[item.dataIndex] = item.title + } + }) + } + WmsControlRulePage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)) + .then(res => { + this.loading = false + //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁 + var arrDataCutout = this.columns.filter(v => v.customCutout == true) + res.data.rows.forEach(item => { + var arrKeys = Object.keys(item) + arrKeys.forEach(key => { + var strFieldDic = key + 'Data' + //鏋氫妇杞�� + if (this[strFieldDic] && this[strFieldDic].length > 0) { + let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key])) + if (arrFieldDic.length > 0) { + item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�' + } + } + // 鏃ユ湡鎴彇 + if (arrDataCutout.length > 0) { + arrDataCutout.forEach(itemIn => { + if (key == itemIn.dataIndex && item[key]) { + item[key] = item[key].split(' ')[0] + } + }) + } + }) + }) + exportExcel(res.data.rows, entozh, 'xlsx', `${this.$route.meta.title}`) + }) + .catch(err => { + this.loading = false + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + }, + + toggleAdvanced() { + this.advanced = !this.advanced + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + }, + onChangecreatedTime(date, dateString) { + this.queryParam.createdTime = dateString + }, + onChangeupdatedTime(date, dateString) { + this.queryParam.updatedTime = dateString + }, + handleOk() { + this.$refs.table.refresh() + }, + onSelectChange(selectedRowKeys, selectedRows) { + this.selectedRowKeys = selectedRowKeys + this.selectedRows = selectedRows + } + } +} +</script> +<style lang="less"> +.table-operator { + margin-bottom: 18px; +} +button { + margin-right: 8px; +} +</style> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue new file mode 100644 index 0000000..767ae4b --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue @@ -0,0 +1,109 @@ +锘�<template> + <a-modal + title="鏂板鎺у埗灞炴�ц鍒欐槑缁�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="鎺у埗灞炴�ц鍒橧D" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D" v-decorator="['controlRuleId', {rules: [{required: true, message: '璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D锛�'}]}]" /> + </a-form-item> + <a-form-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶楂樺簱瀛�" v-decorator="['maxImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶楂樺簱瀛橈紒'}]}]" /> + </a-form-item> + <a-form-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" v-decorator="['minImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶浣庡簱瀛橈紒'}]}]" /> + </a-form-item> + <a-form-item label="瀹夊叏搴撳瓨" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�" v-decorator="['safeImumqty', {rules: [{required: true, message: '璇疯緭鍏ュ畨鍏ㄥ簱瀛橈紒'}]}]" /> + </a-form-item> + <a-form-item label="鏈�灏忓簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶灏忓簱榫�" v-decorator="['minStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶灏忓簱榫勶紒'}]}]" /> + </a-form-item> + <a-form-item label="鏈�澶у簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶澶у簱榫�" v-decorator="['maxStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶澶у簱榫勶紒'}]}]" /> + </a-form-item> + <a-form-item label="鏄惁鍏嶆" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isNotChek',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁鍏嶆锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + <a-form-item label="淇濊川鏈熷ぉ鏁�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟" v-decorator="['shelfLifeDays', {rules: [{required: true, message: '璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟锛�'}]}]" /> + </a-form-item> + <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> + import moment from 'moment' + import { + WmsControlRuleDetailAdd + } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage' + export default { + data () { + return { + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + visible: false, + confirmLoading: false, + form: this.$form.createForm(this) + } + }, + methods: { + moment, + // 鍒濆鍖栨柟娉� + add (record) { + this.visible = true + this.$nextTick(() => { + + }); + }, + /** + * 鎻愪氦琛ㄥ崟 + */ + handleSubmit () { + const { form: { validateFields } } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (typeof (values[key]) === 'object') { + values[key] = JSON.stringify(values[key]) + } + } + WmsControlRuleDetailAdd(values).then((res) => { + if (res.success) { + this.$message.success('鏂板鎴愬姛') + this.confirmLoading = false + this.$emit('ok', values) + this.handleCancel() + } else { + this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message)) + } + }).finally((res) => { + this.confirmLoading = false + }) + } else { + this.confirmLoading = false + } + }) + }, + handleCancel () { + this.form.resetFields() + this.visible = false + } + } + } +</script> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue new file mode 100644 index 0000000..41a2dda --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue @@ -0,0 +1,131 @@ +锘�<template> + <a-modal + title="缂栬緫鎺у埗灞炴�ц鍒欐槑缁�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="鎺у埗灞炴�ц鍒橧D" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D" v-decorator="['controlRuleId', {rules: [{required: true, message: '璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D锛�'}]}]" /> + </a-form-item> + <a-form-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶楂樺簱瀛�" v-decorator="['maxImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶楂樺簱瀛橈紒'}]}]" /> + </a-form-item> + <a-form-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" v-decorator="['minImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶浣庡簱瀛橈紒'}]}]" /> + </a-form-item> + <a-form-item label="瀹夊叏搴撳瓨" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�" v-decorator="['safeImumqty', {rules: [{required: true, message: '璇疯緭鍏ュ畨鍏ㄥ簱瀛橈紒'}]}]" /> + </a-form-item> + <a-form-item label="鏈�灏忓簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶灏忓簱榫�" v-decorator="['minStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶灏忓簱榫勶紒'}]}]" /> + </a-form-item> + <a-form-item label="鏈�澶у簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ渶澶у簱榫�" v-decorator="['maxStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶澶у簱榫勶紒'}]}]" /> + </a-form-item> + <a-form-item label="鏄惁鍏嶆" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isNotChek',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁鍏嶆锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + <a-form-item label="淇濊川鏈熷ぉ鏁�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟" v-decorator="['shelfLifeDays', {rules: [{required: true, message: '璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟锛�'}]}]" /> + </a-form-item> + <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> +import moment from 'moment' + import { + WmsControlRuleDetailEdit + } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage' + export default { + data () { + return { + Id: 0, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + record: {}, + visible: false, + confirmLoading: false, + form: this.$form.createForm(this) + } + }, + methods: { + moment, + // 鍒濆鍖栨柟娉� + edit (record) { + this.visible = true; + this.Id = record.id; + this.$nextTick(() => { + }); + //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔� + this.record = JSON.parse(JSON.stringify(record)) + this.$nextTick(() => { + this.form.setFieldsValue( + { + id: record.id, + controlRuleId: record.controlRuleId, + maxImumqty: record.maxImumqty, + minImumqty: record.minImumqty, + safeImumqty: record.safeImumqty, + minStorageAge: record.minStorageAge, + maxStorageAge: record.maxStorageAge, + isNotChek: record.isNotChek, + shelfLifeDays: record.shelfLifeDays, + isDisabled: record.isDisabled + } + ) + }) + }, + handleSubmit () { + const { form: { validateFields } } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (values[key] == null) continue + if (typeof (values[key]) === 'object') { + values[key] = JSON.stringify(values[key]) + this.record[key] = values[key] + } else { + this.record[key] = values[key] + } + } + WmsControlRuleDetailEdit(this.record).then((res) => { + if (res.success) { + this.$message.success('缂栬緫鎴愬姛') + this.confirmLoading = false + this.$emit('ok', this.record) + this.handleCancel() + } else { + this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message)) + } + }).finally((res) => { + this.confirmLoading = false + }) + }else{ + this.confirmLoading = false + } + }); + }, + handleCancel () { + this.form.resetFields() + this.visible = false + } + } + } +</script> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/excelForm.vue new file mode 100644 index 0000000..fdeae2b --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/excelForm.vue @@ -0,0 +1,181 @@ +锘�<template> + <a-modal + :width="850" + :destroyOnClose="true" + :visible="visible" + :forceRender="true" + title="鎵归噺瀵煎叆" + cancelText="鍙栨秷涓婁紶" + okText="寮�濮嬩笂浼�" + @cancel="handleCancel" + @ok="handleSubmit"> + <a-spin :spinning="confirmLoading"> + <a-row :span="24"> + <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span> + </a-row> + <p></p> + <a-row> + <a-col :span="16"> + <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload"> + <a-icon style="font-size: 40px;" type="cloud-upload" /> + </a-upload-dragger> + </a-col> + <!--<a-col :span="8"> + <span>瀵煎叆妯″紡锛�</span> + <a-select + style="width: 130px" + placeholder="璇烽�夋嫨瀵煎叆妯″紡" + v-model="importExcelType"> + <a-select-option + v-for="(item,index) in importExcelTypeData" + :key="index" + :value="item.code">{{ item.name }} + </a-select-option> + </a-select> + </a-col>--> + </a-row> + <a-row :span="24"> + <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed"> + 鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰 + </a-button>--> + <span>銆�</span> + <a-button style="width: 90px;text-align: left;" @click="wmsControlRuleDetailDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶 + <span>銆�</span> + <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed"> + 鏀惰捣 + </a-button> + </a-row> + <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24"> + <a-breadcrumb> + <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item> + </a-breadcrumb> + </a-row> + <pre v-show="detailed"> + <div v-html="demandText"></div> + </pre> + <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table> + <pre v-show="detailed"> + <div v-html="columnText"></div> + </pre> + </a-spin> + </a-modal> +</template> + +<script> + import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util' + + import { WmsControlRuleDetailImportExcel, WmsControlRuleDetailDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage' + import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage' + export default { + components: { + }, + data() { + return { + visible: false, + detailed: false, + confirmLoading: false, + fileList: [], + importExcelTypeData: [], + importExcelType: '1', + uploadFile: null, + columns: [], + dataList: [], + demandText:'', + columnText: '' + } + }, + methods: { + index() { + this.visible = true; + this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type') + this.demandText = parseDemandText("wmsControlRuleDetailDownloadExcelTemplate") + window.downloadFile = this.wmsControlRuleDetailDownloadExcelTemplate; + this.getTable(); + }, + showDemand() { + this.detailed = !this.detailed; + }, + customRequest(document) { + this.uploadFile = document + }, + getTable() { + sysExcelTemplateGetColumnList({className: "WmsControlRuleDetail"}).then(res => + { + if (res.success) { + this.columns =[]; + this.dataList = [{}]; + res.data.forEach(x => { + this.columns.push({ + dataIndex: x.columnName, + key: x.columnName, + title: x.columnComment + }); + this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�" + }); + this.columnText = parseExcelFieldText(res.data); + } + }); + }, + beforeUpload(fileInfo) { + let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']); + if (!res.success) { + this.$message.warning(res.msg) + return false + } + setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000) + }, + handleChange(fileInfo) { + if (fileInfo.file.status === 'error') { + fileInfo.fileList.splice(0, 1) + } + if (fileInfo.file.status === 'done') { + if (fileInfo.fileList.length > 1) { + fileInfo.fileList.splice(0, 1) + } + this.fileList = fileInfo.file + } + }, + handleSubmit() { + this.confirmLoading = true + const formData = new FormData() + formData.append('file', this.uploadFile.file) + WmsControlRuleDetailImportExcel(formData, {importExcelType: this.importExcelType}).then(res => { + this.$message.success('鎿嶄綔鎴愬姛') + this.confirmLoading = false + this.$emit('ok', []) + this.handleCancel() + }).finally((res)=>{this.confirmLoading = false}) + }, + handleCancel() { + this.visible = false + this.detailed = false + }, + wmsControlRuleDetailDownloadExcelTemplate() { + WmsControlRuleDetailDownloadExcelTemplate({version: "v2"}).then((res) => { + downloadFile(res); + }).catch((err) => { + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + } + } + } +</script> + +<style scoped> +::v-deep .ant-upload.ant-upload-drag { + position: relative; + width: 140px; + height: 135px; + text-align: center; + background: #fafafa; + border: 1px dashed #d9d9d9; + border-radius: 2px; + cursor: pointer; + -webkit-transition: border-color 0.3s; + transition: border-color 0.3s; +} +::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) { + color: #ffc53d; + border-color: white; +} +</style> \ No newline at end of file diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue new file mode 100644 index 0000000..7eff19e --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue @@ -0,0 +1,604 @@ +锘�<template> + <div ref="boxOutWrap" class="boxOutWrap"> + <div ref="boxForm" class="boxForm"> + <a-card :bordered="false" :bodyStyle="tstyle"> + + <div class="table-page-search-wrapper" v-if="hasPerm('WmsControlRuleDetail:page')"> + <a-form layout="inline"> + <a-row :gutter="48"> + <a-col :md="8" :sm="24"> + <a-form-item label="鎺у埗灞炴�ц鍒橧D"> + <a-input v-model="queryParam.controlRuleId" allow-clear placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏈�楂樺簱瀛�"> + <a-input v-model="queryParam.maxImumqty" allow-clear placeholder="璇疯緭鍏ユ渶楂樺簱瀛�"/> + </a-form-item> + </a-col><template v-if="advanced"> + <a-col :md="8" :sm="24"> + <a-form-item label="鏈�浣庡簱瀛�"> + <a-input v-model="queryParam.minImumqty" allow-clear placeholder="璇疯緭鍏ユ渶浣庡簱瀛�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="瀹夊叏搴撳瓨"> + <a-input v-model="queryParam.safeImumqty" allow-clear placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏈�灏忓簱榫�"> + <a-input v-model="queryParam.minStorageAge" allow-clear placeholder="璇疯緭鍏ユ渶灏忓簱榫�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏈�澶у簱榫�"> + <a-input v-model="queryParam.maxStorageAge" allow-clear placeholder="璇疯緭鍏ユ渶澶у簱榫�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏄惁鍏嶆"> + <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isNotChek" placeholder="璇烽�夋嫨鏄惁鍏嶆"> + <a-select-option v-for="(item,index) in isNotChekData" :key="index" :value="item.code">{{ item.name }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="8" :sm="24"> + <a-form-item label="淇濊川鏈熷ぉ鏁�"> + <a-input v-model="queryParam.shelfLifeDays" allow-clear placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏄惁绂佺敤"> + <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="璇烽�夋嫨鏄惁绂佺敤"> + <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鏃堕棿"> + <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{ +format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangecreatedTime"/> + + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鏇存柊鏃堕棿"> + <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{ +format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangeupdatedTime"/> + + </a-form-item> + </a-col> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鑰呭悕绉�"> + <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="淇敼鑰呭悕绉�"> + <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�"/> + </a-form-item> + </a-col> </template> + + <a-col :md="8" :sm="24" > + <span class="table-page-search-submitButtons"> + <a-button type="primary" @click="$refs.table.refresh(true)" >鏌ヨ</a-button> + <a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button> + <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="advanced ? 'up' : 'down'"/> + </a> + </span> + </a-col> + + </a-row> + </a-form> + </div> + </a-card> + </div> + <a-card :bordered="false"> + <!-- :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" --> + <s-table + ref="table" + :columns="columns" + :data="loadData" + :alert="true" + @changeTablePage="pageInfo = $event" + :scroll="{x: true,y:tableHeight}" + :rowKey="(record) => record.id" + > + <template class="table-operator" slot="operator" v-if="hasPerm('WmsControlRuleDetail:add')" > + <div ref="actionBar" class="actionBar"> + <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()"> + 瀵煎叆 + </a-button> + <a-button type="info" v-if="hasPerm('WmsControlRuleDetail:exportExcel')" icon="download" @click="WmsControlRuleDetailToExcel()"> + 瀵煎嚭 + </a-button> + <a-button type="primary" v-if="hasPerm('WmsControlRuleDetail:add')" icon="plus" @click="$refs.addForm.add()">鏂板鎺у埗灞炴�ц鍒欐槑缁�</a-button> + </div> + </template> + <span slot="isNotChekscopedSlots" slot-scope="text"> + <div v-if="text===true "> + <a-tag color="green">鏄�</a-tag> + </div> + <div v-else-if="text==false"> + <a-tag color="volcano">鍚�</a-tag> + </div> + <div v-else=""></div> + </span> + <span slot="isDisabledscopedSlots" slot-scope="text"> + <div v-if="text===true "> + <a-tag color="green">鏄�</a-tag> + </div> + <div v-else-if="text==false"> + <a-tag color="volcano">鍚�</a-tag> + </div> + <div v-else=""></div> + </span> + <span slot="action" slot-scope="text, record"> + + <a v-if="hasPerm('WmsControlRuleDetail:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a> + <a-divider type="vertical" v-if="hasPerm('WmsControlRuleDetail:edit') & hasPerm('WmsControlRuleDetail:delete')"/> + <a-popconfirm v-if="hasPerm('WmsControlRuleDetail:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsControlRuleDetailDelete(record)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </s-table> + <add-form ref="addForm" @ok="handleOk" /> + <edit-form ref="editForm" @ok="handleOk" /> + <excel-form ref="excelForm" @ok="handleOk" /> + </a-card> + </div> +</template> +<script> + import { STable } from '@/components' + import moment from 'moment' + import { WmsControlRuleDetailPage, WmsControlRuleDetailDelete, WmsControlRuleDetailToExcel } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage' + //鑷畾涔塼able楂樺害 + import setTableHtMixin from '@/mixins/handleTableHt.js' + import addForm from './addForm.vue' + import { exportExcel } from '@/utils/exportToExcel' + import { downloadFile } from '@/utils/util' + import editForm from './editForm.vue' + import excelForm from './excelForm.vue' + export default { + mixins: [setTableHtMixin], + components: { + STable, + addForm, + editForm, + excelForm + }, + data () { + return { + advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴 + queryParam: {}, + pageInfo: { + current: 1, + pageSize: 10 + }, + columns: [ + { + title:'搴忓彿', + width: '60px', + align: 'center', + customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}` + }, + { + title: '鎺у埗灞炴�ц鍒橧D', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '140px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '140px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'controlRuleId' + }, + { + title: '鏈�楂樺簱瀛�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'maxImumqty' + }, + { + title: '鏈�浣庡簱瀛�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'minImumqty' + }, + { + title: '瀹夊叏搴撳瓨', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'safeImumqty' + }, + { + title: '鏈�灏忓簱榫�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'minStorageAge' + }, + { + title: '鏈�澶у簱榫�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'maxStorageAge' + }, + { + title: '鏄惁鍏嶆', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'isNotChek', + scopedSlots: { customRender: 'isNotChekscopedSlots' } + }, + { + title: '淇濊川鏈熷ぉ鏁�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'shelfLifeDays' + }, + { + title: '鏄惁绂佺敤', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'isDisabled', + scopedSlots: { customRender: 'isDisabledscopedSlots' } + }, + { + title: '鍒涘缓鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdTime' + }, + { + title: '鏇存柊鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedTime' + }, + { + title: '鍒涘缓鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdUserName' + }, + { + title: '淇敼鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedUserName' + } + ], + tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' }, + // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄 + loadData: parameter => { + return WmsControlRuleDetailPage(Object.assign(parameter, this.switchingDate())).then((res) => { + return res.data + }) + }, + selectedRowKeys: [], + selectedRows: [] + } + }, + created () { + if (this.hasPerm('WmsControlRuleDetail:edit') || this.hasPerm('WmsControlRuleDetail:delete')) { + this.columns.push({ + title: '鎿嶄綔', + width: '150px', + dataIndex: 'action', + scopedSlots: { customRender: 'action' } + }) + } + const path = this.$route.path + const columnStr = window.localStorage.getItem(path) + if(columnStr) { + var _columns = JSON.parse(columnStr) + this.columns.forEach(element => { + var fObj = _columns.find((item, index) => { + return item.dataIndex === element.dataIndex; + }) + if(fObj!=undefined && fObj!=null){ + element.checked=fObj.checked; + } + }); + } + const isNotChekOption = this.$options + this.isNotChekData = isNotChekOption.filters['dictData']('yes_true_false') + const isDisabledOption = this.$options + this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false') + + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + window.addEventListener( + 'resize', + () => { + this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害 + }, + false + ) + + }, + methods: { + moment, + /** + * 鏌ヨ鍙傛暟缁勮 + */ + switchingDate () { + const obj = JSON.parse(JSON.stringify(this.queryParam)) + return obj + }, + WmsControlRuleDetailDelete (record) { + WmsControlRuleDetailDelete(record).then((res) => { + if (res.success) { + this.$message.success('鍒犻櫎鎴愬姛') + this.$refs.table.refresh() + } else { + this.$message.error('鍒犻櫎澶辫触') // + res.message + } + }) + }, + + + WmsControlRuleDetailToExcel() { + this.loading = true + let entozh = {}; + const path = this.$route.path; + if (window.localStorage.getItem(path)) { + JSON.parse(window.localStorage.getItem(path)).forEach(item => { + if (item.dataIndex != 'action' && item.checked) { + entozh[item.dataIndex] = item.title + } + }) + } else { //鐩存帴鐐瑰鍑� + this.columns.forEach(item => { + if (item.dataIndex != 'action') { + entozh[item.dataIndex] = item.title + } + }) + } + WmsControlRuleDetailPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => { + this.loading = false; + //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁 + var arrDataCutout = this.columns.filter(v => v.customCutout == true); + res.data.rows.forEach(item => { + var arrKeys = Object.keys(item); + arrKeys.forEach(key => { + var strFieldDic = key + 'Data'; + //鏋氫妇杞�� + if (this[strFieldDic] && this[strFieldDic].length > 0) { + let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key])); + if (arrFieldDic.length > 0) { + item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�'; + } + } + // 鏃ユ湡鎴彇 + if (arrDataCutout.length > 0) { + arrDataCutout.forEach(itemIn => { + if (key == itemIn.dataIndex && item[key]) { + item[key] = item[key].split(" ")[0] + } + }) + } + }); + }) + exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`) + }).catch((err) => { + this.loading = false + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + }, + + + toggleAdvanced () { + this.advanced = !this.advanced + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + }, + onChangecreatedTime(date, dateString) { + this.queryParam.createdTime = dateString + }, + onChangeupdatedTime(date, dateString) { + this.queryParam.updatedTime = dateString + }, + handleOk () { + this.$refs.table.refresh() + }, + onSelectChange (selectedRowKeys, selectedRows) { + this.selectedRowKeys = selectedRowKeys + this.selectedRows = selectedRows + } + } + } +</script> +<style lang="less"> + .table-operator { + margin-bottom: 18px; + } + button { + margin-right: 8px; + } +</style> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue index dc89591..a916adf 100644 --- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue @@ -17,7 +17,7 @@ Content of Tab Pane 2 </a-tab-pane> <a-tab-pane key="3" tab="鎵规灞炴��"> - Content of Tab Pane 3 + 闇�姹傚緟瀹� </a-tab-pane> <a-tab-pane key="4" tab="鏇夸唬鍝佺鐞�"> <add-form-sub ref="addFormWmsSubstituteGood" @ok="handleOk" /> diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs new file mode 100644 index 0000000..cb04d39 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs @@ -0,0 +1,166 @@ +锘縰sing Admin.NET.Core; +using Admin.NET.Core.Service; +using System.ComponentModel.DataAnnotations; + +namespace Admin.NET.Application +{ + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐煡璇㈠弬鏁� + /// </summary> + public class WmsControlRuleSearch : PageInputBase + { + /// <summary> + /// 瑙勫垯缂栧彿 + /// </summary> + public virtual string RuleCode { get; set; } + + /// <summary> + /// 瑙勫垯鍚嶇О + /// </summary> + public virtual string RuleName { get; set; } + + /// <summary> + /// 瑙勫垯鎻忚堪 + /// </summary> + public virtual string RuleDesc { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public virtual List<string> CreatedTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public virtual List<string> UpdatedTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭悕绉� + /// </summary> + public virtual string CreatedUserName { get; set; } + + /// <summary> + /// 淇敼鑰呭悕绉� + /// </summary> + public virtual string UpdatedUserName { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欎笉鍒嗛〉鏌ヨ鍙傛暟 + /// </summary> + public class WmsControlRuleSearchNonPage : PageInputNonPageBase + { + /// <summary> + /// 瑙勫垯缂栧彿 + /// </summary> + public virtual string RuleCode { get; set; } + + /// <summary> + /// 瑙勫垯鍚嶇О + /// </summary> + public virtual string RuleName { get; set; } + + /// <summary> + /// 瑙勫垯鎻忚堪 + /// </summary> + public virtual string RuleDesc { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public virtual List<DateTimeOffset>? CreatedTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public virtual List<DateTimeOffset>? UpdatedTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭悕绉� + /// </summary> + public virtual string CreatedUserName { get; set; } + + /// <summary> + /// 淇敼鑰呭悕绉� + /// </summary> + public virtual string UpdatedUserName { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欒緭鍏ュ弬鏁� + /// </summary> + public class WmsControlRuleInput + { + /// <summary> + /// 瑙勫垯缂栧彿 + /// </summary> + [Required(ErrorMessage = "瑙勫垯缂栧彿涓嶈兘涓虹┖")] + public virtual string RuleCode { get; set; } + + /// <summary> + /// 瑙勫垯鍚嶇О + /// </summary> + [Required(ErrorMessage = "瑙勫垯鍚嶇О涓嶈兘涓虹┖")] + public virtual string RuleName { get; set; } + + /// <summary> + /// 瑙勫垯鎻忚堪 + /// </summary> + public virtual string RuleDesc { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + [Required(ErrorMessage = "鏄惁绂佺敤涓嶈兘涓虹┖")] + public virtual bool IsDisabled { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐柊澧炲弬鏁� + /// </summary> + public class AddWmsControlRuleInput : WmsControlRuleInput + { + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欏垹闄ゅ弬鏁� + /// </summary> + public class DeleteWmsControlRuleInput : BaseId + { + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐洿鏂板弬鏁� + /// </summary> + public class UpdateWmsControlRuleInput : WmsControlRuleInput + { + /// <summary> + /// Id涓婚敭 + /// </summary> + [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")] + public long? Id { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欒幏鍙栧崟涓弬鏁� + /// </summary> + public class QueryeWmsControlRuleInput : BaseId + { + + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs new file mode 100644 index 0000000..62887e5 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs @@ -0,0 +1,57 @@ +锘縰sing Admin.NET.Core.Util.LowCode.Dto; +using System; + +namespace Admin.NET.Application +{ + /// <summary> + /// 鎺у埗灞炴�ц鍒欒緭鍑哄弬鏁� + /// </summary> + public class WmsControlRuleOutput + { + /// <summary> + /// 瑙勫垯缂栧彿 + /// </summary> + public string RuleCode { get; set; } + + /// <summary> + /// 瑙勫垯鍚嶇О + /// </summary> + public string RuleName { get; set; } + + /// <summary> + /// 瑙勫垯鎻忚堪 + /// </summary> + public string RuleDesc { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public bool IsDisabled { get; set; } + + /// <summary> + /// Id涓婚敭 + /// </summary> + public long? Id { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTimeOffset? CreatedTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTimeOffset? UpdatedTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭悕绉� + /// </summary> + public string CreatedUserName { get; set; } + + /// <summary> + /// 淇敼鑰呭悕绉� + /// </summary> + public string UpdatedUserName { get; set; } + + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.cs new file mode 100644 index 0000000..d52e0a8 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.cs @@ -0,0 +1,22 @@ +锘縰sing Admin.NET.Core; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; + +namespace Admin.NET.Application +{ + public interface IWmsControlRuleService + { + Task<WmsControlRuleOutput> Get([FromQuery] QueryeWmsControlRuleInput input); + Task<List<WmsControlRuleOutput>> List([FromQuery] WmsControlRuleInput input); + Task<PageResult<WmsControlRuleOutput>> Page([FromQuery] WmsControlRuleSearch input); + Task<List<WmsControlRuleOutput>> ListNonPageAsync([FromQuery] WmsControlRuleSearchNonPage input); + + Task Add(AddWmsControlRuleInput input); + Task Update(UpdateWmsControlRuleInput input); + Task Delete(DeleteWmsControlRuleInput input); + Task<int> ImportExcelAsync(IFormFile file); + IActionResult DownloadExcelTemplate(string version); + } +} \ No newline at end of file diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs new file mode 100644 index 0000000..95b5891 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs @@ -0,0 +1,18 @@ +锘縰sing Mapster; +using Admin.NET.Core; + +namespace Admin.NET.Application +{ + public class WmsControlRuleMapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + config.ForType<AddWmsControlRuleInput, WmsControlRule>() + ; + config.ForType<UpdateWmsControlRuleInput, WmsControlRule>() + ; + config.ForType<WmsControlRule, WmsControlRuleOutput>() + ; + } + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs new file mode 100644 index 0000000..ba26582 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs @@ -0,0 +1,418 @@ +锘縰sing Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Admin.NET.Core; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System.Linq.Dynamic.Core; +using Microsoft.AspNetCore.Http; +using System.Text; +using System.Web; +using System.ComponentModel; +using System.Data; +namespace Admin.NET.Application +{ + /// <summary> + /// 鎺у埗灞炴�ц鍒欐湇鍔� + /// </summary> + [ApiDescriptionSettings("WmsBase", Name = "WmsControlRule", Order = 100)] + [Route("api")] + public class WmsControlRuleService : IWmsControlRuleService, IDynamicApiController, ITransient + { + private readonly IRepository<WmsControlRule,MasterDbContextLocator> _wmsControlRuleRep; + private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; + private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; + private readonly ISysExcelTemplateService _sysExcelTemplateService; + private readonly static object _lock = new(); + + public WmsControlRuleService( + IRepository<WmsControlRule,MasterDbContextLocator> wmsControlRuleRep + ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep + ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep + ,ISysExcelTemplateService sysExcelTemplateService + ) + { + _wmsControlRuleRep = wmsControlRuleRep; + _sysDictTypeRep = sysDictTypeRep; + _sysDictDataRep = sysDictDataRep; + _sysExcelTemplateService = sysExcelTemplateService; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ鎺у埗灞炴�ц鍒� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsControlRule/page")] + public async Task<PageResult<WmsControlRuleOutput>> Page([FromQuery] WmsControlRuleSearch input) + { + var wmsControlRules = await _wmsControlRuleRep.DetachedEntities + .Where(!string.IsNullOrEmpty(input.RuleCode), u => u.RuleCode == input.RuleCode) + .Where(!string.IsNullOrEmpty(input.RuleName), u => u.RuleName == input.RuleName) + .Where(!string.IsNullOrEmpty(input.RuleDesc), u => u.RuleDesc == input.RuleDesc) + .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled) + .Where(input.CreatedTime!=null, u => u.CreatedTime>= Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1])) + .Where(input.UpdatedTime!=null, u => u.UpdatedTime>= Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1])) + .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName) + .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName) + .OrderBy(PageInputOrder.OrderBuilder<WmsControlRuleSearch>(input)) + .ProjectToType<WmsControlRuleOutput>() + .ToADPagedListAsync(input.PageNo, input.PageSize); + return wmsControlRules; + } + + /// <summary> + /// 涓嶅垎椤垫煡璇㈡帶鍒跺睘鎬ц鍒欏垪琛� + /// </summary> + /// <param name="input">鎺у埗灞炴�ц鍒欐煡璇㈠弬鏁�</param> + /// <returns>(鎺у埗灞炴�ц鍒�)瀹炰緥鍒楄〃</returns> + [HttpGet("WmsControlRule/listNonPage")] + public async Task<List<WmsControlRuleOutput>> ListNonPageAsync([FromQuery] WmsControlRuleSearchNonPage input) + { + var pRuleCode = input.RuleCode?.Trim() ?? ""; + var pRuleName = input.RuleName?.Trim() ?? ""; + var pRuleDesc = input.RuleDesc?.Trim() ?? ""; + var pIsDisabled = input.IsDisabled; + var pCreatedTime = input.CreatedTime; + var pUpdatedTime = input.UpdatedTime; + var pCreatedUserName = input.CreatedUserName?.Trim() ?? ""; + var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? ""; + var wmsControlRules = await _wmsControlRuleRep.DetachedEntities + .Where(!string.IsNullOrEmpty(pRuleCode), u => u.RuleCode == pRuleCode) + .Where(!string.IsNullOrEmpty(pRuleName), u => u.RuleName == pRuleName) + .Where(!string.IsNullOrEmpty(pRuleDesc), u => u.RuleDesc == pRuleDesc) + .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled) + .Where(input.CreatedTime!=null, u => u.CreatedTime>= Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1])) + .Where(input.UpdatedTime!=null, u => u.UpdatedTime>= Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1])) + .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName) + .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName) + .OrderBy(PageInputOrder.OrderNonPageBuilder(input)) + .ProjectToType<WmsControlRuleOutput>() + .ToListAsync(); + return wmsControlRules; + } + + /// <summary> + /// 鑾峰彇鎺у埗灞炴�ц鍒� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsControlRule/detail")] + public async Task<WmsControlRuleOutput> Get([FromQuery] QueryeWmsControlRuleInput input) + { + return (await _wmsControlRuleRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsControlRuleOutput>(); + } + + /// <summary> + /// 鑾峰彇鎺у埗灞炴�ц鍒欏垪琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsControlRule/list")] + public async Task<List<WmsControlRuleOutput>> List([FromQuery] WmsControlRuleInput input) + { + return await _wmsControlRuleRep.DetachedEntities.ProjectToType<WmsControlRuleOutput>().ToListAsync(); + } + + #region 澧炪�佸垹銆佹敼 + + /// <summary> + /// 澧炲姞鎺у埗灞炴�ц鍒� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsControlRule/add")] + public async Task Add(AddWmsControlRuleInput input) + { + var wmsControlRule = input.Adapt<WmsControlRule>(); + //楠岃瘉 + await CheckExisit(wmsControlRule); + + wmsControlRule.CreatedUserId = wmsControlRule.UpdatedUserId = SysHelper.GetUserId(); + wmsControlRule.CreatedUserName = wmsControlRule.UpdatedUserName = SysHelper.GetUserName(); + wmsControlRule.CreatedTime = wmsControlRule.UpdatedTime = SysHelper.GetNowTime(); + await _wmsControlRuleRep.InsertAsync(wmsControlRule); + } + + /// <summary> + /// 鍒犻櫎鎺у埗灞炴�ц鍒� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsControlRule/delete")] + public async Task Delete(DeleteWmsControlRuleInput input) + { + var wmsControlRule = await _wmsControlRuleRep.FirstOrDefaultAsync(u => u.Id == input.Id); + await _wmsControlRuleRep.DeleteAsync(wmsControlRule); + + } + + /// <summary> + /// 鏇存柊鎺у埗灞炴�ц鍒� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsControlRule/edit")] + public async Task Update(UpdateWmsControlRuleInput input) + { + var isExist = await _wmsControlRuleRep.AnyAsync(u => u.Id == input.Id, false); + if (!isExist) throw Oops.Oh(ErrorCode.D1002); + + var wmsControlRule = input.Adapt<WmsControlRule>(); + //楠岃瘉 + await CheckExisit(wmsControlRule,true); + + wmsControlRule.UpdatedUserId = SysHelper.GetUserId(); + wmsControlRule.UpdatedUserName = SysHelper.GetUserName(); + wmsControlRule.UpdatedTime = SysHelper.GetNowTime(); + await _wmsControlRuleRep.UpdateAsync(wmsControlRule,ignoreNullValues:true); + } + + #endregion + + #region 瀵煎叆 + + /// <summary> + /// Excel妯℃澘瀵煎叆鎺у埗灞炴�ц鍒欏姛鑳� + /// </summary> + /// <param name="file">Excel妯℃澘鏂囦欢</param> + /// <returns>瀵煎叆鐨勮褰曟暟</returns> + [HttpPost("WmsControlRule/importExcel")] + public async Task<int> ImportExcelAsync(IFormFile file) + { + int _HeadStartLine = 2;//绗�1琛屾槸璇存槑,绗�2琛屾槸鍒楀悕 + int _DataStartLine = 3;//绗�3琛屽紑濮嬫槸鏁版嵁 + + DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine); + var addList =await CommonImport(importDataTable, _DataStartLine); + + lock (_lock) + { + _wmsControlRuleRep.InsertAsync(addList); + + } + await Task.CompletedTask; + return addList.Count; + } + + /// <summary> + /// DataTable杞崲瀹炰綋瀵硅薄鍒楄〃 + /// </summary> + /// <param name="dataTable"></param> + /// <param name="dataStartLine">妯$増鍒楀悕寮�濮嬭</param> + /// <returns></returns> + private async Task<List<WmsControlRule>> CommonImport(DataTable dataTable, int dataStartLine) + { + + var details = new List<WmsControlRule>(); + int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭 + foreach (System.Data.DataRow row in dataTable.Rows) + { + index++; + + //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛� + + var addItem = new WmsControlRule() + { + CreatedTime = SysHelper.GetNowTime(), + CreatedUserId = SysHelper.GetUserId(), + CreatedUserName = SysHelper.GetUserName(), + UpdatedTime = SysHelper.GetNowTime(), + UpdatedUserId = SysHelper.GetUserId(), + UpdatedUserName = SysHelper.GetUserName() + }; + #region 瀹氫箟鍙橀噺 + var _RuleCode = "";//瑙勫垯缂栧彿 + var _RuleName = "";//瑙勫垯鍚嶇О + var _RuleDesc = "";//瑙勫垯鎻忚堪 + var _IsDisabled = "";//鏄惁绂佺敤 + var _Id = "";//Id涓婚敭 + #endregion + + + #region 鍙栧�� + _RuleCode = row["瑙勫垯缂栧彿"]?.ToString() ; + _RuleName = row["瑙勫垯鍚嶇О"]?.ToString() ; + _RuleDesc = row["瑙勫垯鎻忚堪"]?.ToString() ; + _IsDisabled = row["鏄惁绂佺敤"]?.ToString() ; + _Id = row["Id涓婚敭"]?.ToString() ; + #endregion + + + #region 楠岃瘉 + + if (string.IsNullOrEmpty(_RuleCode)) + { + throw Oops.Oh($"绗瑊index}琛孾瑙勫垯缂栧彿]{_RuleCode}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_RuleCode)) + { + addItem.RuleCode = (string)_RuleCode; + } + + if (string.IsNullOrEmpty(_RuleName)) + { + throw Oops.Oh($"绗瑊index}琛孾瑙勫垯鍚嶇О]{_RuleName}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_RuleName)) + { + addItem.RuleName = (string)_RuleName; + } + if(!string.IsNullOrEmpty(_RuleDesc)) + { + addItem.RuleDesc = (string)_RuleDesc; + } + + if (string.IsNullOrEmpty(_IsDisabled)) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_IsDisabled)) + { + if(!_IsDisabled.Equals("鏄�") && !_IsDisabled.Equals("鍚�")) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}鍊间笉姝g‘锛�"); + } + else + { + bool outIsDisabled = _IsDisabled.Equals("鏄�") ? true : false; + addItem.IsDisabled = outIsDisabled; + } + } + + if(!string.IsNullOrEmpty(_Id)) + { + if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id)) + { + throw Oops.Oh($"绗瑊index}琛孾Id涓婚敭]{_Id}鍊间笉姝g‘锛�"); + } + if (outId <= 0&&!string.IsNullOrEmpty(_Id)) + { + throw Oops.Oh($"绗瑊index}琛孾Id涓婚敭]{_Id}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.Id = outId; + } + + } + #endregion + + + + details.Add(addItem); + } + //楠岄噸 + await CheckExisitForImport(details); + + return details; + } + + /// <summary> + /// 鏍规嵁鐗堟湰涓嬭浇鎺у埗灞炴�ц鍒欑殑Excel瀵煎叆妯℃澘 + /// </summary> + /// <param name="version">妯℃澘鐗堟湰</param> + /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns> + [HttpGet("WmsControlRule/downloadExcelTemplate")] + public IActionResult DownloadExcelTemplate([FromQuery] string version) + { + string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsControlRule{TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増鍚嶇О鍚庣紑}.xlsx"; + var fileName = HttpUtility.UrlEncode($"瀵煎叆妯℃澘(鎺у埗灞炴�ц鍒�).xlsx", Encoding.GetEncoding("UTF-8")); + return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; + } + + #endregion + + #region 绉佹湁鏂规硶 + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-鏁版嵁搴� + /// </summary> + /// <param name="input"></param> + /// <param name="isEdit"></param> + /// <returns></returns> + private async Task CheckExisit( WmsControlRule input,bool isEdit=false) + { + + + + bool isExist = false; + if (!isEdit)//鏂板 + { + //鏁版嵁鏄惁瀛樺湪閲嶅 + isExist = await _wmsControlRuleRep.AnyAsync(u => + u.RuleCode.Equals(input.RuleCode) + ,false); + } + else//缂栬緫 + { + + + + //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅 + isExist = await _wmsControlRuleRep.AnyAsync(u => + u.Id != input.Id + &&u.RuleCode.Equals(input.RuleCode) + ,false); + } + + + + if (isExist) throw Oops.Oh(ErrorCode.E0001); + } + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇� + /// </summary> + /// <param name="inputs"></param> + /// <returns></returns> + private async Task CheckExisitForImport(List<WmsControlRule> inputs) + { + //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + if (inputs?.Count <= 0) + { + throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖"); + } + //鏁版嵁鏄惁閲嶅 + var existExcelItem = inputs.GroupBy(g => new { + g.RuleCode + }) + .Where(g => g.Count() > 1) + .Select(s => new { + s.Key.RuleCode + }).FirstOrDefault(); + if (existExcelItem != null) + { + var wmsControlRule = existExcelItem.Adapt<WmsControlRule>(); + var item= existExcelItem.Adapt<WmsControlRule>(); + throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,瑙勫垯缂栧彿[{item.RuleCode}]宸插瓨鍦�"); + } + + + + + //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + var existDBItem = await _wmsControlRuleRep.DetachedEntities.FirstOrDefaultAsync(w=> + inputs.Select(s=>"" + +s.RuleCode + ) + .Contains("" + +w.RuleCode + )); + if (existDBItem != null) + { + var wmsControlRule = existExcelItem.Adapt<WmsControlRule>(); + var item= existExcelItem.Adapt<WmsControlRule>(); + throw Oops.Oh($"绯荤粺涓�,瑙勫垯缂栧彿[{item.RuleCode}]宸插瓨鍦�"); + } + } + + #endregion + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs new file mode 100644 index 0000000..edc5546 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs @@ -0,0 +1,247 @@ +锘縰sing Admin.NET.Core; +using Admin.NET.Core.Service; +using System.ComponentModel.DataAnnotations; + +namespace Admin.NET.Application +{ + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗘煡璇㈠弬鏁� + /// </summary> + public class WmsControlRuleDetailSearch : PageInputBase + { + /// <summary> + /// 鎺у埗灞炴�ц鍒橧D + /// </summary> + public virtual long? ControlRuleId { get; set; } + + /// <summary> + /// 鏈�楂樺簱瀛� + /// </summary> + public virtual decimal? MaxImumqty { get; set; } + + /// <summary> + /// 鏈�浣庡簱瀛� + /// </summary> + public virtual decimal? MinImumqty { get; set; } + + /// <summary> + /// 瀹夊叏搴撳瓨 + /// </summary> + public virtual decimal? SafeImumqty { get; set; } + + /// <summary> + /// 鏈�灏忓簱榫� + /// </summary> + public virtual decimal? MinStorageAge { get; set; } + + /// <summary> + /// 鏈�澶у簱榫� + /// </summary> + public virtual decimal? MaxStorageAge { get; set; } + + /// <summary> + /// 鏄惁鍏嶆 + /// </summary> + public virtual bool? IsNotChek { get; set; } + + /// <summary> + /// 淇濊川鏈熷ぉ鏁� + /// </summary> + public virtual decimal? ShelfLifeDays { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public virtual List<string> CreatedTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public virtual List<string> UpdatedTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭悕绉� + /// </summary> + public virtual string CreatedUserName { get; set; } + + /// <summary> + /// 淇敼鑰呭悕绉� + /// </summary> + public virtual string UpdatedUserName { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗕笉鍒嗛〉鏌ヨ鍙傛暟 + /// </summary> + public class WmsControlRuleDetailSearchNonPage : PageInputNonPageBase + { + /// <summary> + /// 鎺у埗灞炴�ц鍒橧D + /// </summary> + public virtual long? ControlRuleId { get; set; } + + /// <summary> + /// 鏈�楂樺簱瀛� + /// </summary> + public virtual decimal? MaxImumqty { get; set; } + + /// <summary> + /// 鏈�浣庡簱瀛� + /// </summary> + public virtual decimal? MinImumqty { get; set; } + + /// <summary> + /// 瀹夊叏搴撳瓨 + /// </summary> + public virtual decimal? SafeImumqty { get; set; } + + /// <summary> + /// 鏈�灏忓簱榫� + /// </summary> + public virtual decimal? MinStorageAge { get; set; } + + /// <summary> + /// 鏈�澶у簱榫� + /// </summary> + public virtual decimal? MaxStorageAge { get; set; } + + /// <summary> + /// 鏄惁鍏嶆 + /// </summary> + public virtual bool? IsNotChek { get; set; } + + /// <summary> + /// 淇濊川鏈熷ぉ鏁� + /// </summary> + public virtual decimal? ShelfLifeDays { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public virtual List<DateTimeOffset>? CreatedTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public virtual List<DateTimeOffset>? UpdatedTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭悕绉� + /// </summary> + public virtual string CreatedUserName { get; set; } + + /// <summary> + /// 淇敼鑰呭悕绉� + /// </summary> + public virtual string UpdatedUserName { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗚緭鍏ュ弬鏁� + /// </summary> + public class WmsControlRuleDetailInput + { + /// <summary> + /// 鎺у埗灞炴�ц鍒橧D + /// </summary> + [Required(ErrorMessage = "鎺у埗灞炴�ц鍒橧D涓嶈兘涓虹┖")] + public virtual long ControlRuleId { get; set; } + + /// <summary> + /// 鏈�楂樺簱瀛� + /// </summary> + [Required(ErrorMessage = "鏈�楂樺簱瀛樹笉鑳戒负绌�")] + public virtual decimal MaxImumqty { get; set; } + + /// <summary> + /// 鏈�浣庡簱瀛� + /// </summary> + [Required(ErrorMessage = "鏈�浣庡簱瀛樹笉鑳戒负绌�")] + public virtual decimal MinImumqty { get; set; } + + /// <summary> + /// 瀹夊叏搴撳瓨 + /// </summary> + [Required(ErrorMessage = "瀹夊叏搴撳瓨涓嶈兘涓虹┖")] + public virtual decimal SafeImumqty { get; set; } + + /// <summary> + /// 鏈�灏忓簱榫� + /// </summary> + [Required(ErrorMessage = "鏈�灏忓簱榫勪笉鑳戒负绌�")] + public virtual decimal MinStorageAge { get; set; } + + /// <summary> + /// 鏈�澶у簱榫� + /// </summary> + [Required(ErrorMessage = "鏈�澶у簱榫勪笉鑳戒负绌�")] + public virtual decimal MaxStorageAge { get; set; } + + /// <summary> + /// 鏄惁鍏嶆 + /// </summary> + [Required(ErrorMessage = "鏄惁鍏嶆涓嶈兘涓虹┖")] + public virtual bool IsNotChek { get; set; } + + /// <summary> + /// 淇濊川鏈熷ぉ鏁� + /// </summary> + [Required(ErrorMessage = "淇濊川鏈熷ぉ鏁颁笉鑳戒负绌�")] + public virtual decimal ShelfLifeDays { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + [Required(ErrorMessage = "鏄惁绂佺敤涓嶈兘涓虹┖")] + public virtual bool IsDisabled { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗘柊澧炲弬鏁� + /// </summary> + public class AddWmsControlRuleDetailInput : WmsControlRuleDetailInput + { + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗗垹闄ゅ弬鏁� + /// </summary> + public class DeleteWmsControlRuleDetailInput : BaseId + { + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗘洿鏂板弬鏁� + /// </summary> + public class UpdateWmsControlRuleDetailInput : WmsControlRuleDetailInput + { + /// <summary> + /// Id涓婚敭 + /// </summary> + [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")] + public long? Id { get; set; } + + } + + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗚幏鍙栧崟涓弬鏁� + /// </summary> + public class QueryeWmsControlRuleDetailInput : BaseId + { + + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs new file mode 100644 index 0000000..667c7c1 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs @@ -0,0 +1,82 @@ +锘縰sing Admin.NET.Core.Util.LowCode.Dto; +using System; + +namespace Admin.NET.Application +{ + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗚緭鍑哄弬鏁� + /// </summary> + public class WmsControlRuleDetailOutput + { + /// <summary> + /// 鎺у埗灞炴�ц鍒橧D + /// </summary> + public long ControlRuleId { get; set; } + + /// <summary> + /// 鏈�楂樺簱瀛� + /// </summary> + public decimal MaxImumqty { get; set; } + + /// <summary> + /// 鏈�浣庡簱瀛� + /// </summary> + public decimal MinImumqty { get; set; } + + /// <summary> + /// 瀹夊叏搴撳瓨 + /// </summary> + public decimal SafeImumqty { get; set; } + + /// <summary> + /// 鏈�灏忓簱榫� + /// </summary> + public decimal MinStorageAge { get; set; } + + /// <summary> + /// 鏈�澶у簱榫� + /// </summary> + public decimal MaxStorageAge { get; set; } + + /// <summary> + /// 鏄惁鍏嶆 + /// </summary> + public bool IsNotChek { get; set; } + + /// <summary> + /// 淇濊川鏈熷ぉ鏁� + /// </summary> + public decimal ShelfLifeDays { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public bool IsDisabled { get; set; } + + /// <summary> + /// Id涓婚敭 + /// </summary> + public long? Id { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTimeOffset? CreatedTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTimeOffset? UpdatedTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭悕绉� + /// </summary> + public string CreatedUserName { get; set; } + + /// <summary> + /// 淇敼鑰呭悕绉� + /// </summary> + public string UpdatedUserName { get; set; } + + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.cs new file mode 100644 index 0000000..98cdfde --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.cs @@ -0,0 +1,22 @@ +锘縰sing Admin.NET.Core; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; + +namespace Admin.NET.Application +{ + public interface IWmsControlRuleDetailService + { + Task<WmsControlRuleDetailOutput> Get([FromQuery] QueryeWmsControlRuleDetailInput input); + Task<List<WmsControlRuleDetailOutput>> List([FromQuery] WmsControlRuleDetailInput input); + Task<PageResult<WmsControlRuleDetailOutput>> Page([FromQuery] WmsControlRuleDetailSearch input); + Task<List<WmsControlRuleDetailOutput>> ListNonPageAsync([FromQuery] WmsControlRuleDetailSearchNonPage input); + + Task Add(AddWmsControlRuleDetailInput input); + Task Update(UpdateWmsControlRuleDetailInput input); + Task Delete(DeleteWmsControlRuleDetailInput input); + Task<int> ImportExcelAsync(IFormFile file); + IActionResult DownloadExcelTemplate(string version); + } +} \ No newline at end of file diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs new file mode 100644 index 0000000..f091eb4 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs @@ -0,0 +1,18 @@ +锘縰sing Mapster; +using Admin.NET.Core; + +namespace Admin.NET.Application +{ + public class WmsControlRuleDetailMapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + config.ForType<AddWmsControlRuleDetailInput, WmsControlRuleDetail>() + ; + config.ForType<UpdateWmsControlRuleDetailInput, WmsControlRuleDetail>() + ; + config.ForType<WmsControlRuleDetail, WmsControlRuleDetailOutput>() + ; + } + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs new file mode 100644 index 0000000..43c03b9 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs @@ -0,0 +1,592 @@ +锘縰sing Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Admin.NET.Core; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System.Linq.Dynamic.Core; +using Microsoft.AspNetCore.Http; +using System.Text; +using System.Web; +using System.ComponentModel; +using System.Data; +namespace Admin.NET.Application +{ + /// <summary> + /// 鎺у埗灞炴�ц鍒欐槑缁嗘湇鍔� + /// </summary> + [ApiDescriptionSettings("WmsBase", Name = "WmsControlRuleDetail", Order = 100)] + [Route("api")] + public class WmsControlRuleDetailService : IWmsControlRuleDetailService, IDynamicApiController, ITransient + { + private readonly IRepository<WmsControlRuleDetail,MasterDbContextLocator> _wmsControlRuleDetailRep; + private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; + private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; + private readonly ISysExcelTemplateService _sysExcelTemplateService; + private readonly static object _lock = new(); + + public WmsControlRuleDetailService( + IRepository<WmsControlRuleDetail,MasterDbContextLocator> wmsControlRuleDetailRep + ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep + ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep + ,ISysExcelTemplateService sysExcelTemplateService + ) + { + _wmsControlRuleDetailRep = wmsControlRuleDetailRep; + _sysDictTypeRep = sysDictTypeRep; + _sysDictDataRep = sysDictDataRep; + _sysExcelTemplateService = sysExcelTemplateService; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ鎺у埗灞炴�ц鍒欐槑缁� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsControlRuleDetail/page")] + public async Task<PageResult<WmsControlRuleDetailOutput>> Page([FromQuery] WmsControlRuleDetailSearch input) + { + var wmsControlRuleDetails = await _wmsControlRuleDetailRep.DetachedEntities + .Where(input.ControlRuleId != null, u => u.ControlRuleId == input.ControlRuleId) + .Where(input.MaxImumqty != null, u => u.MaxImumqty == input.MaxImumqty) + .Where(input.MinImumqty != null, u => u.MinImumqty == input.MinImumqty) + .Where(input.SafeImumqty != null, u => u.SafeImumqty == input.SafeImumqty) + .Where(input.MinStorageAge != null, u => u.MinStorageAge == input.MinStorageAge) + .Where(input.MaxStorageAge != null, u => u.MaxStorageAge == input.MaxStorageAge) + .Where(input.IsNotChek != null, u => u.IsNotChek == input.IsNotChek) + .Where(input.ShelfLifeDays != null, u => u.ShelfLifeDays == input.ShelfLifeDays) + .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled) + .Where(input.CreatedTime!=null, u => u.CreatedTime>= Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1])) + .Where(input.UpdatedTime!=null, u => u.UpdatedTime>= Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1])) + .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName) + .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName) + .OrderBy(PageInputOrder.OrderBuilder<WmsControlRuleDetailSearch>(input)) + .ProjectToType<WmsControlRuleDetailOutput>() + .ToADPagedListAsync(input.PageNo, input.PageSize); + return wmsControlRuleDetails; + } + + /// <summary> + /// 涓嶅垎椤垫煡璇㈡帶鍒跺睘鎬ц鍒欐槑缁嗗垪琛� + /// </summary> + /// <param name="input">鎺у埗灞炴�ц鍒欐槑缁嗘煡璇㈠弬鏁�</param> + /// <returns>(鎺у埗灞炴�ц鍒欐槑缁�)瀹炰緥鍒楄〃</returns> + [HttpGet("WmsControlRuleDetail/listNonPage")] + public async Task<List<WmsControlRuleDetailOutput>> ListNonPageAsync([FromQuery] WmsControlRuleDetailSearchNonPage input) + { + var pControlRuleId = input.ControlRuleId; + var pMaxImumqty = input.MaxImumqty; + var pMinImumqty = input.MinImumqty; + var pSafeImumqty = input.SafeImumqty; + var pMinStorageAge = input.MinStorageAge; + var pMaxStorageAge = input.MaxStorageAge; + var pIsNotChek = input.IsNotChek; + var pShelfLifeDays = input.ShelfLifeDays; + var pIsDisabled = input.IsDisabled; + var pCreatedTime = input.CreatedTime; + var pUpdatedTime = input.UpdatedTime; + var pCreatedUserName = input.CreatedUserName?.Trim() ?? ""; + var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? ""; + var wmsControlRuleDetails = await _wmsControlRuleDetailRep.DetachedEntities + .Where(pControlRuleId != null, u => u.ControlRuleId == pControlRuleId) + .Where(pMaxImumqty != null, u => u.MaxImumqty == pMaxImumqty) + .Where(pMinImumqty != null, u => u.MinImumqty == pMinImumqty) + .Where(pSafeImumqty != null, u => u.SafeImumqty == pSafeImumqty) + .Where(pMinStorageAge != null, u => u.MinStorageAge == pMinStorageAge) + .Where(pMaxStorageAge != null, u => u.MaxStorageAge == pMaxStorageAge) + .Where(pIsNotChek != null, u => u.IsNotChek == pIsNotChek) + .Where(pShelfLifeDays != null, u => u.ShelfLifeDays == pShelfLifeDays) + .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled) + .Where(input.CreatedTime!=null, u => u.CreatedTime>= Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1])) + .Where(input.UpdatedTime!=null, u => u.UpdatedTime>= Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1])) + .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName) + .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName) + .OrderBy(PageInputOrder.OrderNonPageBuilder(input)) + .ProjectToType<WmsControlRuleDetailOutput>() + .ToListAsync(); + return wmsControlRuleDetails; + } + + /// <summary> + /// 鑾峰彇鎺у埗灞炴�ц鍒欐槑缁� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsControlRuleDetail/detail")] + public async Task<WmsControlRuleDetailOutput> Get([FromQuery] QueryeWmsControlRuleDetailInput input) + { + return (await _wmsControlRuleDetailRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsControlRuleDetailOutput>(); + } + + /// <summary> + /// 鑾峰彇鎺у埗灞炴�ц鍒欐槑缁嗗垪琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsControlRuleDetail/list")] + public async Task<List<WmsControlRuleDetailOutput>> List([FromQuery] WmsControlRuleDetailInput input) + { + return await _wmsControlRuleDetailRep.DetachedEntities.ProjectToType<WmsControlRuleDetailOutput>().ToListAsync(); + } + + #region 澧炪�佸垹銆佹敼 + + /// <summary> + /// 澧炲姞鎺у埗灞炴�ц鍒欐槑缁� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsControlRuleDetail/add")] + public async Task Add(AddWmsControlRuleDetailInput input) + { + var wmsControlRuleDetail = input.Adapt<WmsControlRuleDetail>(); + //楠岃瘉 + await CheckExisit(wmsControlRuleDetail); + + wmsControlRuleDetail.CreatedUserId = wmsControlRuleDetail.UpdatedUserId = SysHelper.GetUserId(); + wmsControlRuleDetail.CreatedUserName = wmsControlRuleDetail.UpdatedUserName = SysHelper.GetUserName(); + wmsControlRuleDetail.CreatedTime = wmsControlRuleDetail.UpdatedTime = SysHelper.GetNowTime(); + await _wmsControlRuleDetailRep.InsertAsync(wmsControlRuleDetail); + } + + /// <summary> + /// 鍒犻櫎鎺у埗灞炴�ц鍒欐槑缁� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsControlRuleDetail/delete")] + public async Task Delete(DeleteWmsControlRuleDetailInput input) + { + var wmsControlRuleDetail = await _wmsControlRuleDetailRep.FirstOrDefaultAsync(u => u.Id == input.Id); + await _wmsControlRuleDetailRep.DeleteAsync(wmsControlRuleDetail); + + } + + /// <summary> + /// 鏇存柊鎺у埗灞炴�ц鍒欐槑缁� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsControlRuleDetail/edit")] + public async Task Update(UpdateWmsControlRuleDetailInput input) + { + var isExist = await _wmsControlRuleDetailRep.AnyAsync(u => u.Id == input.Id, false); + if (!isExist) throw Oops.Oh(ErrorCode.D1002); + + var wmsControlRuleDetail = input.Adapt<WmsControlRuleDetail>(); + //楠岃瘉 + await CheckExisit(wmsControlRuleDetail,true); + + wmsControlRuleDetail.UpdatedUserId = SysHelper.GetUserId(); + wmsControlRuleDetail.UpdatedUserName = SysHelper.GetUserName(); + wmsControlRuleDetail.UpdatedTime = SysHelper.GetNowTime(); + await _wmsControlRuleDetailRep.UpdateAsync(wmsControlRuleDetail,ignoreNullValues:true); + } + + #endregion + + #region 瀵煎叆 + + /// <summary> + /// Excel妯℃澘瀵煎叆鎺у埗灞炴�ц鍒欐槑缁嗗姛鑳� + /// </summary> + /// <param name="file">Excel妯℃澘鏂囦欢</param> + /// <returns>瀵煎叆鐨勮褰曟暟</returns> + [HttpPost("WmsControlRuleDetail/importExcel")] + public async Task<int> ImportExcelAsync(IFormFile file) + { + int _HeadStartLine = 2;//绗�1琛屾槸璇存槑,绗�2琛屾槸鍒楀悕 + int _DataStartLine = 3;//绗�3琛屽紑濮嬫槸鏁版嵁 + + DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine); + var addList =await CommonImport(importDataTable, _DataStartLine); + + lock (_lock) + { + _wmsControlRuleDetailRep.InsertAsync(addList); + + } + await Task.CompletedTask; + return addList.Count; + } + + /// <summary> + /// DataTable杞崲瀹炰綋瀵硅薄鍒楄〃 + /// </summary> + /// <param name="dataTable"></param> + /// <param name="dataStartLine">妯$増鍒楀悕寮�濮嬭</param> + /// <returns></returns> + private async Task<List<WmsControlRuleDetail>> CommonImport(DataTable dataTable, int dataStartLine) + { + + var details = new List<WmsControlRuleDetail>(); + int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭 + foreach (System.Data.DataRow row in dataTable.Rows) + { + index++; + + //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛� + + var addItem = new WmsControlRuleDetail() + { + CreatedTime = SysHelper.GetNowTime(), + CreatedUserId = SysHelper.GetUserId(), + CreatedUserName = SysHelper.GetUserName(), + UpdatedTime = SysHelper.GetNowTime(), + UpdatedUserId = SysHelper.GetUserId(), + UpdatedUserName = SysHelper.GetUserName() + }; + #region 瀹氫箟鍙橀噺 + var _ControlRuleId = "";//鎺у埗灞炴�ц鍒橧D + var _MaxImumqty = "";//鏈�楂樺簱瀛� + var _MinImumqty = "";//鏈�浣庡簱瀛� + var _SafeImumqty = "";//瀹夊叏搴撳瓨 + var _MinStorageAge = "";//鏈�灏忓簱榫� + var _MaxStorageAge = "";//鏈�澶у簱榫� + var _IsNotChek = "";//鏄惁鍏嶆 + var _ShelfLifeDays = "";//淇濊川鏈熷ぉ鏁� + var _IsDisabled = "";//鏄惁绂佺敤 + var _Id = "";//Id涓婚敭 + #endregion + + + #region 鍙栧�� + _ControlRuleId = row["鎺у埗灞炴�ц鍒橧D"]?.ToString() ; + _MaxImumqty = row["鏈�楂樺簱瀛�"]?.ToString() ; + _MinImumqty = row["鏈�浣庡簱瀛�"]?.ToString() ; + _SafeImumqty = row["瀹夊叏搴撳瓨"]?.ToString() ; + _MinStorageAge = row["鏈�灏忓簱榫�"]?.ToString() ; + _MaxStorageAge = row["鏈�澶у簱榫�"]?.ToString() ; + _IsNotChek = row["鏄惁鍏嶆"]?.ToString() ; + _ShelfLifeDays = row["淇濊川鏈熷ぉ鏁�"]?.ToString() ; + _IsDisabled = row["鏄惁绂佺敤"]?.ToString() ; + _Id = row["Id涓婚敭"]?.ToString() ; + #endregion + + + #region 楠岃瘉 + + if (string.IsNullOrEmpty(_ControlRuleId)) + { + throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橧D]{_ControlRuleId}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_ControlRuleId)) + { + if (!long.TryParse(_ControlRuleId, out long outControlRuleId)&&!string.IsNullOrEmpty(_ControlRuleId)) + { + throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橧D]{_ControlRuleId}鍊间笉姝g‘锛�"); + } + if (outControlRuleId <= 0&&!string.IsNullOrEmpty(_ControlRuleId)) + { + throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橧D]{_ControlRuleId}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.ControlRuleId = outControlRuleId; + } + + } + + if (string.IsNullOrEmpty(_MaxImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�楂樺簱瀛榏{_MaxImumqty}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_MaxImumqty)) + { + if (!decimal.TryParse(_MaxImumqty, out decimal outMaxImumqty)&&!string.IsNullOrEmpty(_MaxImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�楂樺簱瀛榏{_MaxImumqty}鍊间笉姝g‘锛�"); + } + if (outMaxImumqty <= 0&&!string.IsNullOrEmpty(_MaxImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�楂樺簱瀛榏{_MaxImumqty}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.MaxImumqty = outMaxImumqty; + } + + } + + if (string.IsNullOrEmpty(_MinImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�浣庡簱瀛榏{_MinImumqty}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_MinImumqty)) + { + if (!decimal.TryParse(_MinImumqty, out decimal outMinImumqty)&&!string.IsNullOrEmpty(_MinImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�浣庡簱瀛榏{_MinImumqty}鍊间笉姝g‘锛�"); + } + if (outMinImumqty <= 0&&!string.IsNullOrEmpty(_MinImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�浣庡簱瀛榏{_MinImumqty}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.MinImumqty = outMinImumqty; + } + + } + + if (string.IsNullOrEmpty(_SafeImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹夊叏搴撳瓨]{_SafeImumqty}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_SafeImumqty)) + { + if (!decimal.TryParse(_SafeImumqty, out decimal outSafeImumqty)&&!string.IsNullOrEmpty(_SafeImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹夊叏搴撳瓨]{_SafeImumqty}鍊间笉姝g‘锛�"); + } + if (outSafeImumqty <= 0&&!string.IsNullOrEmpty(_SafeImumqty)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹夊叏搴撳瓨]{_SafeImumqty}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.SafeImumqty = outSafeImumqty; + } + + } + + if (string.IsNullOrEmpty(_MinStorageAge)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�灏忓簱榫刔{_MinStorageAge}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_MinStorageAge)) + { + if (!decimal.TryParse(_MinStorageAge, out decimal outMinStorageAge)&&!string.IsNullOrEmpty(_MinStorageAge)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�灏忓簱榫刔{_MinStorageAge}鍊间笉姝g‘锛�"); + } + if (outMinStorageAge <= 0&&!string.IsNullOrEmpty(_MinStorageAge)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�灏忓簱榫刔{_MinStorageAge}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.MinStorageAge = outMinStorageAge; + } + + } + + if (string.IsNullOrEmpty(_MaxStorageAge)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�澶у簱榫刔{_MaxStorageAge}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_MaxStorageAge)) + { + if (!decimal.TryParse(_MaxStorageAge, out decimal outMaxStorageAge)&&!string.IsNullOrEmpty(_MaxStorageAge)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�澶у簱榫刔{_MaxStorageAge}鍊间笉姝g‘锛�"); + } + if (outMaxStorageAge <= 0&&!string.IsNullOrEmpty(_MaxStorageAge)) + { + throw Oops.Oh($"绗瑊index}琛孾鏈�澶у簱榫刔{_MaxStorageAge}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.MaxStorageAge = outMaxStorageAge; + } + + } + + if (string.IsNullOrEmpty(_IsNotChek)) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁鍏嶆]{_IsNotChek}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_IsNotChek)) + { + if(!_IsNotChek.Equals("鏄�") && !_IsNotChek.Equals("鍚�")) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁鍏嶆]{_IsNotChek}鍊间笉姝g‘锛�"); + } + else + { + bool outIsNotChek = _IsNotChek.Equals("鏄�") ? true : false; + addItem.IsNotChek = outIsNotChek; + } + } + + + if (string.IsNullOrEmpty(_ShelfLifeDays)) + { + throw Oops.Oh($"绗瑊index}琛孾淇濊川鏈熷ぉ鏁癩{_ShelfLifeDays}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_ShelfLifeDays)) + { + if (!decimal.TryParse(_ShelfLifeDays, out decimal outShelfLifeDays)&&!string.IsNullOrEmpty(_ShelfLifeDays)) + { + throw Oops.Oh($"绗瑊index}琛孾淇濊川鏈熷ぉ鏁癩{_ShelfLifeDays}鍊间笉姝g‘锛�"); + } + if (outShelfLifeDays <= 0&&!string.IsNullOrEmpty(_ShelfLifeDays)) + { + throw Oops.Oh($"绗瑊index}琛孾淇濊川鏈熷ぉ鏁癩{_ShelfLifeDays}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.ShelfLifeDays = outShelfLifeDays; + } + + } + + if (string.IsNullOrEmpty(_IsDisabled)) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_IsDisabled)) + { + if(!_IsDisabled.Equals("鏄�") && !_IsDisabled.Equals("鍚�")) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}鍊间笉姝g‘锛�"); + } + else + { + bool outIsDisabled = _IsDisabled.Equals("鏄�") ? true : false; + addItem.IsDisabled = outIsDisabled; + } + } + + if(!string.IsNullOrEmpty(_Id)) + { + if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id)) + { + throw Oops.Oh($"绗瑊index}琛孾Id涓婚敭]{_Id}鍊间笉姝g‘锛�"); + } + if (outId <= 0&&!string.IsNullOrEmpty(_Id)) + { + throw Oops.Oh($"绗瑊index}琛孾Id涓婚敭]{_Id}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.Id = outId; + } + + } + #endregion + + + + details.Add(addItem); + } + //楠岄噸 + await CheckExisitForImport(details); + + return details; + } + + /// <summary> + /// 鏍规嵁鐗堟湰涓嬭浇鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel瀵煎叆妯℃澘 + /// </summary> + /// <param name="version">妯℃澘鐗堟湰</param> + /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns> + [HttpGet("WmsControlRuleDetail/downloadExcelTemplate")] + public IActionResult DownloadExcelTemplate([FromQuery] string version) + { + string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsControlRuleDetail{TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増鍚嶇О鍚庣紑}.xlsx"; + var fileName = HttpUtility.UrlEncode($"瀵煎叆妯℃澘(鎺у埗灞炴�ц鍒欐槑缁�).xlsx", Encoding.GetEncoding("UTF-8")); + return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; + } + + #endregion + + #region 绉佹湁鏂规硶 + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-鏁版嵁搴� + /// </summary> + /// <param name="input"></param> + /// <param name="isEdit"></param> + /// <returns></returns> + private async Task CheckExisit( WmsControlRuleDetail input,bool isEdit=false) + { + + + + bool isExist = false; + if (!isEdit)//鏂板 + { + //鏁版嵁鏄惁瀛樺湪閲嶅 + isExist = await _wmsControlRuleDetailRep.AnyAsync(u => + u.ControlRuleId.Equals(input.ControlRuleId) + ,false); + } + else//缂栬緫 + { + + + + //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅 + isExist = await _wmsControlRuleDetailRep.AnyAsync(u => + u.Id != input.Id + &&u.ControlRuleId.Equals(input.ControlRuleId) + ,false); + } + + + + if (isExist) throw Oops.Oh(ErrorCode.E0001); + } + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇� + /// </summary> + /// <param name="inputs"></param> + /// <returns></returns> + private async Task CheckExisitForImport(List<WmsControlRuleDetail> inputs) + { + //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + if (inputs?.Count <= 0) + { + throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖"); + } + //鏁版嵁鏄惁閲嶅 + var existExcelItem = inputs.GroupBy(g => new { + g.ControlRuleId + }) + .Where(g => g.Count() > 1) + .Select(s => new { + s.Key.ControlRuleId + }).FirstOrDefault(); + if (existExcelItem != null) + { + var wmsControlRuleDetail = existExcelItem.Adapt<WmsControlRuleDetail>(); + var item= existExcelItem.Adapt<WmsControlRuleDetail>(); + throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,鎺у埗灞炴�ц鍒橧D[{item.ControlRuleId}]宸插瓨鍦�"); + } + + + + + //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + var existDBItem = await _wmsControlRuleDetailRep.DetachedEntities.FirstOrDefaultAsync(w=> + inputs.Select(s=>"" + +s.ControlRuleId + ) + .Contains("" + +w.ControlRuleId + )); + if (existDBItem != null) + { + var wmsControlRuleDetail = existExcelItem.Adapt<WmsControlRuleDetail>(); + var item= existExcelItem.Adapt<WmsControlRuleDetail>(); + throw Oops.Oh($"绯荤粺涓�,鎺у埗灞炴�ц鍒橧D[{item.ControlRuleId}]宸插瓨鍦�"); + } + } + + #endregion + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx new file mode 100644 index 0000000..77203b6 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx Binary files differ diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx new file mode 100644 index 0000000..129095f --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx Binary files differ -- Gitblit v1.9.3