Parcourir la source

Merge remote-tracking branch 'origin/master'

shasha il y a 3 semaines
Parent
commit
650a178290
25 fichiers modifiés avec 430 ajouts et 11 suppressions
  1. 4 0
      snowy-admin-web/src/api/biz/bizAppointmentRecordApi.js
  2. 8 0
      snowy-admin-web/src/api/biz/bizOrderLoadApi.js
  3. 31 0
      snowy-admin-web/src/views/biz/bizAppointmentTemporary/index.vue
  4. 4 0
      snowy-admin-web/src/views/biz/bizappointmentrecord/detail.vue
  5. 71 1
      snowy-admin-web/src/views/biz/bizappointmentrecord/form.vue
  6. 6 0
      snowy-admin-web/src/views/biz/bizappointmentrecord/index.vue
  7. 2 2
      snowy-admin-web/src/views/biz/bizorder/detail.vue
  8. 1 1
      snowy-admin-web/src/views/biz/bizorder/dispatch.vue
  9. 1 1
      snowy-admin-web/src/views/biz/bizorder/form.vue
  10. 6 0
      snowy-admin-web/src/views/biz/bizorder/index.vue
  11. 11 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/controller/BizAppointmentRecordController.java
  12. 30 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/entity/BizAppointmentRecord.java
  13. 12 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/mapper/mapping/BizAppointmentRecordMapper.xml
  14. 6 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/param/BizAppointmentRecordAddParam.java
  15. 6 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/param/BizAppointmentRecordEditParam.java
  16. 2 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/BizAppointmentRecordService.java
  17. 132 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java
  18. 1 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadtime/service/impl/BizLoadTimeServiceImpl.java
  19. 8 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/service/impl/BizOrderServiceImpl.java
  20. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/controller/BizOrderLoadController.java
  21. 6 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/mapper/BizOrderLoadMapper.java
  22. 12 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/mapper/mapping/BizOrderLoadMapper.xml
  23. 2 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/param/BizOrderLoadPageParam.java
  24. 10 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/BizOrderLoadService.java
  25. 33 1
      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/bizAppointmentRecordApi.js

@@ -33,6 +33,10 @@ export default {
 	bizAppointmentExit(data){
 		return request('exit',data)
 	},
+	//临时预约授权出场
+	bizAppointmentExitTemp(data){
+		return request('exitTemp',data)
+	},
 	// 获取预约记录详情
 	bizAppointmentRecordDetail(data) {
 		return request('detail', data, 'get')

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

@@ -24,5 +24,13 @@ export default {
 	// 获取订单装卸点位详情
 	bizOrderLoadDetail(data) {
 		return request('detail', data, 'get')
+	},
+	//获取订单装卸点位下拉列表
+	getPointList(data){
+		return request('getPointList',data,'get')
+	},
+	//获取订单装卸事件下拉列表
+	getLoadTimeList(data){
+		return request('getLoadTimeList',data,'get')
 	}
 }

+ 31 - 0
snowy-admin-web/src/views/biz/bizAppointmentTemporary/index.vue

@@ -126,6 +126,9 @@
 									<a-menu-item v-if="hasPerm('bizAppointmentTempDelete') && (record.status == '2' || record.status=='4')">
 										<a style="color:red" type="link" danger size="small" @click="deleteConfig(record)">删除</a>
 									</a-menu-item>
+									<a-menu-item v-if="hasPerm('bizExitTemp') && (record.status == '9')">
+										<a style="color:red" type="link" danger size="small" @click="exitTemp(record)">授权出场</a>
+									</a-menu-item>
 
 
 								</a-menu>
@@ -275,6 +278,34 @@
 
 	})
 
