Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

heguanxun 1 год назад
Родитель
Сommit
fac7d35491
65 измененных файлов с 5362 добавлено и 25 удалено
  1. 1 1
      snowy-admin-web/src/views/biz/qyrecordinfo/detail.vue
  2. 1 8
      snowy-admin-web/src/views/yqyc/general-ledger/one/index.vue
  3. 1 8
      snowy-admin-web/src/views/yqyc/general-ledger/two/index.vue
  4. 828 0
      snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/detail.vue
  5. 255 0
      snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/index.vue
  6. 1 1
      snowy-admin-web/src/views/yqyc/zero/enterprise-qualification/detail.vue
  7. 1 7
      snowy-admin-web/src/views/yqyc/zero/enterprise-qualification/index.vue
  8. 172 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/controller/QySecondlineHfdController.java
  9. 266 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/entity/QySecondlineHfd.java
  10. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/enums/QySecondlineHfdEnum.java
  11. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/mapper/QySecondlineHfdMapper.java
  12. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/mapper/mapping/QySecondlineHfdMapper.xml
  13. 168 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdAddParam.java
  14. 32 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdBaseParam.java
  15. 171 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdEditParam.java
  16. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdIdParam.java
  17. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdPageParam.java
  18. 78 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/service/QySecondlineHfdService.java
  19. 225 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/service/impl/QySecondlineHfdServiceImpl.java
  20. 40 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/vo/QySecondlineHfdDetailVo.java
  21. 174 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/controller/QySecondlineHfdAttachmentController.java
  22. 104 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/entity/QySecondlineHfdAttachment.java
  23. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/enums/QySecondlineHfdAttachmentEnum.java
  24. 46 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/enums/QySecondlineHfdStatusEnum.java
  25. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/mapper/QySecondlineHfdAttachmentMapper.java
  26. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/mapper/mapping/QySecondlineHfdAttachmentMapper.xml
  27. 58 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentAddParam.java
  28. 63 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentEditParam.java
  29. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentIdParam.java
  30. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentPageParam.java
  31. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/service/QySecondlineHfdAttachmentService.java
  32. 94 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/service/impl/QySecondlineHfdAttachmentServiceImpl.java
  33. 174 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/controller/QySecondlineHfdDzController.java
  34. 92 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/entity/QySecondlineHfdDz.java
  35. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/enums/QySecondlineHfdDzEnum.java
  36. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/mapper/QySecondlineHfdDzMapper.java
  37. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/mapper/mapping/QySecondlineHfdDzMapper.xml
  38. 50 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzAddParam.java
  39. 55 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzEditParam.java
  40. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzIdParam.java
  41. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzPageParam.java
  42. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/service/QySecondlineHfdDzService.java
  43. 94 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/service/impl/QySecondlineHfdDzServiceImpl.java
  44. 182 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/controller/QySecondlineHfdListController.java
  45. 104 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/entity/QySecondlineHfdList.java
  46. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/enums/QySecondlineHfdListEnum.java
  47. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/mapper/QySecondlineHfdListMapper.java
  48. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/mapper/mapping/QySecondlineHfdListMapper.xml
  49. 58 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListAddParam.java
  50. 63 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListEditParam.java
  51. 37 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListIdParam.java
  52. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListPageParam.java
  53. 82 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/service/QySecondlineHfdListService.java
  54. 109 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/service/impl/QySecondlineHfdListServiceImpl.java
  55. 174 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/controller/QySecondlineHfdProductController.java
  56. 122 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/entity/QySecondlineHfdProduct.java
  57. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/enums/QySecondlineHfdProductEnum.java
  58. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/mapper/QySecondlineHfdProductMapper.java
  59. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/mapper/mapping/QySecondlineHfdProductMapper.xml
  60. 67 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductAddParam.java
  61. 71 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductEditParam.java
  62. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductIdParam.java
  63. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductPageParam.java
  64. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/service/QySecondlineHfdProductService.java
  65. 94 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/service/impl/QySecondlineHfdProductServiceImpl.java

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

@@ -156,4 +156,4 @@
 </script>
 
 <style lang="less" scoped>
-</style>
+</style>

+ 1 - 8
snowy-admin-web/src/views/yqyc/general-ledger/one/index.vue

@@ -151,18 +151,11 @@
         <template v-if="column.dataIndex === 'action'">
           <a-space>
             <a @click="onDetail(record, true)" v-if="hasPerm('qyFrontlineWarehouseView')">查看</a>
-            <a-divider type="vertical"
-                       v-if="hasPerm('qyFrontlineWarehouseView') && hasPerm(['qyFrontlineWarehouseEdit', 'qyFrontlineWarehouseDelete'], 'or')"/>
             <a @click="onDetail(record)" v-if="hasPerm('qyFrontlineWarehouseEdit')">编辑</a>
-            <a-divider type="vertical"
-                       v-if="hasPerm(['qyFrontlineWarehouseEdit', 'qyFrontlineWarehouseDelete'], 'and')"/>
             <a-popconfirm title="确定要删除吗?" @confirm="deleteQyFrontlineWarehouse(record)">
               <a-button type="link" danger size="small" v-if="hasPerm('qyFrontlineWarehouseDelete')">删除</a-button>
             </a-popconfirm>
-            <a-divider type="vertical"
-                       v-if="hasPerm(['qyFrontlineWarehouseView', 'qyFrontlineWarehouseEdit', 'qyFrontlineWarehouseDelete'])"/>
             <a-button type="link" primary size="small" @click="goodsDetailRef.onOpen(record)">{{ (record.warehouseType == 0 ? '入' : '出') + '库单' }}</a-button>
-            <a-divider type="vertical"/>
             <a-button type="link" primary size="small" @click="certificateDetailRef.onOpen(record)">记账凭证</a-button>
           </a-space>
         </template>
