package com.zy.asrs.wms.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.wms.asrs.entity.Loc; import com.zy.asrs.wms.asrs.entity.enums.LocStsType; import com.zy.asrs.wms.asrs.service.LocService; import com.zy.asrs.wms.common.annotation.OperationLog; import com.zy.asrs.wms.common.domain.BaseParam; import com.zy.asrs.wms.common.domain.KeyValVo; import com.zy.asrs.wms.common.domain.PageParam; import com.zy.asrs.wms.asrs.entity.LocMap; import com.zy.asrs.wms.asrs.service.LocMapService; import com.zy.asrs.wms.system.controller.BaseController; import com.zy.asrs.wms.utils.ExcelUtil; import com.zy.asrs.wms.utils.Utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api") public class LocMapController extends BaseController { @Autowired private LocMapService locMapService; @Autowired private LocService locService; @PreAuthorize("hasAuthority('asrs:locMap:list')") @PostMapping("/locMap/page") public R page(@RequestBody Map map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, LocMap.class); return R.ok().add(locMapService.page(pageParam, pageParam.buildWrapper(true))); } @PreAuthorize("hasAuthority('asrs:locMap:list')") @PostMapping("/locMap/list") public R list(@RequestBody Map map) { return R.ok().add(locMapService.list()); } @PreAuthorize("hasAuthority('asrs:locMap:list')") @GetMapping("/locMap/{id}") public R get(@PathVariable("id") Long id) { return R.ok().add(locMapService.getById(id)); } @PreAuthorize("hasAuthority('asrs:locMap:save')") @OperationLog("添加库位地图") @PostMapping("/locMap/save") public R save(@RequestBody LocMap locMap) { if (!locMapService.save(locMap)) { return R.error("添加失败"); } return R.ok("添加成功"); } @PreAuthorize("hasAuthority('asrs:locMap:update')") @OperationLog("修改库位地图") @PostMapping("/locMap/update") public R update(@RequestBody LocMap locMap) { if (!locMapService.updateById(locMap)) { return R.error("修改失败"); } return R.ok("修改成功"); } @PreAuthorize("hasAuthority('asrs:locMap:remove')") @OperationLog("删除库位地图") @PostMapping("/locMap/remove/{ids}") public R remove(@PathVariable Long[] ids) { if (!locMapService.removeByIds(Arrays.asList(ids))) { return R.error("删除失败"); } return R.ok("删除成功"); } @PreAuthorize("hasAuthority('asrs:locMap:list')") @PostMapping("/locMap/query") public R query(@RequestParam(required = false) String condition) { List vos = new ArrayList<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (!Cools.isEmpty(condition)) { wrapper.like(LocMap::getId, condition); } locMapService.page(new Page<>(1, 30), wrapper).getRecords().forEach( item -> vos.add(new KeyValVo(item.getId(), item.getId())) ); return R.ok().add(vos); } @PreAuthorize("hasAuthority('asrs:locMap:list')") @PostMapping("/locMap/export") public void export(@RequestBody Map map, HttpServletResponse response) throws Exception { ExcelUtil.build(ExcelUtil.create(locMapService.list(), LocMap.class), response); } @PreAuthorize("hasAuthority('asrs:locMap:list')") @GetMapping("/locMap/getData/{lev}/auth") public R getMapData(@PathVariable("lev") Integer lev) { LocMap locMap = locMapService.getOne(new LambdaQueryWrapper().eq(LocMap::getMapLev, lev)); //解析json地图数据 List arrayLists = JSON.parseArray(locMap.getData(), ArrayList.class); //获取当前楼层库位数据 List list = locService.list(new LambdaQueryWrapper().eq(Loc::getLev1, lev)); for (Loc loc : list) { Integer row = loc.getRow1(); Integer bay = loc.getBay1(); ArrayList rowData = arrayLists.get(row); Object o = rowData.get(bay); JSONObject jsonObject = JSON.parseObject(o.toString()); jsonObject.put("locNo", loc.getLocNo());//设置库位号 jsonObject.put("locSts$", loc.getLocStsId$());//库位状态描述 jsonObject.put("locSts", loc.getLocSts$());//库位状态 //更新list rowData.set(bay, jsonObject); arrayLists.set(row, rowData); } return R.ok().add(JSONObject.toJSONString(arrayLists)); } @PreAuthorize("hasAuthority('asrs:locMap:list')") @GetMapping("/locMap/getLev") public R getMapLev() { List list = locMapService.list(new LambdaQueryWrapper().orderByAsc(LocMap::getMapLev)); ArrayList levList = new ArrayList<>(); for (LocMap locMap : list) { levList.add(locMap.getMapLev()); } return R.ok().add(levList); } @PreAuthorize("hasAuthority('asrs:locMap:save')") @OperationLog("初始化库位") @PostMapping("/locMap/init") @Transactional public R init(@RequestBody LocMap locMap) { Integer mapLev = locMap.getMapLev(); locService.remove(new LambdaQueryWrapper().eq(Loc::getLev1, mapLev)); //解析json地图数据 List arrayLists = JSON.parseArray(locMap.getData(), ArrayList.class); int rowIdx = 0; for (ArrayList row : arrayLists) { int bayIdx = 0; for (Object bay : row) { JSONObject data = JSON.parseObject(JSON.toJSONString(bay)); if (data.getInteger("value") == 0) { Loc loc = new Loc(); loc.setRow1(rowIdx); loc.setBay1(bayIdx); loc.setLev1(mapLev); loc.setLocStsId(LocStsType.O.val()); loc.setLocNo(Utils.getLocNo(rowIdx, bayIdx, mapLev)); locService.save(loc); } bayIdx++; } rowIdx++; } return R.ok("添加成功"); } }