package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.TaskMapper; import com.zy.asrs.service.*; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.utils.OrderInAndOutUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @Service("taskService") public class TaskServiceImpl extends ServiceImpl implements TaskService { @Autowired private TaskLogService taskLogService; @Autowired private LocCacheService locCacheService; @Autowired private WaitPakinService waitPakinService; @Autowired private TaskDetlService taskDetlService; @Autowired private TaskService taskService; @Autowired private TaskDetlLogService taskDetlLogService; @Override @Transactional(rollbackFor = Exception.class) public void completeWrkMast(String workNo, Long userId) { Task wrkMast = this.selectOne(new EntityWrapper().eq("wrk_no", workNo)); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } if (wrkMast.getWrkSts() == 304) { throw new CoolException("当前工作档已完成"); } wrkMast.setWrkSts(304L); Date now = new Date(); wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true)); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); wrkMast.setModiUser(userId); // 完成操作人员记录 wrkMast.setManuType("手动完成"); if (!this.updateById(wrkMast)) { throw new CoolException("修改工作档失败"); } } @Override @Transactional public void pickWrkMast(String workNo, Long userId) { Task wrkMast = this.selectById(workNo); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } // 入出库类型判断 if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) { throw new CoolException("当前入出库类型无法进行操作"); } // 工作状态判断 if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) { throw new CoolException("当前工作状态无法进行操作"); } // 保存工作明细档历史档 // if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存工作明细档历史档失败"); // } // 保存工作主档历史档 if (!taskLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作主档历史档失败"); } // 获取目标站 // Wrapper wrapper = new EntityWrapper() // .eq("type_no", wrkMast.getIoType() - 50) // .eq("stn_no", wrkMast.getStaNo()) // 作业站点 = 拣料出库的目标站 // .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 // StaDesc staDesc = staDescService.selectOne(wrapper); // if (Cools.isEmpty(staDesc)) { // throw new CoolException("入库路径不存在"); // } Date now = new Date(); // 堆垛机站点(目标站) // Integer staNo = staDesc.getCrnStn(); // 更新工作档数据状态 wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 // wrkMast.setStaNo(staNo + ""); // 目标站 wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 wrkMast.setSourceLocNo(""); // 源库位清空 wrkMast.setModiTime(now); wrkMast.setModiUser(userId); if (!this.updateById(wrkMast)) { throw new CoolException("更新工作档数据状态失败"); } // 修改库位状态 Q.拣料/盘点/并板再入库 LocCache locMast = locCacheService.selectOne(new EntityWrapper().eq("loc_no", wrkMast.getLocNo())); locMast.setLocSts("Q"); locMast.setModiTime(now); locMast.setModiUser(userId); if (!locCacheService.updateById(locMast)) { throw new CoolException("修改库位状态失败"); } } @Override public List selectToBeCompleteData() { return this.baseMapper.selectToBeCompleteData(); } @Override @Transactional public void cancelWrkMast(String workNo, Long userId) { Date now = new Date(); Task wrkMast = this.selectOne(new EntityWrapper().eq("wrk_no", workNo)); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } if(wrkMast.getWrkSts() >= 304) { throw new CoolException("工作状态已经完成:" + wrkMast.getWrkSts()); } // 取消操作人员记录 wrkMast.setManuType("手动取消"); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); if (!taskService.updateById(wrkMast)) { throw new CoolException("取消工作档失败"); } // 保存工作主档历史档 if (!taskLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作主档 taskService.deleteById(wrkMast); // 保存工作明细档历史档 taskDetlLogService.save(wrkMast.getWrkNo()); // 删除工作档明细 taskDetlService.delete(new EntityWrapper().eq("wrk_no", workNo)); } }