Browse Source

Merge remote-tracking branch 'origin/master'

wenjinbiao 11 months ago
parent
commit
4abfebcb6f
35 changed files with 1308 additions and 59 deletions
  1. 0 0
      snowy-admin-web/src/api/yqyc/qyRecardBodyApi.js
  2. 0 0
      snowy-admin-web/src/api/yqyc/qyRecordAttachmentApi.js
  3. 0 0
      snowy-admin-web/src/api/yqyc/qyRecordInfoApi.js
  4. 34 0
      snowy-admin-web/src/api/yqyc/qyRecordInfoCheckListApi.js
  5. 2 2
      snowy-admin-web/src/views/biz/qyrecardbody/detail.vue
  6. 2 2
      snowy-admin-web/src/views/biz/qyrecardbody/index.vue
  7. 2 2
      snowy-admin-web/src/views/biz/qyrecordattachment/detail.vue
  8. 2 2
      snowy-admin-web/src/views/biz/qyrecordattachment/index.vue
  9. 1 1
      snowy-admin-web/src/views/biz/qyrecordinfo/detail.vue
  10. 2 2
      snowy-admin-web/src/views/biz/qyrecordinfo/index.vue
  11. 112 0
      snowy-admin-web/src/views/biz/qyrecordinfochecklist/detail.vue
  12. 180 0
      snowy-admin-web/src/views/biz/qyrecordinfochecklist/index.vue
  13. 54 26
      snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/detail.vue
  14. 45 10
      snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/index.vue
  15. 79 0
      snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/result.vue
  16. 4 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecardbody/param/QyRecardBodyAddParam.java
  17. 6 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/entity/QyRecordAttachment.java
  18. 7 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/param/QyRecordAttachmentAddParam.java
  19. 3 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/param/QyRecordAttachmentEditParam.java
  20. 4 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/param/QyRecordAttachmentIdParam.java
  21. 18 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/controller/QyRecordInfoController.java
  22. 3 3
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/param/QyRecordInfoAddParam.java
  23. 1 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/service/QyRecordInfoService.java
  24. 52 7
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/service/impl/QyRecordInfoServiceImpl.java
  25. 174 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/controller/QyRecordInfoCheckListController.java
  26. 76 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/entity/QyRecordInfoCheckList.java
  27. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/enums/QyRecordInfoCheckListEnum.java
  28. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/mapper/QyRecordInfoCheckListMapper.java
  29. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/mapper/mapping/QyRecordInfoCheckListMapper.xml
  30. 58 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListAddParam.java
  31. 63 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListEditParam.java
  32. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListIdParam.java
  33. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListPageParam.java
  34. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/service/QyRecordInfoCheckListService.java
  35. 94 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/service/impl/QyRecordInfoCheckListServiceImpl.java

snowy-admin-web/src/api/biz/qyRecardBodyApi.js → snowy-admin-web/src/api/yqyc/qyRecardBodyApi.js


snowy-admin-web/src/api/biz/qyRecordAttachmentApi.js → snowy-admin-web/src/api/yqyc/qyRecordAttachmentApi.js


snowy-admin-web/src/api/biz/qyRecordInfoApi.js → snowy-admin-web/src/api/yqyc/qyRecordInfoApi.js


+ 34 - 0
snowy-admin-web/src/api/yqyc/qyRecordInfoCheckListApi.js

