package com.doumee.service.business.impl; import cn.hutool.core.bean.BeanUtil; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.JkCabinetGridMapper; import com.doumee.dao.business.JkKeysMapper; import com.doumee.dao.business.model.JkCabinetGrid; import com.doumee.dao.business.model.JkKeys; import com.doumee.dao.business.vo.AdminCabinetVO; import com.doumee.dao.business.vo.CabinetConfigDataVO; import com.doumee.dao.business.vo.CabinetDetailVO; import com.doumee.dao.business.vo.CabinetGridInfoVO; import com.doumee.dao.system.model.SystemDictData; import com.doumee.service.business.third.model.LoginUserInfo; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.JkCabinetMapper; import com.doumee.dao.business.model.JkCabinet; import com.doumee.service.business.JkCabinetService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.java.Log; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * 钥匙柜基本信息表Service实现 * @author 江蹄蹄 * @date 2025/09/28 09:01 */ @Service public class JkCabinetServiceImpl implements JkCabinetService { @Autowired private JkCabinetMapper jkCabinetMapper; @Autowired private JkCabinetGridMapper jkCabinetGridMapper; @Autowired private JkKeysMapper jkKeysMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public Integer create(JkCabinet jkCabinet) { if(Objects.isNull(jkCabinet) || StringUtils.isBlank(jkCabinet.getCode()) || StringUtils.isBlank(jkCabinet.getName()) || StringUtils.isBlank(jkCabinet.getDevId()) || StringUtils.isBlank(jkCabinet.getLinkAddr()) || StringUtils.isBlank(jkCabinet.getCode()) || Objects.isNull(jkCabinet.getPort()) || CollectionUtils.isEmpty(jkCabinet.getManagerIdList()) || CollectionUtils.isEmpty(jkCabinet.getAuthMemberIdList()) || Objects.isNull(jkCabinet.getDoubleAuth()) || Objects.isNull(jkCabinet.getRowNum()) || jkCabinet.getRowNum() <= Constants.ZERO || Objects.isNull(jkCabinet.getColumnNum()) || jkCabinet.getColumnNum() <= Constants.ZERO || Objects.isNull(jkCabinet.getNoType()) || Objects.isNull(jkCabinet.getSortType()) || ( Constants.equalsInteger(jkCabinet.getNoType(),Constants.ONE) && ( Objects.isNull(jkCabinet.getNoIndex()) || Objects.isNull(jkCabinet.getNoLength()) || StringUtils.isBlank(jkCabinet.getNoPrefix()) ) ) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //查询编号是否重复 if(jkCabinetMapper.selectCount(new QueryWrapper().lambda().eq(JkCabinet::getCode,jkCabinet.getCode()).eq(JkCabinet::getIsdeleted,Constants.ZERO))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钥匙柜设备编号已存在!"); } if(jkCabinetMapper.selectCount(new QueryWrapper().lambda().eq(JkCabinet::getDevId,jkCabinet.getDevId()).eq(JkCabinet::getIsdeleted,Constants.ZERO))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钥匙柜设备ID已存在!"); } LoginUserInfo loginUserInfo = jkCabinet.getLoginUserInfo(); jkCabinet.setCreateDate(new Date()); jkCabinet.setEditDate(jkCabinet.getCreateDate()); jkCabinet.setCreator(loginUserInfo.getId()); jkCabinet.setEditor(loginUserInfo.getId()); jkCabinet.setIsdeleted(Constants.ZERO); jkCabinet.setStatus(Constants.ZERO); jkCabinet.setRunStatus(Constants.ONE); if(StringUtils.isNotBlank(jkCabinet.getJwd())&&jkCabinet.getJwd().split(",").length>Constants.ONE){ jkCabinet.setLongitude(new BigDecimal(jkCabinet.getJwd().split(",")[Constants.ZERO])); jkCabinet.setLatitude(new BigDecimal(jkCabinet.getJwd().split(",")[Constants.ONE])); } jkCabinet.setManagerId(String.join(",",jkCabinet.getManagerIdList())); jkCabinet.setAuthMemberId(String.join(",",jkCabinet.getAuthMemberIdList())); jkCabinetMapper.insert(jkCabinet); this.createGrid(jkCabinet); return jkCabinet.getId(); } public void createGrid(JkCabinet jkCabinet){ LoginUserInfo loginUserInfo = jkCabinet.getLoginUserInfo(); Integer startNo = Constants.equalsInteger(jkCabinet.getNoType(),Constants.ZERO)?1:jkCabinet.getNoIndex() ; List jkCabinetGridList = new ArrayList<>(); Integer maxNum = jkCabinet.getRowNum() * jkCabinet.getColumnNum(); for (int i = 0; i < maxNum; i++) { JkCabinetGrid grid = new JkCabinetGrid(); grid.setCreateDate(new Date()); grid.setEditDate(jkCabinet.getCreateDate()); grid.setCreator(loginUserInfo.getId()); grid.setEditor(loginUserInfo.getId()); grid.setIsdeleted(Constants.ZERO); grid.setStatus(Constants.ZERO); grid.setCabinetId(jkCabinet.getId()); if(Constants.equalsInteger(jkCabinet.getNoType(),Constants.ZERO)){ grid.setCode(StringUtils.leftPad(startNo.toString(),maxNum.toString().length()+1,"0")); }else{ grid.setCode(jkCabinet.getNoPrefix() + StringUtils.leftPad(startNo.toString(),jkCabinet.getNoLength(),"0")); } jkCabinetGridList.add(grid); startNo = startNo + 1; } jkCabinetGridMapper.insert(jkCabinetGridList); } @Override public void deleteById(Integer id) { JkCabinet jkCabinet = jkCabinetMapper.selectById(id); if(Constants.equalsInteger(jkCabinet.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非禁用数据,无法进行删除"); } //查询钥匙柜下的柜格信息 List jkCabinetGridList = jkCabinetGridMapper.selectList(new QueryWrapper().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO) .eq(JkCabinetGrid::getCabinetId,jkCabinet.getId()) ); if(Objects.nonNull(jkCabinetGridList)){ jkCabinetGridMapper.update(null,new UpdateWrapper().lambda().set(JkCabinetGrid::getIsdeleted,Constants.ONE) .in(JkCabinetGrid::getId,jkCabinetGridList.stream().map(i->i.getId()).collect(Collectors.toList())) ); List keyIdList = jkCabinetGridList.stream().filter(i->Objects.nonNull(i.getKeyId())).map(i->i.getKeyId()).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(keyIdList)){ jkKeysMapper.update(null,new UpdateWrapper().lambda() .set(JkKeys::getStatus,Constants.ZERO) .in(JkKeys::getId,keyIdList) ); } } jkCabinetMapper.update(null,new UpdateWrapper().lambda() .set(JkCabinet::getIsdeleted,Constants.ONE) .eq(JkCabinet::getId,jkCabinet.getId())); } @Override public void delete(JkCabinet jkCabinet) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(jkCabinet); jkCabinetMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } jkCabinetMapper.deleteBatchIds(ids); } @Override public void updateById(JkCabinet jkCabinet) { if(Objects.isNull(jkCabinet) || Objects.isNull(jkCabinet.getId()) || StringUtils.isBlank(jkCabinet.getCode()) || StringUtils.isBlank(jkCabinet.getName()) || StringUtils.isBlank(jkCabinet.getDevId()) || StringUtils.isBlank(jkCabinet.getLinkAddr()) || StringUtils.isBlank(jkCabinet.getCode()) || CollectionUtils.isEmpty(jkCabinet.getManagerIdList()) || CollectionUtils.isEmpty(jkCabinet.getAuthMemberIdList()) || Objects.isNull(jkCabinet.getPort()) || Objects.isNull(jkCabinet.getDoubleAuth()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } jkCabinet.setRowNum(null); jkCabinet.setColumnNum(null); jkCabinet.setSortType(null); jkCabinet.setNoType(null); jkCabinet.setNoIndex(null); jkCabinet.setNoLength(null); jkCabinet.setNoPrefix(null); //查询编号是否重复 if(jkCabinetMapper.selectCount(new QueryWrapper().lambda().ne(JkCabinet::getId,jkCabinet.getId()).eq(JkCabinet::getCode,jkCabinet.getCode()).eq(JkCabinet::getIsdeleted,Constants.ZERO))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钥匙柜设备编号已存在!"); } if(jkCabinetMapper.selectCount(new QueryWrapper().lambda().ne(JkCabinet::getId,jkCabinet.getId()).eq(JkCabinet::getDevId,jkCabinet.getDevId()).eq(JkCabinet::getIsdeleted,Constants.ZERO))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钥匙柜设备ID已存在!"); } LoginUserInfo loginUserInfo = jkCabinet.getLoginUserInfo(); jkCabinet.setEditDate(new Date()); jkCabinet.setEditor(loginUserInfo.getId()); if(StringUtils.isNotBlank(jkCabinet.getJwd())&&jkCabinet.getJwd().split(",").length>Constants.ONE){ jkCabinet.setLongitude(new BigDecimal(jkCabinet.getJwd().split(",")[Constants.ZERO])); jkCabinet.setLatitude(new BigDecimal(jkCabinet.getJwd().split(",")[Constants.ONE])); } jkCabinet.setManagerId(String.join(",",jkCabinet.getManagerIdList())); jkCabinet.setAuthMemberId(String.join(",",jkCabinet.getAuthMemberIdList())); jkCabinetMapper.updateById(jkCabinet); } @Override public void updateStatusById(JkCabinet jkCabinet) { if(Objects.isNull(jkCabinet) || Objects.isNull(jkCabinet.getId()) || Objects.isNull(jkCabinet.getStatus())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } jkCabinetMapper.update(null,new UpdateWrapper() .lambda().set(JkCabinet::getStatus,jkCabinet.getStatus()) .set(JkCabinet::getEditDate, DateUtil.getCurrDateTime()) .eq(JkCabinet::getId,jkCabinet.getId())); } @Override public void updateByIdInBatch(List jkCabinets) { if (CollectionUtils.isEmpty(jkCabinets)) { return; } for (JkCabinet jkCabinet: jkCabinets) { this.updateById(jkCabinet); } } @Override public JkCabinet findById(Integer id) { return jkCabinetMapper.selectById(id); } @Override public JkCabinet getDetail(Integer id){ JkCabinet jkCabinet = jkCabinetMapper.selectById(id); if(Objects.nonNull(jkCabinet.getLongitude()) && Objects.nonNull(jkCabinet.getLatitude())){ jkCabinet.setJwd(jkCabinet.getLongitude() + "," + jkCabinet.getLatitude()); } jkCabinet.setGridNum(jkCabinet.getColumnNum()*jkCabinet.getRowNum()); return jkCabinet; } @Override public JkCabinet findOne(JkCabinet jkCabinet) { QueryWrapper wrapper = new QueryWrapper<>(jkCabinet); return jkCabinetMapper.selectOne(wrapper); } @Override public List findList(JkCabinet jkCabinet) { jkCabinet.setIsdeleted(Constants.ZERO); jkCabinet.setStatus(Constants.ZERO); QueryWrapper wrapper = new QueryWrapper<>(jkCabinet); return jkCabinetMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); Utils.MP.blankToNull(pageWrap.getModel()); JkCabinet model = pageWrap.getModel(); IPage iPage = jkCabinetMapper.selectPage(page, new QueryWrapper() .lambda() .eq(JkCabinet::getIsdeleted,Constants.ZERO) .like(StringUtils.isNotBlank(model.getName()),JkCabinet::getName, model.getName()) .like(StringUtils.isNotBlank(model.getCode()),JkCabinet::getCode, model.getCode()) .eq(Objects.nonNull(model.getStatus()),JkCabinet::getStatus, model.getStatus()) .eq(Objects.nonNull(model.getRunStatus()),JkCabinet::getRunStatus, model.getRunStatus()) ); for (JkCabinet jkCabinet:iPage.getRecords()) { jkCabinet.setGridNum(jkCabinet.getColumnNum()*jkCabinet.getRowNum()); } return PageData.from(iPage); } @Override public long count(JkCabinet jkCabinet) { QueryWrapper wrapper = new QueryWrapper<>(jkCabinet); return jkCabinetMapper.selectCount(wrapper); } @Override public CabinetConfigDataVO getCabinetConfigDataVO(){ CabinetConfigDataVO cabinetConfigDataVO = new CabinetConfigDataVO(); cabinetConfigDataVO.setConcentration(systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.CONCENTRATION).getCode()); cabinetConfigDataVO.setPressure(systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.PRESSURE).getCode()); cabinetConfigDataVO.setBlowTime(systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.BLOW_TIME).getCode()); cabinetConfigDataVO.setThreshold(systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.THRESHOLD).getCode()); return cabinetConfigDataVO; } @Override public void updCabinetConfig(CabinetConfigDataVO cabinetConfigDataVO){ if(Objects.isNull(cabinetConfigDataVO) || (StringUtils.isBlank(cabinetConfigDataVO.getBlowTime()) && StringUtils.isBlank(cabinetConfigDataVO.getConcentration()) && StringUtils.isBlank(cabinetConfigDataVO.getPressure()) && StringUtils.isBlank(cabinetConfigDataVO.getThreshold()) )){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(StringUtils.isNotBlank(cabinetConfigDataVO.getConcentration())){ SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.CONCENTRATION); systemDictData.setCode(cabinetConfigDataVO.getConcentration()); systemDictDataBiz.updateByIdNew(systemDictData); } if(StringUtils.isNotBlank(cabinetConfigDataVO.getPressure())){ SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.PRESSURE); systemDictData.setCode(cabinetConfigDataVO.getPressure()); systemDictDataBiz.updateByIdNew(systemDictData); } if(StringUtils.isNotBlank(cabinetConfigDataVO.getBlowTime())){ SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.BLOW_TIME); systemDictData.setCode(cabinetConfigDataVO.getBlowTime()); systemDictDataBiz.updateByIdNew(systemDictData); } if(StringUtils.isNotBlank(cabinetConfigDataVO.getThreshold())){ SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.THRESHOLD); systemDictData.setCode(cabinetConfigDataVO.getThreshold()); systemDictDataBiz.updateByIdNew(systemDictData); } } @Override public List getAdminCabinetInfo(LoginUserInfo loginUserInfo){ List adminCabinetVOList = new ArrayList<>(); List jkCabinetList = jkCabinetMapper.selectList(new QueryWrapper() .lambda() .eq(JkCabinet::getIsdeleted,Constants.ZERO) .apply(" FIND_IN_SET("+loginUserInfo.getId()+",MANAGER_ID) ") .orderByAsc(JkCabinet::getCreateDate) ); if(CollectionUtils.isNotEmpty(jkCabinetList)){ for (JkCabinet jkCabinet:jkCabinetList) { AdminCabinetVO adminCabinetVO = new AdminCabinetVO(); BeanUtil.copyProperties(jkCabinet,adminCabinetVO); adminCabinetVOList.add(adminCabinetVO); } } return adminCabinetVOList; } @Override public CabinetDetailVO getCabinetDetail(Integer cabinetId){ CabinetDetailVO cabinetDetailVO = new CabinetDetailVO(); JkCabinet cabinet = jkCabinetMapper.selectOne(new QueryWrapper() .lambda() .eq(JkCabinet::getIsdeleted,Constants.ZERO) .eq(JkCabinet::getId,cabinetId) .last(" limit 1") ); if(Objects.isNull(cabinet)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,未查询到钥匙柜信息"); } BeanUtil.copyProperties(cabinet,cabinetDetailVO); cabinetDetailVO.setGridNum(Constants.ZERO); cabinetDetailVO.setErrGridNum(Constants.ZERO); cabinetDetailVO.setOnlineKeyNum(Constants.ZERO); cabinetDetailVO.setServiceKeyNum(Constants.ZERO); cabinetDetailVO.setOutKeyNum(Constants.ZERO); cabinetDetailVO.setUnBindGridNum(Constants.ZERO); //所有柜格信息 List jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class, new MPJLambdaWrapper() .selectAll(JkCabinetGrid.class) .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode) .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus) .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId) .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO) .eq(JkCabinetGrid::getCabinetId,cabinet.getId()) .orderByDesc(JkCabinetGrid::getCode) ); List cabinetGridInfoVOList = new ArrayList<>(); if(CollectionUtils.isNotEmpty(jkCabinetGridList)){ cabinetDetailVO.setGridNum(jkCabinetGridList.size()); for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) { CabinetGridInfoVO cabinetGridInfoVO = new CabinetGridInfoVO(); BeanUtil.copyProperties(jkCabinetGrid,cabinetGridInfoVO); cabinetGridInfoVO.setBindStatus(Objects.isNull(jkCabinetGrid.getKeyId())?Constants.ZERO:Constants.ONE); cabinetGridInfoVOList.add(cabinetGridInfoVO); } cabinetDetailVO.setErrGridNum( cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getWorkingStatus(),Constants.ONE)).collect(Collectors.toList()).size() ); cabinetDetailVO.setOnlineKeyNum( cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getKeyStatus(),Constants.ONE)).collect(Collectors.toList()).size() ); cabinetDetailVO.setOutKeyNum( cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getKeyStatus(),Constants.TWO)).collect(Collectors.toList()).size() ); cabinetDetailVO.setServiceKeyNum( cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getKeyStatus(),Constants.THREE)).collect(Collectors.toList()).size() ); cabinetDetailVO.setUnBindGridNum( cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getBindStatus(),Constants.ZERO)).collect(Collectors.toList()).size() ); } return cabinetDetailVO; } }