#
Junjie
2024-07-05 cf3c6082e48c67461d36596eff6d3da6e54bf84f
#
8个文件已修改
12个文件已添加
1135 ■■■■■ 已修改文件
zy-asrs-admin/package-lock.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/print/zpalletBarcodePrint/index.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/print/zpalletBarcodePrint/template/template1.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/print/zpalletBarcodePrint/template/template2.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/locales/en_US.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/base/zpalletBarcode/edit.vue 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/base/zpalletBarcode/index.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/ZpalletBarcodeController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ZpalletBarcode.java 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ZpalletBarcodeMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/ZpalletBarcodeService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/ZpalletBarcodeServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/domain/PageParam.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/SecurityConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/zpalletBarcode.sql 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/mapper/asrs/ZpalletBarcodeMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/package-lock.json
@@ -14,7 +14,8 @@
        "axios": "^1.7.2",
        "pinia": "^2.1.7",
        "vue": "^3.4.29",
        "vue-router": "^4.3.3"
        "vue-router": "^4.3.3",
        "vue3-print-nb": "^0.1.4"
      },
      "devDependencies": {
        "@vitejs/plugin-vue": "^5.0.5",
@@ -2126,6 +2127,14 @@
        "vue": "^3.0.0"
      }
    },
    "node_modules/vue3-print-nb": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
      "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
      "dependencies": {
        "vue": "^3.0.5"
      }
    },
    "node_modules/warning": {
      "version": "4.0.3",
      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
@@ -3449,6 +3458,14 @@
        "is-plain-object": "3.0.1"
      }
    },
    "vue3-print-nb": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
      "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
      "requires": {
        "vue": "^3.0.5"
      }
    },
    "warning": {
      "version": "4.0.3",
      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
zy-asrs-admin/package.json
@@ -15,7 +15,8 @@
    "axios": "^1.7.2",
    "pinia": "^2.1.7",
    "vue": "^3.4.29",
    "vue-router": "^4.3.3"
    "vue-router": "^4.3.3",
    "vue3-print-nb": "^0.1.4"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.0.5",
zy-asrs-admin/src/components/print/zpalletBarcodePrint/index.vue
New file
@@ -0,0 +1,71 @@
<script setup>
import { ref } from 'vue';
import { formatMessage } from '@/utils/localeUtils';
import Template1 from './template/template1.vue';
import Template2 from './template/template2.vue';
const template = {
    Template1,
    Template2,
}
const selectTemplate = ref('Template1');
const printChild = ref(null);
let open = ref(false);
let printData = ref([]);
let repeatNum = ref(1);
const handleOk = () => {
}
const printObj = ref({
    id: "printMe",
    beforeOpenCallback(vue) {
        console.log('打开之前')
    },
    openCallback(vue) {
        console.log('执行了打印')
    },
    closeCallback(vue) {
        console.log('关闭了打印工具')
    }
});
defineExpose({
    open,
    printData,
})
</script>
<template>
    <a-modal v-model:open="open" :title="formatMessage('db.man_zpallet_barcode.batchPrint', '批量打印')" @ok="handleOk">
        <div style="height: 500px;overflow-x: hidden;overflow-y: scroll;">
            <div style="display: flex;justify-content: center;">
                <a-radio-group v-model:value="selectTemplate" button-style="solid">
                    <a-radio-button value="Template1">
                        {{ formatMessage('common.template', '模板') }} 1
                    </a-radio-button>
                    <a-radio-button value="Template2">
                        {{ formatMessage('common.template', '模板') }} 2
                    </a-radio-button>
                </a-radio-group>
            </div>
            <div style="display: flex;justify-content: center;margin-top: 20px;">
                <div style="width: 140px;text-align: center;">
                    {{ formatMessage('common.repeatNum', '重复数量') }}<a-input-number :min="1" v-model:value="repeatNum" :placeholder="formatMessage('common.repeatNum', '重复数量')" />
                </div>
            </div>
            <div style="margin-top: 20px;">
                <component :is="template[selectTemplate]" ref="printChild" :list="printData" :repeatNum="repeatNum" />
            </div>
        </div>
        <template #footer>
            <a-button key="submit" type="primary" v-print="printObj" @click="handleOk">
                {{ formatMessage('common.print', '打印') }}
            </a-button>
        </template>
    </a-modal>
</template>
<style></style>
zy-asrs-admin/src/components/print/zpalletBarcodePrint/template/template1.vue
New file
@@ -0,0 +1,47 @@
<script setup>
import { toRefs, ref, defineProps } from 'vue';
import { globalState } from '@/config.js'
import { formatMessage } from '@/utils/localeUtils';
const props = defineProps({
    list: {
        type: Array,
        default: []
    },
    repeatNum: {
        type: Number,
        default: 1
    }
});
const { list, repeatNum } = toRefs(props)
</script>
<template>
    <div id="printMe">
        <div v-for="(item, index) in list" :key="index">
            <div v-for="count in repeatNum" style="font-size: 16px;margin-top: 20px;">
                <div style="text-align: center;">
                    <img :src="globalState.url + '/api/code/auth?type=1&param=' + item.barcode" />
                </div>
                <div style="text-align: center;">
                    {{ item.barcode }}
                </div>
            </div>
        </div>
    </div>
</template>
<style>
@media print {
    body {
        margin: 0;
        padding: 0;
    }
    .print-area {
        margin: 0;
        padding: 0;
        height: auto;
    }
}
</style>
zy-asrs-admin/src/components/print/zpalletBarcodePrint/template/template2.vue
New file
@@ -0,0 +1,47 @@
<script setup>
import { toRefs, ref, defineProps } from 'vue';
import { globalState } from '@/config.js'
import { formatMessage } from '@/utils/localeUtils';
const props = defineProps({
    list: {
        type: Array,
        default: []
    },
    repeatNum: {
        type: Number,
        default: 1
    }
});
const { list, repeatNum } = toRefs(props)
</script>
<template>
    <div id="printMe">
        <div v-for="(item, index) in list" :key="index">
            <div v-for="count in repeatNum" style="font-size: 16px;margin-top: 20px;">
                <div style="text-align: center;">
                    <img :src="globalState.url + '/api/code/auth?type=2&param=' + item.barcode" />
                </div>
                <div style="text-align: center;">
                    {{ item.barcode }}
                </div>
            </div>
        </div>
    </div>
</template>
<style>
@media print {
    body {
        margin: 0;
        padding: 0;
    }
    .print-area {
        margin: 0;
        padding: 0;
        height: auto;
    }
}
</style>
zy-asrs-admin/src/locales/en_US.js
@@ -32,6 +32,9 @@
    'common.search.placeholder': 'Please enter search content',
    'common.loading.api.message': 'Calling Server...',
    'common.loading': 'Loading',
    'common.print': 'Print',
    'common.template': 'Template',
    'common.repeatNum': 'RepeatNum',
    '':'',
    '':'',
    '':'',
@@ -144,6 +147,9 @@
    'base.locArea':'LocArea',
    'base.locSts':'LocSts',
    'base.loc':'Loc',
    'base.locType':'LocType',
    'base.locTypeBind':'LocTypeBind',
    'base.zpalletBarcode':'ZpalletBarcode',
    '':'',
    '':'',
    '':'',
@@ -217,4 +223,14 @@
    'db.sys_operation_record.user_id':'UserId',
    'db.sys_operation_record.create_time':'CreateTime',
    'db.sys_operation_record.memo':'Memo',
    '':'',
    '':'',
    '':'',
    '':'',
    '':'',
    '':'',
    'db.man_zpallet_barcode.generateBarcode':'Generate Barcode',
    'db.man_zpallet_barcode.barcodeValue':'Barcode Value',
    'db.man_zpallet_barcode.generateNum':'Generate Num',
    'db.man_zpallet_barcode.batchPrint':'Batch Print',
};
zy-asrs-admin/src/main.js
@@ -7,6 +7,7 @@
import 'ant-design-vue/dist/reset.css';
import { initRouter } from '@/router/index.js'
import { globalState } from './config.js'
import print from 'vue3-print-nb'
const app = createApp(App)
@@ -31,6 +32,7 @@
    app.use(createPinia())
    app.use(router)
    app.use(Antd)
    app.use(print)
    router.isReady().then((e) => {
        app.mount('#app')
    })