+	//授权出场
+	const exitTemp = (record) => {
+
+		Modal.confirm({
+			title: '确定要授权出场吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params =
+					{
+						id: record.id
+					}
+
+
+				bizAppointmentRecordApi
+					.bizAppointmentExitTemp(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+
 	const selectedRowKeys = ref([])
 	// 列表选择配置
 	const options = {

+ 4 - 0
snowy-admin-web/src/views/biz/bizappointmentrecord/detail.vue

@@ -14,6 +14,10 @@
 				<a-descriptions-item label="货品编码" :span="2">{{ formData.goodsCode }}</a-descriptions-item>
 				<a-descriptions-item label="司机姓名" :span="2">{{ formData.driverName }}</a-descriptions-item>
 				<a-descriptions-item label="司机电话" :span="2">{{ formData.driverMobile }}</a-descriptions-item>
+				<a-descriptions-item label="供应商" :span="2">{{ formData.supplierName }}</a-descriptions-item>
+				<a-descriptions-item label="装卸点位" :span="2">{{ formData.loadPoint }}</a-descriptions-item>
+				<a-descriptions-item label="装卸开始时间" :span="2">{{ formData.loadBeginTime }}</a-descriptions-item>
+				<a-descriptions-item label="装卸结束时间" :span="2">{{ formData.loadEndTime }}</a-descriptions-item>
 				<a-descriptions-item label="创建人" :span="2">{{ formData.createUserName }}</a-descriptions-item>
 				<a-descriptions-item label="创建时间" :span="2">{{ formData.createTime }}</a-descriptions-item>
 

+ 71 - 1
snowy-admin-web/src/views/biz/bizappointmentrecord/form.vue

@@ -9,7 +9,17 @@
 		<a-form ref="formRef" :model="formData" :rules="formRules" :wrapper-col="wrapperCol" :label-col="labelCol">
 			<a-form-item label="订单信息:" name="orderId">
 				<a-select v-model:value="formData.orderId" placeholder="请选择订单信息"
-						  :options="orderIdList"
+						  :options="orderIdList" @change="onChangeOrder"
+				> </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"
 				> </a-select>
 			</a-form-item>
 			<a-form-item label="车牌号:" name="licenseNumber">
@@ -46,6 +56,7 @@
 	import bizAppointmentTimeApi from "@/api/biz/bizAppointmentTimeApi";
 	import bizOrderApi from '@/api/biz/bizOrderApi'
 	import bizExcessConfigApi from "@/api/biz/bizExcessConfigApi";
+	import bizOrderLoadApi from "@/api/biz/bizOrderLoadApi";
 
 	// 抽屉状态
 	const open = ref(false)
@@ -57,6 +68,8 @@
 	const orderIdList = ref()
 	const timeIdList = ref()
 	const overIdList = ref()
+	const loadPointIdList = ref()
+	const loadTimeIdList = ref()
 
 	//设置表单样式
 	const labelCol = ref({ span: 5})
@@ -98,7 +111,62 @@
 				}
 			})
 		})
+
+		//查询装卸点位信息
+		if(formData.value.orderId){
+			bizOrderLoadApi.getPointList({orderId:formData.value.orderId}).then((res)=>{
+				loadPointIdList.value=res.map((item)=>{
+					return{
+						value:item.loadPointId,
+						label:item.loadPoint
+					}
+				})
+			})
+		}
+
+		//查询装卸时间信息
+		if(formData.value.orderId && formData.value.loadPointId){
+			bizOrderLoadApi.getLoadTimeList({orderId:formData.value.orderId,loadPointId:formData.value.loadPointId}).then((res)=>{
+				loadTimeIdList.value = res.map((item)=>{
+					return{
+						value:item.loadTimeId,
+						label:item.beginTime+'~'+item.endTime
+					}
+				})
+			})
+		}
+	}
+
+
+	//订单点击事件
+	const onChangeOrder = (value) =>{
+		formData.value.loadTimeId = ''
+		formData.value.loadPointId = ''
+		loadTimeIdList.value = ''
+		console.log("value:"+JSON.stringify(value))
+		bizOrderLoadApi.getPointList({orderId:value}).then((res)=>{
+			loadPointIdList.value=res.map((item)=>{
+				return{
+					value:item.loadPointId,
+					label:item.loadPoint
+				}
+			})
+		})
+	}
+
+	//装卸点位点击事件
+	const onChangePoint = (value) =>{
+		formData.value.loadTimeId = ''
+		bizOrderLoadApi.getLoadTimeList({orderId:formData.value.orderId,loadPointId:value}).then((res)=>{
+			loadTimeIdList.value = res.map((item)=>{
+				return{
+					value:item.loadTimeId,
+					label:item.beginTime+'~'+item.endTime
+				}
+			})
+		})
 	}
