fanzherong_v před 1 dnem
rodič
revize
d61a39ad0b
27 změnil soubory, kde provedl 383 přidání a 33 odebrání
  1. 4 0
      snowy-admin-web/src/api/biz/bizLoadArriveApi.js
  2. 8 0
      snowy-admin-web/src/api/biz/bizLoadDispatchApi.js
  3. 31 6
      snowy-admin-web/src/views/biz/bizloadappoint/dispatchload.vue
  4. 3 2
      snowy-admin-web/src/views/biz/bizloadappoint/replace.vue
  5. 30 11
      snowy-admin-web/src/views/biz/bizloadappoint/replaceload.vue
  6. 37 0
      snowy-admin-web/src/views/biz/bizloadarrive/index.vue
  7. 3 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadappoint/mapper/mapping/BizLoadAppointMapper.xml
  8. 4 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadappoint/service/impl/BizLoadAppointServiceImpl.java
  9. 14 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/controller/BizLoadArriveController.java
  10. 8 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/entity/BizLoadArrive.java
  11. 3 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/mapper/mapping/BizLoadArriveMapper.xml
  12. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/service/BizLoadArriveService.java
  13. 12 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/service/impl/BizLoadArriveServiceImpl.java
  14. 28 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/controller/BizLoadDispatchController.java
  15. 7 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/entity/BizLoadDispatch.java
  16. 4 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/mapper/mapping/BizLoadDispatchMapper.xml
  17. 3 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/param/BizLoadDispatchAddParam.java
  18. 3 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/param/BizLoadDispatchEditParam.java
  19. 3 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/param/BizLoadDispatchPageParam.java
  20. 86 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/service/impl/BizLoadDispatchServiceImpl.java
  21. 2 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadpoint/param/BizLoadPointPageParam.java
  22. 2 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadpoint/service/impl/BizLoadPointServiceImpl.java
  23. 11 7
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorderload/service/impl/BizOrderLoadServiceImpl.java
  24. 12 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/controller/BizUserController.java
  25. 4 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/mapper/BizUserMapper.java
  26. 2 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/BizUserService.java
  27. 54 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/impl/BizUserServiceImpl.java

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

@@ -35,4 +35,8 @@ export default {
 			responseType: 'blob'
 		})
 	},
+	//船主确认
+	arriveConfirm(data){
+		return request('arriveConfirm',data)
+	}
 }

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

@@ -48,5 +48,13 @@ export default {
 	//获取装卸时间列表
 	getListTime(data){
 		return request('getListTime',data,'get')
+	},
+	//起卸分配替换
+	replaceLoad(data){
+		return request('replaceLoad',data)
+	},
+	//装卸分配替换
+	replaceDispatch(data){
+		return request('replaceDispatch',data)
 	}
 }

+ 31 - 6
snowy-admin-web/src/views/biz/bizloadappoint/dispatchload.vue

@@ -20,12 +20,15 @@
 						  :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 label="执行人员:" name="userId">
+				<xn-user-selector
+					:org-tree-api="selectorApiFunction.orgTreeApi"
+					:user-page-api="selectorApiFunction.userPageApi"
+					:radio-model="true"
+					placeholder="请选择执行人员"
+					v-model:value="formData.userId"
+				/>
 			</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
@@ -70,6 +73,7 @@
 	import {createVNode} from 'vue';
 	import Replace from './replaceload.vue'
 	import bizLoadDispatchApi from "@/api/biz/bizLoadDispatchApi";
+	import userApi from '@/api/biz/bizUserApi'
 
 
 	// 抽屉状态
@@ -133,6 +137,21 @@
 
 	}
 
