k94314517
2024-09-24 45f553e1c5f9d1b948c131fd42ca89d7910ffe03
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -158,10 +158,12 @@
        queryWrapper
                .selectAll(PlatformJob.class)
                .selectAs(Platform::getName,PlatformJob::getPlatformName)
                .selectAs(PlatformGroup::getName,PlatformJob::getPlatformGroupName)
                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
                .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName)
                .selectAs(SystemUser::getUsername,PlatformJob::getOutUserName)
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId)
                .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode)
                .leftJoin(SystemUser.class,SystemUser::getId,PlatformJob::getOutUserId)
                .eq(pageWrap.getModel().getId() != null, PlatformJob::getId, pageWrap.getModel().getId())
@@ -241,6 +243,9 @@
                .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatus()+"')")
                .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
                .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
                .ge(pageWrap.getModel().getCreateDateStart() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getCreateDateStart()))
                .le(pageWrap.getModel().getCreateDateEnd() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDateEnd()))
                .eq(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()), PlatformJob::getType, Constants.platformJobType.sgscxh)
                .ne(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), PlatformJob::getType, Constants.platformJobType.sgscxh)
        ;
@@ -277,15 +282,31 @@
                .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode)
                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId())
                .like(pageWrap.getModel().getCarCodeFront() != null, PlatformJob::getCarCodeFront, pageWrap.getModel().getCarCodeFront())
                .eq(Objects.nonNull(pageWrap.getModel().getCallType())
                        &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.ONE),PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()
//                .eq(Objects.nonNull(pageWrap.getModel().getCallType())
//                        &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.ONE),
//                        PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()
//                )
                .apply(Objects.nonNull(pageWrap.getModel().getCallType())
                                &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.ONE),
                        " ( " +
                                " ( t.`STATUS` = "+Constants.PlatformJobStatus.WAIT_CALL.getKey()+" and t.PLATFORM_GROUP_ID = ( SELECT p.group_id FROM platform p WHERE p.id = "+pageWrap.getModel().getPlatformId()+" LIMIT 1 )  )" +
                                ") "
                )
                .and(Objects.nonNull(pageWrap.getModel().getCallType())
                        &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.TWO),
                        i->i.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()).or()
                                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.IN_WAIT.getKey()).or()
                                .apply(" ( t.status = "+Constants.PlatformJobStatus.TRANSFERING.getKey()+" and t.PLATFORM_ID = "+pageWrap.getModel().getPlatformId()+" ) ")
                .apply(Objects.nonNull(pageWrap.getModel().getCallType())
                                &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.TWO),
                                 " ( " +
                                         " ( t.`STATUS` = "+Constants.PlatformJobStatus.WAIT_CALL.getKey()+" and t.PLATFORM_GROUP_ID = ( SELECT p.group_id FROM platform p WHERE p.id = "+pageWrap.getModel().getPlatformId()+" LIMIT 1 )  )" +
                                         " or  " +
                                         " (t.`STATUS` = "+Constants.PlatformJobStatus.IN_WAIT.getKey()+" and t.PLATFORM_ID = "+pageWrap.getModel().getPlatformId()+" )" +
                                         " or " +
                                         "  (t.`STATUS` = "+Constants.PlatformJobStatus.TRANSFERING.getKey()+" and t.PLATFORM_ID = "+pageWrap.getModel().getPlatformId()+" )  " +
                                         ") "
                )
                .and(Objects.nonNull(pageWrap.getModel().getCallType())
                                &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.THREE),
                        i->i.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()).or()
