package com.ruoyi.station.service.impl; import java.util.*; 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.mapper.*; import com.ruoyi.station.model.AreaDoorModel; import com.ruoyi.station.model.DeptUsersModel; import com.ruoyi.station.model.TmpDataModel; import com.ruoyi.station.model.WorkUserModel; import com.ruoyi.station.service.*; import org.apache.ibatis.annotations.Param; 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.Service; import com.ruoyi.common.core.text.Convert; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; /** * 工单Service业务层处理 * * @author ruoyi * @date 2020-08-10 */ @Service public class MjWorkOrderServiceImpl implements IMjWorkOrderService { @Autowired private MjWorkOrderMapper mjWorkOrderMapper; @Autowired private MjDeptMapper mjDeptMapper; @Autowired private MjWorkUserMapper mjWorkUserMapper; @Autowired private MjAreaManagementMapper mjAreaManagementMapper; @Autowired private MjDoorMapper mjDoorMapper; @Autowired private IMjWorkUserPushService mjWorkUserPushService; @Autowired private MjFingerprintReadHeadMapper mjFingerprintReadHeadMapper; @Autowired private MjOrderDetailMapper mjOrderDetailMapper; @Autowired private IMjAuthorizeDetailService mjAuthorizeDetailService; @Autowired private IMjFingerprintService mjFingerprintService; @Autowired private IMjFingerprintReadHeadService mjFingerprintReadHeadService; @Autowired private IMjTemplateAreacontentService iMjTemplateAreacontentService; @Autowired private IMjAreaManagementService iMjAreaManagementService; /** * 查询工单 * * @param id 工单ID * @return 工单 */ @Override public MjWorkOrder selectMjWorkOrderById(String id) { return mjWorkOrderMapper.selectMjWorkOrderById(id); } /** * 查询工单列表 * * @param mjWorkOrder 工单 * @return 工单 */ @Override public List selectMjWorkOrderList(MjWorkOrder mjWorkOrder) { return mjWorkOrderMapper.selectMjWorkOrderList(mjWorkOrder); } /** * 新增工单 * * @param mjWorkOrder 工单 * @return 结果 */ @Override public int insertMjWorkOrder(MjWorkOrder mjWorkOrder) { mjWorkOrder.setCreateTime(DateUtils.getNowDate()); return mjWorkOrderMapper.insertMjWorkOrder(mjWorkOrder); } /** * 修改工单 * * @param mjWorkOrder 工单 * @return 结果 */ @Override public int updateMjWorkOrder(MjWorkOrder mjWorkOrder) { mjWorkOrder.setUpdateTime(DateUtils.getNowDate()); return mjWorkOrderMapper.updateMjWorkOrder(mjWorkOrder); } /** * 删除工单对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteMjWorkOrderByIds(String ids) { return mjWorkOrderMapper.deleteMjWorkOrderByIds(Convert.toStrArray(ids)); } /** * 删除工单信息 * * @param id 工单ID * @return 结果 */ @Override public int deleteMjWorkOrderById(String id) { return mjWorkOrderMapper.deleteMjWorkOrderById(id); } /** * 根据当前时间获取有效工单 * @return */ @Override public List selectMjWorkOrderByDate() { return mjWorkOrderMapper.selectMjWorkOrderByDate(); } /** * 根据当前时间获取失效工单 * @return */ @Override public List selectMjWorkOrderByDateForInvalid() { return mjWorkOrderMapper.selectMjWorkOrderByDateForInvalid(); } /** * 根据获取用户id获取有效工单 * @param userId * @return */ @Override public MjWorkOrder selectValidOrderByUserId(Long userId) { return mjWorkOrderMapper.selectValidOrderByUserId(userId); } List depts = null; /** * 获取部门用户列表 * @return */ @Override public List selectDeptUsersList() { depts = mjDeptMapper.selectMjDeptListByDeptParentId("0"); if(depts != null && depts.size() > 0) { getDeptChildren(depts); } return depts; } List areaDoorModels = null; /** * 获取区域门禁 * @return */ @Override public List selectAreaDoorList() { areaDoorModels = mjAreaManagementMapper.selectAreaListByAreaParentId("0"); if(areaDoorModels != null && areaDoorModels.size() > 0) { getAreaChildren(areaDoorModels); } return areaDoorModels; } /** * 递归获取部门用户信息 * @param depts */ private void getDeptChildren(List depts) { for(DeptUsersModel dept : depts) { if(dept != null && StringUtils.isNotEmpty(dept.getId())) { List deptChildList = mjDeptMapper.selectMjDeptListByDeptParentId(dept.getId()); if(deptChildList != null && deptChildList.size() > 0) { dept.setChildren(deptChildList); getDeptChildren(dept.getChildren()); }else { List deptModels = mjWorkUserMapper.selectUserListByDeptId(dept.getId()); if(deptModels != null) { dept.setChildren(deptModels); } } } } } /** * 递归获取区域门禁信息 * @param areaDoorModels */ private void getAreaChildren(List areaDoorModels) { for(AreaDoorModel areaDoor : areaDoorModels) { if(areaDoor != null && StringUtils.isNotEmpty(areaDoor.getId())) { List areaDoorChildren = mjAreaManagementMapper.selectAreaListByAreaParentId(areaDoor.getId()); if(areaDoorChildren != null && areaDoorChildren.size() > 0) { /* List doorList = mjDoorMapper.selectDoorListByAreaId(areaDoor.getId()); if(doorList != null && doorList.size() > 0) { areaDoor.setChildren(doorList); }*/ if(areaDoor.getChildren() != null && areaDoor.getChildren().size() > 0) { for(AreaDoorModel area : areaDoorChildren) { areaDoor.getChildren().add(area); } }else { areaDoor.setChildren(areaDoorChildren); } getAreaChildren(areaDoor.getChildren()); }else { /*List doorList = mjDoorMapper.selectDoorListByAreaId(areaDoor.getId()); if(doorList != null) { areaDoor.setChildren(doorList); }*/ } } } } /** * 获取区域ids * @param areaIds * @return */ @Override public Map getAreaIds(String areaIds, String areaNames) { Set areaIdSet = new HashSet<>(); Set areaNamesSet = new HashSet<>(); Set areaIdsSet = new HashSet<>(); Map map = new HashMap(); String[] areaIdArr = areaIds.split(","); String[] areaNameArr = areaNames.split(","); for(String areaId : areaIdArr) { areaIdSet.add(areaId.trim()); } areaIdsSet.addAll(areaIdSet); for(String areaName : areaNameArr) { areaNamesSet.add(areaName.trim()); } for(String areaId : areaIdSet) { getAreaPid(areaId, areaIdsSet, areaNamesSet); //递归获取父areaId } List list = new ArrayList<>(areaIdsSet); List namelist = new ArrayList<>(areaNamesSet); String areaIdsStr = String.join(",", list); String areaNamesStr = String.join(",", namelist); map.put("areaIdsStr", areaIdsStr); map.put("areaNamesStr", areaNamesStr); return map; } /** * 递归获取父areaId * @param areaId * @param areaIdsSet */ private void getAreaPid(String areaId, Set areaIdsSet, Set areaNamesSet) { MjAreaManagement areaManagement = mjAreaManagementMapper.selectParentAreaByAreaId(areaId); if(areaManagement != null) { areaIdsSet.add(areaManagement.getId().trim()); areaNamesSet.add(areaManagement.getAreaName().trim()); getAreaPid(areaManagement.getId(), areaIdsSet, areaNamesSet); } } /** * 修改工单 * @param mjWorkOrder * @return */ @Override public List updateOrder(MjWorkOrder mjWorkOrder) { /*List newAreaIds = new ArrayList<>(); List newUserIds = new ArrayList<>(); Set beforeAreaIds = new HashSet<>(); List beforeUserIds = new ArrayList<>();*/ MjOrderDetail orderDetail = new MjOrderDetail(); orderDetail.setOrderId(mjWorkOrder.getId()); List orderDetails = mjOrderDetailMapper.selectMjOrderDetailList(orderDetail); if(orderDetails != null) { /*if(StringUtils.isNotEmpty(beforeOrder.getAreaIds())) { String[] beforeAreaIdsArr = beforeOrder.getAreaIds().split(","); beforeAreaIds = Arrays.asList(beforeAreaIdsArr); }*/ mjWorkOrder.setUpdateTime(new Date()); int num = mjWorkOrderMapper.updateMjWorkOrder(mjWorkOrder); //修改订单 if(num>0) { for(MjOrderDetail detail : orderDetails) { mjOrderDetailMapper.deleteMjOrderDetailById(detail.getId()); //删除order_detail /*if(detail != null && StringUtils.isNotEmpty(detail.getAreaId())) { beforeAreaIds.add(detail.getAreaId()); //获取修改前订单的区域 } if(detail != null && detail.getUserId() != null) { beforeUserIds.add(detail.getUserId().toString()); //获取修改前订单的用户 }*/ } //王浩杰 2020-09-14 // if(StringUtils.isNotEmpty(mjWorkOrder.getTempAreaId())){ // String as = mjWorkOrder.getAreaIds(); // String an = mjWorkOrder.getAreaNames(); // MjTemplateAreacontent mjTemplateAreacontent = new MjTemplateAreacontent(); // mjTemplateAreacontent.setTemplatId(mjWorkOrder.getTempAreaId()); // List mjTemplateAreacontents = iMjTemplateAreacontentService.selectMjTemplateAreacontentList(mjTemplateAreacontent); // for(MjTemplateAreacontent mjTemplateAreacontent1:mjTemplateAreacontents){ // if(as.indexOf(mjTemplateAreacontent1.getAreaId())==-1){ // if(StringUtils.isNotEmpty(as)){ // as+=","+mjTemplateAreacontent1.getAreaId(); // MjAreaManagement areaManagement = iMjAreaManagementService.selectMjAreaManagementById(mjTemplateAreacontent1.getAreaId()); // an+=","+areaManagement.getAreaName(); // }else{ // as+=mjTemplateAreacontent1.getAreaId(); // MjAreaManagement areaManagement = iMjAreaManagementService.selectMjAreaManagementById(mjTemplateAreacontent1.getAreaId()); // an+=areaManagement.getAreaName(); // } // } // } // mjWorkOrder.setAreaIds(as); // mjWorkOrder.setAreaNames(an); // } //王浩杰 2020-09-14 //Map map = getAreaIds(mjWorkOrder.getAreaIds(), mjWorkOrder.getAreaNames()); if(mjWorkOrder.getUserId() != null) { MjOrderDetail detail = new MjOrderDetail(); String id = IdUtils.getUUIDInOrderId()+""; detail.setId(id); detail.setUserId(Long.parseLong(mjWorkOrder.getUserId())); detail.setUserName(mjWorkOrder.getUserName()); detail.setOrderId(mjWorkOrder.getId()); detail.setMainUser(1); // detail.setAreaId(map.get("areaIdsStr")); // detail.setAreaName(map.get("areaNamesStr")); detail.setAreaId(mjWorkOrder.getAreaIds()); detail.setAreaName(mjWorkOrder.getAreaNames()); detail.setAuthorizeResult("0"); detail.setAuthorizeType("0"); detail.setCreateTime(new Date()); mjOrderDetailMapper.insertMjOrderDetail(detail); } if(StringUtils.isNotEmpty(mjWorkOrder.getUserIds()) && StringUtils.isNotEmpty(mjWorkOrder.getUserNames())) { String[] userIds = mjWorkOrder.getUserIds().split(","); String[] userNames = mjWorkOrder.getUserNames().split(","); for(int i=0; i 0) { for(String areaId : beforeAreaIds) { MjFingerprintReadHead head = new MjFingerprintReadHead(); head.setAreaId(areaId); List heads = mjFingerprintReadHeadMapper.selectMjFingerprintReadHeadList(head); delUserTmpByUserIdAndIp(heads, beforeUserIds); //删除对应读头的用户 } }*/ } return orderDetails; } @Override public void updateUserInReadHead(String orderId) { MjAuthorizeDetail mjAuthorizeDetail = new MjAuthorizeDetail(); mjAuthorizeDetail.setOrderId(orderId); mjAuthorizeDetail.setAuthorizeType("0"); List authorizeDetails = mjAuthorizeDetailService.selectMjAuthorizeDetailList(mjAuthorizeDetail); if(authorizeDetails != null && authorizeDetails.size() > 0) { List workUserModelList = new ArrayList<>(); List areaIdList = new ArrayList<>(); for(MjAuthorizeDetail detail : authorizeDetails) { areaIdList.add(detail.getAreaId()); MjFingerprintReadHead head = new MjFingerprintReadHead(); head.setAreaId(detail.getAreaId()); List heads = mjFingerprintReadHeadMapper.selectMjFingerprintReadHeadList(head); if(heads != null && heads.size() > 0 && detail.getUserId() != null) { if(detail.getAuthorizeType().equals("0")) { List mjFingerprintList = mjFingerprintService.selectMjFingerprintListByUserId(detail.getUserId()); //获取负责人指纹信息 WorkUserModel workUserModel = domainToModel(detail, mjFingerprintList); workUserModelList.add(workUserModel); }else if(detail.getAuthorizeType().equals("1")) { delUserTmpByUserIdAndIp(heads, detail.getUserId().toString()); } } } JSONArray jsonArray=new JSONArray(Collections.singletonList(workUserModelList)); String userDatas = jsonArray.toString().substring(1, jsonArray.toString().length()-1); addUserTmpByUserIdAndIp(userDatas, areaIdList); } } //删除对应读头的用户 private void delUserTmpByUserIdAndIp(List heads, String userId) { if(heads != null && heads.size() > 0) { for(MjFingerprintReadHead head : heads) { if(StringUtils.isNotEmpty(head.getIpOrOther()) && StringUtils.isNotEmpty(head.getPort())) { mjWorkUserPushService.removeFingerTmp(userId, head.getIpOrOther(), head.getPort()); } } } } //增加对应读头的用户 private void addUserTmpByUserIdAndIp(String value, List areaIdList) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 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 { ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktdelUserToOpenDoor", request , String.class ); System.out.println(response.getBody()); }catch (Exception e) { e.printStackTrace(); return; } } } } } //转换为访问所需model private WorkUserModel domainToModel(MjAuthorizeDetail detail, List mjFingerprintList) { WorkUserModel workUserModel = new WorkUserModel(); workUserModel.setId(detail.getUserId().toString().trim()); workUserModel.setName(detail.getUserName().trim()); workUserModel.setPass("123456"); workUserModel.setiPrivilege(0); if(detail.getMainUser() != null && detail.getMainUser() == 1) { workUserModel.setFlag("a"); }else { workUserModel.setFlag("x"); } workUserModel.setTmpDatas(mjFingerprintList); return workUserModel; } /** * 工作票号查重 * @param orderNo * @return */ @Override public Integer checkOrderNoRepeat(String orderNo) { return mjWorkOrderMapper.checkOrderNoRepeat(orderNo); } /** * 根据年份获取工作票数量 * @param yearTime * @return */ @Override public Integer selectOrderCountByYear(String yearTime) { return mjWorkOrderMapper.selectOrderCountByYear(yearTime); } @Override public String getOrderName(String orderId) { return mjWorkOrderMapper.getOrderName(orderId); } }