| | |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.exception.CoolException; |
| | | import com.zy.asrs.wcs.common.domain.enums.DictType; |
| | | import com.zy.asrs.wcs.core.entity.BasShuttle; |
| | | import com.zy.asrs.wcs.core.entity.Loc; |
| | | import com.zy.asrs.wcs.core.map.controller.param.MapDataParam; |
| | | import com.zy.asrs.wcs.core.map.controller.param.MapQueryParam; |
| | | import com.zy.asrs.wcs.core.map.controller.result.LiftVo; |
| | | import com.zy.asrs.wcs.core.map.controller.result.LocVo; |
| | | import com.zy.asrs.wcs.core.map.controller.result.ShuttleVo; |
| | | import com.zy.asrs.wcs.core.map.entity.MapItem; |
| | | import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; |
| | | import com.zy.asrs.wcs.core.model.enums.LocStsType; |
| | | import com.zy.asrs.wcs.core.service.BasShuttleService; |
| | | import com.zy.asrs.wcs.core.service.LocService; |
| | | import com.zy.asrs.wcs.core.service.LocStsService; |
| | | import com.zy.asrs.wcs.core.utils.Utils; |
| | | import com.zy.asrs.wcs.rcs.entity.Device; |
| | | import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol; |
| | | import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; |
| | | import com.zy.asrs.wcs.rcs.service.DeviceService; |
| | | import com.zy.asrs.wcs.rcs.service.DeviceTypeService; |
| | | import com.zy.asrs.wcs.system.entity.Dict; |
| | | import com.zy.asrs.wcs.system.service.DictService; |
| | | import com.zy.asrs.wcs.system.service.UserService; |
| | | import com.zy.asrs.wcs.utils.CommonUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * Created by vincent on 3/15/2024 |
| | |
| | | private UserService userService; |
| | | @Autowired |
| | | private DictService dictService; |
| | | @Autowired |
| | | private DeviceTypeService deviceTypeService; |
| | | @Autowired |
| | | private DeviceService deviceService; |
| | | @Autowired |
| | | private LocService locService; |
| | | @Autowired |
| | | private LocStsService locStsService; |
| | | @Autowired |
| | | private BasShuttleService basShuttleService; |
| | | |
| | | public String getMapFloorList(Long userId) { |
| | | String floorKey = "map-floor-list"; |
| | | String floorKey = "floor-list"; |
| | | Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, floorKey)); |
| | | if (null == dict) { |
| | | dict = new Dict(); |
| | |
| | | return Optional.ofNullable(dict).map(Dict::getValue).orElse(null); |
| | | } |
| | | |
| | | @Transactional |
| | | public void saveMapData(MapDataParam param, Long userId) { |
| | | Date now = new Date(); |
| | | // dict |
| | | String mapKey = getMapKey(param.getFloor()); |
| | | Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, mapKey)); |
| | | if (Cools.isEmpty(dict)) { |
| | |
| | | throw new CoolException("服务器内部错误"); |
| | | } |
| | | } |
| | | // loc |
| | | List<String> newLocList = new ArrayList<>(); |
| | | for (MapItem item : param.getItemList()) { |
| | | int row = Integer.parseInt(String.valueOf(item.getProperty().get("row"))); |
| | | int bay = Integer.parseInt(String.valueOf(item.getProperty().get("bay"))); |
| | | String locNo = Utils.getLocNo(row, bay, param.getFloor()); |
| | | newLocList.add(locNo); |
| | | } |
| | | |
| | | List<String> existLocList = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLev, param.getFloor())) |
| | | .stream().map(Loc::getLocNo).collect(Collectors.toList()); |
| | | |
| | | |
| | | List<String> locListToSave = newLocList.stream().filter(locNo -> !existLocList.contains(locNo)).collect(Collectors.toList()); |
| | | |
| | | List<String> locListToRemove = existLocList.stream().filter(locNo -> !newLocList.contains(locNo)).collect(Collectors.toList()); |
| | | |
| | | List<String> locListInBoth = newLocList.stream().filter(existLocList::contains).collect(Collectors.toList()); |
| | | |
| | | for (String locNo : locListToSave) { |
| | | Loc loc = new Loc(); |
| | | loc.setLocNo(locNo); |
| | | loc.setName(locNo); |
| | | loc.setRow(Utils.getRow(locNo)); |
| | | loc.setBay(Utils.getBay(locNo)); |
| | | loc.setLev(Utils.getLev(locNo)); |
| | | loc.setLocSts(LocStsType.O.val()); |
| | | loc.setCreateBy(userId); |
| | | loc.setCreateTime(now); |
| | | loc.setUpdateBy(userId); |
| | | loc.setUpdateTime(now); |
| | | if (!locService.save(loc)) { |
| | | throw new CoolException("服务器内部错误"); |
| | | } |
| | | } |
| | | |
| | | for (String locNo : locListToRemove) { |
| | | if (!locService.remove(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, locNo))) { |
| | | throw new CoolException("服务器内部错误"); |
| | | } |
| | | } |
| | | |
| | | for (String locNo : locListInBoth) { |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | public List<LocVo> getShelfLocNoList(String locNo) { |
| | | public List<LocVo> getShelfLocNoGroup(String locNo) { |
| | | List<LocVo> locVos = new ArrayList<>(); |
| | | int row = Utils.getRow(locNo); |
| | | int bay = Utils.getBay(locNo); |
| | | for (int lev = 1; lev < 6; lev++) { |
| | | locVos.add(new LocVo(Utils.getLocNo(row, bay, lev), "F")); |
| | | List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getRow, row).eq(Loc::getBay, bay).orderByAsc(Loc::getLev)); |
| | | for (Loc loc : locList) { |
| | | LocVo locVo = new LocVo(); |
| | | locVo.setLocNo(loc.getLocNo()); |
| | | locVo.setLocSts(loc.getLocStsFlag()); |
| | | locVo.setZpallet(loc.getZpallet()); |
| | | locVo.setEnable(CommonUtils.getStatusBool(loc.getStatus())); |
| | | locVos.add(locVo); |
| | | } |
| | | return locVos; |
| | | } |
| | | |
| | | public LocVo getShelfLocNoInfo(String locNo) { |
| | | LocVo locVo = new LocVo(); |
| | | locVo.setLocNo(locNo); |
| | | Loc loc = locService.selectByLocNo(locNo); |
| | | if (null == loc) { |
| | | return locVo; |
| | | } |
| | | locVo.setLocSts(loc.getLocStsFlag()); |
| | | locVo.setZpallet(loc.getZpallet()); |
| | | locVo.setEnable(CommonUtils.getStatusBool(loc.getStatus())); |
| | | return locVo; |
| | | } |
| | | |
| | | public ShuttleVo getShuttleInfo(String shuttleNo) { |
| | | ShuttleVo vo = new ShuttleVo(); |
| | | vo.setShuttleNo(shuttleNo); |
| | | Device device = deviceService.getOne(new LambdaQueryWrapper<Device>() |
| | | .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val()) |
| | | .eq(Device::getDeviceNo, shuttleNo) |
| | | .eq(Device::getStatus, 1) |
| | | ); |
| | | if (null == device) { |
| | | return vo; |
| | | } |
| | | BasShuttle basShuttle = basShuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, device.getId())); |
| | | if (null == basShuttle || Cools.isEmpty(basShuttle.getProtocol())) { |
| | | return vo; |
| | | } |
| | | ShuttleProtocol protocol = JSON.parseObject(basShuttle.getProtocol(), ShuttleProtocol.class); |
| | | // ShuttleThread thread = (ShuttleThread)SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue()); |
| | | // if (null == thread) { |
| | | // return vo; |
| | | // } |
| | | // ShuttleProtocol protocol = thread.getStatus(); |
| | | // if (null == protocol) { |
| | | // return vo; |
| | | // } |
| | | vo.setTaskNo(String.valueOf(protocol.getTaskNo())); |
| | | vo.setStatus(protocol.getProtocolStatusType().desc); |
| | | vo.setOriginLocNo(protocol.getSourceLocNo()); |
| | | vo.setDestLocNo(protocol.getLocNo()); |
| | | vo.setCurrentCode(protocol.getCurrentCode()); |
| | | vo.setCurrentLocNo(protocol.getCurrentLocNo()); |
| | | vo.setBatteryPower(protocol.getBatteryPower()); |
| | | vo.setErrorCode(protocol.getErrorCode()); |
| | | vo.setBatteryTemp(protocol.getBatteryTemp()); |
| | | vo.setHasLift(protocol.getHasLift()); |
| | | vo.setHasPallet(protocol.getHasPallet()); |
| | | vo.setHasCharge(protocol.getHasCharge()); |
| | | vo.setBatteryVoltage(String.valueOf(protocol.getBatteryVoltage())); |
| | | // vo.setZpallet(); |
| | | vo.setPakMk(protocol.getPakMk()); |
| | | vo.setEnable(CommonUtils.getStatusBool(basShuttle.getStatus())); |
| | | return vo; |
| | | } |
| | | |
| | | public LiftVo getLiftInfo(String liftNo) { |
| | | LiftVo vo = new LiftVo(); |
| | | vo.setLiftNo(liftNo); |
| | | LiftProtocol protocol = new LiftProtocol(); |
| | | // todo checkout protocol |
| | | // vo.setTaskNo(String.valueOf(protocol.getTaskNo())); |
| | | // vo.setStatus(protocol.getProtocolStatusType().desc); |
| | | // vo.setOriginLocNo(protocol.getSourceLocNo()); |
| | | // vo.setDestLocNo(protocol.getLocNo()); |
| | | // vo.setCurrentCode(protocol.getCurrentCode()); |
| | | // vo.setBatteryPower(protocol.getBatteryPower()); |
| | | // vo.setErrorCode(protocol.getErrorCode()); |
| | | // vo.setBatteryTemp(protocol.getBatteryTemp()); |
| | | // vo.setHasLift(protocol.getHasLift()); |
| | | // vo.setHasPallet(protocol.getHasPallet()); |
| | | // vo.setHasCharge(protocol.getHasCharge()); |
| | | // vo.setBatteryVoltage(String.valueOf(protocol.getBatteryVoltage())); |
| | | // vo.setPakMk(protocol.getPakMk()); |
| | | return vo; |
| | | } |
| | | |
| | | private String getMapKey(Integer floor) { |
| | |
| | | " {\n" + |
| | | " label: '1F',\n" + |
| | | " value: 1\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " label: '2F',\n" + |
| | | " value: 2\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " label: '3F',\n" + |
| | | " value: 3\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " label: '4F',\n" + |
| | | " value: 4\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " label: '5F',\n" + |
| | | " value: 5\n" + |
| | | " },\n" + |
| | | "]"; |
| | | |