From 62eb499b0c969f246d3245d1429a97da4de1ce28 Mon Sep 17 00:00:00 2001
From: 钟日健 <arsn163@163.com>
Date: Mon, 01 Jun 2026 20:46:13 +0800
Subject: [PATCH] feat: 成绩查询增加年龄查询返回

---
 src/main/java/org/springblade/modules/dispatcher/controller/DispatcherController.java |  242 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 154 insertions(+), 88 deletions(-)

diff --git a/src/main/java/org/springblade/modules/dispatcher/controller/DispatcherController.java b/src/main/java/org/springblade/modules/dispatcher/controller/DispatcherController.java
index 777e5a8..5521f38 100644
--- a/src/main/java/org/springblade/modules/dispatcher/controller/DispatcherController.java
+++ b/src/main/java/org/springblade/modules/dispatcher/controller/DispatcherController.java
@@ -16,24 +16,37 @@
  */
 package org.springblade.modules.dispatcher.controller;
 
+import com.alibaba.excel.EasyExcel;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import org.apache.commons.codec.Charsets;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.common.excel.RowWriteHandler;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.modules.FTP.FtpUtil;
 import org.springblade.modules.dispatcher.entity.DispatcherUnit;
+import org.springblade.modules.dispatcher.excel.DispatcherExcel;
+import org.springblade.modules.dispatcher.excel.DispatcherImporter;
+import org.springblade.modules.dispatcher.excel.DispatcherUnitExcel;
+import org.springblade.modules.dispatcher.excel.DispatcherUnitImporter;
 import org.springblade.modules.dispatcher.service.IDispatcherUnitService;
+import org.springblade.modules.dispatcher.vo.DispatcherStatistics;
 import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.excel.UserCertificateExcel;
 import org.springblade.modules.system.service.IUserService;
+import org.springblade.modules.system.service.MyAsyncService;
 import org.springblade.modules.system.vo.UserVO;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -41,7 +54,11 @@
 import org.springblade.modules.dispatcher.vo.DispatcherVO;
 import org.springblade.modules.dispatcher.service.IDispatcherService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -50,7 +67,7 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
- *  控制器
+ * 控制器
  *
  * @author BladeX
  * @since 2021-07-07
@@ -66,6 +83,7 @@
 	private final IDispatcherUnitService dispatcherUnitService;
 
 	private final IUserService userService;
+	private final MyAsyncService myAsyncService;
 
 	/**
 	 * 详情
@@ -128,6 +146,7 @@
 
 	/**
 	 * 结束派遣
+	 *
 	 * @param dispatcher
 	 */
 	@PostMapping("/over-dispatcher")
@@ -142,10 +161,10 @@
 		List<Dispatcher> dispatcherList = dispatcherService.list(Condition.getQueryWrapper(dispatcher1));
 
 		User user = new User();
-		if (dispatcherList.size()<1){
+		if (dispatcherList.size() < 1) {
 			//用户状态改变
 			user.setDispatch("1");
-		}else {
+		} else {
 			//用户状态改变
 			user.setDispatch("0");
 		}
@@ -153,15 +172,15 @@
 		userService.updateById(user);
 
 
-
 		//内网同步
 		String s1 =
 			"update sys_dispatcher set status = " + "'" + dispatcher.getStatus() + "'" +
 				",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "'" +
-				" " +"where id = " + "'" + dispatcher.getId() + "';"+
+				" " + "where id = " + "'" + dispatcher.getId() + "';" +
 				"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
-				" " +"where id = " + "'" + user.getId() + "'";
-		FtpUtil.sqlFileUpload(s1);
+				" " + "where id = " + "'" + user.getId() + "'";
+		//FtpUtil.sqlFileUpload(s1);
+		myAsyncService.dataSync(s1);
 		return R.status(status);
 	}
 
@@ -185,23 +204,24 @@
 
 			//新增派遣记录
 			status = dispatcherService.save(dispatcher);
