package com.doumee.service.business.impl; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.param.BaseResponse; 
 | 
import com.doumee.core.haikang.model.param.request.ParkReservationAddRequest; 
 | 
import com.doumee.core.haikang.model.param.request.ParkReservationDelRequest; 
 | 
import com.doumee.core.haikang.model.param.respose.ParkReservationAddResponse; 
 | 
import com.doumee.core.haikang.service.HKService; 
 | 
import com.doumee.dao.business.dao.UserActionMapper; 
 | 
import com.doumee.service.business.third.model.LoginUserInfo; 
 | 
import com.doumee.service.business.third.model.PageData; 
 | 
import com.doumee.service.business.third.model.PageWrap; 
 | 
import com.doumee.service.business.third.model.request.TmsLockStatusQueryRequest; 
 | 
import com.doumee.service.business.third.model.response.TmsBaseResponse; 
 | 
import com.doumee.service.business.third.model.response.TmsLockStatusQueryResponse; 
 | 
import com.doumee.core.utils.*; 
 | 
import com.doumee.core.wx.wxPlat.WxPlatConstants; 
 | 
import com.doumee.core.wx.wxPlat.WxPlatNotice; 
 | 
import com.doumee.dao.business.*; 
 | 
import com.doumee.dao.business.dao.MemberMapper; 
 | 
import com.doumee.dao.business.dao.SmsConfigMapper; 
 | 
import com.doumee.dao.business.dao.SmsEmailMapper; 
 | 
import com.doumee.dao.business.join.PlatformJobJoinMapper; 
 | 
import com.doumee.dao.business.join.PlatformJoinMapper; 
 | 
import com.doumee.dao.business.model.*; 
 | 
import com.doumee.dao.business.vo.LargeScreenDataVO; 
 | 
import com.doumee.dao.openapi.request.*; 
 | 
import com.doumee.dao.openapi.response.*; 
 | 
  
 | 
import com.doumee.dao.system.SystemUserMapper; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.dao.web.reqeust.*; 
 | 
import com.doumee.dao.web.response.DriverHomeVO; 
 | 
import com.doumee.dao.web.response.LineUpVO; 
 | 
import com.doumee.dao.web.response.PlatformWorkVO; 
 | 
import com.doumee.service.business.PlatformJobService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl; 
 | 
import com.doumee.service.business.third.EmayService; 
 | 
import com.doumee.service.business.third.TmsService; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.slf4j.Logger; 
 | 
import org.slf4j.LoggerFactory; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.math.RoundingMode; 
 | 
import java.util.*; 
 | 
import java.util.Date; 
 | 
import java.util.concurrent.TimeUnit; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 月台调度作业信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2024/06/28 10:03 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class PlatformJobServiceImpl implements PlatformJobService { 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformJobMapper platformJobMapper; 
 | 
    @Autowired 
 | 
    private UserActionMapper userActionMapper; 
 | 
    @Autowired 
 | 
    private TmsService tmsService; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformDeviceMapper platformDeviceMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformJobJoinMapper platformJobJoinMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformWmsDetailMapper platformWmsDetailMapper; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private PlatformJoinMapper platformJoinMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformLogMapper platformLogMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformWmsJobMapper platformWmsJobMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformGroupMapper platformGroupMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PlatformShowParamMapper platformShowParamMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private ParksMapper parksMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private VisitParkMapper visitParkMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SmsConfigMapper smsConfigMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SmsEmailMapper smsEmailMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private EmayService emayService; 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
    @Autowired 
 | 
    private PlatformBroadcastLogMapper platformBroadcastLogMapper; 
 | 
    @Autowired 
 | 
    private PlatformWarnEventServiceImpl platformWarnEventService; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
    @Autowired 
 | 
    private WxNoticeConfigMapper wxNoticeConfigMapper; 
 | 
    @Autowired 
 | 
    private SystemUserMapper systemUserMapper; 
 | 
  
 | 
    @Override 
 | 
    public Integer create(PlatformJob platformJob) { 
 | 
        platformJobMapper.insert(platformJob); 
 | 
        return platformJob.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        platformJobMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class}) 
 | 
    public  void deleteById(Integer id,LoginUserInfo user) { 
 | 
        Date date = new Date(); 
 | 
        PlatformJob job = platformJobMapper.selectById(id); 
 | 
        if(job==null ||Constants.equalsInteger(Constants.ONE,job.getIsdeleted())){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(! Constants.equalsInteger(Constants.PlatformJobStatus.CANCEL.getKey(),job.getStatus())){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,只能删除已取消的作业任务!"); 
 | 
        } 
 | 
        platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda() 
 | 
                        .set(PlatformJob::getIsdeleted,Constants.ONE) 
 | 
                        .set(PlatformJob::getEditDate,date) 
 | 
                        .set(PlatformJob::getEditor,user.getId()) 
 | 
                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey()) 
 | 
                        .eq(PlatformJob::getId,id)); 
 | 
        String[] params = new String[3]; 
 | 
        params[0] = user.getRealname(); 
 | 
        params[1]=DateUtil.getPlusTime2(date); 
 | 
        params[2]="【运单号:"+job.getBillCode()+"】-【司机:"+job.getDriverName()+" "+job.getDrivierPhone()+"】-【车牌号:"+job.getCarCodeFront()+"】"; 
 | 
        //记录删除日志 
 | 
        UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.PLATFROM_JOB_DEL,userActionMapper,date,params,JSONObject.toJSONString(job)); 
 | 
    } 
 | 
    @Override 
 | 
    public void delete(Integer id) { 
 | 
        platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda() 
 | 
                        .set(PlatformJob::getIsdeleted,Constants.ONE) 
 | 
                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey()) 
 | 
                .eq(PlatformJob::getId,id)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(PlatformJob platformJob) { 
 | 
        UpdateWrapper<PlatformJob> deleteWrapper = new UpdateWrapper<>(platformJob); 
 | 
        platformJobMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        platformJobMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(PlatformJob platformJob) { 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<PlatformJob> platformJobs) { 
 | 
        if (CollectionUtils.isEmpty(platformJobs)) { 
 | 
            return; 
 | 
        } 
 | 
        for (PlatformJob platformJob: platformJobs) { 
 | 
            this.updateById(platformJob); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PlatformJob findById(Integer id) { 
 | 
        return platformJobMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PlatformJob findOne(PlatformJob platformJob) { 
 | 
        QueryWrapper<PlatformJob> wrapper = new QueryWrapper<>(platformJob); 
 | 
        return platformJobMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<PlatformJob> findList(PlatformJob platformJob) { 
 | 
        QueryWrapper<PlatformJob> wrapper = new QueryWrapper<>(platformJob); 
 | 
        return platformJobMapper.selectList(wrapper); 
 | 
    } 
 | 
   
 | 
    @Override 
 | 
    public PageData<PlatformJob> findPage(PageWrap<PlatformJob> pageWrap) { 
 | 
        IPage<PlatformJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<PlatformJob> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        pageWrap.getModel().setIsdeleted(Constants.ZERO); 
 | 
        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(PlatformWmsJob::getIoCreatedate,PlatformJob::getIoCreatedate) 
 | 
                .selectAs(SystemUser::getRealname,PlatformJob::getOutUserName) 
 | 
                .selectAs(PlatformBooks::getId,PlatformJob::getBookId) 
 | 
                .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) 
 | 
                .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId) 
 | 
                .eq(pageWrap.getModel().getId() != null, PlatformJob::getId, pageWrap.getModel().getId()) 
 | 
                .eq(pageWrap.getModel().getCreator() != null, PlatformJob::getCreator, pageWrap.getModel().getCreator()) 
 | 
                .ge(pageWrap.getModel().getCreateDate() != null, PlatformJob::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())) 
 | 
                .le(pageWrap.getModel().getCreateDate() != null, PlatformJob::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())) 
 | 
                .eq(pageWrap.getModel().getEditor() != null, PlatformJob::getEditor, pageWrap.getModel().getEditor()) 
 | 
                .ge(pageWrap.getModel().getEditDate() != null, PlatformJob::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())) 
 | 
                .le(pageWrap.getModel().getEditDate() != null, PlatformJob::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())) 
 | 
                .eq(pageWrap.getModel().getIsdeleted() != null, PlatformJob::getIsdeleted, pageWrap.getModel().getIsdeleted()) 
 | 
                .eq(pageWrap.getModel().getName() != null, PlatformJob::getName, pageWrap.getModel().getName()) 
 | 
                .eq(pageWrap.getModel().getRemark() != null, PlatformJob::getRemark, pageWrap.getModel().getRemark()) 
 | 
                .eq(pageWrap.getModel().getStatus() != null, PlatformJob::getStatus, pageWrap.getModel().getStatus()) 
 | 
                .eq(pageWrap.getModel().getSortnum() != null, PlatformJob::getSortnum, pageWrap.getModel().getSortnum()) 
 | 
                .eq(pageWrap.getModel().getCode() != null, PlatformJob::getCode, pageWrap.getModel().getCode()) 
 | 
                .eq(pageWrap.getModel().getBillCode() != null, PlatformJob::getBillCode, pageWrap.getModel().getBillCode()) 
 | 
                .eq(pageWrap.getModel().getDriverId() != null, PlatformJob::getDriverId, pageWrap.getModel().getDriverId()) 
 | 
                .eq(pageWrap.getModel().getDriverName() != null, PlatformJob::getDriverName, pageWrap.getModel().getDriverName()) 
 | 
                .eq(pageWrap.getModel().getPlateNum() != null, PlatformJob::getPlateNum, pageWrap.getModel().getPlateNum()) 
 | 
                .eq(pageWrap.getModel().getDrivierPhone() != null, PlatformJob::getDrivierPhone, pageWrap.getModel().getDrivierPhone()) 
 | 
                .ge(pageWrap.getModel().getSignDate() != null, PlatformJob::getSignDate, Utils.Date.getStart(pageWrap.getModel().getSignDate())) 
 | 
                .le(pageWrap.getModel().getSignDate() != null, PlatformJob::getSignDate, Utils.Date.getEnd(pageWrap.getModel().getSignDate())) 
 | 
                .eq(pageWrap.getModel().getSingType() != null, PlatformJob::getSingType, pageWrap.getModel().getSingType()) 
 | 
                .eq(pageWrap.getModel().getSignDistance() != null, PlatformJob::getSignDistance, pageWrap.getModel().getSignDistance()) 
 | 
                .eq(pageWrap.getModel().getPlatformNames() != null, PlatformJob::getPlatformNames, pageWrap.getModel().getPlatformNames()) 
 | 
                .like(pageWrap.getModel().getPlatformName() != null, Platform::getName, pageWrap.getModel().getPlatformName()) 
 | 
                .eq(pageWrap.getModel().getPlatforms() != null, PlatformJob::getPlatforms, pageWrap.getModel().getPlatforms()) 
 | 
                .eq(pageWrap.getModel().getPlatformId() != null, PlatformJob::getPlatformId, pageWrap.getModel().getPlatformId()) 
 | 
                .ge(pageWrap.getModel().getInwaitDate() != null, PlatformJob::getInwaitDate, Utils.Date.getStart(pageWrap.getModel().getInwaitDate())) 
 | 
                .le(pageWrap.getModel().getInwaitDate() != null, PlatformJob::getInwaitDate, Utils.Date.getEnd(pageWrap.getModel().getInwaitDate())) 
 | 
                .eq(pageWrap.getModel().getInwaitUserId() != null, PlatformJob::getInwaitUserId, pageWrap.getModel().getInwaitUserId()) 
 | 
                .ge(pageWrap.getModel().getCallDate() != null, PlatformJob::getCallDate, Utils.Date.getStart(pageWrap.getModel().getCallDate())) 
 | 
                .le(pageWrap.getModel().getCallDate() != null, PlatformJob::getCallDate, Utils.Date.getEnd(pageWrap.getModel().getCallDate())) 
 | 
                .eq(pageWrap.getModel().getCallUserId() != null, PlatformJob::getCallUserId, pageWrap.getModel().getCallUserId()) 
 | 
                .eq(pageWrap.getModel().getCallInfo() != null, PlatformJob::getCallInfo, pageWrap.getModel().getCallInfo()) 
 | 
                .ge(pageWrap.getModel().getStartDate() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())) 
 | 
                .le(pageWrap.getModel().getStartDate() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate())) 
 | 
                .ge(pageWrap.getModel().getDoneDate() != null, PlatformJob::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate())) 
 | 
                .le(pageWrap.getModel().getDoneDate() != null, PlatformJob::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate())) 
 | 
                .ge(pageWrap.getModel().getErrorDate() != null, PlatformJob::getErrorDate, Utils.Date.getStart(pageWrap.getModel().getErrorDate())) 
 | 
                .le(pageWrap.getModel().getErrorDate() != null, PlatformJob::getErrorDate, Utils.Date.getEnd(pageWrap.getModel().getErrorDate())) 
 | 
                .eq(pageWrap.getModel().getErrorUserId() != null, PlatformJob::getErrorUserId, pageWrap.getModel().getErrorUserId()) 
 | 
                .eq(pageWrap.getModel().getErrorInfo() != null, PlatformJob::getErrorInfo, pageWrap.getModel().getErrorInfo()) 
 | 
                .ge(pageWrap.getModel().getTransPlatformDate() != null, PlatformJob::getTransPlatformDate, Utils.Date.getStart(pageWrap.getModel().getTransPlatformDate())) 
 | 
                .le(pageWrap.getModel().getTransPlatformDate() != null, PlatformJob::getTransPlatformDate, Utils.Date.getEnd(pageWrap.getModel().getTransPlatformDate())) 
 | 
                .eq(pageWrap.getModel().getTransPlatformUserId() != null, PlatformJob::getTransPlatformUserId, pageWrap.getModel().getTransPlatformUserId()) 
 | 
                .eq(pageWrap.getModel().getTransPlatformInfo() != null, PlatformJob::getTransPlatformInfo, pageWrap.getModel().getTransPlatformInfo()) 
 | 
                .ge(pageWrap.getModel().getInDate() != null, PlatformJob::getInDate, Utils.Date.getStart(pageWrap.getModel().getInDate())) 
 | 
                .le(pageWrap.getModel().getInDate() != null, PlatformJob::getInDate, Utils.Date.getEnd(pageWrap.getModel().getInDate())) 
 | 
                .ge(pageWrap.getModel().getOutDate() != null, PlatformJob::getOutDate, Utils.Date.getStart(pageWrap.getModel().getOutDate())) 
 | 
                .le(pageWrap.getModel().getOutDate() != null, PlatformJob::getOutDate, Utils.Date.getEnd(pageWrap.getModel().getOutDate())) 
 | 
                .eq(pageWrap.getModel().getOutType() != null, PlatformJob::getOutType, pageWrap.getModel().getOutType()) 
 | 
                .eq(pageWrap.getModel().getOutHkstatus() != null, PlatformJob::getOutHkstatus, pageWrap.getModel().getOutHkstatus()) 
 | 
                .ge(pageWrap.getModel().getOutHkdate() != null, PlatformJob::getOutHkdate, Utils.Date.getStart(pageWrap.getModel().getOutHkdate())) 
 | 
                .le(pageWrap.getModel().getOutHkdate() != null, PlatformJob::getOutHkdate, Utils.Date.getEnd(pageWrap.getModel().getOutHkdate())) 
 | 
                .eq(pageWrap.getModel().getOutHkinfo() != null, PlatformJob::getOutHkinfo, pageWrap.getModel().getOutHkinfo()) 
 | 
                .eq(pageWrap.getModel().getInHkstatus() != null, PlatformJob::getInHkstatus, pageWrap.getModel().getInHkstatus()) 
 | 
                .eq(pageWrap.getModel().getNHkinfo() != null, PlatformJob::getNHkinfo, pageWrap.getModel().getNHkinfo()) 
 | 
                .ge(pageWrap.getModel().getInHkdate() != null, PlatformJob::getInHkdate, Utils.Date.getStart(pageWrap.getModel().getInHkdate())) 
 | 
                .le(pageWrap.getModel().getInHkdate() != null, PlatformJob::getInHkdate, Utils.Date.getEnd(pageWrap.getModel().getInHkdate())) 
 | 
                .eq(pageWrap.getModel().getType() != null, PlatformJob::getType, pageWrap.getModel().getType()) 
 | 
                .like(pageWrap.getModel().getCarCodeFront() != null, PlatformJob::getCarCodeFront, pageWrap.getModel().getCarCodeFront()) 
 | 
                .like(pageWrap.getModel().getCarCodeBack() != null, PlatformJob::getCarCodeBack, pageWrap.getModel().getCarCodeBack()) 
 | 
                .eq(pageWrap.getModel().getCompanyId() != null, PlatformJob::getCompanyId, pageWrap.getModel().getCompanyId()) 
 | 
                .eq(pageWrap.getModel().getCompanyNamePath() != null, PlatformJob::getCompanyNamePath, pageWrap.getModel().getCompanyNamePath()) 
 | 
                .ge(pageWrap.getModel().getCancelDate() != null, PlatformJob::getCancelDate, Utils.Date.getStart(pageWrap.getModel().getCancelDate())) 
 | 
                .le(pageWrap.getModel().getCancelDate() != null, PlatformJob::getCancelDate, Utils.Date.getEnd(pageWrap.getModel().getCancelDate())) 
 | 
                .eq(pageWrap.getModel().getCancelUserId() != null, PlatformJob::getCancelUserId, pageWrap.getModel().getCancelUserId()) 
 | 
                .eq(pageWrap.getModel().getCancelInfo() != null, PlatformJob::getCancelInfo, pageWrap.getModel().getCancelInfo()) 
 | 
                .eq(pageWrap.getModel().getReason() != null, PlatformJob::getReason, pageWrap.getModel().getReason()) 
 | 
                .eq(pageWrap.getModel().getContractNum() != null, PlatformJob::getContractNum, pageWrap.getModel().getContractNum()) 
 | 
                .ge(pageWrap.getModel().getArriveDate() != null, PlatformJob::getArriveDate, Utils.Date.getStart(pageWrap.getModel().getArriveDate())) 
 | 
                .le(pageWrap.getModel().getArriveDate() != null, PlatformJob::getArriveDate, Utils.Date.getEnd(pageWrap.getModel().getArriveDate())) 
 | 
                .eq(pageWrap.getModel().getInType() != null, PlatformJob::getInType, pageWrap.getModel().getInType()) 
 | 
                .eq(pageWrap.getModel().getTotalNum() != null, PlatformJob::getTotalNum, pageWrap.getModel().getTotalNum()) 
 | 
                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId()) 
 | 
  
 | 
                .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatus()+"')") 
 | 
                .apply(pageWrap.getModel().getQueryStatusForPower() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatusForPower()+"')") 
 | 
                .apply(pageWrap.getModel().getQueryType() != null, " find_in_set(t.TYPE,'"+pageWrap.getModel().getQueryType()+"')") 
 | 
                .ge(pageWrap.getModel().getCreateDateStart() != null, PlatformJob::getCreateDate,  pageWrap.getModel().getCreateDateStart()) 
 | 
                .le(pageWrap.getModel().getCreateDateEnd() != null, PlatformJob::getCreateDate,  pageWrap.getModel().getCreateDateEnd()) 
 | 
                .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().getBeginDoneDateStart() != null, PlatformJob::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getBeginDoneDateStart())) 
 | 
                .le(pageWrap.getModel().getBeginDoneDateEnd() != null, PlatformJob::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getBeginDoneDateEnd())) 
 | 
  
 | 
                .isNotNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()), PlatformJob::getContractNum) 
 | 
                .isNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), PlatformJob::getContractNum) 
 | 
                .exists(StringUtils.isNotBlank(pageWrap.getModel().getWmsContractNum()), 
 | 
                        "select tt.id from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num='"+pageWrap.getModel().getWmsContractNum()+"' and  tt.job_id=t.id"); 
 | 
        queryWrapper.orderByDesc(PlatformJob::getCreateDate); 
 | 
        /*for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        }*/ 
 | 
       IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper); 
 | 
        platformJobIPage.getRecords().forEach(i->{ 
 | 
            i.dealTime(); 
 | 
            this.getWmsJobData(i); 
 | 
            this.queryWaitNum(i); 
 | 
        }); 
 | 
        return PageData.from(platformJobIPage); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PageData<PlatformJob> platformCallList(PageWrap<PlatformJob> pageWrap) { 
 | 
        IPage<PlatformJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<PlatformJob> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        queryWrapper 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(PlatformBooks::getId,PlatformJob::getBookId) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName) 
 | 
                .select(" (select GROUP_CONCAT(distinct(tt.contract_num ))  from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num is not null   and  tt.job_id=t.id )as wmsContractNum") 
 | 
