package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; import com.core.common.*; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.LocMastInitParam; import com.zy.asrs.service.*; import com.zy.common.web.BaseController; 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; @RestController @RequestMapping("/agv") public class AgvBasDevpController extends BaseController { @Autowired AgvBasDevpService agvBasDevpService; @Autowired AgvWrkMastService agvWrkMastService; @Autowired AgvWrkDetlService agvWrkDetlService; @Autowired AgvWaitPakinService agvWaitPakinService; @Autowired AgvWorkService agvWorkService; @RequestMapping(value = "/basDevp/list/auth") @ManagerAuth public R list(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam Map param){ excludeTrash(param); EntityWrapper wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} return R.ok(agvBasDevpService.selectPage(new Page<>(curr, limit), wrapper)); } @RequestMapping(value = "/basDevp/add/auth") @ManagerAuth(memo = "站点添加") public R add(AgvBasDevp agvBasDevp) { agvBasDevp.setModiUser(getUserId()); agvBasDevp.setModiTime(new Date()); agvBasDevp.setAppeUser(getUserId()); agvBasDevp.setAppeTime(new Date()); agvBasDevp.setLocSts("O"); agvBasDevpService.insert(agvBasDevp); return R.ok(); } @RequestMapping(value = "/basDevp/check/column/auth") @ManagerAuth public R query(@RequestBody JSONObject param) { Wrapper wrapper = new EntityWrapper().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); if (null != agvBasDevpService.selectOne(wrapper)){ return R.parse(BaseRes.REPEAT).add(getComment(BasDevp.class, String.valueOf(param.get("key")))); } return R.ok(); } @RequestMapping(value = "/basDevp/{id}/auth") @ManagerAuth public R get(@PathVariable("id") Long id) { return R.ok(agvBasDevpService.selectById(String.valueOf(id))); } @RequestMapping(value = "/basDevp/update/auth") @ManagerAuth(memo = "站点修改") public R update(AgvBasDevp basDevp){ if (Cools.isEmpty(basDevp) || null==basDevp.getDevNo()){ return R.error(); } basDevp.setModiUser(getUserId()); basDevp.setModiTime(new Date()); agvBasDevpService.updateById(basDevp); return R.ok("修改完成"); } @RequestMapping(value = "/basDevp/delete/auth") @ManagerAuth(memo = "站点删除") public R delete(@RequestParam String param){ List list = JSONArray.parseArray(param, AgvBasDevp.class); if (Cools.isEmpty(list)){ return R.error(); } for (AgvBasDevp entity : list){ agvBasDevpService.delete(new EntityWrapper<>(entity)); } return R.ok(); } @RequestMapping(value = "/basDevp/unbind/auth") @ManagerAuth(memo = "站点解绑") public R unbind(@RequestParam String param){ AgvBasDevp agvBasDevp = JSONArray.parseObject(param,AgvBasDevp.class); //若当前站点货位状态不为F.在库状态,则返回错误 if(!agvBasDevp.getLocSts().equals("F")){ return R.error("当前站点货位状态不为在库,无法解除绑定"); } agvBasDevp.setLocSts("O"); agvBasDevp.setBarcode(""); agvBasDevpService.update(agvBasDevp,new EntityWrapper().eq("dev_no",agvBasDevp.getDevNo())); return R.ok(); } @RequestMapping(value = "/basDevp/export/auth") @ManagerAuth(memo = "站点导出") public R export(@RequestBody JSONObject param){ List fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); EntityWrapper wrapper = new EntityWrapper<>(); Map map = excludeTrash(param.getJSONObject("basDevp")); convert(map, wrapper); List list = agvBasDevpService.selectList(wrapper); return R.ok(exportSupport(list, fields)); } @RequestMapping(value = "/basDevpQuery/auth") @ManagerAuth public R query(String condition) { EntityWrapper wrapper = new EntityWrapper<>(); wrapper.like("dev_no", condition); Page page = agvBasDevpService.selectPage(new Page<>(0, 10), wrapper); List> result = new ArrayList<>(); for (AgvBasDevp basDevp : page.getRecords()){ Map map = new HashMap<>(); map.put("id", basDevp.getDevNo()); map.put("value", basDevp.getDevNo()); result.add(map); } return R.ok(result); } @RequestMapping(value = "/basDevp/init/auth") @ManagerAuth(memo = "初始化站点") public R init(LocMastInitParam param) { //清空原有库位 agvBasDevpService.clearBasDevp(); //初始化1楼3楼站点 agvBasDevpService.initBasDevp(); return R.ok(); } /* 站点明细 */ @RequestMapping(value = "/basDevp/detail/list/auth") public R basDevpDetailList(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam Map param){ String devNo = param.get("devNo").toString(); AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); if("F".equals(agvBasDevp.getLocSts()) || "R".equals(agvBasDevp.getLocSts())){ //先去入库通知档找明细 Page agvWaitPakinPage = agvWaitPakinService.selectPage(new Page<>(curr, limit), new EntityWrapper() .eq("supp_code", agvBasDevp.getBarcode())); if(agvWaitPakinPage.getRecords().size()>0){ return R.ok(agvWaitPakinPage); }else { //如果入库通档明细为空,则去工作档找明细 AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper() .eq("loc_no", agvBasDevp.getDevNo()) .or().eq("source_loc_no",agvBasDevp.getDevNo())); Page agvWrkDetlPage = agvWrkDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper() .eq("wrk_no", agvWrkMast.getWrkNo())); if(agvWrkDetlPage.getRecords().size()>0){ return R.ok(agvWrkDetlPage); } } } return R.ok(); } @RequestMapping(value = "/basDevp/visualized/list/auth") public R visualizedList(@RequestBody JSONObject param){ String stationCode = param.get("stationCode").toString(); Map result = agvBasDevpService.getAgvBasDevpDtoByStationCode(stationCode); return R.ok(result); } @RequestMapping(value = "/basDevp/visualized/list/auth/v2") public R visualizedList(@RequestParam String stationCode){ Map result = agvBasDevpService.getAgvBasDevpDtoByStationCode(stationCode); return R.ok(result); } /* 容器离场 */ @RequestMapping(value = "/basDevp/visualized/container/moveOut") public R visualiZedContainerMoveOut(@RequestBody Map map) { List devNos = new ArrayList<>(); List agvWrkMastList = new ArrayList<>(); try { devNos = (List) map.get("devNo"); agvWrkMastList = devNos.stream().map(devNo -> { AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper().eq("loc_no", devNo).eq("wrk_sts",205L)); if(agvWrkMast.getIoType() != 101 && agvWrkMast.getIoType() != 110){ throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型不为101.出库,无法执行容器离场任务,请重新选择站点。"); } return agvWrkMast; }).collect(Collectors.toList()); }catch (Exception e){ String devNo = map.get("devNo").toString(); AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper().eq("loc_no", devNo)); if(agvWrkMast.getIoType() != 101 && agvWrkMast.getIoType() != 110){ throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型不为101.出库,无法执行容器离场任务,请重新选择站点。"); } agvWrkMastList.add(agvWrkMast); } // List agvWrkMastList = devNos.stream().map(devNo -> { // AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper().eq("loc_no", devNo)); // if(agvWrkMast.getIoType() != 101 && agvWrkMast.getIoType() != 110){ // throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型不为101.出库,无法执行容器离场任务,请重新选择站点。"); // } // 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); }); } } catch (IOException e) { e.printStackTrace(); return R.error("容器离场失败"); } return R.ok("容器离场成功"); } /* 拣料/盘点入库 */ @RequestMapping(value = "/basDevp/visualized/container/pickIn") public R visualiZedPickIn(@RequestBody Map map){ List devNos = new ArrayList<>(); List agvWrkMastList = new ArrayList<>(); try { devNos = (List) map.get("devNo"); agvWrkMastList = devNos.stream().map(devNo -> { AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper().eq("loc_no", devNo).eq("wrk_sts",205L)); if(agvWrkMast.getIoType() == 101){ throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型为101.出库,无法执行拣料入库任务,请重新选择站点。"); } return agvWrkMast; }).collect(Collectors.toList()); }catch (Exception e){ String devNo = map.get("devNo").toString(); AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper().eq("loc_no", devNo).eq("wrk_sts",205L)); if(agvWrkMast.getIoType() == 101){ throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型为101.出库,无法执行拣料入库任务,请重新选择站点。"); } agvWrkMastList.add(agvWrkMast); } // List devNos = (List) map.get("devNo"); // List agvWrkMastList = devNos.stream().map(devNo -> { // AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper().eq("loc_no", devNo)); // if(agvWrkMast.getIoType() == 101){ // throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型为101.出库,无法执行拣料入库任务,请重新选择站点。"); // } // return agvWrkMast; // }).collect(Collectors.toList()); agvWorkService.pickIn(agvWrkMastList); return R.ok("生成拣料出库任务成功"); } private void convert(Map map, EntityWrapper wrapper){ for (Map.Entry entry : map.entrySet()){ String val = String.valueOf(entry.getValue()); if (val.contains(RANGE_TIME_LINK)){ String[] dates = val.split(RANGE_TIME_LINK); wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); } else { wrapper.like(entry.getKey(), val); } } } }