package com.qianwen.smartman.modules.cps.service.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.tool.node.ForestNodeMerger; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.utils.Lambda; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.common.websocket.entity.FmsArea; import com.qianwen.smartman.common.websocket.entity.FmsAreaLocation; import com.qianwen.smartman.modules.cps.convert.WarehouseAreaConvert; import com.qianwen.smartman.modules.cps.entity.WarehouseArea; import com.qianwen.smartman.modules.cps.entity.WarehouseStation; import com.qianwen.smartman.modules.cps.mapper.WarehouseAreaMapper; import com.qianwen.smartman.modules.cps.service.ITrayStorageService; import com.qianwen.smartman.modules.cps.service.IWarehouseAreaService; import com.qianwen.smartman.modules.cps.service.IWarehouseStationService; import com.qianwen.smartman.modules.cps.vo.WarehouseAreaStationVO; import com.qianwen.smartman.modules.cps.vo.WarehouseAreaSubmitVO; import com.qianwen.smartman.modules.cps.vo.WarehouseAreaUpdateVO; import com.qianwen.smartman.modules.cps.vo.WarehouseAreaVO; import com.qianwen.smartman.modules.fms.entity.FmsRealTimeTray; @Service public class WarehouseAreaServiceImpl extends BaseServiceImpl implements IWarehouseAreaService { private final IWarehouseStationService iWarehouseStationService; private final ITrayStorageService trayStorageService; public WarehouseAreaServiceImpl(final IWarehouseStationService iWarehouseStationService, final ITrayStorageService trayStorageService) { this.iWarehouseStationService = iWarehouseStationService; this.trayStorageService = trayStorageService; } @Override // org.springblade.modules.cps.service.IWarehouseAreaService public WarehouseAreaVO insert(WarehouseAreaSubmitVO warehouseAreaSubmitVO) { checkAreaInfo(warehouseAreaSubmitVO); WarehouseArea warehouseArea = WarehouseAreaConvert.INSTANCE.convert(warehouseAreaSubmitVO); save(warehouseArea); WarehouseAreaVO warehouseAreaVO = WarehouseAreaConvert.INSTANCE.convert(warehouseArea); return warehouseAreaVO; } private void checkAreaInfo(WarehouseAreaSubmitVO warehouseAreaSubmitVO) { if (Func.isNotEmpty(warehouseAreaSubmitVO.getCode()) && warehouseAreaSubmitVO.getCode().length() > 24) { throw new ServiceException(MessageUtils.message("cps.warehouse.area.code.length.too.long", new Object[0])); } Long count = Long.valueOf(count(Wrappers.lambdaQuery() .ne(Func.isNotEmpty(warehouseAreaSubmitVO.getId()), WarehouseArea::getId, warehouseAreaSubmitVO.getId()) .eq(WarehouseArea::getCode, warehouseAreaSubmitVO.getCode()))); /* Long count = Long.valueOf(count((Wrapper) Wrappers.lambdaQuery().ne(Func.isNotEmpty(warehouseAreaSubmitVO.getId()), (v0) -> { return v0.getId(); }, warehouseAreaSubmitVO.getId()).eq((v0) -> { return v0.getCode(); }, warehouseAreaSubmitVO.getCode())));*/ if (count.longValue() > 0) { throw new ServiceException(MessageUtils.message("cps.warehouse.area.code.already.exists", new Object[0])); } if (Func.isNotEmpty(warehouseAreaSubmitVO.getName()) && warehouseAreaSubmitVO.getName().length() > 32) { throw new ServiceException(MessageUtils.message("cps.warehouse.area.name.length.too.long", new Object[0])); } Long countName = Long.valueOf(count(Wrappers.lambdaQuery() .ne(Func.isNotEmpty(warehouseAreaSubmitVO.getId()), WarehouseArea::getId, warehouseAreaSubmitVO.getId()) .eq(WarehouseArea::getName, warehouseAreaSubmitVO.getName()))); /* Long countName = Long.valueOf(count((Wrapper) Wrappers.lambdaQuery().ne(Func.isNotEmpty(warehouseAreaSubmitVO.getId()), (v0) -> { return v0.getId(); }, warehouseAreaSubmitVO.getId()).eq((v0) -> { return v0.getName(); }, warehouseAreaSubmitVO.getName())));*/ if (countName.longValue() > 0) { throw new ServiceException(MessageUtils.message("cps.warehouse.area.name.already.exists", new Object[0])); } } @Override // org.springblade.modules.cps.service.IWarehouseAreaService public WarehouseAreaVO edit(WarehouseAreaUpdateVO warehouseAreaUpdateVO) { WarehouseAreaSubmitVO warehouseAreaSubmitVO = WarehouseAreaConvert.INSTANCE.convertSubmitVO(warehouseAreaUpdateVO); checkAreaInfo(warehouseAreaSubmitVO); WarehouseArea warehouseArea = WarehouseAreaConvert.INSTANCE.convert(warehouseAreaSubmitVO); updateById(warehouseArea); WarehouseAreaVO warehouseAreaVO = WarehouseAreaConvert.INSTANCE.convertVO(warehouseAreaSubmitVO); return warehouseAreaVO; } @Override // org.springblade.modules.cps.service.IWarehouseAreaService @Transactional(rollbackFor = {Exception.class}) public Boolean removeWithRelation(List ids) { List stationList = this.iWarehouseStationService.list(Wrappers.lambdaQuery().select(WarehouseStation::getId) .in(WarehouseStation::getAreaId, ids)); /* List stationList = this.iWarehouseStationService.list((Wrapper) Wrappers.lambdaQuery().select(new SFunction[]{(v0) -> { return v0.getId(); }}).in((v0) -> { return v0.getAreaId(); }, ids));*/ if (Func.isNotEmpty(stationList)) { throw new ServiceException(MessageUtils.message("cps.warehouse.area.cannot.delete", new Object[0])); } return Boolean.valueOf(removeByIds(ids)); } @Override // org.springblade.modules.cps.service.IWarehouseAreaService public List areaStationTree() { List stationList = ((WarehouseAreaMapper) this.baseMapper).stationList(); List areaList = list(); List areas = areaList.stream().map(c -> { WarehouseAreaStationVO vo = new WarehouseAreaStationVO(); vo.setId(c.getId()); vo.setCode(c.getCode()); vo.setName(c.getName()); vo.setParentId(c.getParentId()); vo.setIsArea(Boolean.TRUE); return vo; }).collect(Collectors.toList()); stationList.addAll(areas); return ForestNodeMerger.merge(stationList); } @Override // org.springblade.modules.cps.service.IWarehouseAreaService public List fmsAreaStationTree() { return fmsAreaStationTree(null); } @Override // org.springblade.modules.cps.service.IWarehouseAreaService public List fmsAreaStationTree(List filterAreaId) { List stationList = ((WarehouseAreaMapper) this.baseMapper).stationList(); List areaList = list(Lambda.in(Func.isNotEmpty(filterAreaId), (v0) -> { return v0.getId(); }, filterAreaId)); List fmsAreaList = areaList.stream().map(area -> { FmsArea fmsArea = new FmsArea(); fmsArea.setId(area.getId() + ""); fmsArea.setName(area.getName()); fmsArea.setCode(area.getCode()); fmsArea.setLocationList(stationList.stream().filter(station -> { return area.getId().equals(station.getParentId()); }).map(station2 -> { FmsAreaLocation fmsAreaStation = new FmsAreaLocation(); fmsAreaStation.setCode(station2.getCode()); fmsAreaStation.setId(Func.toStr(station2.getId())); fmsAreaStation.setColor("#0FC015"); String trayCode = (String) this.trayStorageService.listTray(station2.getId()).stream().findFirst().map((v0) -> { return v0.getTrayCode(); }).orElse(null); fmsAreaStation.setPalletCode(trayCode); return fmsAreaStation; }).collect(Collectors.toList())); return fmsArea; }).collect(Collectors.toList()); return fmsAreaList; } @Override // org.springblade.modules.cps.service.IWarehouseAreaService public List assembleAreaData(List filterAreaIds, Map realTimeTrayMap) { List stationList = ((WarehouseAreaMapper) this.baseMapper).stationList(); List list = list(Wrappers.lambdaQuery().in(WarehouseArea::getId, filterAreaIds)); /* List list = list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getId(); }, filterAreaIds));*/ return list.stream().map(area -> { FmsArea fmsArea = new FmsArea(); fmsArea.setId(String.valueOf(area.getId())); fmsArea.setName(area.getName()); fmsArea.setCode(area.getCode()); List locationList = new ArrayList<>(); stationList.forEach(station -> { if (area.getId().equals(station.getParentId())) { List trayCodes = this.trayStorageService.listTray(station.getId()).stream().map((v0) -> { return v0.getTrayCode(); }).collect(Collectors.toList()); for (String trayCode : trayCodes) { FmsAreaLocation fmsAreaStation = new FmsAreaLocation(); fmsAreaStation.setCode(station.getCode()); fmsAreaStation.setId(Func.toStr(station.getId())); FmsRealTimeTray fmsRealTimeTray = (FmsRealTimeTray) realTimeTrayMap.get(trayCode); if (fmsRealTimeTray != null && area.getCode().equals(fmsRealTimeTray.getCurrentPosition())) { fmsAreaStation.setPalletCode(trayCode); fmsAreaStation.setState(fmsRealTimeTray.getPartType()); } locationList.add(fmsAreaStation); } } }); fmsArea.setLocationList(locationList); return fmsArea; }).collect(Collectors.toList()); } }