//                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end ioQty ") 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode) 
 | 
                .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .apply("(  t1.isdeleted = 0 or t.PLATFORM_ID is null  )") 
 | 
                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId()) 
 | 
                .like(pageWrap.getModel().getCarCodeFront() != null, PlatformJob::getCarCodeFront, pageWrap.getModel().getCarCodeFront()) 
 | 
                .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 )  )" + 
 | 
                                ") " 
 | 
                ) 
 | 
                .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_GROUP_ID = ( SELECT p.group_id FROM platform p WHERE p.id = "+pageWrap.getModel().getPlatformId()+" LIMIT 1 )  )" + 
 | 
                                         " 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() 
 | 
                                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.IN_WAIT.getKey()).or() 
 | 
//                                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()).or() 
 | 
                                .apply(" ( t.status = "+Constants.PlatformJobStatus.TRANSFERING.getKey()+" and t.PLATFORM_GROUP_ID = "+pageWrap.getModel().getPlatformGroupId()+" ) ") 
 | 
                ) 
 | 
//                .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(new Date(),"yyyy-MM-dd")) 
 | 
                .orderByDesc(PlatformJob::getStatus) 
 | 
                .orderByAsc(PlatformJob::getSignDate) 
 | 
        ; 
 | 
        IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper); 
 | 
        platformJobIPage.getRecords().forEach(i->{ 
 | 
            i.dealTime(); 
 | 
            if(Constants.equalsInteger(i.getOrigin(),Constants.ZERO)){ 
 | 
                i.setWmsContractNum(i.getContractNum()); 
 | 
            } 
 | 
//            i.setTotalNum(i.getIoQty()); 
 | 
//            this.getWmsJobData(i); 
 | 
//            this.queryWaitNum(i); 
 | 
        }); 
 | 
        return PageData.from(platformJobIPage); 
 | 
    } 
 | 
  
 | 
  
 | 
    public void getWmsJobData(PlatformJob platformJob){ 
 | 
        if(Constants.equalsInteger(platformJob.getType(),Constants.platformJobType.zycxh) 
 | 
            || Constants.equalsInteger(platformJob.getType(),Constants.platformJobType.zyczh) 
 | 
            || Constants.equalsInteger(platformJob.getType(),Constants.platformJobType.wxcxh) 
 | 
                || Constants.equalsInteger(platformJob.getType(),Constants.platformJobType.wxczh)) { 
 | 
            PlatformWmsJob platformWmsJob = platformWmsJobMapper.selectOne(new QueryWrapper<PlatformWmsJob>().lambda() 
 | 
                    .eq(PlatformWmsJob::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformWmsJob::getJobId,platformJob.getId()) 
 | 
                    .orderByDesc(PlatformWmsJob::getId) 
 | 
                    .last(" limit 1") 
 | 
            ); 
 | 
            if(Objects.isNull(platformWmsJob)){ 
 | 
                return; 
 | 
            } 
 | 
            List<PlatformWmsDetail> platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformWmsDetail::getJobId,platformJob.getId())); 
 | 
  
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsDetailList)){ 
 | 
                platformJob.setTotalNum( 
 | 
                        platformWmsDetailList.stream().map(m->m.getIoQty()).reduce(BigDecimal.ZERO,BigDecimal::add) 
 | 
                ); 
 | 
                platformWmsJob.setPlatformWmsDetailList(platformWmsDetailList); 
 | 
                platformJob.setPlatformWmsJob(platformWmsJob); 
 | 
  
 | 
                if(Constants.equalsInteger(platformJob.getType(),Constants.platformJobType.zyczh) 
 | 
                        || Constants.equalsInteger(platformJob.getType(),Constants.platformJobType.wxczh)){ 
 | 
  
 | 
                    Integer unLockCount = platformWmsDetailList.stream().filter(i->Constants.equalsInteger(i.getLockStatus(),Constants.ZERO)).collect(Collectors.toList()).size(); 
 | 
                    if(Constants.equalsInteger(unLockCount,Constants.ZERO)){ 
 | 
                        platformJob.setLockStatus(Constants.TWO);  //全部上锁 
 | 
                    }else if(Constants.equalsInteger(unLockCount,platformWmsDetailList.size())){ 
 | 
                        platformJob.setLockStatus(Constants.ZERO);  //未上锁 
 | 
                    }else{ 
 | 
                        platformJob.setLockStatus(Constants.ONE);   //部分上锁 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        }  
 | 
    } 
 | 
    public void queryWaitNum(PlatformJob platformJob){ 
 | 
        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ 
 | 
            //查询当前所有排队数量 
 | 
            List<PlatformJob> lineUpAllList =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda() 
 | 
                    .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                    .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey() 
 | 
                            ,Constants.PlatformJobStatus.IN_WAIT.getKey() 
 | 
                            ,Constants.PlatformJobStatus.TRANSFERING.getKey()) 
 | 
//                    .lt(PlatformJob::getSignDate,platformJob.getSignDate()) 
 | 
                    .eq(PlatformJob::getPlatformGroupId,platformJob.getPlatformGroupId()) 
 | 
//                    .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(platformJob.getArriveDate(),"yyyy-MM-dd")) 
 | 
            ); 
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(lineUpAllList)){ 
 | 
                for (PlatformJob linePlatformJob:lineUpAllList) { 
 | 
                    this.getWmsJobData(linePlatformJob); 
 | 
                } 
 | 
                //查询排队在我前面的数据 
 | 
                List<PlatformJob> lineUpNum = lineUpAllList.stream().filter(i->Objects.nonNull(i.getSignDate())&&i.getSignDate().getTime()<platformJob.getSignDate().getTime()).collect(Collectors.toList()); 
 | 
                platformJob.setLineUpNum(lineUpNum.size()); 
 | 
                BigDecimal sumWorkRate = Constants.formatBigdecimal(platformJob.getTotalNum()); 
 | 
                for (PlatformJob linePlatformJob:lineUpNum) { 
 | 
                    sumWorkRate = sumWorkRate.add(Constants.formatBigdecimal(linePlatformJob.getTotalNum())); 
 | 
                } 
 | 
                //计算预计等待时间 
 | 
                List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda() 
 | 
                        .eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId())); 
 | 
                BigDecimal workRate = new BigDecimal(0); 
 | 
                if(platformList!=null){ 
 | 
                      workRate = platformList.stream().map(m->Constants.formatBigdecimal(m.getWorkRate())).reduce(BigDecimal.ZERO,BigDecimal::add); 
 | 
                } 
 | 
                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; 
 | 
                    Integer minus = sumMinuteInteger%60; 
 | 
                    String  waitTime = "预计等待:"; 
 | 
                    if(!Constants.equalsInteger(hours,Constants.ZERO)){ 
 | 
                        waitTime = waitTime + hours + "小时"; 
 | 
                    } 
 | 
                    if(!Constants.equalsInteger(hours,Constants.ZERO)){ 
 | 
                        waitTime = waitTime + minus + "分钟"; 
 | 
                    } 
 | 
                    platformJob.setWaitTime(waitTime); 
 | 
                } 
 | 
            }else{ 
 | 
                platformJob.setWaitTime("预计等待:-小时-分钟"); 
 | 
            } 
 | 
        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
        || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey()) 
 | 
                || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()) 
 | 
                || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())){ 
 | 
            //查询最后开始任务的月台记录  日志表  因为存在异常挂起 转移 等问题 
 | 
            PlatformLog platformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getJobId,platformJob.getId()) 
 | 
                    .eq(PlatformLog::getObjType,Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                    .orderByDesc(PlatformLog::getCreateDate) 
 | 
                    .last(" limit 1") 
 | 
            ); 
 | 
            if(Objects.nonNull(platformLog) && platformJob.getWorkRate()!=null && platformJob.getWorkRate().compareTo(new BigDecimal(0))>0){ 
 | 
                BigDecimal sumMinute = platformJob.getTotalNum().divide(platformJob.getWorkRate(),1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L)); 
 | 
                platformJob.setFinishTimeStr(DateUtil.DateToStr(DateUtil.afterMinutesDate(platformLog.getCreateDate(),sumMinute.intValue()),"HH:mm")); 
 | 
            } 
 | 
            //处理作业时长 
 | 
            List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getJobId,platformJob.getId()) 
 | 
                    .isNotNull(PlatformLog::getParam3) 
 | 
                    .ne(PlatformLog::getParam3,Constants.ZERO+"") 
 | 
                    .orderByDesc(PlatformLog::getCreateDate)); 
 | 
            if(platformLogList!=null){ 
 | 
                platformJob.setWorkTime(platformLogList.stream().map(m->Long.valueOf(StringUtils.defaultString(m.getParam3(),"0"))).reduce(Long.valueOf(0),Long::sum)); 
 | 
            } 
 | 
  
 | 
        } 
 | 
        platformJob.setWorkTimeStr(DateUtil.getTimeStrBySecond(platformJob.getWorkTime())); 
 | 
    } 
 | 
     
 | 
     
 | 
    @Override 
 | 
    public long count(PlatformJob platformJob) { 
 | 
        QueryWrapper<PlatformJob> wrapper = new QueryWrapper<>(platformJob); 
 | 
        return platformJobMapper.selectCount(wrapper); 
 | 
    } 
 | 
  
 | 
    //TODO 
 | 
    @Override 
 | 
    public DriverHomeVO getDriverHome(LoginUserInfo loginUserInfo){ 
 | 
        DriverHomeVO driverHomeVO = new DriverHomeVO(); 
 | 
        //TODO 轮播图 
 | 
        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile()) 
 | 
                .and(i->i.like(PlatformJob::getDoneDate,DateUtil.getCurrDate()) 
 | 
                        .or().in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey() 
 | 
                                ,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(), 
 | 
                                Constants.PlatformJobStatus.WART_SIGN_IN.getKey(), 
 | 
                                Constants.PlatformJobStatus.IN_WAIT.getKey(), 
 | 
                                Constants.PlatformJobStatus.CALLED.getKey(), 
 | 
                                Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                ) 
 | 
                .orderByDesc(PlatformJob::getId) 
 | 
        ); 
 | 
        for (PlatformJob platformJob:platformJobList) { 
 | 
            //处理WSM数量 
 | 
            this.getWmsJobData(platformJob); 
 | 
            //查询前方排队数量 
 | 
            this.queryWaitNum(platformJob); 
 | 
        } 
 | 
        driverHomeVO.setPlatformJobList(platformJobList); 
 | 
        // 园区导览图  图片 
 | 
        driverHomeVO.setReservationMap(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_GUIDEMAP).getCode()); 
 | 
        // 预约指南 文本 
 | 
        driverHomeVO.setBookingTips(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_BOOKING_TIPS).getCode()); 
 | 
        driverHomeVO.setSignDistance(new BigDecimal(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_DISTANCE).getCode())); 
 | 
  
 | 
        return driverHomeVO; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Override 
 | 
    public void confirmTask(ConfirmTaskDTO confirmTaskDTO){ 
 | 
        if(Objects.isNull(confirmTaskDTO) 
 | 
                || Objects.isNull(confirmTaskDTO.getId()) 
 | 
                || Objects.isNull(confirmTaskDTO.getArriveDate()) 
 | 
                || StringUtils.isBlank(confirmTaskDTO.getCarCodeBack()) 
 | 
        ){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(confirmTaskDTO.getId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.ZERO)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,无法进行该操作"); 
 | 
        } 
 | 
        if(confirmTaskDTO.getArriveDate().getTime()<=System.currentTimeMillis()){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"预计到厂时间必须大于当前时间"); 
 | 
        } 
 | 
  
 | 
        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); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.CONFIRM_TASK.getKey(),oldPlatformJob,platformJob , 
 | 
                Constants.PlatformJobLogType.CONFIRM_TASK.getInfo()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 距离签到 
 | 
     * @param signInDTO 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public void signIn(SignInDTO signInDTO){ 
 | 
        if(Objects.isNull(signInDTO) 
 | 
            || Objects.isNull(signInDTO.getSignType()) 
 | 
            || Objects.isNull(signInDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(signInDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
  
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
  
 | 
        if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ZERO)){ 
 | 
            if(!StringUtils.equals(platformJob.getDrivierPhone(),signInDTO.getLoginUserInfo().getMobile())){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
            } 
 | 
            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(!StringUtils.equals(platformJob.getDrivierPhone(),signInDTO.getLoginUserInfo().getMobile())){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
            } 
 | 
            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(),"签到类型错误"); 
 | 
        } 
 | 
        //查询月台组数据 
 | 
        PlatformGroup platformGroup = platformGroupMapper.selectById(platformJob.getPlatformGroupId()); 
 | 
        if(Objects.isNull(platformGroup)){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到月台组信息"); 
 | 
        } 
 | 
        if(System.currentTimeMillis() > DateUtil.getDateByString(DateUtil.getCurrDate() + " " + platformGroup.getEndTime() + ":59" ).getTime() 
 | 
        || System.currentTimeMillis() < DateUtil.getDateByString(DateUtil.getCurrDate() + " " + platformGroup.getStartTime() + ":00" ).getTime()){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未在工作时间["+platformGroup.getStartTime() + "-" + platformGroup.getEndTime() +"],无法进行签到"); 
 | 
        } 
 | 
        //查询今日最大的签到数 
 | 
        List<PlatformJob> signList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda() 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null  ")); 
 | 
        if(CollectionUtils.isEmpty(signList)){ 
 | 
            platformJob.setSignNum(Constants.ONE); 
 | 
        } else{ 
 | 
            int maxNumber = Collections.max(signList.stream().map(i->i.getSignNum()).collect(Collectors.toList())); 
 | 
            platformJob.setSignNum(maxNumber + Constants.ONE); 
 | 
        } 
 | 
        platformJob.setSignDate(new Date()); 
 | 
        platformJob.setSingType(signInDTO.getSignType()); 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.SIGN.getKey(),oldPlatformJob,platformJob, 
 | 
                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()); 
 | 
        BigDecimal distance = new BigDecimal(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_DISTANCE).getCode()); 
 | 
        //获取2个点的距离 单位:米 
 | 
        Double getDistanceDouble = PositionUtil.getDistance(signInDTO.getLnt(),signInDTO.getLat(),lnt,lat); 
 | 
        //转换km 
 | 
        BigDecimal getDistance = BigDecimal.valueOf(getDistanceDouble).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP); 
 | 
        if(distance.compareTo(getDistance)<Constants.ZERO){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"超出可签到距离,可签到距离为["+distance+"]公里]"); 
 | 
        } 
 | 
        platformJob.setSignDistance(BigDecimal.valueOf(getDistanceDouble)); 
 | 
    } 
 | 
  
 | 
    public void sceneSignIn(SignInDTO signInDTO){ 
 | 
        if( StringUtils.isNotBlank(signInDTO.getQrCodeKey())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        if(!signInDTO.getQrCodeKey().equals( 
 | 
                systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_QRCODE_PREFIX).getCode() +  systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_QRCODE).getCode())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"二维码已过期,请刷新重试"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PlatformJob getDetail(JobDetailDTO jobDetailDTO){ 
 | 
        if(Objects.isNull(jobDetailDTO)   || Objects.isNull(jobDetailDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob  = platformJobMapper.selectById(jobDetailDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){ 
 | 
            //待签到 计算距离 
 | 
            if(Objects.nonNull(jobDetailDTO.getLnt())&&Objects.nonNull(jobDetailDTO.getLat())){ 
 | 
                if(jobDetailDTO.getLat()!=null && jobDetailDTO.getLnt()!=null){ 
 | 
                    //获取签到点的经纬度 
 | 
                    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()); 
 | 
                    //获取2个点的距离X米 
 | 
                    Double getDistanceDouble = PositionUtil.getDistance(jobDetailDTO.getLnt(),jobDetailDTO.getLat(),lnt,lat); 
 | 
                    //转换km 
 | 
                    BigDecimal getDistance = BigDecimal.valueOf(getDistanceDouble).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP); 
 | 
                    platformJob.setGetDistance(getDistance); 
 | 
                } 
 | 
            } 
 | 
        }else if( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey()) 
 | 
                || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey()) 
 | 
        ){ 
 | 
            //查询前方排队数量 
 | 
            this.queryWaitNum(platformJob); 
 | 
            Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
            if(Objects.nonNull(platform)){ 
 | 
                platformJob.setPlatformName(platform.getName()); 
 | 
            } 
 | 
        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ 
 | 
            //作业月台信息 
 | 
            Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
            if(Objects.nonNull(platform)){ 
 | 
                platformJob.setPlatformName(platform.getName()); 
 | 
            } 
 | 
        } 
 | 
        platformJob.dealTime(); 
 | 
        this.getWorkTime(platformJob,platformLogMapper); 
 | 
        this.getWmsJobData(platformJob); 
 | 
        return platformJob; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Override 
 | 
    public LineUpVO lineUpDetail(LineUpDetailDTO lineUpDetailDTO){ 
 | 
        if(Objects.isNull(lineUpDetailDTO) 
 | 
        || Objects.isNull(lineUpDetailDTO.getQueryType())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        LineUpVO lineUpVO = new LineUpVO(); 
 | 
        //查询所有任务 
 | 
        List<PlatformJob> platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class, 
 | 
                new MPJLambdaWrapper<PlatformJob>() 
 | 
                        .selectAll(PlatformJob.class) 
 | 
                        .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                        .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(Constants.equalsInteger(lineUpDetailDTO.getQueryType(),Constants.ZERO) 
 | 
                                ,PlatformJob::getDrivierPhone,lineUpDetailDTO.getMobile()) 
 | 
                        .eq(Constants.equalsInteger(lineUpDetailDTO.getQueryType(),Constants.ONE) 
 | 
                                ,PlatformJob::getId,lineUpDetailDTO.getJobId()) 
 | 
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(), 
 | 
                                Constants.PlatformJobStatus.IN_WAIT.getKey(), 
 | 
                                Constants.PlatformJobStatus.WORKING.getKey(), 
 | 
                                Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                        .orderByDesc(PlatformJob::getStatus) 
 | 
                        .orderByAsc(PlatformJob::getSignDate) 
 | 
        ); 
 | 
        //获取所有月台组 
 | 
        List<Integer> platformIdList = platformJobList.stream().map(m->m.getPlatformGroupId()).collect(Collectors.toList()); 
 | 
        if(CollectionUtils.isEmpty(platformIdList)){ 
 | 
            return lineUpVO; 
 | 
        } 
 | 
        List<PlatformGroup> platformGroupList = platformGroupMapper.selectList(new QueryWrapper<PlatformGroup>().lambda() 
 | 
                .eq(PlatformGroup::getIsdeleted,Constants.ZERO) 
 | 
                .in(PlatformGroup::getId,platformIdList)); 
 | 
  
 | 
        for (PlatformGroup platformGroup:platformGroupList) { 
 | 
            //查询本月台组下 自己的数据 最早签到的 
 | 
            PlatformJob platformJob = platformJobList.stream().filter(i->Constants.equalsInteger(i.getPlatformGroupId(),platformGroup.getId())).findFirst().orElse(null); 
 | 
            //查询在当前月台组下 签到排队车辆数据 
 | 
            List<PlatformJob> platformJobSignInList = platformJobJoinMapper.selectJoinList(PlatformJob.class, 
 | 
                    new MPJLambdaWrapper<PlatformJob>() 
 | 
                            .selectAll(PlatformJob.class) 
 | 
                            .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                            .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                            .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                            .eq(PlatformJob::getPlatformGroupId,platformGroup.getId()) 
 | 
                            .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(), 
 | 
                                    Constants.PlatformJobStatus.IN_WAIT.getKey(), 
 | 
                                    Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                            .orderByAsc(PlatformJob::getSignDate) 
 | 
                            .orderByAsc(PlatformJob::getSignNum) 
 | 
            ); 
 | 
            platformGroup.setSignJobList(platformJobSignInList); 
 | 
            //查询当前月台组下 
 | 
            List<PlatformJob> platformJobWorkList = platformJobJoinMapper.selectJoinList(PlatformJob.class, 
 | 
                    new MPJLambdaWrapper<PlatformJob>() 
 | 
                            .selectAll(PlatformJob.class) 
 | 
                            .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                            .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                            .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                            .eq(PlatformJob::getPlatformGroupId,platformGroup.getId()) 
 | 
                            .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                            .orderByDesc(PlatformJob::getSignDate)); 
 | 
            platformGroup.setWorkJobList(platformJobWorkList); 
 | 
        } 
 | 
        lineUpVO.setPlatformGroupList(platformGroupList); 
 | 
        return lineUpVO; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取已作业时间 
 | 
     * @param platformJob 
 | 
     */ 
 | 
    public static Long getWorkTime(PlatformJob platformJob,PlatformLogMapper platformLogMapper){ 
 | 
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>() 
 | 
                .lambda().eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformLog::getJobId,platformJob.getId()) 
 | 
                .ne(PlatformLog::getParam3,"0") 
 | 
        ); 
 | 
        Long optTime = 0L; 
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformLogList)){ 
 | 
            List<Long> param3List = platformLogList.stream().map(m->Long.valueOf(m.getParam3())).collect(Collectors.toList()); 
 | 
            for (Long val:param3List) { 
 | 
                optTime = optTime + val; 
 | 
            } 
 | 
        } 
 | 
        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ 
 | 
            //查询最后一次开始的日志数据 
 | 
            PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformLog::getObjType,Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                    .eq(PlatformLog::getJobId,platformJob.getId()) 
 | 
                    .orderByDesc(PlatformLog::getCreateDate) 
 | 
                    .last(" limit 1 ") 
 | 
            ); 
 | 
            if(Objects.nonNull(lastBeginPlatform)){ 
 | 
                String v = Long.toString((System.currentTimeMillis() - lastBeginPlatform.getCreateDate().getTime() )/ 1000) ; 
 | 
                optTime = optTime + Long.valueOf(v); 
 | 
            } 
 | 
        } 
 | 
        platformJob.setWorkTime(optTime); 
 | 
        return optTime; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 通知入园 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public PlatformJob platformInPark(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId()) 
 | 
                || Objects.isNull(jobOperateDTO.getPlatformId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        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()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
  
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.IN_WAIT.getKey(),oldPlatformJob,platformJob, 
 | 
                Constants.PlatformJobLogType.IN_WAIT.getInfo()); 
 | 
  
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobCallIn,null,null 
 | 
        ); 
 | 
         
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())) { 
 | 
          this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobCallIn,platformJob); 
 | 
        } 
 | 
        return platformJob; 
 | 
    } 
 | 
  
 | 
    public void sendWxNotice(String objCode,PlatformJob platformJob){ 
 | 
        SystemUser driver = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() 
 | 
                .eq(SystemUser::getDeleted, Constants.ZERO) 
 | 
                .in(SystemUser::getType, Constants.ZERO,Constants.TWO) 
 | 
                .eq(SystemUser::getMobile,platformJob.getDrivierPhone()) 
 | 
                .last(" limit 1 ")); 
 | 
        if (Objects.nonNull(driver) && StringUtils.isNotBlank(driver.getOpenid())) { 
 | 
            PlatformJob p = platformJobJoinMapper.selectJoinOne(PlatformJob.class, 
 | 
                    new MPJLambdaWrapper<PlatformJob>() 
 | 
                            .selectAll(PlatformJob.class) 
 | 
                            .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                            .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                            .eq(PlatformJob::getId,platformJob.getId()) 
 | 
                            .last(" limit 1") 
 | 
            ); 
 | 
            WxPlatNotice wxPlatNotice = new WxPlatNotice(); 
 | 
            wxPlatNotice.sendPlatformJobTemplateNotice(systemDictDataBiz, 
 | 
                    wxNoticeConfigMapper, p, 
 | 
                    objCode, 
 | 
                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(), 
 | 
                    Arrays.asList(driver.getOpenid().split(",")) 
 | 
            ); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    private Logger logger = LoggerFactory.getLogger(PlatformJobServiceImpl.class); 
 | 
  
 | 
    @Override 
 | 
    public void sendInPark(PlatformJob platformJob){ 
 | 
        log.info("【下发停车场权限】================开始===="+platformJob.getCarCodeFront()); 
 | 
        if(Constants.equalsInteger(platformJob.getType(),Constants.THREE) 
 | 
                && Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey()) ){ 
 | 
            //如果是已完成的外协车卸货作业,查询所有合同是否以上电子锁,如果没有,不自动授权离园 
 | 
            List<PlatformWmsDetail> details = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                     .select(PlatformWmsDetail::getLockStatus,PlatformWmsDetail::getId) 
 | 
                    .eq(PlatformWmsDetail::getJobId,platformJob.getId()) 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
            ); 
 | 
            if(details!=null && details.size()>0){ 
 | 
                for(PlatformWmsDetail d : details){ 
 | 
                    if(Constants.equalsInteger(d.getLockStatus(),Constants.ZERO)){ 
 | 
                        //如果存在未上锁,不自动授权离园 
 | 
                        return; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        if(Constants.equalsInteger(platformJob.getType(),Constants.TWO) 
 | 
                || Constants.equalsInteger(platformJob.getType(),Constants.THREE) 
 | 
                || Constants.equalsInteger(platformJob.getType(),Constants.FOUR)){ 
 | 
            //查询当前启用的停车场 
 | 
            List<Parks> parksList = parksMapper.selectList(new QueryWrapper<Parks>() 
 | 
                    .lambda() 
 | 
                    .isNotNull(Parks::getHkId) 
 | 
                    .eq(Parks::getIsdeleted,Constants.ZERO)); 
 | 
  
 | 
            //取消当前车辆所有权限 
 | 
            List<VisitPark> cancelParkList = visitParkMapper.selectList(new QueryWrapper<VisitPark>().lambda() 
 | 
                    .eq(VisitPark::getCarCode,platformJob.getCarCodeFront()) 
 | 
                    .eq(VisitPark::getObjType,Constants.ONE) 
 | 
                    .eq(VisitPark::getHkStatus,Constants.ONE) 
 | 
                    .isNotNull(VisitPark::getHkId) 
 | 
            ); 
 | 
  
 | 
            log.info("【下发停车场权限】================开始取消当前车辆所有权限===="+JSONObject.toJSONString(cancelParkList)); 
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(cancelParkList)){ 
 | 
                for (VisitPark visitPark:cancelParkList) { 
 | 
                    ParkReservationDelRequest param = new ParkReservationDelRequest(); 
 | 
                    param.setReserveOrderNo(visitPark.getHkId()); 
 | 
                    BaseResponse response =  HKService.parkReservationDeletion(param); 
 | 
                    if(response!=null 
 | 
                            && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                        visitPark.setHkStatus(Constants.THREE); 
 | 
                        visitPark.setIsdeleted(Constants.ONE); 
 | 
                        visitPark.setRemark("再次下发清空权限"); 
 | 
                        visitPark.setEditDate(new Date()); 
 | 
                        visitParkMapper.updateById(visitPark); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            List<VisitPark> visitParkList = new ArrayList<>(); 
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(parksList)){ 
 | 
                Boolean sendStatus = true; 
 | 
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(parksList)){ 
 | 
                    for (Parks parks:parksList) { 
 | 
                        VisitPark visitPark = new VisitPark(); 
 | 
                        visitPark.setIsdeleted(Constants.ZERO); 
 | 
                        visitPark.setCreateDate(new Date()); 
 | 
                        visitPark.setVisitApplyId(platformJob.getId().toString()); 
 | 
                        visitPark.setCarCode(platformJob.getCarCodeFront()); 
 | 
                        visitPark.setParkId(parks.getId().toString()); 
 | 
                        visitPark.setStartTime(new Date()); 
 | 
                        visitPark.setEndTime(DateUtil.getXMinuteAfterDate(visitPark.getStartTime(),Integer.valueOf(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.POWER_MINUTE).getCode()))); 
 | 
                        visitPark.setParkHkId(parks.getHkId()); 
 | 
                        visitPark.setObjType(Constants.ONE); 
 | 
  
 | 
                        ParkReservationAddRequest request = new ParkReservationAddRequest(); 
 | 
                        request.setPlateNo(visitPark.getCarCode()); 
 | 
                        request.setParkSyscode(visitPark.getParkHkId()); 
 | 
                        request.setPhoneNo(platformJob.getDrivierPhone()); 
 | 
                        request.setOwner(platformJob.getDriverName()); 
 | 
                        request.setAllowTimes(Constants.ONE+""); 
 | 
                        request.setIsCharge(Constants.ONE+""); 
 | 
                        request.setStartTime(Objects.isNull(visitPark.getStartTime())?DateUtil.getISO8601Timestamp2(new Date()):DateUtil.getISO8601Timestamp2(visitPark.getStartTime())); 
 | 
                        request.setEndTime(Objects.isNull(visitPark.getEndTime())?"2999-12-31T00:00:00+08:00":DateUtil.getISO8601Timestamp2(visitPark.getEndTime())); 
 | 
                        BaseResponse response =  HKService.parkReservationAddition(request); 
 | 
  
 | 
                        visitPark.setHkDate(new Date()); 
 | 
                        if(response!=null 
 | 
                                && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                            ParkReservationAddResponse parkReservationAddResponse = (ParkReservationAddResponse) response.getData(); 
 | 
                            visitPark.setHkId(parkReservationAddResponse.getReserveOrderNo()); 
 | 
                            visitPark.setHkStatus(Constants.ONE); 
 | 
                            visitPark.setRemark("车辆权限下发成功"); 
 | 
                        }else{ 
 | 
                            visitPark.setHkStatus(Constants.TWO); 
 | 
                            visitPark.setRemark("车辆权限下发失败~"); 
 | 
                            //下发失败  标记主业务状态为下发失败 
 | 
                            sendStatus = false; 
 | 
                        } 
 | 
                        visitParkList.add(visitPark); 
 | 
  
 | 
                    } 
 | 
                    visitParkMapper.insert(visitParkList); 
 | 
                    platformJob.setInHkdate(new Date()); 
 | 
                    if(sendStatus){ 
 | 
                        platformJob.setInHkstatus(Constants.TWO); 
 | 
                        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ 
 | 
                            //如果已下发成功,标记已授权离园状态 
 | 
                            platformJob.setStatus(Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()); 
 | 
                        } 
 | 
                    }else{ 
 | 
                        platformJob.setInHkstatus(Constants.THREE); 
 | 
                    } 
 | 
                    platformJobMapper.updateById(platformJob); 
 | 
                } 
 | 
  
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public void cancelInPark(PlatformJob platformJob){ 
 | 
        if(Constants.equalsInteger(platformJob.getType(),Constants.TWO) 
 | 
                || Constants.equalsInteger(platformJob.getType(),Constants.THREE) 
 | 
                || StringUtils.isBlank(platformJob.getCarCodeFront()) 
 | 
                || Constants.equalsInteger(platformJob.getType(),Constants.FOUR)){ 
 | 
  
 | 
            List<VisitPark> visitParkList = visitParkMapper.selectList(new QueryWrapper<VisitPark>().lambda() 
 | 
                    .eq(VisitPark::getCarCode,platformJob.getCarCodeFront()) 
 | 
                    .eq(VisitPark::getObjType,Constants.ONE) 
 | 
                    .eq(VisitPark::getHkStatus,Constants.ONE) 
 | 
                    .isNotNull(VisitPark::getHkId) 
 | 
                    .apply("  END_TIME > now() ") 
 | 
                    .orderByDesc(VisitPark::getCreateDate) 
 | 
            ); 
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(visitParkList)){ 
 | 
                for (VisitPark visitPark:visitParkList) { 
 | 
                    ParkReservationDelRequest param = new ParkReservationDelRequest(); 
 | 
                    param.setReserveOrderNo(visitPark.getHkId()); 
 | 
                    BaseResponse response =  HKService.parkReservationDeletion(param); 
 | 
                    if(response!=null 
 | 
                            && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
                        visitPark.setHkStatus(Constants.THREE); 
 | 
                        visitPark.setIsdeleted(Constants.ONE); 
 | 
                        visitPark.setEditDate(new Date()); 
 | 
                        visitParkMapper.updateById(visitPark); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 月台叫号 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public PlatformJob platformCallNumber(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(!(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey()) 
 | 
                || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey()) 
 | 
                || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.TRANSFERING.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(platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() 
 | 
                .eq(PlatformJob::getPlatformId,platform.getId()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .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(Objects.isNull(platformJob.getCallDate())?new Date():null); 
 | 
        platformJob.setCallUserId(jobOperateDTO.getLoginUserInfo().getId()); 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.CALLED.getKey()); 
 | 
        platformJob.setPlatformId(jobOperateDTO.getPlatformId()); 
 | 
        //判断是否需要填充进去 
 | 
        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.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
  
 | 
  
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.CALLED.getKey(),oldPlatformJob,platformJob, 
 | 
                Constants.PlatformJobLogType.CALLED.getInfo().replace("{data}",platform.getName())); 
 | 
  
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobSingIn,platform.getName(),null 
 | 
        ); 
 | 
  
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())){ 
 | 
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobSingIn,platformJob); 
 | 
        } 
 | 
  
 | 
  
 | 
        //广播 led通知 
 | 
        platformJob.setPlatformName(platform.getName()); 
 | 
        this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.CALLING.getInfo(), 
 | 
                Constants.PlatformBroadcastContent.CALLING.getInfo()+ Constants.PlatformBroadcastContent.CALLING.getInfo() + Constants.PlatformBroadcastContent.CALLING.getInfo() 
 | 
        ); 
 | 
  
 | 
        platformJob.setPlatformWmsCode(platform.getCode()); 
 | 
        return platformJob; 
 | 
    } 
 | 
  
 | 
  
 | 
    public void broadcastAndLEed(PlatformJob model,String ledContent,String broadcastContent){ 
 | 
        int speed = 13; 
 | 
        try { 
 | 
            speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode()); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        } 
 | 
        log.error("查询LED与广播数据------------------------------------------------------------------------------------------"); 
 | 
        List<PlatformDevice> deviceList = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda() 
 | 
                .eq(PlatformDevice::getPlatformId,model.getPlatformId()) 
 | 
                .eq(PlatformDevice::getIsdeleted,Constants.ZERO) 
 | 
        ); 
 | 
        if(deviceList ==null || deviceList.size() == 0){ 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        Boolean sendLed = StringUtils.isBlank(ledContent)?false:true; 
 | 
        Boolean sendBroadcast = StringUtils.isBlank(broadcastContent)?false:true; 
 | 
  
 | 
        if (sendLed) { 
 | 
            //广播  param2 = 车牌号   param = 月台 
 | 
            ledContent = ledContent.replace("${param}",model.getPlatformName()); 
 | 
            ledContent = ledContent.replace("${param2}",model.getCarCodeFront()); 
 | 
        } 
 | 
        if(sendBroadcast){ 
 | 
            //广播  param2 = 月台     param = 车牌号 
 | 
            broadcastContent = broadcastContent.replace("${param2}",model.getPlatformName()); 
 | 
            broadcastContent = broadcastContent.replace("${param}",model.getCarCodeFront()); 
 | 
        } 
 | 
  
 | 
        List<String> broadcastList = new ArrayList<>(); 
 | 
        List<String> ledList = new ArrayList<>(); 
 | 
        String bNames = ""; 
 | 
        List<PlatformBroadcastLog> logList = new ArrayList<>(); 
 | 
        log.error("循环调起led与广播------------------------------------------------------------------------------------------"); 
 | 
        for(PlatformDevice device : deviceList){ 
 | 
            if(StringUtils.isBlank(device.getHkId())){ 
 | 
                continue; 
 | 
            } 
 | 
            if(Constants.equalsInteger(device.getType(),Constants.ZERO)&&sendLed){ 
 | 
                log.error("调起led------------------------------------------------------------------------------------------"); 
 | 
                //如果是LED 
 | 
                PlatformBroadcastLog log = HkSyncPushServiceImpl.dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),ledContent,speed,1); 
 | 
                logList.add(log); 
 | 
                ledList.add(device.getHkId()); 
 | 
            }else  if(Constants.equalsInteger(device.getType(),Constants.TWO)&&sendBroadcast){ 
 | 
                log.error("调起广播------------------------------------------------------------------------------------------"); 
 | 
                //如果是广播点 
 | 
                bNames += device.getName()+";"; 
 | 
                broadcastList.add(device.getHkId()); 
 | 
            } 
 | 
        } 
 | 
        if(broadcastList.size()>0){ 
 | 
            PlatformBroadcastLog log = HkSyncPushServiceImpl.dealBroadcastBiz(model,broadcastList,bNames,broadcastContent); 
 | 
            logList.add(log); 
 | 
        } 
 | 
        if(logList.size()>0){ 
 | 
            platformBroadcastLogMapper.insert(logList); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 转移月台 
 | 
     * @param jobOperateDTO 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public void platformMove(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
        || Objects.isNull(jobOperateDTO.getJobId()) 
 | 
                || Objects.isNull(jobOperateDTO.getPlatformId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if( !( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
            || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.EXCEPTION.getKey()) 
 | 
        )){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
        if(Constants.equalsInteger(platformJob.getPlatformId(),jobOperateDTO.getPlatformId())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无法转移本月台"); 
 | 
        } 
 | 
        Platform oldPlatform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
  
 | 
        Platform platform = platformJoinMapper.selectById(jobOperateDTO.getPlatformId()); 
 | 
        if(Objects.isNull(platform)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息"); 
 | 
        } 
 | 
  
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
  
 | 
        platformJob.setPlatforms(platformJob.getPlatforms() + "," +jobOperateDTO.getPlatformId().toString()); 
 | 
        platformJob.setPlatformNames(platformJob.getPlatformNames() + "," +platform.getName()); 
 | 
  
 | 
        platformJob.setTransPlatformDate(new Date()); 
 | 
        platformJob.setTransPlatformUserId(jobOperateDTO.getLoginUserInfo().getId()); 
 | 
        platformJob.setPlatformId(jobOperateDTO.getPlatformId()); 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.TRANSFERING.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
  
 | 
        //TODO 调起WMS 通知月台转移 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.TRANSFERING.getKey(),oldPlatformJob,platformJob, 
 | 
                Constants.PlatformJobLogType.TRANSFERING.getInfo().replace("{data}",oldPlatform.getName())); 
 | 
  
 | 
  
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobMove,oldPlatform.getName(),platform.getName() 
 | 
        ); 
 | 
  
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())) { 
 | 
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobMove,platformJob); 
 | 
        } 
 | 
  
 | 
        platformJob.setPlatformName(oldPlatform.getName()); 
 | 
        platformJob.setPlatformId(oldPlatform.getId()); 
 | 
        this.broadcastAndLEed(platformJob, StringUtils.isBlank(oldPlatform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getLedContent(), 
 | 
                null 
 | 
        ); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 月台过号 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public PlatformJob platformOverNumber(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
  
 | 
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
  
 | 
        Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
        if(Objects.isNull(platform)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息"); 
 | 
        } 
 | 
  
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
  
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.WART_SIGN_IN.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.OVER_NUMBER.getKey(),oldPlatformJob,platformJob, 
 | 
                Constants.PlatformJobLogType.OVER_NUMBER.getInfo()); 
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobOverNum,null,null 
 | 
        ); 
 | 
  
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())){ 
 | 
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobOverNum,platformJob); 
 | 
        } 
 | 
  
 | 
        platformJob.setPlatformName(platform.getName()); 
 | 
        this.broadcastAndLEed(platformJob, StringUtils.isBlank(platform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():platform.getLedContent(), 
 | 
                null 
 | 
        ); 
 | 
  
 | 
        return platformJob; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 异常挂起 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public void platformErr(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
  
 | 
        Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
  
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
  
 | 
        platformJob.setErrorDate(new Date()); 
 | 
        platformJob.setErrorUserId(jobOperateDTO.getLoginUserInfo().getId()); 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.EXCEPTION.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.EXCEPTION.getKey(),oldPlatformJob,platformJob, 
 | 
                Constants.PlatformJobLogType.EXCEPTION.getInfo()); 
 | 
  
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobError,platform.getName(),null 
 | 
        ); 
 | 
  
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())) { 
 | 
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobError,platformJob); 
 | 
        } 
 | 
  
 | 
        platformJob.setPlatformName(platform.getName()); 
 | 
        this.broadcastAndLEed(platformJob, StringUtils.isBlank(platform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():platform.getLedContent(), 
 | 
                null 
 | 
        ); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 开始作业 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public PlatformJob beginWork(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
  
 | 
        Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
        if(Objects.isNull(platform)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息"); 
 | 
        } 
 | 
         
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
        if(Objects.isNull(platformJob.getStartDate())){ 
 | 
            platformJob.setStartDate(new Date()); 
 | 
        } 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.WORKING.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
  
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.WORKING.getKey(),oldPlatformJob,platformJob, 
 | 
                Constants.PlatformJobLogType.WORKING.getInfo().replace("{data}",platform.getName())); 
 | 
  
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobWorking,platform.getName(),null 
 | 
        ); 
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())) { 
 | 
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobWorking,platformJob); 
 | 
        } 
 | 
        //广播 led通知 
 | 
        platformJob.setPlatformName(platform.getName()); 
 | 
        this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.WORKING.getInfo(), 
 | 
                null 
 | 
        ); 
 | 
  
 | 
        return platformJob; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PlatformJob getLastWaitJob(String uuid, LoginUserInfo loginUser){ 
 | 
        String u = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.BIGSCREEN_UUID); 
 | 
        if(!StringUtils.equals(u,uuid)){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,二维码已失效!"); 
 | 
        } 
 | 
        PlatformJob platformJob =  platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda() 
 | 
                .eq(PlatformJob::getDrivierPhone,loginUser.getMobile()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WART_SIGN_IN.getKey()) 
 | 
                .orderByDesc(PlatformJob::getCreateDate) 
 | 
                .last(" limit 1 ") ); 
 | 
            return platformJob; 
 | 
    } 
 | 
     
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public PlatformJob finishWork(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(! (Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
        ||Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.EXCEPTION.getKey()) )){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
  
 | 
        Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); 
 | 
        if(Objects.isNull(platform)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息"); 
 | 
        } 
 | 
         
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
  
 | 
        platformJob.setDoneDate(new Date()); 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.DONE.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.DONE.getKey(),oldPlatformJob,platformJob , 
 | 
                Constants.PlatformJobLogType.DONE.getInfo()); 
 | 
  
 | 
        if(Constants.equalsInteger(platformJob.getType(),Constants.THREE)){ 
 | 
            // 外协车装货 查询TMS 电子锁情况 
 | 
            List<PlatformWmsDetail> details = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                    .eq(PlatformWmsDetail::getJobId,platformJob.getId()) 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
            ); 
 | 
            if(details!=null && details.size()>0){ 
 | 
                Date date = new Date(); 
 | 
                List<String> codeList =new ArrayList<>(); 
 | 
                for(PlatformWmsDetail d : details){ 
 | 
                    codeList.add(d.getContractNum()); 
 | 
                } 
 | 
                TmsLockStatusQueryRequest tmsLock = new TmsLockStatusQueryRequest(); 
 | 
                tmsLock.setContractNumbers(codeList); 
 | 
                TmsBaseResponse<List<TmsLockStatusQueryResponse>>  lockResult =  tmsService.lockStatusQuery(tmsLock); 
 | 
                if(lockResult!=null && lockResult.getCode()!=null && lockResult.getCode().equals("0")&& lockResult.getData()!=null ){ 
 | 
                     for(TmsLockStatusQueryResponse s : lockResult.getData()){ 
 | 
                       if(StringUtils.isBlank(s.getContractNumber())){ 
 | 
                           continue; 
 | 
                       } 
 | 
                         platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                                 .eq(PlatformWmsDetail::getContractNum,s.getContractNumber()) 
 | 
                                 .set(PlatformWmsDetail::getEditDate,date) 
 | 
                                 .set(PlatformWmsDetail::getLockDate,s.getOutDate()) 
 | 
                                 .set(PlatformWmsDetail::getLockStatus,Constants.ONE) 
 | 
                                 .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO)); 
 | 
                     } 
 | 
                } 
 | 
            } 
 | 
  
 | 
        }else if(Constants.equalsInteger(platformJob.getType(),Constants.ONE) || Constants.equalsInteger(platformJob.getType(),Constants.FOUR)){ 
 | 
            //TODO 外协车卸货 或者 市公司车卸货 则根据任务情况 
 | 
        } 
 | 
  
 | 
  
 | 
        //发送短信信息 
 | 
        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(), 
 | 
                SmsConstants.platformJobContent.platformJobFinish,platform.getName(),null 
 | 
        ); 
 | 
  
 | 
        //公众号模板消息 
 | 
        if(Objects.nonNull(platformJob.getDrivierPhone())) { 
 | 
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobFinish,platformJob); 
 | 
        } 
 | 
  
 | 
        //广播 led通知 
 | 
        platformJob.setPlatformName(platform.getName()); 
 | 
        this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.DONE.getInfo(), 
 | 
                Constants.PlatformBroadcastContent.DONE.getInfo()); 
 | 
        return platformJob; 
 | 
    } 
 | 
    @Override 
 | 
    public void checkWmsLockStatus(){ 
 | 
        List<PlatformWmsDetail> details = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class,new MPJLambdaWrapper<PlatformWmsDetail>() 
 | 
                .selectAll(PlatformWmsDetail.class) 
 | 
                .leftJoin(PlatformJob.class,PlatformJob::getId,PlatformWmsDetail::getJobId) 
 | 
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey())//查询已完成作业的 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .and(wr->{wr.isNull(PlatformWmsDetail::getLockStatus).or().eq(PlatformWmsDetail::getLockStatus,Constants.ZERO);}) 
 | 
                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO)); 
 | 
       if(details !=null && details.size()>0){ 
 | 
           Date date = new Date(); 
 | 
           List<String> codeList =new ArrayList<>(); 
 | 
           for(PlatformWmsDetail d : details){ 
 | 
               codeList.add(d.getContractNum()); 
 | 
           } 
 | 
           TmsLockStatusQueryRequest tmsLock = new TmsLockStatusQueryRequest(); 
 | 
           tmsLock.setContractNumbers(codeList); 
 | 
           List<Integer> jobIds = new ArrayList<>(); 
 | 
           TmsBaseResponse<List<TmsLockStatusQueryResponse>>  lockResult =  tmsService.lockStatusQuery(tmsLock); 
 | 
           if(lockResult!=null && lockResult.getCode()!=null && lockResult.getCode().equals("0")&& lockResult.getData()!=null ){ 
 | 
               for(TmsLockStatusQueryResponse s : lockResult.getData()){ 
 | 
                   try { 
 | 
                       //异常处理,能处理一个是一个 
 | 
                       platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                               .eq(PlatformWmsDetail::getContractNum,s.getContractNumber()) 
 | 
                               .set(PlatformWmsDetail::getEditDate,date) 
 | 
                               .set(PlatformWmsDetail::getLockDate,s.getOutDate()) 
 | 
                               .set(PlatformWmsDetail::getLockStatus,Constants.ONE) 
 | 
                               .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO)); 
 | 
                       PlatformWmsDetail job = getJobByContractnumFromDetail(s.getContractNumber(),details); 
 | 
                       if(job != null){ 
 | 
                           jobIds.add(job.getJobId()); 
 | 
                       } 
 | 
                   }catch (Exception e){ 
 | 
                        logger.error("=============更新电子锁状态信息异常:"+e.getMessage()); 
 | 
                   } 
 | 
               } 
 | 
           } 
 | 
           if(jobIds.size()>0){ 
 | 
               List<PlatformJob> list = platformJobMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                       .selectAll(PlatformJob.class) 
 | 
                       .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                       .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()) 
 | 
                       .in(PlatformJob::getId,jobIds) 
 | 
               ); 
 | 
               if(list!=null){ 
 | 
                   for(PlatformJob platformJob : list){ 
 | 
                       sendInPark(platformJob);//检查是否需要自动授权离园 
 | 
                   } 
 | 
               } 
 | 
           } 
 | 
       } 
 | 
  
 | 
    } 
 | 
  
 | 
    private PlatformWmsJob getJobByContractnum(String contractNumber, List<PlatformWmsJob> details) { 
 | 
        for(PlatformWmsJob d : details){ 
 | 
            if(StringUtils.equals(contractNumber,d.getContractNum())){ 
 | 
                return d; 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    private PlatformWmsDetail getJobByContractnumFromDetail(String contractNumber, List<PlatformWmsDetail> details) { 
 | 
        for(PlatformWmsDetail d : details){ 
 | 
            if(StringUtils.equals(contractNumber,d.getContractNum())){ 
 | 
                return d; 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 授权离园 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public PlatformJob powerLevel(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getJobId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); 
 | 
        if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
        platformJob.setOutUserId(jobOperateDTO.getLoginUserInfo().getId()); 
 | 
        platformJob.setOutHkdate(new Date()); 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJob.setRemark(jobOperateDTO.getRemark()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.AUTHED_LEAVE.getKey(),oldPlatformJob,platformJob , 
 | 
                Constants.PlatformJobLogType.AUTHED_LEAVE.getInfo()); 
 | 
        return platformJob; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 月台相机推送 开始作业 
 | 
     * @param jobOperateDTO 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    public void cameraStartWork(JobOperateDTO jobOperateDTO){ 
 | 
        if(Objects.isNull(jobOperateDTO) 
 | 
                || Objects.isNull(jobOperateDTO.getDeviceId()) 
 | 
                || StringUtils.isBlank(jobOperateDTO.getCarCodeBack())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformDevice platformDevice = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda() 
 | 
                        .eq(PlatformDevice::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformDevice::getDeviceId,jobOperateDTO.getDeviceId()) 
 | 
                .last(" limit 1") 
 | 
        ); 
 | 
        if(Objects.isNull(platformDevice)){ 
 | 
            return; 
 | 
        } 
 | 
        PlatformJob platformJob =  platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda() 
 | 
                .eq(PlatformJob::getPlatformId,platformDevice.getPlatformId()) 
 | 
                .eq(PlatformJob::getCarCodeBack,jobOperateDTO.getCarCodeBack()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                .last(" limit 1 ") 
 | 
        ); 
 | 
        if(Objects.isNull(platformJob)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转!"); 
 | 
        } 
 | 
  
 | 
        PlatformJob oldPlatformJob = new PlatformJob(); 
 | 
        BeanUtils.copyProperties(platformJob,oldPlatformJob); 
 | 
        if(Objects.isNull(platformJob.getStartDate())){ 
 | 
            platformJob.setStartDate(new Date()); 
 | 
        } 
 | 
        platformJob.setStatus(Constants.PlatformJobStatus.WORKING.getKey()); 
 | 
        platformJob.setEditDate(new Date()); 
 | 
        platformJobMapper.updateById(platformJob); 
 | 
        //存储操作日志 
 | 
        savePlatformLog(Constants.PlatformJobLogType.WORKING.getKey(),oldPlatformJob,platformJob , 
 | 
                Constants.PlatformJobLogType.DONE.getInfo()); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 存储操作日志 
 | 
     * @param objType 
 | 
     * @param platformJobBefor 
 | 
     * @param platformJobAfter 
 | 
     */ 
 | 
    public void savePlatformLog(Integer objType,PlatformJob platformJobBefor,PlatformJob platformJobAfter,String content){ 
 | 
        PlatformLog platformLog = new PlatformLog(); 
 | 
        platformLog.setIsdeleted(Constants.ZERO); 
 | 
        platformLog.setCreateDate(new Date()); 
 | 
        platformLog.setJobId(platformJobAfter.getId()); 
 | 
        platformLog.setObjType(objType); 
 | 
        platformLog.setContent(content); 
 | 
        platformLog.setParam4(platformJobAfter.getCarCodeFront()); 
 | 
        platformLog.setBeforeContent(JSONObject.toJSONString(platformJobBefor)); 
 | 
        platformLog.setAfterContent(JSONObject.toJSONString(platformJobAfter)); 
 | 
        platformLog.setObjId(platformJobAfter.getId().toString()); 
 | 
  
 | 
        if(Constants.equalsInteger(objType,Constants.PlatformJobLogType.EXCEPTION.getKey())){ 
 | 
            //查询最后一次开始作业的日志 
 | 
            PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey()) 
 | 
                    .eq(PlatformLog::getJobId,platformLog.getJobId()) 
 | 
                    .orderByDesc(PlatformLog::getCreateDate) 
 | 
                    .last(" limit 1 ") 
 | 
            ); 
 | 
            //异常挂起 与转移中 记录本次 作业时间 
 | 
            platformLog.setParam1(lastBeginPlatform.getParam1()); 
 | 
            platformLog.setParam2(DateUtil.dateTypeToString(platformLog.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); 
 | 
            String v = Long.toString((platformLog.getCreateDate().getTime() - DateUtil.StringToDate(lastBeginPlatform.getParam1(),"yyyy-MM-dd HH:mm:ss").getTime() )/ 1000) ; 
 | 
            platformLog.setParam3(v); 
 | 
            platformLog.setRemark(platformJobBefor.getPlatformId().toString()); 
 | 
        }else if(Constants.equalsInteger(objType,Constants.PlatformJobLogType.TRANSFERING.getKey())){ 
 | 
            //查询最后一次日志是否为异常挂起,异常挂起后可进行转移 如果进行转移那么业务就需要重新进行开始就不需要特殊处理  ,如果不是异常挂起进行数据结束 则直接查询最后一次开始的时间 
 | 
            PlatformLog lastPlatformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformLog::getJobId,platformLog.getJobId()) 
 | 
                    .orderByDesc(PlatformLog::getCreateDate) 
 | 
                    .last(" limit 1 ") 
 | 
            ); 
 | 
            if(!Constants.equalsInteger(lastPlatformLog.getObjType(),Constants.PlatformJobLogType.EXCEPTION.getKey())){ 
 | 
                //查询最后一次开始作业的日志 
 | 
                PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                        .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey()) 
 | 
                        .eq(PlatformLog::getJobId,platformLog.getJobId()) 
 | 
                        .orderByDesc(PlatformLog::getCreateDate) 
 | 
                        .last(" limit 1 ") 
 | 
                ); 
 | 
                //异常挂起 与转移中 记录本次 作业时间 
 | 
                platformLog.setParam1(lastBeginPlatform.getParam1()); 
 | 
                platformLog.setParam2(DateUtil.dateTypeToString(platformLog.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); 
 | 
                String v = Long.toString((platformLog.getCreateDate().getTime() - DateUtil.StringToDate(lastBeginPlatform.getParam1(),"yyyy-MM-dd HH:mm:ss").getTime() )/ 1000) ; 
 | 
                platformLog.setParam3(v); 
 | 
                platformLog.setRemark(platformJobBefor.getPlatformId().toString()); 
 | 
            }else{ 
 | 
                platformLog.setParam3("0"); 
 | 
            } 
 | 
        }else  if(Constants.equalsInteger(objType,Constants.PlatformJobLogType.DONE.getKey())){ 
 | 
            //查询最后一次日志是否为异常挂起,异常挂起后可进行转移 如果进行转移那么业务就需要重新进行开始就不需要特殊处理  ,如果不是异常挂起进行数据结束 则直接查询最后一次开始的时间 
 | 
            PlatformLog lastPlatformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformLog::getJobId,platformLog.getJobId()) 
 | 
                    .orderByDesc(PlatformLog::getCreateDate) 
 | 
                    .last(" limit 1 ") 
 | 
            ); 
 | 
            if(Objects.nonNull(lastPlatformLog) && Constants.equalsInteger(lastPlatformLog.getObjType(),Constants.PlatformJobLogType.EXCEPTION.getKey())){ 
 | 
                platformLog.setParam3("0"); 
 | 
            }else{ 
 | 
                //查询最后一次开始作业的日志 
 | 
                PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                        .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey()) 
 | 
                        .eq(PlatformLog::getJobId,platformLog.getJobId()) 
 | 
                        .orderByDesc(PlatformLog::getCreateDate) 
 | 
                        .last(" limit 1 ") 
 | 
                ); 
 | 
                //非异常挂起 则直接过去最后一次开始作业的日志的开始时间 
 | 
                platformLog.setParam1(lastBeginPlatform.getParam1()); 
 | 
                platformLog.setParam2(DateUtil.dateTypeToString(platformLog.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); 
 | 
                String v = Long.toString((platformJobAfter.getDoneDate().getTime() -  DateUtil.StringToDate(lastBeginPlatform.getParam1(),"yyyy-MM-dd HH:mm:ss").getTime()) / 1000) ; 
 | 
                platformLog.setParam3(v); 
 | 
                platformLog.setRemark(platformJobBefor.getPlatformId().toString()); 
 | 
            } 
 | 
        }else if(Constants.equalsInteger(objType,Constants.PlatformJobLogType.WORKING.getKey())){ 
 | 
            platformLog.setParam1(DateUtil.dateTypeToString(platformLog.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); 
 | 
            platformLog.setParam3("0");  
 | 
            platformLog.setRemark(platformJobBefor.getPlatformId().toString()); 
 | 
        }else{ 
 | 
            platformLog.setParam3("0"); 
 | 
        } 
 | 
        platformLogMapper.insert(platformLog); 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public  List<Platform> getPlatformList(Integer groupId, LoginUserInfo loginUserInfo){ 
 | 
        //查询月台组下所有月台 
 | 
        List<Platform> allPlatformList = platformJoinMapper.selectJoinList(Platform.class, 
 | 
                new MPJLambdaWrapper<Platform>() 
 | 
                        .selectAll(Platform.class) 
 | 
                        .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ") 
 | 
                        .eq(Platform::getIsdeleted, Constants.ZERO) 
 | 
                        .eq(Platform::getStatus,Constants.ZERO) 
 | 
                        .eq(Platform::getGroupId,groupId) 
 | 
        ); 
 | 
        this.getPlatformShow(allPlatformList,loginUserInfo); 
 | 
        for (Platform platform:allPlatformList) { 
 | 
            this.getJobByPlatform(platform,loginUserInfo); 
 | 
        } 
 | 
        return allPlatformList; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询月台的开启情况 
 | 
     * @param allPlatformList 
 | 
     * @param loginUserInfo 
 | 
     */ 
 | 
    public void getPlatformShow(List<Platform> allPlatformList , LoginUserInfo loginUserInfo){ 
 | 
        //处理我的月台信息 是否配置隐藏 
 | 
        List<PlatformShowParam> platformShowParamList = platformShowParamMapper.selectList(new QueryWrapper<PlatformShowParam>() 
 | 
                .lambda() 
 | 
                .eq(PlatformShowParam::getIsdeleted, Constants.ZERO) 
 | 
                .eq(PlatformShowParam::getMemberId,loginUserInfo.getMemberId()) 
 | 
        ); 
 | 
        //如果未配置该数据 则全部显示 
 | 
        if(CollectionUtils.isEmpty(platformShowParamList)){ 
 | 
            for (Platform platform:allPlatformList) { 
 | 
                platform.setShowConfig(true); 
 | 
            } 
 | 
        }else{ 
 | 
            //根据配置显示数据 
 | 
            for (PlatformShowParam platformShowParam:platformShowParamList) { 
 | 
                for (Platform platform:allPlatformList) { 
 | 
                    if(Constants.equalsInteger(platform.getId(),platformShowParam.getPlatformId())){ 
 | 
                        platform.setShowConfig(true); 
 | 
                        break; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取月台下的任务列表 
 | 
     * @param platform 
 | 
     * @param loginUserInfo 
 | 
     */ 
 | 
    public void getJobByPlatform(Platform platform,LoginUserInfo loginUserInfo){ 
 | 
        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .eq(PlatformJob::getPlatformId,platform.getId()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile()) 
 | 
                .in(PlatformJob::getStatus, 
 | 
                        Constants.PlatformJobStatus.WAIT_CALL.getKey(), 
 | 
                        Constants.PlatformJobStatus.IN_WAIT.getKey(), 
 | 
                        Constants.PlatformJobStatus.CALLED.getKey(), 
 | 
                        Constants.PlatformJobStatus.WORKING.getKey(), 
 | 
                        Constants.PlatformJobStatus.EXCEPTION.getKey(), 
 | 
                        Constants.PlatformJobStatus.OVER_NUMBER.getKey() 
 | 
                ) 
 | 
                .like(PlatformJob::getArriveDate, DateUtil.getCurrDate()) 
 | 
                .orderByDesc(PlatformJob::getId) 
 | 
        ); 
 | 
        for (PlatformJob platformJob:platformJobList) { 
 | 
            //处理WSM数量 
 | 
            this.getWmsJobData(platformJob); 
 | 
            //查询前方排队数量 
 | 
            this.queryWaitNum(platformJob); 
 | 
        } 
 | 
        platform.setWorkJobList(platformJobList); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PlatformWorkVO getPlatformWorkVOById(Integer platformId){ 
 | 
        //获取月台下的所有作业数据 
 | 
        List<PlatformJob> allPlatformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.WORKING.getKey()+" order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ") 
 | 
                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.CALLED.getKey()+" order by pl.CREATE_DATE desc  limit 1  ) as newCallDate  ") 
 | 
                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end ioQty ") 
 | 
                .select(" (select GROUP_CONCAT(distinct(tt.contract_num )) from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num is not null  and  tt.job_id=t.id )as wmsContractNum") 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName) 
 | 
                .selectAs(PlatformBooks::getId,PlatformJob::getBookId) 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getJobId,PlatformJob::getId) 
 | 
                .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .in(PlatformJob::getStatus, 
 | 
                        Constants.PlatformJobStatus.WAIT_CALL.getKey(), 
 | 
                        Constants.PlatformJobStatus.IN_WAIT.getKey(), 
 | 
                        Constants.PlatformJobStatus.CALLED.getKey(), 
 | 
                        Constants.PlatformJobStatus.WORKING.getKey(), 
 | 
                        Constants.PlatformJobStatus.EXCEPTION.getKey(), 
 | 
                        Constants.PlatformJobStatus.OVER_NUMBER.getKey(), 
 | 
                        Constants.PlatformJobStatus.TRANSFERING.getKey() 
 | 
                ) 
 | 
                .orderByDesc(PlatformJob::getId) 
 | 
        ); 
 | 
//        List<PlatformJob> platformJobList = allPlatformJobList.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),platformId)).collect(Collectors.toList()); 
 | 
//        for (PlatformJob platformJob:platformJobList) { 
 | 
//            platformJob.setTotalNum(platformJob.getIoQty()); 
 | 
//            //查询前方排队数量 
 | 
//            this.queryWaitNum(platformJob); 
 | 
//        } 
 | 
        PlatformWorkVO platformWorkVO = PlatformGroupServiceImpl.getPlatformWorkVO(platformJoinMapper.selectById(platformId),allPlatformJobList); 
 | 
        return platformWorkVO; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PlatformOrderNumByDateResponse orderNumByDate(PlatformOrderNumByDateRequest param){ 
 | 
        PlatformOrderNumByDateResponse platformOrderNumByDateResponse = new PlatformOrderNumByDateResponse(); 
 | 
        Date queryDate = (Objects.nonNull(param)&&Objects.nonNull(param.getTimeInfo()))?param.getTimeInfo():new Date(); 
 | 
        String queryDateStr = DateUtil.getDate(queryDate,"yyyy-MM-dd"); 
 | 
        //查询今日全部任务 
 | 
        platformOrderNumByDateResponse.setTotalNum( 
 | 
            platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() 
 | 
                    .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                    .and(i-> 
 | 
                            i.like(PlatformJob::getArriveDate,queryDateStr) 
 | 
                    ) 
 | 
            ) 
 | 
        ); 
 | 
        //查询今日完成任务 
 | 
        platformOrderNumByDateResponse.setDoneNum( 
 | 
                platformJobMapper.selectCount(new MPJLambdaWrapper<PlatformJob>() 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                        .like(PlatformJob::getDoneDate,queryDateStr) 
 | 
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey() 
 | 
                                ,Constants.PlatformJobStatus.AUTHED_LEAVE.getKey() 
 | 
                                ,Constants.PlatformJobStatus.LEAVED.getKey()) 
 | 
                ) 
 | 
        ); 
 | 
        return platformOrderNumByDateResponse; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<PlatformDataListResponse> platformWorkingDataList(PlatformDataListRequest param){ 
 | 
        List<PlatformDataListResponse> platformDataListResponseList = new ArrayList<>(); 
 | 
        List<Platform> platformList = platformJoinMapper.selectList( 
 | 
                new MPJLambdaWrapper<Platform>().eq(Platform::getIsdeleted,Constants.ZERO) 
 | 
                .eq(Platform::getStatus,Constants.ZERO) 
 | 
        ); 
 | 
        for (Platform platform:platformList) { 
 | 
            PlatformDataListResponse platformDataListResponse = new PlatformDataListResponse(); 
 | 
            platformDataListResponse.setId(platform.getId()); 
 | 
            platformDataListResponse.setHkId(platform.getHkId()); 
 | 
            platformDataListResponse.setName(platform.getName()); 
 | 
            platformDataListResponse.setWorkStatus(Constants.ZERO); 
 | 
            //查询当前作业车辆 
 | 
  
 | 
            PlatformJob platformJob = platformJobJoinMapper.selectJoinOne(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>() 
 | 
                    .selectAll(PlatformJob.class) 
 | 
                    .selectAs(Platform::getWorkRate, PlatformJob::getWorkRate) 
 | 
                    .selectAs(Platform::getName, PlatformJob::getPlatformName) 
 | 
                    .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end workNum ") 
 | 
                    .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.WORKING.getKey()+"  order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ") 
 | 
                    .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.CALLED.getKey()+" order by pl.CREATE_DATE desc  limit 1  ) as newCallDate  ") 
 | 
                    .leftJoin(Platform.class, Platform::getId, PlatformJob::getPlatformId) 
 | 
                    .eq(PlatformJob::getStatus, Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                    .eq(PlatformJob::getPlatformId, platform.getId()) 
 | 
                    .orderByDesc(PlatformJob::getStatus) 
 | 
                    .orderByDesc(PlatformJob::getStartDate) 
 | 
                    .last(" limit 1") 
 | 
            ); 
 | 
  
 | 
            if (Objects.nonNull(platformJob)) { 
 | 
                platformDataListResponse.setCarCode(platformJob.getCarCodeFront()); 
 | 
                platformDataListResponse.setWorkType( 
 | 
                        Constants.equalsInteger(platformJob.getType(), Constants.platformJobType.zycxh) 
 | 
                                || Constants.equalsInteger(platformJob.getType(), Constants.platformJobType.wxcxh) 
 | 
                                || Constants.equalsInteger(platformJob.getType(), Constants.platformJobType.sgscxh) ? Constants.ZERO : Constants.ONE 
 | 
                ); 
 | 
                platformDataListResponse.setWorkStatus(Constants.ONE); 
 | 
                //查询作业时长 
 | 
//                Long workTime = this.getWorkTime(platformJob); 
 | 
                Long min = (System.currentTimeMillis() - platformJob.getNewStartDate().getTime())/1000/60; 
 | 
                platformDataListResponse.setWorkTime( 
 | 
                        min 
 | 
                ); 
 | 
  
 | 
                //计算已作业时长 根据月台工作效率 计算任务量需要时间 
 | 
                if (Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())) { 
 | 
                    platformDataListResponse.setFinishTime(null); 
 | 
                } else { 
 | 
                    Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue(); 
 | 
                    Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(), workMinute); 
 | 
                    platformDataListResponse.setFinishTime(overDate); 
 | 
                } 
 | 
            } 
 | 
            platformDataListResponseList.add(platformDataListResponse); 
 | 
        } 
 | 
        return platformDataListResponseList; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PlatformDataInfoResponse platformWorkingDataList(PlatformDataInfoRequest param){ 
 | 
        if(Objects.isNull(param) 
 | 
        || Objects.isNull(param.getId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        PlatformDataInfoResponse response = new PlatformDataInfoResponse(); 
 | 
        Platform platform = platformJoinMapper.selectById(param.getId()); 
 | 
        if(Objects.isNull(platform)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到月台信息"); 
 | 
        } 
 | 
        response.setId(platform.getId()); 
 | 
        response.setHkId(platform.getHkId()); 
 | 
        response.setName(platform.getName()); 
 | 
  
 | 
        PlatformJob platformJob = platformJobJoinMapper.selectJoinOne(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                        .selectAll(PlatformJob.class) 
 | 
                        .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                        .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                        .selectAs(PlatformWmsJob::getId,PlatformJob::getWmsId) 
 | 
                        .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName) 
 | 
                        .selectAs(PlatformWmsJob::getRepertotyAddress,PlatformJob::getRepertotyAddress) 
 | 
                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                        .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode) 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                        .eq(PlatformJob::getPlatformId,platform.getId()) 
 | 
                        .orderByDesc(PlatformJob::getDoneDate) 
 | 
        ); 
 | 
        if(Objects.nonNull(platformJob)){ 
 | 
            response.setCarCode(platformJob.getCarCodeFront()); 
 | 
            response.setCarrierName(platformJob.getCarrierName()); 
 | 
            response.setOrderCode(platformJob.getBillCode()); 
 | 
            response.setRepertotyAddress(platformJob.getRepertotyAddress()); 
 | 
            //查询供应商信息 只有存在承运单号才有 
 | 
            if(Objects.nonNull(platformJob.getWmsId())){ 
 | 
                List<PlatformWmsDetail> platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                        .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(PlatformWmsDetail::getJobId,platformJob.getId())); 
 | 
                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; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public CarNumByStatusResponse carStatusNum(CarNumByStatusRequest param){ 
 | 
        CarNumByStatusResponse response = new CarNumByStatusResponse(); 
 | 
        response.setQueuingNum( 
 | 
            platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() 
 | 
                    .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()) 
 | 
            ) 
 | 
        ); 
 | 
        response.setInNum( 
 | 
                platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                        .and(i->i.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.IN_WAIT.getKey()) 
 | 
                                .or() 
 | 
                                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                        ) 
 | 
                ) 
 | 
        ); 
 | 
        response.setWorkingNum( 
 | 
                platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                ) 
 | 
        ); 
 | 
        response.setDoneNum( 
 | 
                platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.LEAVED.getKey()) 
 | 
                        .like(PlatformJob::getOutDate,DateUtil.getDate(new Date(),"yyyy-MM-dd")) 
 | 
                ) 
 | 
        ); 
 | 
        return response; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PlatformQueuingListResponse  queueList(PlatformQueuingListRequest param){ 
 | 
        PlatformQueuingListResponse response = new PlatformQueuingListResponse(); 
 | 
  
 | 
        List<PlatformJob> platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,PlatformJob::getPlatformGroupId) 
 | 
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(), 
 | 
                                Constants.PlatformJobStatus.IN_WAIT.getKey(),Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .isNotNull(PlatformJob::getCarCodeFront) 
 | 
                .orderByDesc(PlatformJob::getCreateDate) 
 | 
                .eq(PlatformGroup::getType,Constants.ZERO)); 
 | 
  
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){ 
 | 
            response.setOutboundList( 
 | 
                    platformJobList.stream().map(m->m.getCarCodeFront()).collect(Collectors.toList()) 
 | 
            ); 
 | 
        } 
 | 
  
 | 
        platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,PlatformJob::getPlatformGroupId) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.IN_WAIT.getKey()) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .isNotNull(PlatformJob::getCarCodeFront) 
 | 
                .orderByDesc(PlatformJob::getCreateDate) 
 | 
                .eq(PlatformGroup::getType,Constants.ONE)); 
 | 
  
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){ 
 | 
            response.setInboundList( 
 | 
                    platformJobList.stream().map(m->m.getCarCodeFront()).collect(Collectors.toList()) 
 | 
            ); 
 | 
        } 
 | 
  
 | 
        platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,PlatformJob::getPlatformGroupId) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.IN_WAIT.getKey()) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .isNotNull(PlatformJob::getCarCodeFront) 
 | 
                .orderByDesc(PlatformJob::getCreateDate) 
 | 
                .eq(PlatformGroup::getType,Constants.TWO)); 
 | 
  
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){ 
 | 
            response.setMunicipalComList( 
 | 
                    platformJobList.stream().map(m->m.getCarCodeFront()).collect(Collectors.toList()) 
 | 
            ); 
 | 
        } 
 | 
        return response; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public LargeScreenDataVO getLargeScreenData(){ 
 | 
        LargeScreenDataVO largeScreenDataVO = new LargeScreenDataVO(); 
 | 
        List<PlatformJob> platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .selectAs(PlatformGroup::getWaitCallTime,PlatformJob::getWorktimeOutAlarmTime) 
 | 
                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end workNum ") 
 | 
                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.WORKING.getKey()+"  order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ") 
 | 
                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.CALLED.getKey()+" order by pl.CREATE_DATE desc  limit 1  ) as newCallDate  ") 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId) 
 | 
                .eq(PlatformJob::getIsdeleted,Constants.ZERO) 
 | 
                .in(PlatformJob::getStatus, 
 | 
                        Constants.PlatformJobStatus.WAIT_CALL.getKey(), 
 | 
                        Constants.PlatformJobStatus.WORKING.getKey(), 
 | 
                        Constants.PlatformJobStatus.CALLED.getKey(), 
 | 
                        Constants.PlatformJobStatus.IN_WAIT.getKey() 
 | 
                ) 
 | 
                .orderByDesc(PlatformJob::getStatus) 
 | 
                .orderByAsc(PlatformJob::getSignDate) 
 | 
        ); 
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){ 
 | 
            for (PlatformJob platformJob:platformJobList) { 
 | 
                //车牌号脱敏 
 | 
                platformJob.setCarCodeFront(Constants.carCodeTuominStr(platformJob.getCarCodeFront())); 
 | 
                if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ 
 | 
                    //计算已作业时长 根据月台工作效率 计算任务量需要时间 
 | 
                    if(Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())){ 
 | 
                        platformJob.setOptTime(0L); 
 | 
                    }else{ 
 | 
                        Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue(); 
 | 
                        Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(),workMinute); 
 | 
                        platformJob.setOptTime(overDate.getTime()); 
 | 
                    } 
 | 
                }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){ 
 | 
                    platformJob.setOptTime(DateUtil.getXMinuteAfterDate(platformJob.getNewCallDate(),platformJob.getWorktimeOutAlarmTime()).getTime()); 
 | 
                } 
 | 
            } 
 | 
            largeScreenDataVO.setAllList(platformJobList); 
 | 
            List<PlatformJob> calledList = platformJobList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())).collect(Collectors.toList()); 
 | 
            largeScreenDataVO.setWaitWorkList(calledList); 
 | 
        } 
 | 