@@ -356,7 +377,7 @@
                //计算预计等待时间
                List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda().eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId()));
                BigDecimal workRate = platformList.stream().map(m->m.getWorkRate()).reduce(BigDecimal.ZERO,BigDecimal::add);
                if(sumWorkRate.compareTo(BigDecimal.ZERO) == Constants.ZERO|| workRate.compareTo(BigDecimal.ZERO)  == Constants.ZERO ){
                if(sumWorkRate.compareTo(BigDecimal.ZERO) > Constants.ZERO && workRate.compareTo(BigDecimal.ZERO)  > Constants.ZERO ){
                    BigDecimal sumMinute = sumWorkRate.divide(workRate,1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L));
                    Integer sumMinuteInteger = sumMinute.intValue();
                    Integer hours = sumMinuteInteger/60;
@@ -373,7 +394,8 @@
            }else{
                platformJob.setWaitTime("等待叫号");
            }
        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){
        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())
        || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){
            //查询最后开始任务的月台记录  日志表  因为存在异常挂起 转移 等问题
            PlatformLog platformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda()
                    .eq(PlatformLog::getJobId,platformJob.getId())
@@ -416,7 +438,7 @@
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile())
                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
//                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
                .orderByDesc(PlatformJob::getId)
        );
        for (PlatformJob platformJob:platformJobList) {
@@ -462,8 +484,9 @@
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        platformJob.setConfirmTaskDate(new Date());
        platformJob.setArriveDate(confirmTaskDTO.getArriveDate());
        platformJob.setCarCodeBack(confirmTaskDTO.getCarCodeBack());
        platformJob.setStatus(Constants.PlatformJobStatus.WART_SIGN_IN.getKey());
        platformJob.setEditDate(new Date());
        platformJobMapper.updateById(platformJob);
@@ -488,19 +511,33 @@
        if(Objects.isNull(platformJob)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
        }
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ZERO)){
            if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
            this.distanceSignIn(signInDTO,platformJob);
        }else if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ONE)){
            if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
            this.sceneSignIn(signInDTO);
        }else if(Constants.equalsInteger(signInDTO.getSignType(),Constants.TWO)){
            if(!(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CONFIRM.getKey())||
                    Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey()))
            ){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
            platformJob.setArriveDate(Objects.isNull(platformJob.getArriveDate())?new Date():null);
            platformJob.setConfirmTaskDate(Objects.isNull(platformJob.getConfirmTaskDate())?new Date():null);
        }else{
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"签到类型错误");
        }
        platformJob.setSignDate(new Date());
        platformJob.setSingType(Constants.ZERO);
        platformJob.setSingType(signInDTO.getSignType());
        platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey());
        platformJobMapper.updateById(platformJob);
        //存储操作日志
@@ -508,12 +545,12 @@
                Constants.PlatformJobLogType.SIGN.getInfo());
    }
    public void distanceSignIn(SignInDTO signInDTO , PlatformJob platformJob){
        if(Objects.isNull(signInDTO.getLat())
                || Objects.isNull(signInDTO.getLnt())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"经纬度信息异常");
        }
        //获取签到点的经纬度
        Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode());
        Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode());
@@ -529,6 +566,7 @@
    }
    public void sceneSignIn(SignInDTO signInDTO){
        if( StringUtils.isNotBlank(signInDTO.getQrCodeKey())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -692,7 +730,8 @@
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void platformInPark(JobOperateDTO jobOperateDTO){
        if(Objects.isNull(jobOperateDTO)
                || Objects.isNull(jobOperateDTO.getJobId())){
                || Objects.isNull(jobOperateDTO.getJobId())
                || Objects.isNull(jobOperateDTO.getPlatformId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId());
@@ -702,9 +741,26 @@
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!");
        }
        Platform platform = platformJoinMapper.selectById(jobOperateDTO.getPlatformId());
        if(Objects.isNull(platform)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息");
        }
        //判断是否需要填充进去
        if(StringUtils.isBlank(platformJob.getPlatforms())){
            platformJob.setPlatforms(jobOperateDTO.getPlatformId().toString());
            platformJob.setPlatformNames(platform.getName());
        }else{
            if(!Constants.equalsInteger(platform.getId(),platformJob.getPlatformId())){
                platformJob.setPlatforms(platformJob.getPlatforms() + "," +jobOperateDTO.getPlatformId().toString());
                platformJob.setPlatformNames(platformJob.getPlatformNames() + "," +platform.getName());
            }
        }
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        platformJob.setPlatformId(platform.getId());
        platformJob.setInwaitDate(new Date());
        platformJob.setInwaitUserId(jobOperateDTO.getLoginUserInfo().getId());
        platformJob.setStatus(Constants.PlatformJobStatus.IN_WAIT.getKey());
@@ -715,6 +771,7 @@
        || Constants.equalsInteger(platformJob.getType(),Constants.THREE)
        || Constants.equalsInteger(platformJob.getType(),Constants.FOUR)){
            //TODO 下发入园权限
        }
        //存储操作日志
@@ -748,10 +805,19 @@
        if(Objects.isNull(platform)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息");
        }
        //查询月台任务等待作业数量
        if(platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
                .eq(PlatformJob::getPlatformId,platform.getId())
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey(),Constants.PlatformJobStatus.WORKING.getKey())
        )>platform.getWorkingNum()){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"超出月台可同时作业数量["+platform.getWorkingNum()+"辆]");
        };
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        platformJob.setCallDate(new Date());
        platformJob.setCallDate(Objects.isNull(platformJob.getCallDate())?new Date():null);
        platformJob.setCallUserId(jobOperateDTO.getLoginUserInfo().getId());
        platformJob.setStatus(Constants.PlatformJobStatus.CALLED.getKey());
        platformJob.setPlatformId(jobOperateDTO.getPlatformId());
@@ -760,8 +826,10 @@
            platformJob.setPlatforms(jobOperateDTO.getPlatformId().toString());
            platformJob.setPlatformNames(platform.getName());
        }else{
            platformJob.setPlatforms(platformJob.getPlatforms() + "," +jobOperateDTO.getPlatformId().toString());
            platformJob.setPlatformNames(platformJob.getPlatformNames() + "," +platform.getName());
            if(!Constants.equalsInteger(platform.getId(),platformJob.getPlatformId())){
                platformJob.setPlatforms(platformJob.getPlatforms() + "," +jobOperateDTO.getPlatformId().toString());
                platformJob.setPlatformNames(platformJob.getPlatformNames() + "," +platform.getName());
            }
        }
        platformJob.setEditDate(new Date());
        platformJobMapper.updateById(platformJob);
@@ -908,10 +976,9 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息");
        }
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        if(Objects.isNull(platformJob.getStartDate())){
            platformJob.setStartDate(new Date());
        }
@@ -990,7 +1057,6 @@
        //存储操作日志
        savePlatformLog(Constants.PlatformJobLogType.AUTHED_LEAVE.getKey(),oldPlatformJob,platformJob ,
                Constants.PlatformJobLogType.AUTHED_LEAVE.getInfo());
        //TODO 授权车辆离场权限
    }
@@ -1356,7 +1422,16 @@
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsDetailList)){
                    List<String> stringList = platformWmsDetailList.stream().map(m->m.getInRepertotyCode()).collect(Collectors.toList());
                    response.setInRepertotyCode(stringList);
                    List<PlatformDataWmsInfoResponse> platformDataWmsInfoResponseList = new ArrayList<>();
                    for (PlatformWmsDetail platformWmsDetail:platformWmsDetailList) {
                        PlatformDataWmsInfoResponse platformDataWmsInfoResponse = new PlatformDataWmsInfoResponse();
                        platformDataWmsInfoResponse.setMaterialName(platformWmsDetail.getMaterialName());
                        platformDataWmsInfoResponse.setIoQty(platformWmsDetail.getIoQty());
                        platformDataWmsInfoResponseList.add(platformDataWmsInfoResponse);
                    }
                    response.setPlatformDataWmsInfoResponseList(platformDataWmsInfoResponseList);
                }
            }
        }
        return response;