zy-asrs-admin/src/views/base/zpalletBarcode/edit.vue
New file
@@ -0,0 +1,207 @@
<script setup>
import { ref, nextTick } from 'vue';
import { get, post, postBlob, postForm } from '@/utils/request.js'
import { formatMessage } from '@/utils/localeUtils.js';
import { message } from 'ant-design-vue';
const formTable = ref(null);
const submitButton = ref(null);
const isSave = ref(true);
const open = ref(false);
const initFormData = {}
let formData = ref(initFormData);
const emit = defineEmits(['tableReload'])
const handleOk = (e) => {
    nextTick(() => {
        setTimeout(() => {
            submitButton.value.$el.click();
        }, 100);
    });
};
const onFinish = values => {
    // console.log('Success:', values);
    open.value = false;
    post(isSave.value ? '/api/zpalletBarcode/save' : '/api/zpalletBarcode/update', formData.value).then((resp) => {
        let result = resp.data;
        if (result.code === 200) {
            message.success(isSave.value ? formatMessage('page.add.success', '新增成功') : formatMessage('page.update.success', '更新成功'));
        } else {
            message.error(result.msg);
        }
        emit('tableReload', 'reload')
        nextTick(() => {
            formTable.value.resetFields()
        })
    })
};
const onFinishFailed = errorInfo => {
    console.log('Failed:', errorInfo);
};
const userQueryList = ref(null);
userQuery();
function userQuery() {
    postForm('/api/user/query', {}).then(resp => {
        let result = resp.data;
        userQueryList.value = result.data;
    })
}
defineExpose({
    open,
    formData,
    initFormData,
    isSave,
})
</script>
<script>
export default {
    name: '容器管理-edit'
}
</script>
<template>
    <div>
        <a-modal v-model:open="open"
            :title="isSave ? formatMessage('page.add', '添加') : formatMessage('page.edit', '编辑')" @ok="handleOk"
            style="width: 600px;">
            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
                style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
                @finish="onFinish" @finishFailed="onFinishFailed">
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.barcode', '容器条码') "
                      name="barcode"
                      style="width: 250px;"
                            >
                    <a-input
                        v-model:value="formData.barcode"
                     />
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.flag', '标识') "
                      name="flag"
                      style="width: 250px;"
                            >
                    <a-input
                        v-model:value="formData.flag"
                     />
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.barcode_print', '打印状态') "
                      name="barcodePrint"
                      style="width: 250px;"
                            >
                    <a-select
                        v-model:value="formData.barcodePrint"
                        :options="[
                                { label: '完成', value: 1 },
                                { label: '未完成', value: 0 },
                            ]"
                        >
                    </a-select>
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.uuid', '编号') "
                      name="uuid"
                      style="width: 250px;"
                            >
                    <a-input
                        v-model:value="formData.uuid"
                     />
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.status', '状态') "
                      name="status"
                      style="width: 250px;"
                            >
                    <a-select
                        v-model:value="formData.status"
                        :options="[
                                { label: '正常', value: 1 },
                                { label: '禁用', value: 0 },
                            ]"
                        >
                    </a-select>
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.create_time', '添加时间') "
                      name="createTime"
                      style="width: 250px;"
                            >
                    <a-date-picker
                        v-model:value="formData.createTime"
                        show-time
                        format="YYYY-MM-DD HH:mm:ss"
                        value-format="YYYY-MM-DD HH:mm:ss"
                     />
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.create_by', '添加人员') "
                      name="createBy"
                      style="width: 250px;"
                            >
                    <a-select
                        v-model:value="formData.createBy"
                        :placeholder="formatMessage('common.select', '请选择')"
                        style="width: 100%"
                        show-search
                        :options="userQueryList"
                        optionFilterProp="label"
                        optionLabelProp="label"
                     >
                    </a-select>
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.update_time', '修改时间') "
                      name="updateTime"
                      style="width: 250px;"
                            >
                    <a-date-picker
                        v-model:value="formData.updateTime"
                        show-time
                        format="YYYY-MM-DD HH:mm:ss"
                        value-format="YYYY-MM-DD HH:mm:ss"
                     />
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.update_by', '修改人员') "
                      name="updateBy"
                      style="width: 250px;"
                            >
                    <a-select
                        v-model:value="formData.updateBy"
                        :placeholder="formatMessage('common.select', '请选择')"
                        style="width: 100%"
                        show-search
                        :options="userQueryList"
                        optionFilterProp="label"
                        optionLabelProp="label"
                     >
                    </a-select>
                        </a-form-item>
                    <a-form-item
                      :label="formatMessage('db.man_zpallet_barcode.memo', '备注') "
                      name="memo"
                      style="width: 250px;"
                            >
                    <a-input
                        v-model:value="formData.memo"
                     />
                        </a-form-item>
                <a-form-item>
                    <a-button type="primary" html-type="submit" ref="submitButton"
                        style="visibility: hidden;">Submit</a-button>
                </a-form-item>
            </a-form>
        </a-modal>
    </div>