+	// 传递设计器需要的API
+	const selectorApiFunction = {
+		orgTreeApi: (param) => {
+			return userApi.userOrgTreeSelector(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		userPageApi: (param) => {
+			param.roleName = '起卸员'
+			return userApi.userSelectorByRole(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		}
+	}
+
 	//卸货点位点击事件
 	const onChangePoint =(value)=>{
 		formData.value.loadTimeId = ''
@@ -165,10 +184,15 @@
 
 	const columns = [
 		{
-			title: '卸点位',
+			title: '卸点位',
 			dataIndex: 'loadPoint',
 			align:'center'
 		},
+		{
+			title: '执行人员',
+			dataIndex: 'userName',
+			align:'center'
+		},
 		{
 			title: '开始时间',
 			dataIndex: 'beginTime',
@@ -218,6 +242,7 @@
 		//customerId:[required('请选择客户信息')],
 		loadPointId:[required('请选择装卸点位')],
 		loadTimeId: [required('请选择装卸时间')],
+		userId: [required('请选择执行人员')],
 	}
 
 

+ 3 - 2
snowy-admin-web/src/views/biz/bizloadappoint/replace.vue

@@ -50,6 +50,7 @@
 	import {ExclamationCircleOutlined} from '@ant-design/icons-vue';
 	import {Modal} from 'ant-design-vue';
 	import {createVNode} from 'vue';
+	import bizLoadDispatchApi from "@/api/biz/bizLoadDispatchApi";
 
 	// 抽屉状态
 	const open = ref(false)
@@ -199,8 +200,8 @@
 			.then(() => {
 				submitLoading.value = true
 				const formDataParam = cloneDeep(formData.value)
-				bizOrderLoadApi
-					.bizOrderReplace(formDataParam)
+				bizLoadDispatchApi
+					.replaceDispatch(formDataParam)
 					.then(() => {
 						onClose()
 					})

+ 30 - 11
snowy-admin-web/src/views/biz/bizloadappoint/replaceload.vue

@@ -1,27 +1,30 @@
 <template>
 	<xn-form-container
-		:title="formData.id ? '装卸点更换' : '装卸点更换'"
+		: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="loadPointId">
+			<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-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 label="执行人员:" name="userId">
+				<xn-user-selector
+					:org-tree-api="selectorApiFunction.orgTreeApi"
+					:user-page-api="selectorApiFunction.userPageApi"
+					:radio-model="true"
+					placeholder="请选择执行人员"
+					v-model:value="formData.userId"
+				/>
 			</a-form-item>
 		</a-form>
 
@@ -50,6 +53,8 @@
 	import {ExclamationCircleOutlined} from '@ant-design/icons-vue';
 	import {Modal} from 'ant-design-vue';
 	import {createVNode} from 'vue';
+	import userApi from '@/api/biz/bizUserApi'
+	import bizLoadDispatchApi from "@/api/biz/bizLoadDispatchApi";
 
 	// 抽屉状态
 	const open = ref(false)
@@ -141,7 +146,20 @@
 		})
 	}
 
-
+	// 传递设计器需要的API
+	const selectorApiFunction = {
+		orgTreeApi: (param) => {
+			return userApi.userOrgTreeSelector(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		userPageApi: (param) => {
+			param.roleName = '起卸员'
+			return userApi.userSelectorByRole(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		}
+	}
 
 
 	// 关闭抽屉
@@ -161,6 +179,7 @@
 		//customerId:[required('请选择客户信息')],
 		loadPointId:[required('请选择装卸点位')],
 		loadTimeId: [required('请选择装卸时间')],
+		userId: [required('请选择执行人员')],
 	}
 
 
@@ -199,8 +218,8 @@
 			.then(() => {
 				submitLoading.value = true
 				const formDataParam = cloneDeep(formData.value)
-				bizOrderLoadApi
-					.bizOrderReplace(formDataParam)
+				bizLoadDispatchApi
+					.replaceLoad(formDataParam)
 					.then(() => {
 						onClose()
 					})

+ 37 - 0
snowy-admin-web/src/views/biz/bizloadarrive/index.vue

@@ -105,6 +105,10 @@
 								<a-menu-item v-if="hasPerm('bizLoadArriveAudit') && record.status == '1'">
 									<a style="color:blue" @click="reviewRef.showModal(record.id)" >审核</a>
 								</a-menu-item>
+								<!--确认-->
+								<a-menu-item v-if="hasPerm('bizLoadArriveConfirm') && (record.status == '2' ) && record.loadStatus == '8'">
+									<a style="color:blue" size="small" type="link" @click="confirmConfig(record)">确认</a>
+								</a-menu-item>
 							</a-menu>
 						</template>
 					</a-dropdown>
@@ -203,6 +207,11 @@
 			dataIndex: 'arriveTime',
 			align:'center'
 		},
+		{
+			title: '起卸数量(吨)',
+			dataIndex: 'fillWeight',
+			align:'center'
+		},
 		{
 			title: '状态',
 			dataIndex: 'status',
@@ -318,6 +327,34 @@
 			onCancel() {}
 		})
 	}
+
+	//船主确认
+	const confirmConfig = (record) => {
+		Modal.confirm({
+			title: '确定确认该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params =
+					{
+						id: record.id
+					}
+
+
+				bizLoadArriveApi
+					.arriveConfirm(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+
 	// 批量删除
 	const deleteBatchBizLoadArrive = (params) => {
 		bizLoadArriveApi.bizLoadArriveDelete(params).then(() => {

+ 3 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadappoint/mapper/mapping/BizLoadAppointMapper.xml

@@ -32,7 +32,9 @@
          left join biz_service_customer bsc on bla.customer_id = bsc.id
          left join biz_goods bg on bg.id = bla.goods_id
          left join biz_supplier bs on bs.id = bla.supplier_id
-         left join biz_load_arrive ba on ba.appoint_id = bla.id and ba.delete_flag = 'NOT_DELETE'
+         LEFT JOIN (select ba.appoint_id,ba.`STATUS` from biz_load_arrive ba  where ba.delete_flag = 'NOT_DELETE') ba on ba.appoint_id = bla.id
+         LEFT JOIN (select appoint_id,user_id from biz_load_dispatch where load_type = '1' AND delete_flag = 'NOT_DELETE' GROUP BY user_id) bld
+         on bld.appoint_id = bla.id
          ${ew.customSqlSegment}
     </select>
 

+ 4 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadappoint/service/impl/BizLoadAppointServiceImpl.java

@@ -111,6 +111,10 @@ public class BizLoadAppointServiceImpl extends ServiceImpl<BizLoadAppointMapper,
         if(ObjectUtil.isEmpty(loginUserDataScope)) {
             queryWrapper.eq("bla.customer_id", StpLoginUserUtil.getLoginUser().getCustomerId());
         }
+        // 起卸员
+        if(StpLoginUserUtil.getLoginUser().getRoleCodeList().contains("load")){
+            queryWrapper.eq("bld.user_id",StpLoginUserUtil.getLoginUser().getId());
+        }
         queryWrapper.eq("bla.delete_flag","NOT_DELETE");
         queryWrapper.orderByDesc("bla.create_time");
         return queryWrapper;

+ 14 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/controller/BizLoadArriveController.java

@@ -143,4 +143,18 @@ public class BizLoadArriveController {
     public void exportRecord(BizLoadArrivePageParam bizLoadArrivePageParam, HttpServletResponse response) throws IOException {
         bizLoadArriveService.exportRecord(bizLoadArrivePageParam,response);
     }
+
+    /**
+     * 船主确认
+     *
+     * @author fanzherong
+     * @date  2025/06/26 14:12
+     */
+    @Operation(summary = "船主确认")
+    @CommonLog("船主确认")
+    @PostMapping("/biz/bizloadarrive/arriveConfirm")
+    public CommonResult<String> arriveConfirm(@RequestBody @Valid BizLoadArriveEditParam bizLoadArriveEditParam) {
+        bizLoadArriveService.arriveConfirm(bizLoadArriveEditParam);
+        return CommonResult.ok();
+    }
 }

+ 8 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/entity/BizLoadArrive.java

@@ -93,4 +93,12 @@ public class BizLoadArrive extends CommonEntity {
     /***起卸预约单号*/
     @TableField(exist = false)
     private String loadNumber;
+
+    /**起卸订单状态*/
+    @TableField(exist = false)
+    private String loadStatus;
+
+    /**起卸数量*/
+    @TableField(exist = false)
+    private BigDecimal fillWeight;
 }

+ 3 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/mapper/mapping/BizLoadArriveMapper.xml

@@ -20,7 +20,9 @@
             bsc.phone customerPhone,
             bsc.address customerAddress,
             bg.GOODS_NAME goodsName,
-            bg.GOODS_CODE goodsCode
+            bg.GOODS_CODE goodsCode,
+            bla.status loadStatus,
+            ifnull(bla.fill_weight/1000,0) fill_weight
         from biz_load_arrive blv
          left join biz_load_appoint bla on blv.appoint_id = bla.id
          left join biz_service_customer bsc on bla.customer_id = bsc.id

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/service/BizLoadArriveService.java

@@ -89,4 +89,9 @@ public interface BizLoadArriveService extends IService<BizLoadArrive> {
      * 导出
      */
     void exportRecord(BizLoadArrivePageParam bizLoadArrivePageParam, HttpServletResponse response);
+
+    /**
+     * 船主确认
+     */
+    void arriveConfirm(BizLoadArriveEditParam bizLoadArriveEditParam);
 }

+ 12 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadarrive/service/impl/BizLoadArriveServiceImpl.java

@@ -346,4 +346,16 @@ public class BizLoadArriveServiceImpl extends ServiceImpl<BizLoadArriveMapper, B
         }
         CommonExportUtil.export(fileName, BizLoadArriveExportResult.class,list,response,"报港预约报表");
     }
+
+    @Override
+    public void arriveConfirm(BizLoadArriveEditParam bizLoadArriveEditParam) {
+        BizLoadArrive bizLoadArrive = this.queryEntity(bizLoadArriveEditParam.getId());
+        bizLoadArrive.setStatus("4");
+        this.updateById(bizLoadArrive);
+
+        //修改起卸订单状态
+        BizLoadAppoint loadAppoint = bizLoadAppointService.getById(bizLoadArrive.getAppointId());
+        loadAppoint.setStatus("9");
+        bizLoadAppointService.updateById(loadAppoint);
+    }
 }

+ 28 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/controller/BizLoadDispatchController.java

@@ -195,4 +195,32 @@ public class BizLoadDispatchController {
     public CommonResult<List<BizLoadDispatch>> getListTime(BizLoadDispatchPageParam bizLoadDispatchPageParam) {
         return CommonResult.data(bizLoadDispatchService.getListTime(bizLoadDispatchPageParam));
     }
+
+    /**
+     * 起卸分配替换
+     *
+     * @author fanzherong
+     * @date  2025/07/01 09:47
+     */
+    @Operation(summary = "起卸分配替换")
+    @CommonLog("起卸分配替换")
+    @PostMapping("/biz/bizloaddispatch/replaceLoad")
+    public CommonResult<String> replaceLoad(@RequestBody @Valid BizLoadDispatchEditParam bizLoadDispatchEditParam) {
+        bizLoadDispatchService.replaceLoad(bizLoadDispatchEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 装卸分配替换
+     *
+     * @author fanzherong
+     * @date  2025/07/01 09:47
+     */
+    @Operation(summary = "装卸分配替换")
+    @CommonLog("装卸分配替换")
+    @PostMapping("/biz/bizloaddispatch/replaceDispatch")
+    public CommonResult<String> replaceDispatch(@RequestBody @Valid BizLoadDispatchEditParam bizLoadDispatchEditParam) {
+        bizLoadDispatchService.replaceDispatch(bizLoadDispatchEditParam);
+        return CommonResult.ok();
+    }
 }

+ 7 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/entity/BizLoadDispatch.java

@@ -53,6 +53,9 @@ public class BizLoadDispatch extends CommonEntity {
     @Schema(description = "装卸时间ID")
     private String loadTimeId;
 
+    /**执行人员*/
+    private String userId;
+
     /**装货点位*/
     @TableField(exist = false)
     private String loadPoint;
@@ -73,4 +76,8 @@ public class BizLoadDispatch extends CommonEntity {
     @TableField(exist = false)
     private Integer alreadyNumber;
 
+    /**执行人员*/
+    @TableField(exist = false)
+    private String userName;
+
 }

+ 4 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/mapper/mapping/BizLoadDispatchMapper.xml

@@ -11,10 +11,13 @@
             blt.begin_time,
             blt.end_time,
             blt.available_number,
-            blt.already_number
+            blt.already_number,
+            su.name userName,
+            bld.user_id
         from biz_load_dispatch bld
          left join biz_load_point blp on blp.id = bld.load_point_id
          left join biz_load_time blt on blt.id = bld.load_time_id
+         left join sys_user su on su.id = bld.user_id
         ${ew.customSqlSegment}
     </select>
 </mapper>

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

@@ -47,4 +47,7 @@ public class BizLoadDispatchAddParam {
     @Schema(description = "装卸时间ID")
     private String loadTimeId;
 
+    /**执行人员*/
+    private String userId;
+
 }

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

@@ -52,4 +52,7 @@ public class BizLoadDispatchEditParam {
     @Schema(description = "装卸时间ID")
     private String loadTimeId;
 
+    /***执行人员*/
+    private String userId;
+
 }

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

@@ -57,4 +57,7 @@ public class BizLoadDispatchPageParam {
     /**点位id*/
     private String loadPointId;
 
+    /**类型*/
+    private String appointType;
+
 }

+ 86 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloaddispatch/service/impl/BizLoadDispatchServiceImpl.java

@@ -23,10 +23,14 @@ import jakarta.annotation.Resource;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.biz.modular.bizappointmentrecord.entity.BizAppointmentRecord;
+import vip.xiaonuo.biz.modular.bizappointmentrecord.service.BizAppointmentRecordService;
 import vip.xiaonuo.biz.modular.bizloadappoint.entity.BizLoadAppoint;
 import vip.xiaonuo.biz.modular.bizloadappoint.service.BizLoadAppointService;
 import vip.xiaonuo.biz.modular.bizloadtime.entity.BizLoadTime;
 import vip.xiaonuo.biz.modular.bizloadtime.service.BizLoadTimeService;
+import vip.xiaonuo.biz.modular.bizorderload.entity.BizOrderLoad;
+import vip.xiaonuo.biz.modular.bizorderload.param.BizOrderLoadEditParam;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
@@ -56,6 +60,9 @@ public class BizLoadDispatchServiceImpl extends ServiceImpl<BizLoadDispatchMappe
     @Resource
     private BizLoadTimeService bizLoadTimeService;
 
+    @Resource
+    private BizAppointmentRecordService bizAppointmentRecordService;
+
     @Override
     public Page<BizLoadDispatch> page(BizLoadDispatchPageParam bizLoadDispatchPageParam) {
         QueryWrapper<BizLoadDispatch> queryWrapper = new QueryWrapper<BizLoadDispatch>().checkSqlInjection();
@@ -100,6 +107,7 @@ public class BizLoadDispatchServiceImpl extends ServiceImpl<BizLoadDispatchMappe
     }
 
     public void checkParam(BizLoadDispatchAddParam bizLoadDispatchAddParam,String type){
+        //判断起卸点位时间是否添加过
         long count = this.count(new QueryWrapper<BizLoadDispatch>().lambda().
                 eq(BizLoadDispatch::getAppointId, bizLoadDispatchAddParam.getAppointId()).
                 eq(BizLoadDispatch::getLoadPointId, bizLoadDispatchAddParam.getLoadPointId()).
@@ -113,6 +121,15 @@ public class BizLoadDispatchServiceImpl extends ServiceImpl<BizLoadDispatchMappe
             }
 
         }
+
+        //判断是否添加过多个执行人员
+        long userCount = this.count(new QueryWrapper<BizLoadDispatch>().lambda().
+                eq(BizLoadDispatch::getAppointId, bizLoadDispatchAddParam.getAppointId()).
+                eq(BizLoadDispatch::getLoadType,type).
+                ne(BizLoadDispatch::getUserId,bizLoadDispatchAddParam.getUserId()));
+        if(userCount>0){
+            throw new CommonException("不可以分配多个执行人员!");
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -191,8 +208,8 @@ public class BizLoadDispatchServiceImpl extends ServiceImpl<BizLoadDispatchMappe
         if(ObjectUtil.isNotEmpty(bizLoadDispatchPageParam.getAppointId())){
             queryWrapper.eq("bld.appoint_id",bizLoadDispatchPageParam.getAppointId());
         }
-        if(ObjectUtil.isNotEmpty(bizLoadDispatchPageParam.getLoadType())){
-            queryWrapper.eq("bld.load_type",bizLoadDispatchPageParam.getLoadType());
+        if(ObjectUtil.isNotEmpty(bizLoadDispatchPageParam.getAppointType())){
+            queryWrapper.eq("bld.load_type",bizLoadDispatchPageParam.getAppointType());
         }
         queryWrapper.eq("bld.delete_flag","NOT_DELETE");
         queryWrapper.orderByDesc("bld.create_time");
@@ -206,13 +223,80 @@ public class BizLoadDispatchServiceImpl extends ServiceImpl<BizLoadDispatchMappe
         BizLoadDispatch bizLoadDispatch = this.queryEntity(bizLoadDispatchEditParam.getId());
         bizLoadDispatch.setLoadPointId(bizLoadDispatchEditParam.getLoadPointId());
         bizLoadDispatch.setLoadTimeId(bizLoadDispatchEditParam.getLoadTimeId());
+        bizLoadDispatch.setUserId(bizLoadDispatchEditParam.getUserId());
         this.updateById(bizLoadDispatch);
     }
 
+    @Transactional
     @Override
     public void replaceDispatch(BizLoadDispatchEditParam bizLoadDispatchEditParam) {
         //装卸分配替换
         BizLoadDispatch bizLoadDispatch = this.queryEntity(bizLoadDispatchEditParam.getId());
+        checkDispatch(bizLoadDispatch,bizLoadDispatchEditParam);
+        //修改预约记录的装卸点位和装卸时间
+        updateAppointment(bizLoadDispatch,bizLoadDispatchEditParam);
+
+        BeanUtil.copyProperties(bizLoadDispatchEditParam, bizLoadDispatch);
+        //修改装卸点位和装卸时间
+        this.updateById(bizLoadDispatch);
+    }
+    public void checkDispatch(BizLoadDispatch bizLoadDispatch, BizLoadDispatchEditParam bizLoadDispatchEditParam){
+        //校验是否在物流订单添加过
+        QueryWrapper<BizLoadDispatch> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BizLoadDispatch::getAppointId,bizLoadDispatchEditParam.getAppointId()).
+                eq(BizLoadDispatch::getLoadPointId,bizLoadDispatchEditParam.getLoadPointId()).
+                eq(BizLoadDispatch::getLoadTimeId,bizLoadDispatchEditParam.getLoadTimeId()).
+                eq(BizLoadDispatch::getLoadType,"2");
+        long count = this.count(queryWrapper);
+        if(count>0){
+            throw new CommonException("装卸点位和时间已经添加过,不可更换!");
+        }
+
+        //校验新的装卸时间段预约次数是否大于旧的已经预约数
+        //查询旧的装卸点位已约次数
+        Integer oldApplyNumber= 0;
+        BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizLoadDispatch.getLoadTimeId());
+        if(ObjectUtil.isNotNull(bizLoadTime)){
+            oldApplyNumber = bizLoadTime.getAlreadyNumber();
+        }
+        //查询新的装卸点位可约次数
+        Integer applyNumber = 0;
+        BizLoadTime loadTime = bizLoadTimeService.getById(bizLoadDispatchEditParam.getLoadTimeId());
+        if(ObjectUtil.isNotNull(loadTime)){
+            applyNumber = loadTime.getAvailableNumber();
+        }
+        if(applyNumber<oldApplyNumber){
+            throw new CommonException("该装卸点位预约次数不足,不可更换!");
+        }
+    }
+
+    public void updateAppointment(BizLoadDispatch bizLoadDispatch, BizLoadDispatchEditParam bizLoadDispatchEditParam){
+        //查询所有未装货的且是旧装卸点位的预约记录
+        List<BizAppointmentRecord> recordList = bizAppointmentRecordService.list(new QueryWrapper<BizAppointmentRecord>().lambda().
+                eq(BizAppointmentRecord::getOrderId, bizLoadDispatch.getAppointId()).
+                eq(BizAppointmentRecord::getLoadPointId, bizLoadDispatch.getLoadPointId()).
+                eq(BizAppointmentRecord::getLoadTimeId, bizLoadDispatch.getLoadTimeId()).
+                in(BizAppointmentRecord::getStatus, "1", "2", "3", "4", "5", "6"));
+        for(BizAppointmentRecord bizAppointmentRecord : recordList){
+            bizAppointmentRecord.setLoadPointId(bizLoadDispatchEditParam.getLoadPointId());
+            bizAppointmentRecord.setLoadTimeId(bizLoadDispatchEditParam.getLoadTimeId());
+            bizAppointmentRecordService.updateById(bizAppointmentRecord);
+        }
+
+        BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizLoadDispatch.getLoadTimeId());
+        if(ObjectUtil.isNotNull(bizLoadTime)){
+            bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber() - recordList.size());
+            bizLoadTimeService.updateById(bizLoadTime);
+        }
+
+        BizLoadTime loadTime = bizLoadTimeService.getById(bizLoadDispatchEditParam.getLoadTimeId());
+        if(ObjectUtil.isNotNull(loadTime)){
+            if((loadTime.getAlreadyNumber() + recordList.size()) > loadTime.getAvailableNumber()){
+                throw new CommonException("次数不足,不可更换");
+            }
+            loadTime.setAlreadyNumber(loadTime.getAlreadyNumber() + recordList.size());
+            bizLoadTimeService.updateById(loadTime);
+        }
     }
 
     @Override

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

@@ -55,4 +55,6 @@ public class BizLoadPointPageParam {
     /**类型1:起卸   2:装货*/
     private String loadType;
 
+    private String appointType;
+
 }

+ 2 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizloadpoint/service/impl/BizLoadPointServiceImpl.java

@@ -99,8 +99,8 @@ public class BizLoadPointServiceImpl extends ServiceImpl<BizLoadPointMapper, Biz
         if(ObjectUtil.isNotEmpty(bizLoadPointPageParam.getLoadPoint())) {
             queryWrapper.lambda().like(BizLoadPoint::getLoadPoint, bizLoadPointPageParam.getLoadPoint());
         }
-        if(ObjectUtil.isNotEmpty(bizLoadPointPageParam.getLoadType())){
-            queryWrapper.lambda().eq(BizLoadPoint::getLoadType,bizLoadPointPageParam.getLoadType());
+        if(ObjectUtil.isNotEmpty(bizLoadPointPageParam.getAppointType())){
+            queryWrapper.lambda().eq(BizLoadPoint::getLoadType,bizLoadPointPageParam.getAppointType());
         }
         queryWrapper.lambda().eq(BizLoadPoint::getDeleteFlag, "NOT_DELETE");
         queryWrapper.lambda().orderByDesc(BizLoadPoint::getCreateTime);

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

@@ -143,7 +143,7 @@ public class BizOrderLoadServiceImpl extends ServiceImpl<BizOrderLoadMapper, Biz
         //修改预约记录的装卸点位和装卸时间
         updateAppointment(bizOrderLoad,bizOrderLoadEditParam);
         //修改已约次数
-        updateAlreadyNumber(bizOrderLoad,bizOrderLoadEditParam);
+        //updateAlreadyNumber(bizOrderLoad,bizOrderLoadEditParam);
 
         BeanUtil.copyProperties(bizOrderLoadEditParam, bizOrderLoad);
         //修改装卸点位和装卸时间
@@ -214,22 +214,26 @@ public class BizOrderLoadServiceImpl extends ServiceImpl<BizOrderLoadMapper, Biz
             bizAppointmentRecord.setLoadTimeId(bizOrderLoadEditParam.getLoadTimeId());
             bizAppointmentRecordService.updateById(bizAppointmentRecord);
         }
-    }
 
-    public void updateAlreadyNumber(BizOrderLoad bizOrderLoad,BizOrderLoadEditParam bizOrderLoadEditParam){
-        Integer alreadyNumber = 0;
+
         BizLoadTime bizLoadTime = bizLoadTimeService.getById(bizOrderLoad.getLoadTimeId());
         if(ObjectUtil.isNotNull(bizLoadTime)){
-            alreadyNumber = bizLoadTime.getAlreadyNumber();
-            bizLoadTime.setAlreadyNumber(0);
+            bizLoadTime.setAlreadyNumber(bizLoadTime.getAlreadyNumber() - recordList.size());
             bizLoadTimeService.updateById(bizLoadTime);
         }
 
         BizLoadTime loadTime = bizLoadTimeService.getById(bizOrderLoadEditParam.getLoadTimeId());
         if(ObjectUtil.isNotNull(loadTime)){
-            loadTime.setAlreadyNumber(alreadyNumber);
+            if((loadTime.getAlreadyNumber() + recordList.size()) > loadTime.getAvailableNumber()){
+                throw new CommonException("次数不足,不可更换");
+            }
+            loadTime.setAlreadyNumber(loadTime.getAlreadyNumber() + recordList.size());
             bizLoadTimeService.updateById(loadTime);
         }
+    }
+
+    public void updateAlreadyNumber(BizOrderLoad bizOrderLoad,BizOrderLoadEditParam bizOrderLoadEditParam){
+
 
     }
 

+ 12 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/controller/BizUserController.java

@@ -416,4 +416,16 @@ public class BizUserController {
     public CommonResult<Page<BizUser>> userSelectorByRole(BizUserPageParam bizUserPageParam) {
         return CommonResult.data(bizUserService.userSelectorByRole(bizUserPageParam));
     }
+
+    /**
+     * 根据角色获取用户列表
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @Operation(summary = "根据角色获取用户列表")
+    @GetMapping("/biz/user/userListByRole")
+    public CommonResult<List<BizUser>> userListByRole(BizUserPageParam bizUserPageParam) {
+        return CommonResult.data(bizUserService.userListByRole(bizUserPageParam));
+    }
 }

+ 4 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/mapper/BizUserMapper.java

@@ -18,6 +18,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import vip.xiaonuo.biz.modular.user.entity.BizUser;
 
+import java.util.List;
+
 /**
  * 人员Mapper接口
  *
@@ -27,6 +29,8 @@ import vip.xiaonuo.biz.modular.user.entity.BizUser;
 public interface BizUserMapper extends BaseMapper<BizUser> {
     Page<BizUser> page(@Param("page") Page<BizUser> page, @Param("ew") QueryWrapper<BizUser> wrapper);
 
+    List<BizUser> page(@Param("ew") QueryWrapper<BizUser> wrapper);
+
     Page<BizUser> driverPage(@Param("page") Page<BizUser> page, @Param("ew") QueryWrapper<BizUser> wrapper);
 
 }

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

@@ -49,6 +49,8 @@ public interface BizUserService extends IService<BizUser> {
      */
     Page<BizUser> userSelectorByRole(BizUserPageParam bizUserPageParam);
 
+    List<BizUser> userListByRole(BizUserPageParam bizUserPageParam);
+
 
     /**
      * 获取人员分页

+ 54 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/impl/BizUserServiceImpl.java

@@ -209,6 +209,60 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
         }
     }
 
+    @Override
+    public List<BizUser> userListByRole(BizUserPageParam bizUserPageParam) {
+        // 获取角色ID
+        List<String> sysRoleIdList = sysRoleApi.getRoleIdList(bizUserPageParam.getRoleName());
+
+        LambdaQueryWrapper<BizUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        // 只查询部分字段
+        lambdaQueryWrapper.select(BizUser::getId, BizUser::getOrgId, BizUser::getPositionId, BizUser::getAccount,
+                BizUser::getName, BizUser::getSortCode, BizUser::getGender, BizUser::getEntryDate);
+        // 判断角色
+        if(null != sysRoleIdList && 0 < sysRoleIdList.size()){
+            QueryWrapper<BizUser> queryWrapper = new QueryWrapper<BizUser>().checkSqlInjection();
+            if (ObjectUtil.isNotEmpty(bizUserPageParam.getSearchKey())) {
+                queryWrapper.like("a.name", bizUserPageParam.getSearchKey());
+            }
+            if (ObjectUtil.isNotEmpty(bizUserPageParam.getOrgId())) {
+                // 如果组织id不为空,则查询该组织及其子组织下的所有人
+                List<String> childOrgIdList = CollStreamUtil.toList(bizOrgService.getChildListById(bizOrgService
+                        .getAllOrgList(), bizUserPageParam.getOrgId(), true), BizOrg::getId);
+                if (ObjectUtil.isNotEmpty(childOrgIdList)) {
+                    queryWrapper.in("a.org_id", childOrgIdList);
+                }
+            }
+            if (ObjectUtil.isNotEmpty(sysRoleIdList)) {
+                queryWrapper.in("sro.ID", sysRoleIdList);
+            }
+            queryWrapper.eq("a.DELETE_FLAG", "NOT_DELETE");
+            return this.baseMapper.page(queryWrapper);
+        }else{
+            // 角色不存在,默认查询全部人员
+            if(ObjectUtil.isAllEmpty(bizUserPageParam.getOrgId(), bizUserPageParam.getSearchKey())) {
+                return this.list(new LambdaQueryWrapper<BizUser>().select(BizUser::getId,
+                        BizUser::getOrgId, BizUser::getPositionId, BizUser::getAccount, BizUser::getName,
+                        BizUser::getSortCode, BizUser::getGender, BizUser::getEntryDate).orderByAsc(BizUser::getSortCode));
+            } else {
+                if (ObjectUtil.isNotEmpty(bizUserPageParam.getOrgId())) {
+                    // 如果组织id不为空,则查询该组织及其子组织下的所有人
+                    List<String> childOrgIdList = CollStreamUtil.toList(bizOrgService.getChildListById(bizOrgService
+                            .getAllOrgList(), bizUserPageParam.getOrgId(), true), BizOrg::getId);
+                    if (ObjectUtil.isNotEmpty(childOrgIdList)) {
+                        lambdaQueryWrapper.in(BizUser::getOrgId, childOrgIdList);
+                    } else {
+                        return new ArrayList<>();
+                    }
+                }
+                if (ObjectUtil.isNotEmpty(bizUserPageParam.getSearchKey())) {
+                    lambdaQueryWrapper.like(BizUser::getName, bizUserPageParam.getSearchKey());
+                }
+                lambdaQueryWrapper.orderByAsc(BizUser::getSortCode);
+                return this.list(lambdaQueryWrapper);
+            }
+        }
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(BizUserAddParam bizUserAddParam) {