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