src/main/java/com/zy/asrs/controller/AgvMobileController.java
@@ -9,20 +9,14 @@ import com.zy.asrs.entity.AgvLocDetl; import com.zy.asrs.entity.AgvLocMast; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.param.AgvMobileStartPakin; import com.zy.asrs.entity.param.AgvMobileStartParam; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.entity.param.PickParam; import com.zy.asrs.entity.param.*; import com.zy.asrs.service.*; import com.zy.common.web.BaseController; import io.swagger.models.auth.In; import lombok.Synchronized; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.HashMap; @@ -370,6 +364,7 @@ @PostMapping("/agv/v1/locMove") @Transactional @ManagerAuth(memo = "调拨单任务下发") public R agvLocMove(@RequestBody HashMap<String,Object> params){ String fl = String.valueOf(params.get("floor")); short floor =(short)Integer.parseInt(fl.substring(0, 1)); @@ -391,6 +386,14 @@ return R.ok(); } @PostMapping("/hand/control/locMove") @Transactional @ManagerAuth(memo = "手动库位转移") public R handControlLocMove(@RequestBody LocMoveParam param){ agvMobileService.handControlLocMove(param, getUserId()); return R.ok(); } public static void main(String[] args) { List<AgvLocDetl> agvLocDetls1 = new ArrayList<>(); List<AgvLocDetl> agvLocDetls2 = new ArrayList<>(); src/main/java/com/zy/asrs/controller/AgvWorkController.java
@@ -49,7 +49,10 @@ workService.completeWrkMast(workNo, getUserId()); return R.ok("工作档已完成"); } else if (type == 2) { workService.cancelWrkMast(workNo, getUserId()); workService.cancelWrkMast(workNo, getUserId(),2); return R.ok("工作档已取消"); } else if (type == 5) { workService.cancelWrkMast(workNo, getUserId(),5); return R.ok("工作档已取消"); } return R.ok(); src/main/java/com/zy/asrs/entity/param/LocMoveParam.java
New file @@ -0,0 +1,11 @@ package com.zy.asrs.entity.param; import lombok.Data; @Data public class LocMoveParam { private String locNo; private String floor; } src/main/java/com/zy/asrs/service/AgvMobileService.java
@@ -2,6 +2,7 @@ import com.zy.asrs.entity.AgvBasDevp; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.entity.param.LocMoveParam; import com.zy.asrs.entity.param.MobileAdjustParam; import com.zy.asrs.entity.param.PickParam; @@ -34,4 +35,10 @@ void pakoutEmpty(String devNo); /** * 手动库位转移 */ String handControlLocMove(LocMoveParam param, Long userId); } src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -56,6 +56,6 @@ /** * 手动取消工作档 */ void cancelWrkMast(String workNo, Long userId); void cancelWrkMast(String workNo, Long userId, Integer type); } src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -4,13 +4,16 @@ import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.entity.param.LocMoveParam; import com.zy.asrs.entity.param.MobileAdjustParam; import com.zy.asrs.entity.param.PickParam; import com.zy.asrs.service.*; import com.zy.common.model.DetlDto; import com.zy.common.service.AgvCommonService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -48,6 +51,10 @@ private AgvWorkService agvWorkService; @Autowired private AgvWrkDetlService agvWrkDetlService; @Autowired private AgvLocMastService agvLocMastService; @Autowired private AgvCommonService agvCommonService; /* @@ -354,4 +361,99 @@ } /* 手动移库 */ @Override @Transactional public String handControlLocMove(LocMoveParam param, Long userId) { String fl = String.valueOf(param.getFloor()); short floor =(short)Integer.parseInt(fl.substring(0, 1)); Integer ioType = 0; AgvLocMast agvLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", param.getLocNo())); if (Cools.isEmpty(agvLocMast)) { throw new CoolException("当前库位为空,请检查库位!"); } // if (agvLocMast.getLocSts() == "F") { // return R.error("当前库位不为在库,或者空货架,不支持移库"); // 校验楼层 if (agvLocMast.getLocType1() != 3) { // 不为箱壳区域 if (agvLocMast.getFloor() != floor) { throw new CoolException("当前库位不支持跨楼层转移"); } else { ioType = 11; } } else { ioType = 12; } Date now = new Date(); //查询工作档 AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode()); if(!Cools.isEmpty(agvWrkMast)){ throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中"); } //检索库位,选择合适的库位 AgvLocMast locMast = agvCommonService.getLocNo(agvLocMast.getLocType1(),floor); if (Cools.isEmpty(locMast)) { throw new CoolException("当前楼层没有空库位"); } //生成工作档 AgvWrkMast mast = new AgvWrkMast(); //工作状态 mast.setWrkSts(201L); //入出库类型 mast.setIoType(ioType); mast.setIoTime(now); //优先级 mast.setIoPri(300.0); //源站点 mast.setSourceLocNo(agvLocMast.getLocNo()); //目标站点 mast.setLocNo(locMast.getLocNo()); //容器编码 mast.setBarcode(agvLocMast.getBarcode()); //容器类型 mast.setWhsType(30); mast.setAppeUser(userId); mast.setAppeTime(now); mast.setModiUser(userId); mast.setModiTime(now); if (!agvWrkMastService.insertByIncrease(mast)) { throw new CoolException("保存工作档失败"); } if (!agvLocMast.getLocSts().equals("F")) { AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locMast.getLocNo()).eq("source_loc_no",agvLocMast.getLocNo())); //生成工作档明细 List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo())); agvLocDetls.forEach(agvLocDetl -> { AgvWrkDetl wrkDetl = new AgvWrkDetl(); wrkDetl.setWrkNo(mast1.getWrkNo()); wrkDetl.sync(agvLocDetl); wrkDetl.setSuppCode(agvLocDetl.getSuppCode()); wrkDetl.setIoTime(now); wrkDetl.setAppeUser(9527L); wrkDetl.setAppeTime(now); wrkDetl.setModiUser(9527L); wrkDetl.setModiTime(now); if (!agvWrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作明细失败"); } }); } //更新目标库位状态 updateAgvLocMast(agvLocMast,"R"); updateAgvLocMast(locMast,"S"); return "ok"; } /* 更新目标库位信息 */ private void updateAgvLocMast(AgvLocMast locMast, String locSts){ locMast.setLocSts(locSts); agvLocMastService.updateById(locMast); } } src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -580,7 +580,7 @@ } @Transactional public void cancelWrkMast(String workNo, Long userId) { public void cancelWrkMast(String workNo, Long userId,Integer type) { AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); if (Cools.isEmpty(wrkMast)){ throw new CoolException(workNo+"工作档不存在"); @@ -599,8 +599,18 @@ agvLocMastService.updateLocStsByLocNo(locNo,"O","",null); agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue()); // 移库取消 }else if(wrkMast.getIoType() == 108) { //源库位 String locNo = wrkMast.getSourceLocNo(); //目标站点 String devNo = wrkMast.getLocNo(); agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo)); if(devNo.contains("@")){ agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","",null); } //出库取消 }else { } else { //源库位 String locNo = wrkMast.getSourceLocNo(); //目标站点 @@ -645,9 +655,11 @@ if(!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())){ throw new CoolException("删除失败,请联系管理员"); } if (type == 2) { //调用agv取消任务接口 agvWrkMastService.callCancelTask(wrkMast.getWrkNo()); } //调用agv取消任务接口 agvWrkMastService.callCancelTask(wrkMast.getWrkNo()); } src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -187,7 +187,7 @@ agvWrkMast.setWrkNo(-agvWrkMast.getWrkNo()); } agvTaskCreateParam.setTaskCode(agvWrkMast.getWrkNo().toString()); if (agvWrkMast.getIoType() == 108 || agvWrkMast.getIoType() == 109) { if (agvWrkMast.getIoType() == 108 || agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 12) { agvTaskCreateParam.setTaskTyp("F06"); } else { agvTaskCreateParam.setTaskTyp("F01"); src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -107,6 +107,8 @@ .or().eq("io_type", 1) .or().eq("io_type", 10) .or().eq("io_type", 57) .or().eq("io_type", 11) .or().eq("io_type", 12) .or().eq("io_type", 109) .or().eq("io_type", 108)).getRecords(); src/main/webapp/static/js/agvWrkMast/wrkMast.js
@@ -349,6 +349,26 @@ }); } break; // 取消 case 'cancel1': if (data.pdcType === "Y") { layer.confirm('当前任务关联ERP销售单,取消将重新生成出库作业,是否继续?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:5}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg); }) layer.closeAll(); }); } else { layer.confirm('确认取消该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:5}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg); }) layer.closeAll(); }); } break; // 拣料入库 case 'pick': layer.confirm('拣料入库该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ src/main/webapp/views/agvWrkMast/wrkMast.html
@@ -121,7 +121,8 @@ <script type="text/html" id="operate"> <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="detlShow">明细</a> <a class="layui-btn layui-btn-danger layui-btn-xs btn-complete" lay-event="complete">完成</a> <a class="layui-btn layui-btn-primary layui-btn-xs btn-cancel" lay-event="cancel">取消</a> <a class="layui-btn layui-btn-primary layui-btn-xs btn-cancel" lay-event="cancel">取消(AGV)</a> <a class="layui-btn layui-btn-primary layui-btn-xs btn-cancel" lay-event="cancel1">取消</a> <a class="layui-btn layui-btn-warm layui-btn-xs btn-pick" lay-event="priWrkMast">维护状态</a> {{#if (d.steNo) { }} <a class="layui-btn layui-btn-warm layui-btn-xs btn-pick" lay-event="removeSte">弃车</a>