zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -1506,7 +1506,7 @@ } if (taskComplete) { locService.taskCallBack(task); // locService.taskCallBack(task); task.setTaskSts(TaskStsType.COMPLETE.val()); task.setEndTime(now); @@ -1514,6 +1514,7 @@ if (!taskService.updateById(task)) { log.error("Task [{}] 更新失败 !!!", task.getSeqNum()); } else { taskService.maintainLocAndSta(task); log.info("Task [{}] 作业完毕 ==========>> ", task.getSeqNum()); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaMapper.java
@@ -6,12 +6,20 @@ public interface StaMapper extends BaseMapper<Sta> { // inbound ------------------- int tryReserveIn(@Param("staId") Long staId, @Param("qty") Integer qty); int releaseReserveIn(@Param("staId") Long staId, @Param("qty") Integer qty); int confirmReserveIn(@Param("staId") Long staId, @Param("qty") Integer qty); // outbound ------------------ int tryReserveOut(@Param("staId") Long staId, @Param("qty") Integer qty); int releaseReserveOut(@Param("staId") Long staId, @Param("qty") Integer qty); int confirmReserveOut(@Param("staId") Long staId, @Param("qty") Integer qty); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java
@@ -3,11 +3,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zy.acs.manager.manager.entity.StaReserve; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @Mapper @Repository public interface StaReserveMapper extends BaseMapper<StaReserve> { int updateState( @Param("taskId") Long taskId , @Param("staId") Long staId , @Param("type") String type , @Param("state") String state ); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/LocService.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.zy.acs.manager.manager.entity.Loc; import com.zy.acs.manager.manager.entity.Task; import java.util.List; import java.util.Map; @@ -14,8 +13,6 @@ List<Map<String, Object>> selectCountGroupByLocSts(); List<Map<String, Object>> selectDigitalLocWhichNeedShow(); void taskCallBack(Task task); Loc selectRandOneByLocSts(Long locSts, Integer limit); zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java
@@ -4,6 +4,7 @@ import com.zy.acs.manager.manager.entity.Sta; import com.zy.acs.manager.manager.entity.StaReserve; import com.zy.acs.manager.manager.entity.Task; import com.zy.acs.manager.manager.enums.StaReserveType; public interface StaReserveService extends IService<StaReserve> { @@ -11,4 +12,6 @@ StaReserve reserveStaOut(Sta sta, Task task, Integer qty); void confirmStaReserve(Sta sta, Task task, Integer qty, StaReserveType type); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskService.java
@@ -7,7 +7,6 @@ import com.zy.acs.manager.core.domain.Lane; import com.zy.acs.manager.manager.entity.Task; import com.zy.acs.manager.manager.enums.TaskStsType; import com.zy.acs.manager.system.entity.User; import java.util.List; import java.util.Map; @@ -44,4 +43,6 @@ Task findLatestTask(Long agvId, TaskStsType taskSts); void maintainLocAndSta(Task task); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/LocServiceImpl.java
@@ -3,12 +3,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zy.acs.manager.manager.entity.Loc; import com.zy.acs.manager.manager.entity.Sta; import com.zy.acs.manager.manager.entity.Task; import com.zy.acs.manager.manager.enums.LocStsType; import com.zy.acs.manager.manager.enums.StaStsType; import com.zy.acs.manager.manager.enums.TaskStsType; import com.zy.acs.manager.manager.enums.TaskTypeType; import com.zy.acs.manager.manager.mapper.LocMapper; import com.zy.acs.manager.manager.service.LocService; import com.zy.acs.manager.manager.service.StaService; @@ -16,10 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; @Slf4j @Service("locService") @@ -41,107 +33,6 @@ @Override public List<Map<String, Object>> selectDigitalLocWhichNeedShow() { return this.baseMapper.selectDigitalLocWhichNeedShow(); } @Override public void taskCallBack(Task task) { if (null == task) { return; } if (!task.getTaskSts().equals(TaskStsType.PROGRESS.val())) { return; } Date now = new Date(); // loc status Loc oriLoc = null; Loc destLoc = null; Sta oriSta = null; Sta destSta = null; switch (Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl()))) { case LOC_TO_LOC: oriLoc = this.getById(task.getOriLoc()); if (oriLoc.getLocSts().equals(LocStsType.PAKOUT.val())) { oriLoc.setLocSts(LocStsType.IDLE.val()); oriLoc.setUpdateTime(now); if (!this.updateById(oriLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getOriLoc$()); } } destLoc = this.getById(task.getDestLoc()); if (destLoc.getLocSts().equals(LocStsType.PAKIN.val())) { destLoc.setLocSts(LocStsType.STOCK.val()); destLoc.setUpdateTime(now); if (!this.updateById(destLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getDestLoc$()); } } break; case LOC_TO_STA: oriLoc = this.getById(task.getOriLoc()); if (oriLoc.getLocSts().equals(LocStsType.PAKOUT.val())) { oriLoc.setLocSts(LocStsType.IDLE.val()); oriLoc.setUpdateTime(now); if (!this.updateById(oriLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getOriLoc$()); } } destSta = staService.getById(task.getDestSta()); if (destSta.getStaSts().equals(StaStsType.READY_RELEASE.val())) { destSta.setStaSts(StaStsType.STOCK.val()); destSta.setUpdateTime(now); if (!staService.updateById(destSta)) { log.error("Sta [{}] 站点修改状态失败", task.getDestSta$()); } } break; case STA_TO_LOC: oriSta = staService.getById(task.getOriSta()); if (oriSta.getStaSts().equals(StaStsType.READY_TAKE.val())) { oriSta.setStaSts(StaStsType.IDLE.val()); oriSta.setUpdateTime(now); if (!staService.updateById(oriSta)) { log.error("Sta [{}] 站点修改状态失败", task.getOriSta$()); } } destLoc = this.getById(task.getDestLoc()); if (destLoc.getLocSts().equals(LocStsType.PAKIN.val())) { destLoc.setLocSts(LocStsType.STOCK.val()); destLoc.setUpdateTime(now); if (!this.updateById(destLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getDestLoc$()); } } break; case STA_TO_STA: oriSta = staService.getById(task.getOriSta()); if (oriSta.getStaSts().equals(StaStsType.READY_TAKE.val())) { oriSta.setStaSts(StaStsType.IDLE.val()); oriSta.setUpdateTime(now); if (!staService.updateById(oriSta)) { log.error("Sta [{}] 站点修改状态失败", task.getOriSta$()); } } destSta = staService.getById(task.getDestSta()); if (destSta.getStaSts().equals(StaStsType.READY_RELEASE.val())) { destSta.setStaSts(StaStsType.STOCK.val()); destSta.setUpdateTime(now); if (!staService.updateById(destSta)) { log.error("Sta [{}] 站点修改状态失败", task.getDestSta$()); } } break; case TO_CHARGE: case TO_STANDBY: case MOVE: break; default: break; } } @Override zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
@@ -98,6 +98,32 @@ return reserve; } @Override @Transactional(rollbackFor = Exception.class) public void confirmStaReserve(Sta sta, Task task, Integer qty, StaReserveType type) { qty = Optional.ofNullable(qty).orElse(1); // update reserve state to be confirmed if (0 == this.baseMapper.updateState(task.getId(), sta.getId(), type.toString(), StaReserveStateType.CONFIRMED.toString())) { throw new BusinessException("failed to confirm sta reserve"); } int cntOfDealWithReserve = 0; switch (type) { case IN: cntOfDealWithReserve = staMapper.confirmReserveIn(sta.getId(), qty); break; case OUT: cntOfDealWithReserve = staMapper.confirmReserveOut(sta.getId(), qty); break; default: break; } if (cntOfDealWithReserve == 0) { throw new BusinessException("Sta[" + sta.getStaNo() + "] apply confirmed failed, type=" + type.toString()); } } private String generateReserveUniqKey(Long staId, Long taskId, StaReserveType type) { return "STA:" + staId + "-TASK:" + taskId + "-T:" + type.toString(); zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskServiceImpl.java
@@ -41,6 +41,8 @@ private SnowflakeIdWorker snowflakeIdWorker; @Autowired private LaneService laneService; @Autowired private StaReserveService staReserveService; @Override public PageResult<Task> pageRel(PageParam<Task, BaseParam> pageParam) { @@ -220,6 +222,83 @@ return this.list(wrapper).stream().findFirst().orElse(null); } @Override public void maintainLocAndSta(Task task) { if (null == task) { return; } if (!task.getTaskSts().equals(TaskStsType.COMPLETE.val())) { return; } Date now = new Date(); // loc status Loc oriLoc = null; Loc destLoc = null; Sta oriSta = null; Sta destSta = null; switch (Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl()))) { case LOC_TO_LOC: oriLoc = locService.getById(task.getOriLoc()); if (oriLoc.getLocSts().equals(LocStsType.PAKOUT.val())) { oriLoc.setLocSts(LocStsType.IDLE.val()); oriLoc.setUpdateTime(now); if (!locService.updateById(oriLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getOriLoc$()); } } destLoc = locService.getById(task.getDestLoc()); if (destLoc.getLocSts().equals(LocStsType.PAKIN.val())) { destLoc.setLocSts(LocStsType.STOCK.val()); destLoc.setUpdateTime(now); if (!locService.updateById(destLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getDestLoc$()); } } break; case LOC_TO_STA: oriLoc = locService.getById(task.getOriLoc()); if (oriLoc.getLocSts().equals(LocStsType.PAKOUT.val())) { oriLoc.setLocSts(LocStsType.IDLE.val()); oriLoc.setUpdateTime(now); if (!locService.updateById(oriLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getOriLoc$()); } } destSta = staService.getById(task.getDestSta()); staReserveService.confirmStaReserve(destSta, task, 1, StaReserveType.IN); break; case STA_TO_LOC: oriSta = staService.getById(task.getOriSta()); staReserveService.confirmStaReserve(oriSta, task, 1, StaReserveType.OUT); destLoc = locService.getById(task.getDestLoc()); if (destLoc.getLocSts().equals(LocStsType.PAKIN.val())) { destLoc.setLocSts(LocStsType.STOCK.val()); destLoc.setUpdateTime(now); if (!locService.updateById(destLoc)) { log.error("Loc [{}] 库位修改状态失败", task.getDestLoc$()); } } break; case STA_TO_STA: oriSta = staService.getById(task.getOriSta()); staReserveService.confirmStaReserve(oriSta, task, 1, StaReserveType.OUT); destSta = staService.getById(task.getDestSta()); staReserveService.confirmStaReserve(destSta, task, 1, StaReserveType.IN); break; case TO_CHARGE: case TO_STANDBY: case MOVE: break; default: break; } } @Transactional public void maintainLocSts(Task task, Boolean complete) { Loc oriLoc = null; Loc destLoc = null; zy-acs-manager/src/main/resources/mapper/manager/StaMapper.xml
@@ -22,6 +22,17 @@ AND rsv_in_cnt >= #{qty} </update> <update id="confirmReserveIn"> UPDATE man_sta SET rsv_in_cnt = rsv_in_cnt - #{qty}, occ_cnt = occ_cnt + #{qty}, update_time = NOW() WHERE id = #{staId} AND deleted = 0 AND status = 1 AND rsv_in_cnt >= #{qty} </update> <update id="tryReserveOut"> UPDATE man_sta SET rsv_out_cnt = rsv_out_cnt + #{qty}, @@ -42,6 +53,18 @@ AND rsv_out_cnt >= #{qty} </update> <update id="confirmReserveOut"> UPDATE man_sta SET rsv_out_cnt = rsv_out_cnt - #{qty}, occ_cnt = occ_cnt - #{qty}, update_time = NOW() WHERE id = #{staId} AND deleted = 0 AND status = 1 AND rsv_out_cnt >= #{qty} AND occ_cnt >= #{qty} </update> <!-- 关联查询sql --> <sql id="selectSql"> SELECT a.* zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml
@@ -2,5 +2,18 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.acs.manager.manager.mapper.StaReserveMapper"> <update id="updateState"> UPDATE man_sta_reserve SET state = #{state}, confirmed_at = NOW(), update_time = NOW() WHERE 1=1 AND task_id = #{taskId} AND sta_id = #{staId} AND type = #{type} AND deleted = 0 AND status = 1 -- AND state IN ('WAITING','RESERVED'); </update> </mapper>