package com.ruoyi.web.controller.station; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.UrlConstant; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.IdUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.station.domain.*; import com.ruoyi.station.model.TmpDataModel; import com.ruoyi.station.model.WorkUserModel; import com.ruoyi.station.service.*; 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.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; /** * 组Controller * * @author ruoyi * @date 2020-08-27 */ @Controller @RequestMapping("/station/team") public class MjTeamController extends BaseController { private String prefix = "station/team"; @Autowired private IMjTeamService mjTeamService; @Autowired private IMjTeamMemberService mjTeamMemberService; @Autowired private IMjTeamAreaService mjTeamAreaService; @Autowired private IMjFingerprintService mjFingerprintService; @Autowired private IMjFingerprintReadHeadService mjFingerprintReadHeadService; @Autowired private IMjWorkUserPushService mjWorkUserPushService; @Autowired private IMjVisitLogService iMjVisitLogService; @Autowired private IMjHeadsUsersService iMjHeadsUsersService; @RequiresPermissions("station:team:view") @GetMapping() public String team() { return prefix + "/team"; } /** * 查询组列表 */ @RequiresPermissions("station:team:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(MjTeam mjTeam) { startPage(); List list = mjTeamService.selectMjTeamList(mjTeam); return getDataTable(list); } /** * 导出组列表 */ @RequiresPermissions("station:team:export") @Log(title = "组", businessType = BusinessType.EXPORT) @PostMapping("/export") @ResponseBody public AjaxResult export(MjTeam mjTeam) { List list = mjTeamService.selectMjTeamList(mjTeam); ExcelUtil util = new ExcelUtil(MjTeam.class); return util.exportExcel(list, "team"); } /** * 新增组 */ @GetMapping("/add") public String add() { return prefix + "/add"; } /** * 新增保存组 */ @RequiresPermissions("station:team:add") @Log(title = "组", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody public AjaxResult addSave(MjTeam mjTeam) { mjTeam.setUpdateTime(DateUtils.getNowDate()); mjTeam.setId(IdUtils.fastSimpleUUID()); mjTeam.setTeamNumber(0); mjTeam.setAreaNumber(0); mjTeam.setEquipmentUpdateStatus(0); return toAjax(mjTeamService.insertMjTeam(mjTeam)); } /** * 修改组 */ @GetMapping("/edit/{id}") public String edit(@PathVariable("id") String id, ModelMap mmap) { MjTeam mjTeam = mjTeamService.selectMjTeamById(id); mmap.put("mjTeam", mjTeam); return prefix + "/edit"; } /** * 修改保存组 */ @RequiresPermissions("station:team:edit") @Log(title = "组", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody public AjaxResult editSave(MjTeam mjTeam) { return toAjax(mjTeamService.updateMjTeam(mjTeam)); } /** * 删除组 */ @RequiresPermissions("station:team:remove") @Log(title = "组", businessType = BusinessType.DELETE) @PostMapping( "/remove") @ResponseBody public AjaxResult remove(String ids) { return toAjax(mjTeamService.deleteMjTeamByIds(ids)); } /** * 根据id获取组 * @param id * @return */ @PostMapping("/findById") @ResponseBody public Object findById(String id) { MjTeam mjTeam = mjTeamService.selectMjTeamById(id); return mjTeam; } /** * 新增组 */ @GetMapping("/parent") public String parent() { return prefix + "/parent"; } /** * 新增组 */ @GetMapping("/parent2") public String parent2() { return prefix + "/parent2"; } /** * * @param id * @return */ @PostMapping("/pushDataToReadHead2") @ResponseBody public AjaxResult pushDataToReadHead(String id) { addLog("组授权java逻辑代码开始执行,将要推送的数据开始筛选"); if(StringUtils.isEmpty(id)) { return AjaxResult.error("未获取到id,请联系管理员!"); } MjTeam team = new MjTeam(); team.setEquipmentUpdateStatus(0); team.setId(id); List mjTeams = mjTeamService.selectMjTeamList(team); if(mjTeams != null && mjTeams.size() > 0) { return AjaxResult.error("该组已同步完成!"); } MjTeamMember teamMember = new MjTeamMember(); teamMember.setTeamId(id); List teamMemberList = mjTeamMemberService.selectMjTeamMemberList2(teamMember); //组成员 MjTeamArea teamArea = new MjTeamArea(); teamArea.setTeamId(id); List teamAreaList = mjTeamAreaService.selectMjTeamAreaList2(teamArea); //组区域 List areaIdList = new ArrayList<>(); List AddAreaIdList = new ArrayList<>(); List fingerprintReadHeads = new ArrayList<>(); List addFingerprintReadHeads = new ArrayList<>(); List delFingerprintReadHeads = new ArrayList<>(); if(teamAreaList != null && teamAreaList.size() > 0) { for(MjTeamArea area : teamAreaList) { if(area.getStatus() == 0) { if(area.getDelFlag() != 1) { List heads = null; AddAreaIdList.add(area.getAreaId()); //获取需增加的区域idlist MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); fingerprintReadHead.setAreaId(area.getAreaId()); heads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); addFingerprintReadHeads.addAll(heads); MjTeamArea tArea = new MjTeamArea(); tArea.setStatus(1); tArea.setId(area.getId()); mjTeamAreaService.updateMjTeamArea(tArea); //修改区域状态为已同步 } }else if(area.getStatus() == 2) { List heads = null; MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); fingerprintReadHead.setAreaId(area.getAreaId()); heads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); delFingerprintReadHeads.addAll(heads); MjTeamArea tArea = new MjTeamArea(); tArea.setStatus(1); tArea.setId(area.getId()); mjTeamAreaService.updateMjTeamArea(tArea); //修改区域状态为已同步 }else { if(area.getDelFlag() != 1) { List heads = null; areaIdList.add(area.getAreaId()); MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); fingerprintReadHead.setAreaId(area.getAreaId()); heads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); fingerprintReadHeads.addAll(heads); } } } } List addWorkUserModelList = new ArrayList<>(); //新增用户 List addAreaWorkUserModelList = new ArrayList<>(); //新增区域 int a = 0; if(teamMemberList != null && teamMemberList.size() > 0) { for(MjTeamMember member : teamMemberList) { if(member.getStatus() == 0) { List mjFingerprintList = mjFingerprintService.selectMjFingerprintListByUserId(Long.parseLong(member.getUserId())); //获取负责人指纹信息 WorkUserModel workUserModel = domainToModel(member, mjFingerprintList); addWorkUserModelList.add(workUserModel); MjTeamMember mem = new MjTeamMember(); mem.setStatus(1); mem.setId(member.getId()); mjTeamMemberService.updateMjTeamMember(mem); //改变用户状态为已同步 }else if(member.getStatus() == 2) { if(fingerprintReadHeads != null && fingerprintReadHeads.size() > 0) { fingerprintReadHeads.addAll(delFingerprintReadHeads); delUserTmp(fingerprintReadHeads, member.getUserId()); MjTeamMember mem = new MjTeamMember(); mem.setStatus(1); mem.setId(member.getId()); mjTeamMemberService.updateMjTeamMember(mem); //改变用户状态为已同步 } }else { //用户没有变化,区域变化 if(delFingerprintReadHeads != null && delFingerprintReadHeads.size() > 0) { //需要删除的区域 delUserTmp(delFingerprintReadHeads, member.getUserId()); } if(addFingerprintReadHeads != null && addFingerprintReadHeads.size() > 0) { //需要添加的区域 List mjFingerprintList = mjFingerprintService.selectMjFingerprintListByUserId(Long.parseLong(member.getUserId())); //获取负责人指纹信息 WorkUserModel workUserModel = domainToModel(member, mjFingerprintList); addAreaWorkUserModelList.add(workUserModel); a=1; } } } addLog("组授权java逻辑代码结束执行,将要推送的数据筛选结束"); Integer code = 0; if(addWorkUserModelList != null && addWorkUserModelList.size() > 0) { areaIdList.addAll(AddAreaIdList); JSONArray jsonArray=new JSONArray(Collections.singletonList(addWorkUserModelList)); String userDatas = jsonArray.toString().substring(1, jsonArray.toString().length()-1); code = addTeamUsers(userDatas, areaIdList, id); } if(a == 1) { JSONArray jsonArray=new JSONArray(Collections.singletonList(addAreaWorkUserModelList)); String userDatas = jsonArray.toString().substring(1, jsonArray.toString().length()-1); code = addTeamUsers(userDatas, AddAreaIdList, id); } if(code != 0) { return AjaxResult.error("同步失败!"); } } MjTeam team1 = new MjTeam(); team1.setEquipmentUpdateStatus(0); team1.setId(id); mjTeamService.updateMjTeam(team1); //改变组状态为已同步 return AjaxResult.success("同步成功!"); } //增加组用户 private Integer addTeamUsers(String value, List areaIdList,String id) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); JSONObject jsonObject = null; if(areaIdList.size() > 0) { for(String areaId : areaIdList) { MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); fingerprintReadHead.setAreaId(areaId); List fingerprintReadHeads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); for(MjFingerprintReadHead head : fingerprintReadHeads) { 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 { addLog("组授权通过C#接口批量增加用户--开始。推送的人数:"+value.length()+"人"+",推送的读头ip:"+head.getIpOrOther()); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktAddUserTmpByList", request , String.class ); jsonObject = JSONObject.parseObject(response.getBody()); System.out.println(response.getBody()); addLog("组授权通过C#接口批量增加用户--结束"); /* if(jsonObject != null && (int)jsonObject.get("code") == 0) { MjTeam team = new MjTeam(); team.setEquipmentUpdateStatus(0); team.setId(id); mjTeamService.updateMjTeam(team); //改变组状态为已同步 }*/ }catch (Exception e) { e.printStackTrace(); return 1; } } } } if(jsonObject != null) { return (int)jsonObject.get("code"); } return 1; } //删除组用户指纹 private void delUserTmp(List heads, String userId) { if(heads != null && heads.size() > 0) { addLog("组授权删除组用户指纹开始"); for(MjFingerprintReadHead head : heads) { if(StringUtils.isNotEmpty(head.getIpOrOther()) && StringUtils.isNotEmpty(head.getPort())) { mjWorkUserPushService.removeFingerTmp(userId, head.getIpOrOther(), head.getPort()); } } addLog("组授权删除组用户指纹结束"); } } //转换为访问所需model private WorkUserModel domainToModel(MjTeamMember member, List mjFingerprintList) { WorkUserModel workUserModel = new WorkUserModel(); workUserModel.setId(member.getUserId().toString().trim()); workUserModel.setName(member.getUserName().trim()); workUserModel.setPass(""); workUserModel.setiPrivilege(0); workUserModel.setFlag("a"); workUserModel.setTmpDatas(mjFingerprintList); return workUserModel; } private void addLog(String content){ MjVisitLog mjVisitLog = new MjVisitLog(); mjVisitLog.setDelFlag(1); mjVisitLog.setUserName(content); mjVisitLog.setId(IdUtils.fastSimpleUUID()); iMjVisitLogService.insertMjVisitLog(mjVisitLog); } /** * * @param id * @return */ @PostMapping("/pushDataToReadHead") @ResponseBody public AjaxResult pushDataToReadHead2(String id) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); List user = getUser(id); String value = JSONArray.toJSON(user).toString(); MjTeam team = mjTeamService.selectMjTeamById(id); MjTeamArea teamArea = new MjTeamArea(); teamArea.setTeamId(id); teamArea.setStatus(0); teamArea.setDelFlag(0); List teamAreaList = mjTeamAreaService.selectMjTeamAreaList2(teamArea); //新增的区域 for(MjTeamArea mjTeamArea:teamAreaList){ MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); fingerprintReadHead.setAreaId(mjTeamArea.getAreaId()); List hs = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); for(MjFingerprintReadHead rh:hs){ // for(WorkUserModel u:user){ // MjHeadsUsers mjHeadsUsers = new MjHeadsUsers(); // mjHeadsUsers.setUserId(Long.valueOf(u.getId())); // mjHeadsUsers.setAuthorizeName(team.getTeamName()); // mjHeadsUsers.setAuthorizeResult(0); // mjHeadsUsers.setAuthorizeType(0); // mjHeadsUsers.setAuthorizeStatus(0); // mjHeadsUsers.setHeadId(rh.getId()); // mjHeadsUsers.setHeadType(0); // mjHeadsUsers.setMainUser(1); // iMjHeadsUsersService.insertMjHeadsUsers(mjHeadsUsers); // } Thread t = new Thread(new Runnable(){ public void run(){ MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", rh.getIpOrOther()); map.add("port", rh.getPort()); map.add("userDatas", value); HttpEntity> request = new HttpEntity<>(map, headers); try { addLog("组授权通过C#接口批量增加用户--开始。推送的人数:"+user.size()+"人"+",推送的读头ip:"+rh.getIpOrOther()); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktAddUserTmpByList", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); System.out.println(response.getBody()); addLog("组授权通过C#接口批量增加用户--结束"); }catch (Exception e) { e.printStackTrace(); } }}); t.start(); } mjTeamArea.setStatus(1); mjTeamAreaService.updateMjTeamArea(mjTeamArea); } MjTeam mjTeam = mjTeamService.selectMjTeamById(id); mjTeam.setEquipmentUpdateStatus(1); mjTeamService.updateMjTeam(mjTeam); return toAjax(true); } public List getUser(String id){ MjTeamMember teamMember = new MjTeamMember(); teamMember.setTeamId(id); teamMember.setStatus(0); teamMember.setDelFlag(0); List teamMemberList = mjTeamMemberService.selectMjTeamMemberList2(teamMember); //组成员 List wums = new ArrayList(); for (MjTeamMember mjTeamMember:teamMemberList){ List mjFingerprintList = mjFingerprintService.selectMjFingerprintListByUserId(Long.parseLong(mjTeamMember.getUserId())); //获取负责人指纹信息 WorkUserModel workUserModel = domainToModel(mjTeamMember, mjFingerprintList); wums.add(workUserModel); mjTeamMember.setStatus(1); mjTeamMemberService.updateMjTeamMember(mjTeamMember); } return wums; } }