@@ -283,7 +276,7 @@ watch(() => searchFormStateReal.value.warehouseType, (n) => {
 if (hasPerm(['qyFrontlineWarehouseView', 'qyFrontlineWarehouseEdit', 'qyFrontlineWarehouseDelete'])) {
   columns.value.forEach(v => {
     if (v.dataIndex === 'action') {
-      v.width = 400
+      v.width = 200
     }
   })
 }

+ 1 - 8
snowy-admin-web/src/views/yqyc/general-ledger/two/index.vue

@@ -145,18 +145,11 @@
         <template v-if="column.dataIndex === 'action'">
           <a-space>
             <a @click="onDetail(record, true)" v-if="hasPerm('qySecondlineWarehouseView')">查看</a>
-            <a-divider type="vertical"
-                       v-if="hasPerm('qySecondlineWarehouseView') && hasPerm(['qySecondlineWarehouseEdit', 'qySecondlineWarehouseDelete'], 'or')"/>
             <a @click="onDetail(record)" v-if="hasPerm('qySecondlineWarehouseEdit')">编辑</a>
-            <a-divider type="vertical"
-                       v-if="hasPerm(['qySecondlineWarehouseEdit', 'qySecondlineWarehouseDelete'], 'and')"/>
             <a-popconfirm title="确定要删除吗?" @confirm="deleteQySecondlineWarehouse(record)">
               <a-button type="link" danger size="small" v-if="hasPerm('qySecondlineWarehouseDelete')">删除</a-button>
             </a-popconfirm>
-            <a-divider type="vertical"
-                       v-if="hasPerm(['qySecondlineWarehouseView', 'qySecondlineWarehouseEdit', 'qySecondlineWarehouseDelete'])"/>
             <a-button type="link" primary size="small" @click="goodsDetailRef.onOpen(record)">出库单</a-button>
-            <a-divider type="vertical"/>
             <a-button type="link" primary size="small" @click="certificateDetailRef.onOpen(record)">记账凭证</a-button>
           </a-space>
         </template>
@@ -266,7 +259,7 @@ const columns = ref([
 if (hasPerm(['qyFrontlineWarehouseView', 'qyFrontlineWarehouseEdit', 'qyFrontlineWarehouseDelete'])) {
   columns.value.forEach(v => {
     if (v.dataIndex === 'action') {
-      v.width = 400
+      v.width = 200
     }
   })
 }

+ 828 - 0
snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/detail.vue

@@ -0,0 +1,828 @@
+<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="onTemp" v-if="!isView">
+					<a-button style="margin-right: 8px" :loading="submitLoading">保存</a-button>
+				</a-popconfirm>
+				<a-popconfirm title="请确认是否申报?" @confirm="onSubmit" v-if="!isView">
+					<a-button type="primary" :loading="submitLoading">申报</a-button>
+				</a-popconfirm>
+			</template>
+		</a-page-header>
+		<a-collapse v-model:activeKey="activeKey" expand-icon-position="end">
+			<a-collapse-panel key="1" header="基本信息">
+				<a-form ref="formRef" :model="formData" :rules="formRules" layout="inline">
+					<a-row :gutter="[0, 16]">
+						<a-col :span="8">
+							<a-form-item label="预录入台账编号:" name="ylTzCode">
+								<a-input v-model:value="formData.ylTzCode" :disabled="true" placeholder="请输入预录入台账编号"
+										 allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="台账编号:" name="tzCode">
+								<a-input v-model:value="formData.tzCode" :disabled="true" placeholder="请输入台账编号"
+										 allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="台账性质:" name="tzType">
+								<a-select v-model:value="formData.tzType" :disabled="isView" placeholder="请选择台账性质"
+										  :options="tzTypeOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="海关注册编码:" name="companyMainHgCode">
+								<a-input v-model:value="formData.companyMainHgCode" :disabled="isView"
+										 placeholder="请输入海关注册编码" allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="统一社会信用代码:" name="companyCode">
+								<a-input v-model:value="formData.companyCode" :disabled="true"
+										 placeholder="请输入统一社会信用代码" allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="企业名称:" name="companyName">
+								<a-input v-model:value="formData.companyName" :disabled="true" placeholder="请输入企业名称"
+										 allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报类型:" name="applyType">
+								<a-select v-model:value="formData.applyType" :disabled="true" placeholder="请选择申报类型"
+										  :options="applyTypeOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="企业类型:" name="companyType">
+								<a-select v-model:value="formData.companyType" :disabled="true" placeholder="请选择企业类型"
+										  :options="companyTypeOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="企业地址:" name="companyAddress">
+								<a-input v-model:value="formData.companyAddress" :disabled="true" placeholder="请输入企业地址"
+										 allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="联系人:" name="companyLinkMan">
+								<a-input v-model:value="formData.companyLinkMan" :disabled="true" placeholder="请输入联系人"
+										 allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="联系电话:" name="companyLegalPhone">
+								<a-input v-model:value="formData.companyLegalPhone" :disabled="true"
+										 placeholder="请输入联系电话" allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="经营范围:" name="companyJyFw">
+								<a-input v-model:value="formData.companyJyFw" :disabled="true" placeholder="请输入经营范围"
+										 allow-clear/>
+							</a-form-item>
+						</a-col>
+					</a-row>
+				</a-form>
+			</a-collapse-panel>
+			<a-collapse-panel key="2" header="表体信息">
+				<a-button type="primary" @click="onBodyReset">重置</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">
+							<a-form-item label="商品编码:" name="productCode">
+								<a-input v-model:value="bodyData.productCode" :disabled="isView" placeholder="请输入商品编码" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="商品名称:" name="productName">
+								<a-input v-model:value="bodyData.productName" :disabled="isView" placeholder="请输入商品名称" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="规格型号:" name="specModel">
+								<a-input v-model:value="bodyData.specModel" :disabled="isView" placeholder="请输入规格型号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="备案数量:" name="recordQuantity">
+								<a-input v-model:value="bodyData.recordQuantity" :disabled="isView" placeholder="请输入备案数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="备案计量单位:" name="recordUnit">
+								<a-input v-model:value="bodyData.recordUnit" :disabled="isView" placeholder="请输入备案计量单位" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报计量单位:" name="declareUnit">
+								<a-input v-model:value="bodyData.declareUnit" :disabled="isView" placeholder="请输入申报计量单位" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="法定计量单位:" name="legalUnit">
+								<a-input v-model:value="bodyData.legalUnit" :disabled="isView" placeholder="请输入法定计量单位" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="法定第二计量单位:" name="legalSecondUnit">
+								<a-input v-model:value="bodyData.legalSecondUnit" :disabled="isView" placeholder="请输入法定第二计量单位" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="原产国(地区):" name="originCountry">
+								<a-input v-model:value="bodyData.originCountry" :disabled="isView" placeholder="请输入原产国(地区)" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="备案单价:" name="recordPrice">
+								<a-input v-model:value="bodyData.recordPrice" :disabled="isView" placeholder="请输入备案单价" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="备案总价:" name="recordTotalPrice">
+								<a-input v-model:value="bodyData.recordTotalPrice" :disabled="isView" placeholder="请输入备案总价" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="币制:" name="currency">
+								<a-input v-model:value="bodyData.currency" :disabled="isView" placeholder="请输入币制" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="法定数量:" name="legalQuantity">
+								<a-input v-model:value="bodyData.legalQuantity" :disabled="isView" placeholder="请输入法定数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="第二法定数量:" name="secondLegalQuantity">
+								<a-input v-model:value="bodyData.secondLegalQuantity" :disabled="isView" placeholder="请输入第二法定数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="重量比例因子:" name="weightRatioFactor">
+								<a-input v-model:value="bodyData.weightRatioFactor" :disabled="isView" placeholder="请输入重量比例因子" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="第一比例因子:" name="firstRatioFactor">
+								<a-input v-model:value="bodyData.firstRatioFactor" :disabled="isView" placeholder="请输入第一比例因子" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="第二比例因子:" name="secondRatioFactor">
+								<a-input v-model:value="bodyData.secondRatioFactor" :disabled="isView" placeholder="请输入第二比例因子" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="毛重(KG):" name="grossWeight">
+								<a-input v-model:value="bodyData.grossWeight" :disabled="isView" placeholder="请输入毛重(KG)" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="净重(KG):" name="netWeight">
+								<a-input v-model:value="bodyData.netWeight" :disabled="isView" placeholder="请输入净重(KG)" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="备案数量:" name="recordAmount">
+								<a-input v-model:value="bodyData.recordAmount" :disabled="isView" placeholder="请输入备案数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="剩余备案数量:" name="remainingRecordAmount">
+								<a-input v-model:value="bodyData.remainingRecordAmount" :disabled="isView" placeholder="请输入剩余备案数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="进账累计数量:" name="inAccountCumulativeAmount">
+								<a-input v-model:value="bodyData.inAccountCumulativeAmount" :disabled="isView" placeholder="请输入进账累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="出账累计数量:" name="outAccountCumulativeAmount">
+								<a-input v-model:value="bodyData.outAccountCumulativeAmount" :disabled="isView" placeholder="请输入出账累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="库存累计数量:" name="inventoryCumulativeAmount">
+								<a-input v-model:value="bodyData.inventoryCumulativeAmount" :disabled="isView" placeholder="请输入库存累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="一线进区累计数量:" name="firstInAmount">
+								<a-input v-model:value="bodyData.firstInAmount" :disabled="isView" placeholder="请输入一线进区累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="一线出区累计数量:" name="firstOutAmount">
+								<a-input v-model:value="bodyData.firstOutAmount" :disabled="isView" placeholder="请输入一线出区累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="二线进区累计数量:" name="secondInAmount">
+								<a-input v-model:value="bodyData.secondInAmount" :disabled="isView" placeholder="请输入二线进区累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="二线出区累计数量:" name="secondOutAmount">
+								<a-input v-model:value="bodyData.secondOutAmount" :disabled="isView" placeholder="请输入二线出区累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="区内转入累计数量:" name="intraZoneTransferInAmount">
+								<a-input v-model:value="bodyData.intraZoneTransferInAmount" :disabled="isView" placeholder="请输入区内转入累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="区内转出累计数量:" name="intraZoneTransferOutAmount">
+								<a-input v-model:value="bodyData.intraZoneTransferOutAmount" :disabled="isView" placeholder="请输入区内转出累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="区外转入累计数量:" name="extraZoneTransferInAmount">
+								<a-input v-model:value="bodyData.extraZoneTransferInAmount" :disabled="isView" placeholder="请输入区外转入累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="转至区外累计数量:" name="transferToExtraZoneAmount">
+								<a-input v-model:value="bodyData.transferToExtraZoneAmount" :disabled="isView" placeholder="请输入转至区外累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="补税累计数量:" name="compensationTaxAmount">
+								<a-input v-model:value="bodyData.compensationTaxAmount" :disabled="isView" placeholder="请输入补税累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="核销累计数量:" name="writeOffAmount">
+								<a-input v-model:value="bodyData.writeOffAmount" :disabled="isView" placeholder="请输入核销累计数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="修改标志:" name="modifyFlag">
+								<a-input v-model:value="bodyData.modifyFlag" :disabled="isView" placeholder="请输入修改标志" allow-clear />
+							</a-form-item>
+						</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"
+				/>
+				<a-table
+					style="margin-top: 10px"
+					bordered
+					:dataSource="bodyList"
+					:columns="bodyColumns"
+					:pagination="false"
+					:scroll="{ x: 2000 }"
+					:row-selection="bodyOptions.rowSelection"
+				>
+					<template #bodyCell="{ column, record, index }">
+						<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="onBodyDel(index)">删除</a-button>
+							</template>
+						</template>
+					</template>
+				</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"/>
+				<a-table
+					style="margin-top: 10px"
+					bordered
+					:dataSource="fileList"
+					:columns="fileColumns"
+					:pagination="false"
+					:row-selection="fileOptions.rowSelection"
+				>
+					<template #bodyCell="{ column, record, index, text }">
+						<template v-if="['attachmentName', 'attachmentFormat', 'attachmentContent'].includes(column.dataIndex)">
+							<div>
+								<a-input
+									v-if="!isView"
+									v-model:value="record[column.dataIndex]"
+									style="margin: -5px 0"
+								/>
+								<template v-else>
+									{{ text }}
+								</template>
+							</div>
+						</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>
+							</template>
+						</template>
+					</template>
+				</a-table>
+			</a-collapse-panel>
+		</a-collapse>
+	</a-card>
+</template>
+
+<script setup name="qyRecordInfoDetail">
+import tool from '@/utils/tool'
+import {cloneDeep} from 'lodash-es'
+import {required} from '@/utils/formRules'
+import qyRecordInfoApi from '@/api/biz/qyRecordInfoApi'
+import {message, Modal} from "ant-design-vue";
+import {createVNode} from "vue";
+import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
+// 抽屉状态
+const { proxy } = getCurrentInstance()
+
+const emit = defineEmits({successful: null, onClose: null})
+const formRef = ref()
+const bodyFormRef = ref()
+const ref_upload = ref()
+// 表单数据
+const formData = ref({})
+const bodyData = ref({})
+const fileData = ref({})
+const submitLoading = ref(false)
+const isView = ref(false)
+const showFileUpload = ref(true)
+const tzTypeOptions = ref([])
+const applyTypeOptions = ref([])
+const companyTypeOptions = ref([])
+const activeKey = ref('1')
+const bodySelectedRowKeys = ref([])
+const bodyList = ref([])
+const userInfo = tool.data.get('USER_INFO')
+
+// 列表选择配置
+const bodyOptions = {
+	rowSelection: {
+		onChange: (selectedRowKey, selectedRows) => {
+			bodySelectedRowKeys.value = selectedRows
+		}
+	}
+}
+const fileSelectedRowKeys = ref([])
+const fileList = ref([])
+// 列表选择配置
+const fileOptions = {
+	rowSelection: {
+		onChange: (selectedRowKey, selectedRows) => {
+			fileSelectedRowKeys.value = selectedRows
+		}
+	}
+}
+// 打开抽屉
+const onOpen = (record, view = false) => {
+	isView.value = view
+	if (record) {
+		let recordData = cloneDeep(record)
+		formData.value = Object.assign({}, recordData)
+	} else {
+		formData.value.companyCode = userInfo.companyNumber
+		formData.value.companyName = userInfo.companyName
+		formData.value.companyType = userInfo.companyType
+		formData.value.companyAddress = userInfo.companyAddress
+		formData.value.companyLinkMan = userInfo.contactName
+		formData.value.companyLegalPhone = userInfo.contactPhone
+		formData.value.companyJyFw = userInfo.businessScope
+		formData.value.applyType = 'basq'
+	}
+	tzTypeOptions.value = tool.dictList('tzlx')
+	applyTypeOptions.value = tool.dictList('qybalx')
+	companyTypeOptions.value = tool.dictList('qylx')
+}
+// 关闭抽屉
+const onClose = () => {
+	formRef.value.resetFields()
+	formData.value = {}
+	isView.value = true
+	emit('onClose')
+}
+// 默认要校验的
+const formRules = {
+	companyMainHgCode: [required('请输入海关注册编码')],
+	companyCode: [required('请输入统一社会信用代码')],
+	companyName: [required('请输入企业名称')],
+	applyType: [required('请输入申报类型')],
+	companyType: [required('请输入企业类型')],
+	companyAddress: [required('请输入企业地址')],
+	companyLinkMan: [required('请输入联系人')],
+	companyLegalPhone: [required('请输入联系电话')],
+	companyJyFw: [required('请输入经营范围')],
+}
+// 默认要校验的
+const bodyRules = {
+	productCode: [required('请输入商品编码')],
+	productName: [required('请输入商品名称')],
+	specModel: [required('请输入规格型号')],
+	recordQuantity: [required('请输入备案数量')],
+	recordUnit: [required('请输入备案计量单位')],
+	legalUnit: [required('请输入法定计量单位')],
+	originCountry: [required('请输入原产国(地区)')],
+	recordPrice: [required('请输入备案单价')],
+	recordTotalPrice: [required('请输入备案总价')],
+	currency: [required('请输入币制')],
+	legalQuantity: [required('请输入法定数量')],
+	recordAmount: [required('请输入备案数量')],
+}
+const bodyColumns = [
+	{
+		title: '商品编码',
+		dataIndex: 'productCode',
+		width: 100,
+		fixed: 'left'
+	},
+	{
+		title: '商品名称',
+		dataIndex: 'productName',
+		width: 100,
+		fixed: 'left'
+	},
+	{
+		title: '规格型号',
+		dataIndex: 'specModel',
+		width: 100
+	},
+	{
+		title: '备案数量',
+		dataIndex: 'recordQuantity',
+		width: 100
+	},
+	{
+		title: '备案计量单位',
+		dataIndex: 'recordUnit',
+		width: 120
+	},
+	{
+		title: '申报计量单位',
+		dataIndex: 'declareUnit',
+		width: 120
+	},
+	{
+		title: '法定计量单位',
+		dataIndex: 'legalUnit',
+		width: 120
+	},
+	{
+		title: '法定第二计量单位',
+		dataIndex: 'legalSecondUnit',
+		width: 160
+	},
+	{
+		title: '原产国(地区)',
+		dataIndex: 'originCountry',
+		width: 140
+	},
+	{
+		title: '备案单价',
+		dataIndex: 'recordPrice',
+		width: 100
+	},
+	{
+		title: '备案总价',
+		dataIndex: 'recordTotalPrice',
+		width: 100
+	},
+	{
+		title: '币制',
+		dataIndex: 'currency',
+		width: 100
+	},
+	{
+		title: '法定数量',
+		dataIndex: 'legalQuantity',
+		width: 100
+	},
+	{
+		title: '第二法定数量',
+		dataIndex: 'secondLegalQuantity',
+		width: 120
+	},
+	{
+		title: '重量比例因子',
+		dataIndex: 'weightRatioFactor',
+		width: 120
+	},
+	{
+		title: '第一比例因子',
+		dataIndex: 'firstRatioFactor',
+		width: 120
+	},
+	{
+		title: '第二比例因子',
+		dataIndex: 'secondRatioFactor',
+		width: 120
+	},
+	{
+		title: '毛重(KG)',
+		dataIndex: 'grossWeight',
+		width: 120
+	},
+	{
+		title: '净重(KG)',
+		dataIndex: 'netWeight',
+		width: 120
+	},
+	{
+		title: '备案数量',
+		dataIndex: 'recordAmount',
+		width: 100
+	},
+	{
+		title: '剩余备案数量',
+		dataIndex: 'remainingRecordAmount',
+		width: 120
+	},
+	{
+		title: '进账累计数量',
+		dataIndex: 'inAccountCumulativeAmount',
+		width: 120
+	},
+	{
+		title: '出账累计数量',
+		dataIndex: 'outAccountCumulativeAmount',
+		width: 120
+	},
+	{
+		title: '库存累计数量',
+		dataIndex: 'inventoryCumulativeAmount',
+		width: 120
+	},
+	{
+		title: '一线进区累计数量',
+		dataIndex: 'firstInAmount',
+		width: 160
+	},
+	{
+		title: '一线出区累计数量',
+		dataIndex: 'firstOutAmount',
+		width: 160
+	},
+	{
+		title: '二线进区累计数量',
+		dataIndex: 'secondInAmount',
+		width: 160
+	},
+	{
+		title: '二线出区累计数量',
+		dataIndex: 'secondOutAmount',
+		width: 160
+	},
+	{
+		title: '区内转入累计数量',
+		dataIndex: 'intraZoneTransferInAmount',
+		width: 160
+	},
+	{
+		title: '区内转出累计数量',
+		dataIndex: 'intraZoneTransferOutAmount',
+		width: 160
+	},
+	{
+		title: '区外转入累计数量',
+		dataIndex: 'extraZoneTransferInAmount',
+		width: 160
+	},
+	{
+		title: '转至区外累计数量',
+		dataIndex: 'transferToExtraZoneAmount',
+		width: 160
+	},
+	{
+		title: '补税累计数量',
+		dataIndex: 'compensationTaxAmount',
+		width: 120
+	},
+	{
+		title: '核销累计数量',
+		dataIndex: 'writeOffAmount',
+		width: 120
+	},
+	{
+		title: '修改标志',
+		dataIndex: 'modifyFlag',
+		width: 100
+	},
+	{
+		title: '操作',
+		dataIndex: 'action',
+		width: 160,
+		fixed: 'right'
+	},
+]
+const fileColumns = [
+	{
+		title: '附件名称',
+		dataIndex: 'attachmentName',
+	},
+	{
+		title: '附件格式',
+		dataIndex: 'attachmentFormat',
+	},
+	{
+		title: '附件内容',
+		dataIndex: 'attachmentContent',
+	},
+	{
+		title: '上传时间',
+		dataIndex: 'uploadTime',
+	},
+	{
+		title: '操作',
+		dataIndex: 'action',
+	},
+]
+// 验证并提交数据
+const onSubmit = () => {
+	formRef.value
+	.validate()
+	.then(() => {
+		submitLoading.value = true
+		const formDataParam = cloneDeep(formData.value)
+		if (formDataParam.id) {
+			formDataParam.qyRecardBodyAddParams = bodyList.value
+			formDataParam.qyRecordAttachmentAddParams = fileList.value
+		} else {
+			formDataParam.qyRecardBodyEditParams = bodyList.value
+			formDataParam.qyRecordAttachmentEditParams = fileList.value
+		}
+		formDataParam.status = '2'
+		qyRecordInfoApi
+		.qyRecordInfoSubmitForm(formDataParam, formDataParam.id)
+		.then(() => {
+			onClose()
+			emit('successful')
+		})
+		.finally(() => {
+			submitLoading.value = false
+		})
+	})
+	.catch(() => {
+	})
+}
+// 验证并提交数据
+const onTemp = () => {
+	formRef.value
+	.validate()
+	.then(() => {
+		submitLoading.value = true
+		const formDataParam = cloneDeep(formData.value)
+		if (formDataParam.id) {
+			formDataParam.qyRecardBodyAddParams = bodyList.value
+			formDataParam.qyRecordAttachmentAddParams = fileList.value
+		} else {
+			formDataParam.qyRecardBodyEditParams = bodyList.value
+			formDataParam.qyRecordAttachmentEditParams = fileList.value
+		}
+		formDataParam.status = '1'
+		qyRecordInfoApi
+		.qyRecordInfoSubmitForm(formDataParam, formDataParam.id)
+		.then(() => {
+			onClose()
+			emit('successful')
+		})
+		.finally(() => {
+			submitLoading.value = false
+		})
+	})
+	.catch(() => {
+	})
+}
+const onBodyReset = () => {
+	bodyFormRef.value.resetFields()
+	bodyData.value = {}
+}
+const onBodyAdd = () => {
+	bodyFormRef.value
+	.validate()
+	.then(() => {
+		bodyList.value.push(Object.assign({__index: bodyList.value.length + 1}, bodyData.value))
+		onBodyReset()
+		message.success('插入表体信息成功!')
+	})
+	.catch(() => {
+	})
+}
+const onBodyEdit = () => {
+	bodyFormRef.value
+	.validate()
+	.then(() => {
+		let k = ''
+		if (bodyData.value.id) {
+			k = 'id'
+		} else if (bodyData.value.__index) {
+			k = '__index'
+		}
+		if (k) {
+			bodyList.value.forEach(v => {
+				if (v[k] === bodyData.value[k]) {
+					Object.assign(v, bodyData.value)
+				}
+			})
+		}
+		onBodyReset()
+		message.success('编辑表体信息成功!')
+	})
+	.catch(() => {
+	})
+}
+const onBodyDel = (recode, index) => {
+	Modal.confirm({
+		title: '提示',
+		icon: createVNode(ExclamationCircleOutlined),
+		content: createVNode('div', { style: 'color:red;' }, `是否要删除${record.productName}?`),
+		centered: true,
+		onOk() {
+			bodyList.value.splice(index, 1)
+		},
+		onCancel() {
+		},
+	});
+}
+const deleteBatchBody = () => {
+	bodyList.value = bodyList.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
+	})
+}
+const getFileExtension = (filename) => {
+	// 使用lastIndexOf查找最后一个"."的位置
+	var dotIndex = filename.lastIndexOf(".");
+
+	// 如果找到了".",则提取从"."之后的子串作为后缀名
+	if (dotIndex !== -1 && dotIndex < filename.length - 1) { // 确保"."不是字符串的最后一个字符
+		return filename.slice(dotIndex + 1); // slice从dotIndex+1开始到字符串结束
+	} else {
+		// 如果没有找到".",返回空字符串表示没有后缀
+		return "";
+	}
+}
+const fileChange = (file) => {
+	if (file) {
+		const f = ref_upload.value.uploadFileList()[0]
+		fileList.value.push({
+			attachmentUrl: f.url,
+			attachmentName: f.name,
+			attachmentFormat: getFileExtension(f.name),
+			attachmentContent: '',
+			uploadTime: proxy.$util.YMDHms(new Date()),
+		})
+		fileData.value.fileUrl = ''
+		showFileUpload.value = false
+		setTimeout(() => {
+			showFileUpload.value = true
+		}, 0)
+	}
+}
+const onFileDel = (recode, index) => {
+	Modal.confirm({
+		title: '提示',
+		icon: createVNode(ExclamationCircleOutlined),
+		content: createVNode('div', { style: 'color:red;' }, `是否要删除?`),
+		centered: true,
+		onOk() {
+			fileList.value.splice(index, 1)
+		},
+		onCancel() {
+		},
+	});
+}
+// 抛出函数
+defineExpose({
+	onOpen
+})
+</script>
+
+<style lang="less" scoped>
+</style>

+ 255 - 0
snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/index.vue

@@ -0,0 +1,255 @@
+<template>
+	<a-card :bordered="false" v-if="indexShow">
+		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
+            <a-row :gutter="24">
+                <a-col :span="6">
+                    <a-form-item label="预录入台账编号" name="ylTzCode">
+                        <a-input v-model:value="searchFormState.ylTzCode" placeholder="请输入预录入台账编号" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="台账性质" name="tzType">
+                        <a-select v-model:value="searchFormState.tzType" placeholder="请选择台账性质" :options="tzTypeOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="海关注册编码" name="companyMainHgCode">
+                        <a-input v-model:value="searchFormState.companyMainHgCode" placeholder="请输入海关注册编码" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="企业类型" name="companyType">
+                        <a-select v-model:value="searchFormState.companyType" placeholder="请选择企业类型" :options="companyTypeOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+				<a-col :span="6" :offset="18">
+					<div style="width: 100%;display: flex;justify-content: flex-end">
+						<a-button type="primary" @click="onSearch()">查询</a-button>
+						<a-button style="margin: 0 0 0 8px" @click="reset">重置</a-button>
+					</div>
+				</a-col>
+            </a-row>
+        </a-form>
+		<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('qyRecordInfoAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-delete
+						v-if="hasPerm('qyRecordInfoDelete')"
+						:selectedRowKeys="selectedRowKeys"
+						@batchDelete="deleteBatchQyRecordInfo"
+					/>
+					<a-button @click="onExport" v-if="hasPerm('qyRecordInfoBatchExport')">
+                        <template #icon><export-outlined /></template>
+                        批量导出
+                    </a-button>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'tzType'">
+					{{ $TOOL.dictTypeData('tzlx', record.tzType) }}
+				</template>
+				<template v-if="column.dataIndex === 'applyType'">
+					{{ $TOOL.dictTypeData('qybalx', record.applyType) }}
+				</template>
+				<template v-if="column.dataIndex === 'companyType'">
+					{{ $TOOL.dictTypeData('qylx', record.companyType) }}
+				</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-popconfirm title="确定要删除吗?" @confirm="deleteQyRecordInfo(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('qyRecordInfoDelete')">删除</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="qyrecordinfo">
+	import tool from '@/utils/tool'
+	import { cloneDeep } from 'lodash-es'
+	import Detail from './detail.vue'
+	import qyRecordInfoApi from '@/api/biz/qyRecordInfoApi'
+	import downloadUtil from "@/utils/downloadUtil";
+    const { proxy } = getCurrentInstance()
+	const searchFormState = ref({})
+	const searchFormStateReal = ref(searchFormState.value) // 点击搜索后备份的查询参数
+	const searchFormRef = ref()
+	const tableRef = ref()
+	const filterParam = ref({})
+	const detailRef = ref()
+	const indexShow = ref(true)
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	// 查询区域显示更多控制
+	const advanced = ref(false)
+	const toggleAdvanced = () => {
+		advanced.value = !advanced.value
+	}
+	const columns = [
+		{
+			title: '预录入台账编号',
+			dataIndex: 'ylTzCode',
+		},
+		{
+			title: '台账编号',
+			dataIndex: 'tzCode',
+		},
+		{
+			title: '台账性质',
+			dataIndex: 'tzType',
+		},
+		{
+			title: '海关注册编码',
+			dataIndex: 'companyMainHgCode',
+		},
+		{
+			title: '统一社会信用代码',
+			dataIndex: 'companyCode',
+		},
+		{
+			title: '企业名称',
+			dataIndex: 'companyName',
+		},
+		{
+			title: '申报类型',
+			dataIndex: 'applyType',
+		},
+		{
+			title: '企业类型',
+			dataIndex: 'companyType',
+		},
+		{
+			title: '企业地址',
+			dataIndex: 'companyAddress',
+		},
+		{
+			title: '联系人',
+			dataIndex: 'companyLinkMan',
+		},
+		{
+			title: '联系电话',
+			dataIndex: 'companyLegalPhone',
+		},
+		{
+			title: '经营范围',
+			dataIndex: 'companyJyFw',
+			ellipsis: true,
+		},
+		{
+			title: '审核状态',
+			dataIndex: 'status',
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['qyRecordInfoEdit', 'qyRecordInfoDelete'])) {
+		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 qyRecordInfoApi.qyRecordInfoPage(Object.assign(parameter, searchFormStateReal.value)).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 deleteQyRecordInfo = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		qyRecordInfoApi.qyRecordInfoDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchQyRecordInfo = (params) => {
+		qyRecordInfoApi.qyRecordInfoDelete(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
+                }
+            })
+        }
+        qyRecordInfoApi.qyRecordInfoExport(params).then((res) => {
+            downloadUtil.resultDownload(res)
+            tableRef.value.clearSelected()
+        })
+    }
+	// 切换至表单
+    const onDetail = (record = null, view) => {
+    	indexShow.value = false
+    	nextTick(() => {
+            detailRef.value.onOpen(record, view)
+    	})
+    }
+	const tzTypeOptions = tool.dictList('tzlx')
+	const companyTypeOptions = tool.dictList('qylx')
+</script>
+
+<style lang="less" scoped>
+</style>

+ 1 - 1
snowy-admin-web/src/views/yqyc/zero/enterprise-qualification/detail.vue

@@ -1,7 +1,7 @@
 <template>
   <a-card :bordered="false">
     <a-page-header
-      :title="formData.id ? '编辑企业资质备案' : '新增企业资质备案'"
+      :title="formData.id ? '企业资质' : '新增企业资质'"
       @back="onClose"
     >
       <template #extra>

+ 1 - 7
snowy-admin-web/src/views/yqyc/zero/enterprise-qualification/index.vue

@@ -85,21 +85,15 @@
         <template v-if="column.dataIndex === 'action'">
           <a-space>
             <a @click="onDetail(record, true)" v-if="hasPerm('qyRecordView')">查看</a>
-            <a-divider type="vertical"
-                       v-if="hasPerm('qyRecordView') && hasPerm(['qyRecordEdit', 'qyRecordDelete'], 'or')"/>
             <a @click="onDetail(record)" v-if="hasPerm('qyRecordEdit') && record.status == 1">编辑</a>
-            <a-divider type="vertical" v-if="hasPerm(['qyRecordEdit', 'qyRecordDelete'], 'and')"/>
             <a-popconfirm title="确定要删除吗?" @confirm="deleteQyRecord(record)">
               <a-button type="link" danger size="small" v-if="hasPerm('qyRecordDelete')">删除</a-button>
             </a-popconfirm>
-		  	<a-divider type="vertical" v-if="hasPerm(['qyRecordView', 'qyRecordEdit', 'qyRecordDelete'])"/>
 		    <a @click="resultDetailRef.onOpen(record)" v-if="record.status == 3 || record.status == 4">查看回执</a>
 		  	<template v-if="searchFormState.baType === 'bgsq' && (record.status == 3 || record.status == 4)">
-				<a-divider type="vertical"/>
 				<a @click="onChange(record)">变更</a>
 		  	</template>
 		  	<template v-else-if="searchFormState.baType === 'zxsq' && record.status == 4">
-				<a-divider type="vertical"/>
 				<a @click="onKill(record)">注销</a>
 		  	</template>
           </a-space>
@@ -179,7 +173,7 @@ const columns = ref([
 if (hasPerm(['qyRecordView', 'qyRecordEdit', 'qyRecordDelete'])) {
 	columns.value.forEach(v => {
 		if (v.dataIndex === 'action') {
-			v.width = 400
+			v.width = 200
 		}
 	})
 }

+ 172 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/controller/QySecondlineHfdController.java

@@ -0,0 +1,172 @@
+/*
+ * 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.qysecondlinehfd.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.biz.modular.qysecondlinehfd.param.*;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.vo.QySecondlineHfdDetailVo;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.entity.QySecondlineHfd;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.service.QySecondlineHfdService;
+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 wenjinbiao
+ * @date  2024/07/06 11:58
+ */
+@Tag(name = "二线出区核放单管理控制器")
+@RestController
+@Validated
+public class QySecondlineHfdController {
+
+    @Resource
+    private QySecondlineHfdService qySecondlineHfdService;
+
+    /**
+     * 获取二线出区核放单管理分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    @Operation(summary = "获取二线出区核放单管理分页")
+    @SaCheckPermission("/biz/qysecondlinehfd/page")
+    @GetMapping("/biz/qysecondlinehfd/page")
+    public CommonResult<Page<QySecondlineHfd>> page(QySecondlineHfdPageParam qySecondlineHfdPageParam) {
+        return CommonResult.data(qySecondlineHfdService.page(qySecondlineHfdPageParam));
+    }
+
+    /**
+     * 添加二线出区核放单管理
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    @Operation(summary = "添加二线出区核放单管理")
+    @CommonLog("添加二线出区核放单管理")
+    @SaCheckPermission("/biz/qysecondlinehfd/add")
+    @PostMapping("/biz/qysecondlinehfd/add")
+    public CommonResult<String> add(@RequestBody @Valid QySecondlineHfdBaseParam qySecondlineHfdBaseParam) {
+        qySecondlineHfdService.add(qySecondlineHfdBaseParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑二线出区核放单管理
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    @Operation(summary = "编辑二线出区核放单管理")
+    @CommonLog("编辑二线出区核放单管理")
+    @SaCheckPermission("/biz/qysecondlinehfd/edit")
+    @PostMapping("/biz/qysecondlinehfd/edit")
+    public CommonResult<String> edit(@RequestBody @Valid QySecondlineHfdBaseParam qySecondlineHfdBaseParam) {
+        qySecondlineHfdService.edit(qySecondlineHfdBaseParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 导出二线出区核放单管理
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    @Operation(summary = "导出二线出区核放单管理")
+    @CommonLog("导出二线出区核放单管理")
+    @SaCheckPermission("/biz/qysecondlinehfd/export")
+    @PostMapping("/biz/qysecondlinehfd/export")
+    public void export(@RequestBody @Valid QySecondlineHfdPageParam qySecondlineHfdPageParam, HttpServletResponse response) {
+        Page<QySecondlineHfd> page =  qySecondlineHfdService.page(qySecondlineHfdPageParam);
+        List<QySecondlineHfd> records = page.getRecords();
+        exportExcel(response,QySecondlineHfd.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 wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    @Operation(summary = "删除二线出区核放单管理")
+    @CommonLog("删除二线出区核放单管理")
+    @SaCheckPermission("/biz/qysecondlinehfd/delete")
+    @PostMapping("/biz/qysecondlinehfd/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<QySecondlineHfdIdParam> qySecondlineHfdIdParamList) {
+        qySecondlineHfdService.delete(qySecondlineHfdIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取二线出区核放单管理详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    @Operation(summary = "获取二线出区核放单管理详情")
+    @SaCheckPermission("/biz/qysecondlinehfd/detail")
+    @GetMapping("/biz/qysecondlinehfd/detail")
+    public CommonResult<QySecondlineHfdDetailVo> detail(@Valid QySecondlineHfdIdParam qySecondlineHfdIdParam) {
+        return CommonResult.data(qySecondlineHfdService.detail(qySecondlineHfdIdParam));
+    }
+}

+ 266 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/entity/QySecondlineHfd.java

@@ -0,0 +1,266 @@
+/*
+ * 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.qysecondlinehfd.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 wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Getter
+@Setter
+@TableName("qy_secondline_hfd")
+public class QySecondlineHfd {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 0,value = "主键")
+    private String id;
+
+    /** 核放单预录入号 */
+    @Schema(description = "核放单预录入号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 1,value = "核放单预录入号")
+    private String hfdrCode;
+
+    /** 核放单号 */
+    @Schema(description = "核放单号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 2,value = "核放单号")
+    private String hfdCode;
+
+    /** 核放类型 */
+    @Schema(description = "核放类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 3,value = "核放类型")
+    private String hfdLx;
+
+    /** 台账编号 */
+    @Schema(description = "台账编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 4,value = "台账编号")
+    private String ledgerCode;
+
+    /** 进出标志 */
+    @Schema(description = "进出标志")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 5,value = "进出标志")
+    private String jcbz;
+
+    /** 绑定类型 */
+    @Schema(description = "绑定类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 6,value = "绑定类型")
+    private String bdlx;
+
+    /** 关联核注清单编号 */
+    @Schema(description = "关联核注清单编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 7,value = "关联核注清单编号")
+    private String glhzqdbh;
+
+    /** 申报类型 */
+    @Schema(description = "申报类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 8,value = "申报类型")
+    private String sblx;
+
+    /** 单据类型 */
+    @Schema(description = "单据类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 9,value = "单据类型")
+    private String applyType;
+
+    /** 承运车车牌号 */
+    @Schema(description = "承运车车牌号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 10,value = "承运车车牌号")
+    private String cyccph;
+
+    /** ic卡号 */
+    @Schema(description = "ic卡号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 11,value = "ic卡号")
+    private String ickh;
+
+    /** 车架号 */
+    @Schema(description = "车架号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 12,value = "车架号")
+    private String cjh;
+
+    /** 车架重 */
+    @Schema(description = "车架重")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 13,value = "车架重")
+    private String cjz;
+
+    /** 车自重 */
+    @Schema(description = "车自重")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 14,value = "车自重")
+    private String czz;
+
+    /** 集装箱号 */
+    @Schema(description = "集装箱号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 15,value = "集装箱号")
+    private String jzxh;
+
+    /** 集装箱类型 */
+    @Schema(description = "集装箱类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 16,value = "集装箱类型")
+    private String jzxlx;
+
+    /** 总重量 */
+    @Schema(description = "总重量")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 17,value = "总重量")
+    private String zzl;
+
+    /** 货物毛重量 */
+    @Schema(description = "货物毛重量")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 18,value = "货物毛重量")
+    private String hwmzl;
+
+    /** 货物总净重 */
+    @Schema(description = "货物总净重")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 19,value = "货物总净重")
+    private String hwjzl;
+
+    /** 申报企业名称 */
+    @Schema(description = "申报企业名称")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 20,value = "申报企业名称")
+    private String sbqymc;
+
+    /** 申报企业编号 */
+    @Schema(description = "申报企业编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 21,value = "申报企业编号")
+    private String sbqybh;
+
+    /** 申报企业社会信用代码 */
+    @Schema(description = "申报企业社会信用代码")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 22,value = "申报企业社会信用代码")
+    private String sbqyshxydm;
+
+    /** 录入单位代码 */
+    @Schema(description = "录入单位代码")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 23,value = "录入单位代码")
+    private String lrdwdm;
+
+    /** 录入单位社会信用代码 */
+    @Schema(description = "录入单位社会信用代码")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 24,value = "录入单位社会信用代码")
+    private String lrdwshxydm;
+
+    /** 录入单位名称 */
+    @Schema(description = "录入单位名称")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 25,value = "录入单位名称")
+    private String lrdwmc;
+
+    /** 企业单位内部编号 */
+    @Schema(description = "企业单位内部编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 26,value = "企业单位内部编号")
+    private String qydwnbbh;
+
+    /** 过卡1时间 */
+    @Schema(description = "过卡1时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 27,value = "过卡1时间")
+    private Date gkonesj;
+
+    /** 过卡2时间 */
+    @Schema(description = "过卡2时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 28,value = "过卡2时间")
+    private Date gktwosj;
+
+    /** 申报时间 */
+    @Schema(description = "申报时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 29,value = "申报时间")
+    private Date sbsj;
+
+    /** 申请人 */
+    @Schema(description = "申请人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 30,value = "申请人")
+    private String sqr;
+
+    /** 申请人联系方式 */
+    @Schema(description = "申请人联系方式")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 31,value = "申请人联系方式")
+    private String sqrlxfs;
+
+    /** 单据状态 */
+    @Schema(description = "单据状态")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 32,value = "单据状态")
+    private String status;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 33,value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 34,value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 35,value = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 更新时间 */
+    @Schema(description = "更新时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 36,value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /**  备注 */
+    @Schema(description = " 备注")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 37,value = " 备注")
+    private String remark;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/enums/QySecondlineHfdEnum.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.qysecondlinehfd.enums;
+
+import lombok.Getter;
+
+/**
+ * 二线出区核放单管理枚举
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Getter
+public enum QySecondlineHfdEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    QySecondlineHfdEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/mapper/QySecondlineHfdMapper.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.qysecondlinehfd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.entity.QySecondlineHfd;
+
+/**
+ * 二线出区核放单管理Mapper接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+public interface QySecondlineHfdMapper extends BaseMapper<QySecondlineHfd> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/mapper/mapping/QySecondlineHfdMapper.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.qysecondlinehfd.mapper.QySecondlineHfdMapper">
+
+</mapper>

+ 168 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdAddParam.java

@@ -0,0 +1,168 @@
+/*
+ * 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.qysecondlinehfd.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 wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdAddParam {
+    @Schema(description = "核放单id")
+    private String id;
+
+    /** 核放单预录入号 */
+    @Schema(description = "核放单预录入号")
+    private String hfdrCode;
+
+    /** 核放单号 */
+    @Schema(description = "核放单号")
+    private String hfdCode;
+
+    /** 核放类型 */
+    @Schema(description = "核放类型")
+    private String hfdLx;
+
+    /** 台账编号 */
+    @Schema(description = "台账编号")
+    private String ledgerCode;
+
+    /** 进出标志 */
+    @Schema(description = "进出标志")
+    private String jcbz;
+
+    /** 绑定类型 */
+    @Schema(description = "绑定类型")
+    private String bdlx;
+
+    /** 关联核注清单编号 */
+    @Schema(description = "关联核注清单编号")
+    private String glhzqdbh;
+
+    /** 申报类型 */
+    @Schema(description = "申报类型")
+    private String sblx;
+
+    /** 单据类型 */
+    @Schema(description = "单据类型")
+    private String applyType;
+
+    /** 承运车车牌号 */
+    @Schema(description = "承运车车牌号")
+    private String cyccph;
+
+    /** ic卡号 */
+    @Schema(description = "ic卡号")
+    private String ickh;
+
+    /** 车架号 */
+    @Schema(description = "车架号")
+    private String cjh;
+
+    /** 车架重 */
+    @Schema(description = "车架重")
+    private String cjz;
+
+    /** 车自重 */
+    @Schema(description = "车自重")
+    private String czz;
+
+    /** 集装箱号 */
+    @Schema(description = "集装箱号")
+    private String jzxh;
+
+    /** 集装箱类型 */
+    @Schema(description = "集装箱类型")
+    private String jzxlx;
+
+    /** 总重量 */
+    @Schema(description = "总重量")
+    private String zzl;
+
+    /** 货物毛重量 */
+    @Schema(description = "货物毛重量")
+    private String hwmzl;
+
+    /** 货物总净重 */
+    @Schema(description = "货物总净重")
+    private String hwjzl;
+
+    /** 申报企业名称 */
+    @Schema(description = "申报企业名称")
+    private String sbqymc;
+
+    /** 申报企业编号 */
+    @Schema(description = "申报企业编号")
+    private String sbqybh;
+
+    /** 申报企业社会信用代码 */
+    @Schema(description = "申报企业社会信用代码")
+    private String sbqyshxydm;
+
+    /** 录入单位代码 */
+    @Schema(description = "录入单位代码")
+    private String lrdwdm;
+
+    /** 录入单位社会信用代码 */
+    @Schema(description = "录入单位社会信用代码")
+    private String lrdwshxydm;
+
+    /** 录入单位名称 */
+    @Schema(description = "录入单位名称")
+    private String lrdwmc;
+
+    /** 企业单位内部编号 */
+    @Schema(description = "企业单位内部编号")
+    private String qydwnbbh;
+
+    /** 过卡1时间 */
+    @Schema(description = "过卡1时间")
+    private Date gkonesj;
+
+    /** 过卡2时间 */
+    @Schema(description = "过卡2时间")
+    private Date gktwosj;
+
+    /** 申报时间 */
+    @Schema(description = "申报时间")
+    private Date sbsj;
+
+    /** 申请人 */
+    @Schema(description = "申请人")
+    private String sqr;
+
+    /** 申请人联系方式 */
+    @Schema(description = "申请人联系方式")
+    private String sqrlxfs;
+
+    /** 单据状态 */
+    @Schema(description = "单据状态")
+    private String status;
+
+    /**  备注 */
+    @Schema(description = " 备注")
+    private String remark;
+
+}

+ 32 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdBaseParam.java

@@ -0,0 +1,32 @@
+package vip.xiaonuo.biz.modular.qysecondlinehfd.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductAddParam;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class QySecondlineHfdBaseParam {
+
+    /**
+     * 核放清单基础信息
+     */
+    @Schema(description = "基本信息")
+    private QySecondlineHfdAddParam baseInfo;
+
+    @Schema(description = "核放单表体")
+    private List<QySecondlineHfdProductAddParam> productList;
+
+    @Schema(description = "关联单证")
+    private List<QySecondlineHfdDzAddParam> dzList;
+
+    @Schema(description = "附件信息")
+    private List<QySecondlineHfdAttachmentAddParam> attachmentList;
+
+}

+ 171 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdEditParam.java

@@ -0,0 +1,171 @@
+/*
+ * 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.qysecondlinehfd.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 wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 核放单预录入号 */
+    @Schema(description = "核放单预录入号")
+    private String hfdrCode;
+
+    /** 核放单号 */
+    @Schema(description = "核放单号")
+    private String hfdCode;
+
+    /** 核放类型 */
+    @Schema(description = "核放类型")
+    private String hfdLx;
+
+    /** 台账编号 */
+    @Schema(description = "台账编号")
+    private String ledgerCode;
+
+    /** 进出标志 */
+    @Schema(description = "进出标志")
+    private String jcbz;
+
+    /** 绑定类型 */
+    @Schema(description = "绑定类型")
+    private String bdlx;
+
+    /** 关联核注清单编号 */
+    @Schema(description = "关联核注清单编号")
+    private String glhzqdbh;
+
+    /** 申报类型 */
+    @Schema(description = "申报类型")
+    private String sblx;
+
+    /** 单据类型 */
+    @Schema(description = "单据类型")
+    private String applyType;
+
+    /** 承运车车牌号 */
+    @Schema(description = "承运车车牌号")
+    private String cyccph;
+
+    /** ic卡号 */
+    @Schema(description = "ic卡号")
+    private String ickh;
+
+    /** 车架号 */
+    @Schema(description = "车架号")
+    private String cjh;
+
+    /** 车架重 */
+    @Schema(description = "车架重")
+    private String cjz;
+
+    /** 车自重 */
+    @Schema(description = "车自重")
+    private String czz;
+
+    /** 集装箱号 */
+    @Schema(description = "集装箱号")
+    private String jzxh;
+
+    /** 集装箱类型 */
+    @Schema(description = "集装箱类型")
+    private String jzxlx;
+
+    /** 总重量 */
+    @Schema(description = "总重量")
+    private String zzl;
+
+    /** 货物毛重量 */
+    @Schema(description = "货物毛重量")
+    private String hwmzl;
+
+    /** 货物总净重 */
+    @Schema(description = "货物总净重")
+    private String hwjzl;
+
+    /** 申报企业名称 */
+    @Schema(description = "申报企业名称")
+    private String sbqymc;
+
+    /** 申报企业编号 */
+    @Schema(description = "申报企业编号")
+    private String sbqybh;
+
+    /** 申报企业社会信用代码 */
+    @Schema(description = "申报企业社会信用代码")
+    private String sbqyshxydm;
+
+    /** 录入单位代码 */
+    @Schema(description = "录入单位代码")
+    private String lrdwdm;
+
+    /** 录入单位社会信用代码 */
+    @Schema(description = "录入单位社会信用代码")
+    private String lrdwshxydm;
+
+    /** 录入单位名称 */
+    @Schema(description = "录入单位名称")
+    private String lrdwmc;
+
+    /** 企业单位内部编号 */
+    @Schema(description = "企业单位内部编号")
+    private String qydwnbbh;
+
+    /** 过卡1时间 */
+    @Schema(description = "过卡1时间")
+    private Date gkonesj;
+
+    /** 过卡2时间 */
+    @Schema(description = "过卡2时间")
+    private Date gktwosj;
+
+    /** 申报时间 */
+    @Schema(description = "申报时间")
+    private Date sbsj;
+
+    /** 申请人 */
+    @Schema(description = "申请人")
+    private String sqr;
+
+    /** 申请人联系方式 */
+    @Schema(description = "申请人联系方式")
+    private String sqrlxfs;
+
+    /** 单据状态 */
+    @Schema(description = "单据状态")
+    private String status;
+
+    /**  备注 */
+    @Schema(description = " 备注")
+    private String remark;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/param/QySecondlineHfdIdParam.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.qysecondlinehfd.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 二线出区核放单管理Id参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdIdParam {
+
+    /** 主键 */
+    @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/qysecondlinehfd/param/QySecondlineHfdPageParam.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.qysecondlinehfd.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 二线出区核放单管理查询参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdPageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 78 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/service/QySecondlineHfdService.java

@@ -0,0 +1,78 @@
+/*
+ * 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.qysecondlinehfd.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.entity.QySecondlineHfd;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.param.*;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.vo.QySecondlineHfdDetailVo;
+
+import java.util.List;
+
+/**
+ * 二线出区核放单管理Service接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+public interface QySecondlineHfdService extends IService<QySecondlineHfd> {
+
+    /**
+     * 获取二线出区核放单管理分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    Page<QySecondlineHfd> page(QySecondlineHfdPageParam qySecondlineHfdPageParam);
+
+    /**
+     * 添加二线出区核放单管理
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    void add(QySecondlineHfdBaseParam qySecondlineHfdBaseParam);
+
+    /**
+     * 编辑二线出区核放单管理
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    void edit(QySecondlineHfdBaseParam qySecondlineHfdBaseParam);
+
+    /**
+     * 删除二线出区核放单管理
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    void delete(List<QySecondlineHfdIdParam> qySecondlineHfdIdParamList);
+
+    /**
+     * 获取二线出区核放单管理详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     */
+    QySecondlineHfdDetailVo detail(QySecondlineHfdIdParam qySecondlineHfdIdParam);
+
+    /**
+     * 获取二线出区核放单管理详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 11:58
+     **/
+    QySecondlineHfd queryEntity(String id);
+}

+ 225 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/service/impl/QySecondlineHfdServiceImpl.java

@@ -0,0 +1,225 @@
+/*
+ * 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.qysecondlinehfd.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.collection.CollectionUtil;
+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.apache.http.auth.AUTH;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.param.*;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.vo.QySecondlineHfdDetailVo;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.service.QySecondlineHfdAttachmentService;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.entity.QySecondlineHfdDz;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.service.QySecondlineHfdDzService;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.entity.QySecondlineHfdList;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.service.QySecondlineHfdListService;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.entity.QySecondlineHfdProduct;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.service.QySecondlineHfdProductService;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.entity.QySecondlineHfd;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.mapper.QySecondlineHfdMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.service.QySecondlineHfdService;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 二线出区核放单管理Service接口实现类
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 11:58
+ **/
+@Service
+public class QySecondlineHfdServiceImpl extends ServiceImpl<QySecondlineHfdMapper, QySecondlineHfd> implements QySecondlineHfdService {
+    @Autowired
+    QySecondlineHfdProductService qySecondlineHfdProductService;
+    @Autowired
+    QySecondlineHfdDzService qySecondlineHfdDzService;
+    @Autowired
+    private QySecondlineHfdAttachmentService qySecondlineHfdAttachmentService;
+    @Autowired
+    QySecondlineHfdListService qySecondlineHfdListService;
+    @Override
+    public Page<QySecondlineHfd> page(QySecondlineHfdPageParam qySecondlineHfdPageParam) {
+        QueryWrapper<QySecondlineHfd> queryWrapper = new QueryWrapper<QySecondlineHfd>().checkSqlInjection();
+        if(ObjectUtil.isAllNotEmpty(qySecondlineHfdPageParam.getSortField(), qySecondlineHfdPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(qySecondlineHfdPageParam.getSortOrder());
+            queryWrapper.orderBy(true, qySecondlineHfdPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(qySecondlineHfdPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(QySecondlineHfd::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(QySecondlineHfdBaseParam qySecondlineHfdBaseParam) {
+
+        String hfdId = qySecondlineHfdBaseParam.getBaseInfo().getId();
+        //修改基础信息
+        QySecondlineHfd qySecondlineHfd = this.queryEntity(hfdId);
+        QySecondlineHfdAddParam baseInfo = qySecondlineHfdBaseParam.getBaseInfo();
+        BeanUtil.copyProperties(baseInfo, qySecondlineHfd);
+        this.updateById(qySecondlineHfd);
+        //删除相关信息
+        deleteHfdRelation(hfdId);
+        //关联相关信息
+        saveHfdRelation(hfdId,qySecondlineHfdBaseParam);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<QySecondlineHfdIdParam> qySecondlineHfdIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(qySecondlineHfdIdParamList, QySecondlineHfdIdParam::getId));
+        qySecondlineHfdIdParamList.forEach(qySecondlineHfdIdParam-> this.deleteHfdRelation(qySecondlineHfdIdParam.getId()));
+    }
+
+    @Override
+    public QySecondlineHfdDetailVo detail(QySecondlineHfdIdParam qySecondlineHfdIdParam) {
+        QySecondlineHfdDetailVo hfdDetail = new QySecondlineHfdDetailVo();
+
+        String hfdId = qySecondlineHfdIdParam.getId();
+
+        QySecondlineHfd qySecondlineHfd = this.queryEntity(qySecondlineHfdIdParam.getId());
+
+        hfdDetail.setBaseInfo(qySecondlineHfd);
+
+        //商品信息
+        QueryWrapper<QySecondlineHfdProduct> productWrapper = new QueryWrapper<QySecondlineHfdProduct>().checkSqlInjection();
+        productWrapper.lambda().eq(QySecondlineHfdProduct::getHfdId,hfdId);
+        List<QySecondlineHfdProduct> productList = qySecondlineHfdProductService.list(productWrapper);
+
+        hfdDetail.setProductList(productList);
+
+        //单证信息
+        QueryWrapper<QySecondlineHfdDz> dzWrapper = new QueryWrapper<QySecondlineHfdDz>().checkSqlInjection();
+        dzWrapper.lambda().eq(QySecondlineHfdDz::getHfdId,hfdId);
+        List<QySecondlineHfdDz> dzList = qySecondlineHfdDzService.list(dzWrapper);
+
+        hfdDetail.setDzList(dzList);
+
+        //附件信息
+        QueryWrapper<QySecondlineHfdAttachment> attachmentWrapper = new QueryWrapper<QySecondlineHfdAttachment>().checkSqlInjection();
+        attachmentWrapper.lambda().eq(QySecondlineHfdAttachment::getHfdId,hfdId);
+        List<QySecondlineHfdAttachment> attachmentList = qySecondlineHfdAttachmentService.list(attachmentWrapper);
+
+        hfdDetail.setAttachmentList(attachmentList);
+
+        //回执信息
+        List<QySecondlineHfdList> hzList = qySecondlineHfdListService.getListByHfdId(hfdId);
+        hfdDetail.setHzList(hzList);
+        return hfdDetail;
+    }
+
+    @Override
+    public QySecondlineHfd queryEntity(String id) {
+        QySecondlineHfd qySecondlineHfd = this.getById(id);
+        if(ObjectUtil.isEmpty(qySecondlineHfd)) {
+            throw new CommonException("二线出区核放单管理不存在,id值为:{}", id);
+        }
+        return qySecondlineHfd;
+    }
+
+    /**
+     *
+     * @param qySecondlineHfdBaseParam
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(QySecondlineHfdBaseParam qySecondlineHfdBaseParam){
+        QySecondlineHfdAddParam baseInfo = qySecondlineHfdBaseParam.getBaseInfo();
+        QySecondlineHfd qySecondlineHfd = BeanUtil.toBean(baseInfo, QySecondlineHfd.class);
+        this.save(qySecondlineHfd);
+        //新增核放单关联信息
+        this.saveHfdRelation(qySecondlineHfd.getId(),qySecondlineHfdBaseParam);
+
+    }
+
+    /**
+     * 删除核放单关联信息
+     * @param hfdId
+     */
+    public void deleteHfdRelation(String hfdId){
+        //删除商品信息
+        QueryWrapper<QySecondlineHfdProduct> productWrapper = new QueryWrapper<QySecondlineHfdProduct>().checkSqlInjection();
+        productWrapper.lambda().eq(QySecondlineHfdProduct::getHfdId,hfdId);
+        qySecondlineHfdProductService.remove(productWrapper);
+
+        //删除单证信息
+        QueryWrapper<QySecondlineHfdDz> dzWrapper = new QueryWrapper<QySecondlineHfdDz>().checkSqlInjection();
+        dzWrapper.lambda().eq(QySecondlineHfdDz::getHfdId,hfdId);
+        qySecondlineHfdDzService.remove(dzWrapper);
+
+        //删除附件信息
+        QueryWrapper<QySecondlineHfdAttachment> attachmentWrapper = new QueryWrapper<QySecondlineHfdAttachment>().checkSqlInjection();
+        attachmentWrapper.lambda().eq(QySecondlineHfdAttachment::getHfdId,hfdId);
+        qySecondlineHfdAttachmentService.remove(attachmentWrapper);
+    }
+
+    /**
+     * 新增核放单关联信息
+     * @param hfdId
+     * @param qySecondlineHfdBaseParam
+     */
+    public void saveHfdRelation(String hfdId,QySecondlineHfdBaseParam qySecondlineHfdBaseParam){
+        //商品信息
+        List<QySecondlineHfdProductAddParam> productList = qySecondlineHfdBaseParam.getProductList();
+        if(CollectionUtil.isNotEmpty(productList)){
+            List<QySecondlineHfdProduct> products = productList.stream().map(x -> {
+                QySecondlineHfdProduct qySecondlineHfdProduct = BeanUtil.toBean(x, QySecondlineHfdProduct.class);
+                qySecondlineHfdProduct.setHfdId(hfdId);
+                return qySecondlineHfdProduct;
+            }).toList();
+            qySecondlineHfdProductService.saveBatch(products);
+        }
+        //核放单体
+        List<QySecondlineHfdDzAddParam> dzList = qySecondlineHfdBaseParam.getDzList();
+        if(CollectionUtil.isNotEmpty(dzList)){
+            List<QySecondlineHfdDz> hfdDzs = dzList.stream().map(x -> {
+                QySecondlineHfdDz qySecondlineHfdDz = BeanUtil.toBean(x, QySecondlineHfdDz.class);
+                qySecondlineHfdDz.setHfdId(hfdId);
+                qySecondlineHfdDz.setHfdCode(qySecondlineHfdBaseParam.getBaseInfo().getHfdCode());
+                return qySecondlineHfdDz;
+            }).toList();
+            qySecondlineHfdDzService.saveBatch(hfdDzs);
+        }
+        //附件信息
+        List<QySecondlineHfdAttachmentAddParam> attachmentList = qySecondlineHfdBaseParam.getAttachmentList();
+        if(CollectionUtil.isNotEmpty(attachmentList)){
+            List<QySecondlineHfdAttachment> attachments = attachmentList.stream().map(x -> {
+                QySecondlineHfdAttachment qySecondlineHfdAttachment = BeanUtil.toBean(x, QySecondlineHfdAttachment.class);
+                qySecondlineHfdAttachment.setHfdId(hfdId);
+                return qySecondlineHfdAttachment;
+            }).toList();
+            qySecondlineHfdAttachmentService.saveBatch(attachments);
+        }
+    }
+}

+ 40 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfd/vo/QySecondlineHfdDetailVo.java

@@ -0,0 +1,40 @@
+package vip.xiaonuo.biz.modular.qysecondlinehfd.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.entity.QySecondlineHfd;
+import vip.xiaonuo.biz.modular.qysecondlinehfd.param.QySecondlineHfdAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.entity.QySecondlineHfdDz;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.entity.QySecondlineHfdList;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.entity.QySecondlineHfdProduct;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductAddParam;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class QySecondlineHfdDetailVo {
+
+    /**
+     * 核放清单基础信息
+     */
+    @Schema(description = "基本信息")
+    private QySecondlineHfd baseInfo;
+
+    @Schema(description = "核放单表体")
+    private List<QySecondlineHfdProduct> productList;
+
+    @Schema(description = "关联单证")
+    private List<QySecondlineHfdDz> dzList;
+
+    @Schema(description = "附件信息")
+    private List<QySecondlineHfdAttachment> attachmentList;
+
+    @Schema(description = "回执信息")
+    private List<QySecondlineHfdList> hzList;
+
+}

+ 174 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/controller/QySecondlineHfdAttachmentController.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.qysecondlinehfdattachment.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.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.service.QySecondlineHfdAttachmentService;
+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 wenjinbiao
+ * @date  2024/07/06 12:57
+ */
+@Tag(name = "二线核放清单附件表控制器")
+@RestController
+@Validated
+public class QySecondlineHfdAttachmentController {
+
+    @Resource
+    private QySecondlineHfdAttachmentService qySecondlineHfdAttachmentService;
+
+    /**
+     * 获取二线核放清单附件表分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    @Operation(summary = "获取二线核放清单附件表分页")
+    @SaCheckPermission("/biz/qysecondlinehfdattachment/page")
+    @GetMapping("/biz/qysecondlinehfdattachment/page")
+    public CommonResult<Page<QySecondlineHfdAttachment>> page(QySecondlineHfdAttachmentPageParam qySecondlineHfdAttachmentPageParam) {
+        return CommonResult.data(qySecondlineHfdAttachmentService.page(qySecondlineHfdAttachmentPageParam));
+    }
+
+    /**
+     * 添加二线核放清单附件表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    @Operation(summary = "添加二线核放清单附件表")
+    @CommonLog("添加二线核放清单附件表")
+    @SaCheckPermission("/biz/qysecondlinehfdattachment/add")
+    @PostMapping("/biz/qysecondlinehfdattachment/add")
+    public CommonResult<String> add(@RequestBody @Valid QySecondlineHfdAttachmentAddParam qySecondlineHfdAttachmentAddParam) {
+        qySecondlineHfdAttachmentService.add(qySecondlineHfdAttachmentAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑二线核放清单附件表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    @Operation(summary = "编辑二线核放清单附件表")
+    @CommonLog("编辑二线核放清单附件表")
+    @SaCheckPermission("/biz/qysecondlinehfdattachment/edit")
+    @PostMapping("/biz/qysecondlinehfdattachment/edit")
+    public CommonResult<String> edit(@RequestBody @Valid QySecondlineHfdAttachmentEditParam qySecondlineHfdAttachmentEditParam) {
+        qySecondlineHfdAttachmentService.edit(qySecondlineHfdAttachmentEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 导出二线核放清单附件表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    @Operation(summary = "导出二线核放清单附件表")
+    @CommonLog("导出二线核放清单附件表")
+    @SaCheckPermission("/biz/qysecondlinehfdattachment/export")
+    @PostMapping("/biz/qysecondlinehfdattachment/export")
+    public void export(@RequestBody @Valid QySecondlineHfdAttachmentPageParam qySecondlineHfdAttachmentPageParam, HttpServletResponse response) {
+        Page<QySecondlineHfdAttachment> page =  qySecondlineHfdAttachmentService.page(qySecondlineHfdAttachmentPageParam);
+        List<QySecondlineHfdAttachment> records = page.getRecords();
+        exportExcel(response,QySecondlineHfdAttachment.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 wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    @Operation(summary = "删除二线核放清单附件表")
+    @CommonLog("删除二线核放清单附件表")
+    @SaCheckPermission("/biz/qysecondlinehfdattachment/delete")
+    @PostMapping("/biz/qysecondlinehfdattachment/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<QySecondlineHfdAttachmentIdParam> qySecondlineHfdAttachmentIdParamList) {
+        qySecondlineHfdAttachmentService.delete(qySecondlineHfdAttachmentIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取二线核放清单附件表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    @Operation(summary = "获取二线核放清单附件表详情")
+    @SaCheckPermission("/biz/qysecondlinehfdattachment/detail")
+    @GetMapping("/biz/qysecondlinehfdattachment/detail")
+    public CommonResult<QySecondlineHfdAttachment> detail(@Valid QySecondlineHfdAttachmentIdParam qySecondlineHfdAttachmentIdParam) {
+        return CommonResult.data(qySecondlineHfdAttachmentService.detail(qySecondlineHfdAttachmentIdParam));
+    }
+}

+ 104 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/entity/QySecondlineHfdAttachment.java

@@ -0,0 +1,104 @@
+/*
+ * 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.qysecondlinehfdattachment.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 wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+@Setter
+@TableName("qy_secondline_hfd_attachment")
+public class QySecondlineHfdAttachment {
+
+    /** ID */
+    @TableId
+    @Schema(description = "ID")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 0,value = "ID")
+    private String id;
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 1,value = "二线核放单id")
+    private String hfdId;
+
+    /** 附件名称 */
+    @Schema(description = "附件名称")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 2,value = "附件名称")
+    private String attachmentName;
+
+    /** 附件格式 */
+    @Schema(description = "附件格式")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 3,value = "附件格式")
+    private String attachmentFormat;
+
+    /** 附件内容 */
+    @Schema(description = "附件内容")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 4,value = "附件内容")
+    private String attachmentContent;
+
+    /** 附件url */
+    @Schema(description = "附件url")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 5,value = "附件url")
+    private String attachmentUrl;
+
+    /** 上传时间 */
+    @Schema(description = "上传时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 6,value = "上传时间")
+    private String uploadTime;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 7,value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 8,value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 9,value = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 更新时间 */
+    @Schema(description = "更新时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 10,value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/enums/QySecondlineHfdAttachmentEnum.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.qysecondlinehfdattachment.enums;
+
+import lombok.Getter;
+
+/**
+ * 二线核放清单附件表枚举
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+public enum QySecondlineHfdAttachmentEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    QySecondlineHfdAttachmentEnum(String value) {
+        this.value = value;
+    }
+}

+ 46 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/enums/QySecondlineHfdStatusEnum.java

@@ -0,0 +1,46 @@
+/*
+ * 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.qysecondlinehfdattachment.enums;
+
+import lombok.Getter;
+
+/**
+ * 二线核放清单附件表枚举
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+public enum QySecondlineHfdStatusEnum {
+
+    /** 通过 */
+    PASS("PASS"),
+    /**
+     * 暂存
+     */
+    STAGING("STAGING"),
+    /**
+     * 不通过
+     */
+    NO_PASS("NOPASS"),
+    /**
+     * 审核中
+     */
+    AUDIT("AUDIT");
+
+    private final String value;
+
+    QySecondlineHfdStatusEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/mapper/QySecondlineHfdAttachmentMapper.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.qysecondlinehfdattachment.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+
+/**
+ * 二线核放清单附件表Mapper接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+public interface QySecondlineHfdAttachmentMapper extends BaseMapper<QySecondlineHfdAttachment> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/mapper/mapping/QySecondlineHfdAttachmentMapper.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.qysecondlinehfdattachment.mapper.QySecondlineHfdAttachmentMapper">
+
+</mapper>

+ 58 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentAddParam.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.qysecondlinehfdattachment.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 wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdAttachmentAddParam {
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    private String hfdId;
+
+    /** 附件名称 */
+    @Schema(description = "附件名称")
+    private String attachmentName;
+
+    /** 附件格式 */
+    @Schema(description = "附件格式")
+    private String attachmentFormat;
+
+    /** 附件内容 */
+    @Schema(description = "附件内容")
+    private String attachmentContent;
+
+    /** 附件url */
+    @Schema(description = "附件url")
+    private String attachmentUrl;
+
+    /** 上传时间 */
+    @Schema(description = "上传时间")
+    private String uploadTime;
+
+}

+ 63 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentEditParam.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.qysecondlinehfdattachment.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 wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdAttachmentEditParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    private String hfdId;
+
+    /** 附件名称 */
+    @Schema(description = "附件名称")
+    private String attachmentName;
+
+    /** 附件格式 */
+    @Schema(description = "附件格式")
+    private String attachmentFormat;
+
+    /** 附件内容 */
+    @Schema(description = "附件内容")
+    private String attachmentContent;
+
+    /** 附件url */
+    @Schema(description = "附件url")
+    private String attachmentUrl;
+
+    /** 上传时间 */
+    @Schema(description = "上传时间")
+    private String uploadTime;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentIdParam.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.qysecondlinehfdattachment.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 二线核放清单附件表Id参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdAttachmentIdParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/param/QySecondlineHfdAttachmentPageParam.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.qysecondlinehfdattachment.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 二线核放清单附件表查询参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdAttachmentPageParam {
+
+    /** 当前页 */
+    @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/qysecondlinehfdattachment/service/QySecondlineHfdAttachmentService.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.qysecondlinehfdattachment.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentPageParam;
+
+import java.util.List;
+
+/**
+ * 二线核放清单附件表Service接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+public interface QySecondlineHfdAttachmentService extends IService<QySecondlineHfdAttachment> {
+
+    /**
+     * 获取二线核放清单附件表分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    Page<QySecondlineHfdAttachment> page(QySecondlineHfdAttachmentPageParam qySecondlineHfdAttachmentPageParam);
+
+    /**
+     * 添加二线核放清单附件表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    void add(QySecondlineHfdAttachmentAddParam qySecondlineHfdAttachmentAddParam);
+
+    /**
+     * 编辑二线核放清单附件表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    void edit(QySecondlineHfdAttachmentEditParam qySecondlineHfdAttachmentEditParam);
+
+    /**
+     * 删除二线核放清单附件表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    void delete(List<QySecondlineHfdAttachmentIdParam> qySecondlineHfdAttachmentIdParamList);
+
+    /**
+     * 获取二线核放清单附件表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     */
+    QySecondlineHfdAttachment detail(QySecondlineHfdAttachmentIdParam qySecondlineHfdAttachmentIdParam);
+
+    /**
+     * 获取二线核放清单附件表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:57
+     **/
+    QySecondlineHfdAttachment queryEntity(String id);
+}

+ 94 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdattachment/service/impl/QySecondlineHfdAttachmentServiceImpl.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.qysecondlinehfdattachment.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.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.mapper.QySecondlineHfdAttachmentMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.param.QySecondlineHfdAttachmentPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdattachment.service.QySecondlineHfdAttachmentService;
+
+import java.util.List;
+
+/**
+ * 二线核放清单附件表Service接口实现类
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:57
+ **/
+@Service
+public class QySecondlineHfdAttachmentServiceImpl extends ServiceImpl<QySecondlineHfdAttachmentMapper, QySecondlineHfdAttachment> implements QySecondlineHfdAttachmentService {
+
+    @Override
+    public Page<QySecondlineHfdAttachment> page(QySecondlineHfdAttachmentPageParam qySecondlineHfdAttachmentPageParam) {
+        QueryWrapper<QySecondlineHfdAttachment> queryWrapper = new QueryWrapper<QySecondlineHfdAttachment>().checkSqlInjection();
+        if(ObjectUtil.isAllNotEmpty(qySecondlineHfdAttachmentPageParam.getSortField(), qySecondlineHfdAttachmentPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(qySecondlineHfdAttachmentPageParam.getSortOrder());
+            queryWrapper.orderBy(true, qySecondlineHfdAttachmentPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(qySecondlineHfdAttachmentPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(QySecondlineHfdAttachment::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(QySecondlineHfdAttachmentAddParam qySecondlineHfdAttachmentAddParam) {
+        QySecondlineHfdAttachment qySecondlineHfdAttachment = BeanUtil.toBean(qySecondlineHfdAttachmentAddParam, QySecondlineHfdAttachment.class);
+        this.save(qySecondlineHfdAttachment);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(QySecondlineHfdAttachmentEditParam qySecondlineHfdAttachmentEditParam) {
+        QySecondlineHfdAttachment qySecondlineHfdAttachment = this.queryEntity(qySecondlineHfdAttachmentEditParam.getId());
+        BeanUtil.copyProperties(qySecondlineHfdAttachmentEditParam, qySecondlineHfdAttachment);
+        this.updateById(qySecondlineHfdAttachment);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<QySecondlineHfdAttachmentIdParam> qySecondlineHfdAttachmentIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(qySecondlineHfdAttachmentIdParamList, QySecondlineHfdAttachmentIdParam::getId));
+    }
+
+    @Override
+    public QySecondlineHfdAttachment detail(QySecondlineHfdAttachmentIdParam qySecondlineHfdAttachmentIdParam) {
+        return this.queryEntity(qySecondlineHfdAttachmentIdParam.getId());
+    }
+
+    @Override
+    public QySecondlineHfdAttachment queryEntity(String id) {
+        QySecondlineHfdAttachment qySecondlineHfdAttachment = this.getById(id);
+        if(ObjectUtil.isEmpty(qySecondlineHfdAttachment)) {
+            throw new CommonException("二线核放清单附件表不存在,id值为:{}", id);
+        }
+        return qySecondlineHfdAttachment;
+    }
+}

+ 174 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/controller/QySecondlineHfdDzController.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.qysecondlinehfddz.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.qysecondlinehfddz.entity.QySecondlineHfdDz;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.service.QySecondlineHfdDzService;
+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 wenjinbiao
+ * @date  2024/07/06 12:54
+ */
+@Tag(name = "二线核注关联单证表控制器")
+@RestController
+@Validated
+public class QySecondlineHfdDzController {
+
+    @Resource
+    private QySecondlineHfdDzService qySecondlineHfdDzService;
+
+    /**
+     * 获取二线核注关联单证表分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    @Operation(summary = "获取二线核注关联单证表分页")
+    @SaCheckPermission("/biz/qysecondlinehfddz/page")
+    @GetMapping("/biz/qysecondlinehfddz/page")
+    public CommonResult<Page<QySecondlineHfdDz>> page(QySecondlineHfdDzPageParam qySecondlineHfdDzPageParam) {
+        return CommonResult.data(qySecondlineHfdDzService.page(qySecondlineHfdDzPageParam));
+    }
+
+    /**
+     * 添加二线核注关联单证表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    @Operation(summary = "添加二线核注关联单证表")
+    @CommonLog("添加二线核注关联单证表")
+    @SaCheckPermission("/biz/qysecondlinehfddz/add")
+    @PostMapping("/biz/qysecondlinehfddz/add")
+    public CommonResult<String> add(@RequestBody @Valid QySecondlineHfdDzAddParam qySecondlineHfdDzAddParam) {
+        qySecondlineHfdDzService.add(qySecondlineHfdDzAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑二线核注关联单证表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    @Operation(summary = "编辑二线核注关联单证表")
+    @CommonLog("编辑二线核注关联单证表")
+    @SaCheckPermission("/biz/qysecondlinehfddz/edit")
+    @PostMapping("/biz/qysecondlinehfddz/edit")
+    public CommonResult<String> edit(@RequestBody @Valid QySecondlineHfdDzEditParam qySecondlineHfdDzEditParam) {
+        qySecondlineHfdDzService.edit(qySecondlineHfdDzEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 导出二线核注关联单证表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    @Operation(summary = "导出二线核注关联单证表")
+    @CommonLog("导出二线核注关联单证表")
+    @SaCheckPermission("/biz/qysecondlinehfddz/export")
+    @PostMapping("/biz/qysecondlinehfddz/export")
+    public void export(@RequestBody @Valid QySecondlineHfdDzPageParam qySecondlineHfdDzPageParam, HttpServletResponse response) {
+        Page<QySecondlineHfdDz> page =  qySecondlineHfdDzService.page(qySecondlineHfdDzPageParam);
+        List<QySecondlineHfdDz> records = page.getRecords();
+        exportExcel(response,QySecondlineHfdDz.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 wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    @Operation(summary = "删除二线核注关联单证表")
+    @CommonLog("删除二线核注关联单证表")
+    @SaCheckPermission("/biz/qysecondlinehfddz/delete")
+    @PostMapping("/biz/qysecondlinehfddz/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<QySecondlineHfdDzIdParam> qySecondlineHfdDzIdParamList) {
+        qySecondlineHfdDzService.delete(qySecondlineHfdDzIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取二线核注关联单证表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    @Operation(summary = "获取二线核注关联单证表详情")
+    @SaCheckPermission("/biz/qysecondlinehfddz/detail")
+    @GetMapping("/biz/qysecondlinehfddz/detail")
+    public CommonResult<QySecondlineHfdDz> detail(@Valid QySecondlineHfdDzIdParam qySecondlineHfdDzIdParam) {
+        return CommonResult.data(qySecondlineHfdDzService.detail(qySecondlineHfdDzIdParam));
+    }
+}

+ 92 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/entity/QySecondlineHfdDz.java

@@ -0,0 +1,92 @@
+/*
+ * 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.qysecondlinehfddz.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 wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Getter
+@Setter
+@TableName("qy_secondline_hfd_dz")
+public class QySecondlineHfdDz {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 0,value = "主键")
+    private String id;
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 1,value = "二线核放单id")
+    private String hfdId;
+
+    /** 核放单编码 */
+    @Schema(description = "核放单编码")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 2,value = "核放单编码")
+    private String hfdCode;
+
+    /** 关联单证类型 */
+    @Schema(description = "关联单证类型")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 3,value = "关联单证类型")
+    private String dzType;
+
+    /** 关联单证编号 */
+    @Schema(description = "关联单证编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 4,value = "关联单证编号")
+    private String dzCode;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 5,value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 6,value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 7,value = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 更新时间 */
+    @Schema(description = "更新时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 8,value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/enums/QySecondlineHfdDzEnum.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.qysecondlinehfddz.enums;
+
+import lombok.Getter;
+
+/**
+ * 二线核注关联单证表枚举
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Getter
+public enum QySecondlineHfdDzEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    QySecondlineHfdDzEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/mapper/QySecondlineHfdDzMapper.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.qysecondlinehfddz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.entity.QySecondlineHfdDz;
+
+/**
+ * 二线核注关联单证表Mapper接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+public interface QySecondlineHfdDzMapper extends BaseMapper<QySecondlineHfdDz> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/mapper/mapping/QySecondlineHfdDzMapper.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.qysecondlinehfddz.mapper.QySecondlineHfdDzMapper">
+
+</mapper>

+ 50 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzAddParam.java

@@ -0,0 +1,50 @@
+/*
+ * 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.qysecondlinehfddz.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 wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdDzAddParam {
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    private String hfdId;
+
+    /** 核放单编码 */
+    @Schema(description = "核放单编码")
+    private String hfdCode;
+
+    /** 关联单证类型 */
+    @Schema(description = "关联单证类型")
+    private String dzType;
+
+    /** 关联单证编号 */
+    @Schema(description = "关联单证编号")
+    private String dzCode;
+
+}

+ 55 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzEditParam.java

@@ -0,0 +1,55 @@
+/*
+ * 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.qysecondlinehfddz.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 wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdDzEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    private String hfdId;
+
+    /** 核放单编码 */
+    @Schema(description = "核放单编码")
+    private String hfdCode;
+
+    /** 关联单证类型 */
+    @Schema(description = "关联单证类型")
+    private String dzType;
+
+    /** 关联单证编号 */
+    @Schema(description = "关联单证编号")
+    private String dzCode;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/param/QySecondlineHfdDzIdParam.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.qysecondlinehfddz.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 二线核注关联单证表Id参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdDzIdParam {
+
+    /** 主键 */
+    @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/qysecondlinehfddz/param/QySecondlineHfdDzPageParam.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.qysecondlinehfddz.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 二线核注关联单证表查询参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdDzPageParam {
+
+    /** 当前页 */
+    @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/qysecondlinehfddz/service/QySecondlineHfdDzService.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.qysecondlinehfddz.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.entity.QySecondlineHfdDz;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzPageParam;
+
+import java.util.List;
+
+/**
+ * 二线核注关联单证表Service接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+public interface QySecondlineHfdDzService extends IService<QySecondlineHfdDz> {
+
+    /**
+     * 获取二线核注关联单证表分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    Page<QySecondlineHfdDz> page(QySecondlineHfdDzPageParam qySecondlineHfdDzPageParam);
+
+    /**
+     * 添加二线核注关联单证表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    void add(QySecondlineHfdDzAddParam qySecondlineHfdDzAddParam);
+
+    /**
+     * 编辑二线核注关联单证表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    void edit(QySecondlineHfdDzEditParam qySecondlineHfdDzEditParam);
+
+    /**
+     * 删除二线核注关联单证表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    void delete(List<QySecondlineHfdDzIdParam> qySecondlineHfdDzIdParamList);
+
+    /**
+     * 获取二线核注关联单证表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     */
+    QySecondlineHfdDz detail(QySecondlineHfdDzIdParam qySecondlineHfdDzIdParam);
+
+    /**
+     * 获取二线核注关联单证表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:54
+     **/
+    QySecondlineHfdDz queryEntity(String id);
+}

+ 94 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfddz/service/impl/QySecondlineHfdDzServiceImpl.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.qysecondlinehfddz.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.qysecondlinehfddz.entity.QySecondlineHfdDz;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.mapper.QySecondlineHfdDzMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.param.QySecondlineHfdDzPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfddz.service.QySecondlineHfdDzService;
+
+import java.util.List;
+
+/**
+ * 二线核注关联单证表Service接口实现类
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:54
+ **/
+@Service
+public class QySecondlineHfdDzServiceImpl extends ServiceImpl<QySecondlineHfdDzMapper, QySecondlineHfdDz> implements QySecondlineHfdDzService {
+
+    @Override
+    public Page<QySecondlineHfdDz> page(QySecondlineHfdDzPageParam qySecondlineHfdDzPageParam) {
+        QueryWrapper<QySecondlineHfdDz> queryWrapper = new QueryWrapper<QySecondlineHfdDz>().checkSqlInjection();
+        if(ObjectUtil.isAllNotEmpty(qySecondlineHfdDzPageParam.getSortField(), qySecondlineHfdDzPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(qySecondlineHfdDzPageParam.getSortOrder());
+            queryWrapper.orderBy(true, qySecondlineHfdDzPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(qySecondlineHfdDzPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(QySecondlineHfdDz::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(QySecondlineHfdDzAddParam qySecondlineHfdDzAddParam) {
+        QySecondlineHfdDz qySecondlineHfdDz = BeanUtil.toBean(qySecondlineHfdDzAddParam, QySecondlineHfdDz.class);
+        this.save(qySecondlineHfdDz);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(QySecondlineHfdDzEditParam qySecondlineHfdDzEditParam) {
+        QySecondlineHfdDz qySecondlineHfdDz = this.queryEntity(qySecondlineHfdDzEditParam.getId());
+        BeanUtil.copyProperties(qySecondlineHfdDzEditParam, qySecondlineHfdDz);
+        this.updateById(qySecondlineHfdDz);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<QySecondlineHfdDzIdParam> qySecondlineHfdDzIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(qySecondlineHfdDzIdParamList, QySecondlineHfdDzIdParam::getId));
+    }
+
+    @Override
+    public QySecondlineHfdDz detail(QySecondlineHfdDzIdParam qySecondlineHfdDzIdParam) {
+        return this.queryEntity(qySecondlineHfdDzIdParam.getId());
+    }
+
+    @Override
+    public QySecondlineHfdDz queryEntity(String id) {
+        QySecondlineHfdDz qySecondlineHfdDz = this.getById(id);
+        if(ObjectUtil.isEmpty(qySecondlineHfdDz)) {
+            throw new CommonException("二线核注关联单证表不存在,id值为:{}", id);
+        }
+        return qySecondlineHfdDz;
+    }
+}

+ 182 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/controller/QySecondlineHfdListController.java

@@ -0,0 +1,182 @@
+/*
+ * 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.qysecondlinehfdlist.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.qysecondlinehfdlist.entity.QySecondlineHfdList;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.service.QySecondlineHfdListService;
+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 wenjinbiao
+ * @date  2024/07/06 13:05
+ */
+@Tag(name = "二线核放回执单控制器")
+@RestController
+@Validated
+public class QySecondlineHfdListController {
+
+    @Resource
+    private QySecondlineHfdListService qySecondlineHfdListService;
+
+    /**
+     * 获取二线核放回执单分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    @Operation(summary = "获取二线核放回执单分页")
+    @SaCheckPermission("/biz/qysecondlinehfdlist/page")
+    @GetMapping("/biz/qysecondlinehfdlist/page")
+    public CommonResult<Page<QySecondlineHfdList>> page(QySecondlineHfdListPageParam qySecondlineHfdListPageParam) {
+        return CommonResult.data(qySecondlineHfdListService.page(qySecondlineHfdListPageParam));
+    }
+
+    /**
+     * 添加二线核放回执单
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    @Operation(summary = "添加二线核放回执单")
+    @CommonLog("添加二线核放回执单")
+    @SaCheckPermission("/biz/qysecondlinehfdlist/add")
+    @PostMapping("/biz/qysecondlinehfdlist/add")
+    public CommonResult<String> add(@RequestBody @Valid QySecondlineHfdListAddParam qySecondlineHfdListAddParam) {
+        qySecondlineHfdListService.add(qySecondlineHfdListAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑二线核放回执单
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    @Operation(summary = "编辑二线核放回执单")
+    @CommonLog("编辑二线核放回执单")
+    @SaCheckPermission("/biz/qysecondlinehfdlist/edit")
+    @PostMapping("/biz/qysecondlinehfdlist/edit")
+    public CommonResult<String> edit(@RequestBody @Valid QySecondlineHfdListEditParam qySecondlineHfdListEditParam) {
+        qySecondlineHfdListService.edit(qySecondlineHfdListEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 导出二线核放回执单
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    @Operation(summary = "导出二线核放回执单")
+    @CommonLog("导出二线核放回执单")
+    @SaCheckPermission("/biz/qysecondlinehfdlist/export")
+    @PostMapping("/biz/qysecondlinehfdlist/export")
+    public void export(@RequestBody @Valid QySecondlineHfdListPageParam qySecondlineHfdListPageParam, HttpServletResponse response) {
+        Page<QySecondlineHfdList> page =  qySecondlineHfdListService.page(qySecondlineHfdListPageParam);
+        List<QySecondlineHfdList> records = page.getRecords();
+        exportExcel(response,QySecondlineHfdList.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 wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    @Operation(summary = "删除二线核放回执单")
+    @CommonLog("删除二线核放回执单")
+    @SaCheckPermission("/biz/qysecondlinehfdlist/delete")
+    @PostMapping("/biz/qysecondlinehfdlist/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<QySecondlineHfdListIdParam> qySecondlineHfdListIdParamList) {
+        qySecondlineHfdListService.delete(qySecondlineHfdListIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取二线核放回执单详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    @Operation(summary = "获取二线核放回执单详情")
+    @SaCheckPermission("/biz/qysecondlinehfdlist/detail")
+    @GetMapping("/biz/qysecondlinehfdlist/detail")
+    public CommonResult<QySecondlineHfdList> detail(@Valid QySecondlineHfdListIdParam qySecondlineHfdListIdParam) {
+        return CommonResult.data(qySecondlineHfdListService.detail(qySecondlineHfdListIdParam));
+    }
+
+
+    @Operation(summary = "根据核放id获取二线核放回执单列表")
+//    @SaCheckPermission("/biz/qysecondlinehfdlist/detail")
+    @GetMapping("/biz/qysecondlinehfdlist/getListByHfdId")
+    public CommonResult<List<QySecondlineHfdList>> getListByHfdId(@Valid QySecondlineHfdListIdParam qySecondlineHfdListIdParam) {
+        return CommonResult.data(qySecondlineHfdListService.getListByHfdId(qySecondlineHfdListIdParam.getHfdId()));
+    }
+}

+ 104 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/entity/QySecondlineHfdList.java

@@ -0,0 +1,104 @@
+/*
+ * 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.qysecondlinehfdlist.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 wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Getter
+@Setter
+@TableName("qy_secondline_hfd_list")
+public class QySecondlineHfdList {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 0,value = "主键")
+    private String id;
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 1,value = "二线核放单id")
+    private String hfdId;
+
+    /** 单据类型 */
+    @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;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 7,value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 8,value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 9,value = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 更新时间 */
+    @Schema(description = "更新时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 10,value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/enums/QySecondlineHfdListEnum.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.qysecondlinehfdlist.enums;
+
+import lombok.Getter;
+
+/**
+ * 二线核放回执单枚举
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Getter
+public enum QySecondlineHfdListEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    QySecondlineHfdListEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/mapper/QySecondlineHfdListMapper.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.qysecondlinehfdlist.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.entity.QySecondlineHfdList;
+
+/**
+ * 二线核放回执单Mapper接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+public interface QySecondlineHfdListMapper extends BaseMapper<QySecondlineHfdList> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/mapper/mapping/QySecondlineHfdListMapper.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.qysecondlinehfdlist.mapper.QySecondlineHfdListMapper">
+
+</mapper>

+ 58 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListAddParam.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.qysecondlinehfdlist.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 wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdListAddParam {
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    private String hfdId;
+
+    /** 单据类型 */
+    @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/qysecondlinehfdlist/param/QySecondlineHfdListEditParam.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.qysecondlinehfdlist.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 wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdListEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 二线核放单id */
+    @Schema(description = "二线核放单id")
+    private String hfdId;
+
+    /** 单据类型 */
+    @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;
+
+}

+ 37 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListIdParam.java

@@ -0,0 +1,37 @@
+/*
+ * 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.qysecondlinehfdlist.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 二线核放回执单Id参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdListIdParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+//    @NotBlank(message = "id不能为空")
+    private String id;
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String hfdId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/param/QySecondlineHfdListPageParam.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.qysecondlinehfdlist.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 二线核放回执单查询参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdListPageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 82 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/service/QySecondlineHfdListService.java

@@ -0,0 +1,82 @@
+/*
+ * 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.qysecondlinehfdlist.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.entity.QySecondlineHfdList;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListPageParam;
+
+import java.util.List;
+
+/**
+ * 二线核放回执单Service接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+public interface QySecondlineHfdListService extends IService<QySecondlineHfdList> {
+
+    /**
+     * 获取二线核放回执单分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    Page<QySecondlineHfdList> page(QySecondlineHfdListPageParam qySecondlineHfdListPageParam);
+
+    /**
+     * 添加二线核放回执单
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    void add(QySecondlineHfdListAddParam qySecondlineHfdListAddParam);
+
+    /**
+     * 编辑二线核放回执单
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    void edit(QySecondlineHfdListEditParam qySecondlineHfdListEditParam);
+
+    /**
+     * 删除二线核放回执单
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    void delete(List<QySecondlineHfdListIdParam> qySecondlineHfdListIdParamList);
+
+    /**
+     * 获取二线核放回执单详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     */
+    QySecondlineHfdList detail(QySecondlineHfdListIdParam qySecondlineHfdListIdParam);
+
+    /**
+     * 获取二线核放回执单详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 13:05
+     **/
+    QySecondlineHfdList queryEntity(String id);
+
+    List<QySecondlineHfdList> getListByHfdId(String hfdId);
+}

+ 109 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdlist/service/impl/QySecondlineHfdListServiceImpl.java

@@ -0,0 +1,109 @@
+/*
+ * 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.qysecondlinehfdlist.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.biz.modular.qysecondlinehfdattachment.entity.QySecondlineHfdAttachment;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.entity.QySecondlineHfdList;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.mapper.QySecondlineHfdListMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.param.QySecondlineHfdListPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdlist.service.QySecondlineHfdListService;
+
+import java.util.List;
+
+/**
+ * 二线核放回执单Service接口实现类
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 13:05
+ **/
+@Service
+public class QySecondlineHfdListServiceImpl extends ServiceImpl<QySecondlineHfdListMapper, QySecondlineHfdList> implements QySecondlineHfdListService {
+
+    @Override
+    public Page<QySecondlineHfdList> page(QySecondlineHfdListPageParam qySecondlineHfdListPageParam) {
+        QueryWrapper<QySecondlineHfdList> queryWrapper = new QueryWrapper<QySecondlineHfdList>().checkSqlInjection();
+        if(ObjectUtil.isAllNotEmpty(qySecondlineHfdListPageParam.getSortField(), qySecondlineHfdListPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(qySecondlineHfdListPageParam.getSortOrder());
+            queryWrapper.orderBy(true, qySecondlineHfdListPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(qySecondlineHfdListPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(QySecondlineHfdList::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(QySecondlineHfdListAddParam qySecondlineHfdListAddParam) {
+        QySecondlineHfdList qySecondlineHfdList = BeanUtil.toBean(qySecondlineHfdListAddParam, QySecondlineHfdList.class);
+        this.save(qySecondlineHfdList);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(QySecondlineHfdListEditParam qySecondlineHfdListEditParam) {
+        QySecondlineHfdList qySecondlineHfdList = this.queryEntity(qySecondlineHfdListEditParam.getId());
+        BeanUtil.copyProperties(qySecondlineHfdListEditParam, qySecondlineHfdList);
+        this.updateById(qySecondlineHfdList);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<QySecondlineHfdListIdParam> qySecondlineHfdListIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(qySecondlineHfdListIdParamList, QySecondlineHfdListIdParam::getId));
+    }
+
+    @Override
+    public QySecondlineHfdList detail(QySecondlineHfdListIdParam qySecondlineHfdListIdParam) {
+        return this.queryEntity(qySecondlineHfdListIdParam.getId());
+    }
+
+    @Override
+    public QySecondlineHfdList queryEntity(String id) {
+        QySecondlineHfdList qySecondlineHfdList = this.getById(id);
+        if(ObjectUtil.isEmpty(qySecondlineHfdList)) {
+            throw new CommonException("二线核放回执单不存在,id值为:{}", id);
+        }
+        return qySecondlineHfdList;
+    }
+
+
+    /**
+     * 回执信息
+     * @param hfdId
+     * @return
+     */
+    @Override
+    public List<QySecondlineHfdList> getListByHfdId(String hfdId){
+        QueryWrapper<QySecondlineHfdList> hfdListQueryWrapper = new QueryWrapper<QySecondlineHfdList>().checkSqlInjection();
+        hfdListQueryWrapper.lambda().eq(QySecondlineHfdList::getHfdId,hfdId);
+        List<QySecondlineHfdList> hfdLists = this.list(hfdListQueryWrapper);
+        return hfdLists;
+    }
+}

+ 174 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/controller/QySecondlineHfdProductController.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.qysecondlinehfdproduct.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.qysecondlinehfdproduct.entity.QySecondlineHfdProduct;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.service.QySecondlineHfdProductService;
+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 wenjinbiao
+ * @date  2024/07/06 12:52
+ */
+@Tag(name = "二线核放清单关联商品表控制器")
+@RestController
+@Validated
+public class QySecondlineHfdProductController {
+
+    @Resource
+    private QySecondlineHfdProductService qySecondlineHfdProductService;
+
+    /**
+     * 获取二线核放清单关联商品表分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    @Operation(summary = "获取二线核放清单关联商品表分页")
+    @SaCheckPermission("/biz/qysecondlinehfdproduct/page")
+    @GetMapping("/biz/qysecondlinehfdproduct/page")
+    public CommonResult<Page<QySecondlineHfdProduct>> page(QySecondlineHfdProductPageParam qySecondlineHfdProductPageParam) {
+        return CommonResult.data(qySecondlineHfdProductService.page(qySecondlineHfdProductPageParam));
+    }
+
+    /**
+     * 添加二线核放清单关联商品表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    @Operation(summary = "添加二线核放清单关联商品表")
+    @CommonLog("添加二线核放清单关联商品表")
+    @SaCheckPermission("/biz/qysecondlinehfdproduct/add")
+    @PostMapping("/biz/qysecondlinehfdproduct/add")
+    public CommonResult<String> add(@RequestBody @Valid QySecondlineHfdProductAddParam qySecondlineHfdProductAddParam) {
+        qySecondlineHfdProductService.add(qySecondlineHfdProductAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑二线核放清单关联商品表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    @Operation(summary = "编辑二线核放清单关联商品表")
+    @CommonLog("编辑二线核放清单关联商品表")
+    @SaCheckPermission("/biz/qysecondlinehfdproduct/edit")
+    @PostMapping("/biz/qysecondlinehfdproduct/edit")
+    public CommonResult<String> edit(@RequestBody @Valid QySecondlineHfdProductEditParam qySecondlineHfdProductEditParam) {
+        qySecondlineHfdProductService.edit(qySecondlineHfdProductEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 导出二线核放清单关联商品表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    @Operation(summary = "导出二线核放清单关联商品表")
+    @CommonLog("导出二线核放清单关联商品表")
+    @SaCheckPermission("/biz/qysecondlinehfdproduct/export")
+    @PostMapping("/biz/qysecondlinehfdproduct/export")
+    public void export(@RequestBody @Valid QySecondlineHfdProductPageParam qySecondlineHfdProductPageParam, HttpServletResponse response) {
+        Page<QySecondlineHfdProduct> page =  qySecondlineHfdProductService.page(qySecondlineHfdProductPageParam);
+        List<QySecondlineHfdProduct> records = page.getRecords();
+        exportExcel(response,QySecondlineHfdProduct.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 wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    @Operation(summary = "删除二线核放清单关联商品表")
+    @CommonLog("删除二线核放清单关联商品表")
+    @SaCheckPermission("/biz/qysecondlinehfdproduct/delete")
+    @PostMapping("/biz/qysecondlinehfdproduct/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<QySecondlineHfdProductIdParam> qySecondlineHfdProductIdParamList) {
+        qySecondlineHfdProductService.delete(qySecondlineHfdProductIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取二线核放清单关联商品表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    @Operation(summary = "获取二线核放清单关联商品表详情")
+    @SaCheckPermission("/biz/qysecondlinehfdproduct/detail")
+    @GetMapping("/biz/qysecondlinehfdproduct/detail")
+    public CommonResult<QySecondlineHfdProduct> detail(@Valid QySecondlineHfdProductIdParam qySecondlineHfdProductIdParam) {
+        return CommonResult.data(qySecondlineHfdProductService.detail(qySecondlineHfdProductIdParam));
+    }
+}

+ 122 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/entity/QySecondlineHfdProduct.java

@@ -0,0 +1,122 @@
+/*
+ * 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.qysecondlinehfdproduct.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 wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Getter
+@Setter
+@TableName("qy_secondline_hfd_product")
+public class QySecondlineHfdProduct {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 0,value = "主键")
+    private String id;
+
+    /** 关联商品序号 */
+    @Schema(description = "核放单id")
+    @ColumnWidth(12)
+//    @ExcelProperty(index = 1,value = "核放单id")
+    private String hfdId;
+
+    /** 关联商品序号 */
+    @Schema(description = "关联商品序号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 1,value = "关联商品序号")
+    private String productId;
+
+    /** 商品编号 */
+    @Schema(description = "商品编号")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 2,value = "商品编号")
+    private String productCode;
+
+    /** 商品名称 */
+    @Schema(description = "商品名称")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 3,value = "商品名称")
+    private String productName;
+
+    /** 申报计量单位 */
+    @Schema(description = "申报计量单位")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 4,value = "申报计量单位")
+    private String declareUnit;
+
+    /** 申报数量 */
+    @Schema(description = "申报数量")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 5,value = "申报数量")
+    private String recordQuantity;
+
+    /** 毛重 */
+    @Schema(description = "毛重")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 6,value = "毛重")
+    private String grossWeight;
+
+    /** 净重 */
+    @Schema(description = "净重")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 7,value = "净重")
+    private String netWeight;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 8,value = "备注")
+    private String remark;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 9,value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 10,value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 11,value = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 更新时间 */
+    @Schema(description = "更新时间")
+    @ColumnWidth(12)
+    @ExcelProperty(index = 12,value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/enums/QySecondlineHfdProductEnum.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.qysecondlinehfdproduct.enums;
+
+import lombok.Getter;
+
+/**
+ * 二线核放清单关联商品表枚举
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Getter
+public enum QySecondlineHfdProductEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    QySecondlineHfdProductEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/mapper/QySecondlineHfdProductMapper.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.qysecondlinehfdproduct.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.entity.QySecondlineHfdProduct;
+
+/**
+ * 二线核放清单关联商品表Mapper接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+public interface QySecondlineHfdProductMapper extends BaseMapper<QySecondlineHfdProduct> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/mapper/mapping/QySecondlineHfdProductMapper.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.qysecondlinehfdproduct.mapper.QySecondlineHfdProductMapper">
+
+</mapper>

+ 67 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductAddParam.java

@@ -0,0 +1,67 @@
+/*
+ * 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.qysecondlinehfdproduct.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 wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdProductAddParam {
+
+
+    /** 关联商品序号 */
+    @Schema(description = "关联商品序号")
+    private String productId;
+
+    /** 商品编号 */
+    @Schema(description = "商品编号")
+    private String productCode;
+
+    /** 商品名称 */
+    @Schema(description = "商品名称")
+    private String productName;
+
+    /** 申报计量单位 */
+    @Schema(description = "申报计量单位")
+    private String declareUnit;
+
+    /** 申报数量 */
+    @Schema(description = "申报数量")
+    private String recordQuantity;
+
+    /** 毛重 */
+    @Schema(description = "毛重")
+    private String grossWeight;
+
+    /** 净重 */
+    @Schema(description = "净重")
+    private String netWeight;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String remark;
+
+}

+ 71 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductEditParam.java

@@ -0,0 +1,71 @@
+/*
+ * 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.qysecondlinehfdproduct.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 wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdProductEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 关联商品序号 */
+    @Schema(description = "关联商品序号")
+    private String productId;
+
+    /** 商品编号 */
+    @Schema(description = "商品编号")
+    private String productCode;
+
+    /** 商品名称 */
+    @Schema(description = "商品名称")
+    private String productName;
+
+    /** 申报计量单位 */
+    @Schema(description = "申报计量单位")
+    private String declareUnit;
+
+    /** 申报数量 */
+    @Schema(description = "申报数量")
+    private String recordQuantity;
+
+    /** 毛重 */
+    @Schema(description = "毛重")
+    private String grossWeight;
+
+    /** 净重 */
+    @Schema(description = "净重")
+    private String netWeight;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String remark;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/param/QySecondlineHfdProductIdParam.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.qysecondlinehfdproduct.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 二线核放清单关联商品表Id参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdProductIdParam {
+
+    /** 主键 */
+    @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/qysecondlinehfdproduct/param/QySecondlineHfdProductPageParam.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.qysecondlinehfdproduct.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 二线核放清单关联商品表查询参数
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Getter
+@Setter
+public class QySecondlineHfdProductPageParam {
+
+    /** 当前页 */
+    @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/qysecondlinehfdproduct/service/QySecondlineHfdProductService.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.qysecondlinehfdproduct.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.entity.QySecondlineHfdProduct;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductPageParam;
+
+import java.util.List;
+
+/**
+ * 二线核放清单关联商品表Service接口
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+public interface QySecondlineHfdProductService extends IService<QySecondlineHfdProduct> {
+
+    /**
+     * 获取二线核放清单关联商品表分页
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    Page<QySecondlineHfdProduct> page(QySecondlineHfdProductPageParam qySecondlineHfdProductPageParam);
+
+    /**
+     * 添加二线核放清单关联商品表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    void add(QySecondlineHfdProductAddParam qySecondlineHfdProductAddParam);
+
+    /**
+     * 编辑二线核放清单关联商品表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    void edit(QySecondlineHfdProductEditParam qySecondlineHfdProductEditParam);
+
+    /**
+     * 删除二线核放清单关联商品表
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    void delete(List<QySecondlineHfdProductIdParam> qySecondlineHfdProductIdParamList);
+
+    /**
+     * 获取二线核放清单关联商品表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     */
+    QySecondlineHfdProduct detail(QySecondlineHfdProductIdParam qySecondlineHfdProductIdParam);
+
+    /**
+     * 获取二线核放清单关联商品表详情
+     *
+     * @author wenjinbiao
+     * @date  2024/07/06 12:52
+     **/
+    QySecondlineHfdProduct queryEntity(String id);
+}

+ 94 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/qysecondlinehfdproduct/service/impl/QySecondlineHfdProductServiceImpl.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.qysecondlinehfdproduct.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.qysecondlinehfdproduct.entity.QySecondlineHfdProduct;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.mapper.QySecondlineHfdProductMapper;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductAddParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductEditParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductIdParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.param.QySecondlineHfdProductPageParam;
+import vip.xiaonuo.biz.modular.qysecondlinehfdproduct.service.QySecondlineHfdProductService;
+
+import java.util.List;
+
+/**
+ * 二线核放清单关联商品表Service接口实现类
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 12:52
+ **/
+@Service
+public class QySecondlineHfdProductServiceImpl extends ServiceImpl<QySecondlineHfdProductMapper, QySecondlineHfdProduct> implements QySecondlineHfdProductService {
+
+    @Override
+    public Page<QySecondlineHfdProduct> page(QySecondlineHfdProductPageParam qySecondlineHfdProductPageParam) {
+        QueryWrapper<QySecondlineHfdProduct> queryWrapper = new QueryWrapper<QySecondlineHfdProduct>().checkSqlInjection();
+        if(ObjectUtil.isAllNotEmpty(qySecondlineHfdProductPageParam.getSortField(), qySecondlineHfdProductPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(qySecondlineHfdProductPageParam.getSortOrder());
+            queryWrapper.orderBy(true, qySecondlineHfdProductPageParam.getSortOrder().equalsIgnoreCase(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(qySecondlineHfdProductPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(QySecondlineHfdProduct::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(QySecondlineHfdProductAddParam qySecondlineHfdProductAddParam) {
+        QySecondlineHfdProduct qySecondlineHfdProduct = BeanUtil.toBean(qySecondlineHfdProductAddParam, QySecondlineHfdProduct.class);
+        this.save(qySecondlineHfdProduct);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(QySecondlineHfdProductEditParam qySecondlineHfdProductEditParam) {
+        QySecondlineHfdProduct qySecondlineHfdProduct = this.queryEntity(qySecondlineHfdProductEditParam.getId());
+        BeanUtil.copyProperties(qySecondlineHfdProductEditParam, qySecondlineHfdProduct);
+        this.updateById(qySecondlineHfdProduct);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<QySecondlineHfdProductIdParam> qySecondlineHfdProductIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(qySecondlineHfdProductIdParamList, QySecondlineHfdProductIdParam::getId));
+    }
+
+    @Override
+    public QySecondlineHfdProduct detail(QySecondlineHfdProductIdParam qySecondlineHfdProductIdParam) {
+        return this.queryEntity(qySecondlineHfdProductIdParam.getId());
+    }
+
+    @Override
+    public QySecondlineHfdProduct queryEntity(String id) {
+        QySecondlineHfdProduct qySecondlineHfdProduct = this.getById(id);
+        if(ObjectUtil.isEmpty(qySecondlineHfdProduct)) {
+            throw new CommonException("二线核放清单关联商品表不存在,id值为:{}", id);
+        }
+        return qySecondlineHfdProduct;
+    }
+}