package com.zy.asrs.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.entity.AgvBasDevp; import com.zy.asrs.entity.AgvLocDetl; import com.zy.asrs.entity.AgvLocMast; import com.zy.asrs.entity.LocMast; 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.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 移动端接口控制器 * Created by vincent on 2020/6/10 */ @RestController @RequestMapping("agvMobile") public class AgvMobileController extends BaseController { @Autowired private AgvMobileService agvMobileService; @Autowired private AgvBasDevpService agvBasDevpService; @Autowired private AgvWorkService workService; @Autowired private AgvLocMastService agvLocMastService; @Autowired private OrderDetlService orderDetlService; @Autowired private AgvLocDetlService agvLocDetlService; /* locno?组托+绑定暂存位 : 组托 */ @PostMapping("/comb/auth") public R comb(@RequestBody CombParam combParam){ agvMobileService.comb(combParam, getUserId()); return R.ok(); } // 再次拣料 @RequestMapping("/pick/again/auth") @ManagerAuth(memo = "再次拣料") public R pickAgain(@RequestBody PickParam pickParams){ agvMobileService.pickAgain(pickParams, 1l); return R.ok("拣料成功"); } /* 绑定托盘条码与暂存位 */ @PostMapping("/combBinging/auth") public R combBinding(@RequestBody Map map){ String barcode = map.get("barcode").toString(); String stationCode = map.get("stationCode").toString(); Short containerType = Short.valueOf(barcode.substring(0,2)); agvMobileService.combBinding(barcode,stationCode,containerType); return R.ok("托盘绑定站点成功"); } /* 获取当前已绑定的还没生成工作档的暂存位 */ @PostMapping("/getBasDevp/auth") public R getBasDevpByFloor(@RequestBody Map map){ String floor = map.get("floor").toString(); if("1".equals(floor) || "3".equals(floor)){ return R.ok(agvMobileService.getAgvBasDevpByFloor(Integer.parseInt(floor))); } return R.error("参数错误"); } /* 获取输送线站点 */ @PostMapping("/getBasDevp/noCacheShelves/auth") public R getBasDevpByNoCacheShelves(){ return R.ok(agvBasDevpService.getBasDevpByNoCacheShelves()); } /* 启动入库,生成工作档 */ @PostMapping("/pakin/auth") @Synchronized public R pakin(@RequestBody Map map){ List devNos = (List) map.get("devNo"); List agvBasDevpList = devNos.stream().map(devNo -> { return agvBasDevpService.selectById(devNo); }).collect(Collectors.toList()); workService.createWaitPainWrkMastStart(agvBasDevpList, getUserId(),false); return R.ok("生成工作档成功"); } /* 启动入库,组托 + 生产工作档 */ @PostMapping("/start/pakin/auth") @Synchronized @Transactional public R startPakin(@RequestBody AgvMobileStartPakin params){ // 组托 params.getCombParams().forEach(combParam -> { agvMobileService.comb(combParam,getUserId()); }); params.setContainerType(Short.valueOf(params.getContainerCode().substring(0,2))); workService.emptyPlateIn(params.getDevNo(),params.getContainerCode(),params.getContainerType(), getUserId(),false); return R.ok("生成工作档成功"); } /* 入库 */ @PostMapping("/pakin/empty/auth") @Synchronized public R pakinEmpty(@RequestBody AgvMobileStartParam params){ for (AgvMobileStartParam.Pda pda : params.getPad()) { pda.setContainerType(Short.valueOf(pda.getContainerCode().substring(0,2))); workService.emptyPlateIn(pda.getDevNo(),pda.getContainerCode(),pda.getContainerType(), getUserId(),false); } return R.ok(); } /* 空板出库 */ @PostMapping("/pakout/empty/auth") @Synchronized public R pakoutEmpty(@RequestBody AgvMobileStartParam params){ for (AgvMobileStartParam.Pda pda : params.getPad()) { workService.emptyPlateOut(pda.getDevNo(),pda.getContainerType(), getUserId()); } return R.ok(); } /* 空板出库容器码选择 */ @PostMapping("/pakout/empty/container/selector/auth") public R containerType(@RequestBody HashMap params){ String devNo = params.get("devNo"); AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); return R.ok(agvLocMastService.queryContainerTypeByLocType1(agvBasDevp.getLocType1())); } /* 查询库存 入库订单与销售单号 */ @PostMapping("/query/locDetl/v1") public R queryAgvLocDetl(@RequestBody HashMap params){ String orderNo = params.get("orderNo"); String threeCode = params.get("threeCode"); String matnr = params.get("matnr"); String floor = params.get("floor"); Wrapper wrapper = new EntityWrapper().eq("matnr", matnr); // wrapper.eq("orderNo",orderNo); wrapper = Cools.isEmpty(threeCode) ? wrapper.isNull("three_code") : wrapper.eq("three_code",threeCode); if (threeCode.substring(0,2).equals(30)) { wrapper.isNull("specs").or().eq("specs","").eq("floor",1); } List agvLocDetls = agvLocDetlService.selectList(wrapper); List locDetls = new ArrayList<>(); for (AgvLocDetl agvLocDetl : agvLocDetls) { AgvLocMast agvLocMast = new AgvLocMast(); if (Cools.isEmpty(floor)) { agvLocMast = agvLocMastService.selectOne(new EntityWrapper().eq("loc_no", agvLocDetl.getLocNo()).notLike("loc_no","F1")); } else { agvLocMast = agvLocMastService.selectOne(new EntityWrapper().eq("loc_no", agvLocDetl.getLocNo()).like("loc_no",floor)); } if (Cools.isEmpty(agvLocMast)) continue; agvLocDetl.setLocSts(agvLocMast.getLocSts()); agvLocDetl.setLocSts$(agvLocMast.getLocSts$()); locDetls.add(agvLocDetl); } return R.ok(locDetls); } /* 盘点接口 */ @PostMapping("/check/detl/v1") public R checkLocDetl(@RequestBody HashMap param){ String locNo = param.get("locNo"); String containerCode = param.get("containerCode"); List listByLocNo = null; List listByContainerCode = null; if(!Cools.isEmpty(locNo)){ listByLocNo = agvLocDetlService.selectList(new EntityWrapper().eq("loc_no", locNo)); } if(!Cools.isEmpty(locNo)){ listByContainerCode = agvLocDetlService.selectList(new EntityWrapper().eq("supp_code", containerCode)); } Map result = new HashMap(); result.put("locNo",listByLocNo); result.put("containerCode",listByContainerCode); return R.ok(result); } /* 盘点库位错乱维护接口 */ @PostMapping("/update/detl/v1") public R updateLocDetlLocNo(@RequestBody HashMap param){ String locNo = param.get("locNo"); String containerCode = param.get("containerCode"); if(Cools.isEmpty(locNo) || Cools.isEmpty(containerCode)){ return R.error("参数不全"); } List listByLocNo = null; List listByContainerCode = null; if(!Cools.isEmpty(locNo)){ // 源库位 listByLocNo = agvLocDetlService.selectList(new EntityWrapper().eq("loc_no", locNo)); } if(!Cools.isEmpty(locNo)){ // 目标库位 listByContainerCode = agvLocDetlService.selectList(new EntityWrapper().eq("supp_code", containerCode)); } AgvLocMast agvLocMastByContainerCode = agvLocMastService.selectOne(new EntityWrapper().eq("barcode", containerCode)); AgvLocMast agvLocMastByLocNo = agvLocMastService.selectOne(new EntityWrapper().eq("loc_no", locNo)); String barcode1 = agvLocMastByLocNo.getBarcode(); if((!Cools.eq("F",agvLocMastByContainerCode.getLocSts()) && !Cools.eq("D",agvLocMastByContainerCode.getLocSts())) || (!Cools.eq("F",agvLocMastByLocNo.getLocSts()) && !Cools.eq("D",agvLocMastByLocNo.getLocSts()))){ return R.error("库位状态不为F或者D,无法维护"); } // -------------1----------------------------- //库位信息为空 货架信息不为空 if(Cools.isEmpty(listByLocNo) && !Cools.isEmpty(listByContainerCode)){ //更新货架信息的库位为当前库位 listByContainerCode.forEach(agvLocDetl -> { String sourceLoc = agvLocDetl.getLocNo(); agvLocDetl.setLocNo(locNo); agvLocDetlService.updateLocNo(locNo,sourceLoc,agvLocDetl); }); agvLocMastByLocNo.setLocSts("F"); agvLocMastByLocNo.setBarcode(containerCode); agvLocMastService.updateById(agvLocMastByLocNo); if(!Cools.isEmpty(agvLocMastByContainerCode) && Cools.eq("F",agvLocMastByContainerCode.getLocSts())){ agvLocMastByContainerCode.setLocSts("D"); agvLocMastByContainerCode.setBarcode(barcode1); agvLocMastService.updateById(agvLocMastByContainerCode); } return R.ok("维护成功"); } // -------------2----------------------------- //库位信息不为空 货架信息为空 if(!Cools.isEmpty(listByLocNo) && Cools.isEmpty(listByContainerCode)){ String newLocNo = agvLocMastByContainerCode.getLocNo(); //更新货架信息的库位为当前库位 listByLocNo.forEach(agvLocDetl -> { String sourceLoc = agvLocDetl.getLocNo(); agvLocDetl.setLocNo(agvLocMastByContainerCode.getLocNo()); agvLocDetlService.updateLocNo(newLocNo,sourceLoc,agvLocDetl); }); agvLocMastByContainerCode.setLocSts("F"); agvLocMastByContainerCode.setBarcode(agvLocMastByLocNo.getBarcode()); agvLocMastService.updateById(agvLocMastByContainerCode); agvLocMastByLocNo.setLocSts("D"); agvLocMastByLocNo.setBarcode(containerCode); agvLocMastService.updateById(agvLocMastByLocNo); return R.ok("维护成功"); } if((listByLocNo == null && listByContainerCode == null) || listByLocNo.equals(listByContainerCode)){ return R.ok("该库位与容器库存一致,无需维护"); } // --------------3---------------------------- String locNo1 = listByContainerCode.get(0).getLocNo(); listByContainerCode.forEach(agvLocDetl -> { String sourceLoc = agvLocDetl.getLocNo(); agvLocDetl.setLocNo(agvLocMastByLocNo.getLocNo()); agvLocDetlService.updateLocNo(locNo,sourceLoc,agvLocDetl); }); if (!Cools.isEmpty(listByLocNo)) { String suppCode = listByLocNo.get(0).getSuppCode(); List supp_codes = agvLocDetlService.selectList(new EntityWrapper().eq("supp_code", suppCode)); supp_codes.forEach(agvLocDetl -> { agvLocDetl.setLocNo(locNo1); agvLocDetlService.updateLocNo(locNo1,locNo,agvLocDetl); }); } // listByLocNo.forEach(agvLocDetl -> { // String sourceLoc = agvLocDetl.getLocNo(); // agvLocDetl.setLocNo(agvLocMastByContainerCode.getLocNo()); // agvLocDetlService.updateLocNo(sourceLoc,locNo,agvLocDetl); // }); agvLocMastByContainerCode.setBarcode(agvLocMastByLocNo.getBarcode()); agvLocMastService.updateById(agvLocMastByContainerCode); agvLocMastByLocNo.setBarcode(containerCode); agvLocMastService.updateById(agvLocMastByLocNo); return R.ok("维护成功"); } @PostMapping("/agv/v1/locMove") @Transactional @ManagerAuth(memo = "调拨单任务下发") public R agvLocMove(@RequestBody HashMap params){ String fl = String.valueOf(params.get("floor")); short floor =(short)Integer.parseInt(fl.substring(0, 1)); List> dbList = (List>) params.get("dbList"); params.get("dbList"); Object moveType = params.get("moveType"); if (moveType == "unAuto") { return R.error("手动功能暂时无法使用"); } for (HashMap map : dbList) { String locNo = map.get("locNo"); Wrapper wrapper = new EntityWrapper().eq("loc_no", locNo); AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper); agvLocMast.setLocType("1"); agvLocMast.setLocType3(floor); agvLocMastService.update(agvLocMast,wrapper); //System.out.println(locNo); } 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 agvLocDetls1 = new ArrayList<>(); List agvLocDetls2 = new ArrayList<>(); AgvLocDetl agvLocDetl1 = new AgvLocDetl(); agvLocDetl1.setLocNo("AA"); AgvLocDetl agvLocDetl2 = new AgvLocDetl(); agvLocDetl2.setLocNo("AA"); agvLocDetls1.add(agvLocDetl1); agvLocDetls2.add(agvLocDetl2); System.out.println(agvLocDetls1.equals(agvLocDetls2)); List agvLocDetls22 = null; System.out.println(agvLocDetls22.equals(agvLocDetls2)); } }