package com.ruoyi.web.controller.station; import java.util.*; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.UrlConstant; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.station.domain.MjFingerprintReadHead; import com.ruoyi.station.domain.MjHeadsUsers; import com.ruoyi.station.domain.MjVisitLog; import com.ruoyi.station.mapper.MjDataPushLogMapper; import com.ruoyi.station.model.TmpDataModel; import com.ruoyi.station.model.WorkUserModel; import com.ruoyi.station.service.*; import com.ruoyi.system.domain.SysUser; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.station.domain.MjWorkUser; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; /** * 工作人员Controller * * @author ruoyi * @date 2020-08-07 */ @Controller @RequestMapping("/station/workUser") public class MjWorkUserController extends BaseController { private String prefix = "station/workUser"; @Autowired private IMjWorkUserService mjWorkUserService; @Autowired private IMjWorkUserPushService mjWorkUserPushService; @Autowired private IMjWorkOrderService mjWorkOrderService; @Autowired private IMjDataPushLogService mjDataPushLogService; @Autowired private IMjVisitLogService mjVisitLogService; @Autowired private IMjFingerprintReadHeadService headService; @Autowired private IMjFingerprintService fingerprintService; @RequiresPermissions("station:workUser:view") @GetMapping() public String workUser() { return prefix + "/workUser"; } /** * 查询工作人员列表 */ @RequiresPermissions("station:workUser:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(MjWorkUser mjWorkUser) { startPage(); List list = mjWorkUserService.selectMjWorkUserList(mjWorkUser); return getDataTable(list); } /** * 导出工作人员列表 */ @RequiresPermissions("station:workUser:export") @Log(title = "工作人员", businessType = BusinessType.EXPORT) @PostMapping("/export") @ResponseBody public AjaxResult export(MjWorkUser mjWorkUser) { List list = mjWorkUserService.selectMjWorkUserList(mjWorkUser); ExcelUtil util = new ExcelUtil(MjWorkUser.class); return util.exportExcel(list, "workUser"); } @Log(title = "工作人员", businessType = BusinessType.IMPORT) @RequiresPermissions("station:workUser:import") @PostMapping("/importData") @ResponseBody public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { ExcelUtil util = new ExcelUtil(MjWorkUser.class); List userList = util.importExcel(file.getInputStream()); String operName = ShiroUtils.getSysUser().getLoginName(); String message = mjWorkUserService.importUser(userList, updateSupport, operName); return AjaxResult.success(message); } @RequiresPermissions("station:workUser:view") @GetMapping("/importTemplate") @ResponseBody public AjaxResult importTemplate() { ExcelUtil util = new ExcelUtil(MjWorkUser.class); return util.importTemplateExcel("用户数据"); } /** * 新增工作人员 */ @GetMapping("/add") public String add() { return prefix + "/add"; } /** * 新增保存工作人员 */ @RequiresPermissions("station:workUser:add") @Log(title = "工作人员", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody public AjaxResult addSave(MjWorkUser mjWorkUser) { return toAjax(mjWorkUserService.insertMjWorkUser(mjWorkUser)); } /** * 修改工作人员 */ @GetMapping("/edit/{id}") public String edit(@PathVariable("id") Long id, ModelMap mmap) { MjWorkUser mjWorkUser = mjWorkUserService.selectMjWorkUserById(id); mmap.put("mjWorkUser", mjWorkUser); return prefix + "/edit"; } /** * 修改保存工作人员 */ @RequiresPermissions("station:workUser:edit") @Log(title = "工作人员", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody public AjaxResult editSave(MjWorkUser mjWorkUser) { return toAjax(mjWorkUserService.updateMjWorkUser(mjWorkUser)); } /** * 删除工作人员 */ @RequiresPermissions("station:workUser:remove") @Log(title = "工作人员", businessType = BusinessType.DELETE) @PostMapping( "/remove") @ResponseBody public AjaxResult remove(String ids) { List heads = headService.selectNewHead(); String[] strings = Convert.toStrArray(ids); for (String string : strings) { for(MjFingerprintReadHead head : heads){ try { quXiao(string,head); } catch (Exception e){ } } } return toAjax(mjWorkUserService.deleteMjWorkUserByIds(ids)); } public void quXiao(String id,MjFingerprintReadHead head){ Thread t = new Thread(new Runnable(){ public void run(){ if(StringUtils.isNotEmpty(head.getIpOrOther()) && StringUtils.isNotEmpty(head.getPort())) { mjWorkUserPushService.removeFingerTmp(id.toString(), head.getIpOrOther(), head.getPort()); } } }); } @Log(title = "推送用户信息", businessType = BusinessType.OTHER) @PostMapping("/pushUserInfo") @ResponseBody public AjaxResult pushUserInfo(Long id, Integer fingerprint) { if(id == null) { return AjaxResult.error("未获取到id,请联系管理员!"); } MjWorkUser mjWorkUser = mjWorkUserService.selectMjWorkUserById(id); if(mjWorkUser == null) { return AjaxResult.error("未获取到用户信息!"); } Integer code = mjWorkUserPushService.addUser(mjWorkUser, fingerprint); if(code != 0) { return AjaxResult.error("信息推送失败,请联系管理员!"); } return AjaxResult.success(); } @Log(title = "获取用户指纹信息", businessType = BusinessType.OTHER) @PostMapping("/getFingerPrint") @ResponseBody public AjaxResult getFingerPrint(Long id, Integer fingerIndex) { if(id == null) { return AjaxResult.error("未获取到id,请联系管理员!"); } Integer code = mjWorkUserPushService.getFingerPrint(id, fingerIndex); if(code == 2) { return AjaxResult.error("指纹重复!"); } if(code != 0) { return AjaxResult.error("获取指纹信息失败!"); } return AjaxResult.success(); } @Log(title = "获取用户及时间", businessType = BusinessType.OTHER) @PostMapping("/getUserAndTime") @ResponseBody public AjaxResult getUserAndTime() { Map map = new HashMap<>(); SysUser user = ShiroUtils.getSysUser(); String date = DateUtils.getTime(); map.put("user", user); map.put("time", date); return AjaxResult.success(map); } @Log(title = "获取工作区人数", businessType = BusinessType.OTHER) @PostMapping("/getWorkNum") @ResponseBody public AjaxResult getWorkNum() { Integer count = mjWorkUserService.selectWorkUserCount(); return AjaxResult.success(count); } /** * 获取用户授权方式 * @return */ @Log(title = "获取用户授权方式", businessType = BusinessType.OTHER) @PostMapping("/getWorkUserAuthorizationType") @ResponseBody public AjaxResult getWorkUserAuthorizationType() { List mjWorkUserList = mjWorkUserService.selectMjWorkUserList(null); Map map = mjWorkUserService.getWorkUserAuthorizationType(mjWorkUserList); if(map == null) { return AjaxResult.error(); } return AjaxResult.success(map); } /** * 获取授权总次数 * @return */ @Log(title = "获取授权总次数", businessType = BusinessType.OTHER) @PostMapping("/getAuthCount") @ResponseBody public AjaxResult getAuthCount() { int authCount = mjDataPushLogService.getAuthCount(); return AjaxResult.success(authCount); } /** * 授权数据统计-》授权方式 * @return */ @Log(title = "授权数据统计-》授权方式", businessType = BusinessType.OTHER) @PostMapping("/getAuthDataType") @ResponseBody public AjaxResult getAuthDataType() { Map map = mjDataPushLogService.getAuthDataType(); if(map == null) { return AjaxResult.error(); } return AjaxResult.success(map); } /** * 门禁开启总次数 * @return */ @Log(title = "门禁开启总次数", businessType = BusinessType.OTHER) @PostMapping("/getMjOpenCount") @ResponseBody public AjaxResult getMjOpenCount() { int count = mjVisitLogService.selectVisitLogCount(); return AjaxResult.success(count); } /** * 门禁开启数据统计-》授权方式 * @return */ @Log(title = "授权数据统计-》授权方式", businessType = BusinessType.OTHER) @PostMapping("/getMjOpenAuthType") @ResponseBody public AjaxResult getMjOpenAuthType() { Map map = mjVisitLogService.getMjOpenAuthType(); if(map == null) { return AjaxResult.error(); } return AjaxResult.success(map); } /** * 工作人员记录 * @return */ @Log(title = "工作人员记录", businessType = BusinessType.OTHER) @PostMapping("/getUserWorkLog") @ResponseBody public AjaxResult getUserWorkLog() { List mjVisitLogList = mjVisitLogService.selectVisitLog(); return AjaxResult.success(mjVisitLogList); } @Log(title = "从指纹读头获取用户信息", businessType = BusinessType.OTHER) @PostMapping("/getUsers") @ResponseBody public AjaxResult getUsers(String id) { if(id == null) { return AjaxResult.error("未获取到id,请联系管理员!"); } Integer code = mjWorkUserPushService.getUsers(id); if(code != 0) { return AjaxResult.error("获取用户信息失败!"); } return AjaxResult.success("导入成功!"); } /** * 添加指纹索引 */ @GetMapping("/addFingerIndex") public String addFingerIndex(String id, ModelMap mmap) { mmap.put("id", id); return prefix + "/fingerAdd"; } /** * 从读头清除用户信息 * @param fingerprintReadHead * @return */ @PostMapping("/removeUserInfoFromFingerHead") @ResponseBody public AjaxResult removeUserInfoFromFingerHead(MjFingerprintReadHead fingerprintReadHead) { if(fingerprintReadHead == null) { return AjaxResult.error("未获取到读头信息,请联系管理员!"); } Integer code = mjWorkUserPushService.removeUserInfoFromFingerHead(fingerprintReadHead); if(code != 0) { return AjaxResult.error("清除用户信息失败,请联系管理员!"); } return AjaxResult.success("清除成功用户成功!"); } /** * 从读头清除用户指纹信息 * @param fingerprintReadHead * @return */ @PostMapping("/removeUserTmp") @ResponseBody public AjaxResult removeUserTmp(MjFingerprintReadHead fingerprintReadHead) { if(fingerprintReadHead == null) { return AjaxResult.error("未获取到读头信息,请联系管理员!"); } Integer code = mjWorkUserPushService.removeUserTmp(fingerprintReadHead); if(code == 1) { return AjaxResult.error("清除用户信息失败,请联系管理员!"); }else if(code ==2) { return AjaxResult.error("重启读头超时,请联系管理员!"); }else if(code == 3) { return AjaxResult.error("重启读头失败,请联系管理员!"); }else if(code == 4) { return AjaxResult.error("注册失败,请联系管理员!"); }else if(code == 5) { return AjaxResult.error("清除用户指纹失败,请联系管理员!"); } return AjaxResult.success("清除成功用户成功!"); } /** * 清除指纹 * @param fingerprintReadHead * @return */ @PostMapping("/cleanFingerInfo") @ResponseBody public AjaxResult cleanFingerInfo(MjFingerprintReadHead fingerprintReadHead) { if(fingerprintReadHead == null) { return AjaxResult.error("未获取到读头信息,请联系管理员!"); } Integer code = mjWorkUserPushService.cleanFingerInfo(fingerprintReadHead); if(code == 1) { return AjaxResult.error("清除用户指纹失败,请联系管理员!"); } return AjaxResult.success("清除成功用户指纹成功!"); } /** * 重启读头 * @param fingerprintReadHead * @return */ @PostMapping("/restartHead") @ResponseBody public AjaxResult restartHead(MjFingerprintReadHead fingerprintReadHead) { if(fingerprintReadHead == null) { return AjaxResult.error("未获取到读头信息,请联系管理员!"); } Integer code = mjWorkUserPushService.restartHead(fingerprintReadHead); if(code == 1) { return AjaxResult.error("重启读头失败,请联系管理员!"); } return AjaxResult.success("已重启读头!"); } /** * 获取连接状态 * @param fingerprintReadHead * @return */ @PostMapping("/getConnectStatus") @ResponseBody public AjaxResult getConnectStatus(MjFingerprintReadHead fingerprintReadHead) { if(fingerprintReadHead == null) { return AjaxResult.error("未获取到读头信息,请联系管理员!"); } Integer code = mjWorkUserPushService.getConnectStatus(fingerprintReadHead); if(code == 1) { return AjaxResult.error("未正常连接设备!"); } return AjaxResult.success("已正常连接设备!"); } /** * 注册 * @param fingerprintReadHead * @return */ @PostMapping("/register") @ResponseBody public AjaxResult register(MjFingerprintReadHead fingerprintReadHead) { if(fingerprintReadHead == null) { return AjaxResult.error("未获取到读头信息,请联系管理员!"); } Integer code = mjWorkUserPushService.register(fingerprintReadHead); if(code == 1) { return AjaxResult.error("注册失败!"); } return AjaxResult.success("注册成功!"); } @GetMapping("/goUserTree") public String goUserTree() { return "selectUser"; } //把新用户的指纹推送到每个读头上 @PostMapping("/pushUserToAllHead") @ResponseBody public AjaxResult pushUserToAllHead() { List list = mjWorkUserPushService.getNewUser(); List heads = headService.selectNewHead(); for(MjWorkUser user : list){ for(MjFingerprintReadHead head : heads){ try { addPush(user,head); } catch (Exception e){ } } } return AjaxResult.success("注册成功!"); } public void addPush(MjWorkUser user,MjFingerprintReadHead head){ Thread t = new Thread(new Runnable(){ public void run(){ List tmpDataModels = fingerprintService.selectMjFingerprintListByUserId(user.getId()); String users = domainToModel(user, tmpDataModels); int code = addTeamUsers(users,head); if(code==0){ System.out.println("推送成功"); }else{ System.out.println("推送失败"); } } }); t.start(); } //增加组用户 private Integer addTeamUsers(String value, MjFingerprintReadHead head) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); JSONObject jsonObject = null; MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", head.getIpOrOther()); map.add("port", head.getPort()); map.add("userDatas", value); HttpEntity> request = new HttpEntity<>(map, headers); try { ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktAddUserTmpByList", request , String.class ); jsonObject = JSONObject.parseObject(response.getBody()); System.out.println(response.getBody()); }catch (Exception e) { e.printStackTrace(); return 1; } if(jsonObject != null) { return (int)jsonObject.get("code"); } return 1; } //转换为访问所需model private String domainToModel(MjWorkUser workUser, List mjFingerprintList) { List wums = new ArrayList(); WorkUserModel workUserModel = new WorkUserModel(); workUserModel.setId(workUser.getId().toString().trim()); workUserModel.setName(workUser.getUserName().trim()); workUserModel.setPass(""); workUserModel.setiPrivilege(0); workUserModel.setFlag("a"); workUserModel.setTmpDatas(mjFingerprintList); wums.add(workUserModel); JSONArray jsonArray=new JSONArray(Collections.singletonList(wums)); String userDatas = jsonArray.toString().substring(1, jsonArray.toString().length()-1); return userDatas; } }