+
 	// 关闭抽屉
 	const onClose = () => {
 		formRef.value.resetFields()
@@ -113,6 +181,8 @@
 		overId: [required('请选择车辆轴数')],
 		driverName:[required('请输入司机姓名')],
 		driverMobile:[required('请输入司机电话')],
+		loadPointId:[required('请选择装卸点位')],
+		loadTimeId:[required('请选择装卸时间')],
 	}
 	// 验证并提交数据
 	const onSubmit = () => {

+ 6 - 0
snowy-admin-web/src/views/biz/bizappointmentrecord/index.vue

@@ -320,6 +320,12 @@
 			width: 110,
 			align:'center'
 		},
+		{
+			title: '供应商',
+			dataIndex: 'supplierName',
+			width: 110,
+			align:'center'
+		},
 		{
 			title: '状态',
 			dataIndex: 'status',

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

@@ -62,8 +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.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>

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

@@ -154,7 +154,7 @@
 		loadTimeIdList.value = ''
 		formData.value.availableNumber = ''
 		formData.value.alreadyNumber = ''
-		bizLoadTimeApi.search({loadPointId:formData.value.loadPointId,goodsConfId:formData.value.deliveryTimeId}).then((res)=>{
+		bizLoadTimeApi.search({pointId:formData.value.loadPointId,goodsConfId:formData.value.deliveryTimeId}).then((res)=>{
 			loadTimeIdList.value = res.map((item)=>{
 				return{
 					value:item.id,

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

@@ -49,7 +49,7 @@
 				> </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-input-number v-model:value="formData.freightPrice" style="width:90%"  :precision="2" :min="0.01" :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/>

+ 6 - 0
snowy-admin-web/src/views/biz/bizorder/index.vue

@@ -455,6 +455,12 @@
 			align:'center',
 			width: 100
 		},
+		{
+			title: '供应商',
+			dataIndex: 'supplierName',
+			align:'center',
+			width: 100
+		},
 	]
 	// 操作栏通过权限判断是否显示
 	columns.push({

+ 11 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/controller/BizAppointmentRecordController.java

@@ -274,4 +274,15 @@ public class BizAppointmentRecordController {
         bizAppointmentRecordService.exit(bizAppointmentRecordIdParam);
         return CommonResult.ok();
     }
+
+    /**
+     * 临时预约授权出场
+     */
+    @Operation(summary = "临时预约授权出场")
+    @CommonLog("授权出场")
+    @PostMapping("/biz/bizappointmentrecord/exitTemp")
+    public CommonResult<String> exitTemp(@RequestBody BizAppointmentRecordIdParam bizAppointmentRecordIdParam){
+        bizAppointmentRecordService.exitTemp(bizAppointmentRecordIdParam);
+        return CommonResult.ok();
+    }
 }

+ 30 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/entity/BizAppointmentRecord.java

@@ -165,4 +165,34 @@ public class BizAppointmentRecord extends CommonEntity {
     /** 发货单位 */
     @TableField(exist = false)
     private String shippingCompany;
+
+    /**装卸点位id**/
+    private String loadPointId;
+
+    /**装卸时间ID**/
+    private String loadTimeId;
+
+    /**装卸点位*/
+    @TableField(exist = false)
+    private String loadPoint;
+
+    /**装卸开始时间*/
+    @TableField(exist = false)
+    private String loadBeginTime;
+
+    /**装卸结束时间*/
+    @TableField(exist = false)
+    private String loadEndTime;
+
+    /**可约次数*/
+    @TableField(exist = false)
+    private Integer availableNumber;
+
+    /**已约次数*/
+    @TableField(exist = false)
+    private Integer alreadyNumber;
+
+    /**供应商*/
+    @TableField(exist = false)
+    private String supplierName;
 }

+ 12 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/mapper/mapping/BizAppointmentRecordMapper.xml

@@ -34,14 +34,25 @@
             bar.appointment_type,
             bar.appointment_classify,
             bar.create_time,
-            bar.create_user
+            bar.create_user,
+            bar.load_point_id,
+            bar.load_time_id,
+            blp.load_point,
+            blt.begin_time loadBeginTime,
+            blt.end_time loadEndTime,
+            blt.available_number,
+            blt.already_number,
+            bs.supplier_name
         from biz_appointment_record bar
          left join biz_order bo on bar.order_id = bo.id
+         left join biz_supplier bs on bs.id = bo.supplier_id
          left join biz_goods bg on bg.id = bo.good_id
          left join biz_goods_conf bgc on bgc.id = bar.time_id
          left join biz_customer bc on bc.id = bo.customer_id
          left join biz_excess_config bec on bec.id = bar.over_id
          left join biz_record br on bar.id = br.appointment_id
+         left join biz_load_point blp on blp.id = bar.load_point_id
+         left join biz_load_time blt on blt.id = bar.load_time_id
         ${ew.customSqlSegment}
     </select>
     <select id="getRecord"

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

@@ -65,4 +65,10 @@ public class BizAppointmentRecordAddParam {
     /**预约分类(1、充电预约  2、管桩预约   3、其他预约)*/
     private String appointmentClassify;
 
+    /**装卸点位id**/
+    private String loadPointId;
+
+    /**装卸时间ID**/
+    private String loadTimeId;
+
 }

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

@@ -74,4 +74,10 @@ public class BizAppointmentRecordEditParam {
     /**预约分类(1、充电预约  2、管桩预约   3、其他预约)*/
     private String appointmentClassify;
 
+    /**装卸点位id**/
+    private String loadPointId;
+
+    /**装卸时间ID**/
+    private String loadTimeId;
+
 }

+ 2 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/BizAppointmentRecordService.java

@@ -123,4 +123,6 @@ public interface BizAppointmentRecordService extends IService<BizAppointmentReco
     void cancel(BizAppointmentRecordIdParam bizAppointmentRecordIdParam);
 
     void exit(BizAppointmentRecordIdParam bizAppointmentRecordIdParam);
+
+    void exitTemp(BizAppointmentRecordIdParam bizAppointmentRecordIdParam);
 }

+ 132 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java

@@ -44,11 +44,15 @@ import vip.xiaonuo.biz.modular.bizconfig.entity.BizConfig;
 import vip.xiaonuo.biz.modular.bizconfig.service.BizConfigService;
 import vip.xiaonuo.biz.modular.bizexcessconfig.entity.BizExcessConfig;
 import vip.xiaonuo.biz.modular.bizexcessconfig.service.BizExcessConfigService;
+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.param.BizOrderExportResult;
 import vip.xiaonuo.biz.modular.bizorder.service.BizOrderService;
 import vip.xiaonuo.biz.modular.bizorderconfig.entity.BizOrderConfig;
 import vip.xiaonuo.biz.modular.bizorderconfig.service.BizOrderConfigService;
+import vip.xiaonuo.biz.modular.bizsupplier.entity.BizSupplierTransport;
+import vip.xiaonuo.biz.modular.bizsupplier.service.BizSupplierTransportService;
 import vip.xiaonuo.biz.modular.customer.entity.BizCustomer;
 import vip.xiaonuo.biz.modular.customer.service.BizCustomerService;
 import vip.xiaonuo.biz.modular.goods.entity.BizGoods;
@@ -123,6 +127,12 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
     @Resource
     private MqttSubscribeClient mqttSubscribeClient;
 
+    @Resource
+    private BizSupplierTransportService bizSupplierTransportService;
+
+    @Resource
+    private BizLoadTimeService bizLoadTimeService;
+
     @Override
     public Page<BizAppointmentRecord> page(BizAppointmentRecordPageParam bizAppointmentRecordPageParam) {
         QueryWrapper<BizAppointmentRecord> queryWrapper = getQueryWrapper(bizAppointmentRecordPageParam);
@@ -210,6 +220,14 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             bizAppointmentTime.setApplyNumberAlready(bizAppointmentTime.getApplyNumberAlready()+1);
             bizOrderConfigService.updateById(bizAppointmentTime);
         }
+        //更新装卸时间段的已约次数
+        if(ObjectUtil.isNotEmpty(bizAppointmentRecordAddParam.getLoadTimeId())){
+            BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizAppointmentRecordAddParam.getLoadTimeId());
+            if(ObjectUtil.isNotNull(bizLoadTime)){
+                bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber()+1);
+                bizLoadTimeService.updateById(bizLoadTime);
+            }
+        }
 
         /*if(StringUtils.equals(bizAppointmentRecord.getStatus(),"3")){
             sendAccount(bizAppointmentRecord,null);
@@ -334,6 +352,15 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
                         throw new CommonException("提货时间段已过,不可预约!");
                     }
                 }
+
+                //查询车辆是否在供应商名下
+                BizSupplierTransport transport = bizSupplierTransportService.getOne(new QueryWrapper<BizSupplierTransport>().lambda().
+                        eq(BizSupplierTransport::getSupplierId, bizOrder.getSupplierId()).
+                        eq(BizSupplierTransport::getTransportNo, bizAppointmentRecordAddParam.getLicenseNumber()).
+                        last("limit 1"));
+                if(ObjectUtil.isNull(transport)){
+                    throw new CommonException("该车辆没有绑定在供应商下,不可预约!");
+                }
             }
         }
         if(ObjectUtil.isNotEmpty(bizAppointmentRecordAddParam.getOrderId())){
@@ -346,13 +373,50 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             if(ObjectUtil.isNotNull(bizOrderConfig)){
                 //校验预约时间段是否预约满
                 //查询预约时间段内的预约记录,10:已出场   11:已签收   12:自动审核  13:销售已审核   14:已取消这些状态都占用预约名额
-                long count = this.count(new QueryWrapper<BizAppointmentRecord>().lambda().
+                /*long count = this.count(new QueryWrapper<BizAppointmentRecord>().lambda().
                         eq(BizAppointmentRecord::getTimeId, bizAppointmentRecordAddParam.getTimeId()).
                         notIn(BizAppointmentRecord::getStatus, "10", "11", "12", "13", "14","15"));
                 if(count>=bizOrderConfig.getApplyNumber()){
                     throw new CommonException("该订单已经预约满!");
+                }*/
+                if(bizOrderConfig.getApplyNumber()-bizOrderConfig.getApplyNumberAlready() <=0){
+                    throw new CommonException("该订单已经预约满!");
+                }
+            }
+        }
+
+        getTimeCount(bizAppointmentRecordAddParam);
+
+    }
+
+    public void getTimeCount(BizAppointmentRecordAddParam bizAppointmentRecordAddParam){
+        lock.lock();
+        try{
+            //判断装卸预约次数是否满足
+            if(ObjectUtil.isNotEmpty(bizAppointmentRecordAddParam.getLoadTimeId())){
+                BizLoadTime bizLoadTime = bizLoadTimeService.queryEntity(bizAppointmentRecordAddParam.getLoadTimeId());
+                if(bizLoadTime.getAvailableNumber()-bizLoadTime.getAlreadyNumber() <= 0){
+                    throw new CommonException("当前装卸时段预约已满,不可预约!");
                 }
             }
+        }finally {
+            lock.unlock(); // 释放锁
+        }
+
+    }
+
+    public void getTimeCount(BizAppointmentRecordEditParam bizAppointmentRecordEditParam){
+        lock.lock();
+        try{
+            //判断装卸预约次数是否满足
+            if(ObjectUtil.isNotEmpty(bizAppointmentRecordEditParam.getLoadTimeId())){
+                BizLoadTime bizLoadTime = bizLoadTimeService.queryEntity(bizAppointmentRecordEditParam.getLoadTimeId());
+                if(bizLoadTime.getAvailableNumber()-bizLoadTime.getAlreadyNumber() <= 0){
+                    throw new CommonException("当前装卸时段预约已满,不可预约!");
+                }
+            }
+        }finally {
+            lock.unlock(); // 释放锁
         }
 
     }
@@ -394,6 +458,15 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
                         throw new CommonException("提货时间段已过,不可预约!");
                     }
                 }