//        String u = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.BIGSCREEN_UUID); 
 | 
//        if(StringUtils.isBlank(u)){ 
 | 
        String u =  UUID.randomUUID().toString(); 
 | 
        redisTemplate.opsForValue().set(Constants.RedisKeys.BIGSCREEN_UUID,u,3, TimeUnit.MINUTES); 
 | 
//        } 
 | 
        String url = Constants.getWxUrl(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.WX_REDIRECT_URL).getCode(),Constants.WxUrlParams.BISCREEN_CODE,u); 
 | 
        largeScreenDataVO.setQrCode(url); 
 | 
        largeScreenDataVO.setAttention(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_ATTENTION).getCode()); 
 | 
        return largeScreenDataVO; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 作业完成超时 
 | 
     */ 
 | 
    @Override 
 | 
    public void timeOutReport(){ 
 | 
        //查询超时数据 
 | 
       List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .select(" ( now() > DATE_ADD(t.DONE_DATE ,INTERVAL t1.STAY_TIMEOUT_ALARM_TIME MINUTE) ) as isTimeOut   ") 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()) 
 | 
                .eq(PlatformJob::getInOut,Constants.ONE) 
 | 
                .isNotNull(PlatformJob::getDoneDate) 
 | 
        ); 
 | 
       //如果超时 处理数据 并发送led与广播 
 | 
        for (PlatformJob platformJob:platformJobList) { 
 | 
            if(Constants.equalsInteger(platformJob.getIsTimeOut(),Constants.ONE)){ 
 | 
                //广播 led通知 
 | 
                this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.TIMEOUT_IN.getInfo(), 
 | 
                        Constants.PlatformBroadcastContent.TIMEOUT_IN.getInfo()); 
 | 
                //更新状态 
 | 
                platformJobJoinMapper.update(new UpdateWrapper<PlatformJob>().lambda().set(PlatformJob::getInOut,Constants.ZERO).eq(PlatformJob::getId,platformJob.getId())); 
 | 
  
 | 
                SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO(); 
 | 
                savePlatformWarnEventDTO.setPlatformJobId(platformJob.getId()); 
 | 
                savePlatformWarnEventDTO.setPlatformId(platformJob.getPlatformId()); 
 | 
                savePlatformWarnEventDTO.setCarCode(platformJob.getCarCodeFront()); 
 | 
                savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.STOP_TIMEOUT.getKey()); 
 | 
                platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 自动过号 自动更新至代签到状态 
 | 
     */ 
 | 
    @Override 
 | 
    public void timeOutCallIn(){ 
 | 
        //查询超时数据 
 | 
        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .select(" ( now() >= DATE_ADD( ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.CALLED.getKey()+" " + 
 | 
                        "order by pl.CREATE_DATE desc  limit 1  )  ,INTERVAL t2.WAIT_CALL_TIME MINUTE) ) as isTimeOut   ") 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId) 
 | 
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()) 
 | 
                .isNotNull(PlatformJob::getCallDate) 
 | 
        ); 
 | 
        //如果超时 处理数据 并发送led与广播 
 | 
        for (PlatformJob platformJob:platformJobList) { 
 | 
            if(Constants.equalsInteger(platformJob.getIsTimeOut(),Constants.ONE)){ 
 | 
                JobOperateDTO jobOperateDTO = new JobOperateDTO(); 
 | 
                jobOperateDTO.setJobId(platformJob.getId()); 
 | 
                this.platformOverNumber(jobOperateDTO); 
 | 
                this.cancelInPark(platformJob); 
 | 
            } 
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 作业超时 
 | 
     */ 
 | 
    @Override 
 | 
    public void timeOutWork(){ 
 | 
        //查询超时数据 
 | 
        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() 
 | 
                .selectAll(PlatformJob.class) 
 | 
                .selectAs(Platform::getName,PlatformJob::getPlatformName) 
 | 
                .selectAs(Platform::getWorkRate, PlatformJob::getWorkRate) 
 | 
                .selectAs(Platform::getWorkTimeoutAlarmTime, PlatformJob::getWorktimeOutAlarmTime) 
 | 
                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end workNum ") 
 | 
                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.WORKING.getKey()+"  order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ") 
 | 
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) 
 | 
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()) 
 | 
                .eq(PlatformJob::getInOut,Constants.ONE) 
 | 
        ); 
 | 
        //如果超时 处理数据 并发送led与广播 
 | 
        for (PlatformJob platformJob:platformJobList) { 
 | 
  
 | 
            Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue(); 
 | 
            Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(),workMinute + platformJob.getWorktimeOutAlarmTime()); 
 | 
            if(overDate.getTime() < System.currentTimeMillis() ){ 
 | 
                //广播 led通知 
 | 
                this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.TIMEOUT_WORK.getInfo(), 
 | 
                        Constants.PlatformBroadcastContent.TIMEOUT_WORK.getInfo()); 
 | 
  
 | 
                SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO(); 
 | 
                savePlatformWarnEventDTO.setPlatformJobId(platformJob.getId()); 
 | 
                savePlatformWarnEventDTO.setPlatformId(platformJob.getPlatformId()); 
 | 
                savePlatformWarnEventDTO.setCarCode(platformJob.getCarCodeFront()); 
 | 
                savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.WORK_TIMEOUT.getKey()); 
 | 
                platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO); 
 | 
            } 
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |