| | |
| | | import com.ruoyi.common.constant.OrderNumConstants; |
| | | import com.ruoyi.common.utils.CodeGenerateUtils; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.system.domain.TOrderSaleGoods; |
| | | import com.ruoyi.system.domain.TOrderStock; |
| | | import com.ruoyi.system.domain.TOrderStockGoods; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.domain.*; |
| | | import com.ruoyi.system.dto.TOrderSaleDTO; |
| | | import com.ruoyi.system.dto.TOrderStockDTO; |
| | | import com.ruoyi.system.mapper.TOrderStockMapper; |
| | | import com.ruoyi.system.mapper.*; |
| | | import com.ruoyi.system.query.TDataGeneratorQuery; |
| | | import com.ruoyi.system.query.TDataGeneratorStockQuery; |
| | | import com.ruoyi.system.query.TOrderStockQuery; |
| | | import com.ruoyi.system.service.TOrderStockGoodsService; |
| | | import com.ruoyi.system.service.TOrderStockService; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.vo.TDataGeneratorVO; |
| | | import com.ruoyi.system.vo.TOrderStockVO; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | @Autowired |
| | | private TOrderStockGoodsService tOrderStockGoodsService; |
| | | @Autowired |
| | | private TOrderSaleMapper orderSaleMapper; |
| | | @Autowired |
| | | private TOrderSaleGoodsService orderSaleGoodsService; |
| | | @Autowired |
| | | private TStockDataSetService stockDataSetService; |
| | | @Autowired |
| | | private TDataGeneratorMapper dataGeneratorMapper; |
| | | @Autowired |
| | | private TGoodsService goodsService; |
| | | @Override |
| | | public void add(TOrderStockDTO dto) { |
| | | // 进货单号 |
| | |
| | | List<TOrderStockGoods> orderStockGoods = dto.getOrderStockGoods(); |
| | | // BigDecimal sum = orderStockGoods.stream().map(TOrderStockGoods::getStockPrice).reduce(BigDecimal::add).get(); |
| | | // dto.setStockTotalPrice(sum); |
| | | if(dto.getIsGenerator().equals(2)){ |
| | | dto.setIsCover(0); |
| | | } |
| | | this.save(dto); |
| | | // 添加商品 |
| | | List<TGoods> goods = goodsService.list(Wrappers.lambdaQuery(TGoods.class).eq(TGoods::getShopId,dto.getShopId())); |
| | | List<TGoods> goodsUpdateList = new ArrayList<>(); |
| | | // 添加商品 |
| | | orderStockGoods.forEach(orderSaleGoods1 -> { |
| | | orderSaleGoods1.setId(null); |
| | | orderSaleGoods1.setOrderId(dto.getId()); |
| | | for (TGoods good : goods) { |
| | | if(good.getGoodsNum().equals(orderSaleGoods1.getGoodsNum())){ |
| | | good.setInventory(orderSaleGoods1.getStockCount()+good.getInventory()); |
| | | goodsUpdateList.add(good); |
| | | } |
| | | } |
| | | }); |
| | | goodsService.updateBatchById(goodsUpdateList); |
| | | tOrderStockGoodsService.saveBatch(orderStockGoods); |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public PageInfo<TOrderStockVO> pageList(TOrderStockQuery query) { |
| | | |
| | | // 判断时间 |
| | | if(Objects.nonNull(query.getTimeType())){ |
| | | LocalDateTime startTime = null; |
| | | LocalDateTime endTime = null; |
| | | switch (query.getTimeType()){ |
| | | case 1: |
| | | // 今日 |
| | | startTime = LocalDateTime.MIN; |
| | | endTime = LocalDateTime.MAX; |
| | | break; |
| | | case 2: |
| | | // 昨日 |
| | | startTime = LocalDateTime.now().minusDays(1); |
| | | endTime = LocalDateTime.now().minusDays(1); |
| | | break; |
| | | case 3: |
| | | // 近7天 |
| | | startTime = LocalDateTime.now().minusDays(7); |
| | | endTime = LocalDateTime.now(); |
| | | break; |
| | | case 4: |
| | | // 近30天 |
| | | startTime = LocalDateTime.now().minusDays(30); |
| | | endTime = LocalDateTime.now(); |
| | | break; |
| | | if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){ |
| | | // 判断时间 |
| | | if(Objects.nonNull(query.getTimeType())){ |
| | | LocalDateTime startTime = null; |
| | | LocalDateTime endTime = null; |
| | | switch (query.getTimeType()){ |
| | | case 1: |
| | | // 今日 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now()); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | case 2: |
| | | // 昨日 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); |
| | | break; |
| | | case 3: |
| | | // 近7天 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | case 4: |
| | | // 近30天 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | } |
| | | query.setStartTime(DateUtils.localDateTimeToDate(startTime)); |
| | | query.setEndTime(DateUtils.localDateTimeToDate(endTime)); |
| | | } |
| | | query.setStartTime(DateUtils.localDateTimeToDate(startTime)); |
| | | query.setEndTime(DateUtils.localDateTimeToDate(endTime)); |
| | | } |
| | | PageInfo<TOrderStockVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize()); |
| | | List<TOrderStockVO> list = this.baseMapper.pageList(query,pageInfo); |
| | |
| | | if(!CollectionUtils.isEmpty(orderIds)){ |
| | | List<TOrderStockGoods> orderStockGoods = tOrderStockGoodsService.list(Wrappers.lambdaQuery(TOrderStockGoods.class) |
| | | .in(TOrderStockGoods::getOrderId, orderIds)); |
| | | list.forEach(orderSale -> { |
| | | List<TOrderStockGoods> collect = orderStockGoods.stream().filter(orderSaleGoods -> orderSaleGoods.getOrderId().equals(orderSale.getId())).collect(Collectors.toList()); |
| | | list.forEach(orderStockVO -> { |
| | | List<TOrderStockGoods> collect = orderStockGoods.stream().filter(orderSaleGoods -> orderSaleGoods.getOrderId().equals(orderStockVO.getId())).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(collect)){ |
| | | orderSale.setOrderStockGoods(collect); |
| | | orderSale.setTotalPrice(collect.stream().map(TOrderStockGoods::getCostPrice).reduce(BigDecimal::add).get()); |
| | | orderStockVO.setOrderStockGoods(collect); |
| | | int sum = collect.stream().mapToInt(TOrderStockGoods::getStockCount).sum(); |
| | | orderStockVO.setOrderStockCount(sum); |
| | | BigDecimal money = BigDecimal.ZERO; |
| | | for (TOrderStockGoods tOrderStockGoods : collect) { |
| | | money = money.add(tOrderStockGoods.getThisCostPrice().multiply(new BigDecimal(tOrderStockGoods.getStockCount()))); |
| | | } |
| | | orderStockVO.setTotalPrice(money); |
| | | } |
| | | }); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public Map<String, Object> getDataGeneratorStockDetail(TDataGeneratorStockQuery query) { |
| | | if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){ |
| | | // 判断时间 |
| | | if(Objects.nonNull(query.getTimeType())){ |
| | | LocalDateTime startTime = null; |
| | | LocalDateTime endTime = null; |
| | | switch (query.getTimeType()){ |
| | | case 1: |
| | | // 今日 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now()); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | case 2: |
| | | // 昨日 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); |
| | | break; |
| | | case 3: |
| | | // 近7天 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | case 4: |
| | | // 近30天 |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | } |
| | | query.setStartTime(DateUtils.localDateTimeToDate(startTime)); |
| | | query.setEndTime(DateUtils.localDateTimeToDate(endTime)); |
| | | } |
| | | } |
| | | return this.baseMapper.getDataGeneratorStockDetail(query); |
| | | } |
| | | |
| | |
| | | switch (query.getTimeType()){ |
| | | case 1: |
| | | // 今日 |
| | | startTime = LocalDateTime.MIN; |
| | | endTime = LocalDateTime.MAX; |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now()); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | case 2: |
| | | // 昨日 |
| | | startTime = LocalDateTime.now().minusDays(1); |
| | | endTime = LocalDateTime.now().minusDays(1); |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1)); |
| | | break; |
| | | case 3: |
| | | // 近7天 |
| | | startTime = LocalDateTime.now().minusDays(7); |
| | | endTime = LocalDateTime.now(); |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | case 4: |
| | | // 近30天 |
| | | startTime = LocalDateTime.now().minusDays(30); |
| | | endTime = LocalDateTime.now(); |
| | | startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30)); |
| | | endTime = DateUtils.getDayEnd(LocalDateTime.now()); |
| | | break; |
| | | } |
| | | query.setStartTime(DateUtils.localDateTimeToDate(startTime)); |
| | |
| | | }); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public void editGenerator(TOrderStockDTO dto) { |
| | | TDataGenerator dataGenerator = dataGeneratorMapper.selectById(dto.getGeneratorId()); |
| | | // 查询生成数据的配置 |
| | | List<TStockDataSet> list = stockDataSetService.list(Wrappers.lambdaQuery(TStockDataSet.class) |
| | | .eq(TStockDataSet::getGeneratorId, dto.getGeneratorId())); |
| | | list = list.stream().sorted(Comparator.comparing(TStockDataSet::getStockDate)).collect(Collectors.toList()); |
| | | String startTime = null; |
| | | String endTime = null; |
| | | Iterator<TStockDataSet> iterator = list.iterator(); |
| | | while (iterator.hasNext()){ |
| | | TStockDataSet next = iterator.next(); |
| | | if(next.getStockDate().compareTo(dto.getStockTime()) == 0){ |
| | | startTime = DateUtils.localDateToString(next.getStockDate()); |
| | | } |
| | | if(Objects.nonNull(startTime)){ |
| | | endTime = DateUtils.localDateToString(next.getStockDate()); |
| | | } |
| | | if(Objects.nonNull(endTime)){ |
| | | break; |
| | | } |
| | | } |
| | | if(Objects.isNull(endTime)){ |
| | | endTime = DateUtils.localDateToString(dataGenerator.getEndTime()); |
| | | } |
| | | // 查询该数据生成的销售单的数据 |
| | | List<TOrderSale> orderSales = orderSaleMapper.selectList(Wrappers.lambdaQuery(TOrderSale.class) |
| | | .eq(TOrderSale::getGeneratorId, dto.getGeneratorId()) |
| | | .between(TOrderSale::getOrderTime, startTime + " 00:00:00", endTime + " 23:59:59")); |
| | | List<Long> saleOrderIds = orderSales.stream().map(TOrderSale::getId).collect(Collectors.toList()); |
| | | List<TOrderStockGoods> orderStockGoods = dto.getOrderStockGoods(); |
| | | if(!CollectionUtils.isEmpty(saleOrderIds)){ |
| | | List<TOrderSaleGoods> orderSaleGoods = orderSaleGoodsService.list(Wrappers.lambdaQuery(TOrderSaleGoods.class) |
| | | .in(TOrderSaleGoods::getOrderId, saleOrderIds)); |
| | | for (TOrderStockGoods orderStockGood : orderStockGoods) { |
| | | orderSaleGoods.stream().filter(e->e.getGoodsName().equals(orderStockGood.getGoodsName())).forEach(e->e.setGoodsCostPrice(orderStockGood.getThisCostPrice())); |
| | | } |
| | | orderSaleGoodsService.updateBatchById(orderSaleGoods); |
| | | } |
| | | this.updateById(dto); |
| | | // 刪除原有商品 |
| | | tOrderStockGoodsService.remove(Wrappers.lambdaQuery(TOrderStockGoods.class) |
| | | .eq(TOrderStockGoods::getOrderId,dto.getId())); |
| | | // 添加商品 |
| | | orderStockGoods.forEach(orderSaleGoods1 -> { |
| | | orderSaleGoods1.setId(null); |
| | | orderSaleGoods1.setOrderId(dto.getId()); |
| | | }); |
| | | tOrderStockGoodsService.saveBatch(orderStockGoods); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteByShopId(Long shopId) { |
| | | this.baseMapper.deleteByShopId(shopId); |
| | | } |
| | | } |