| | |
| | | import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | | import com.doumee.core.haikang.model.param.BaseListPageResponse; |
| | | import com.doumee.core.haikang.model.param.BaseResponse; |
| | | import com.doumee.core.haikang.model.param.request.FacePictureCheckRequest; |
| | | import com.doumee.core.haikang.model.param.request.VisitAppointmentOutRequest; |
| | | import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest; |
| | | import com.doumee.core.haikang.model.param.respose.AscDeviceStatusInfoResponse; |
| | | import com.doumee.core.haikang.model.param.respose.FacePictureCheckResponse; |
| | | import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.core.utils.*; |
| | | import com.doumee.core.wx.WXConstant; |
| | | import com.doumee.core.wx.wxPlat.WxPlatConstants; |
| | | import com.doumee.core.wx.wxPlat.WxPlatNotice; |
| | | import com.doumee.dao.admin.response.InterestedListVO; |
| | | import com.doumee.dao.admin.response.PCWorkPlatformDataVO; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.dao.CompanyMapper; |
| | | import com.doumee.dao.business.dao.SmsConfigMapper; |
| | | import com.doumee.dao.business.dao.SmsEmailMapper; |
| | | import com.doumee.dao.business.dto.ResetPasswordDTO; |
| | | import com.doumee.dao.business.join.DeviceJoinMapper; |
| | | import com.doumee.dao.business.join.VisitsJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | |
| | | import com.doumee.dao.system.SystemUserMapper; |
| | | import com.doumee.dao.system.dto.NoticesDTO; |
| | | import com.doumee.dao.system.dto.ResetSystemUserPwdDTO; |
| | | import com.doumee.dao.system.join.NoticesJoinMapper; |
| | | import com.doumee.dao.system.model.Notices; |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl; |
| | | import com.doumee.service.business.third.EmayService; |
| | | import com.github.xiaoymin.knife4j.core.util.CollectionUtils; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import io.swagger.models.auth.In; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Propagation; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import sun.misc.BASE64Encoder; |
| | | |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.URL; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.util.*; |
| | | import java.util.Date; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | private NoticesJoinMapper noticesJoinMapper; |
| | | @Autowired |
| | | private InoutDayCountMapper inoutDayCountMapper; |
| | | @Autowired |
| | | private CarEventMapper carEventMapper; |
| | | |
| | | @Autowired |
| | | private SmsConfigMapper smsConfigMapper; |
| | | |
| | | @Autowired |
| | | private SmsEmailMapper smsEmailMapper; |
| | | |
| | | @Autowired |
| | | private WxNoticeConfigMapper wxNoticeConfigMapper; |
| | | |
| | | @Autowired |
| | | private EmayService emayService; |
| | | |
| | | |
| | | |
| | | @Override |
| | | public Integer create(Visits visits) { |
| | |
| | | if(StringUtils.isNotBlank(visits.getFaceImg())&&(Constants.equalsInteger(visits.getType(),Constants.ZERO)|| Constants.equalsInteger(visits.getType(),Constants.TWO))){ |
| | | //人脸评分 |
| | | FacePictureCheckRequest param = new FacePictureCheckRequest(); |
| | | String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() + |
| | | String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode() + |
| | | systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); |
| | | param.setFacePicUrl(prefixUrl + visits.getFaceImg()); |
| | | BaseResponse<FacePictureCheckResponse> response = HKService.facePictureCheck(param); |
| | |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!"); |
| | | } |
| | | //发送微信公众号通知 |
| | | wxPlatNotice.sendVisitAuditTemplateNotice(visits, |
| | | systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(), |
| | | systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode()); |
| | | }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){ |
| | | visits.setStatus(Constants.VisitStatus.waitCheck); |
| | | visitsMapper.updateById(visits); |
| | |
| | | } |
| | | initWithVisitInfo(visits); |
| | | updateProblemLog(visits,problemLog,member); |
| | | |
| | | //发送微信公众号通知 - 申请提交成功待审核 |
| | | if(StringUtils.isNotBlank(visits.getOpenid())){ |
| | | WxPlatNotice wxPlatNotice = new WxPlatNotice(); |
| | | wxPlatNotice.sendVisitTemplateNotice( |
| | | wxNoticeConfigMapper,visits, |
| | | Constants.equalsInteger(visits.getType(),Constants.TWO)?WxPlatConstants.visitReportContent.visitReportUpload:WxPlatConstants.visitContent.visitUpload, |
| | | systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(), |
| | | Arrays.asList(visits.getOpenid().split(",")) |
| | | ); |
| | | } |
| | | //创建审批记录 |
| | | createApprove(visits,visitMember); |
| | | |
| | |
| | | queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); |
| | | queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId); |
| | | |
| | | //数据权限开始--------------------start---------------- |
| | | LoginUserInfo userInfo =pageWrap.getModel().getLoginUserInfo(); |
| | | if(userInfo!=null && userInfo.getCompanyIdList()!=null){ |
| | | if( userInfo.getCompanyIdList().size() ==0){ |
| | | //只能看自己(拜访人) |
| | | queryWrapper.eq(Member::getId,userInfo.getMemberId()); |
| | | }else{ |
| | | queryWrapper.in(Company::getId ,userInfo.getCompanyIdList()); |
| | | } |
| | | } |
| | | //数据权限开始--------------------end---------------- |
| | | |
| | | queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO); |
| | | queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType())&&Constants.equalsInteger(pageWrap.getModel().getType(),Constants.TWO),Visits::getType,pageWrap.getModel().getType()); |
| | | queryWrapper.ne(Objects.nonNull(pageWrap.getModel().getType())&&!Constants.equalsInteger(pageWrap.getModel().getType(),Constants.TWO),Visits::getType,Constants.TWO); |
| | |
| | | QueryWrapper<Visits> wrapper = new QueryWrapper<>(visits); |
| | | return visitsMapper.selectCount(wrapper); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public PageData<Visits> retentionPage(PageWrap<Visits> pageWrap) { |
| | | public static PageData<Visits> retentionPageBiz(PageWrap<Visits> pageWrap, VisitsJoinMapper visitsJoinMapper,SystemDictDataBiz systemDictDataBiz) { |
| | | String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_WARNING).getCode(); |
| | | IPage<Visits> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); |
| | |
| | | queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); |
| | | queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId); |
| | | queryWrapper.leftJoin(" member m on m.id= t.MEMBER_ID"); |
| | | |
| | | queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getLevelStatus()),Visits::getStatus,Constants.VisitStatus.signin); |
| | | |
| | | queryWrapper.apply(Objects.nonNull(pageWrap.getModel().getLevelStatus())," TIMESTAMPDIFF( MINUTE, NOW(), t.OUT_DATE) <= "+code+" "); |
| | | |
| | | queryWrapper.ne("m.type ",Constants.TWO); |
| | |
| | | } |
| | | |
| | | return PageData.from(result); |
| | | } |
| | | |
| | | @Override |
| | | public PageData<Visits> retentionPage(PageWrap<Visits> pageWrap) { |
| | | return retentionPageBiz(pageWrap,visitsJoinMapper,systemDictDataBiz); |
| | | } |
| | | |
| | | |
| | |
| | | if(Constants.equalsInteger(visits.getStatus(),Constants.VisitStatus.xfSuccess)){ |
| | | //如果下发成功, |
| | | visitsMapper.updateById(visits); |
| | | if(Objects.isNull(visits.getParentId())){ |
| | | wxPlatNotice.sendVisitAuditTemplateNotice(visits, |
| | | systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(), |
| | | systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode()); |
| | | } |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"重新下发会失败!"); |
| | | } |
| | |
| | | |
| | | //今日在园人数 |
| | | pcWorkPlatformDataVO.setTodayInParkUserNum( |
| | | retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)).count() |
| | | retentionList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.THREE)).count() |
| | | ); |
| | | |
| | | pcWorkPlatformDataVO.setTodayInUserNum(Constants.ZERO); |
| | |
| | | |
| | | //在园长期相关方人数 |
| | | pcWorkPlatformDataVO.setInParkLwUserNum( |
| | | retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) && Constants.equalsInteger(i.getCompanyType(),Constants.ZERO)).count() |
| | | retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) |
| | | && Constants.equalsInteger(i.getCompanyType(),Constants.ZERO)).count() |
| | | ); |
| | | pcWorkPlatformDataVO.setLwUserInNum(Constants.ZERO); |
| | | pcWorkPlatformDataVO.setLwUserOutNum(Constants.ZERO); |
| | |
| | | |
| | | //在园访客数量 |
| | | pcWorkPlatformDataVO.setInParkVisitUserNum( |
| | | retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)&&Objects.isNull(i.getCompanyType())).count() |
| | | retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&Objects.isNull(i.getCompanyType())).count() |
| | | ); |
| | | pcWorkPlatformDataVO.setVisitUserNum(Constants.ZERO); |
| | | pcWorkPlatformDataVO.setSignLevelNum(Constants.ZERO); |
| | |
| | | List<InterestedListVO> weekVisitList = new ArrayList<>(); |
| | | List<InterestedListVO> weekCarList = new ArrayList<>(); |
| | | List<InterestedListVO> lwList = new ArrayList<>(); |
| | | //查询七天前的访客记录数量 |
| | | List<Visits> visitsList = visitsMapper.selectList(new QueryWrapper<Visits>().lambda().in(Visits::getStatus, |
| | | Constants.VisitStatus.signin,Constants.VisitStatus.signout) |
| | | .apply(" STARTTIME > CURDATE() - INTERVAL 7 DAY " ) |
| | | ); |
| | | |
| | | List<CarEvent> carEventList = carEventMapper.selectList(new QueryWrapper<CarEvent>().lambda() |
| | | .in(CarEvent::getEventType,"771760131","771760130") |
| | | .apply(" STR_TO_DATE(happen_time, '%Y-%m-%dT%H:%i:%s') > CURDATE() - INTERVAL 7 DAY " ) |
| | | ); |
| | | |
| | | for (String days:weekDays) { |
| | | InoutDayCount inoutDayCount = inoutDayCountMapper.selectOne(new QueryWrapper<InoutDayCount>() |
| | | .lambda() |
| | | .apply(" DATE(TIME_INFO) = '"+days+"' ") |
| | | .last(" limit 1 ") |
| | | ); |
| | | InterestedListVO visitVO = new InterestedListVO(); |
| | | visitVO.setName(days); |
| | | if(CollectionUtils.isNotEmpty(visitsList)){ |
| | | //处理访客人员数量 |
| | | List<Visits> daysList = visitsList.stream().filter(i->Objects.nonNull(i.getStarttime())&&DateUtil.dateToString(i.getStarttime(),"yyyy-MM-dd").equals(days)).collect(Collectors.toList()); |
| | | List<String> memberIds = daysList.stream().map(i->i.getMemberId().toString()).collect(Collectors.toList()); |
| | | if(CollectionUtils.isNotEmpty(memberIds)){ |
| | | visitVO.setNum(new HashSet<String>(memberIds).size()); |
| | | } |
| | | } |
| | | if(Objects.isNull(visitVO.getNum())){ |
| | | visitVO.setNum(Constants.ZERO); |
| | | } |
| | | |
| | | |
| | | visitVO.setName(days); |
| | | InterestedListVO carVO = new InterestedListVO(); |
| | | carVO.setName(days); |
| | | if(Objects.isNull(inoutDayCount)){ |
| | | |
| | | |
| | | if(CollectionUtils.isNotEmpty(carEventList)){ |
| | | //处理访客人员数量 |
| | | List<CarEvent> daysList = carEventList.stream().filter(i->StringUtils.isNotBlank(i.getHappenTime()) && i.getHappenTime().substring(0,10).equals(days)).collect(Collectors.toList()); |
| | | List<String> carCodeList = daysList.stream().map(i->i.getPlateNos()).collect(Collectors.toList()); |
| | | if(CollectionUtils.isNotEmpty(carCodeList)){ |
| | | carVO.setNum(new HashSet<String>(carCodeList).size()); |
| | | } |
| | | } |
| | | if(Objects.isNull(carVO.getNum())){ |
| | | visitVO.setNum(Constants.ZERO); |
| | | carVO.setNum(Constants.ZERO); |
| | | }else{ |
| | | visitVO.setNum(inoutDayCount.getInVisitorNum()); |
| | | carVO.setNum(inoutDayCount.getInCarNum()); |
| | | } |
| | | weekVisitList.add(visitVO); |
| | | weekCarList.add(carVO); |
| | |
| | | List<Integer> companyIds = companyList.stream().map(i->i.getId()).collect(Collectors.toList()); |
| | | List<Retention> retentionList = retentionMapper.selectList( |
| | | new QueryWrapper<Retention>().lambda() |
| | | .eq(Retention::getType,Constants.TWO) |
| | | .in(Retention::getCompanyId,companyIds) |
| | | ); |
| | | for (Company company:companyList) { |
| | |
| | | |
| | | pcWorkPlatformDataVO.setLwList(lwList ); |
| | | }else if(Constants.equalsInteger(queryType,Constants.THREE)) { |
| | | MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(Notices.class); |
| | | if (Objects.isNull(loginUserInfo.getMemberId())) { |
| | | queryWrapper.eq("1", "2"); |
| | | pcWorkPlatformDataVO.setNoticesList(new ArrayList<>()); |
| | | pcWorkPlatformDataVO.setNoticesNum(0); |
| | | // queryWrapper.eq("1", "2"); |
| | | } else { |
| | | MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(Notices.class); |
| | | queryWrapper.eq(Notices::getStatus, Constants.ZERO); |
| | | queryWrapper.eq(Notices::getSendacopy, Constants.ZERO); |
| | | queryWrapper.eq(Notices::getParam2, Constants.ZERO); |
| | | queryWrapper.eq(Notices::getUserId, loginUserInfo.getMemberId()); |
| | | } |
| | | queryWrapper.orderByDesc(Notices::getCreateDate); |
| | | List<Notices> noticesList = noticesJoinMapper.selectList(queryWrapper); |
| | | pcWorkPlatformDataVO.setNoticesList(noticesList); |
| | | pcWorkPlatformDataVO.setNoticesNum(noticesList.size()); |
| | | if(noticesList.size() > 5 ){ |
| | | pcWorkPlatformDataVO.setNoticesList(noticesList.subList(0,5)); |
| | | }else{ |
| | | queryWrapper.orderByDesc(Notices::getCreateDate); |
| | | List<Notices> noticesList = noticesJoinMapper.selectList(queryWrapper); |
| | | pcWorkPlatformDataVO.setNoticesList(noticesList); |
| | | pcWorkPlatformDataVO.setNoticesNum(noticesList.size()); |
| | | if(noticesList.size() > 5 ){ |
| | | pcWorkPlatformDataVO.setNoticesList(noticesList.subList(0,5)); |
| | | }else{ |
| | | pcWorkPlatformDataVO.setNoticesList(noticesList); |
| | | } |
| | | } |
| | | |
| | | }else{ |
| | | String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_WARNING).getCode(); |
| | | MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(Visits.class); |
| | | queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName); |
| | | queryWrapper.select("TIMESTAMPDIFF( MINUTE, NOW(), t.OUT_DATE) AS timeOut"); |
| | | queryWrapper.selectAs(Member::getType,Visits::getMemberType); |
| | | queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment); |
| | | queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); |
| | | queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId); |
| | |
| | | }else{ |
| | | pcWorkPlatformDataVO.setTimeOutVisitList(result); |
| | | } |
| | | } |
| | | return pcWorkPlatformDataVO; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void syncTimeOutData(){ |
| | | String times = systemDictDataBiz.queryByCode(Constants.VISIT_CONFIG,Constants.TIME_OUT_CONFIG).getCode(); |
| | | List<Visits> visitsList = visitsMapper.selectList(new QueryWrapper<Visits>().lambda() |
| | | .eq(Visits::getStatus,Constants.VisitStatus.signin) |
| | | .eq(Visits::getSendTimeOutNotice,Constants.ZERO) |
| | | .apply(" now() >= DATE_ADD(ENDTIME,INTERVAL -"+times+" MINUTE) ") |
| | | ); |
| | | for (Visits visits:visitsList) { |
| | | if(Constants.equalsInteger(visits.getType(),Constants.TWO)){ |
| | | SmsEmailServiceImpl.sendVisitReportSms(systemDictDataBiz, |
| | | emayService,smsEmailMapper,smsConfigMapper,visitsMapper,visits.getId(), |
| | | SmsConstants.visitReportingContent.visitReportingTimeOutSignOut, |
| | | null,Arrays.asList(visits.getPhone().split(",")) |
| | | ); |
| | | }else{ |
| | | SmsEmailServiceImpl.sendVisitSms(systemDictDataBiz, |
| | | emayService,smsEmailMapper,smsConfigMapper,visitsMapper,visits.getId(), |
| | | SmsConstants.visitContent.visitTimeOutSignOut, |
| | | null,Arrays.asList(visits.getPhone().split(",")) |
| | | ); |
| | | } |
| | | visits.setSendTimeOutNotice(Constants.ONE); |
| | | visitsMapper.updateById(visits); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | return pcWorkPlatformDataVO; |
| | | } |
| | | |
| | | |
| | | } |