package com.ruoyi.cwgl.service.impl; import java.util.Date; import java.util.List; import javax.annotation.Resource; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.cwgl.domain.RequestLog; import com.ruoyi.cwgl.domain.SmartLockerApplication; import com.ruoyi.cwgl.domain.dto.TakeReviewDto; import com.ruoyi.cwgl.mapper.SmartLockerApplicationMapper; import com.ruoyi.cwgl.service.IRequestLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; import org.springframework.scheduling.annotation.Async; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.core.service.BaseService; import com.ruoyi.cwgl.mapper.KeyCollectionInfoMapper; import com.ruoyi.cwgl.domain.KeyCollectionInfo; import com.ruoyi.cwgl.service.IKeyCollectionInfoService; import com.ruoyi.common.core.text.Convert; /** * 钥匙领取信息Service业务层处理 * * @author ruoyi * @date 2025-08-27 */ @Service @Transactional(rollbackFor = Exception.class) public class KeyCollectionInfoServiceImpl extends BaseService implements IKeyCollectionInfoService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private KeyCollectionInfoMapper keyCollectionInfoMapper; @Resource private SmartLockerApplicationMapper smartLockerApplicationMapper; /** * 查询钥匙领取信息 * * @param id 钥匙领取信息ID * @return 钥匙领取信息 */ @DataSource(DataSourceType.SLAVE) @Override public KeyCollectionInfo selectKeyCollectionInfoById(Integer id) { return keyCollectionInfoMapper.selectKeyCollectionInfoById(id); } /** * 查询钥匙领取信息 记录数 * * @param keyCollectionInfo 钥匙领取信息 * @return 钥匙领取信息集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectKeyCollectionInfoCount(KeyCollectionInfo keyCollectionInfo) { return keyCollectionInfoMapper.selectKeyCollectionInfoCount(keyCollectionInfo); } /** * 查询钥匙领取信息列表 * * @param keyCollectionInfo 钥匙领取信息 * @return 钥匙领取信息 */ @DataSource(DataSourceType.SLAVE) @Override public List selectKeyCollectionInfoList(KeyCollectionInfo keyCollectionInfo) { return keyCollectionInfoMapper.selectKeyCollectionInfoList(keyCollectionInfo); } /** * 查询钥匙领取信息列表 异步 导出 * * @param keyCollectionInfo 钥匙领取信息 * @param exportKey 导出功能的唯一标识 * @return 钥匙领取信息集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(KeyCollectionInfo keyCollectionInfo,String exportKey) { super.export(KeyCollectionInfo.class,exportKey,"keyCollectionInfoData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectKeyCollectionInfoList(keyCollectionInfo); }); } /** * 新增钥匙领取信息 * * @param keyCollectionInfo 钥匙领取信息 * @return 结果 */ @Override public int insertKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo) { return keyCollectionInfoMapper.insertKeyCollectionInfo(keyCollectionInfo); } /** * 新增钥匙领取信息[批量] * * @param keyCollectionInfos 钥匙领取信息 * @return 结果 */ @Override public int insertKeyCollectionInfoBatch(List keyCollectionInfos) { int rows = keyCollectionInfoMapper.insertKeyCollectionInfoBatch(keyCollectionInfos); return rows; } /** * 修改钥匙领取信息 * * @param keyCollectionInfo 钥匙领取信息 * @return 结果 */ @Override public int updateKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo) { return keyCollectionInfoMapper.updateKeyCollectionInfo(keyCollectionInfo); } /** * 修改钥匙领取信息[批量] * * @param keyCollectionInfos 钥匙领取信息 * @return 结果 */ @Override public int updateKeyCollectionInfoBatch(List keyCollectionInfos){ return keyCollectionInfoMapper.updateKeyCollectionInfoBatch(keyCollectionInfos); } /** * 删除钥匙领取信息对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteKeyCollectionInfoByIds(String ids) { return deleteKeyCollectionInfoByIds(Convert.toIntArray(ids)); } /** * 删除钥匙领取信息对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteKeyCollectionInfoByIds(Integer[] ids) { return keyCollectionInfoMapper.deleteKeyCollectionInfoByIds(ids); } /** * 删除钥匙领取信息信息 * * @param id 钥匙领取信息ID * @return 结果 */ @Override public int deleteKeyCollectionInfoById(Integer id) { return keyCollectionInfoMapper.deleteKeyCollectionInfoById(id); } @DataSource(DataSourceType.CWSJ) @Override public KeyCollectionInfo selectCwData(TakeReviewDto takeReviewDto) { return keyCollectionInfoMapper.selectCwData(takeReviewDto); } @Override public AjaxResult takeReview(KeyCollectionInfo keyCollectionInfo) { if (keyCollectionInfo == null) { return AjaxResult.error("查无符合要求的调度单,请联系调度人员",3); } keyCollectionInfoMapper.insertKeyCollectionInfo(keyCollectionInfo); //调度超时 Integer schedulingTimeout = keyCollectionInfo.getSchedulingTimeout(); if(schedulingTimeout>5){ logger.info("调度超时下单,超时"+schedulingTimeout+"个小时"); return AjaxResult.error("调度超时下单,超时"+schedulingTimeout+"个小时",3); } Integer keyTimeout = keyCollectionInfo.getKeyTimeout(); if (keyTimeout!=null && keyTimeout>24){ Date estimatedDepartureTime = keyCollectionInfo.getRequiredDepartureTime(); String dateToStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, estimatedDepartureTime); logger.info("要求出发时间"+ dateToStr+",领取钥匙超时"+keyTimeout+"个小时"); return AjaxResult.error("要求出发时间"+ dateToStr+",领取钥匙超时"+keyTimeout+"个小时"); } AjaxResult success = new AjaxResult(0, "成功",1); success.put("boxNumber",keyCollectionInfo.getBoxNum()); logger.info("成功返回{}",success); return success; } @Override public AjaxResult selectSmartLockerApplication(TakeReviewDto takeReviewDto) { SmartLockerApplication smartLockerApplication =smartLockerApplicationMapper.selectSmartLockerApplication(takeReviewDto); if (smartLockerApplication == null){ return AjaxResult.error("查无符合要求的调度单,请联系调度人员",3); } smartLockerApplication.setStatus(2); smartLockerApplication.setReceiveTime(new Date()); smartLockerApplicationMapper.updateSmartLockerApplication(smartLockerApplication); AjaxResult success = new AjaxResult(0, "成功",1); success.put("boxNumber",smartLockerApplication.getLockerPort()); logger.info("成功返回{}",success); return success; } }