-
-			//数据同步
-			String s1 =
-				"insert into sys_dispatcher(id,dispatcherTime,dispatcherAddress,dispatcher_unit_id,user_ids,end_time,dept_id,jurisdiction,create_time,status) " +
-					"values(" + "'" + dispatcher.getId() + "'" + "," +
-					"'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getDispatchertime()) + "'" + "," +
-					"'" + dispatcher.getDispatcheraddress() + "'" + "," +
-					"'" + dispatcher.getDispatcherUnitId() + "'" + "," +
-					"'" + dispatcher.getUserIds() + "'" + "," +
-					"'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getEndTime()) + "'" + "," +
-					"'" + dispatcher.getDeptId() + "'" + "," +
-					"'" + dispatcher.getJurisdiction() + "'" + "," +
-					"'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher.getCreateTime()) + "'" + "," +
-					"'" + dispatcher.getStatus() + "'" + ");" +
-					"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
-					" " + "where id = " + "'" + user.getId() + "'";
-			FtpUtil.sqlFileUpload(s1);
+			if (status) {
+				//数据同步
+				String s1 =
+					"insert into sys_dispatcher(id,dispatcherTime,dispatcherAddress,dispatcher_unit_id,user_ids,end_time,dept_id,jurisdiction,create_time,status) " +
+						"values(" + "'" + dispatcher.getId() + "'" + "," +
+						"'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getDispatchertime()) + "'" + "," +
+						"'" + dispatcher.getDispatcheraddress() + "'" + "," +
+						"'" + dispatcher.getDispatcherUnitId() + "'" + "," +
+						"'" + dispatcher.getUserIds() + "'" + "," +
+						"'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getEndTime()) + "'" + "," +
+						"'" + dispatcher.getDeptId() + "'" + "," +
+						"'" + dispatcher.getJurisdiction() + "'" + "," +
+						"'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher.getCreateTime()) + "'" + "," +
+						"'" + dispatcher.getStatus() + "'" + ");" +
+						"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
+						" " + "where id = " + "'" + user.getId() + "'";
+				myAsyncService.dataSync(s1);
+			}
 		} else {
 			dispatcher.setUpdateTime(new Date());
 			//查询当前派遣记录
@@ -232,45 +252,14 @@
 
 				//修改
 				status = dispatcherService.updateById(dispatcher);
-
-				//内网同步
-				String s1 =
-					"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
-						" " + "where id = " + "'" + user.getId() + "';" +
-					"update sys_dispatcher set dispatcherTime = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getDispatchertime()) + "'" +
-						",dispatcherAddress = " + "'" + dispatcher.getDispatcheraddress() + "'" +
-						",dispatcher_unit_id = " + "'" + dispatcher.getDispatcherUnitId() + "'" +
-						",user_ids = " + "'" + dispatcher.getUserIds() + "'" +
-						",end_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getEndTime()) + "'" +
-						",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher.getUpdateTime()) + "'" +
-						",dept_id = " + "'" + dispatcher.getDeptId() + "'" +
-						",jurisdiction = " + "'" + dispatcher.getJurisdiction() + "'" +
-						" " + "where id = " + "'" + dispatcher.getId() + "';" +
-					"update blade_user set dispatch = " + "'" + user1.getDispatch() + "'" +
-						" " + "where id = " + "'" + user1.getId() + "'";
-				FtpUtil.sqlFileUpload(s1);
-			}else {
+			} else {
 				//没有修改保安员,只修改了派遣时间等信息
 				//修改
 				status = dispatcherService.updateById(dispatcher);
-
-				//内网同步
-				String s1 =
-					"update sys_dispatcher set dispatcherTime = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getDispatchertime()) + "'" +
-						",dispatcherAddress = " + "'" + dispatcher.getDispatcheraddress() + "'" +
-						",dispatcher_unit_id = " + "'" + dispatcher.getDispatcherUnitId() + "'" +
-						",user_ids = " + "'" + dispatcher.getUserIds() + "'" +
-						",end_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(dispatcher.getEndTime()) + "'" +
-						",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher.getUpdateTime()) + "'" +
-						",dept_id = " + "'" + dispatcher.getDeptId() + "'" +
-						",jurisdiction = " + "'" + dispatcher.getJurisdiction() + "'" +
-						" " + "where id = " + "'" + dispatcher.getId() + "'";
-				FtpUtil.sqlFileUpload(s1);
 			}
 		}
 		return R.status(status);
 	}
