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 redisTemplate; @Autowired private PlatformBroadcastLogMapper platformBroadcastLogMapper; @Autowired private PlatformWarnEventServiceImpl platformWarnEventService; @Autowired private PlatformWarnEventMapper platformWarnEventMapper; @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().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().lambda() .set(PlatformJob::getIsdeleted,Constants.ONE) .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey()) .eq(PlatformJob::getId,id)); } @Override public void delete(PlatformJob platformJob) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(platformJob); platformJobMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } platformJobMapper.deleteBatchIds(ids); } @Override public void updateById(PlatformJob platformJob) { platformJobMapper.updateById(platformJob); } @Override public void updateByIdInBatch(List 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 wrapper = new QueryWrapper<>(platformJob); return platformJobMapper.selectOne(wrapper); } @Override public List findList(PlatformJob platformJob) { platformJob.setIsdeleted(Constants.ZERO); QueryWrapper wrapper = new QueryWrapper<>(platformJob); return platformJobMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper 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(PlatformJob::getIsdeleted,Constants.ZERO) .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().getReasonId() != null, PlatformBooks::getReasonId, pageWrap.getModel().getReasonId()) .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(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), "select 1 from platform_wms_detail tt where tt.isdeleted=0 and tt.job_id=t.id") .notExists(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()), "select 1 from platform_wms_detail tt where tt.isdeleted=0 and tt.job_id=t.id") .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 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 platformCallList(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper 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 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().lambda() .eq(PlatformWmsJob::getIsdeleted,Constants.ZERO) .eq(PlatformWmsJob::getJobId,platformJob.getId()) .orderByDesc(PlatformWmsJob::getId) .last(" limit 1") ); if(Objects.isNull(platformWmsJob)){ return; } List platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper().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 lineUpAllList = platformJobMapper.selectList(new QueryWrapper().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 lineUpNum = lineUpAllList.stream().filter(i->Objects.nonNull(i.getSignDate())&&i.getSignDate().getTime() platformList = platformJoinMapper.selectList(new QueryWrapper().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().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 platformLogList = platformLogMapper.selectList(new QueryWrapper().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 wrapper = new QueryWrapper<>(platformJob); return platformJobMapper.selectCount(wrapper); } //TODO @Override public DriverHomeVO getDriverHome(LoginUserInfo loginUserInfo){ DriverHomeVO driverHomeVO = new DriverHomeVO(); //TODO 轮播图 List platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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 signList = platformJobMapper.selectList(new QueryWrapper().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()); //签到微信通知 2025年3月26日14:25:00 logger.info("签到微信通知=========================>开始====签到类型=>"+signInDTO.getSignType()+"===>人员主键=>"+platformGroup.getSignInNoticeUsers()); if(!Constants.equalsInteger(signInDTO.getSignType(),Constants.TWO)&& StringUtils.isNotBlank(platformGroup.getSignInNoticeUsers())){ logger.info("签到微信通知=========================>进入"); List systemUserList = systemUserMapper.selectList(new QueryWrapper().lambda() .eq(SystemUser::getDeleted,Constants.ZERO).eq(SystemUser::getStatus,Constants.ZERO).isNotNull(SystemUser::getOpenid) .in(SystemUser::getMemberId,Arrays.asList(platformGroup.getSignInNoticeUsers().split(","))) ); if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemUserList)) { WxPlatNotice wxPlatNotice = new WxPlatNotice(); wxPlatNotice.sendPlatformJobSignNotice(systemDictDataBiz,wxNoticeConfigMapper, platformJob, WxPlatConstants.platformJobContent.platformGroupSignIn, systemUserList.stream().map(i->i.getOpenid()).collect(Collectors.toList()) ); } } logger.info("签到微信通知=========================>结束"); } @Override public void sendUnFinishNotice(){ //状态 0待确认 1待签到 2等待叫号 3入园等待 4已叫号 5作业中 6作业完成 7转移中 8异常挂起 9已授权离园 10已离园 11 已过号 12取消(WMS) List platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper() .selectAll(PlatformJob.class) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .isNotNull(PlatformJob::getPlatformGroupId) .apply(" CREATE_DATE < now() ") .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey() ,Constants.PlatformJobStatus.WART_SIGN_IN.getKey() ,Constants.PlatformJobStatus.WAIT_CALL.getKey() ,Constants.PlatformJobStatus.IN_WAIT.getKey() ,Constants.PlatformJobStatus.CALLED.getKey() ,Constants.PlatformJobStatus.WORKING.getKey() ,Constants.PlatformJobStatus.TRANSFERING.getKey() ,Constants.PlatformJobStatus.EXCEPTION.getKey() ,Constants.PlatformJobStatus.OVER_NUMBER.getKey() ) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){ List platformGroupId = platformJobList.stream().map(i->i.getPlatformGroupId()).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformGroupId)){ Set setList = new HashSet<>(platformGroupId); for (Integer groupId:setList) { PlatformGroup platformGroup = platformGroupMapper.selectById(groupId); if(Objects.nonNull(platformGroup)&&StringUtils.isNotBlank(platformGroup.getUnFinishNoticeUsers())){ List systemUserList = systemUserMapper.selectList(new QueryWrapper().lambda() .eq(SystemUser::getDeleted,Constants.ZERO).eq(SystemUser::getStatus,Constants.ZERO) .isNotNull(SystemUser::getOpenid) .in(SystemUser::getMemberId,Arrays.asList(platformGroup.getUnFinishNoticeUsers().split(","))) ); if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemUserList)) { WxPlatNotice wxPlatNotice = new WxPlatNotice(); wxPlatNotice.sendUnFinishNotice(systemDictDataBiz, wxNoticeConfigMapper, platformJobList.stream().filter(i->Constants.equalsInteger(i.getPlatformGroupId(),groupId)).collect(Collectors.toList()).size(), WxPlatConstants.platformJobContent.unFinishNotice, systemUserList.stream().map(i->i.getOpenid()).collect(Collectors.toList()) ); } } } } } } 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) platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper() .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 platformIdList = platformJobList.stream().map(m->m.getPlatformGroupId()).collect(Collectors.toList()); if(CollectionUtils.isEmpty(platformIdList)){ return lineUpVO; } List platformGroupList = platformGroupMapper.selectList(new QueryWrapper().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 platformJobSignInList = platformJobJoinMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper() .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 platformJobWorkList = platformJobJoinMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper() .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 platformLogList = platformLogMapper.selectList(new QueryWrapper() .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 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().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().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() .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, 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 details = platformWmsDetailMapper.selectList(new QueryWrapper().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 parksList = parksMapper.selectList(new QueryWrapper() .lambda() .isNotNull(Parks::getHkId) .eq(Parks::getIsdeleted,Constants.ZERO)); //取消当前车辆所有权限 List cancelParkList = visitParkMapper.selectList(new QueryWrapper().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 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()); //删除报警信息 platformWarnEventMapper.update(new UpdateWrapper().lambda() .set(PlatformWarnEvent::getIsdeleted,Constants.ONE) .eq(PlatformWarnEvent::getPlatformId,platformJob.getId()) ); } }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 visitParkList = visitParkMapper.selectList(new QueryWrapper().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().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 deviceList = platformDeviceMapper.selectList(new QueryWrapper().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 broadcastList = new ArrayList<>(); List ledList = new ArrayList<>(); String bNames = ""; List 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().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()); //删除报警信息 platformWarnEventMapper.update(new UpdateWrapper().lambda() .set(PlatformWarnEvent::getIsdeleted,Constants.ONE) .eq(PlatformWarnEvent::getPlatformId,platformJob.getId()) ); if(Constants.equalsInteger(platformJob.getType(),Constants.THREE)){ // 外协车装货 查询TMS 电子锁情况 List details = platformWmsDetailMapper.selectList(new QueryWrapper().lambda() .eq(PlatformWmsDetail::getJobId,platformJob.getId()) .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) ); if(details!=null && details.size()>0){ Date date = new Date(); List codeList =new ArrayList<>(); for(PlatformWmsDetail d : details){ codeList.add(d.getContractNum()); } TmsLockStatusQueryRequest tmsLock = new TmsLockStatusQueryRequest(); tmsLock.setContractNumbers(codeList); TmsBaseResponse> 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().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(), StringUtils.isBlank(platform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getInfo():platform.getLedContent(), Constants.PlatformBroadcastContent.DONE.getInfo()); return platformJob; } @Override public void checkWmsLockStatus(){ List details = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class,new MPJLambdaWrapper() .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 codeList =new ArrayList<>(); for(PlatformWmsDetail d : details){ codeList.add(d.getContractNum()); } TmsLockStatusQueryRequest tmsLock = new TmsLockStatusQueryRequest(); tmsLock.setContractNumbers(codeList); List jobIds = new ArrayList<>(); TmsBaseResponse> 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().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 list = platformJobMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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 details) { for(PlatformWmsJob d : details){ if(StringUtils.equals(contractNumber,d.getContractNum())){ return d; } } return null; } private PlatformWmsDetail getJobByContractnumFromDetail(String contractNumber, List 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().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().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().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().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().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().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().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 getPlatformList(Integer groupId, LoginUserInfo loginUserInfo){ //查询月台组下所有月台 List allPlatformList = platformJoinMapper.selectJoinList(Platform.class, new MPJLambdaWrapper() .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 allPlatformList , LoginUserInfo loginUserInfo){ //处理我的月台信息 是否配置隐藏 List platformShowParamList = platformShowParamMapper.selectList(new QueryWrapper() .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 platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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 allPlatformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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 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().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .and(i-> i.like(PlatformJob::getArriveDate,queryDateStr) ) ) ); //查询今日完成任务 platformOrderNumByDateResponse.setDoneNum( platformJobMapper.selectCount(new MPJLambdaWrapper() .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 platformWorkingDataList(PlatformDataListRequest param){ List platformDataListResponseList = new ArrayList<>(); List platformList = platformJoinMapper.selectList( new MPJLambdaWrapper().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() .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() .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 platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper().lambda() .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) .eq(PlatformWmsDetail::getJobId,platformJob.getId())); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsDetailList)){ List stringList = platformWmsDetailList.stream().map(m->m.getInRepertotyCode()).collect(Collectors.toList()); response.setInRepertotyCode(stringList); List 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().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()) ) ); response.setInNum( platformJobMapper.selectCount(new QueryWrapper().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().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()) ) ); response.setDoneNum( platformJobMapper.selectCount(new QueryWrapper().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 platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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() .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() .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 platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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 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 platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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().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 platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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 platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .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); } } } /** * 手动完成作业 * @param jobIdList */ @Override public void dealJobFinish(List jobIdList){ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIdList)){ List platformJobList = platformJobMapper.selectList(new QueryWrapper().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey() ,Constants.PlatformJobStatus.WART_SIGN_IN.getKey() ,Constants.PlatformJobStatus.WAIT_CALL.getKey()) .in(PlatformJob::getId,jobIdList) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){ platformJobMapper.update(null,new UpdateWrapper().lambda() .set(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()) .set(PlatformJob::getDoneDate,new Date()) .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey()) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .in(PlatformJob::getId,platformJobList.stream().map(i->i.getId()).collect(Collectors.toList()))); } } } }