package org.springblade.mdm.flow.service; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.flow.entity.TaskDispatch; import org.springblade.mdm.flow.mapper.TaskDispatchMapper; import org.springblade.mdm.flow.vo.TaskAssignVO; import org.springblade.mdm.program.entity.DrawingNos; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcNodeHis; import org.springblade.mdm.program.mapper.DrawingNosMapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; /** * 任务派工数据 处理服务 * * @author yangys */ @Slf4j @Service public class TaskDispatchService extends BizServiceImpl { @Autowired private ParamService paramService; @Autowired private DrawingNosMapper drawingNosMapper; @Transactional(rollbackFor = Exception.class) public TaskDispatch saveTask(TaskAssignVO startVO,boolean isDup) { TaskDispatch taskDispatch = new TaskDispatch(); BeanUtils.copyProperties(startVO, taskDispatch); if(isDup){ taskDispatch.setStatus(TaskDispatch.STATUS_DUP); } this.save(taskDispatch); addDrawingNos(taskDispatch.getDrawingNo()); return taskDispatch; } /** * 加u人下拉数据 * @param drawingNo */ public void addDrawingNos(String drawingNo){ DrawingNos data = drawingNosMapper.selectById(drawingNo); if(data == null){ data = new DrawingNos(); data.setDrawingNo(drawingNo); try { drawingNosMapper.insert(data); }catch (Exception e){ log.error("加入零组件号下拉数据错误"); } } } /* public void updateSuccess(long id, String instId) { TaskDispatch taskDispatch = getById(id); taskDispatch.setProcessInstanceId(instId); taskDispatch.setStatus(TaskDispatch.STATUS_STARTED); this.updateById(taskDispatch); } */ /** * 检查是否重复派工 * @param startVO * @return */ public boolean checkIsDuplicate(TaskAssignVO startVO) { if(startVO.isTemporaryFlow()){ //试切补充,不验证重复 return false; } int taskDupDays = paramService.taskDuplicateCheckDays(); LocalDateTime checkStartDate = LocalDateTime.now().minusDays(taskDupDays); LambdaQueryChainWrapper q = lambdaQuery().eq(TaskDispatch::getDrawingNo,startVO.getDrawingNo()) .eq(TaskDispatch::getProcessNo,startVO.getProcessNo()) //.eq(TaskDispatch::getProcessEdition,startVO.getProcessEdition()) .eq(TaskDispatch::getMachineCode,startVO.getMachineCode()) .gt(TaskDispatch::getCreateTime,checkStartDate); long cnt = q.count(); return cnt > 0; } @Transactional(readOnly = true) public List drawingNoSeletDropList(String drawingNo){ return drawingNosMapper.selectDropDownList(drawingNo); } @Transactional public void resetDrawingNos() { drawingNosMapper.delete(Wrappers.emptyWrapper());// List dnoList = baseMapper.distinctAllDrawingNo(); for(String dno : dnoList){ DrawingNos drawingNos = new DrawingNos(); drawingNos.setDrawingNo(dno); drawingNosMapper.insert(drawingNos); } } /** * 清理过期的异常任务计划 */ @Transactional public void cleanExpiredExceptionTask() { int expireDays = paramService.getTaskExpireDays(); LocalDateTime expiredTime = LocalDateTime.now().minusDays(expireDays); baseMapper.deleteExpiredExceptionTasks(expiredTime); } /** * 根据工序唯一码获取派工数据 * @param operationId 工序唯一码 * @return */ public TaskDispatch getByOperationId(String operationId) { Optional opt = lambdaQuery().eq(TaskDispatch::getOperationId, operationId).oneOpt(); return opt.orElse(null); } /** * 根据程序内部编号获取实体 * @param programNo 内部编号 * @return 实体 */ public TaskDispatch getByProgramNo(String programNo) { return lambdaQuery().eq(TaskDispatch::getProgramNo, programNo).one(); } /** * 查询偏离单的序号 * @param programNo 偏离单的程序包名节点 * @return 序号 */ public long getDeviationSerial(String programNo) { TaskDispatch dispatch = this.getByProgramNo(programNo); return lambdaQuery() .eq(TaskDispatch::getDrawingNo,dispatch.getDrawingNo()) .eq(TaskDispatch::getProcessNo,dispatch.getProcessNo()) .eq(TaskDispatch::getProcessEdition,dispatch.getProcessEdition()) .eq(TaskDispatch::getDeviation,dispatch.getDeviation()) .le(TaskDispatch::getCreateTime,dispatch.getCreateTime()) //时间小于等于当前节点 .count(); } }