-
 
 
 	/**
@@ -284,7 +273,7 @@
 		AtomicBoolean errorStatus = new AtomicBoolean(true);
 		//将不能导入的保安员账号存起来
 		List<String> errorList = new ArrayList<>();
-		if (list.size()>0) {
+		if (list.size() > 0) {
 			//遍历
 			list.forEach(id -> {
 				dispatcher.setCreateTime(new Date());
@@ -292,19 +281,19 @@
 				dispatcher.setUserIds(id);
 				//判断派遣单位类型,如果是医院,学校,银行等单位,则派遣人员年龄不应大于50岁
 				DispatcherUnit dispatcherUnit = dispatcherUnitService.getById(dispatcher.getDispatcherUnitId());
-				if (null!=dispatcherUnit.getDistrict() && !dispatcherUnit.getDistrict().equals("") && !dispatcherUnit.getDistrict().equals(-1)){
+				if (null != dispatcherUnit.getDistrict() && !dispatcherUnit.getDistrict().equals("") && !dispatcherUnit.getDistrict().equals(-1)) {
 					//判断
 					if (dispatcherUnit.getDistrict().equals(1) ||
 						dispatcherUnit.getDistrict().equals(2) ||
-						dispatcherUnit.getDistrict().equals(3)){
+						dispatcherUnit.getDistrict().equals(3)) {
 						//查询保安员年龄
 						UserVO user1 = userService.getUserAgeById(Long.parseLong(dispatcher.getUserIds()));
-						if (user1.getAge()>50) {
+						if (user1.getAge() > 50) {
 							errorStatus.set(false);
 							errorList.add(user1.getCardid());
 							//跳出本次循环
 							return;
-						}else {
+						} else {
 							User user = new User();
 							user.setId(Long.parseLong(id));
 							user.setDispatch("0");
@@ -327,9 +316,9 @@
 									"'" + dispatcher.getStatus() + "'" + ");" +
 									"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
 									" " + "where id = " + "'" + user.getId() + "'";
-							FtpUtil.sqlFileUpload(s1);
+							myAsyncService.dataSync(s1);
 						}
-					}else {
+					} else {
 						User user = new User();
 						user.setId(Long.parseLong(id));
 						user.setDispatch("0");
@@ -350,11 +339,12 @@
 								"'" + dispatcher.getJurisdiction() + "'" + "," +
 								"'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher.getCreateTime()) + "'" + "," +
 								"'" + dispatcher.getStatus() + "'" + ");" +
-							"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
+								"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
 								" " + "where id = " + "'" + user.getId() + "'";
-						FtpUtil.sqlFileUpload(s1);
+						//FtpUtil.sqlFileUpload(s1);
+						myAsyncService.dataSync(s1);
 					}
-				}else {
+				} else {
 					User user = new User();
 					user.setId(Long.parseLong(id));
 					user.setDispatch("0");
@@ -375,15 +365,15 @@
 							"'" + dispatcher.getJurisdiction() + "'" + "," +
 							"'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher.getCreateTime()) + "'" + "," +
 							"'" + dispatcher.getStatus() + "'" + ");" +
-						"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
+							"update blade_user set dispatch = " + "'" + user.getDispatch() + "'" +
 							" " + "where id = " + "'" + user.getId() + "'";
-					FtpUtil.sqlFileUpload(s1);
+					myAsyncService.dataSync(s1);
 				}
 
 			});
-			if (!errorStatus.get()){
+			if (!errorStatus.get()) {
 				String errorAccount = StringUtils.join(errorList, "\\\n");
-				throw new ServiceException("保安员["+ errorAccount +"]派遣失败!派遣到学校,医院,银行的保安员年龄应不超过50周岁!");
+				throw new ServiceException("保安员[" + errorAccount + "]派遣失败!派遣到学校,医院,银行的保安员年龄应不超过50周岁!");
 			}
 		}
 		return R.status(status.get());
@@ -402,7 +392,7 @@
 		//判断派遣单位类型,如果是医院,学校,银行等单位,则派遣人员年龄不应大于50岁
 		DispatcherUnit dispatcherUnit = dispatcherUnitService.getById(dispatcher.getDispatcherUnitId());
 		if (!dispatcher1.getUserIds().equals(dispatcher.getUserIds())) {
-			if (null!=dispatcherUnit.getDistrict() && !dispatcherUnit.getDistrict().equals("") && !dispatcherUnit.getDistrict().equals(-1)) {
+			if (null != dispatcherUnit.getDistrict() && !dispatcherUnit.getDistrict().equals("") && !dispatcherUnit.getDistrict().equals(-1)) {
 				//判断
 				if (dispatcherUnit.getDistrict().equals(1) ||
 					dispatcherUnit.getDistrict().equals(2) ||
@@ -410,7 +400,7 @@
 					//查询保安员年龄
 					UserVO userVO = userService.getUserAgeById(Long.parseLong(dispatcher.getUserIds()));
 					if (userVO.getAge() > 50) {
-						throw new ServiceException("保安员["+ userVO.getCardid() +"]变更派遣失败!派遣到学校,医院,银行的保安员年龄应不超过50周岁!");
+						throw new ServiceException("保安员[" + userVO.getCardid() + "]变更派遣失败!派遣到学校,医院,银行的保安员年龄应不超过50周岁!");
 					} else {
 						//修改原保安人员的派遣状态
 						//查询原保安人员的派遣记录,是否存在多条未结束派遣的
@@ -451,11 +441,12 @@
 								",dept_id = " + "'" + dispatcher.getDeptId() + "'" +
 								",jurisdiction = " + "'" + dispatcher.getJurisdiction() + "'" +
 								" " + "where id = " + "'" + dispatcher.getId() + "';" +
-							"update blade_user set dispatch = " + "'" + user1.getDispatch() + "'" +
+								"update blade_user set dispatch = " + "'" + user1.getDispatch() + "'" +
 								" " + "where id = " + "'" + user1.getId() + "'";
-						FtpUtil.sqlFileUpload(s1);
+						//FtpUtil.sqlFileUpload(s1);
+						myAsyncService.dataSync(s1);
 					}
-				}else {
+				} else {
 					//修改原保安人员的派遣状态
 					//查询原保安人员的派遣记录,是否存在多条未结束派遣的
 					Dispatcher dispatcher2 = new Dispatcher();
@@ -497,9 +488,10 @@
 							" " + "where id = " + "'" + dispatcher.getId() + "';" +
 							"update blade_user set dispatch = " + "'" + user1.getDispatch() + "'" +
 							" " + "where id = " + "'" + user1.getId() + "'";
-					FtpUtil.sqlFileUpload(s1);
+					//FtpUtil.sqlFileUpload(s1);
+					myAsyncService.dataSync(s1);
 				}
-			}else {
+			} else {
 				//修改原保安人员的派遣状态
 				//查询原保安人员的派遣记录,是否存在多条未结束派遣的
 				Dispatcher dispatcher2 = new Dispatcher();
@@ -541,10 +533,11 @@
 						" " + "where id = " + "'" + dispatcher.getId() + "';" +
 						"update blade_user set dispatch = " + "'" + user1.getDispatch() + "'" +
 						" " + "where id = " + "'" + user1.getId() + "'";
-				FtpUtil.sqlFileUpload(s1);
+				//FtpUtil.sqlFileUpload(s1);
+				myAsyncService.dataSync(s1);
 			}
-		}else {
-			if (null!=dispatcherUnit.getDistrict() && !dispatcherUnit.getDistrict().equals("") && !dispatcherUnit.getDistrict().equals(-1)) {
+		} else {
+			if (null != dispatcherUnit.getDistrict() && !dispatcherUnit.getDistrict().equals("") && !dispatcherUnit.getDistrict().equals(-1)) {
 				//判断
 				if (dispatcherUnit.getDistrict().equals(1) ||
 					dispatcherUnit.getDistrict().equals(2) ||
@@ -569,9 +562,10 @@
 								",dept_id = " + "'" + dispatcher.getDeptId() + "'" +
 								",jurisdiction = " + "'" + dispatcher.getJurisdiction() + "'" +
 								" " + "where id = " + "'" + dispatcher.getId() + "'";
-						FtpUtil.sqlFileUpload(s1);
+						//FtpUtil.sqlFileUpload(s1);
+						myAsyncService.dataSync(s1);
 					}
-				}else {
+				} else {
 					//没有修改保安员,只修改了派遣时间等信息
 					//修改
 					status = dispatcherService.updateById(dispatcher);
@@ -587,9 +581,10 @@
 							",dept_id = " + "'" + dispatcher.getDeptId() + "'" +
 							",jurisdiction = " + "'" + dispatcher.getJurisdiction() + "'" +
 							" " + "where id = " + "'" + dispatcher.getId() + "'";
-					FtpUtil.sqlFileUpload(s1);
+					//FtpUtil.sqlFileUpload(s1);
+					myAsyncService.dataSync(s1);
 				}
-			}else {
+			} else {
 				//没有修改保安员,只修改了派遣时间等信息
 				//修改
 				status = dispatcherService.updateById(dispatcher);
@@ -605,7 +600,8 @@
 						",dept_id = " + "'" + dispatcher.getDeptId() + "'" +
 						",jurisdiction = " + "'" + dispatcher.getJurisdiction() + "'" +
 						" " + "where id = " + "'" + dispatcher.getId() + "'";
-				FtpUtil.sqlFileUpload(s1);
+				//FtpUtil.sqlFileUpload(s1);
+				myAsyncService.dataSync(s1);
 			}
 		}
 		return R.status(status);
@@ -621,13 +617,83 @@
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		//内网删除
 		List<Long> list = Func.toLongList(ids);
-		list.forEach(id ->{
+		list.forEach(id -> {
 			//内网同步
 			String s1 = "delete from sys_dispatcher where id = " + "'" + id + "'";
-			FtpUtil.sqlFileUpload(s1);
+			//FtpUtil.sqlFileUpload(s1);
+			myAsyncService.dataSync(s1);
 		});
 		return R.status(dispatcherService.removeByIds(Func.toLongList(ids)));
 	}
 
+	/**
+	 * 派遣服务单位统计
+	 * @return
+	 */
+	@GetMapping("/getStatistics")
+	public R getStatistics(DispatcherStatistics dispatcherStatistics){
+		List<DispatcherStatistics> list =  dispatcherService.getDispatcherStatisticsList(dispatcherStatistics);
+		return R.data(list);
+	}
+
+	/**
+	 * 导入派遣数据
+	 *
+	 * @param isCovered 1 覆盖  0不覆盖
+	 * @return
+	 */
+	@PostMapping("import-dispatcher")
+	public R importDispatcherUnit(MultipartFile file, Integer isCovered) {
+		DispatcherImporter dispatcherImporter = new DispatcherImporter(dispatcherService, false);
+		ExcelUtil.save(file, dispatcherImporter, DispatcherExcel.class);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("export-template")
+	@ApiOperation(value = "导出模板")
+	public void exportUser(HttpServletResponse response) throws ParseException, IOException {
+		List<DispatcherExcel> list = new ArrayList<>();
+
+		DispatcherExcel dispatcher = new DispatcherExcel();
+		dispatcher.setDispatcherUnitId("****公司");
+		dispatcher.setDeptId("****保安服务公司");
+		dispatcher.setUserIds("张三");
+		dispatcher.setCardid("360XXX19XXXXXX****");
+		dispatcher.setDispatcherTime(new SimpleDateFormat("yyyy/MM/dd").parse("2024/10/10"));
+		dispatcher.setEndTime(new SimpleDateFormat("yyyy/MM/dd").parse("2025/10/10"));
+		dispatcher.setDispatcherAddress("*****");
+		list.add(dispatcher);
+
+		DispatcherExcel dispatcher2 = new DispatcherExcel();
+		dispatcher2.setDispatcherUnitId("****公司");
+		dispatcher2.setDeptId("****保安服务公司");
+		dispatcher2.setUserIds("张三");
+		dispatcher2.setCardid("360XXX19XXXXXX****");
+		dispatcher2.setDispatcherTime(new SimpleDateFormat("yyyy/MM/dd").parse("2024/10/10"));
+		dispatcher2.setEndTime(new SimpleDateFormat("yyyy/MM/dd").parse("2025/10/10"));
+		dispatcher2.setDispatcherAddress("*****");
+		list.add(dispatcher2);
+
+
+
+//		ExcelUtil.export(response, "派遣数据导入模板" + DateUtil.time(), "派遣单位数据表", list, DispatcherExcel.class);
+
+		String fileName = null;
+		try {
+			response.setContentType("application/vnd.ms-excel");
+			response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
+			fileName = URLEncoder.encode("派遣数据导入模板" + DateUtil.time(), Charsets.UTF_8.name());
+			response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+			//修改单元格格式为文本格式
+			EasyExcel.write(response.getOutputStream(), DispatcherExcel.class).sheet("派遣数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list);
+		} catch (Throwable var6) {
+			throw var6;
+		}
+
+	}
+
 
 }

--
Gitblit v1.9.3