+
+                //查询车辆是否在供应商名下
+                BizSupplierTransport transport = bizSupplierTransportService.getOne(new QueryWrapper<BizSupplierTransport>().lambda().
+                        eq(BizSupplierTransport::getSupplierId, bizOrder.getSupplierId()).
+                        eq(BizSupplierTransport::getTransportNo, bizAppointmentRecordEditParam.getLicenseNumber()).
+                        last("limit 1"));
+                if(ObjectUtil.isNull(transport)){
+                    throw new CommonException("该车辆没有绑定在供应商下,不可预约!");
+                }
             }
         }
         if(ObjectUtil.isNotEmpty(bizAppointmentRecordEditParam.getOrderId())){
@@ -406,15 +479,22 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             if(ObjectUtil.isNotNull(bizOrderConfig)){
                 //校验预约时间段是否预约满
                 //查询预约时间段内的预约记录,10:已出场   11:已签收   12:自动审核  13:销售已审核   14:已取消这些状态都占用预约名额
-                long count = this.count(new QueryWrapper<BizAppointmentRecord>().lambda().
+                /*long count = this.count(new QueryWrapper<BizAppointmentRecord>().lambda().
                         eq(BizAppointmentRecord::getTimeId, bizAppointmentRecordEditParam.getTimeId()).
                         notIn(BizAppointmentRecord::getStatus, "10", "11", "12", "13", "14","15"));
                 if(count>=bizOrderConfig.getApplyNumber()+1){
                     throw new CommonException("该订单已经预约满!");
+                }*/
+                if(bizOrderConfig.getApplyNumber()-bizOrderConfig.getApplyNumberAlready() <=0){
+                    throw new CommonException("该订单已经预约满!");
                 }
             }
         }
 
+        if(!StringUtils.equals(bizAppointmentRecord.getLoadTimeId(),bizAppointmentRecordEditParam.getLoadTimeId())){
+            getTimeCount(bizAppointmentRecordEditParam);
+        }
+
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -446,6 +526,24 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             }
 
         }
