xuhy
3 天以前 d72d88f9e19ead4bbc2f69c4f5fbe66b1edbdc31
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysOrderServiceImpl.java
@@ -1,20 +1,27 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.mapper.TSysOrderGoodsMapper;
import com.ruoyi.system.mapper.TSysOrderMapper;
import com.ruoyi.system.model.TSysOrder;
import com.ruoyi.system.model.TSysOrderGoods;
import com.ruoyi.system.dto.TSysOrderDto;
import com.ruoyi.system.dto.TSysOrderNextDto;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.TSysOrderQuery;
import com.ruoyi.system.service.TCrmClinicService;
import com.ruoyi.system.service.TErpClinicOutboundService;
import com.ruoyi.system.service.TSysOrderService;
import com.ruoyi.system.vo.TSysOrderPageVo;
import com.ruoyi.system.vo.TSysOrderVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -31,6 +38,24 @@
    @Autowired
    private TSysOrderGoodsMapper sysOrderGoodsMapper;
    @Resource
    private TErpClinicWarehousingBatchMapper erpClinicWarehousingBatchMapper;
    @Resource
    private TErpClinicOutboundGoodsMapper erpClinicOutboundGoodsMapper;
    @Resource
    private TErpGoodsMapper erpGoodsMapper;
    @Resource
    private TErpGoodsTypeMapper erpGoodsTypeMapper;
    @Resource
    private TErpGoodsUnitMapper erpGoodsUnitMapper;
    @Resource
    private TErpClinicOutboundMapper erpClinicOutboundMapper;
    @Override
    public List<TSysOrderVO> queryListByAppUserId(String id) {
@@ -61,4 +86,74 @@
        page.setRecords(sysOrderPageVOS);
        return page;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void add(TSysOrderDto dto, TCrmClinic crmClinic) {
        // 判断库存够不够  添加订单 添加订单二级  出库记录
        List<TSysOrderNextDto> dtoList = dto.getDtoList();
        ArrayList<TSysOrderGoods> tSysOrderGoods = new ArrayList<>();
        ArrayList<TErpClinicOutboundGoods> erpClinicOutboundGoods = new ArrayList<>();
        for (TSysOrderNextDto sysOrderNextDto : dtoList) {
            TErpClinicWarehousingBatch tErpClinicWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(sysOrderNextDto.getBatchId());
            // 找出这个批次出库多少
            List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getWarehousingBatchId, sysOrderNextDto.getBatchId()));
            int count = tErpClinicOutboundGoods.stream().mapToInt(TErpClinicOutboundGoods::getOutboundCount).sum();
            if(tErpClinicWarehousingBatch.getPurchaseCount() < count + sysOrderNextDto.getNum()){
                throw new RuntimeException("库存不足");
            }
            TErpGoods goods = erpGoodsMapper.selectById(tErpClinicWarehousingBatch.getGoodsId());
            TSysOrderGoods tSysOrderGoods1 = new TSysOrderGoods();
            tSysOrderGoods1.setGoodsName(goods.getGoodsName());
            TErpGoodsType tErpGoodsType = erpGoodsTypeMapper.selectById(goods.getTypeId());
            tSysOrderGoods1.setTypeName(tErpGoodsType.getTypeName());
            tSysOrderGoods1.setQuasiNumber(goods.getQuasiNumber());
            TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId());
            tSysOrderGoods1.setGoodsUnit(tErpGoodsUnit.getUnitName());
            tSysOrderGoods1.setSaleCount(sysOrderNextDto.getNum());
            tSysOrderGoods1.setSaleAmount(goods.getSalesAmount());
            tSysOrderGoods1.setBatchId(tErpClinicWarehousingBatch.getId());
            tSysOrderGoods1.setBatchNumber(tErpClinicWarehousingBatch.getBatchNumber());
            tSysOrderGoods1.setRemainingQuantity(sysOrderNextDto.getRemainingQuantity());
            tSysOrderGoods.add(tSysOrderGoods1);
            TErpClinicOutboundGoods tErpClinicOutboundGoods1 = new TErpClinicOutboundGoods();
            tErpClinicOutboundGoods1.setWarehousingId(tErpClinicWarehousingBatch.getWarehousingId());
            tErpClinicOutboundGoods1.setWarehousingBatchId(tErpClinicWarehousingBatch.getId());
            tErpClinicOutboundGoods1.setOutboundCount(sysOrderNextDto.getNum());
            tErpClinicOutboundGoods1.setGoodsId(goods.getId());
            tErpClinicOutboundGoods1.setTotalPrice(sysOrderNextDto.getSaleAmount().multiply(BigDecimal.valueOf(sysOrderNextDto.getNum())));
            erpClinicOutboundGoods.add(tErpClinicOutboundGoods1);
        }
        TSysOrder tSysOrder = new TSysOrder();
        tSysOrder.setAppUserId(dto.getAppUserId());
        tSysOrder.setClinicId(crmClinic.getId());
        tSysOrder.setInspectionId(dto.getInspectionId());
        tSysOrder.setTotalMoney(dto.getTotalMoney());
        tSysOrder.setCheckTime(dto.getCheckTime());
        tSysOrder.setOrderNumber(System.currentTimeMillis() + "");
        this.save(tSysOrder);
        for (TSysOrderGoods tSysOrderGood : tSysOrderGoods) {
            tSysOrderGood.setOrderId(tSysOrder.getId());
            sysOrderGoodsMapper.insert(tSysOrderGood);
        }
        TErpClinicOutbound tErpClinicOutbound = new TErpClinicOutbound();
        tErpClinicOutbound.setClinicId(crmClinic.getId());
        tErpClinicOutbound.setOutboundType(7);
        tErpClinicOutbound.setOrderNumber(tSysOrder.getOrderNumber());
        tErpClinicOutbound.setTotalMoney(dto.getTotalMoney());
        tErpClinicOutbound.setOutboundNumber("G"+System.currentTimeMillis());
        erpClinicOutboundMapper.insert(tErpClinicOutbound);
        for (TErpClinicOutboundGoods erpClinicOutboundGood : erpClinicOutboundGoods) {
            erpClinicOutboundGood.setOutboundId(tErpClinicOutbound.getId());
            erpClinicOutboundGoodsMapper.insert(erpClinicOutboundGood);
        }
    }
}