Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

shasha 1 ay önce
ebeveyn
işleme
66718a4b3c
22 değiştirilmiş dosya ile 1119 ekleme ve 7 silme
  1. 4 0
      snowy-admin-web/src/api/biz/bizLoadTimeApi.js
  2. 28 0
      snowy-admin-web/src/api/biz/bizOrderLoadApi.js
  3. 15 1
      snowy-admin-web/src/views/biz/bizorder/detail.vue
  4. 305 0
      snowy-admin-web/src/views/biz/bizorder/dispatch.vue
  5. 39 3
      snowy-admin-web/src/views/biz/bizorder/form.vue
  6. 10 1
      snowy-admin-web/src/views/biz/bizorder/index.vue
  7. 19 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/entity/BizOrder.java
  8. 10 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/mapper/mapping/BizOrderMapper.xml
  9. 6 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/param/BizOrderAddParam.java
  10. 6 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/param/BizOrderEditParam.java
  11. 1 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/service/impl/BizOrderServiceImpl.java
  12. 119 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/controller/BizOrderLoadController.java
  13. 66 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/entity/BizOrderLoad.java
  14. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/enums/BizOrderLoadEnum.java
  15. 30 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/mapper/BizOrderLoadMapper.java
  16. 19 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/mapper/mapping/BizOrderLoadMapper.xml
  17. 46 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadAddParam.java
  18. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadEditParam.java
  19. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadIdParam.java
  20. 53 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadPageParam.java
  21. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/BizOrderLoadService.java
  22. 143 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/impl/BizOrderLoadServiceImpl.java

+ 4 - 0
snowy-admin-web/src/api/biz/bizLoadTimeApi.js

@@ -24,5 +24,9 @@ export default {
 	// 获取装货时间配置详情
 	bizLoadTimeDetail(data) {
 		return request('detail', data, 'get')
+	},
+	// 获取装卸点位时间
+	search(data){
+		return request('search',data,'get')
 	}
 }

+ 28 - 0
snowy-admin-web/src/api/biz/bizOrderLoadApi.js

