skyouc
7 天以前 53f0c1a07a1ff07095d6680e7c16f3594b859b96
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java
@@ -5,32 +5,46 @@
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.AsnOrderTemplate;
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.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service("purchaseItemService")
public class PurchaseItemServiceImpl extends ServiceImpl<PurchaseItemMapper, PurchaseItem> implements PurchaseItemService {
    private final PurchaseServiceImpl purchaseService;
    @Autowired
    private PurchaseService purchaseService;
    public PurchaseItemServiceImpl(PurchaseServiceImpl purchaseService) {
        this.purchaseService = purchaseService;
    }
    @Autowired
    private MatnrService matnrService;
    @Autowired
    private CompanysService companysService;
    /**
     * @author Ryan
@@ -39,6 +53,7 @@
     * @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()) {
@@ -53,14 +68,74 @@
            List<PurchaseTemplate> list = listMap.get(key);
            Purchase serviceOne = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, key));
            if (!Objects.isNull(serviceOne)) {
                continue;
//                return R.error(serviceOne.getCode() +  "单据已存在!!");
                throw new CoolException(serviceOne.getCode() +  "单据已存在!!");
            }
            PurchaseTemplate template = list.stream().findFirst().get();
            Purchase purchase = new Purchase();
            purchase.setCode(template.getPoCode()).set;
            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 null;
        return R.ok("导入成功!!");
    }
}