@@ -0,0 +1,34 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/qyrecordinfochecklist/` + url, ...arg)
+
+/**
+ * 企业备案信息回执单列表Api接口管理器
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+export default {
+	// 获取企业备案信息回执单列表分页
+	qyRecordInfoCheckListPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交企业备案信息回执单列表表单 edit为true时为编辑,默认为新增
+	qyRecordInfoCheckListSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除企业备案信息回执单列表
+	qyRecordInfoCheckListDelete(data) {
+		return request('delete', data)
+	},
+	// 导出企业备案信息回执单列表
+    qyRecordInfoCheckListExport(data) {
+        return request('export', data, 'post', {
+            responseType: 'blob'
+        })
+    },
+	// 获取企业备案信息回执单列表详情
+	qyRecordInfoCheckListDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 2 - 2
snowy-admin-web/src/views/biz/qyrecardbody/detail.vue

@@ -206,7 +206,7 @@
 <script setup name="qyRecardBodyDetail">
 	import { cloneDeep } from 'lodash-es'
 	import { required } from '@/utils/formRules'
-	import qyRecardBodyApi from '@/api/biz/qyRecardBodyApi'
+	import qyRecardBodyApi from '@/api/yqyc/qyRecardBodyApi'
 	// 抽屉状态
 	const emit = defineEmits({ successful: null })
 	const formRef = ref()
@@ -271,4 +271,4 @@
 </script>
 
 <style lang="less" scoped>
-</style>
+</style>

+ 2 - 2
snowy-admin-web/src/views/biz/qyrecardbody/index.vue

@@ -50,7 +50,7 @@
 <script setup name="qyrecardbody">
 	import { cloneDeep } from 'lodash-es'
 	import Detail from './detail.vue'
-	import qyRecardBodyApi from '@/api/biz/qyRecardBodyApi'
+	import qyRecardBodyApi from '@/api/yqyc/qyRecardBodyApi'
 	import downloadUtil from "@/utils/downloadUtil";
     const { proxy } = getCurrentInstance()
 	const tableRef = ref()
@@ -295,4 +295,4 @@
 </script>
 
 <style lang="less" scoped>
-</style>
+</style>

+ 2 - 2
snowy-admin-web/src/views/biz/qyrecordattachment/detail.vue

@@ -46,7 +46,7 @@
 <script setup name="qyRecordAttachmentDetail">
 	import { cloneDeep } from 'lodash-es'
 	import { required } from '@/utils/formRules'
-	import qyRecordAttachmentApi from '@/api/biz/qyRecordAttachmentApi'
+	import qyRecordAttachmentApi from '@/api/yqyc/qyRecordAttachmentApi'
 	// 抽屉状态
 	const emit = defineEmits({ successful: null })
 	const formRef = ref()
@@ -99,4 +99,4 @@
 </script>
 
 <style lang="less" scoped>
-</style>
+</style>

+ 2 - 2
snowy-admin-web/src/views/biz/qyrecordattachment/index.vue

@@ -50,7 +50,7 @@
 <script setup name="qyrecordattachment">
 	import { cloneDeep } from 'lodash-es'
 	import Detail from './detail.vue'
-	import qyRecordAttachmentApi from '@/api/biz/qyRecordAttachmentApi'
+	import qyRecordAttachmentApi from '@/api/yqyc/qyRecordAttachmentApi'
 	import downloadUtil from "@/utils/downloadUtil";
     const { proxy } = getCurrentInstance()
 	const tableRef = ref()
@@ -167,4 +167,4 @@
 </script>
 
 <style lang="less" scoped>
-</style>
+</style>

+ 1 - 1
snowy-admin-web/src/views/biz/qyrecordinfo/detail.vue

@@ -87,7 +87,7 @@
 	import tool from '@/utils/tool'
 	import { cloneDeep } from 'lodash-es'
 	import { required } from '@/utils/formRules'
-	import qyRecordInfoApi from '@/api/biz/qyRecordInfoApi'
+	import qyRecordInfoApi from '@/api/yqyc/qyRecordInfoApi'
 	// 抽屉状态
 	const emit = defineEmits({ successful: null })
 	const formRef = ref()

+ 2 - 2
snowy-admin-web/src/views/biz/qyrecordinfo/index.vue

@@ -92,7 +92,7 @@
 	import tool from '@/utils/tool'
 	import { cloneDeep } from 'lodash-es'
 	import Detail from './detail.vue'
-	import qyRecordInfoApi from '@/api/biz/qyRecordInfoApi'
+	import qyRecordInfoApi from '@/api/yqyc/qyRecordInfoApi'
 	import downloadUtil from "@/utils/downloadUtil";
     const { proxy } = getCurrentInstance()
 	const searchFormState = ref({})
@@ -255,4 +255,4 @@
 </script>
 
 <style lang="less" scoped>
-</style>
+</style>

+ 112 - 0
snowy-admin-web/src/views/biz/qyrecordinfochecklist/detail.vue

@@ -0,0 +1,112 @@
+<template>
+    <a-card :bordered="false">
+		<a-page-header
+            :title="formData.id ? '编辑企业备案信息回执单列表' : '新增企业备案信息回执单列表'"
+			@back="onClose"
+		>
+			<template #extra>
+				<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+				<a-popconfirm title="请确认是否保存?" @confirm="onSubmit" v-if="!isView">
+                    <a-button type="primary" :loading="submitLoading">保存</a-button>
+                </a-popconfirm>
+			</template>
+		</a-page-header>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+            <a-row :gutter="16">
+                <a-col :span="12">
+                    <a-form-item label="预录入台账编号:" name="ylTzCode">
+                        <a-input v-model:value="formData.ylTzCode" :disabled="isView" placeholder="请输入预录入台账编号" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="单据类型:" name="applyType">
+                        <a-select v-model:value="formData.applyType" :disabled="isView" placeholder="请选择单据类型" :options="applyTypeOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="审核状态:" name="status">
+                        <a-select v-model:value="formData.status" :disabled="isView" placeholder="请选择审核状态" :options="statusOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="审核人:" name="applyMan">
+                        <a-input v-model:value="formData.applyMan" :disabled="isView" placeholder="请输入审核人" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="审核时间:" name="checkTime">
+                        <a-date-picker v-model:value="formData.checkTime" :disabled="isView" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择审核时间" style="width: 100%" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="审核结果回执:" name="result">
+                        <a-input v-model:value="formData.result" :disabled="isView" placeholder="请输入审核结果回执" allow-clear />
+                    </a-form-item>
+                </a-col>
+            </a-row>
+        </a-form>
+	</a-card>
+</template>
+
+<script setup name="qyRecordInfoCheckListDetail">
+	import tool from '@/utils/tool'
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import qyRecordInfoCheckListApi from '@/api/yqyc/qyRecordInfoCheckListApi'
+	// 抽屉状态
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+	const isView = ref(false)
+	const applyTypeOptions = ref([])
+	const statusOptions = ref([])
+
+	// 打开抽屉
+	const onOpen = (record, view = false) => {
+	    isView.value = view
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+		applyTypeOptions.value = tool.dictList('qybalx')
+		statusOptions.value = tool.dictList('djzt')
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		isView.value = true
+		emit('onClose')
+	}
+	// 默认要校验的
+	const formRules = {
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				qyRecordInfoCheckListApi
+					.qyRecordInfoCheckListSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>
+
+<style lang="less" scoped>
+</style>

+ 180 - 0
snowy-admin-web/src/views/biz/qyrecordinfochecklist/index.vue

@@ -0,0 +1,180 @@
+<template>
+	<a-card :bordered="false" v-if="indexShow">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+			v-model:filterParam="filterParam"
+			:scroll="{ x: 2000 }"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="onDetail()" v-if="hasPerm('qyRecordInfoCheckListAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-delete
+						v-if="hasPerm('qyRecordInfoCheckListDelete')"
+						:selectedRowKeys="selectedRowKeys"
+						@batchDelete="deleteBatchQyRecordInfoCheckList"
+					/>
+					<a-button @click="onExport" v-if="hasPerm('qyRecordInfoCheckListBatchExport')">
+                        <template #icon><export-outlined /></template>
+                        批量导出
+                    </a-button>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'applyType'">
+					{{ $TOOL.dictTypeData('qybalx', record.applyType) }}
+				</template>
+				<template v-if="column.dataIndex === 'status'">
+					{{ $TOOL.dictTypeData('djzt', record.status) }}
+				</template>
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+					    <a @click="onDetail(record, true)" v-if="hasPerm('qyRecordInfoCheckListView')">查看</a>
+                        <a-divider type="vertical" v-if="hasPerm('qyRecordInfoCheckListView') && hasPerm(['qyRecordInfoCheckListEdit', 'qyRecordInfoCheckListDelete'], 'or')" />
+						<a @click="onDetail(record)" v-if="hasPerm('qyRecordInfoCheckListEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['qyRecordInfoCheckListEdit', 'qyRecordInfoCheckListDelete'], 'and')" />
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteQyRecordInfoCheckList(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('qyRecordInfoCheckListDelete')">删除</a-button>
+						</a-popconfirm>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Detail v-else ref="detailRef" @onClose="indexShow = true" @successful="onSearch()" />
+</template>
+
+<script setup name="qyrecordinfochecklist">
+	import { cloneDeep } from 'lodash-es'
+	import Detail from './detail.vue'
+	import qyRecordInfoCheckListApi from '@/api/yqyc/qyRecordInfoCheckListApi'
+	import downloadUtil from "@/utils/downloadUtil";
+    const { proxy } = getCurrentInstance()
+	const tableRef = ref()
+	const filterParam = ref({})
+	const detailRef = ref()
+	const indexShow = ref(true)
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '单据类型',
+			dataIndex: 'applyType',
+		},
+		{
+			title: '审核状态',
+			dataIndex: 'status',
+		},
+		{
+			title: '审核人',
+			dataIndex: 'applyMan',
+		},
+		{
+			title: '审核时间',
+			dataIndex: 'checkTime',
+		},
+		{
+			title: '审核结果回执',
+			dataIndex: 'result',
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['qyRecordInfoCheckListEdit', 'qyRecordInfoCheckListDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 200,
+			fixed: 'right',
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+        tableRef.value.clearSelected()
+        return qyRecordInfoCheckListApi.qyRecordInfoCheckListPage(parameter).then((data) => {
+            return data
+        })
+    }
+    // 搜索同时备份参数
+    const onSearch = (parameter) => {
+        searchFormStateReal.value = cloneDeep(Object.assign(searchFormState.value, filterParam.value))
+        nextTick(() => {
+            tableRef.value.refresh(parameter)
+        })
+    }
+    // 重置
+    const reset = () => {
+        searchFormRef.value.resetFields()
+        onSearch(true)
+    }
+	// 删除
+	const deleteQyRecordInfoCheckList = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		qyRecordInfoCheckListApi.qyRecordInfoCheckListDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchQyRecordInfoCheckList = (params) => {
+		qyRecordInfoCheckListApi.qyRecordInfoCheckListDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+	// 批量导出
+    const onExport = () => {
+        const params = {
+            ...filterParam.value
+        }
+        if (selectedRowKeys.value.length > 0) {
+            params.ids = selectedRowKeys.value
+        } else {
+            Object.entries(searchFormStateReal.value).forEach(([key, value]) => {
+                console.log(key)
+                if (proxy.$util.isValue(value)) {
+                    params[key] = value
+                }
+            })
+        }
+        qyRecordInfoCheckListApi.qyRecordInfoCheckListExport(params).then((res) => {
+            downloadUtil.resultDownload(res)
+            tableRef.value.clearSelected()
+        })
+    }
+	// 切换至表单
+    const onDetail = (record = null, view) => {
+    	indexShow.value = false
+    	nextTick(() => {
+            detailRef.value.onOpen(record, view)
+    	})
+    }
+</script>
+
+<style lang="less" scoped>
+</style>

+ 54 - 26
snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/detail.vue

@@ -94,7 +94,7 @@
 				</a-form>
 			</a-collapse-panel>
 			<a-collapse-panel key="2" header="表体信息">
-				<a-button type="primary" @click="onBodyReset">重置</a-button>
+				<a-button type="primary" @click="onBodyReset" v-if="!isView">重置</a-button>
 				<a-form ref="bodyFormRef" :model="bodyData" :rules="bodyRules" layout="inline" style="margin-bottom: 20px;">
 					<a-row :gutter="[0, 16]">
 						<a-col :span="8">
@@ -274,12 +274,14 @@
 						</a-col>
 					</a-row>
 				</a-form>
-				<a-button type="primary" style="margin-right: 8px;" v-if="!(bodyData.id || bodyData.__index)" @click="onBodyAdd">插入</a-button>
-				<a-button type="primary" style="margin-right: 8px;" v-else @click="onBodyEdit">保存</a-button>
-				<xn-batch-delete
-					:selectedRowKeys="bodySelectedRowKeys"
-					@batchDelete="deleteBatchBody"
-				/>
+				<template v-if="!isView">
+					<a-button type="primary" style="margin-right: 8px;" v-if="!(bodyData.id || bodyData.__index)" @click="onBodyAdd">插入</a-button>
+					<a-button type="primary" style="margin-right: 8px;" v-else @click="onBodyEdit">保存</a-button>
+					<xn-batch-delete
+						:selectedRowKeys="bodySelectedRowKeys"
+						@batchDelete="deleteBatchBody"
+					/>
+				</template>
 				<a-table
 					style="margin-top: 10px"
 					bordered
@@ -303,15 +305,21 @@
 				</a-table>
 			</a-collapse-panel>
 			<a-collapse-panel key="3" header="附件信息">
-				<div>
-					友情提示<br/>
-					1、附件大小要求不超过4M,如果文件过大,建议拆分多个上传;<br/>
-					2、附件格式要求:PDF文件;<br/>
-					3、同一附件类型可以上传多个附件;<br/>
-					4、附件传输过程中会出现传输失败的情况,请随时关注附件传输状态;<br/>
-					5、要求上传复印件的可上传原件的扫描件。
-				</div>
-				<xn-upload ref="ref_upload" v-model:value="fileData.fileUrl" @onChange="fileChange" accept=".pdf" v-if="showFileUpload"/>
+				<template v-if="!isView">
+					<div>
+						友情提示<br/>
+						1、附件大小要求不超过4M,如果文件过大,建议拆分多个上传;<br/>
+						2、附件格式要求:PDF文件;<br/>
+						3、同一附件类型可以上传多个附件;<br/>
+						4、附件传输过程中会出现传输失败的情况,请随时关注附件传输状态;<br/>
+						5、要求上传复印件的可上传原件的扫描件。
+					</div>
+					<xn-upload ref="ref_upload" v-model:value="fileData.fileUrl" @onChange="fileChange" accept=".pdf" v-if="showFileUpload"/>
+					<xn-batch-delete
+						:selectedRowKeys="fileSelectedRowKeys"
+						@batchDelete="deleteBatchFile"
+					/>
+				</template>
 				<a-table
 					style="margin-top: 10px"
 					bordered
@@ -335,11 +343,9 @@
 						</template>
 						<template v-if="column.dataIndex === 'action'">
 							<template v-if="isView">
-								<a-button type="link" primary size="small" @click="onBodyReset(), bodyData = cloneDeep(record)">查看</a-button>
 							</template>
 							<template v-else>
-								<a-button type="link" primary size="small" @click="onBodyReset(), bodyData = cloneDeep(record)">编辑</a-button>
-								<a-button type="link" danger size="small" @click="onFileDel(index)">删除</a-button>
+								<a-button type="link" danger size="small" @click="onFileDel(index)" v-if="!isView">删除</a-button>
 							</template>
 						</template>
 					</template>
@@ -353,7 +359,7 @@
 import tool from '@/utils/tool'
 import {cloneDeep} from 'lodash-es'
 import {required} from '@/utils/formRules'
-import qyRecordInfoApi from '@/api/biz/qyRecordInfoApi'
+import qyRecordInfoApi from '@/api/yqyc/qyRecordInfoApi'
 import {message, Modal} from "ant-design-vue";
 import {createVNode} from "vue";
 import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
@@ -398,11 +404,17 @@ const fileOptions = {
 	}
 }
 // 打开抽屉
-const onOpen = (record, view = false) => {
+const onOpen = (record, view = false, type) => {
 	isView.value = view
 	if (record) {
-		let recordData = cloneDeep(record)
-		formData.value = Object.assign({}, recordData)
+		qyRecordInfoApi.qyRecordInfoDetail({id: record.id}).then(res => {
+			formData.value = res
+			bodyList.value = res.qyRecardBodyAddParams
+			fileList.value = res.qyRecordAttachmentAddParams
+			if (type) {
+				formData.value.applyType = type
+			}
+		})
 	} else {
 		formData.value.companyCode = userInfo.companyNumber
 		formData.value.companyName = userInfo.companyName
@@ -665,12 +677,14 @@ const onSubmit = () => {
 	.then(() => {
 		submitLoading.value = true
 		const formDataParam = cloneDeep(formData.value)
-		if (formDataParam.id) {
+		if (!formDataParam.id) {
 			formDataParam.qyRecardBodyAddParams = bodyList.value
 			formDataParam.qyRecordAttachmentAddParams = fileList.value
 		} else {
 			formDataParam.qyRecardBodyEditParams = bodyList.value
 			formDataParam.qyRecordAttachmentEditParams = fileList.value
+			delete formDataParam.qyRecardBodyAddParams
+			delete formDataParam.qyRecordAttachmentAddParams
 		}
 		formDataParam.status = '2'
 		qyRecordInfoApi
@@ -693,12 +707,14 @@ const onTemp = () => {
 	.then(() => {
 		submitLoading.value = true
 		const formDataParam = cloneDeep(formData.value)
-		if (formDataParam.id) {
+		if (!formDataParam.id) {
 			formDataParam.qyRecardBodyAddParams = bodyList.value
 			formDataParam.qyRecordAttachmentAddParams = fileList.value
 		} else {
 			formDataParam.qyRecardBodyEditParams = bodyList.value
 			formDataParam.qyRecordAttachmentEditParams = fileList.value
+			delete formDataParam.qyRecardBodyAddParams
+			delete formDataParam.qyRecordAttachmentAddParams
 		}
 		formDataParam.status = '1'
 		qyRecordInfoApi
@@ -722,7 +738,7 @@ const onBodyAdd = () => {
 	bodyFormRef.value
 	.validate()
 	.then(() => {
-		bodyList.value.push(Object.assign({__index: bodyList.value.length + 1}, bodyData.value))
+		bodyList.value.push(Object.assign({__index: new Date().getTime()}, bodyData.value))
 		onBodyReset()
 		message.success('插入表体信息成功!')
 	})
@@ -792,6 +808,7 @@ const fileChange = (file) => {
 	if (file) {
 		const f = ref_upload.value.uploadFileList()[0]
 		fileList.value.push({
+			__index: new Date().getTime(),
 			attachmentUrl: f.url,
 			attachmentName: f.name,
 			attachmentFormat: getFileExtension(f.name),
@@ -818,6 +835,17 @@ const onFileDel = (recode, index) => {
 		},
 	});
 }
+const deleteBatchFile = () => {
+	fileList.value = fileList.value.filter(v => {
+		let flag = true
+		bodySelectedRowKeys.value.forEach(s => {
+			if ((v.id && (v.id === s.id)) || (v.__index && (v.__index === s.__index))) {
+				flag = false
+			}
+		})
+		return flag
+	})
+}
 // 抛出函数
 defineExpose({
 	onOpen

+ 45 - 10
snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/index.vue

@@ -48,11 +48,11 @@
 						<template #icon><plus-outlined /></template>
 						新增
 					</a-button>
-					<xn-batch-delete
-						v-if="hasPerm('qyRecordInfoDelete')"
-						:selectedRowKeys="selectedRowKeys"
-						@batchDelete="deleteBatchQyRecordInfo"
-					/>
+<!--					<xn-batch-delete-->
+<!--						v-if="hasPerm('qyRecordInfoDelete')"-->
+<!--						:selectedRowKeys="selectedRowKeys"-->
+<!--						@batchDelete="deleteBatchQyRecordInfo"-->
+<!--					/>-->
 					<a-button @click="onExport" v-if="hasPerm('qyRecordInfoBatchExport')">
                         <template #icon><export-outlined /></template>
                         批量导出
@@ -69,12 +69,18 @@
 				<template v-if="column.dataIndex === 'companyType'">
 					{{ $TOOL.dictTypeData('qylx', record.companyType) }}
 				</template>
+				<template v-if="column.dataIndex === 'status'">
+					{{ $TOOL.dictTypeData('djzt', record.status) }}
+				</template>
 				<template v-if="column.dataIndex === 'action'">
 					<a-space>
 					    <a @click="onDetail(record, true)" v-if="hasPerm('qyRecordInfoView')">查看</a>
-						<a @click="onDetail(record)" v-if="hasPerm('qyRecordInfoEdit')">编辑</a>
+					    <a @click="onBack(record)" v-if="record.status == 2">撤回</a>
+						<a @click="onDetail(record)" v-if="hasPerm('qyRecordInfoEdit') && record.status == 1">编辑</a>
+						<a @click="resultDetailRef.onOpen(record)" v-if="record.status == 3 || record.status == 4">查看回执</a>
+						<a @click="onDetail.onOpen(record, false, 'bgsq')" v-if="record.status == 3">变更</a>
 						<a-popconfirm title="确定要删除吗?" @confirm="deleteQyRecordInfo(record)">
-							<a-button type="link" danger size="small" v-if="hasPerm('qyRecordInfoDelete')">删除</a-button>
+							<a-button type="link" danger size="small" v-if="hasPerm('qyRecordInfoDelete') && (record.status == 1 || record.status == 4)">删除</a-button>
 						</a-popconfirm>
 					</a-space>
 				</template>
@@ -82,18 +88,24 @@
 		</s-table>
 	</a-card>
 	<Detail v-else ref="detailRef" @onClose="indexShow = true" @successful="onSearch()" />
+	<ResultDetail ref="resultDetailRef"/>
 </template>
 
 <script setup name="qyrecordinfo">
 	import tool from '@/utils/tool'
 	import { cloneDeep } from 'lodash-es'
 	import Detail from './detail.vue'
-	import qyRecordInfoApi from '@/api/biz/qyRecordInfoApi'
+	import qyRecordInfoApi from '@/api/yqyc/qyRecordInfoApi'
 	import downloadUtil from "@/utils/downloadUtil";
+	import ResultDetail from "./result.vue";
+	import {Modal} from "ant-design-vue";
+	import {createVNode} from "vue";
+	import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
     const { proxy } = getCurrentInstance()
 	const searchFormState = ref({})
 	const searchFormStateReal = ref(searchFormState.value) // 点击搜索后备份的查询参数
 	const searchFormRef = ref()
+	const resultDetailRef = ref()
 	const tableRef = ref()
 	const filterParam = ref({})
 	const detailRef = ref()
@@ -241,12 +253,35 @@
         })
     }
 	// 切换至表单
-    const onDetail = (record = null, view) => {
+    const onDetail = (record = null, view, type) => {
     	indexShow.value = false
     	nextTick(() => {
-            detailRef.value.onOpen(record, view)
+            detailRef.value.onOpen(record, view, type)
     	})
     }
+	const onBack = (record) => {
+		Modal.confirm({
+			title: '提示',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '确定要对该企业台账进行撤回操作?',
+			centered: true,
+			onOk() {
+				qyRecordInfoApi.qyRecordInfoDetail({id: record.id}).then(res => {
+					const formDataParam = res
+					formDataParam.status = '1'
+					formDataParam.qyRecardBodyEditParams = res.qyRecardBodyAddParams
+					formDataParam.qyRecordAttachmentEditParams = res.qyRecordAttachmentAddParams
+					delete formDataParam.qyRecardBodyAddParams
+					delete formDataParam.qyRecordAttachmentAddParams
+					qyRecordInfoApi.qyRecordInfoSubmitForm(formDataParam, formDataParam.id).then(() => {
+						onSearch()
+					})
+				})
+			},
+			onCancel() {
+			},
+		});
+	}
 	const tzTypeOptions = tool.dictList('tzlx')
 	const companyTypeOptions = tool.dictList('qylx')
 </script>

+ 79 - 0
snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/result.vue

@@ -0,0 +1,79 @@
+<template>
+	<a-modal
+		v-model:open="open"
+		title="查看回执"
+		centered
+		width="90%"
+	>
+		<div class="result-detail">
+			<a-page-header
+				:title="formData.companyName"
+				:avatar="{ src: qyImg }"
+			>
+				<template #tags>
+					<a-tag :color="formData.status == 3 ? 'green' : 'red'">{{ $TOOL.dictTypeData('djzt', formData.status) }}</a-tag>
+					<a-tooltip :title="resultList[resultList.length - 1]?.result">
+						<InfoCircleOutlined />
+					</a-tooltip>
+				</template>
+			</a-page-header>
+			<a-table
+				style="margin-top: 10px"
+				bordered
+				:dataSource="resultList"
+				:columns="[
+				  {title: '单据类型',dataIndex: 'applyType',key: 'applyType'},
+				  {title: '审核状态',dataIndex: 'status',key: 'status'},
+				  {title: '申请人',dataIndex: 'companyName',key: 'companyName'},
+				  {title: '审核人',dataIndex: 'applyMan',key: 'applyMan'},
+				  {title: '审核时间',dataIndex: 'checkTime',key: 'checkTime'},
+				  {title: '审核结果回执',dataIndex: 'result',key: 'result'},
+				]"
+				:pagination="false"
+			>
+			</a-table>
+		</div>
+		<template #footer></template>
+	</a-modal>
+</template>
+
+<script setup name="enterpriseDetail">
+import tool from '@/utils/tool'
+import {cloneDeep} from 'lodash-es'
+// 抽屉状态
+const open = ref(false)
+const emit = defineEmits({successful: null})
+const formRef = ref()
+// 表单数据
+const formData = ref({})
+const resultList = ref([])
+import qyImg from '@/views/yqyc/zero/enterprise-qualification/qy.png'
+import qyRecordInfoCheckListApi from "@/api/yqyc/qyRecordInfoCheckListApi";
+
+// 打开抽屉
+const onOpen = (record, view = false) => {
+	open.value = true
+	if (record) {
+		formData.value = Object.assign({}, record)
+		qyRecordInfoCheckListApi.qyRecordInfoCheckListPage({current: 1, size: 100, ylTzCode: record.ylTzCode}).then(res => {
+			resultList.value = res.records
+		})
+	}
+}
+// 关闭抽屉
+const onClose = () => {
+	formRef.value.resetFields()
+	formData.value = {}
+	open.value = false
+}
+// 抛出函数
+defineExpose({
+	onOpen
+})
+</script>
+<style lang="less" scoped>
+.goods-detail {
+	max-height: 800px;
+	overflow-y: auto;
+}
+</style>

+ 4 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecardbody/param/QyRecardBodyAddParam.java

@@ -31,6 +31,10 @@ import java.util.Date;
 @Setter
 public class QyRecardBodyAddParam {
 
+    /** id */
+    @Schema(description = "id")
+    private String id;
+
     /** 企业备案信息 */
     @Schema(description = "企业备案信息")
     private String qyRecordInfoId;

+ 6 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/entity/QyRecordAttachment.java

@@ -67,4 +67,10 @@ public class QyRecordAttachment {
     @ColumnWidth(12)
     @ExcelProperty(index = 5,value = "上传时间")
     private String uploadTime;
+
+    /** 上传时间 */
+    @Schema(description = "附件地址")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 6,value = "附件地址")
+    private String attachmentUrl;
 }

+ 7 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/param/QyRecordAttachmentAddParam.java

@@ -31,6 +31,10 @@ import java.util.Date;
 @Setter
 public class QyRecordAttachmentAddParam {
 
+    /** id */
+    @Schema(description = "id")
+    private String id;
+
     /** 企业备案信息 */
     @Schema(description = "企业备案信息")
     private String qyRecordInfoId;
@@ -51,4 +55,7 @@ public class QyRecordAttachmentAddParam {
     @Schema(description = "上传时间")
     private String uploadTime;
 
+    @Schema(description = "附件地址")
+    private String attachmentUrl;
+
 }

+ 3 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/param/QyRecordAttachmentEditParam.java

@@ -56,4 +56,7 @@ public class QyRecordAttachmentEditParam {
     @Schema(description = "上传时间")
     private String uploadTime;
 
+    @Schema(description = "附件地址")
+    private String attachmentUrl;
+
 }

+ 4 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordattachment/param/QyRecordAttachmentIdParam.java

@@ -32,4 +32,8 @@ public class QyRecordAttachmentIdParam {
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     private String id;
+
+    public QyRecordAttachmentIdParam(String id) {
+        this.id = id;
+    }
 }

+ 18 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/controller/QyRecordInfoController.java

@@ -39,6 +39,7 @@ import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotEmpty;
 
+import java.util.Comparator;
 import java.util.List;
 import java.io.IOException;
 
@@ -75,6 +76,21 @@ public class QyRecordInfoController {
         return CommonResult.data(qyRecordInfoService.page(qyRecordInfoPageParam));
     }
 
+    public static void main(String[] args) {
+        String ylTzCode = "EPD24070600000000";
+        String tzCode = "LHTWL000";
+        String ylCode = ylTzCode.substring(ylTzCode.length() - 5, ylTzCode.length());
+        String code = tzCode.substring(tzCode.length() - 3, tzCode.length());
+        int i = Integer.valueOf(ylCode);
+        i++;
+        String ylTzCode_ = BusinessIdGenerator.generateBusinessId(i);
+        int j = Integer.valueOf(code);
+        j++;
+        String tzCode_ = BusinessIdGenerator.generateCode(j);
+        System.out.println(ylTzCode_);
+        System.out.println(tzCode_);
+    }
+
     /**
      * 添加企业备案信息
      *
@@ -87,6 +103,7 @@ public class QyRecordInfoController {
     @PostMapping("/biz/qyrecordinfo/add")
     public CommonResult<String> add(@RequestBody @Valid QyRecordInfoAddParam qyRecordInfoAddParam) {
         QyRecordInfoPageParam qyRecordInfoPageParam = BeanUtil.toBean(qyRecordInfoAddParam, QyRecordInfoPageParam.class);
+        qyRecordInfoPageParam.setSortOrder("createTime");
         IPage<QyRecordInfo> page = qyRecordInfoService.page(qyRecordInfoPageParam);
         List<QyRecordInfo> records = page.getRecords();
         String ylTzCode_;
@@ -199,7 +216,7 @@ public class QyRecordInfoController {
     @Operation(summary = "获取企业备案信息详情")
     @SaCheckPermission("/biz/qyrecordinfo/detail")
     @GetMapping("/biz/qyrecordinfo/detail")
-    public CommonResult<QyRecordInfo> detail(@Valid QyRecordInfoIdParam qyRecordInfoIdParam) {
+    public CommonResult<QyRecordInfoAddParam> detail(@Valid QyRecordInfoIdParam qyRecordInfoIdParam) {
         return CommonResult.data(qyRecordInfoService.detail(qyRecordInfoIdParam));
     }
 }

+ 3 - 3
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/param/QyRecordInfoAddParam.java

@@ -17,12 +17,9 @@ import lombok.Getter;
 import lombok.Setter;
 
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import vip.xiaonuo.biz.modular.qyrecardbody.param.QyRecardBodyAddParam;
 import vip.xiaonuo.biz.modular.qyrecordattachment.param.QyRecordAttachmentAddParam;
 
-import java.math.BigDecimal;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -34,6 +31,9 @@ import java.util.List;
 @Getter
 @Setter
 public class QyRecordInfoAddParam {
+    /** id */
+    @Schema(description = "id")
+    private String id;
 
     /** 预录入台账编号 */
     @Schema(description = "预录入台账编号")

+ 1 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/service/QyRecordInfoService.java

@@ -68,7 +68,7 @@ public interface QyRecordInfoService extends IService<QyRecordInfo> {
      * @author hgx
      * @date  2024/07/06 11:20
      */
-    QyRecordInfo detail(QyRecordInfoIdParam qyRecordInfoIdParam);
+    QyRecordInfoAddParam detail(QyRecordInfoIdParam qyRecordInfoIdParam);
 
     /**
      * 获取企业备案信息详情

+ 52 - 7
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfo/service/impl/QyRecordInfoServiceImpl.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.biz.modular.qyrecardbody.entity.QyRecardBody;
 import vip.xiaonuo.biz.modular.qyrecardbody.param.QyRecardBodyAddParam;
 import vip.xiaonuo.biz.modular.qyrecardbody.param.QyRecardBodyEditParam;
@@ -32,7 +33,10 @@ import vip.xiaonuo.biz.modular.qyrecardbody.service.QyRecardBodyService;
 import vip.xiaonuo.biz.modular.qyrecordattachment.entity.QyRecordAttachment;
 import vip.xiaonuo.biz.modular.qyrecordattachment.param.QyRecordAttachmentAddParam;
 import vip.xiaonuo.biz.modular.qyrecordattachment.param.QyRecordAttachmentEditParam;
+import vip.xiaonuo.biz.modular.qyrecordattachment.param.QyRecordAttachmentIdParam;
 import vip.xiaonuo.biz.modular.qyrecordattachment.service.QyRecordAttachmentService;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.entity.QyRecordInfoCheckList;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.service.QyRecordInfoCheckListService;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
@@ -45,6 +49,7 @@ import vip.xiaonuo.biz.modular.qyrecordinfo.param.QyRecordInfoPageParam;
 import vip.xiaonuo.biz.modular.qyrecordinfo.service.QyRecordInfoService;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -63,6 +68,9 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
     @Resource
     private QyRecardBodyService qyRecardBodyService;
 
+    @Resource
+    private QyRecordInfoCheckListService qyRecordInfoCheckListService;
+
     @Override
     public Page<QyRecordInfo> page(QyRecordInfoPageParam qyRecordInfoPageParam) {
         QueryWrapper<QyRecordInfo> queryWrapper = new QueryWrapper<QyRecordInfo>().checkSqlInjection();
@@ -80,7 +88,7 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
         }
         if (ObjectUtil.isAllNotEmpty(qyRecordInfoPageParam.getSortField(), qyRecordInfoPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(qyRecordInfoPageParam.getSortOrder());
-            queryWrapper.orderBy(true, qyRecordInfoPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+            queryWrapper.orderBy(true, qyRecordInfoPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.DESC.getValue()),
                     StrUtil.toUnderlineCase(qyRecordInfoPageParam.getSortField()));
         } else {
             queryWrapper.lambda().orderByAsc(QyRecordInfo::getId);
@@ -93,11 +101,10 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
     public void add(QyRecordInfoAddParam qyRecordInfoAddParam) {
         QyRecordInfo qyRecordInfo = BeanUtil.toBean(qyRecordInfoAddParam, QyRecordInfo.class);
         this.save(qyRecordInfo);
-        QyRecordInfo recordInfo = this.getOne(new LambdaQueryWrapper<QyRecordInfo>().eq(QyRecordInfo::getYlTzCode, qyRecordInfo.getYlTzCode()));
         List<QyRecardBodyAddParam> qyRecardBodyAddParams = qyRecordInfoAddParam.getQyRecardBodyAddParams();
         if(CollectionUtil.isNotEmpty(qyRecardBodyAddParams)){
             qyRecardBodyAddParams.stream().forEach(qyRecardBodyAddParam -> {
-                qyRecardBodyAddParam.setQyRecordInfoId(recordInfo.getId());
+                qyRecardBodyAddParam.setQyRecordInfoId(qyRecordInfo.getId());
                 QyRecardBody qyRecardBody = BeanUtil.toBean(qyRecardBodyAddParam, QyRecardBody.class);
                 qyRecardBody.setQyRecordInfoId(qyRecordInfo.getId());
                 qyRecardBodyService.save(qyRecardBody);
@@ -106,11 +113,20 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
         List<QyRecordAttachmentAddParam> qyRecordAttachmentAddParams = qyRecordInfoAddParam.getQyRecordAttachmentAddParams();
         if(CollectionUtil.isNotEmpty(qyRecordAttachmentAddParams)){
             qyRecordAttachmentAddParams.stream().forEach(qyRecordAttachmentAddParam -> {
-                qyRecordAttachmentAddParam.setQyRecordInfoId(recordInfo.getId());
+                qyRecordAttachmentAddParam.setQyRecordInfoId(qyRecordInfo.getId());
                 QyRecordAttachment qyRecordAttachment = BeanUtil.toBean(qyRecordAttachmentAddParam, QyRecordAttachment.class);
                 qyRecordAttachmentService.save(qyRecordAttachment);
             });
         }
+        QyRecordInfoCheckList qyRecordInfoCheckList = new QyRecordInfoCheckList();
+        qyRecordInfoCheckList.setYlTzCode(qyRecordInfo.getYlTzCode());
+        qyRecordInfoCheckList.setCheckTime(new Date());
+        qyRecordInfoCheckList.setResult("审核中");
+        qyRecordInfoCheckList.setResult("提交成功,待审核");
+        qyRecordInfoCheckList.setApplyType("备案");
+        String nickname = StpLoginUserUtil.getLoginUser().getNickname();
+        qyRecordInfoCheckList.setApplyMan(nickname);
+        qyRecordInfoCheckListService.save(qyRecordInfoCheckList);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -128,6 +144,16 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
             });
             qyRecardBodyService.delete(bodyIdParams);
         }
+        List<QyRecordAttachment> list_ = qyRecordAttachmentService.list(new LambdaQueryWrapper<QyRecordAttachment>().eq(QyRecordAttachment::getQyRecordInfoId, qyRecordInfo.getId()));
+        if(CollectionUtil.isNotEmpty(list_)){
+            List<String> ids = list.stream().map(qyRecordAttachment -> qyRecordAttachment.getId()).collect(Collectors.toList());
+            List<QyRecordAttachmentIdParam> attachmentIdParams = new ArrayList<>();
+            ids.forEach(id ->{
+                attachmentIdParams.add(new QyRecordAttachmentIdParam(id));
+            });
+            qyRecordAttachmentService.delete(attachmentIdParams);
+        }
+
         List<QyRecardBodyEditParam> bodyAddParams = qyRecordInfoEditParam.getQyRecardBodyEditParams();
         if (CollectionUtil.isNotEmpty(bodyAddParams)){
             bodyAddParams.stream().forEach(qyRecardBodyAddParam -> {
@@ -137,7 +163,6 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
                 qyRecardBodyService.save(qyRecardBody);
             });
         }
-
         List<QyRecordAttachmentEditParam> attachmentEditParams = qyRecordInfoEditParam.getQyRecordAttachmentEditParams();
         if(CollectionUtil.isNotEmpty(attachmentEditParams)){
             attachmentEditParams.stream().forEach(qyRecordAttachmentAddParam -> {
@@ -156,8 +181,28 @@ public class QyRecordInfoServiceImpl extends ServiceImpl<QyRecordInfoMapper, QyR
     }
 
     @Override
-    public QyRecordInfo detail(QyRecordInfoIdParam qyRecordInfoIdParam) {
-        return this.queryEntity(qyRecordInfoIdParam.getId());
+    public QyRecordInfoAddParam detail(QyRecordInfoIdParam qyRecordInfoIdParam) {
+        QyRecordInfo recordInfo = this.queryEntity(qyRecordInfoIdParam.getId());
+        List<QyRecardBody> bodyList = qyRecardBodyService.list(new LambdaQueryWrapper<QyRecardBody>().eq(QyRecardBody::getQyRecordInfoId, recordInfo.getId()));
+        List<QyRecordAttachment> attachmentList = qyRecordAttachmentService.list(new LambdaQueryWrapper<QyRecordAttachment>().eq(QyRecordAttachment::getQyRecordInfoId, recordInfo.getId()));
+        QyRecordInfoAddParam param = BeanUtil.toBean(recordInfo, QyRecordInfoAddParam.class);
+        List<QyRecardBodyAddParam> qyRecardBodyAddParamList = new ArrayList<>();
+        List<QyRecordAttachmentAddParam> qyRecordAttachmentAddParamList = new ArrayList<>();
+        if(CollectionUtil.isNotEmpty(bodyList)){
+            bodyList.stream().forEach(item ->{
+                QyRecardBodyAddParam bean = BeanUtil.toBean(item, QyRecardBodyAddParam.class);
+                qyRecardBodyAddParamList.add(bean);
+            });
+        }
+        if(CollectionUtil.isNotEmpty(attachmentList)){
+            attachmentList.stream().forEach(item ->{
+                QyRecordAttachmentAddParam bean_ = BeanUtil.toBean(item, QyRecordAttachmentAddParam.class);
+                qyRecordAttachmentAddParamList.add(bean_);
+            });
+        }
+        param.setQyRecardBodyAddParams(qyRecardBodyAddParamList);
+        param.setQyRecordAttachmentAddParams(qyRecordAttachmentAddParamList);
+        return param;
     }
 
     @Override

+ 174 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/controller/QyRecordInfoCheckListController.java

@@ -0,0 +1,174 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.URLUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.entity.QyRecordInfoCheckList;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListAddParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListEditParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListIdParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListPageParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.service.QyRecordInfoCheckListService;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+import java.io.IOException;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSON;
+import java.net.URLEncoder;
+import java.util.HashMap;
+
+/**
+ * 企业备案信息回执单列表控制器
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ */
+@Tag(name = "企业备案信息回执单列表控制器")
+@RestController
+@Validated
+public class QyRecordInfoCheckListController {
+
+    @Resource
+    private QyRecordInfoCheckListService qyRecordInfoCheckListService;
+
+    /**
+     * 获取企业备案信息回执单列表分页
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    @Operation(summary = "获取企业备案信息回执单列表分页")
+//    @SaCheckPermission("/biz/qyrecordinfochecklist/page")
+    @GetMapping("/biz/qyrecordinfochecklist/page")
+    public CommonResult<Page<QyRecordInfoCheckList>> page(QyRecordInfoCheckListPageParam qyRecordInfoCheckListPageParam) {
+        return CommonResult.data(qyRecordInfoCheckListService.page(qyRecordInfoCheckListPageParam));
+    }
+
+    /**
+     * 添加企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    @Operation(summary = "添加企业备案信息回执单列表")
+    @CommonLog("添加企业备案信息回执单列表")
+    @SaCheckPermission("/biz/qyrecordinfochecklist/add")
+    @PostMapping("/biz/qyrecordinfochecklist/add")
+    public CommonResult<String> add(@RequestBody @Valid QyRecordInfoCheckListAddParam qyRecordInfoCheckListAddParam) {
+        qyRecordInfoCheckListService.add(qyRecordInfoCheckListAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    @Operation(summary = "编辑企业备案信息回执单列表")
+    @CommonLog("编辑企业备案信息回执单列表")
+    @SaCheckPermission("/biz/qyrecordinfochecklist/edit")
+    @PostMapping("/biz/qyrecordinfochecklist/edit")
+    public CommonResult<String> edit(@RequestBody @Valid QyRecordInfoCheckListEditParam qyRecordInfoCheckListEditParam) {
+        qyRecordInfoCheckListService.edit(qyRecordInfoCheckListEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 导出企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    @Operation(summary = "导出企业备案信息回执单列表")
+    @CommonLog("导出企业备案信息回执单列表")
+    @SaCheckPermission("/biz/qyrecordinfochecklist/export")
+    @PostMapping("/biz/qyrecordinfochecklist/export")
+    public void export(@RequestBody @Valid QyRecordInfoCheckListPageParam qyRecordInfoCheckListPageParam, HttpServletResponse response) {
+        Page<QyRecordInfoCheckList> page =  qyRecordInfoCheckListService.page(qyRecordInfoCheckListPageParam);
+        List<QyRecordInfoCheckList> records = page.getRecords();
+        exportExcel(response,QyRecordInfoCheckList.class,records,"企业备案信息回执单列表");
+    }
+
+
+    /**
+     * 导出表格数据
+     * @param cl       表格字段实体类
+     * @param data     查询数据
+     * @param sheetName  表格名称
+     */
+    public void exportExcel(HttpServletResponse response, Class cl, List data, String sheetName){
+       HashMap<String, String> map = new HashMap<>();
+       try {
+           response.setHeader("Content-disposition", "attachment;filename=" + URLUtil.encode(sheetName) + ".xlsx");
+           response.setHeader("Access-Control-Allow-Origin", "*");
+           response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+           response.setContentType("application/octet-stream;charset=UTF-8");
+           EasyExcel.write(response.getOutputStream(), cl).autoCloseStream(Boolean.FALSE).sheet(sheetName).doWrite(data);
+       } catch (IOException e) {
+           response.reset();
+           response.setContentType("application/json");
+           response.setCharacterEncoding("utf-8");
+           map.put("status", "failure");
+           map.put("message", "下载文件失败" + e.getMessage());
+           try {
+               response.getWriter().println(JSON.toJSONString(map));
+           } catch (IOException ex) {
+               ex.printStackTrace();
+           }
+       }
+    }
+
+    /**
+     * 删除企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    @Operation(summary = "删除企业备案信息回执单列表")
+    @CommonLog("删除企业备案信息回执单列表")
+    @SaCheckPermission("/biz/qyrecordinfochecklist/delete")
+    @PostMapping("/biz/qyrecordinfochecklist/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<QyRecordInfoCheckListIdParam> qyRecordInfoCheckListIdParamList) {
+        qyRecordInfoCheckListService.delete(qyRecordInfoCheckListIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取企业备案信息回执单列表详情
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    @Operation(summary = "获取企业备案信息回执单列表详情")
+    @SaCheckPermission("/biz/qyrecordinfochecklist/detail")
+    @GetMapping("/biz/qyrecordinfochecklist/detail")
+    public CommonResult<QyRecordInfoCheckList> detail(@Valid QyRecordInfoCheckListIdParam qyRecordInfoCheckListIdParam) {
+        return CommonResult.data(qyRecordInfoCheckListService.detail(qyRecordInfoCheckListIdParam));
+    }
+}

+ 76 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/entity/QyRecordInfoCheckList.java

@@ -0,0 +1,76 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.entity;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 企业备案信息回执单列表实体
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Getter
+@Setter
+@TableName("qy_record_info_check_list")
+public class QyRecordInfoCheckList {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 0,value = "主键")
+    private String id;
+
+    /** 预录入台账编号 */
+    @Schema(description = "预录入台账编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 1,value = "预录入台账编号")
+    private String ylTzCode;
+
+    /** 单据类型 */
+    @Schema(description = "单据类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 2,value = "单据类型")
+    private String applyType;
+
+    /** 审核状态 */
+    @Schema(description = "审核状态")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 3,value = "审核状态")
+    private String status;
+
+    /** 审核人 */
+    @Schema(description = "审核人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 4,value = "审核人")
+    private String applyMan;
+
+    /** 审核时间 */
+    @Schema(description = "审核时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 5,value = "审核时间")
+    private Date checkTime;
+
+    /** 审核结果回执 */
+    @Schema(description = "审核结果回执")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 6,value = "审核结果回执")
+    private String result;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/enums/QyRecordInfoCheckListEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.enums;
+
+import lombok.Getter;
+
+/**
+ * 企业备案信息回执单列表枚举
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Getter
+public enum QyRecordInfoCheckListEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    QyRecordInfoCheckListEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/mapper/QyRecordInfoCheckListMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.entity.QyRecordInfoCheckList;
+
+/**
+ * 企业备案信息回执单列表Mapper接口
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+public interface QyRecordInfoCheckListMapper extends BaseMapper<QyRecordInfoCheckList> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/mapper/mapping/QyRecordInfoCheckListMapper.xml

@@ -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="vip.xiaonuo.biz.modular.qyrecordinfochecklist.mapper.QyRecordInfoCheckListMapper">
+
+</mapper>

+ 58 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListAddParam.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 企业备案信息回执单列表添加参数
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Getter
+@Setter
+public class QyRecordInfoCheckListAddParam {
+
+    /** 预录入台账编号 */
+    @Schema(description = "预录入台账编号")
+    private String ylTzCode;
+
+    /** 单据类型 */
+    @Schema(description = "单据类型")
+    private String applyType;
+
+    /** 审核状态 */
+    @Schema(description = "审核状态")
+    private String status;
+
+    /** 审核人 */
+    @Schema(description = "审核人")
+    private String applyMan;
+
+    /** 审核时间 */
+    @Schema(description = "审核时间")
+    private Date checkTime;
+
+    /** 审核结果回执 */
+    @Schema(description = "审核结果回执")
+    private String result;
+
+}

+ 63 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 企业备案信息回执单列表编辑参数
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Getter
+@Setter
+public class QyRecordInfoCheckListEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 预录入台账编号 */
+    @Schema(description = "预录入台账编号")
+    private String ylTzCode;
+
+    /** 单据类型 */
+    @Schema(description = "单据类型")
+    private String applyType;
+
+    /** 审核状态 */
+    @Schema(description = "审核状态")
+    private String status;
+
+    /** 审核人 */
+    @Schema(description = "审核人")
+    private String applyMan;
+
+    /** 审核时间 */
+    @Schema(description = "审核时间")
+    private Date checkTime;
+
+    /** 审核结果回执 */
+    @Schema(description = "审核结果回执")
+    private String result;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 企业备案信息回执单列表Id参数
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Getter
+@Setter
+public class QyRecordInfoCheckListIdParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/param/QyRecordInfoCheckListPageParam.java

@@ -0,0 +1,51 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 企业备案信息回执单列表查询参数
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Getter
+@Setter
+public class QyRecordInfoCheckListPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/service/QyRecordInfoCheckListService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.entity.QyRecordInfoCheckList;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListAddParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListEditParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListIdParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListPageParam;
+
+import java.util.List;
+
+/**
+ * 企业备案信息回执单列表Service接口
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+public interface QyRecordInfoCheckListService extends IService<QyRecordInfoCheckList> {
+
+    /**
+     * 获取企业备案信息回执单列表分页
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    Page<QyRecordInfoCheckList> page(QyRecordInfoCheckListPageParam qyRecordInfoCheckListPageParam);
+
+    /**
+     * 添加企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    void add(QyRecordInfoCheckListAddParam qyRecordInfoCheckListAddParam);
+
+    /**
+     * 编辑企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    void edit(QyRecordInfoCheckListEditParam qyRecordInfoCheckListEditParam);
+
+    /**
+     * 删除企业备案信息回执单列表
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    void delete(List<QyRecordInfoCheckListIdParam> qyRecordInfoCheckListIdParamList);
+
+    /**
+     * 获取企业备案信息回执单列表详情
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     */
+    QyRecordInfoCheckList detail(QyRecordInfoCheckListIdParam qyRecordInfoCheckListIdParam);
+
+    /**
+     * 获取企业备案信息回执单列表详情
+     *
+     * @author hgx
+     * @date  2024/07/06 15:05
+     **/
+    QyRecordInfoCheckList queryEntity(String id);
+}

+ 94 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qyrecordinfochecklist/service/impl/QyRecordInfoCheckListServiceImpl.java

@@ -0,0 +1,94 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.qyrecordinfochecklist.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.entity.QyRecordInfoCheckList;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.mapper.QyRecordInfoCheckListMapper;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListAddParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListEditParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListIdParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.param.QyRecordInfoCheckListPageParam;
+import vip.xiaonuo.biz.modular.qyrecordinfochecklist.service.QyRecordInfoCheckListService;
+
+import java.util.List;
+
+/**
+ * 企业备案信息回执单列表Service接口实现类
+ *
+ * @author hgx
+ * @date  2024/07/06 15:05
+ **/
+@Service
+public class QyRecordInfoCheckListServiceImpl extends ServiceImpl<QyRecordInfoCheckListMapper, QyRecordInfoCheckList> implements QyRecordInfoCheckListService {
+
+    @Override
+    public Page<QyRecordInfoCheckList> page(QyRecordInfoCheckListPageParam qyRecordInfoCheckListPageParam) {
+        QueryWrapper<QyRecordInfoCheckList> queryWrapper = new QueryWrapper<QyRecordInfoCheckList>().checkSqlInjection();
+        if(ObjectUtil.isAllNotEmpty(qyRecordInfoCheckListPageParam.getSortField(), qyRecordInfoCheckListPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(qyRecordInfoCheckListPageParam.getSortOrder());
+            queryWrapper.orderBy(true, qyRecordInfoCheckListPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(qyRecordInfoCheckListPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(QyRecordInfoCheckList::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(QyRecordInfoCheckListAddParam qyRecordInfoCheckListAddParam) {
+        QyRecordInfoCheckList qyRecordInfoCheckList = BeanUtil.toBean(qyRecordInfoCheckListAddParam, QyRecordInfoCheckList.class);
+        this.save(qyRecordInfoCheckList);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(QyRecordInfoCheckListEditParam qyRecordInfoCheckListEditParam) {
+        QyRecordInfoCheckList qyRecordInfoCheckList = this.queryEntity(qyRecordInfoCheckListEditParam.getId());
+        BeanUtil.copyProperties(qyRecordInfoCheckListEditParam, qyRecordInfoCheckList);
+        this.updateById(qyRecordInfoCheckList);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<QyRecordInfoCheckListIdParam> qyRecordInfoCheckListIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(qyRecordInfoCheckListIdParamList, QyRecordInfoCheckListIdParam::getId));
+    }
+
+    @Override
+    public QyRecordInfoCheckList detail(QyRecordInfoCheckListIdParam qyRecordInfoCheckListIdParam) {
+        return this.queryEntity(qyRecordInfoCheckListIdParam.getId());
+    }
+
+    @Override
+    public QyRecordInfoCheckList queryEntity(String id) {
+        QyRecordInfoCheckList qyRecordInfoCheckList = this.getById(id);
+        if(ObjectUtil.isEmpty(qyRecordInfoCheckList)) {
+            throw new CommonException("企业备案信息回执单列表不存在,id值为:{}", id);
+        }
+        return qyRecordInfoCheckList;
+    }
+}