package com.ruoyi.aftersalesservice.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.aftersalesservice.dto.AfterSalesNearExpiryImportDto;
|
import com.ruoyi.aftersalesservice.mapper.AfterSalesNearExpiryMapper;
|
import com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry;
|
import com.ruoyi.aftersalesservice.service.AfterSalesNearExpiryService;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.framework.web.domain.AjaxResult;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* <br>
|
* 临期售后管理接口实现类
|
* </br>
|
*
|
* @author deslrey
|
* @version 1.0
|
* @since 2026/03/02 14:46
|
*/
|
@Slf4j
|
@Service
|
public class AfterSalesNearExpiryServiceImpl extends ServiceImpl<AfterSalesNearExpiryMapper, AfterSalesNearExpiry> implements AfterSalesNearExpiryService {
|
|
@Override
|
public void add(AfterSalesNearExpiry entity) {
|
if (entity == null) {
|
throw new ServiceException("添加失败,数据不能为空");
|
}
|
if (entity.getProductName() == null || entity.getProductName().trim().isEmpty()) {
|
throw new ServiceException("产品名称不能为空");
|
}
|
if (entity.getBatchNumber() == null || entity.getBatchNumber().trim().isEmpty()) {
|
throw new ServiceException("产品批号不能为空");
|
}
|
if (entity.getExpireDate() == null) {
|
throw new ServiceException("临期日期不能为空");
|
}
|
|
entity.setId(null);
|
entity.setStatus(1);
|
entity.setDisposeUserId(null);
|
entity.setDisposeNickName(null);
|
entity.setDisDate(null);
|
entity.setCreateTime(LocalDateTime.now());
|
entity.setCreateUser(SecurityUtils.getLoginUser().getUserId());
|
entity.setUpdateUser(null);
|
entity.setUpdateTime(null);
|
entity.setTenantId(SecurityUtils.getLoginUser().getTenantId());
|
|
int result = baseMapper.insert(entity);
|
if (result <= 0) {
|
throw new ServiceException("新增失败");
|
}
|
}
|
|
@Override
|
public void update(AfterSalesNearExpiry entity) {
|
if (entity == null || entity.getId() == null) {
|
throw new ServiceException("更新失败,数据不完整");
|
}
|
entity.setStatus(2);
|
entity.setUpdateUser(SecurityUtils.getLoginUser().getUserId());
|
entity.setUpdateTime(LocalDateTime.now());
|
int result = baseMapper.updateById(entity);
|
if (result <= 0) {
|
throw new ServiceException("更新失败");
|
}
|
}
|
|
@Override
|
public void delete(Long[] ids) {
|
if (ids == null || ids.length == 0) {
|
throw new ServiceException("请选择要删除的数据");
|
}
|
int result = baseMapper.deleteBatchIds(Arrays.asList(ids));
|
if (result <= 0) {
|
throw new ServiceException("删除失败");
|
}
|
}
|
|
@Override
|
public IPage<AfterSalesNearExpiry> listPage(Page<AfterSalesNearExpiry> page, AfterSalesNearExpiry entity) {
|
return baseMapper.listPage(page, entity);
|
}
|
|
@Override
|
public AjaxResult importData(MultipartFile file) {
|
List<AfterSalesNearExpiryImportDto> rows;
|
try {
|
ExcelUtil<AfterSalesNearExpiryImportDto> util = new ExcelUtil<>(AfterSalesNearExpiryImportDto.class);
|
rows = util.importExcel(file.getInputStream());
|
} catch (Exception e) {
|
log.error("临期售后管理导入-解析excel失败", e);
|
return AjaxResult.error("解析Excel失败:" + e.getMessage());
|
}
|
if (CollectionUtils.isEmpty(rows)) {
|
return AjaxResult.error("导入文件无数据");
|
}
|
int success = 0;
|
List<String> errors = new ArrayList<>();
|
for (int i = 0; i < rows.size(); i++) {
|
AfterSalesNearExpiryImportDto row = rows.get(i);
|
int rowNo = i + 2; // 首行为表头
|
try {
|
if (StringUtils.isEmpty(trim(row.getProductName()))) {
|
errors.add("第" + rowNo + "行:临期产品名称为空");
|
continue;
|
}
|
if (StringUtils.isEmpty(trim(row.getBatchNumber()))) {
|
errors.add("第" + rowNo + "行:产品批号为空");
|
continue;
|
}
|
if (row.getExpireDate() == null) {
|
errors.add("第" + rowNo + "行:临期日期为空");
|
continue;
|
}
|
if (row.getStockQuantity() == null) {
|
errors.add("第" + rowNo + "行:库存数量为空");
|
continue;
|
}
|
if (StringUtils.isEmpty(trim(row.getCustomerName()))) {
|
errors.add("第" + rowNo + "行:客户名称为空");
|
continue;
|
}
|
|
AfterSalesNearExpiry entity = new AfterSalesNearExpiry();
|
entity.setProductName(trim(row.getProductName()));
|
entity.setBatchNumber(trim(row.getBatchNumber()));
|
entity.setExpireDate(row.getExpireDate());
|
entity.setStockQuantity(row.getStockQuantity());
|
entity.setCustomerName(trim(row.getCustomerName()));
|
entity.setContactPhone(trim(row.getContactPhone()));
|
entity.setDisRes(row.getDisRes());
|
|
add(entity);
|
success++;
|
} catch (Exception e) {
|
log.error("临期售后管理导入第{}行失败", rowNo, e);
|
errors.add("第" + rowNo + "行:" + e.getMessage());
|
}
|
}
|
|
AjaxResult result = AjaxResult.success();
|
result.put("totalCount", rows.size());
|
result.put("successCount", success);
|
result.put("failCount", rows.size() - success);
|
result.put("errors", errors);
|
result.put("msg", "导入完成:成功 " + success + " 条,失败 " + (rows.size() - success) + " 条");
|
return result;
|
}
|
|
private String trim(String value) {
|
return value == null ? null : value.trim();
|
}
|
}
|