k94314517
2024-10-16 7b48adc68daf5a9d37d50f1d642c153bb8545b89
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -12,9 +12,13 @@
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;
@@ -25,6 +29,7 @@
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;
@@ -55,6 +60,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;
@@ -62,6 +68,9 @@
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
@@ -115,7 +124,8 @@
    private ApproveService approveService;
    @Autowired
    private NoticesJoinMapper noticesJoinMapper;
    @Autowired
    private InoutDayCountMapper inoutDayCountMapper;
    @Override
    public Integer create(Visits visits) {
@@ -229,6 +239,31 @@
        visits.setVisitType(Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_VISIT_REQUIRED).getCode()));
        //初始化访客信息
        initVisitInfo(visits,date);
        //人脸评分
        FacePictureCheckRequest param = new FacePictureCheckRequest();
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
        param.setFacePicBinaryData(visits.getFaceImg());
        try{
            Path path = Paths.get(prefixUrl + visits.getFaceImg());
//            Path path = Paths.get("d://c75848e1-f6f2-4474-bfa8-ddb05a8c7413.jpg");
            byte[] imageBytes = Files.readAllBytes(path);
            param.setFacePicBinaryData(Base64.getEncoder().encodeToString(imageBytes));
        }catch (Exception e){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"人脸信息解析失败");
        }
        BaseResponse<FacePictureCheckResponse> response = HKService.facePictureCheck(param);
        if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,人脸评分获取数据失败~");
        }
        FacePictureCheckResponse facePictureCheckResponse = response.getData();
        if(!facePictureCheckResponse.getCheckResult()){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), facePictureCheckResponse.getStatusMessage());
        }
        visitsMapper.insert(visits);
        //发起ERP审批申请
@@ -1486,36 +1521,107 @@
                            .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(0L);
            pcWorkPlatformDataVO.setTodayOutUserNum(0L);
            pcWorkPlatformDataVO.setTodayInUserNum(Constants.ZERO);
            pcWorkPlatformDataVO.setTodayOutUserNum(Constants.ZERO);
            //在园长期相关方人数
            pcWorkPlatformDataVO.setInParkLwUserNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getCompanyType(),Constants.ONE)).count()
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) && Constants.equalsInteger(i.getCompanyType(),Constants.ZERO)).count()
            );
            pcWorkPlatformDataVO.setLwUserInNum(0L);
            pcWorkPlatformDataVO.setLwUserOutNum(0L);
            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(0L);
            pcWorkPlatformDataVO.setSignLevelNum(0L);
            pcWorkPlatformDataVO.setVisitUserNum(Constants.ZERO);
            pcWorkPlatformDataVO.setSignLevelNum(Constants.ZERO);
            //在园车辆
            pcWorkPlatformDataVO.setTodayInParkCarNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count()
            );
            pcWorkPlatformDataVO.setTodayInCarNum(0L);
            pcWorkPlatformDataVO.setTodayOutCarNum(0L);
            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<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);
@@ -1531,6 +1637,11 @@
            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<>();
@@ -1561,8 +1672,14 @@
                    }
                });
            }
            pcWorkPlatformDataVO.setTimeOutVisitList(result);
            pcWorkPlatformDataVO.setTimeOutVisitNum(result.size());
            if(result.size() > 3 ){
                pcWorkPlatformDataVO.setTimeOutVisitList(result.subList(0,3));
            }else{
                pcWorkPlatformDataVO.setTimeOutVisitList(result);
            }
        }