@@ -0,0 +1,28 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/bizorderload/` + url, ...arg)
+
+/**
+ * 订单装卸点位Api接口管理器
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+export default {
+	// 获取订单装卸点位分页
+	bizOrderLoadPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交订单装卸点位表单 edit为true时为编辑,默认为新增
+	bizOrderLoadSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除订单装卸点位
+	bizOrderLoadDelete(data) {
+		return request('delete', data)
+	},
+	// 获取订单装卸点位详情
+	bizOrderLoadDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

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

@@ -3,7 +3,19 @@
 		<a-form ref="formRef" :model="formData" :label-col="labelCol4" :wrapper-col="wrapperCol20">
 			<a-descriptions :column="4" size="middle" bordered class="mb-2" :label-style="labelStyle" :contentStyle="contentStyle">
 				<a-descriptions-item label="订单编号" :span="2">{{ formData.orderNumber }}</a-descriptions-item>
-				<a-descriptions-item label="订单名称" :span="2">{{ formData.orderName }}</a-descriptions-item>
+				<a-descriptions-item label="订单类型" :span="2">
+					<a-tag
+						:color="
+							formData.orderType === '1'
+								? 'orange'
+								: formData.orderType === '2'
+								  ? 'green'
+								  : 'purple'
+						"
+					>
+						{{ $TOOL.dictTypeData('order_type', formData.orderType) }}
+					</a-tag>
+				</a-descriptions-item>
 				<a-descriptions-item label="客户名称" :span="2">{{ formData.customerName }}</a-descriptions-item>
 				<a-descriptions-item label="联系人" :span="2">{{ formData.customerContactName }}</a-descriptions-item>
 				<a-descriptions-item label="手机号" :span="2">{{ formData.customerPhone }}</a-descriptions-item>
@@ -50,6 +62,8 @@
 				<a-descriptions-item label="过磅重量" :span="2">{{ formData.netWeight +'吨'}}</a-descriptions-item>
 				<a-descriptions-item label="提货开始时间" :span="2">{{ formData.confStartTime}}</a-descriptions-item>
 				<a-descriptions-item label="提货结束时间" :span="2">{{ formData.confEndTime}}</a-descriptions-item>
+				<a-descriptions-item label="供应商" :span="2">{{ formData.supplierName}}</a-descriptions-item>
+				<a-descriptions-item label="运费单价" :span="2">{{ formData.freightPrice}}</a-descriptions-item>
 				<a-descriptions-item label="创建时间" :span="2">{{ formData.createTime}}</a-descriptions-item>
 				<a-descriptions-item label="创建人" :span="2">{{ formData.createUserName}}</a-descriptions-item>
 				<a-descriptions-item label="送货地址" :span="4">{{ formData.shipAddress}}</a-descriptions-item>

+ 305 - 0
snowy-admin-web/src/views/biz/bizorder/dispatch.vue

@@ -0,0 +1,305 @@
+<template>
+	<xn-form-container
+		:title="formData.id ? '装载车调度' : '装载车调度'"
+		:width="900"
+		v-model:open="open"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
+		<a-form ref="formRef" :model="formData" :rules="formRules" :wrapper-col="wrapperCol" :label-col="labelCol">
+			<a-form-item label="订单编号:" name="orderNumber">
+				<a-input v-model:value="formData.orderNumber" placeholder="请输入订单编号" allow-clear disabled/>
+			</a-form-item>
+<!--			<a-form-item label="客户信息:" name="customerId">
+				<a-select v-model:value="formData.customerId" placeholder="请选择客户信息"
+						  :options="customerIdList" @change="onChangeCustomer" disabled
+				> </a-select>
+			</a-form-item>-->
+			<a-form-item label="提货时间:" name="deliveryTimeId" >
+				<a-select v-model:value="formData.deliveryTimeId" placeholder="请选择提货时间"
+						  :options="deliveryTimeIdList" disabled
+				> </a-select>
+			</a-form-item>
+			<a-form-item label="装卸点位:" name="loadPointId">
+				<a-select v-model:value="formData.loadPointId" placeholder="请选择装卸点位"
+						  :options="loadPointIdList" @change="onChangePoint"
+				> </a-select>
+			</a-form-item>
+			<a-form-item label="装卸时间:" name="loadTimeId" >
+				<a-select v-model:value="formData.loadTimeId" placeholder="请选择装卸时间"
+						  :options="loadTimeIdList" @change="onChangeLoadTime"
+				> </a-select>
+			</a-form-item>
+			<a-form-item label="可约次数:" name="availableNumber" v-show="numberFlag">
+				<a-input v-model:value="formData.availableNumber" placeholder="请输入可约次数" allow-clear disabled/>
+			</a-form-item>
+			<a-form-item label="已约次数:" name="alreadyNumber" v-show="numberFlag">
+				<a-input v-model:value="formData.alreadyNumber" placeholder="请输入已约次数" allow-clear disabled/>
+			</a-form-item>
+		</a-form>
+
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			bordered
+			:row-key="(record) => record.id"
+		>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a-button type="link" danger size="small" v-if="hasPerm('bizOrderDispatchDelete')" @click="deleteConfig(record)">删除</a-button>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+
+		<template #footer>
+			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+		</template>
+	</xn-form-container>
+</template>
+
+<script setup name="bizOrderForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizOrderApi from '@/api/biz/bizOrderApi'
+	import tool from '@/utils/tool'
+	import bizGoodsApi from '@/api/biz/bizGoodsApi'
+	import customerApi from '@/api/biz/customerApi'
+	import goodsConfApi from '@/api/biz/goodsConfApi'
+	import bizSaleOrderApi from "@/api/biz/bizSaleOrderApi";
+	import bizSupplierApi from "@/api/biz/bizSupplierApi";
+	import bizLoadPointApi from "@/api/biz/bizLoadPointApi";
+	import bizLoadTimeApi from "@/api/biz/bizLoadTimeApi"
+	import bizOrderLoadApi from "@/api/biz/bizOrderLoadApi";
+	import bizLoadUserApi from "@/api/biz/bizLoadUserApi";
+	import {ExclamationCircleOutlined} from '@ant-design/icons-vue';
+	import {Modal} from 'ant-design-vue';
+	import {createVNode} from 'vue';
+
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	const tableRef = ref()
+
+	const numberFlag = ref(false)
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+
+	//设置表单样式
+	const labelCol = ref({ span: 5})
+	const wrapperCol = ref({ span: 16})
+
+	//订单类型
+	const orderTypeList = tool.dictList('order_type')
+	const goodIdList = ref()
+	const customerIdList = ref()
+	const saleOrderInfoList = ref()
+	const deliveryTimeIdList = ref()
+	const supplierIdList = ref()
+	const loadPointIdList = ref()
+	const loadTimeIdList = ref()
+
+	// 打开抽屉
+	const onOpen = (record) => {
+		open.value = true
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+		//查询客户信息
+		customerApi.getList().then((res)=>{
+			customerIdList.value = res.map((item)=>{
+				return{
+					value:item.id,
+					label:item.name
+				}
+			})
+		})
+
+		//装货点位查询
+		bizLoadPointApi.getList().then((res)=>{
+			loadPointIdList.value = res.map((item)=>{
+				return{
+					value:item.id,
+					label:item.loadPoint
+				}
+			})
+		})
+
+		if(formData.value.saleOrderInfo){
+			bizSaleOrderApi.detailById({id:formData.value.saleOrderInfo}).then((res)=>{
+				//根据货品名称和重量查询提货时间段
+				goodsConfApi.getList({goodsName:res.saleGoodsName,goodsCode:res.goodsCode,needWeight:res.saleOrderWeight}).then((res)=>{
+					deliveryTimeIdList.value = res.map((item)=>{
+						return{
+							value:item.id,
+							label:item.confStartTime+'~'+item.confEndTime
+						}
+					})
+				})
+			})
+		}
+
+
+	}
+
+	//卸货点位点击事件
+	const onChangePoint =(value)=>{
+		formData.value.loadTimeId = ''
+		loadTimeIdList.value = ''
+		formData.value.availableNumber = ''
+		formData.value.alreadyNumber = ''
+		bizLoadTimeApi.search({loadPointId:formData.value.loadPointId,goodsConfId:formData.value.deliveryTimeId}).then((res)=>{
+			loadTimeIdList.value = res.map((item)=>{
+				return{
+					value:item.id,
+					label:item.beginTime+'~'+item.endTime
+				}
+			})
+		})
+	}
+
+	const onChangeLoadTime = (value) => {
+		bizLoadTimeApi.bizLoadTimeDetail({id:value}).then((res)=>{
+			formData.value.availableNumber = res.availableNumber
+			formData.value.alreadyNumber = res.alreadyNumber
+			numberFlag.value = true
+		})
+	}
+
+	const loadData = (parameter) => {
+		return bizOrderLoadApi.bizOrderLoadPage({orderId:formData.value.id}).then((data) => {
+			return data
+		})
+	}
+
+	const columns = [
+		{
+			title: '装卸点位',
+			dataIndex: 'loadPoint',
+			align:'center'
+		},
+		{
+			title: '开始时间',
+			dataIndex: 'beginTime',
+			align:'center'
+		},
+		{
+			title: '结束时间',
+			dataIndex: 'endTime',
+			align:'center'
+		},
+		{
+			title: '可约次数',
+			dataIndex: 'availableNumber',
+			align:'center'
+		},
+		{
+			title: '已约次数',
+			dataIndex: 'alreadyNumber',
+			align:'center'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	columns.push({
+		title: '操作',
+		dataIndex: 'action',
+		align: 'center',
+		width: 150
+	})
+
+
+
+
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+		loadTimeIdList.value = ''
+		numberFlag.value = false
+		emit('successful')
+
+	}
+	// 默认要校验的
+	const formRules = {
+		//orderNumber: [required('请输入订单编号')],
+		//orderName: [required('请输入订单名称')],
+		//customerId:[required('请选择客户信息')],
+		loadPointId:[required('请选择装卸点位')],
+		loadTimeId: [required('请选择装卸时间')],
+	}
+
+
+	// 删除
+	const deleteConfig = (record) => {
+
+		Modal.confirm({
+			title: '确定删除该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params = [
+					{
+						id: record.id
+					}
+				]
+
+				bizOrderLoadApi
+					.bizOrderLoadDelete(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				formDataParam.orderId = formDataParam.id
+				formDataParam.id = ''
+				bizOrderLoadApi
+					.bizOrderLoadSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>
+
+<style>
+/* 修改禁用状态下的颜色 */
+.ant-radio-button-wrapper-disabled {
+	color: black !important; /* 设置文字颜色 */
+	background-color: #f0f0f0 !important; /* 设置背景颜色 */
+}
+
+/* 修改禁用状态下选中项的颜色 */
+.ant-radio-button-wrapper-checked.ant-radio-button-wrapper-disabled {
+	color: white !important; /* 设置文字颜色 */
+	background-color: blue !important; /* 设置选中项的背景颜色 */
+}
+</style>

+ 39 - 3
snowy-admin-web/src/views/biz/bizorder/form.vue

@@ -13,9 +13,6 @@
 <!--			<a-form-item label="订单名称:" name="orderName">
 				<a-input v-model:value="formData.orderName" placeholder="请输入订单名称" allow-clear disabled/>
 			</a-form-item>-->
-			<a-form-item label="货品名称:" name="goodsName">
-				<a-input v-model:value="formData.goodsName" placeholder="请输入货品名称" allow-clear disabled/>
-			</a-form-item>
 			<a-form-item label="客户信息:" name="customerId">
 				<a-select v-model:value="formData.customerId" placeholder="请选择客户信息"
 						  :options="customerIdList" @change="onChangeCustomer"
@@ -46,9 +43,32 @@
 						  :options="deliveryTimeIdList"
 				> </a-select>
 			</a-form-item>
+			<a-form-item label="供货商:" name="supplierId">
+				<a-select v-model:value="formData.supplierId" placeholder="请选择供货商信息"
+						  :options="supplierIdList"
+				> </a-select>
+			</a-form-item>
+			<a-form-item label="运费单价:" name="freightPrice">
+				<a-input-number v-model:value="formData.freightPrice" style="width:90%"  :precision="2" :min="1" :max="999999"  placeholder="请输入运费单价" allow-clear/><span style="margin-left:10px;">元/吨</span>
+			</a-form-item>
+			<a-form-item label="货品名称:" name="goodsName">
+				<a-input v-model:value="formData.goodsName" placeholder="请输入货品名称" allow-clear disabled/>
+			</a-form-item>
+			<a-form-item label="货品编码:" name="goodsCode">
+				<a-input v-model:value="formData.goodsCode" placeholder="请输入货品编码" allow-clear disabled/>
+			</a-form-item>
 			<a-form-item label="订单重量:" name="orderWeight">
 				<a-input-number v-model:value="formData.orderWeight" style="width:90%"  :precision="2" :min="1" :max="999999"  placeholder="请输入订单重量" allow-clear disabled/><span style="margin-left:10px;">吨</span>
 			</a-form-item>
+			<a-form-item label="单价:" name="price">
+				<a-input v-model:value="formData.price" style="width:90%" placeholder="请输入单价" allow-clear disabled/><span style="margin-left:10px;">元/吨</span>
+			</a-form-item>
+			<a-form-item label="业务员:" name="businessName">
+				<a-input v-model:value="formData.businessName" placeholder="请输入业务员" allow-clear disabled/>
+			</a-form-item>
+			<a-form-item label="送货地址:" name="shipAddress">
+				<a-input v-model:value="formData.shipAddress" placeholder="请输入送货地址" allow-clear disabled/>
+			</a-form-item>
 		</a-form>
 		<template #footer>
 			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
@@ -66,6 +86,7 @@
 	import customerApi from '@/api/biz/customerApi'
 	import goodsConfApi from '@/api/biz/goodsConfApi'
 	import bizSaleOrderApi from "@/api/biz/bizSaleOrderApi";
+	import bizSupplierApi from "@/api/biz/bizSupplierApi";
 	// 抽屉状态
 	const open = ref(false)
 	const emit = defineEmits({ successful: null })
@@ -84,6 +105,7 @@
 	const customerIdList = ref()
 	const saleOrderInfoList = ref()
 	const deliveryTimeIdList = ref()
+	const supplierIdList = ref()
 
 	// 打开抽屉
 	const onOpen = (record) => {
@@ -102,6 +124,16 @@
 			})
 		})
 
+		//查询供货商信息
+		bizSupplierApi.getList().then((res)=>{
+			supplierIdList.value = res.map((item)=>{
+				return{
+					value:item.id,
+					label:item.supplierName
+				}
+			})
+		})
+
 		/*if(formData.value.customerId){
 			customerApi.getOrderByCustomerId({id:formData.value.customerId}).then((res)=>{
 				saleOrderInfoList.value = res.orderList.map((item)=>{
@@ -163,6 +195,8 @@
 			formData.value.orderWeight = res.saleOrderWeight
 			formData.value.orderType = res.saleOrderType
 			formData.value.shipAddress = res.shipAddress
+			formData.value.price = res.salePrice
+			formData.value.businessName  = res.businessName
 			formData.value.deliveryTimeId = ''
 			//根据货品名称和重量查询提货时间段
 			console.log("goodsName:"+formData.value.goodsName)
@@ -198,6 +232,8 @@
 		deliveryTimeId: [required('请选择提货时间')],
 		orderWeight: [required('请输入订单重量')],
 		orderType: [required('请选择订单类型')],
+		supplierId: [required('请选择供货商信息')],
+		freightPrice: [required('请输入运费单价')],
 	}
 	// 验证并提交数据
 	const onSubmit = () => {

+ 10 - 1
snowy-admin-web/src/views/biz/bizorder/index.vue

@@ -116,6 +116,8 @@
 								  ? 'error'
 								  : record.orderStatus === '7'
 								  ? 'red'
+								  : record.orderStatus === '8'
+								  ? 'cyan'
 								  : '#f50'
 						"
 					>
@@ -159,6 +161,10 @@
 									<a style="color:red" size="small" type="link" @click="deleteConfig(record)">删除</a>
 								</a-menu-item>
 
+								<a-menu-item v-if="hasPerm('bizOrderDispatch') && (record.orderStatus=='8' || record.orderStatus=='3' || record.orderStatus=='4') ">
+									<a style="color:blue" size="small" type="link" @click="dispatchRef.onOpen(record)">调度</a>
+								</a-menu-item>
+
 								<a-menu-item v-if="hasPerm('tempCode')">
 									<a style="color:blue" size="small" type="link" @click="showModalTemp(record)">临时二维码</a>
 								</a-menu-item>
@@ -183,7 +189,7 @@
 									<a style="color:deepskyblue" @click="flowRef.onOpen(record)">流水</a>
 								</a-menu-item>
 
-								<a-menu-item v-if="hasPerm('bizOrderConfig') && (record.orderStatus == '3' || record.orderStatus=='4')">
+								<a-menu-item v-if="hasPerm('bizOrderConfig') && (record.orderStatus == '3' || record.orderStatus=='4' || record.orderStatus=='8')">
 									<a style="color:forestgreen" @click="showMore(record)">配置</a>
 								</a-menu-item>
 
@@ -204,6 +210,7 @@
 		</s-table>
 	</a-card>
 	<Form ref="formRef" @successful="tableRef.refresh()" />
+	<Dispatch ref="dispatchRef" @successful="tableRef.refresh()" />
 
 	<Detail ref="detailRef" @successful="tableRef.refresh()" />
 	<Flow ref="flowRef" @successful="tableRef.refresh()" />
@@ -336,6 +343,7 @@
 	import bizOrderConfigApi from "@/api/biz/bizOrderConfigApi";
 	import { required } from '@/utils/formRules'
 	import End from './end.vue'
+	import Dispatch from './dispatch.vue'
 
 	const editAccountFlag = ref(false)
 	const moreFlag = ref(false)
@@ -346,6 +354,7 @@
 	const formRef = ref()
 	const configRef = ref()
 	const flowRef = ref()
+	const dispatchRef = ref()
 	const reviewRef = ref()
 	const endRef = ref()
 	const detailRef = ref()

+ 19 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/entity/BizOrder.java

@@ -141,4 +141,23 @@ public class BizOrder extends CommonEntity{
     /**送货地址*/
     private String shipAddress;
 
+    @TableField(exist = false)
+    private BigDecimal price;
+
+    @TableField(exist = false)
+    private String businessName;
+
+    @TableField(exist = false)
+    private String goodsCode;
+
+    /**供货商id*/
+    private String supplierId;
+
+    /**供应商名称*/
+    @TableField(exist = false)
+    private String supplierName;
+
+    /**运费单价*/
+    private BigDecimal freightPrice;
+
 }

+ 10 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/mapper/mapping/BizOrderMapper.xml

@@ -15,6 +15,7 @@
             bo.good_id,
             bg.`GOODS_NAME` goodsName,
             bg.GOODS_MODEL goodsModel,
+            bg.GOODS_CODE goodsCode,
             bo.order_type,
             bo.order_source,
             bo.order_status,
@@ -30,11 +31,19 @@
             bo.end_reason,
             bo.ship_address,
             bo.create_time,
-            bo.create_user
+            bo.create_user,
+            bo.supplier_id,
+            bo.freight_price,
+            bso.sale_price price,
+            bso.business_name,
+            bs.supplier_name,
+            bo.freight_price
         from biz_order bo
         left join biz_customer bc on bo.customer_id = bc.id
         left join biz_goods bg on bg.id = bo.good_id
         left join biz_goods_conf bgc on bgc.id = bo.delivery_time_id
+        left join biz_sale_order bso on bso.id = bo.sale_order_info
+        left join biz_supplier bs on bs.id = bo.supplier_id
         ${ew.customSqlSegment}
     </select>
 

+ 6 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/param/BizOrderAddParam.java

@@ -80,4 +80,10 @@ public class BizOrderAddParam {
     /**送货地址*/
     private String shipAddress;
 
+    /**供货商id*/
+    private String supplierId;
+
+    /**运费单价*/
+    private BigDecimal freightPrice;
+
 }

+ 6 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/param/BizOrderEditParam.java

@@ -97,4 +97,10 @@ public class BizOrderEditParam {
     /**送货地址*/
     private String shipAddress;
 
+    /**供货商id*/
+    private String supplierId;
+
+    /**运费单价*/
+    private BigDecimal freightPrice;
+
 }

+ 1 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/service/impl/BizOrderServiceImpl.java

@@ -365,7 +365,7 @@ public class BizOrderServiceImpl extends ServiceImpl<BizOrderMapper, BizOrder> i
     @Override
     public void orderConfirm(BizOrderEditParam bizOrderEditParam) {
         BizOrder bizOrder = this.queryEntity(bizOrderEditParam.getId());
-        bizOrder.setOrderStatus("3");
+        bizOrder.setOrderStatus("8");
         this.updateById(bizOrder);
 
         //存取预约次数配置

+ 119 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/controller/BizOrderLoadController.java

@@ -0,0 +1,119 @@
+/*
+ * 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.bizorderload.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+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.bizorderload.entity.BizOrderLoad;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadAddParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadEditParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadIdParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadPageParam;
+import vip.xiaonuo.biz.modular.bizorderload.service.BizOrderLoadService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 订单装卸点位控制器
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ */
+@Tag(name = "订单装卸点位控制器")
+@RestController
+@Validated
+public class BizOrderLoadController {
+
+    @Resource
+    private BizOrderLoadService bizOrderLoadService;
+
+    /**
+     * 获取订单装卸点位分页
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "获取订单装卸点位分页")
+    @SaCheckPermission("/biz/bizorderload/page")
+    @GetMapping("/biz/bizorderload/page")
+    public CommonResult<Page<BizOrderLoad>> page(BizOrderLoadPageParam bizOrderLoadPageParam) {
+        return CommonResult.data(bizOrderLoadService.page(bizOrderLoadPageParam));
+    }
+
+    /**
+     * 添加订单装卸点位
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "添加订单装卸点位")
+    @CommonLog("添加订单装卸点位")
+    @PostMapping("/biz/bizorderload/add")
+    public CommonResult<String> add(@RequestBody @Valid BizOrderLoadAddParam bizOrderLoadAddParam) {
+        bizOrderLoadService.add(bizOrderLoadAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑订单装卸点位
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "编辑订单装卸点位")
+    @CommonLog("编辑订单装卸点位")
+    @PostMapping("/biz/bizorderload/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizOrderLoadEditParam bizOrderLoadEditParam) {
+        bizOrderLoadService.edit(bizOrderLoadEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除订单装卸点位
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "删除订单装卸点位")
+    @CommonLog("删除订单装卸点位")
+    @PostMapping("/biz/bizorderload/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizOrderLoadIdParam> bizOrderLoadIdParamList) {
+        bizOrderLoadService.delete(bizOrderLoadIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取订单装卸点位详情
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "获取订单装卸点位详情")
+    @GetMapping("/biz/bizorderload/detail")
+    public CommonResult<BizOrderLoad> detail(@Valid BizOrderLoadIdParam bizOrderLoadIdParam) {
+        return CommonResult.data(bizOrderLoadService.detail(bizOrderLoadIdParam));
+    }
+}

+ 66 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/entity/BizOrderLoad.java

@@ -0,0 +1,66 @@
+/*
+ * 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.bizorderload.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 订单装卸点位实体
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Getter
+@Setter
+@TableName("biz_order_load")
+public class BizOrderLoad extends CommonEntity {
+
+    /** 主键ID */
+    @TableId
+    @Schema(description = "主键ID")
+    private String id;
+
+    /** 订单ID */
+    @Schema(description = "订单ID")
+    private String orderId;
+
+    /** 装卸点位id */
+    @Schema(description = "装卸点位id")
+    private String loadPointId;
+
+    /** 装卸时间ID */
+    @Schema(description = "装卸时间ID")
+    private String loadTimeId;
+
+    @TableField(exist = false)
+    private String loadPoint;
+
+    @TableField(exist = false)
+    private String beginTime;
+
+    @TableField(exist = false)
+    private String endTime;
+
+    @TableField(exist = false)
+    private Integer availableNumber;
+
+    @TableField(exist = false)
+    private Integer alreadyNumber;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/enums/BizOrderLoadEnum.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.bizorderload.enums;
+
+import lombok.Getter;
+
+/**
+ * 订单装卸点位枚举
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Getter
+public enum BizOrderLoadEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BizOrderLoadEnum(String value) {
+        this.value = value;
+    }
+}

+ 30 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/mapper/BizOrderLoadMapper.java

@@ -0,0 +1,30 @@
+/*
+ * 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.bizorderload.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad;
+
+/**
+ * 订单装卸点位Mapper接口
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+public interface BizOrderLoadMapper extends BaseMapper<BizOrderLoad> {
+
+    Page<BizOrderLoad> getPage(@Param("page") Page<BizOrderLoad> page, @Param("ew") QueryWrapper<BizOrderLoad> ew);
+}

+ 19 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/mapper/mapping/BizOrderLoadMapper.xml

@@ -0,0 +1,19 @@
+<?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.bizorderload.mapper.BizOrderLoadMapper">
+
+    <select id="getPage" resultType="vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad">
+        select
+            bol.id,
+            blp.load_point,
+            blt.begin_time,
+            blt.end_time,
+            blt.available_number,
+            blt.already_number
+        from biz_order_load bol
+         left join biz_order bo on bo.id = bol.order_id
+         left join biz_load_point blp on blp.id = bol.load_point_id
+         left join biz_load_time blt on blt.id = bol.load_time_id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 46 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadAddParam.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.bizorderload.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 fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Getter
+@Setter
+public class BizOrderLoadAddParam {
+
+    /** 订单ID */
+    @Schema(description = "订单ID")
+    private String orderId;
+
+    /** 装卸点位id */
+    @Schema(description = "装卸点位id")
+    private String loadPointId;
+
+    /** 装卸时间ID */
+    @Schema(description = "装卸时间ID")
+    private String loadTimeId;
+
+}

+ 51 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadEditParam.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.bizorderload.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 fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Getter
+@Setter
+public class BizOrderLoadEditParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 订单ID */
+    @Schema(description = "订单ID")
+    private String orderId;
+
+    /** 装卸点位id */
+    @Schema(description = "装卸点位id")
+    private String loadPointId;
+
+    /** 装卸时间ID */
+    @Schema(description = "装卸时间ID")
+    private String loadTimeId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadIdParam.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.bizorderload.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 订单装卸点位Id参数
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Getter
+@Setter
+public class BizOrderLoadIdParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 53 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadPageParam.java

@@ -0,0 +1,53 @@
+/*
+ * 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.bizorderload.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 订单装卸点位查询参数
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Getter
+@Setter
+public class BizOrderLoadPageParam {
+
+    /** 当前页 */
+    @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;
+
+    private String orderId;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/BizOrderLoadService.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.bizorderload.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadAddParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadEditParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadIdParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadPageParam;
+
+import java.util.List;
+
+/**
+ * 订单装卸点位Service接口
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+public interface BizOrderLoadService extends IService<BizOrderLoad> {
+
+    /**
+     * 获取订单装卸点位分页
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    Page<BizOrderLoad> page(BizOrderLoadPageParam bizOrderLoadPageParam);
+
+    /**
+     * 添加订单装卸点位
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    void add(BizOrderLoadAddParam bizOrderLoadAddParam);
+
+    /**
+     * 编辑订单装卸点位
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    void edit(BizOrderLoadEditParam bizOrderLoadEditParam);
+
+    /**
+     * 删除订单装卸点位
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    void delete(List<BizOrderLoadIdParam> bizOrderLoadIdParamList);
+
+    /**
+     * 获取订单装卸点位详情
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    BizOrderLoad detail(BizOrderLoadIdParam bizOrderLoadIdParam);
+
+    /**
+     * 获取订单装卸点位详情
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     **/
+    BizOrderLoad queryEntity(String id);
+}

+ 143 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/impl/BizOrderLoadServiceImpl.java

@@ -0,0 +1,143 @@
+/*
+ * 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.bizorderload.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 jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.biz.modular.bizloadtime.entity.BizLoadTime;
+import vip.xiaonuo.biz.modular.bizloadtime.service.BizLoadTimeService;
+import vip.xiaonuo.biz.modular.bizorder.entity.BizOrder;
+import vip.xiaonuo.biz.modular.bizorder.service.BizOrderService;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad;
+import vip.xiaonuo.biz.modular.bizorderload.mapper.BizOrderLoadMapper;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadAddParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadEditParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadIdParam;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadPageParam;
+import vip.xiaonuo.biz.modular.bizorderload.service.BizOrderLoadService;
+
+import java.util.List;
+
+/**
+ * 订单装卸点位Service接口实现类
+ *
+ * @author fanzherong
+ * @date  2025/05/30 14:05
+ **/
+@Service
+public class BizOrderLoadServiceImpl extends ServiceImpl<BizOrderLoadMapper, BizOrderLoad> implements BizOrderLoadService {
+
+    @Resource
+    private BizOrderService bizOrderService;
+    @Resource
+    private BizLoadTimeService bizLoadTimeService;
+
+    @Override
+    public Page<BizOrderLoad> page(BizOrderLoadPageParam bizOrderLoadPageParam) {
+        QueryWrapper<BizOrderLoad> queryWrapper = new QueryWrapper<BizOrderLoad>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizOrderLoadPageParam.getOrderId())){
+            queryWrapper.eq("bo.id",bizOrderLoadPageParam.getOrderId());
+        }
+        queryWrapper.eq("bol.delete_flag","NOT_DELETE");
+        queryWrapper.orderByDesc("bol.create_time");
+        return this.getBaseMapper().getPage(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizOrderLoadAddParam bizOrderLoadAddParam) {
+        checkParam(bizOrderLoadAddParam);
+        BizOrderLoad bizOrderLoad = BeanUtil.toBean(bizOrderLoadAddParam, BizOrderLoad.class);
+        this.save(bizOrderLoad);
+
+        //修改订单状态
+        BizOrder bizOrder = bizOrderService.queryEntity(bizOrderLoadAddParam.getOrderId());
+        bizOrder.setOrderStatus("3");
+        bizOrderService.updateById(bizOrder);
+    }
+
+    public void checkParam(BizOrderLoadAddParam bizOrderLoadAddParam){
+        QueryWrapper<BizOrderLoad> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BizOrderLoad::getOrderId,bizOrderLoadAddParam.getOrderId()).
+                eq(BizOrderLoad::getLoadPointId,bizOrderLoadAddParam.getLoadPointId()).
+                eq(BizOrderLoad::getLoadTimeId,bizOrderLoadAddParam.getLoadTimeId());
+        long count = this.count(queryWrapper);
+        if(count>0){
+            throw new CommonException("装卸点位和时间已经添加过!");
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizOrderLoadEditParam bizOrderLoadEditParam) {
+        BizOrderLoad bizOrderLoad = this.queryEntity(bizOrderLoadEditParam.getId());
+        BeanUtil.copyProperties(bizOrderLoadEditParam, bizOrderLoad);
+        this.updateById(bizOrderLoad);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizOrderLoadIdParam> bizOrderLoadIdParamList) {
+        // 执行删除
+        //this.removeByIds(CollStreamUtil.toList(bizOrderLoadIdParamList, BizOrderLoadIdParam::getId));
+        String orderId = null;
+        for(BizOrderLoadIdParam bizOrderLoadIdParam:bizOrderLoadIdParamList){
+            BizOrderLoad bizOrderLoad = this.queryEntity(bizOrderLoadIdParam.getId());
+            orderId = bizOrderLoad.getOrderId();
+            BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizOrderLoad.getLoadTimeId());
+            if(ObjectUtil.isNull(bizLoadTime)){
+                if(ObjectUtil.isNotEmpty(bizLoadTime.getAlreadyNumber()) && bizLoadTime.getAlreadyNumber()>0){
+                    throw new CommonException("已经添加过预约,不可删除!");
+                }
+            }
+            this.removeById(bizOrderLoad);
+        }
+        if(ObjectUtil.isNotEmpty(orderId)){
+            //查询订单下是否有装货时间
+            long count = this.count(new QueryWrapper<BizOrderLoad>().lambda().eq(BizOrderLoad::getOrderId, orderId));
+            if(count==0){
+                BizOrder bizOrder = bizOrderService.getById(orderId);
+                if(ObjectUtil.isNotNull(bizOrder)){
+                    bizOrder.setOrderStatus("8");
+                    bizOrderService.updateById(bizOrder);
+                }
+            }
+
+        }
+    }
+
+    @Override
+    public BizOrderLoad detail(BizOrderLoadIdParam bizOrderLoadIdParam) {
+        return this.queryEntity(bizOrderLoadIdParam.getId());
+    }
+
+    @Override
+    public BizOrderLoad queryEntity(String id) {
+        BizOrderLoad bizOrderLoad = this.getById(id);
+        if(ObjectUtil.isEmpty(bizOrderLoad)) {
+            throw new CommonException("订单装卸点位不存在,id值为:{}", id);
+        }
+        return bizOrderLoad;
+    }
+}