+        if(!StringUtils.equals(bizAppointmentRecord.getLoadTimeId(),bizAppointmentRecordEditParam.getLoadTimeId())){
+            //调整了装卸时段,释放之前的已约次数,更新新的时段已约次数
+            if(ObjectUtil.isNotEmpty(bizAppointmentRecordEditParam.getLoadTimeId())){
+                BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizAppointmentRecordEditParam.getLoadTimeId());
+                if(ObjectUtil.isNotNull(bizLoadTime)){
+                    bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber()+1);
+                    bizLoadTimeService.updateById(bizLoadTime);
+                }
+            }
+
+            if(ObjectUtil.isNotEmpty(bizAppointmentRecord.getLoadTimeId())){
+                BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizAppointmentRecord.getLoadTimeId());
+                if(ObjectUtil.isNotNull(bizLoadTime)){
+                    bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber()-1);
+                    bizLoadTimeService.updateById(bizLoadTime);
+                }
+            }
+        }
         if(!StringUtils.equals(bizAppointmentRecord.getOrderId(),bizAppointmentRecordEditParam.getOrderId())){
             bizAppointmentRecordEditParam.setTimeId(bizOrderService.queryEntity(bizAppointmentRecordEditParam.getOrderId()).getDeliveryTimeId());
         }
