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.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>
|
* 订单管理 服务实现类
|
* </p>
|
*
|
* @author xiaochen
|
* @since 2025-08-20
|
*/
|
@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);
|
}
|
|
}
|
}
|