| | |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.core.annotations.ManagerAuth; |
| | | import com.core.common.*; |
| | | import com.core.common.BaseRes; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.LocMastInitParam; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | // return agvWrkMast; |
| | | // }).collect(Collectors.toList()); |
| | | |
| | | try { |
| | | int code = agvWrkMastService.containerMoveOut(agvWrkMastList); |
| | | if(code == 0){ |
| | | //将工作党状态改为容器离场 |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | agvWrkMast.setWrkSts(206L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | }); |
| | | //修改站点状态 |
| | | // devNos.forEach(devNo -> { |
| | | // AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); |
| | | // agvBasDevp.setBarcode(""); |
| | | // agvBasDevp.setLocSts("O"); |
| | | // agvBasDevpService.updateById(agvBasDevp); |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | agvWrkMast.setWrkSts(206L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | }); |
| | | |
| | | // try { |
| | | // int code = agvWrkMastService.containerMoveOut(agvWrkMastList); |
| | | // if(code == 0){ |
| | | // //将工作党状态改为容器离场 |
| | | // agvWrkMastList.forEach(agvWrkMast -> { |
| | | // agvWrkMast.setWrkSts(206L); |
| | | // agvWrkMastService.updateById(agvWrkMast); |
| | | // }); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | return R.error("容器离场失败"); |
| | | } |
| | | // //修改站点状态 |
| | | //// devNos.forEach(devNo -> { |
| | | //// AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); |
| | | //// agvBasDevp.setBarcode(""); |
| | | //// agvBasDevp.setLocSts("O"); |
| | | //// agvBasDevpService.updateById(agvBasDevp); |
| | | //// }); |
| | | // } |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // return R.error("容器离场失败"); |
| | | // } |
| | | |
| | | return R.ok("容器离场成功"); |
| | | } |
| | |
| | | |
| | | for (AgvMobileStartParam.Pda pda : params.getPad()) { |
| | | pda.setContainerType(Short.valueOf(pda.getContainerCode().substring(0,2))); |
| | | workService.emptyPlateIn(pda.getDevNo(),pda.getContainerCode(),pda.getContainerType(), getUserId()); |
| | | workService.emptyPlateIn(pda.getDevNo(),pda.getContainerCode(),pda.getContainerType(), getUserId(),false); |
| | | } |
| | | |
| | | return R.ok(); |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | enum AgvTask{ |
| | | |
| | | /** |
| | | * 上报任务状态 |
| | | * 上报任务完成 |
| | | */ |
| | | end{ |
| | | @Transactional |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | //修改AGV工作档的工作状态为205.工作完成 |
| | | agvWrkMast.setWrkSts(205L); |
| | | |
| | | //agvWrkMast.setLocNo(param.getLocationCode()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),205); |
| | | |
| | | //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库 |
| | | if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107){ |
| | |
| | | //出库任务 110.空板出库 |
| | | if(agvWrkMast.getIoType() == 110){ |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | agvWrkMast.setWrkSts(206L); |
| | | } |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | } |
| | | }, |
| | | /** |
| | |
| | | |
| | | AgvLocMast selectEmptyZpallet(int type); |
| | | |
| | | AgvLocMast selectEmptyZpalletByLocType1(int type); |
| | | |
| | | public List<String> queryContainerTypeByLocType1(Short locType1); |
| | | |
| | | } |
| | |
| | | /* |
| | | 空板入库 |
| | | */ |
| | | String emptyPlateIn(String station,String containerCode,Short containerType, Long userId); |
| | | String emptyPlateIn(String station,String containerCode,Short containerType, Long userId, boolean emptyAutoIn); |
| | | |
| | | void emptyPlateOut(String station, int containerType, Long userId); |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public AgvLocMast selectEmptyZpalletByLocType1(int type) { |
| | | |
| | | return this.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_sts","D").eq("loc_type1",type)); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<String> queryContainerTypeByLocType1(Short locType1) { |
| | | return this.baseMapper.queryContainerTypeByLocType1(locType1); |
| | | } |
| | |
| | | 入库 |
| | | */ |
| | | @Transactional |
| | | public String emptyPlateIn(String station,String containerCode,Short containerType, Long userId) { |
| | | public String emptyPlateIn(String station,String containerCode,Short containerType, Long userId, boolean emptyAutoIn) { |
| | | |
| | | Date now = new Date(); |
| | | // 源站点状态检测 |
| | | //AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(station); |
| | | |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station); |
| | | |
| | | //初始定义为空板入库类型 |
| | | int ioType = 10; |
| | | |
| | | // if(Cools.isEmpty(agvBasDevp.getBarcode())){ |
| | | // agvBasDevp.setBarcode(containerCode); |
| | | // } |
| | | |
| | | if(!Cools.eq(agvBasDevp.getBarcode(),containerCode) && !agvBasDevp.getLocSts().equals("O")){ |
| | | if(!Cools.eq(agvBasDevp.getBarcode(),containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn){ |
| | | throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts()+",无法进行空板入库"); |
| | | } |
| | | |
| | | //查询工作档 |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode); |
| | | if(!Cools.isEmpty(agvWrkMast)){ |
| | | if(!Cools.isEmpty(agvWrkMast) && !emptyAutoIn){ |
| | | throw new CoolException("当前容器已有入库任务,无法进行入库"); |
| | | } |
| | | |
| | |
| | | |
| | | //寻找相应类型的空托盘 |
| | | AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType); |
| | | if(containerType == 0){ |
| | | //空板自动出库,根据站点类型选择 |
| | | agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1()); |
| | | |
| | | } |
| | | |
| | | if (Cools.isEmpty(agvLocMast)) { |
| | | throw new CoolException("暂无当前出库站点类型的空托盘!"); |
| | | } |
| | |
| | | package com.zy.asrs.task; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.service.AgvBasDevpService; |
| | | import com.zy.asrs.service.AgvWrkMastService; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.task.handler.AgvWrkMastHandler; |
| | | import com.zy.common.entity.Parameter; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* |
| | | 自动生成空板出库任务 |
| | | */ |
| | | //@Scheduled(cron = "0/10 * * * * ? ") |
| | | public void autoEmptyOut(){ |
| | | boolean packageEmptyAutoOUt = Cools.eq("Y",Parameter.get().getPackageEmptyAutoOUt()); |
| | | boolean mateEmptyAutoOut = Cools.eq("Y",Parameter.get().getMateEmptyAutoOut()); |
| | | boolean boxEmptyAutoOut = Cools.eq("Y",Parameter.get().getBoxEmptyAutoOut()); |
| | | |
| | | if(!packageEmptyAutoOUt && !mateEmptyAutoOut && !boxEmptyAutoOut){ |
| | | return; |
| | | } |
| | | |
| | | List<Integer> locType1Condition = new ArrayList<>(); |
| | | if(packageEmptyAutoOUt){ |
| | | locType1Condition.add(1); |
| | | } |
| | | if(mateEmptyAutoOut){ |
| | | locType1Condition.add(2); |
| | | } |
| | | if(boxEmptyAutoOut){ |
| | | locType1Condition.add(3); |
| | | } |
| | | |
| | | //找出需要补料的站点 |
| | | Wrapper<AgvBasDevp> wrapper = new EntityWrapper<AgvBasDevp>() |
| | | .eq("in_enable", "Y") |
| | | .eq("loc_sts", "O") |
| | | .in("loc_type1", locType1Condition); |
| | | |
| | | List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(wrapper); |
| | | for (AgvBasDevp agvBasDevp : agvBasDevpList){ |
| | | try { |
| | | agvWrkMastHandler.autoEmptyOut(agvBasDevp); |
| | | }catch (Exception e){ |
| | | log.error(e.getMessage()); |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.AgvLocDetl; |
| | | import com.zy.asrs.entity.AgvWaitPakin; |
| | | import com.zy.asrs.entity.AgvWrkDetl; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | |
| | | private OrderService orderService; |
| | | @Autowired |
| | | private AgvBasDevpService agvBasDevpService; |
| | | @Autowired |
| | | private AgvWorkService agvWorkService; |
| | | |
| | | @Transactional |
| | | public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) { |
| | |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | //生成空板入库任务 |
| | | Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2)); |
| | | agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true); |
| | | } |
| | | |
| | | //生成AGV工作历史档 |
| | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | @Synchronized |
| | | @Transactional |
| | | public ReturnT<String> autoEmptyOut(AgvBasDevp agvBasDevp) { |
| | | |
| | | agvWorkService.emptyPlateOut(agvBasDevp.getDevNo(),0,9527L); |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | private String getOrderNoByWrkNo(int wrkNo){ |
| | | AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo)); |
| | | if(Cools.isEmpty(agvWrkDetl)){ |
| | |
| | | //机械臂自动补货开关 |
| | | private String autoReplenishment; |
| | | |
| | | //空板自动出库-包装 |
| | | private String packageEmptyAutoOUt; |
| | | |
| | | //空板自动出库-原材料 |
| | | private String mateEmptyAutoOut; |
| | | |
| | | //空板自动出库-箱壳 |
| | | private String boxEmptyAutoOut; |
| | | |
| | | |
| | | |
| | | } |