|  |  |  | 
|---|
|  |  |  | 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.system.mapper.TSysOrderMapper; | 
|---|
|  |  |  | import com.ruoyi.system.model.TSysOrder; | 
|---|
|  |  |  | import com.ruoyi.common.basic.PageInfo; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * <p> | 
|---|
|  |  |  | 
|---|
|  |  |  | @Service | 
|---|
|  |  |  | public class TSysOrderServiceImpl extends ServiceImpl<TSysOrderMapper, TSysOrder> implements TSysOrderService { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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) { | 
|---|
|  |  |  | List<TSysOrderVO> sysOrderVOS = this.baseMapper.queryListByAppUserId(id); | 
|---|
|  |  |  | if(CollectionUtils.isEmpty(sysOrderVOS)){ | 
|---|
|  |  |  | return sysOrderVOS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<String> orderIds = sysOrderVOS.stream().map(TSysOrderVO::getId).collect(Collectors.toList()); | 
|---|
|  |  |  | List<TSysOrderGoods> sysOrderGoodsList = sysOrderGoodsMapper.selectList(Wrappers.lambdaQuery(TSysOrderGoods.class) | 
|---|
|  |  |  | .in(TSysOrderGoods::getOrderId, orderIds)); | 
|---|
|  |  |  | for (TSysOrderVO sysOrderVO : sysOrderVOS) { | 
|---|
|  |  |  | sysOrderVO.setSysOrderGoods(sysOrderGoodsList.stream().filter(sysOrderGoods -> sysOrderGoods.getOrderId().equals(sysOrderVO.getId())).collect(Collectors.toList())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return this.baseMapper.queryListByAppUserId(id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public PageInfo<TSysOrderPageVo> pageList(TSysOrderQuery query) { | 
|---|
|  |  |  | PageInfo<TSysOrderPageVo> page = new PageInfo<>(query.getPageNum(), query.getPageSize()); | 
|---|
|  |  |  | String sTime =null; | 
|---|
|  |  |  | String eTime = null; | 
|---|
|  |  |  | if(query.getTime() != null && !query.getTime().isEmpty()){ | 
|---|
|  |  |  | String[] split = query.getTime().split(" - "); | 
|---|
|  |  |  | sTime = split[0] + " 00:00:00"; | 
|---|
|  |  |  | eTime = split[1] + " 23:59:59"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<TSysOrderPageVo> sysOrderPageVOS = this.baseMapper.pageList(page, query,sTime,eTime); | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|