@@ -486,6 +584,14 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
                 bizAppointmentTime.setApplyNumberAlready(bizAppointmentTime.getApplyNumberAlready()-1);
                 bizOrderConfigService.updateById(bizAppointmentTime);
             }
+
+            if(ObjectUtil.isNotEmpty(bizAppointmentRecord.getLoadTimeId())){
+                BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizAppointmentRecord.getLoadTimeId());
+                if(ObjectUtil.isNotNull(bizLoadTime)){
+                    bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber()-1);
+                    bizLoadTimeService.updateById(bizLoadTime);
+                }
+            }
         }
         // 执行删除
         this.removeByIds(CollStreamUtil.toList(bizAppointmentRecordIdParamList, BizAppointmentRecordIdParam::getId));
@@ -857,6 +963,22 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
         //取消
         bizAppointmentRecord.setStatus("14");
         this.updateById(bizAppointmentRecord);
+
+        //释放物流订单预约数
+        BizOrderConfig bizAppointmentTime = bizOrderConfigService.getOne(new QueryWrapper<BizOrderConfig>().lambda().
+                eq(BizOrderConfig::getOrderId, bizAppointmentRecord.getOrderId()).
+                last("limit 1"));
+        if(ObjectUtil.isNotNull(bizAppointmentTime)){
+            bizAppointmentTime.setApplyNumberAlready(bizAppointmentTime.getApplyNumberAlready()-1);
+            bizOrderConfigService.updateById(bizAppointmentTime);
+        }
+
+        //释放装卸时间已约次数
+        BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizAppointmentRecord.getLoadTimeId());
+        if(ObjectUtil.isNotNull(bizLoadTime)){
+            bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber()-1);
+            bizLoadTimeService.updateById(bizLoadTime);
+        }
     }
 
     @Transactional
@@ -881,4 +1003,12 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             bizRecordService.removeById(bizRecord.getId());
         }
     }