</template>
<style></style>
zy-asrs-admin/src/views/base/zpalletBarcode/index.vue
New file
@@ -0,0 +1,287 @@
<script setup>
import { getCurrentInstance, ref, computed, reactive, nextTick } from 'vue';
import { useRouter } from "vue-router";
import { get, post, postBlob } from '@/utils/request.js'
import { message, Modal } from 'ant-design-vue';
import { logout } from '@/config.js';
import EditView from './edit.vue'
import { formatMessage } from '@/utils/localeUtils.js';
import ZpalletBarcodePrint from '@/components/print/zpalletBarcodePrint/index.vue';
const context = getCurrentInstance()?.appContext.config.globalProperties;
const router = useRouter();
const TABLE_KEY = 'table-zpalletBarcode';
let currentPage = 1;
let pageSize = 10;
const searchInput = ref("")
const editChild = ref(null);
const printChild = ref(null);
let openGenerate = ref(false);
let generateBarcodeValue = ref("80000001");
let generateNum = ref(100);
let tableData = ref([]);
getPage();
const columns = [
  {
    title: formatMessage('db.man_zpallet_barcode.barcode', '容器条码'),
    dataIndex: 'barcode',
    width: 140,
    ellipsis: true,
  },
  {
    title: formatMessage('db.man_zpallet_barcode.flag', '标识'),
    dataIndex: 'flag',
    width: 140,
    ellipsis: true,
  },
  {
    title: formatMessage('db.man_zpallet_barcode.barcode_print', '打印状态'),
    dataIndex: 'barcodePrint$',
    width: 140,
    ellipsis: true,
  },
  // {
  //   title: formatMessage('db.man_zpallet_barcode.uuid', '编号'),
  //   dataIndex: 'uuid',
  //   width: 140,
  //   ellipsis: true,
  // },
  {
    title: formatMessage('db.man_zpallet_barcode.status', '状态'),
    dataIndex: 'status$',
    width: 140,
    ellipsis: true,
  },
  // {
  //   title: formatMessage('db.man_zpallet_barcode.create_time', '添加时间'),
  //   dataIndex: 'createTime$',
  //   width: 140,
  //   ellipsis: true,
  // },
  // {
  //   title: formatMessage('db.man_zpallet_barcode.create_by', '添加人员'),
  //   dataIndex: 'createBy$',
  //   width: 140,
  //   ellipsis: true,
  // },
  // {
  //   title: formatMessage('db.man_zpallet_barcode.update_time', '修改时间'),
  //   dataIndex: 'updateTime$',
  //   width: 140,
  //   ellipsis: true,
  // },
  // {
  //   title: formatMessage('db.man_zpallet_barcode.update_by', '修改人员'),
  //   dataIndex: 'updateBy$',
  //   width: 140,
  //   ellipsis: true,
  // },
  {
    title: formatMessage('db.man_zpallet_barcode.memo', '备注'),
    dataIndex: 'memo',
    width: 140,
    ellipsis: true,
  },
  {
    title: formatMessage('common.operation', '操作'),
    name: 'oper',
    dataIndex: 'oper',
    key: 'oper',
    width: 140,
  },
];
const state = reactive({
  selectedRowKeys: [],
  loading: false,
});
const hasSelected = computed(() => state.selectedRowKeys.length > 0);
const start = () => {
  state.loading = true;
  // ajax request after empty completing
  setTimeout(() => {
    state.loading = false;
    state.selectedRowKeys = [];
  }, 1000);
};
const onSelectChange = selectedRowKeys => {
  // console.log('selectedRowKeys changed: ', selectedRowKeys);
  state.selectedRowKeys = selectedRowKeys;
};
function getPage() {
  post('/api/zpalletBarcode/page', {
    current: currentPage,
    pageSize: pageSize,
    condition: searchInput.value
  }).then((resp) => {
    let result = resp.data;
    if (result.code == 200) {
      let data = result.data;
      tableData.value = data;
    } else if (result.code === 401) {
      message.error(result.msg);
      logout()
    } else {
      message.error(result.msg);
    }
  })
}
const handleEdit = (item) => {
  editChild.value.open = true;
  editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item));
  editChild.value.isSave = item == null;
}
const handleDel = (rows) => {
  Modal.confirm({
    title: formatMessage('page.delete', '删除'),
    content: formatMessage('page.delete.confirm', '确定删除该项吗?'),
    maskClosable: true,
    onOk: async () => {
      const hide = message.loading(formatMessage('common.loading', '请求中'));
      try {
        post('/api/zpalletBarcode/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
          let result = resp.data;
          if (result.code === 200) {
            message.success(result.msg);
          } else {
            message.error(result.msg);
          }
          getPage()
          hide()
        })
      } catch (error) {
        message.error(formatMessage('common.fail', '请求失败'));
      }
    },
  });
}
const handleExport = async (intl) => {
  postBlob('/api/zpalletBarcode/export', {}).then(result => {
    const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
    window.location.href = window.URL.createObjectURL(blob);
    return true;
  })
};
const onSearch = () => {
  // console.log('search');
  getPage()
}
const onPageChange = (page, size) => {
  currentPage = page;
  pageSize = size;
  getPage();
}
function handleTableReload(value) {
  getPage()
}
const handleOpenGenerate = () => {
  openGenerate.value = true;
}
const handleGenerateSubmit = () => {
  post('/api/zpalletBarcode/generate', {
    barcode: generateBarcodeValue.value,
    num: generateNum.value,
  }).then((resp) => {
    let result = resp.data;
    if (result.code == 200) {
      let data = result.data;
      message.success(result.msg);
      getPage()
    } else if (result.code === 401) {
      message.error(result.msg);
      logout()
    } else {
      message.error(result.msg);
    }
  })
}
const handlePrint = () => {
    if (state.selectedRowKeys.length == 0) {
        message.warning(formatMessage('common.select', '请选择'));
        return;
    }
    let data = tableData.value.records;
    let tmp = [];
    data.forEach((item) => {
        if (state.selectedRowKeys.indexOf(item.id) != -1) {
            tmp.push(item);
        }
    })
    printChild.value.printData = tmp;
    printChild.value.open = true;
}
</script>
<script>
export default {
  name: '容器管理'
}
</script>
<template>
  <div>
    <EditView ref="editChild" @tableReload="handleTableReload" />
    <div class="table-header">
      <div>
        <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '请输入')"
          style="width: 200px;" @search="onSearch" />
        <a-button @click="handlePrint()" type="primary">
          {{ formatMessage('db.man_zpallet_barcode.batchPrint', '批量打印') }}
        </a-button>
      </div>
      <div class="table-header-right">
        <a-button @click="handleOpenGenerate()" type="primary">{{
          formatMessage('db.man_zpallet_barcode.generateBarcode', '生成条码') }}</a-button>
        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '添加') }}</a-button>
        <a-button @click="handleExport">{{ formatMessage('page.export', '导出') }}</a-button>
      </div>
    </div>
    <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
      :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
      :pagination="{ total: tableData.total, onChange: onPageChange }"
      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns">
      <template #bodyCell="{ column, text, record }">
        <template v-if="column.dataIndex === 'oper'">
          <div style="display: flex;justify-content: space-evenly;">
            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '编辑') }}</a-button>
            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '删除')
              }}</a-button>
          </div>
        </template>
      </template>
    </a-table>
    <a-modal v-model:open="openGenerate" :title="formatMessage('db.man_zpallet_barcode.generateBarcode', '生成条码')"
      @ok="handleGenerateSubmit">
      <a-form style="display: flex;justify-content: center;flex-wrap: wrap;" autocomplete="off">
        <a-form-item :label="formatMessage('db.man_zpallet_barcode.barcodeValue', '条码值')">
          <a-input v-model:value="generateBarcodeValue" />
        </a-form-item>
        <a-form-item :label="formatMessage('db.man_zpallet_barcode.generateNum', '生成数量')">
          <a-input v-model:value="generateNum" />
        </a-form-item>
      </a-form>
    </a-modal>
    <ZpalletBarcodePrint ref="printChild" />
  </div>
