package com.vincent.rsf.server.manager.service.impl;
|
|
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.vincent.rsf.framework.common.R;
|
import com.vincent.rsf.framework.exception.CoolException;
|
import com.vincent.rsf.server.manager.enums.OrderSourceType;
|
import com.vincent.rsf.server.manager.enums.OrderType;
|
import com.vincent.rsf.server.manager.enums.OrderWorkType;
|
import com.vincent.rsf.server.common.utils.ExcelUtil;
|
import com.vincent.rsf.server.manager.entity.Companys;
|
import com.vincent.rsf.server.manager.entity.Matnr;
|
import com.vincent.rsf.server.manager.entity.Purchase;
|
import com.vincent.rsf.server.manager.entity.excel.PurchaseTemplate;
|
import com.vincent.rsf.server.manager.enums.CompanysType;
|
import com.vincent.rsf.server.manager.mapper.PurchaseItemMapper;
|
import com.vincent.rsf.server.manager.entity.PurchaseItem;
|
import com.vincent.rsf.server.manager.service.CompanysService;
|
import com.vincent.rsf.server.manager.service.MatnrService;
|
import com.vincent.rsf.server.manager.service.PurchaseItemService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.vincent.rsf.server.manager.service.PurchaseService;
|
import com.vincent.rsf.server.system.constant.SerialRuleCode;
|
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service("purchaseItemService")
|
public class PurchaseItemServiceImpl extends ServiceImpl<PurchaseItemMapper, PurchaseItem> implements PurchaseItemService {
|
|
@Autowired
|
private PurchaseService purchaseService;
|
|
@Autowired
|
private MatnrService matnrService;
|
|
@Autowired
|
private CompanysService companysService;
|
|
/**
|
* @author Ryan
|
* @date 2025/5/6
|
* @description: PO单导入功能
|
* @version 1.0
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R excelImport(MultipartFile file, Long loginUserId) throws Exception {
|
ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), PurchaseTemplate.class, ExcelUtil.getDefaultImportParams());
|
if (result.getList().isEmpty()) {
|
throw new CoolException("物料导入失败!!");
|
}
|
if (result.getList().isEmpty()) {
|
throw new CoolException("表格内容不能为空!!");
|
}
|
List<PurchaseTemplate> resultList = result.getList();
|
Map<String, List<PurchaseTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(PurchaseTemplate::getPoCode));
|
for (String key : listMap.keySet()) {
|
List<PurchaseTemplate> list = listMap.get(key);
|
Purchase serviceOne = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, key));
|
if (!Objects.isNull(serviceOne)) {
|
// return R.error(serviceOne.getCode() + "单据已存在!!");
|
throw new CoolException(serviceOne.getCode() + "单据已存在!!");
|
}
|
PurchaseTemplate template = list.stream().findFirst().get();
|
Purchase purchase = new Purchase();
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
Date date = dateFormat.parse(template.getArrTime());
|
BeanUtils.copyProperties(template, purchase);
|
purchase.setCode(template.getPoCode());
|
if (StringUtils.isBlank(template.getPoCode())) {
|
String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ORDER_PO_CODE, purchase);
|
purchase.setCode(ruleCode);
|
}
|
purchase.setType(OrderType.getTypeVal(template.getType()))
|
.setWkType(OrderWorkType.getWorkType(template.getWkType()))
|
.setSource(OrderSourceType.ORDER_SOURCE_TYPE_EXCEL.desc)
|
.setPreArr(date)
|
.setCreateBy(loginUserId)
|
.setUpdateBy(loginUserId);
|
if (!purchaseService.save(purchase)) {
|
throw new CoolException("主单保存失败!!");
|
}
|
List<PurchaseItem> items = new ArrayList<>();
|
for (PurchaseTemplate purchaseTemplate : list) {
|
PurchaseItem item = new PurchaseItem();
|
if (StringUtils.isBlank(purchaseTemplate.getMatnrCode())) {
|
throw new CoolException(purchaseTemplate.getPoCode() + ":物料编码不能为空!!");
|
}
|
Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, template.getMatnrCode()));
|
if (Objects.isNull(matnr)) {
|
throw new CoolException(template.getMatnrCode() + "物料不存在!!");
|
}
|
item.setMatnrName(matnr.getName())
|
.setMatnrCode(matnr.getCode())
|
.setPlatItemId(template.getPlatItemId())
|
.setAnfme(template.getAnfme())
|
.setPurchaseId(purchase.getId())
|
.setUnit(matnr.getUnit())
|
.setNromQty(matnr.getNromNum())
|
.setSplrBatch(template.getSplrBatch())
|
.setCreateBy(loginUserId)
|
.setUpdateBy(loginUserId);
|
|
if (StringUtils.isNotBlank(purchaseTemplate.getSplrCode())) {
|
Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>()
|
.eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val)
|
.eq(Companys::getCode, template.getSplrCode()));
|
if (!Objects.isNull(companys)) {
|
item.setSplrCode(companys.getCode()).setSplrName(companys.getName());
|
} else {
|
throw new CoolException("供应商:" + template.getSplrName() + "不存在!!");
|
}
|
} else {
|
throw new CoolException("供应商不能为空!!");
|
}
|
if (!this.save(item)) {
|
throw new CoolException("单据明细保存失败!!");
|
}
|
items.add(item);
|
}
|
|
double anfmes = items.stream().mapToDouble(PurchaseItem::getAnfme).sum();
|
purchase.setAnfme(anfmes);
|
|
if (!purchaseService.updateById(purchase)) {
|
throw new CoolException("主单数量修改失败!!");
|
}
|
}
|
return R.ok("导入成功!!");
|
}
|
}
|