+
+    @Override
+    public void exitTemp(BizAppointmentRecordIdParam bizAppointmentRecordIdParam) {
+        //修改过磅记录已出场
+        BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordIdParam.getId());
+        bizAppointmentRecord.setStatus("10");
+        this.updateById(bizAppointmentRecord);
+    }
 }

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

@@ -185,7 +185,7 @@ public class BizLoadTimeServiceImpl extends ServiceImpl<BizLoadTimeMapper, BizLo
     public BizLoadTime queryEntity(String id) {
         BizLoadTime bizLoadTime = this.getById(id);
         if(ObjectUtil.isEmpty(bizLoadTime)) {
-            throw new CommonException("装时间配置不存在,id值为:{}", id);
+            throw new CommonException("装时间配置不存在,id值为:{}", id);
         }
         return bizLoadTime;
     }

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

@@ -142,9 +142,16 @@ public class BizOrderServiceImpl extends ServiceImpl<BizOrderMapper, BizOrder> i
         if(ObjectUtil.isNotEmpty(bizOrderPageParam.getOrderSource())){
             queryWrapper.eq("bo.order_source",bizOrderPageParam.getOrderSource());
         }
+        //关键字
+        if(ObjectUtil.isNotEmpty(bizOrderPageParam.getSearchKey())){
+            queryWrapper.and(wrapper->wrapper.like("bo.order_number",bizOrderPageParam.getSearchKey()).or().
+                    like("bc.name",bizOrderPageParam.getSearchKey()).or().
+                    like("bg.`GOODS_NAME`",bizOrderPageParam.getSearchKey()));
+        }
         //默认当日
         if(ObjectUtil.isEmpty(bizOrderPageParam.getOrderNumber()) && ObjectUtil.isEmpty(bizOrderPageParam.getCustomerName())
-            && ObjectUtil.isEmpty(bizOrderPageParam.getGoodsName()) && ObjectUtil.isEmpty(bizOrderPageParam.getOrderStatus())){
+            && ObjectUtil.isEmpty(bizOrderPageParam.getGoodsName()) && ObjectUtil.isEmpty(bizOrderPageParam.getOrderStatus())
+                && ObjectUtil.isEmpty(bizOrderPageParam.getSearchKey())){
             String format = DateUtil.format(DateUtil.date(), "yyyy-MM-dd");
             queryWrapper.between("bo.create_time",format+" 00:00:00",format+" 23:59:59");
         }

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

@@ -116,4 +116,29 @@ public class BizOrderLoadController {
     public CommonResult<BizOrderLoad> detail(@Valid BizOrderLoadIdParam bizOrderLoadIdParam) {
         return CommonResult.data(bizOrderLoadService.detail(bizOrderLoadIdParam));
     }
+
+
+    /**
+     * 获取订单装卸时间列表
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "获取订单装卸时间列表")
+    @GetMapping("/biz/bizorderload/getLoadTimeList")
+    public CommonResult<List<BizOrderLoad>> getLoadTimeList(BizOrderLoadPageParam bizOrderLoadPageParam) {
+        return CommonResult.data(bizOrderLoadService.getLoadTimeList(bizOrderLoadPageParam));
+    }
+
+    /**
+     * 获取订单装卸点位列表
+     *
+     * @author fanzherong
+     * @date  2025/05/30 14:05
+     */
+    @Operation(summary = "获取订单装卸点位列表")
+    @GetMapping("/biz/bizorderload/getPointList")
+    public CommonResult<List<BizOrderLoad>> getPointList(BizOrderLoadPageParam bizOrderLoadPageParam) {
+        return CommonResult.data(bizOrderLoadService.getPointList(bizOrderLoadPageParam));
+    }
 }

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

@@ -18,6 +18,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad;
 
