智慧保安后台管理-外网项目备份
钟日健
2026-06-01 62eb499b0c969f246d3245d1429a97da4de1ce28
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;
      }
   }
}