</template>
<style></style>
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/ZpalletBarcodeController.java
New file
@@ -0,0 +1,125 @@
package com.zy.asrs.wms.asrs.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wms.common.annotation.OperationLog;
import com.zy.asrs.wms.common.domain.BaseParam;
import com.zy.asrs.wms.common.domain.KeyValVo;
import com.zy.asrs.wms.common.domain.PageParam;
import com.zy.asrs.wms.asrs.entity.ZpalletBarcode;
import com.zy.asrs.wms.asrs.service.ZpalletBarcodeService;
import com.zy.asrs.wms.system.controller.BaseController;
import com.zy.asrs.wms.utils.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class ZpalletBarcodeController extends BaseController {
    @Autowired
    private ZpalletBarcodeService zpalletBarcodeService;
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:list')")
    @PostMapping("/zpalletBarcode/page")
    public R page(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<ZpalletBarcode, BaseParam> pageParam = new PageParam<>(baseParam, ZpalletBarcode.class);
        return R.ok().add(zpalletBarcodeService.page(pageParam, pageParam.buildWrapper(true)));
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:list')")
    @PostMapping("/zpalletBarcode/list")
    public R list(@RequestBody Map<String, Object> map) {
        return R.ok().add(zpalletBarcodeService.list());
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:list')")
    @GetMapping("/zpalletBarcode/{id}")
    public R get(@PathVariable("id") Long id) {
        return R.ok().add(zpalletBarcodeService.getById(id));
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:save')")
    @OperationLog("添加容器管理")
    @PostMapping("/zpalletBarcode/save")
    public R save(@RequestBody ZpalletBarcode zpalletBarcode) {
        if (!zpalletBarcodeService.save(zpalletBarcode)) {
            return R.error("添加失败");
        }
        return R.ok("添加成功");
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:update')")
    @OperationLog("修改容器管理")
    @PostMapping("/zpalletBarcode/update")
    public R update(@RequestBody ZpalletBarcode zpalletBarcode) {
        if (!zpalletBarcodeService.updateById(zpalletBarcode)) {
            return R.error("修改失败");
        }
        return R.ok("修改成功");
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:remove')")
    @OperationLog("删除容器管理")
    @PostMapping("/zpalletBarcode/remove/{ids}")
    public R remove(@PathVariable Long[] ids) {
        if (!zpalletBarcodeService.removeByIds(Arrays.asList(ids))) {
            return R.error("删除失败");
        }
        return R.ok("删除成功");
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:list')")
    @PostMapping("/zpalletBarcode/query")
    public R query(@RequestParam(required = false) String condition) {
        List<KeyValVo> vos = new ArrayList<>();
        LambdaQueryWrapper<ZpalletBarcode> wrapper = new LambdaQueryWrapper<>();
        if (!Cools.isEmpty(condition)) {
            wrapper.like(ZpalletBarcode::getBarcode, condition);
        }
        zpalletBarcodeService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
                item -> vos.add(new KeyValVo(item.getId(), item.getBarcode()))
        );
        return R.ok().add(vos);
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:list')")
    @PostMapping("/zpalletBarcode/export")
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        ExcelUtil.build(ExcelUtil.create(zpalletBarcodeService.list(), ZpalletBarcode.class), response);
    }
    @PreAuthorize("hasAuthority('asrs:zpalletBarcode:save')")
    @PostMapping("/zpalletBarcode/generate")
    public R generate(@RequestBody Map<String, Object> map) {
        Object barcode = map.get("barcode");
        Object num = map.get("num");
        if (barcode == null || num == null) {
            return R.error("缺少参数");
        }
        ZpalletBarcode one = zpalletBarcodeService.getOne(new LambdaQueryWrapper<ZpalletBarcode>().eq(ZpalletBarcode::getBarcode, barcode));
        if (one != null) {
            return R.error("条码起始值已存在");
        }
        int barcodeInt = Integer.parseInt(String.valueOf(barcode));
        for (int i = 0; i < Integer.parseInt(String.valueOf(num)); i++) {
            ZpalletBarcode zpalletBarcode = new ZpalletBarcode();
            zpalletBarcode.setBarcode(String.valueOf(barcodeInt));
            zpalletBarcodeService.save(zpalletBarcode);
            barcodeInt += 1;
        }
        return R.ok();
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ZpalletBarcode.java
New file
@@ -0,0 +1,226 @@
package com.zy.asrs.wms.asrs.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.zy.asrs.wms.system.entity.Host;
import com.zy.asrs.wms.system.entity.User;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.wms.system.service.UserService;
import com.zy.asrs.wms.system.service.HostService;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("man_zpallet_barcode")
public class ZpalletBarcode implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 容器条码
     */
    @ApiModelProperty(value= "容器条码")
    private String barcode;
    /**
     * 标识
     */
    @ApiModelProperty(value= "标识")
    private String flag;
    /**
     * 打印状态 1: 完成  0: 未完成
     */
    @ApiModelProperty(value= "打印状态 1: 完成  0: 未完成  ")
    private Integer barcodePrint;
    /**
     * 编号
     */
    @ApiModelProperty(value= "编号")
    private String uuid;
    /**
     * 所属机构
     */
    @ApiModelProperty(value= "所属机构")
    private Long hostId;
    /**
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    /**
     * 是否删除 1: 是  0: 否
     */
    @ApiModelProperty(value= "是否删除 1: 是  0: 否  ")
    @TableLogic
    private Integer deleted;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    private Long createBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    private Long updateBy;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public ZpalletBarcode() {}
    public ZpalletBarcode(String barcode,String flag,Integer barcodePrint,String uuid,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
        this.barcode = barcode;
        this.flag = flag;
        this.barcodePrint = barcodePrint;
        this.uuid = uuid;
        this.hostId = hostId;
        this.status = status;
        this.deleted = deleted;
        this.createTime = createTime;
        this.createBy = createBy;
        this.updateTime = updateTime;
        this.updateBy = updateBy;
        this.memo = memo;
    }
//    ZpalletBarcode zpalletBarcode = new ZpalletBarcode(
//            null,    // 容器条码
//            null,    // 标识
//            null,    // 打印状态
//            null,    // 编号
//            null,    // 所属机构
//            null,    // 状态
//            null,    // 是否删除
//            null,    // 添加时间
//            null,    // 添加人员
//            null,    // 修改时间
//            null,    // 修改人员
//            null    // 备注
//    );
    public String getBarcodePrint$(){
        if (null == this.barcodePrint){ return null; }
        switch (this.barcodePrint){
            case 1:
                return "完成";
            case 0:
                return "未完成";
            default:
                return String.valueOf(this.barcodePrint);
        }
    }
    public String getHostId$(){
        HostService service = SpringUtils.getBean(HostService.class);
        Host host = service.getById(this.hostId);
        if (!Cools.isEmpty(host)){
            return String.valueOf(host.getName());
        }
        return null;
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "正常";
            case 0:
                return "禁用";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getDeleted$(){
        if (null == this.deleted){ return null; }
        switch (this.deleted){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.deleted);
        }
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
    public String getUpdateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.updateBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ZpalletBarcodeMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.wms.asrs.mapper;
import com.zy.asrs.wms.asrs.entity.ZpalletBarcode;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ZpalletBarcodeMapper extends BaseMapper<ZpalletBarcode> {
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/ZpalletBarcodeService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.wms.asrs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.wms.asrs.entity.ZpalletBarcode;
public interface ZpalletBarcodeService extends IService<ZpalletBarcode> {
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/ZpalletBarcodeServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.wms.asrs.service.impl;
import com.zy.asrs.wms.asrs.mapper.ZpalletBarcodeMapper;
import com.zy.asrs.wms.asrs.entity.ZpalletBarcode;
import com.zy.asrs.wms.asrs.service.ZpalletBarcodeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("zpalletBarcodeService")
public class ZpalletBarcodeServiceImpl extends ServiceImpl<ZpalletBarcodeMapper, ZpalletBarcode> implements ZpalletBarcodeService {
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/domain/PageParam.java
@@ -123,7 +123,9 @@
        if (!Cools.isEmpty(cls)) {
            fields = Cools.getAllFields(cls);
            for (Field field : fields) {
                if ("createTime".equals(field.getName())) {
                if ("id".equals(field.getName())) {
                    queryWrapper.orderByDesc("id");
                } else if ("createTime".equals(field.getName())) {
                    queryWrapper.orderByDesc(Utils.toSymbolCase(field.getName(), '_'));
                }
            }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/SecurityConfig.java
@@ -35,6 +35,7 @@
            "/api/auth/host",
            "/test/**",
            "/api/login",
            "/api/code/auth",
            "/druid/**",
            "/swagger-ui.html",
            "/swagger-resources/**",
zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
@@ -2,7 +2,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.domain.enums.LoginSystemType;
import com.zy.asrs.common.utils.BarcodeUtils;
import com.zy.asrs.common.utils.QrCode;
import com.zy.asrs.framework.annotations.ManagerAuth;
import com.zy.asrs.framework.common.BaseRes;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
@@ -20,7 +23,11 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -222,4 +229,27 @@
        }
    }
    @RequestMapping(value = "/code/auth")
//    @ManagerAuth(memo = "物料编码条形码获取(type:1(条形码);2(二维码)")
    public R matCodeBarcode(@RequestParam(defaultValue = "1") Integer type
            , @RequestParam String param
            , HttpServletResponse response) throws Exception {
        response.setContentType("image/jpg");
        if (Cools.isEmpty(param)){
            return R.parse(BaseRes.EMPTY);
        }
        BufferedImage img;
        if (type == 1) {
            img = BarcodeUtils.encode(param);
        } else {
            img = QrCode.createImg(param);
        }
        if (!ImageIO.write(img, "jpg", response.getOutputStream())) {
            throw new IOException("Could not write an image of format jpg");
        }
        response.getOutputStream().flush();
        response.getOutputStream().close();
        return R.ok();
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
@@ -22,8 +22,8 @@
//        generator.username="sa";
//        generator.password="Zoneyung@zy56$";
        generator.table="man_loc_type_bind";
        generator.tableName="库位类型绑定";
        generator.table="man_zpallet_barcode";
        generator.tableName="容器管理";
        generator.rootPackagePath="com.zy.asrs.wms";
        generator.packagePath="com.zy.asrs.wms.asrs";
zy-asrs-wms/src/main/java/zpalletBarcode.sql
New file
@@ -0,0 +1,9 @@
-- save zpalletBarcode record
-- mysql
insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '容器管理管理', '0', '/asrs/zpalletBarcode', '/asrs/zpalletBarcode', '0' , '0', '1' , '1');
insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '查询容器管理', '', '1', 'asrs:zpalletBarcode:list', '0', '1', '1');
insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '添加容器管理', '', '1', 'asrs:zpalletBarcode:save', '1', '1', '1');
insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '修改容器管理', '', '1', 'asrs:zpalletBarcode:update', '2', '1', '1');
insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '删除容器管理', '', '1', 'asrs:zpalletBarcode:remove', '3', '1', '1');
zy-asrs-wms/src/main/resources/mapper/asrs/ZpalletBarcodeMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.wms.asrs.mapper.ZpalletBarcodeMapper">
</mapper>