+import java.util.List;
+
 /**
  * 订单装卸点位Mapper接口
  *
@@ -27,4 +29,8 @@ import vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad;
 public interface BizOrderLoadMapper extends BaseMapper<BizOrderLoad> {
 
     Page<BizOrderLoad> getPage(@Param("page") Page<BizOrderLoad> page, @Param("ew") QueryWrapper<BizOrderLoad> ew);
+
+    List<BizOrderLoad> getPage(@Param("ew") QueryWrapper<BizOrderLoad> ew);
+
+    List<BizOrderLoad> getPointList(@Param("ew") QueryWrapper<BizOrderLoad> ew);
 }

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

@@ -5,6 +5,9 @@
     <select id="getPage" resultType="vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad">
         select
             bol.id,
+            bol.order_id,
+            bol.load_point_id,
+            bol.load_time_id,
             blp.load_point,
             blt.begin_time,
             blt.end_time,
@@ -16,4 +19,13 @@
          left join biz_load_time blt on blt.id = bol.load_time_id
         ${ew.customSqlSegment}
     </select>
+
+    <select id="getPointList" resultType="vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad">
+        select
+            bol.load_point_id,
+            blp.load_point
+        from biz_order_load bol
+        left join biz_load_point blp on blp.id = bol.load_point_id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>

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

@@ -50,4 +50,6 @@ public class BizOrderLoadPageParam {
 
     private String orderId;
 
+    private String loadPointId;
+
 }

+ 10 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/BizOrderLoadService.java

@@ -77,4 +77,14 @@ public interface BizOrderLoadService extends IService<BizOrderLoad> {
      * @date  2025/05/30 14:05
      **/
     BizOrderLoad queryEntity(String id);
+
+    /**
+     * 获取订单装卸时间列表
+     */
+    List<BizOrderLoad> getLoadTimeList(BizOrderLoadPageParam bizOrderLoadPageParam);
+
+    /**
+     * 获取订单装卸点位列表
+     */
+    List<BizOrderLoad> getPointList(BizOrderLoadPageParam bizOrderLoadPageParam);
 }

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

@@ -14,6 +14,7 @@ package vip.xiaonuo.biz.modular.bizorderload.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -106,7 +107,7 @@ public class BizOrderLoadServiceImpl extends ServiceImpl<BizOrderLoadMapper, Biz
             BizOrderLoad bizOrderLoad = this.queryEntity(bizOrderLoadIdParam.getId());
             orderId = bizOrderLoad.getOrderId();
             BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizOrderLoad.getLoadTimeId());
-            if(ObjectUtil.isNull(bizLoadTime)){
+            if(ObjectUtil.isNotNull(bizLoadTime)){
                 if(ObjectUtil.isNotEmpty(bizLoadTime.getAlreadyNumber()) && bizLoadTime.getAlreadyNumber()>0){
                     throw new CommonException("已经添加过预约,不可删除!");
                 }
@@ -140,4 +141,35 @@ public class BizOrderLoadServiceImpl extends ServiceImpl<BizOrderLoadMapper, Biz
         }
         return bizOrderLoad;
     }
+
+    @Override
+    public List<BizOrderLoad> getLoadTimeList(BizOrderLoadPageParam bizOrderLoadPageParam) {
+        QueryWrapper<BizOrderLoad> queryWrapper = new QueryWrapper<BizOrderLoad>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizOrderLoadPageParam.getOrderId())){
+            queryWrapper.eq("bo.id",bizOrderLoadPageParam.getOrderId());
+        }
+        if(ObjectUtil.isNotEmpty(bizOrderLoadPageParam.getLoadPointId())){
+            queryWrapper.eq("bol.load_point_id",bizOrderLoadPageParam.getLoadPointId());
+        }
+        String date = DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss");
+        queryWrapper.and(wrapper-> wrapper.le("blt.begin_time",date).gt("blt.end_time",date).or().
+                ge("blt.begin_time",date));
+        queryWrapper.eq("bol.delete_flag","NOT_DELETE");
+        queryWrapper.orderByDesc("bol.create_time");
+        List<BizOrderLoad> loadList = this.getBaseMapper().getPage(queryWrapper);
+        return loadList;
+    }
+
+    @Override
+    public List<BizOrderLoad> getPointList(BizOrderLoadPageParam bizOrderLoadPageParam) {
+        QueryWrapper<BizOrderLoad> queryWrapper = new QueryWrapper<BizOrderLoad>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizOrderLoadPageParam.getOrderId())){
+            queryWrapper.eq("bol.order_id",bizOrderLoadPageParam.getOrderId());
+        }
+        queryWrapper.eq("bol.delete_flag","NOT_DELETE");
+        queryWrapper.orderByDesc("bol.create_time");
+        queryWrapper.groupBy("bol.load_point_id");
+        List<BizOrderLoad> pointList = this.getBaseMapper().getPointList(queryWrapper);
+        return pointList;
+    }
 }