/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.system.controller; import com.alibaba.excel.EasyExcel; import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.minio.*; import io.minio.errors.*; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import com.alibaba.fastjson.JSON; import lombok.AllArgsConstructor; import net.sf.json.JSONObject; import org.apache.commons.codec.Charsets; import org.apache.commons.lang3.StringUtils; import org.springblade.common.cache.DictCache; import org.springblade.common.config.FtpConfig; import org.springblade.common.enums.DictEnum; import org.springblade.common.excel.CustomCellWriteHeightConfig; import org.springblade.common.excel.CustomCellWriteWeightConfig; import org.springblade.common.excel.RowWriteHandler; import org.springblade.common.utils.*; import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.*; import org.springblade.modules.FTP.FtpUtil; import org.springblade.modules.FTP.Monitor; import org.springblade.modules.FTP.Result; import org.springblade.modules.accreditation.entity.AccreditationRecords; import org.springblade.modules.accreditation.service.AccreditationRecordsService; import org.springblade.modules.dispatcher.entity.Dispatcher; import org.springblade.modules.dispatcher.service.IDispatcherService; import org.springblade.modules.exam.excel.ExportExamScoreExcel; import org.springblade.modules.experience.entity.Experience; import org.springblade.modules.experience.service.IExperienceService; import org.springblade.modules.jurisdiction.entity.Jurisdiction; import org.springblade.modules.jurisdiction.service.JurisdictionService; import org.springblade.modules.securitypaper.entity.SecurityPaper; import org.springblade.modules.securitypaper.service.SecurityPaperService; import org.springblade.modules.signinrecords.entity.SignInRecords; import org.springblade.modules.signinrecords.service.SignInRecordsService; import org.springblade.modules.system.dto.UserDTO; import org.springblade.modules.system.entity.Dept; import org.springblade.modules.system.entity.Role; import org.springblade.modules.system.entity.User; import org.springblade.modules.system.excel.*; import org.springblade.modules.system.node.TreeNode; import org.springblade.modules.system.service.IDeptService; import org.springblade.modules.system.service.IRoleService; import org.springblade.modules.system.service.IUserService; import org.springblade.modules.system.service.MyAsyncService; import org.springblade.modules.system.vo.DeptVO; import org.springblade.modules.system.vo.UserVO; import org.springblade.modules.system.wrapper.UserWrapper; import org.springblade.modules.training.entity.TrainingRegistration; import org.springblade.modules.training.service.TrainingRegistrationService; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import sun.misc.BASE64Decoder; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import static org.springblade.common.config.FtpConfig.*; import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE; import static org.springblade.modules.FTP.DataHandler.handlerUserInfo; /** * 控制器 * * @author Chill */ @NonDS @ApiIgnore @RestController @RequestMapping(AppConstant.APPLICATION_USER_NAME) @AllArgsConstructor public class UserController { private final IUserService userService; private final IDeptService iDeptService; private final IRoleService roleService; private final IExperienceService experienceService; private final JurisdictionService jurisdictionService; private final IDispatcherService dispatcherService; private final SignInRecordsService signInRecordsService; private final TrainingRegistrationService trainingRegistrationService; private final AccreditationRecordsService accreditationRecordsService; private final SecurityPaperService securityPaperService; private final MyAsyncService myAsyncService; private final RedisTemplate redisTemplate; /** * 查询单条 */ @ApiOperationSupport(order = 1) @ApiOperation(value = "查看详情", notes = "传入id") @GetMapping("/detail") // @PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R detail(User user) { User detail = userService.getOne(Condition.getQueryWrapper(user)); return R.data(UserWrapper.build().entityVO(detail)); } /** * 查询单条 */ @ApiOperationSupport(order = 2) @ApiOperation(value = "查看详情", notes = "传入id") @GetMapping("/info") public R info(BladeUser user) { User detail = userService.getById(user.getUserId()); return R.data(UserWrapper.build().entityVO(detail)); } /** * 用户列表 */ @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "account", value = "账号名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 3) @ApiOperation(value = "列表", notes = "传入account和realName") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R> list(@ApiIgnore @RequestParam Map user, Query query, BladeUser bladeUser) { QueryWrapper queryWrapper = Condition.getQueryWrapper(user, User.class); IPage pages = userService.page(Condition.getPage(query), (!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper); return R.data(UserWrapper.build().pageVO(pages)); } /** * 自定义用户列表 */ @GetMapping("/pages") @ApiImplicitParams({ @ApiImplicitParam(name = "account", value = "账号名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 3) @ApiOperation(value = "列表", notes = "传入account和realName") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R> pages(@ApiIgnore UserVO user, Query query) { IPage pages = userService.selectUserPages(Condition.getPage(query), user); return R.data(pages); } /** * 自定义用户列表 */ @GetMapping("/page") @ApiImplicitParams({ @ApiImplicitParam(name = "account", value = "账号名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 3) @ApiOperation(value = "列表", notes = "传入account和realName") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R> page(@ApiIgnore User user, Query query, Long deptId, BladeUser bladeUser) { IPage pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId())); return R.data(pages); } /** * 新增或修改 */ @PostMapping("/submit") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增或修改", notes = "传入User") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R submit(@Valid @RequestBody User user) { if (null == user.getId()) { Integer userCount = userService.selectCountAccount(user.getAccount()); if (userCount > 0) { throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } //判断角色 if(user.getRoleId().equals("1412226235153731586")){ //如果是保安员,默认为无证 user.setHold("2"); } user.setTenantId("000000"); user.setDispatch("1"); //待审查 user.setExaminationType("2"); // String realName = user.getRealName(); // String cardid = user.getCardid(); //// user.setAccount(user.getRealName()); // user.setAccount(realName.substring(0,1)+cardid.substring(cardid.length()-4)); //默认在职 user.setStatus(1); user.setIsDeleted(0); user.setCreateTime(new Date()); user.setUpdateTime(new Date()); //密码加密 if (Func.isNotEmpty(user.getCardid())) { //取身份证号码后6位作为密码 user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6))); } user.setCreateTime(new Date()); user.setTenantId("000000"); //判断是否为民警 code if (null != user.getCode() && !user.getCode().equals("")) { //民警 //根据 deptId 查询dept信息,公安管理员 Dept dept = iDeptService.getById(user.getDeptId()); //获取辖区的数据 Jurisdiction jurisdiction = new Jurisdiction(); jurisdiction.setDeptName(dept.getDeptName()); Jurisdiction one = jurisdictionService.getOne(Condition.getQueryWrapper(jurisdiction)); user.setJurisdiction(one.getId().toString()); } //用户新增 // boolean status = userService.save(user); User user1 = Objects.requireNonNull(BeanUtil.copy(user,User.class)); //生成随机数 String uuid = UUID.randomUUID().toString(); //将 user 存入 redis redisTemplate.opsForValue().set(uuid,JSON.toJSONString(user)); //user1 临时设置uuid 到 reason_for_leav 离职原因字段 user1.setReasonForLeav(uuid); //数据推送 Map map = new HashMap<>(1); map.put("user",user1); myAsyncService.FTPObject(map); int count = 0; int flag = 1; Result result = new Result(); //调用ftp获取返回数据 while (true){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //调用ftp获取返回数据 result = Monitor.isFTPFileExist(uuid); //如果返回true,就退处 if (result.getCode()==200){ flag = 1; break; }else if (result.getCode()==201){ flag = 2; break; }else if (result.getCode()==202){ flag = 3; break; }else if (result.getCode()==203){ flag = 4; break; }else{ //计数 count++; //如果超过10s 没有读取到,则退出 if (count == 60) { System.out.println("等待超时....................."); break; } } } if (flag==1 || flag==2) { //返回 return R.data(200, null, "新增成功!"); }else if (flag==3){ throw new ServiceException(result.getMsg()); }else if (flag==4){ // return R.data(201, null, "保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); return R.data(201, null, "保安证编号不匹配,请核实!"); }else{ //返回 return R.data(400, null, "新增失败!"); } } else { //修改 User user1 = userService.getById(user.getId()); user.setPassword(user1.getPassword()); user.setUpdateTime(new Date()); boolean b = userService.updateById(user); if (b) { String s1 = "update blade_user set account = " + "'" + user.getAccount() + "'" + ",code = " + "'" + user.getCode() + "'" + ",real_name = " + "'" + user.getRealName() + "'" + ",phone = " + "'" + user.getPhone() + "'" + ",sex = " + "'" + user.getSex() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + ",role_id = " + "'" + user.getRoleId() + "'" + ",dept_id = " + "'" + user.getDeptId() + "'" + ",cardid = " + "'" + user.getCardid() + "'" + ",guncode = " + "'" + user.getGuncode() + "'" + " " + "where id = " + "'" + user.getId() + "'"; myAsyncService.FTP(s1); } } //返回 return R.success("成功"); } /** // * 新增或修改 // */ // @PostMapping("/submit") // @ApiOperationSupport(order = 4) // @ApiOperation(value = "新增或修改", notes = "传入User") // //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) // public R submit(@Valid @RequestBody User user) { // if (null == user.getId()) { // //新增 // //密码加密 // if (Func.isNotEmpty(user.getPassword())) { // user.setPassword(DigestUtil.encrypt(user.getPassword())); // } // Integer userCount = userService.selectCountAccount(user.getAccount()); // if (userCount > 0) { // throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); // } // user.setTenantId("000000"); // user.setStatus(1); // user.setIsDeleted(0); // user.setCreateTime(new Date()); // user.setUpdateTime(new Date()); // //判断是否为民警 code // if (null != user.getCode() && !user.getCode().equals("")) { // //民警 // //根据 deptId 查询dept信息,公安管理员 // Dept dept = iDeptService.getById(user.getDeptId()); // //获取辖区的数据 // Jurisdiction jurisdiction = new Jurisdiction(); // jurisdiction.setDeptName(dept.getDeptName()); // Jurisdiction one = jurisdictionService.getOne(Condition.getQueryWrapper(jurisdiction)); // user.setJurisdiction(one.getId().toString()); // } // //新增 // boolean stats = userService.save(user); // if (stats) { // //内网同步 // String s = "insert into blade_user(" + // "id,tenant_id,code,account,password,real_name,phone,sex,role_id,dept_id," + // "create_time,update_time,cardid,status,is_deleted,jurisdiction) " + // "values(" + "'" + user.getId() + "'" + "," + // "'" + user.getTenantId() + "'" + "," + // "'" + user.getCode() + "'" + "," + // "'" + user.getAccount() + "'" + "," + // "'" + user.getPassword() + "'" + "," + // "'" + user.getRealName() + "'" + "," + // "'" + user.getPhone() + "'" + "," + // "'" + user.getSex() + "'" + "," + // "'" + user.getRoleId() + "'" + // "," + "'" + user.getDeptId() + "'" + // "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + // "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + // "," + "'" + user.getCardid() + "'" + // "," + "'" + user.getStatus() + "'" + // "," + "'" + user.getIsDeleted() + "'" + // "," + "'" + user.getJurisdiction() + "'" // + ")"; // myAsyncService.FTP(s); // } // } else { // //修改 // User user1 = userService.getById(user.getId()); // user.setPassword(user1.getPassword()); // user.setUpdateTime(new Date()); // boolean b = userService.updateById(user); // if (b) { // String s1 = // "update blade_user set account = " + "'" + user.getAccount() + "'" // + ",code = " + "'" + user.getCode() + "'" // + ",real_name = " + "'" + user.getRealName() + "'" // + ",phone = " + "'" + user.getPhone() + "'" // + ",sex = " + "'" + user.getSex() + "'" // + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" // + ",role_id = " + "'" + user.getRoleId() + "'" // + ",dept_id = " + "'" + user.getDeptId() + "'" // + ",cardid = " + "'" + user.getCardid() + "'" // + ",guncode = " + "'" + user.getGuncode() + "'" // + " " + "where id = " + "'" + user.getId() + "'"; // myAsyncService.FTP(s1); // } // } // // //返回 // return R.success("成功"); // } /** * 修改 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入User") public R update(@Valid @RequestBody User user) throws Exception { CacheUtil.clear(USER_CACHE); User user1 = userService.getById(user.getId()); String url = ""; if (null != user.getFingerprint() && !user.getFingerprint().equals("")) { if (user.getFingerprint().length() > 100) { //指纹图片上传并返回url String s = uploadBase64String(user); String[] split = s.split(","); user.setFingerprint(split[0]); //内网指纹图片url url = split[1]; } } //判断是否持证 boolean states = false; if (user.getHold().equals("1") && null!=user.getSecuritynumber() && !user.getSecuritynumber().equals("")){ //持证,校验保安证编号是否合法 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setIdCardNo(user.getCardid()); List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); if (securityPaperList.size()>0){ //遍历 for (SecurityPaper paper : securityPaperList) { if (paper.getNumber().equals(user.getSecuritynumber())){ states = true; } } if (!states){ user.setHold("2"); // throw new ServiceException("保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); } }else { // throw new ServiceException("保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); states = false; user.setHold("2"); } } if (user.getHold().equals("2")){ states = true; } //如果是离职 if (null != user.getStatus()) { if (user.getStatus().equals(2)) { //修改派遣状态 user.setDispatch("1"); //同时将派遣记录中的派遣状态修改 //查询派遣记录(还在派遣中的) Dispatcher dispatcher = new Dispatcher(); dispatcher.setUserIds(user.getId().toString()); dispatcher.setStatus(0); List dispatcherList = dispatcherService.list(Condition.getQueryWrapper(dispatcher)); if (dispatcherList.size() > 0) { dispatcherList.forEach(dispatcher1 -> { dispatcher1.setStatus(1); dispatcher1.setUpdateTime(new Date()); boolean b = dispatcherService.updateById(dispatcher1); if (b) { String s1 = "update sys_dispatcher set status = " + "'" + dispatcher1.getStatus() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher1.getUpdateTime()) + "'" + " " + "where id = " + "'" + dispatcher1.getId() + "'"; myAsyncService.FTP(s1); } }); } //查询当前用户是否有从业记录,没有的话新增,有就更新 //根据公司名查询单位 Dept dept = iDeptService.getById(user.getDeptId()); Experience experience = new Experience(); experience.setCompanyname(dept.getDeptName()); experience.setCardid(user.getCardid()); //按id降序 List list = experienceService.list(Condition.getQueryWrapper(experience).orderByDesc("id")); if (list.size() > 0) { //如果有多条取第一条更新 Experience experience1 = list.get(0); //设置离职时间 experience1.setDeparturetime(new Date()); //更新从业记录信息 experienceService.updateById(experience1); //数据同步 String s1 = "update sys_experience set departureTime = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience1.getDeparturetime()) + "'" + " " + "where id = " + "'" + experience1.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); } else { //新增 if (null != user.getRtime()) { experience.setEntrytime(user.getRtime()); } else { experience.setEntrytime(new Date()); } experience.setDeparturetime(new Date()); experience.setName(user.getRealName()); if (null != user.getReasonForLeav() && !user.getReasonForLeav().equals("")) { experience.setLeaving(user.getReasonForLeav()); } experience.setCardid(user.getCardid()); experience.setSecurityid(user.getId().toString()); //新增 boolean save = experienceService.save(experience); if (save) { //内网同步 String s = "insert into sys_experience(id,name,entryTime,departureTime,leaving,cardId,companyname,securityId) " + "values(" + "'" + experience.getId() + "'" + "," + "'" + experience.getName() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getDeparturetime()) + "'" + "," + "'" + experience.getLeaving() + "'" + "," + "'" + experience.getCardid() + "'" + "," + "'" + experience.getCompanyname() + "'" + "," + "'" + experience.getSecurityid() + "'" + ")"; myAsyncService.FTP(s); } } boolean status = userService.updateById(user); //qfqk 数据推送 if (status) { User user2 = new User(); user2.setId(user.getId()); //删除 myAsyncService.deleteUserByQfqk(user2); //内网更新 String s1 = "update blade_user set status = " + "'" + user.getStatus() + "'" + " " + "where id = " + "'" + user.getId() + "'"; myAsyncService.FTP(s1); } return R.success("修改成功"); } } int state = 0; //如果是异常标记 if (null != user.getExaminationType() && !user.getExaminationType().equals("")) { if (user.getExaminationType().equals("1")) { //吊销保安证 user.setHold("3"); state = 1; } } user.setPassword(user1.getPassword()); user.setUpdateTime(new Date()); //如果身份证号修改 if (!user.getCardid().equals(user1.getCardid())) { //账号,密码也修改 user.setAccount(user.getCardid()); //获取默认密码配置 user.setPassword(user.getCardid().substring(user.getCardid().length() - 6)); //加密 if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } state = 2; } //修改 boolean status = userService.updateById(user); if (status) { if (state == 2) { UserDTO userDTO = new UserDTO(); userDTO.setAccount(user.getAccount()); userDTO.setCardid(user.getCardid()); userDTO.setOldCardid(user1.getCardid()); userDTO.setPassword(user.getPassword()); userDTO.setRealName(user.getRealName()); userDTO.setPhone(user.getPhone()); userDTO.setSex(user.getSex()); userDTO.setAvatar(user.getAvatar()); //推送qfqk myAsyncService.updateUserByAccount(userDTO); } else { myAsyncService.updateUserByQfqk(user); } } String rtime; if (user.getRtime() == null) { String s1 = "update blade_user set account = " + "'" + user.getAccount() + "'" + ",name = " + "'" + user.getName() + "'" + ",real_name = " + "'" + user.getRealName() + "'" + ",avatar = " + "'" + user.getAvatar() + "'" + ",email = " + "'" + user.getEmail() + "'" + ",phone = " + "'" + user.getPhone() + "'" + ",sex = " + "'" + user.getSex() + "'" + ",role_id = " + "'" + user.getRoleId() + "'" + ",dept_id = " + "'" + user.getDeptId() + "'" + ",cardid = " + "'" + user.getCardid() + "'" + ",nativePlace = " + "'" + user.getNativeplace() + "'" + ",nation = " + "'" + user.getNation() + "'" + ",education = " + "'" + user.getEducation() + "'" + ",politicaloutlook = " + "'" + user.getPoliticaloutlook() + "'" + ",healstats = " + "'" + user.getHealstats() + "'" + ",height = " + "'" + user.getHeight() + "'" + ",fingerprint = " + "'" + url + "'" + ",my_picture = " + "'" + user.getMyPicture() + "'" + ",address = " + "'" + user.getAddress() + "'" + ",registered = " + "'" + user.getRegistered() + "'" + ",dispatch = " + "'" + user.getDispatch() + "'" + ",securitynumber = " + "'" + user.getSecuritynumber() + "'" + ",hold = " + "'" + user.getHold() + "'" + ",jurisdiction = " + "'" + user.getJurisdiction() + "'" + ",reason_for_leav = " + "'" + user.getReasonForLeav() + "'" + ",guncode = " + "'" + user.getGuncode() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + " " + "where id = " + "'" + user.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); } else { rtime = new SimpleDateFormat("yyyy-MM-dd").format(user.getRtime()); String s1 = "update blade_user set account = " + "'" + user.getAccount() + "'" + ",name = " + "'" + user.getName() + "'" + ",real_name = " + "'" + user.getRealName() + "'" + ",avatar = " + "'" + user.getAvatar() + "'" + ",email = " + "'" + user.getEmail() + "'" + ",phone = " + "'" + user.getPhone() + "'" + ",sex = " + "'" + user.getSex() + "'" + ",role_id = " + "'" + user.getRoleId() + "'" + ",dept_id = " + "'" + user.getDeptId() + "'" + ",cardid = " + "'" + user.getCardid() + "'" + ",nativePlace = " + "'" + user.getNativeplace() + "'" + ",nation = " + "'" + user.getNation() + "'" + ",education = " + "'" + user.getEducation() + "'" + ",politicaloutlook = " + "'" + user.getPoliticaloutlook() + "'" + ",healstats = " + "'" + user.getHealstats() + "'" + ",height = " + "'" + user.getHeight() + "'" + ",fingerprint = " + "'" + url + "'" + ",my_picture = " + "'" + user.getMyPicture() + "'" + ",address = " + "'" + user.getAddress() + "'" + ",registered = " + "'" + user.getRegistered() + "'" + ",rtime = " + "'" + rtime + "'" + ",dispatch = " + "'" + user.getDispatch() + "'" + ",securitynumber = " + "'" + user.getSecuritynumber() + "'" + ",hold = " + "'" + user.getHold() + "'" + ",jurisdiction = " + "'" + user.getJurisdiction() + "'" + ",reason_for_leav = " + "'" + user.getReasonForLeav() + "'" + ",guncode = " + "'" + user.getGuncode() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + " " + "where id = " + "'" + user.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); } if (!states) { return R.data(201,null,"保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); } return R.data(200,null,"修改成功!"); } /** * 修改保安员信息 */ @PostMapping("/updateSecurityInfo") public R updateSecurityInfo(@RequestBody User user) throws Exception { User user1 = userService.getById(user.getId()); user.setId(user1.getId()); user.setUpdateTime(new Date()); user.setPassword(user1.getPassword()); //创建更新的字符串 StringBuilder builder = new StringBuilder(); builder.append("update blade-user set update_time = "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime())); //姓名 if (null != user.getRealName() && !user.getRealName().equals("")) { builder.append(",set real_name = "+user.getRealName()); } int state = 1; //身份证号码 if (null != user.getCardid() && !user.getCardid().equals("")) { //身份证号校验 //去除所有空格 String cardid = user.getCardid().replaceAll(" ", ""); //校验 boolean b = IdCardNoUtil.checkIdCardNo(cardid); if(b){ user.setCardid(cardid); //账号,密码也修改 user.setAccount(user1.getRealName().substring(0,1)+cardid.substring(cardid.length()-4)); //获取默认密码配置 user.setPassword(user.getCardid().substring(user.getCardid().length() - 6)); //加密 if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } state = 2; builder.append(",set account = "+user.getAccount()+",set cardid = "+user.getCardid()+",set password = "+user.getPassword()); }else { throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!"); } } //手机号 if (null != user.getPhone() && !user.getPhone().equals("")) { builder.append(",set phone = "+user.getPhone()); } //指纹url 处理 String url = ""; if (null != user.getFingerprint() && !user.getFingerprint().equals("")) { if (user.getFingerprint().length() > 100) { //指纹图片上传并返回url String s = uploadBase64String(user); String[] split = s.split(","); user.setFingerprint(split[0]); //内网指纹图片url url = split[1]; builder.append(",set fingerprint = "+url); } } //头像 if (null != user.getAvatar() && !user.getAvatar().equals("")) { String avatar = FtpConfig.ip +"/"+ user.getAvatar().substring(26); System.out.println("头像上传 url = " + avatar); builder.append(",set fingerprint = "+avatar); } //名族 if (null != user.getNation() && !user.getNation().equals("")) { builder.append(",set nation = "+user.getNation()); } //学历 if (null != user.getEducation() && !user.getEducation().equals("")) { builder.append(",set education = "+user.getEducation()); } //政治面貌 if (null != user.getPoliticaloutlook() && !user.getPoliticaloutlook().equals("")) { builder.append(",set politicaloutlook = "+user.getPoliticaloutlook()); } //健康状态 if (null != user.getHealstats() && !user.getHealstats().equals("")) { builder.append(",set healstats = "+user.getHealstats()); } //身高 if (null != user.getHeight() && !user.getHeight().equals("")) { builder.append(",set height = "+user.getHeight()); } //联系地址 if (null != user.getAddress() && !user.getAddress().equals("")) { builder.append(",set address = "+user.getAddress()); } //身份证地址 if (null != user.getRegistered() && !user.getRegistered().equals("")) { builder.append(",set registered = "+user.getRegistered()); } //修改 // boolean status = userService.updateById(user); boolean status = userService.update(user, Wrappers.update().lambda().in(User::getId,user.getId())); if (status) { if (state == 2) { UserDTO userDTO = new UserDTO(); userDTO.setAccount(user.getAccount()); userDTO.setCardid(user.getCardid()); userDTO.setOldCardid(user1.getCardid()); userDTO.setPassword(user.getPassword()); userDTO.setRealName(user.getRealName()); userDTO.setPhone(user.getPhone()); userDTO.setSex(user.getSex()); userDTO.setAvatar(user.getAvatar()); //推送qfqk myAsyncService.updateUserByAccount(userDTO); } else { myAsyncService.updateUserByQfqk(user); } } //拼接最终的sql String sql = builder.append(" where id = " + user.getId()).toString(); myAsyncService.FTP(sql); //返回 return R.data(200,null,"修改成功!"); } /** * 账号修改 * @param user * @return */ @PostMapping("/update_account") public R updataAccount(@RequestBody User user){ boolean status = false; //校验账户是否重复 User user1 = new User(); user1.setIsDeleted(0); user1.setStatus(1); user1.setAccount(user.getAccount()); List list = userService.list(new QueryWrapper<>(user1)); if (list.size()>0){ throw new ServiceException("账号:["+user.getAccount()+"]已存在!"); } //如果不重复,则进行修改操作 //更新用户账户信息 status = userService.update(user, Wrappers.update().lambda().in(User::getId,user.getId())); // status = userService.updateById(user); if (status){ System.out.println("user = " + user); User user2 = userService.getById(user.getId()); UserDTO userDTO = new UserDTO(); userDTO.setAccount(user.getAccount()); userDTO.setPassword(user2.getPassword()); userDTO.setSecurityId(user2.getId().toString()); userDTO.setRealName(user1.getRealName()); userDTO.setPhone(user2.getPhone()); userDTO.setCardid(user2.getCardid()); userDTO.setSex(user1.getSex()); //异步修改群防群控 myAsyncService.updateUserByAccount(userDTO); } //返回 return R.status(status); } /** * 修改 */ @PostMapping("/updateUserInfo") public R updateUserInfo(@Valid @RequestBody UserVO user) throws Exception { String url = null; if (null != user.getFingerprint() && !user.getFingerprint().equals("")) { if (user.getFingerprint().length() > 100) { //指纹图片上传并返回url String s = uploadBase64String(user); String[] split = s.split(","); user.setFingerprint(split[0]); //内网指纹图片url url = split[1]; } } user.setUpdateTime(new Date()); //更新 userService.updateById(user); //生成签到记录 if (null != user.getCandidateNo() && !user.getCandidateNo().equals("")) { //查询签到记录,如果已有,则更新,没有就新增 SignInRecords signInRecords = new SignInRecords(); signInRecords.setCandidateNo(user.getCandidateNo()); SignInRecords inRecordsServiceOne = signInRecordsService.getOne(Condition.getQueryWrapper(signInRecords)); //如果为null if (null == inRecordsServiceOne) { //查询报名信息 TrainingRegistration trainingRegistration = new TrainingRegistration(); trainingRegistration.setCandidateNo(user.getCandidateNo()); TrainingRegistration one = trainingRegistrationService.getOne(Condition.getQueryWrapper(trainingRegistration)); //新增,数据封装 SignInRecords sign = new SignInRecords(); sign.setCreateTime(new Date()); sign.setUpdateTime(new Date()); sign.setCandidateNo(user.getCandidateNo()); sign.setUserId(user.getId()); sign.setApplyId(one.getId()); sign.setExamId(Long.parseLong(one.getTrainExamId())); //新增 signInRecordsService.save(sign); } else { //更新 inRecordsServiceOne.setUpdateTime(new Date()); signInRecordsService.updateById(inRecordsServiceOne); } } //内网同步 String s1 = "update blade_user set account = " + "'" + user.getCardid() + "'" + ",real_name = " + "'" + user.getRealName() + "'" + ",avatar = " + "'" + user.getAvatar() + "'" + ",sex = " + "'" + user.getSex() + "'" + ",cardid = " + "'" + user.getCardid() + "'" + ",nation = " + "'" + user.getNation() + "'" + ",fingerprint = " + "'" + url + "'" + ",my_picture = " + "'" + user.getMyPicture() + "'" + ",address = " + "'" + user.getAddress() + "'" + ",registered = " + "'" + user.getRegistered() + "'" + ",securitynumber = " + "'" + user.getSecuritynumber() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + ",hold = " + "'" + user.getHold() + "'" + ",cell = " + "'" + user.getCell() + "'" + " " + "where id = " + "'" + user.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); return R.success("修改成功"); } /** * 指纹图片上传 * * @return * @throws Exception */ private String uploadBase64String(User user) throws Exception { //图片上传 BASE64Decoder decoder = new BASE64Decoder(); // 解密 byte[] b = decoder.decodeBuffer(user.getFingerprint()); // 处理数据 for (int i = 0; i < b.length; ++i) { if (b[i] < 0) { b[i] += 256; } } //填写你文件上传的地址以及相应信息 String url = "http://61.131.136.25:2081"; String access = "zhbaadmin"; String secret = "zhbapassword"; String bucket = "zhba"; MinioClient minioClient = MinioClient.builder() .endpoint(url) .credentials(access, secret) .build(); // 检查存储桶是否已经存在 boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build()); if (!isExist) { // 创建一个名为zip的存储桶,用于zip文件。 minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build()); minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucket).build()); } String newName = "upload/picture/f" + UUID.randomUUID().toString().replaceAll("-", "") + ".jpg"; InputStream in = new ByteArrayInputStream(b); String[] split = newName.split("/"); //创建头部信息 Map headers = new HashMap<>(1 << 2); //添加自定义内容类型 headers.put("Content-Type", "application/octet-stream"); //上传 minioClient.putObject( PutObjectArgs.builder().bucket(bucket).object(newName).stream( in, in.available(), -1) .headers(headers) .build()); InputStream inputStream = new ByteArrayInputStream(b); FtpUtil.uploadFile(FtpConfig.ftpHost, ftpPort, FtpConfig.ftpUserName, ftpPassword, ftpPath, "/", split[2], inputStream); in.close(); //外围url String urls = "http://61.131.136.25:2081/zhba/" + newName; //内网 String inUrl = FtpConfig.ip + "/zhba/" + newName; //返回 return urls + "," + inUrl; } /** * 修改发证时间 */ @PostMapping("/updatePaperTime") public R updatePaperTime(@RequestBody User user) { user.setPaperTime(new Date()); user.setUpdateTime(new Date()); userService.updateById(user); String paperTime = null; //发证日期处理 if (user.getPaperTime() == null) { paperTime = null; } else { paperTime = new SimpleDateFormat("yyyy-MM-dd").format(user.getPaperTime()); } //更新制证记录制证状态 AccreditationRecords accreditationRecords = new AccreditationRecords(); accreditationRecords.setUserId(user.getId()); //审核通过的 accreditationRecords.setAuditStatus(2); //未制证的记录 accreditationRecords.setStatus(1); //查询 List list = accreditationRecordsService.list(Condition.getQueryWrapper(accreditationRecords)); if (list.size() > 0) { //排序 List collect = list.stream().sorted(Comparator.comparing(AccreditationRecords::getId).reversed()).collect(Collectors.toList()); //取出第一个 AccreditationRecords accreditationRecords1 = collect.get(0); //修改为已制证状态 accreditationRecords1.setStatus(2); //记录打印时间 accreditationRecords1.setPaperTime(new Date()); //更新 accreditationRecordsService.updateById(accreditationRecords1); //同步 String s1 = "update blade_user set paper_time = " + "'" + paperTime + "'" + ",user_type = " + "'" + user.getUserType() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + " " + "where id = " + "'" + user.getId() + "';" + "update sys_accreditation_records set status = " + "'" + accreditationRecords1.getStatus() + "'" + " " + "where id = " + "'" + accreditationRecords1.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); //返回 return R.success("修改成功"); } String s1 = "update blade_user set paper_time = " + "'" + paperTime + "'" + ",user_type = " + "'" + user.getUserType() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + " " + "where id = " + "'" + user.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); return R.success("修改成功"); } /** * 删除 */ @PostMapping("/remove") @ApiOperationSupport(order = 6) @ApiOperation(value = "删除", notes = "传入id集合") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R remove(@RequestParam String ids) { CacheUtil.clear(USER_CACHE); List list = Arrays.asList(ids.split(",")); list.forEach(id -> { User user = userService.getById(id); User user1 = new User(); user1.setId(user.getId()); // user1.setCardid(user.getCardid()); user1.setIsDeleted(1); //qfqk 同步 myAsyncService.deleteUserByQfqk(user1); //内网同步 String s1 = "update blade_user set is_deleted = 1 where id = " + "'" + id + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); }); return R.status(userService.removeUser(ids)); } /** * 设置菜单权限 */ @PostMapping("/grant") @ApiOperationSupport(order = 7) @ApiOperation(value = "权限设置", notes = "传入roleId集合以及menuId集合") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R grant(@ApiParam(value = "userId集合", required = true) @RequestParam String userIds, @ApiParam(value = "roleId集合", required = true) @RequestParam String roleIds) { boolean temp = userService.grant(userIds, roleIds); return R.status(temp); } /** * 重置密码 */ @PostMapping("/reset-password") @ApiOperationSupport(order = 8) @ApiOperation(value = "初始化密码", notes = "传入userId集合") //@PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R resetPassword(@ApiParam(value = "userId集合", required = true) @RequestParam String userIds) { boolean temp = userService.resetPassword(userIds); return R.status(temp); } /** * 修改密码 */ @PostMapping("/update-password") @ApiOperationSupport(order = 9) @ApiOperation(value = "修改密码", notes = "传入密码") public R updatePassword(BladeUser user, @ApiParam(value = "旧密码", required = true) @RequestParam String oldPassword, @ApiParam(value = "新密码", required = true) @RequestParam String newPassword, @ApiParam(value = "新密码", required = true) @RequestParam String newPassword1) { boolean temp = userService.updatePassword(user.getUserId(), oldPassword, newPassword, newPassword1); return R.status(temp); } /** * 修改基本信息 */ @PostMapping("/update-info") @ApiOperationSupport(order = 10) @ApiOperation(value = "修改基本信息", notes = "传入User") public R updateInfo(@Valid @RequestBody User user) { CacheUtil.clear(USER_CACHE); return R.status(userService.updateUserInfo(user)); } /** * 用户列表 */ @GetMapping("/user-list") @ApiOperationSupport(order = 11) @ApiOperation(value = "用户列表", notes = "传入user") public R> userList(User user, BladeUser bladeUser) { QueryWrapper queryWrapper = Condition.getQueryWrapper(user); List list = userService.list((!AuthUtil.isAdministrator()) ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper); return R.data(list); } /** * 导入用户 */ @PostMapping("import-user") @ApiOperationSupport(order = 12) @ApiOperation(value = "导入用户", notes = "传入excel") public R importUser(MultipartFile file, Integer isCovered, String deptId) { UserImporter userImporter = new UserImporter(userService, false, deptId); ExcelUtil.save(file, userImporter, UserExcel.class); return R.success("操作成功"); } /** * 保安员证二维码批量生成 */ @PostMapping("import-qrCode") @ApiOperationSupport(order = 12) @ApiOperation(value = "导入用户", notes = "传入excel") public R importQrCode(@RequestParam("file") MultipartFile file, Integer isCovered, String deptId) { QrCodeImporter qrCodeImporter = new QrCodeImporter(userService, false, deptId); ExcelUtil.save(file, qrCodeImporter, QrCodeExcel.class); return R.success("操作成功"); } /** * 导入保安员 */ @PostMapping("import-security") @ApiOperationSupport(order = 12) @ApiOperation(value = "导入用户", notes = "传入excel") public R importSecurity(MultipartFile file, Integer isCovered, String deptId) { SecurityImporter securityImporter = new SecurityImporter(userService, false, deptId); ExcelUtil.save(file, securityImporter, SecurityExcel.class); return R.success("操作成功"); } /** * 导入保安员(test) */ @PostMapping("import-security-test") @ApiOperationSupport(order = 12) @ApiOperation(value = "导入用户", notes = "传入excel") public R importSecurityTest(MultipartFile file, Integer isCovered, String deptId) { SecurityImporterTest securityImporter = new SecurityImporterTest(userService); ExcelUtil.save(file, securityImporter, SecurityExcel.class); return R.success("操作成功"); } /** * 导入持枪保安员 */ @PostMapping("import-securityYy") @ApiOperationSupport(order = 12) @ApiOperation(value = "导入用户", notes = "传入excel") public R importSecurityYy(MultipartFile file, Integer isCovered, String deptId) { SecurityYyImporter securityYyImporter = new SecurityYyImporter(userService, false, deptId); ExcelUtil.save(file, securityYyImporter, SecurityYyExcel.class); return R.success("操作成功"); } // /** // * 导出用户 // */ // @GetMapping("export-user") // @ApiOperationSupport(order = 13) // @ApiOperation(value = "导出用户", notes = "传入user") // public void exportUser(@ApiIgnore @RequestParam Map user, BladeUser bladeUser, HttpServletResponse response) { // QueryWrapper queryWrapper = Condition.getQueryWrapper(user, User.class); // if (!AuthUtil.isAdministrator()) { // queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()); // } // queryWrapper.lambda().eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED); // List list = userService.exportUser(queryWrapper); // ExcelUtil.export(response, "用户数据" + DateUtil.time(), "用户数据表", list, UserExcel.class); // } /** * 导出模板 */ @GetMapping("export-template") @ApiOperationSupport(order = 14) @ApiOperation(value = "导出模板") public void exportUser(HttpServletResponse response) { List list = new ArrayList<>(); ExcelUtil.export(response, "用户数据模板", "用户数据表", list, UserExcel.class); } /** * 导出持枪保安模板 */ @GetMapping("export-templateYy") @ApiOperationSupport(order = 14) @ApiOperation(value = "导出模板") public void exportUserYy(HttpServletResponse response) { List list = new ArrayList<>(); ExcelUtil.export(response, "持枪保安员数据模板", "持枪保安员数据表", list, SecurityYyExcel.class); } /** * 保安员导出模板 */ @GetMapping("export-template-security") @ApiOperationSupport(order = 14) @ApiOperation(value = "导出模板") public void exportSecurity(HttpServletResponse response) throws IOException { List list = new ArrayList<>(); SecurityExcel securityExcel = new SecurityExcel(); securityExcel.setDeptId("xxx保安公司"); securityExcel.setRealName("张三"); securityExcel.setPhone("12345678901"); securityExcel.setSex("男"); securityExcel.setCardid("360XXX19XXXXXX****"); securityExcel.setNation("汉"); securityExcel.setRegistered("江西省南昌市******"); // securityExcel.setHold("是"); securityExcel.setSecuritynumber("赣洪202100001"); list.add(securityExcel); SecurityExcel securityExcel1 = new SecurityExcel(); securityExcel1.setDeptId("xxx保安公司"); securityExcel1.setRealName("李四"); securityExcel1.setPhone("12345678901"); securityExcel1.setSex("女"); securityExcel1.setCardid("360XXX19XXXXXX****"); securityExcel1.setNation("汉"); securityExcel1.setRegistered("江西省南昌市******"); // securityExcel1.setHold("否"); securityExcel1.setSecuritynumber(""); list.add(securityExcel1); 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(), SecurityExcel.class).sheet("保安员数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list); } catch (Throwable var6) { throw var6; } // ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class); } /** * 持枪保安员导出模板 */ @GetMapping("export-template-securityYy") @ApiOperationSupport(order = 14) @ApiOperation(value = "导出模板") public void exportSecurityYy(HttpServletResponse response) throws IOException { List list = new ArrayList<>(); SecurityYyExcel securityExcel = new SecurityYyExcel(); securityExcel.setDeptId("xxx保安公司"); securityExcel.setRealName("张三"); securityExcel.setPhone("12345678901"); securityExcel.setSex("男"); securityExcel.setCardid("360XXX19XXXXXX****"); securityExcel.setNation("汉"); securityExcel.setRegistered("江西省南昌市******"); // securityExcel.setHold("是"); securityExcel.setSecuritynumber("赣洪202100001"); list.add(securityExcel); SecurityYyExcel securityExcel1 = new SecurityYyExcel(); securityExcel1.setDeptId("xxx保安公司"); securityExcel1.setRealName("李四"); securityExcel1.setPhone("12345678901"); securityExcel1.setSex("女"); securityExcel1.setCardid("360XXX19XXXXXX****"); securityExcel1.setNation("汉"); securityExcel1.setRegistered("江西省南昌市******"); // securityExcel1.setHold("否"); securityExcel1.setSecuritynumber(""); list.add(securityExcel1); 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(), SecurityYyExcel.class).sheet("保安员数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list); } catch (Throwable var6) { throw var6; } // ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class); } /** * 第三方注册用户 */ @PostMapping("/register-guest") @ApiOperationSupport(order = 15) @ApiOperation(value = "第三方注册用户", notes = "传入user") public R registerGuest(User user, Long oauthId) { return R.status(userService.registerGuest(user, oauthId)); } /** * 配置用户平台信息 */ @PostMapping("/update-platform") @ApiOperationSupport(order = 16) @ApiOperation(value = "配置用户平台信息", notes = "传入user") public R updatePlatform(Long userId, Integer userType, String userExt) { return R.status(userService.updatePlatform(userId, userType, userExt)); } /** * 查看平台详情 */ @ApiOperationSupport(order = 17) @ApiOperation(value = "查看平台详情", notes = "传入id") @GetMapping("/platform-detail") @PreAuth(RoleConstant.HAS_ROLE_ADMIN) public R platformDetail(User user) { return R.data(userService.platformDetail(user)); } /** * 用户列表查询 */ @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "人员姓名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "deptName", value = "部门名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "postName", value = "职位名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "current", value = "当前页数", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "size", value = "每页数量", paramType = "query", dataType = "int") }) @ApiOperationSupport(order = 18) @ApiOperation(value = "用户列表查询", notes = "用户列表查询") @GetMapping("/search/user") public R> userSearch(@ApiIgnore UserVO user, @ApiIgnore Query query) { return R.data(userService.selectUserSearch(user, query)); } /** * 自定义用户列表(只有保安员) */ @GetMapping("/page-security") public R> pageSecurity(@ApiIgnore User user, Query query) { IPage pages = userService.selectUserPageSecurity(Condition.getPage(query), user); return R.data(UserWrapper.build().pageVO(pages)); } /** * 自定义用户列表(只有保安员) */ @GetMapping("/page-security-unit") public List pageSecurityUnit(@ApiIgnore User user, Query query) { List pages = userService.selectUserPageSecurityUnit(Condition.getPage(query), user); return pages; } /** * 自定义用户列表(只有保安员) */ @GetMapping("/page-security-units") public R pageSecurityUnits(@ApiIgnore User user, Query query) { List pages = userService.selectUserPageSecurityUnit(Condition.getPage(query), user); return R.data(pages); } /** * 保安员列表,帅选无保安证 */ @GetMapping("/page-security-apply") public R> pageSecurityApply(@ApiIgnore UserVO user, Query query) { IPage pages = userService.selectUserPageSecurityApply(Condition.getPage(query), user); return R.data(pages); } /** * 保安员列表树,帅选无保安证,下拉tree */ @GetMapping("/security-apply-tree") public R> securityApplyTree(UserVO user) { List tree = userService.getSecurityApplyTree(user); System.out.println("tree = " + tree); return R.data(tree); } /** * 保安员列表树,帅选无保安证,下拉tree */ @GetMapping("/security-dispatcher-tree") public R> getSecurityDispatcherTree(UserVO user) { List tree = userService.getSecurityDispatcherTree(user); return R.data(tree); } /** * 自定义用户列表(只有保安员) */ @GetMapping("/selectInr") public R selectInr(String deptid) { List> list = userService.selectInr(deptid); return R.data(list); } @GetMapping("/zc") public R zc(String username, String password, String phone) { User user = new User(); user.setTenantId("000000"); user.setAccount(username); user.setPassword(DigestUtil.encrypt(password)); user.setDeptId("1426355050199945218"); user.setRoleId("1428177141018771458"); user.setPhone(phone); userService.saveOrUpdate(user); return R.success("注册成功"); } /** * 保安员新增 */ @PostMapping("/securitySave") @Transactional(rollbackFor = Exception.class) public R securitySave(@Valid @RequestBody Map userMap) throws Exception { //获取user User user = JSON.parseObject(JSON.toJSONString(userMap.get("user")), User.class); //分配保安角色 Role role = new Role(); role.setRoleAlias("保安"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); user.setDispatch("1"); user.setExaminationType("0"); user.setAccount(user.getCardid()); user.setStatus(1); User user1 = new User(); user1.setIsDeleted(0); user1.setStatus(1); user1.setAccount(user.getCardid()); List list = userService.list(Condition.getQueryWrapper(user1)); if (list.size() > 0 && Func.isEmpty(user.getId())) { if (null != user.getCell() && !user.getCell().equals("")) { if (user.getCell().equals("2")) { list.forEach(user2 -> { //判断是否在本单位,如果是本单位,则不能再次新增 if (!user2.getDeptId().equals(user.getDeptId())) { user2.setStatus(2); //先将原有人员离职 cell 1:手动录入 2:自动录入 user2.setUpdateTime(new Date()); userService.updateById(user2); //内网同步 String s1 = "update blade_user set status = " + user2.getStatus() + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" + " where id = " + "'" + user2.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); //人员离职后修改派遣记录,修改从业记录 updateUserDispatcherExp(user2); } else { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } }); } else { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } } else { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } } //判断是否持证 boolean state = false; if (user.getHold().equals("1")){ //持证,校验保安证编号是否合法 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setIdCardNo(user.getCardid()); List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); if (securityPaperList.size()>0){ //遍历 for (SecurityPaper paper : securityPaperList) { if (paper.getNumber().equals(user.getSecuritynumber())){ state = true; } } if (!state){ user.setHold("2"); user.setSecuritynumber(null); } }else { user.setHold("2"); user.setSecuritynumber(null); } }else { state = true; } String url = ""; if (null != user.getFingerprint() && !user.getFingerprint().equals("")) { if (user.getFingerprint().length() > 100) { String s = uploadBase64String(user); String[] split = s.split(","); user.setFingerprint(split[0]); url = split[1]; } } //密码加密 if (Func.isNotEmpty(user.getCardid())) { // user.setPassword(DigestUtil.encrypt(user.getPassword())); //取身份证号码后6位作为密码 user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6))); } user.setCreateTime(new Date()); user.setTenantId("000000"); //用户新增 boolean status = userService.save(user); //从业记录新增 Experience experience = new Experience(); String rtime; String paperTime; if (user.getRtime() == null) { rtime = null; } else { rtime = new SimpleDateFormat("yyyy-MM-dd").format(user.getRtime()); experience.setEntrytime(user.getRtime()); } Dept dept = iDeptService.getById(user.getDeptId()); experience.setCardid(user.getCardid()); experience.setSecurityid(user.getId().toString()); experience.setCompanyname(dept.getDeptName()); experience.setName(user.getRealName()); experience.setPost("保安员"); experienceService.save(experience); //头像 if (null != user.getAvatar() && !user.getAvatar().equals("")) { user.setAvatar(FtpConfig.ip + user.getAvatar().substring(26)); } //数据推送 //1.群访群控数据推送(异步) if (status) { myAsyncService.qfqkUserSave(user); //2.内网数据推送 String s = "insert into blade_user(" + "id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," + "role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," + "politicaloutlook,healstats,height,address,registered,rtime," + "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch,guncode,create_time,cell) " + "values(" + "'" + user.getId() + "'" + "," + "'" + user.getTenantId() + "'" + "," + "'" + user.getAccount() + "'" + "," + "'" + user.getPassword() + "'" + "," + "'" + user.getName() + "'" + "," + "'" + user.getRealName() + "'" + "," + "'" + user.getAvatar() + "'" + "," + "'" + user.getEmail() + "'" + "," + "'" + user.getPhone() + "'" + "," + "'" + user.getSex() + "'" + "," + "'" + user.getRoleId() + "'" + "," + "'" + user.getDeptId() + "'" + "," + "'" + user.getCardid() + "'" + "," + "'" + user.getNativeplace() + "'" + "," + "'" + user.getNation() + "'" + "," + "'" + url + "'" + "," + "'" + user.getEducation() + "'" + "," + "'" + user.getPoliticaloutlook() + "'" + "," + "'" + user.getHealstats() + "'" + "," + "'" + user.getHeight() + "'" + "," + "'" + user.getAddress() + "'" + "," + "'" + user.getRegistered() + "'" + "," + "'" + rtime + "'" + "," + "'" + user.getSecuritynumber() + "'" + "," + "'" + user.getHold() + "'" + "," + "'" + user.getJurisdiction() + "'" + "," + "'" + user.getExaminationType() + "'" + "," + "'" + user.getStatus() + "'" + "," + "'" + user.getIsDeleted() + "'" + "," + "'" + user.getDispatch() + "'" + "," + "'" + user.getGuncode() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + "," + "'" + user.getCell() + "'" + ");" + "insert into sys_experience(id,name,post,entryTime," + "cardId,companyname,securityId) " + "values(" + "'" + experience.getId() + "'" + "," + "'" + experience.getName() + "'" + "," + "'" + experience.getPost() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" + "," + "'" + experience.getCardid() + "'" + "," + "'" + experience.getCompanyname() + "'" + "," + "'" + experience.getSecurityid() + "'" + ")"; myAsyncService.FTP(s); } //获取从业记录 // List experiences = (List) userMap.get("userPractitionersInfo"); // if (experiences.size()>0){ // int count = 0; // for (int i = 0; i < experiences.size(); i++) { // Experience e = JSON.parseObject(JSON.toJSONString(experiences.get(i)), Experience.class); // e.setSecurityid(user.getId().toString()); // experienceService.save(e); // count++; // } // if (count < 1) { // return R.status(false); // } // } //判断是否持证是否为空 if (!state) { return R.data(201, null, "保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); } return R.data(200,null,"新增成功!"); } /** * 保安员新增(外网不能存敏感数据) * @since 2022-04-26 * @param userMap */ @PostMapping("/securitySaves") @Transactional(rollbackFor = Exception.class) public R securitySaves(@Valid @RequestBody Map userMap) throws Exception { //获取user User user = JSON.parseObject(JSON.toJSONString(userMap.get("user")), User.class); //分配保安角色 Role role = new Role(); role.setRoleAlias("保安"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); user.setDispatch("1"); //待审查 user.setExaminationType("2"); String realName = user.getRealName(); String cardid = user.getCardid(); // user.setAccount(user.getRealName()); user.setAccount(realName.substring(0,1)+cardid.substring(cardid.length()-4)); user.setStatus(1); //密码加密 if (Func.isNotEmpty(user.getCardid())) { //取身份证号码后6位作为密码 user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6))); } user.setCreateTime(new Date()); user.setTenantId("000000"); //用户新增 // boolean status = userService.save(user); User user1 = Objects.requireNonNull(BeanUtil.copy(user,User.class)); //头像 if (null != user.getAvatar() && !user.getAvatar().equals("")) { user1.setAvatar(FtpConfig.ip +"/"+ user.getAvatar().substring(26)); } //指纹 String url = ""; if (null != user.getFingerprint() && !user.getFingerprint().equals("")) { if (user.getFingerprint().length() > 100) { String s = uploadBase64String(user); String[] split = s.split(","); user.setFingerprint(split[0]); url = split[1]; user1.setFingerprint(url); } } //生成随机数 String uuid = UUID.randomUUID().toString(); //将 user 存入 redis redisTemplate.opsForValue().set(uuid,JSON.toJSONString(user)); //user1 临时设置uuid 到 reason_for_leav 离职原因字段 user1.setReasonForLeav(uuid); //数据推送 Map map = new HashMap<>(1); map.put("user",user1); myAsyncService.FTPObject(map); // int count = 0; // int flag = 1; // Result result0 = new Result(); // //调用ftp获取返回数据 // while (true){ // System.out.println("用户新增开始接收消息......................"); // Thread.sleep(2000); // //调用ftp获取返回数据 // result0 = Monitor.isFTPFileExist(uuid); // System.out.println("result0 ftp 返回结果 = " + result0); // //如果返回true,就退处 // if (result0.getCode()==200){ // break; // }else{ // //计数 // count++; // //如果超过60s 没有读取到,则退出 // if (count == 20) { // break; // } // } // } // // //将不能导入的保安员账号存起来 // List errorList = new ArrayList<>(); // //保安员证编号不符的保安员信息存入集合 // List securityInvalidList = new ArrayList<>(); // //导入状态,默认为true ,如果有一个出现问题则为 false // AtomicBoolean status = new AtomicBoolean(true); // AtomicBoolean securityInvalidStatus = new AtomicBoolean(true); // if (null!=result0){ // Result result = result0.getData().get(0); // //用户数处理 // User users = handlerUserInfo(uuid); // System.out.println("用户数据处理---------------"); // System.out.println("用户数据 = " + users); // //判断结果 // if (result.getCode()==200){ // //新增 // users.setId(result.getUserId()); // users.setStatus(1); // //插入数据库 // boolean save = userService.save(users); // if (save){ // //异步同步到群防群控 // myAsyncService.qfqkUserSave(users); // } // }else if (result.getCode()==201) { // //修改 // users.setId(result.getUserId()); // //先查询当前库是否有改用户? // User user2 = userService.getById(result.getUserId()); // if (null!=user2) { // //数据修改 // boolean b = userService.updateById(users); // if (b) { // //异步同步到群防群控 // myAsyncService.updateUserByQfqk(users); // } // }else { // //新增 // boolean save = userService.save(users); // if (save){ // //异步同步到群防群控 // myAsyncService.qfqkUserSave(users); // } // } // }else if (result.getCode()==203){ // //保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请! 用户为新增 // //新增 // users.setId(result.getUserId()); // //插入数据库 // boolean save = userService.save(users); // if (save) { // //异步同步到群防群控 // myAsyncService.qfqkUserSave(users); // } // securityInvalidStatus.set(false); // //保安证编号不匹配 // securityInvalidList.add(user.getCardid()); // }else if (result.getCode()==204){ // //保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请! 内网用户已存在情况 // users.setId(result.getUserId()); // //先查询当前库是否有改用户? // User user2 = userService.getById(result.getUserId()); // //判断 // if (null!=user2) { // //修改 // //数据修改 // boolean b = userService.updateById(users); // if (b){ // //异步同步到群防群控 // myAsyncService.updateUserByQfqk(users); // } // }else { // //新增 // boolean save = userService.save(users); // if (save){ // //异步同步到群防群控 // myAsyncService.qfqkUserSave(users); // } // } // securityInvalidStatus.set(false); // //保安证编号不匹配 // securityInvalidList.add(user.getCardid()); // }else { // status.set(false); // //已在其他单位存在 // errorList.add(user.getCardid()); // } // } //如果所有数据导入有一个异常 // StringBuilder errorBuilder = new StringBuilder(); // if (!status.get()){ // String errorAccount = StringUtils.join(errorList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); // } // //抛出异常 // if (errorBuilder.length()>0){ // throw new org.springblade.core.log.exception.ServiceException(errorBuilder.toString()); // } // // if (!securityInvalidStatus.get()){ //// return R.data(201, null, "保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); // return R.data(201, null, "保安证编号不匹配,请核实!"); // } return R.data(200, null, "新增成功!"); } /** * 修改派遣记录,修改从业记录 * * @param user */ private void updateUserDispatcherExp(User user) { //修改派遣状态 user.setDispatch("1"); //同时将派遣记录中的派遣状态修改 //查询派遣记录(还在派遣中的) Dispatcher dispatcher = new Dispatcher(); dispatcher.setUserIds(user.getId().toString()); dispatcher.setStatus(0); List dispatcherList = dispatcherService.list(Condition.getQueryWrapper(dispatcher)); if (dispatcherList.size() > 0) { dispatcherList.forEach(dispatcher1 -> { dispatcher1.setStatus(1); dispatcher1.setUpdateTime(new Date()); String s1 = "update sys_dispatcher set status = " + "'" + dispatcher1.getStatus() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher1.getUpdateTime()) + "'" + " " + "where id = " + "'" + dispatcher1.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); }); } //查询当前用户是否有从业记录,没有的话新增,有就更新 //根据公司名查询单位 Dept dept = iDeptService.getById(user.getDeptId()); Experience experience = new Experience(); experience.setCompanyname(dept.getDeptName()); //按id降序 List list = experienceService.list(Condition.getQueryWrapper(experience).orderByDesc("id")); if (list.size() > 0) { //如果有多条取第一条更新 Experience experience1 = list.get(0); //设置离职时间 experience1.setDeparturetime(new Date()); //更新从业记录信息 experienceService.updateById(experience1); //数据同步 String s1 = "update sys_experience set departureTime = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience1.getDeparturetime()) + "'" + " " + "where id = " + "'" + experience1.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.FTP(s1); } else { //新增 if (null != user.getRtime()) { experience.setEntrytime(user.getRtime()); } else { experience.setEntrytime(new Date()); } experience.setDeparturetime(new Date()); experience.setName(user.getRealName()); if (null != user.getReasonForLeav() && !user.getReasonForLeav().equals("")) { experience.setLeaving(user.getReasonForLeav()); } experience.setCardid(user.getCardid()); experience.setSecurityid(user.getId().toString()); //新增 experienceService.save(experience); //内网同步 String s = "insert into sys_experience(id,name,entryTime,departureTime,leaving,cardId,companyname,securityId) " + "values(" + "'" + experience.getId() + "'" + "," + "'" + experience.getName() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getDeparturetime()) + "'" + "," + "'" + experience.getLeaving() + "'" + "," + "'" + experience.getCardid() + "'" + "," + "'" + experience.getCompanyname() + "'" + "," + "'" + experience.getSecurityid() + "'" + ")"; myAsyncService.FTP(s); } } /** * 保安员信息 * * @param user * @return */ @GetMapping("/getUserDetails") public R getUserDetails(User user) { return R.data(userService.getUserDetails(user)); } /** * @param type 1:保安 2:公安 * @param deptid * @param jurisdiction * @return */ @GetMapping("/seleL") public R seleL(String type, String deptid, String jurisdiction, Long userId) { List> list = userService.seleL(type, deptid, jurisdiction, userId); return R.data(list); } /** * 用户详情 * * @param user * @return */ @GetMapping("/details") public R details(User user) { User user1 = userService.getById(user.getId()); if (null != user1.getFingerprint() && !user1.getFingerprint().equals("")) { //url 转base64 String base64Url = ImageUtils.imageUrlToBase64(user1.getFingerprint()); user1.setFingerprint(base64Url); } return R.data(user1); } /** * 保安员导出 * * @param response * @param user 查询条件 */ @GetMapping("export-security-info") public void exportSecurityInfo(HttpServletResponse response, UserVO user) throws IOException { List list = userService.exportSecurityInfo(user); 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(), ExportSecurityExcel.class).sheet("保安员数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list); } catch (Throwable var6) { throw var6; } // ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class); } /** * 保安员账号校验 * * @param user * @return */ @GetMapping("/checkAccount") public void checkAccount(User user) { //根据身份证号查询用户 User user1 = new User(); user1.setAccount(user.getCardid()); user1.setIsDeleted(0); user1.setStatus(1); User user2 = userService.getOne(Condition.getQueryWrapper(user1)); if (null != user2) { //判断是单位否一致 if (null != user.getDeptId() && !user.getDeptId().equals("")) { if (!user2.getDeptId().equals(user.getDeptId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已在其他单位录入!", user.getCardid())); } else { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getCardid())); } } else { //没有传 deptId 的情况 throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getCardid())); } } } /** * 年龄分布查询 * * @param user * @return */ @PostMapping("/getAgeStatistics") public R getAgeStatistics(UserVO user) { return R.data(userService.getAgeStatistics(user)); } /** * 查询登录密码还是 123456 的单位信息 * * @return */ @GetMapping("/getNotUpdatePwdInfo") public R getNotUpdatePwdInfo() { return R.data(userService.getNotUpdatePwdInfo()); } /** * 用户手动离职(用户数据未同步成功的) * @param user * @return */ @GetMapping("/leave") public void leave(User user){ user.setStatus(2); String s1 = "update blade_user set status = " + "'" + user.getStatus() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "'" + " " + "where cardid = " + "'" + user.getCardid() + "'"; myAsyncService.FTP(s1); } }