package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.TErpMaintenanceReminderQuery;
import com.ruoyi.system.service.TErpMaintenanceReminderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.vo.TErpMaintenanceReminderDetailVo;
import com.ruoyi.system.vo.TErpMaintenanceReminderListVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* erp保养提醒 服务实现类
*
*
* @author xiaochen
* @since 2025-08-20
*/
@Service
public class TErpMaintenanceReminderServiceImpl extends ServiceImpl implements TErpMaintenanceReminderService {
@Resource
private TErpGoodsTypeMapper erpGoodsTypeMapper;
@Resource
private SysUserMapper sysUserMapper;
@Resource
private TErpGoodsMapper erpGoodsMapper;
@Resource
private TErpGoodsUnitMapper erpGoodsUnitMapper;
@Resource
private TErpSupplierWarehousingBatchMapper erpSupplierWarehousingBatchMapper;
@Resource
private TErpSupplierWarehousingMapper erpSupplierWarehousingMapper;
@Resource
private TErpSupplierOutboundGoodsMapper erpSupplierOutboundGoodsMapper;
@Resource
private TCrmClinicMapper crmClinicMapper;
@Resource
private TCrmSupplierMapper crmSupplierMapper;
@Override
public PageInfo pageList(TErpMaintenanceReminderQuery query, SysUser user) {
Integer roleType = user.getRoleType();
String supplierClinicId = null;
if(roleType == 4){
// 供应商
TCrmSupplier crmSupplier = crmSupplierMapper.selectOne(Wrappers.lambdaQuery(TCrmSupplier.class)
.eq(TCrmSupplier::getUserId, user.getUserId())
.last("LIMIT 1"));
supplierClinicId =crmSupplier.getId();
}
if(roleType == 5){
// 诊所
TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class)
.eq(TCrmClinic::getUserId, user.getUserId())
.last("LIMIT 1"));
supplierClinicId =crmClinic.getId();
}
PageInfo page = new PageInfo<>(query.getPageNum(), query.getPageSize());
// 获取明天的时间
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
List list=new ArrayList<>();
if(roleType==4){
list = baseMapper.pageList(page, query, user,supplierClinicId,tomorrow);
}else {
list = baseMapper.pageList1(page, query, user,supplierClinicId,tomorrow);
}
if(list.isEmpty()){
return page;
}
List typeIds = list.stream().map(TErpMaintenanceReminderListVo::getTypeId).collect(Collectors.toList());
if(!typeIds.isEmpty()){
List typeList = erpGoodsTypeMapper.selectBatchIds(typeIds);
for (TErpMaintenanceReminderListVo tErpMaintenanceReminderListVo : list) {
typeList.stream().filter(t -> t.getId().equals(tErpMaintenanceReminderListVo.getTypeId())).findFirst().ifPresent(t -> tErpMaintenanceReminderListVo.setTypeName(t.getTypeName()));
}
}
List personIds = list.stream().map(TErpMaintenanceReminderListVo::getMaintenancePersonId).collect(Collectors.toList());
if(!personIds.isEmpty()){
List userList = sysUserMapper.selectBatchIds(personIds);
for (TErpMaintenanceReminderListVo tErpMaintenanceReminderListVo : list) {
userList.stream().filter(t ->tErpMaintenanceReminderListVo.getMaintenancePersonId()!=null && t.getUserId().toString().equals(tErpMaintenanceReminderListVo.getMaintenancePersonId().toString())).findFirst().ifPresent(t -> tErpMaintenanceReminderListVo.setMaintenancePersonName(t.getUserName()));
}
}
page.setRecords( list);
return page;
}
@Override
public TErpMaintenanceReminderDetailVo detail(String id, SysUser user) {
TErpMaintenanceReminderDetailVo tErpMaintenanceReminderDetailVo = new TErpMaintenanceReminderDetailVo();
TErpMaintenanceReminder tErpMaintenanceReminder = baseMapper.selectById(id);
tErpMaintenanceReminderDetailVo.setId(tErpMaintenanceReminder.getId());
tErpMaintenanceReminderDetailVo.setMaintenanceTime(tErpMaintenanceReminder.getMaintenanceTime());
tErpMaintenanceReminderDetailVo.setMaintenanceRecord(tErpMaintenanceReminder.getMaintenanceRecord());
tErpMaintenanceReminderDetailVo.setMaintenancePersonId(tErpMaintenanceReminder.getMaintenancePersonId());
if(tErpMaintenanceReminder.getMaintenancePersonId()!=null){
tErpMaintenanceReminderDetailVo.setMaintenancePersonName(sysUserMapper.selectUserById(Long.valueOf(tErpMaintenanceReminder.getMaintenancePersonId())).getUserName());
}
tErpMaintenanceReminderDetailVo.setStatus(tErpMaintenanceReminder.getStatus());
String warehousingBatchId = tErpMaintenanceReminder.getWarehousingBatchId();
if(warehousingBatchId != null){
TErpSupplierWarehousingBatch tErpSupplierWarehousingBatch = erpSupplierWarehousingBatchMapper.selectById(warehousingBatchId);
tErpMaintenanceReminderDetailVo.setBatchNumber(tErpSupplierWarehousingBatch.getBatchNumber());
TErpSupplierWarehousing tErpSupplierWarehousing = erpSupplierWarehousingMapper.selectById(tErpSupplierWarehousingBatch.getWarehousingId());
if(tErpSupplierWarehousing!=null){
String goodsId = tErpSupplierWarehousing.getGoodsId();
if(goodsId != null){
TErpGoods goods = erpGoodsMapper.selectById(goodsId);
tErpMaintenanceReminderDetailVo.setGoodsName(goods.getGoodsName());
tErpMaintenanceReminderDetailVo.setQuasiNumber(goods.getQuasiNumber());
tErpMaintenanceReminderDetailVo.setGoodsIdCode(goods.getGoodsIdCode());
String packingUnitId = goods.getPackingUnitId();
if(packingUnitId != null){
TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(packingUnitId);
tErpMaintenanceReminderDetailVo.setUnitName(tErpGoodsUnit.getUnitName());
}
}
}
List tErpSupplierOutboundGoods = erpSupplierOutboundGoodsMapper.selectList(new LambdaQueryWrapper().eq(TErpSupplierOutboundGoods::getWarehousingBatchId, warehousingBatchId));
int sum = tErpSupplierOutboundGoods.stream().mapToInt(TErpSupplierOutboundGoods::getOutboundCount).sum();
tErpMaintenanceReminderDetailVo.setNumber(tErpSupplierWarehousingBatch.getWarehousingNumber()-sum);
}
return tErpMaintenanceReminderDetailVo;
}
}