k94314517
2024-10-14 39c41cfdc080764a8fce22689feea1e9d6c10350
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -17,6 +17,7 @@
import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest;
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;
@@ -24,6 +25,8 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
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.dto.ResetPasswordDTO;
@@ -31,7 +34,10 @@
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.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.reqeust.AuditApproveDTO;
import com.doumee.dao.web.reqeust.ErpVisitDTO;
@@ -50,6 +56,7 @@
import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
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;
@@ -108,7 +115,10 @@
    private SystemUserMapper systemUserMapper;
    @Autowired
    private ApproveService approveService;
    @Autowired
    private NoticesJoinMapper noticesJoinMapper;
    @Autowired
    private InoutDayCountMapper inoutDayCountMapper;
    @Override
    public Integer create(Visits visits) {
@@ -1463,4 +1473,186 @@
        systemUserBiz.resetPwd(dto);
    }
    /**
     *
     * @param queryType 查询类型:1=在园人数;2=报表数据;3=待办事项;4=超时预警
     * @param loginUserInfo
     * @return
     */
    @Override
    public PCWorkPlatformDataVO getPcWorkPlatformData(Integer queryType ,LoginUserInfo loginUserInfo){
        PCWorkPlatformDataVO pcWorkPlatformDataVO = new PCWorkPlatformDataVO();
        if(Constants.equalsInteger(queryType,Constants.ONE)){
            List<Retention> retentionList = retentionMapper.selectJoinList(Retention.class,
                    new MPJLambdaWrapper<Retention>()
                            .selectAll(Retention.class)
                            .selectAs(Company::getType,Retention::getCompanyType)
                            .leftJoin(Company.class,Company::getId,Retention::getCompanyId)
            );
            InoutDayCount inoutDayCount = inoutDayCountMapper.selectOne(new QueryWrapper<InoutDayCount>()
                            .lambda()
                    .apply(" DATE(TIME_INFO) = CURDATE()  ")
                    .last(" limit 1 ")
            );
            //今日在园人数
            pcWorkPlatformDataVO.setTodayInParkUserNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)).count()
            );
            pcWorkPlatformDataVO.setTodayInUserNum(Constants.ZERO);
            pcWorkPlatformDataVO.setTodayOutUserNum(Constants.ZERO);
            //在园长期相关方人数
            pcWorkPlatformDataVO.setInParkLwUserNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getCompanyType(),Constants.ONE)).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()
            );
            pcWorkPlatformDataVO.setVisitUserNum(Constants.ZERO);
            pcWorkPlatformDataVO.setSignLevelNum(Constants.ZERO);
            //在园车辆
            pcWorkPlatformDataVO.setTodayInParkCarNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count()
            );
            pcWorkPlatformDataVO.setTodayInCarNum(Constants.ZERO);
            pcWorkPlatformDataVO.setTodayOutCarNum(Constants.ZERO);
            if(Objects.nonNull(inoutDayCount)){
                //相关方
                pcWorkPlatformDataVO.setLwUserInNum(inoutDayCount.getInOtherMemberNum());
                pcWorkPlatformDataVO.setLwUserOutNum(inoutDayCount.getOutOtherMemberNum());
                //访客
                pcWorkPlatformDataVO.setVisitUserNum(inoutDayCount.getInVisitorNum());
                pcWorkPlatformDataVO.setSignLevelNum(inoutDayCount.getOutVisitorNum());
                //车辆
                pcWorkPlatformDataVO.setTodayInCarNum(inoutDayCount.getInCarNum());
                pcWorkPlatformDataVO.setTodayOutCarNum(inoutDayCount.getOutCarNum());
                //总人数
                pcWorkPlatformDataVO.setTodayInUserNum(pcWorkPlatformDataVO.getLwUserInNum() + pcWorkPlatformDataVO.getVisitUserNum() + inoutDayCount.getInSelfMemberNum() );
                pcWorkPlatformDataVO.setTodayOutUserNum(pcWorkPlatformDataVO.getLwUserOutNum() + pcWorkPlatformDataVO.getSignLevelNum() + inoutDayCount.getOutSelfMemberNum() );
            }
        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
            List<String> weekDays = DateUtil.getBeforDays(new Date(),7);
            List<InterestedListVO> weekVisitList = new ArrayList<>();
            List<InterestedListVO> weekCarList = new ArrayList<>();
            List<InterestedListVO> lwList = new ArrayList<>();
            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);
                InterestedListVO carVO = new InterestedListVO();
                carVO.setName(days);
                if(Objects.isNull(inoutDayCount)){
                    visitVO.setNum(Constants.ZERO);
                    carVO.setNum(Constants.ZERO);
                }else{
                    visitVO.setNum(inoutDayCount.getInVisitorNum());
                    carVO.setNum(inoutDayCount.getInCarNum());
                }
                weekVisitList.add(visitVO);
                weekCarList.add(carVO);
            }
            pcWorkPlatformDataVO.setWeekVisitList(weekVisitList );
            pcWorkPlatformDataVO.setWeekCarList(weekCarList);
//            List<Retention> retentionList = retentionMapper.selectJoinList(Retention.class,
//                    new MPJLambdaWrapper<Retention>()
//                            .selectAll(Retention.class)
//                            .selectAs(Company::getType,Retention::getCompanyType)
//                            .selectAs(Company::getName,Retention::getCompanyName)
//                            .leftJoin(Company.class,Company::getId,Retention::getCompanyId)
//                            .eq(Company::getType,Constants.ZERO)
//                            .groupBy(Company::getId,Company::getName)
//                            .orderByDesc(Retention::getNum)
//            );
            List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
                    .eq(Company::getType,Constants.ZERO)
                    .eq(Company::getIsdeleted,Constants.ZERO)
            );
            if(CollectionUtils.isNotEmpty(companyList)){
                List<Integer> companyIds = companyList.stream().map(i->i.getId()).collect(Collectors.toList());
                List<Retention> retentionList = retentionMapper.selectList(
                        new QueryWrapper<Retention>().lambda()
                                .in(Retention::getCompanyId,companyIds)
                );
                for (Company company:companyList) {
                    Integer count = retentionList.stream().filter(i->Constants.equalsInteger(i.getCompanyId(),company.getId())).collect(Collectors.toList()).size();
                    InterestedListVO lw = new InterestedListVO();
                    lw.setNum(count);
                    lw.setName(company.getName());
                    lwList.add(lw);
                }
            }
            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");
            } else {
                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());
        }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);
            queryWrapper.leftJoin(" member m on m.id= t.MEMBER_ID");
            queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.signin);
            queryWrapper.apply(" TIMESTAMPDIFF( MINUTE, NOW(), t.OUT_DATE) <= "+code+"  ");
            queryWrapper.ne("m.type ",Constants.TWO);
            queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
            queryWrapper.orderByDesc(Visits::getEditDate);
            List<Visits> result = visitsJoinMapper.selectList(queryWrapper);
            if(result!=null&&result!=null){
                result.stream().forEach(s ->{
                    if(s.getStatus().equals(Constants.VisitStatus.signin)){
                        if(s.getTimeOut()<=Integer.valueOf(code)&&s.getTimeOut()>=0){
                            s.setOutStatus(Constants.TWO);
                        }else if(s.getTimeOut()>Constants.ZERO){
                            s.setOutStatus(Constants.ZERO);
                        }else{
                            s.setOutStatus(Constants.ONE);
                        }
                    }
                });
            }
            pcWorkPlatformDataVO.setTimeOutVisitList(result);
            pcWorkPlatformDataVO.setTimeOutVisitNum(result.size());
        }
        return pcWorkPlatformDataVO;
    }
}