package com.rabbiter.market.service.goods_management.goods.impl; // 导入必要的类和包 import com.rabbiter.market.common.exception.BusinessException; // 业务异常类 import com.rabbiter.market.common.redis.constants.RedisKeys; // Redis键常量 import com.rabbiter.market.common.redis.service.RedisTemplateService; // Redis服务 import com.rabbiter.market.domain.goods_management.goods.Goods; // 商品实体 import com.rabbiter.market.domain.goods_management.goods_category.GoodsCategory; // 商品分类实体 import com.rabbiter.market.domain.inventory_management.detail_store_goods.DetailStoreGoods; // 库存明细实体 import com.rabbiter.market.domain.inventory_management.notice.NoticeIn; // 入库通知单 import com.rabbiter.market.domain.inventory_management.notice.NoticeOut; // 出库通知单 import com.rabbiter.market.domain.inventory_management.store.GoodsStore; // 商品库存 import com.rabbiter.market.domain.inventory_management.store.Store; // 仓库 import com.rabbiter.market.domain.personnel_management.employee.Employee; // 员工 import com.rabbiter.market.mapper.goods_management.goods.GoodsMapper; // 商品Mapper import com.rabbiter.market.qo.goods_management.goods.QueryGoods; // 商品查询对象 import com.rabbiter.market.qo.goods_management.goods_store.QueryGoodsStore; // 商品库存查询 import com.rabbiter.market.qo.goods_management.statistic_sale.QueryStatisticSale; // 销售统计查询 import com.rabbiter.market.qo.inventory_management.notice.QueryNoticeIn; // 入库通知查询 import com.rabbiter.market.qo.inventory_management.notice.QueryNoticeOut; // 出库通知查询 import com.rabbiter.market.service.goods_management.goods.IGoodsService; // 商品服务接口 import com.rabbiter.market.service.goods_management.goods_category.IGoodsCategoryService; // 分类服务 import com.rabbiter.market.service.inventory_management.detail_store_goods.IDetailStoreGoodsService; // 库存明细服务 import com.rabbiter.market.service.inventory_management.store.IGoodsStoreService; // 商品库存服务 import com.rabbiter.market.service.inventory_management.store.IStoreService; // 仓库服务 import com.rabbiter.market.vo.detail_store_goods.notice.NoticeInNotNormalVo; // 异常入库VO import com.rabbiter.market.vo.goods.GoodsListVo; // 商品列表VO import com.rabbiter.market.vo.goods_management.goods_store.GoodsStoreVo; // 商品库存VO import com.rabbiter.market.vo.statistics.sale_management.SaleGoodsVo; // 销售商品VO import com.rabbiter.market.vo.statistics.sale_management.SalesStatisticsVo; // 销售统计VO import com.alibaba.fastjson.JSONObject; // JSON处理 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; // 查询条件构造器 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; // 更新条件构造器 import com.baomidou.mybatisplus.core.toolkit.IdWorker; // ID生成器 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 分页 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; // MyBatis-Plus服务实现 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.util.StringUtils; // 字符串工具 import java.util.*; // 集合工具 @Service // 标识这是一个Spring服务组件 public class GoodsServiceImpl extends ServiceImpl implements IGoodsService { @Autowired // 自动注入Redis服务 private RedisTemplateService redisTemplateService; @Autowired // 自动注入商品分类服务 private IGoodsCategoryService goodsCategoryService; @Autowired // 自动注入仓库服务 private IStoreService storeService; @Autowired // 自动注入库存明细服务 private IDetailStoreGoodsService detailStoreGoodsService; @Autowired // 自动注入商品库存服务 private IGoodsStoreService goodsStoreService; @Autowired // 自动注入商品Mapper private GoodsMapper goodsMapper; @Override // 实现分页查询商品方法 public Page queryPageByQo(QueryGoods qo) { // 创建分页对象,设置当前页和每页大小 Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建商品VO列表 ArrayList volists = new ArrayList<>(); // 创建商品分页对象 Page goodsPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 构建查询条件 QueryWrapper wrapper = new QueryWrapper() .eq(qo.getId() != null, "id", qo.getId()) // ID相等条件 .eq(qo.getSellPrice() != null, "sell_price", qo.getSellPrice()) // 价格相等条件 .like(StringUtils.hasText(qo.getName()), "name", qo.getName()) // 名称模糊查询 .eq(qo.getCategoryId() != null, "category_id", qo.getCategoryId()) // 分类ID相等 .eq(StringUtils.hasText(qo.getState()), "state", qo.getState()) // 状态相等 .ge(StringUtils.hasText(qo.getOperateStartTime()), "update_time", qo.getOperateStartTime()) // 更新时间大于等于 .le(StringUtils.hasText(qo.getOperateEndTime()), "update_time", qo.getOperateEndTime()); // 更新时间小于等于 // 执行分页查询 super.page(goodsPage, wrapper); // 遍历查询结果 for (Goods record : goodsPage.getRecords()) { GoodsListVo vo = new GoodsListVo(); // 创建商品VO对象 BeanUtils.copyProperties(record, vo); // 复制属性 // 查询商品剩余库存数量 Long residueNum=storeService.getResidueNumByGoodsId(record.getId()); vo.setResidueStoreNum(residueNum); // 设置剩余库存 volists.add(vo); // 添加到列表 } // 设置分页结果 page.setRecords(volists); page.setTotal(goodsPage.getTotal()); // 设置总记录数 return page; } @Override // 保存商品方法 public void saveGoods(Goods goods, String token) { // 从Redis中获取员工信息 Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); goods.setState(Goods.STATE_UP); // 设置商品状态为上架 goods.setCreateby(employee.getNickName()); // 设置创建人 goods.setUpdateby(employee.getNickName()); // 设置更新人 goods.setCreateTime(new Date()); // 设置创建时间 goods.setUpdateTime(new Date()); // 设置更新时间 if (goods.getCategoryId() != null) { // 如果有分类ID /*从缓存中获取分类的信息*/ if (redisTemplateService.hasKey(RedisKeys.GOODS_CATEGORY.join())) { // 检查Redis中是否有分类缓存 Map categoryCache = redisTemplateService.getCacheMap(RedisKeys.GOODS_CATEGORY.join()); GoodsCategory category = (GoodsCategory) categoryCache.get(goods.getCategoryId().toString()); if (category != null) { goods.setCategoryName(category.getName()); // 设置分类名称 } } else { // 如果Redis中没有缓存 GoodsCategory category = goodsCategoryService.getById(goods.getCategoryId()); // 从数据库查询 if (category != null) { goods.setCategoryName(category.getName()); // 设置分类名称 } } } super.save(goods); // 保存商品 } @Transactional // 事务注解 @Override // 商品上架/下架方法 public void upOrdown(Long gid, String state,String token) { UpdateWrapper wrapper = new UpdateWrapper<>(); // 创建更新条件 wrapper.eq("id", gid); // 设置更新条件为ID相等 if (Goods.STATE_UP.equals(state)) { // 如果是上架操作 Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); wrapper.set("state", Goods.STATE_DOWN); // 设置状态为下架 Goods goods = super.getById(gid); // 获取商品信息 // 查询商品在各仓库的库存 QueryWrapper goodsStoreQueryWrapper = new QueryWrapper().eq("goods_id", gid); List list = goodsStoreService.list(goodsStoreQueryWrapper); // 为每个仓库创建下架记录 for (GoodsStore goodsStore : list) { DetailStoreGoods detailStoreGoods = new DetailStoreGoods(); detailStoreGoods.setCreateid(employee.getId()); // 设置创建人ID detailStoreGoods.setCreateby(employee.getNickName()); // 设置创建人名称 detailStoreGoods.setCreateTime(new Date()); // 设置创建时间 detailStoreGoods.setGoodsId(gid); // 设置商品ID detailStoreGoods.setGoodsName(goods.getName()); // 设置商品名称 detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); // 设置类型为入库 detailStoreGoods.setState1(DetailStoreGoods.STATE1_UNTREATED); // 设置状态为未处理 detailStoreGoods.setState(DetailStoreGoods.STATE_DOWN); // 设置状态为下架 detailStoreGoods.setCn(IdWorker.getIdStr()); // 生成唯一编号 detailStoreGoods.setInfo(goods.getName()+"下架处理"); // 设置描述信息 detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); // 设置商品数量 detailStoreGoods.setUntreatedNum(goodsStore.getResidueNum()); // 设置未处理数量 detailStoreGoods.setStoreId(goodsStore.getStoreId()); // 设置仓库ID detailStoreGoodsService.save(detailStoreGoods); // 保存下架记录 } } else { // 如果是上架操作 wrapper.set("residue_num",0); // 设置剩余数量为0 wrapper.set("state", Goods.STATE_UP); // 设置状态为上架 // 删除未处理的下架记录 QueryWrapper queryWrapper = new QueryWrapper().eq("goods_id", gid) .eq("state", DetailStoreGoods.STATE_DOWN) .eq("state1", DetailStoreGoods.STATE1_UNTREATED); detailStoreGoodsService.remove(queryWrapper); } super.update(wrapper); // 执行更新 } @Override // 更新商品方法 public void updateGoods(Goods goods, String token) { Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); goods.setUpdateby(employee.getNickName()); // 设置更新人 goods.setUpdateTime(new Date()); // 设置更新时间 if (goods.getCategoryId() != null) { // 如果有分类ID /*从缓存中获取分类的信息*/ if (redisTemplateService.hasKey(RedisKeys.GOODS_CATEGORY.join())) { // 检查Redis缓存 Map categoryCache = redisTemplateService.getCacheMap(RedisKeys.GOODS_CATEGORY.join()); GoodsCategory category = (GoodsCategory) categoryCache.get(goods.getCategoryId().toString()); if (category != null) { goods.setCategoryName(category.getName()); // 设置分类名称 } } else { // 如果缓存中没有 GoodsCategory category = goodsCategoryService.getById(goods.getCategoryId()); // 从数据库查询 if (category != null) { goods.setCategoryName(category.getName()); // 设置分类名称 } } } super.updateById(goods); // 更新商品 } @Override // 查询所有上架商品方法 public List> selected_goodsAll() { QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP); // 查询上架商品 List list = super.list(wrapper); if (list==null||list.size()==0){ // 如果结果为空 return null; } List> listVo = new ArrayList<>(); // 创建结果列表 for (Goods goods : list) { Map map = new HashMap<>(); // 创建结果Map map.put("id",goods.getId()); // 设置商品ID map.put("name",goods.getName()); // 设置商品名称 listVo.add(map); // 添加到结果列表 } return listVo; } @Override // 查询所有正常状态的仓库 public List> selected_storeAll() { List> list = new ArrayList<>(); // 创建结果列表 QueryWrapper wrapper = new QueryWrapper().eq("state", Store.STATE_NORMAL); // 查询正常状态的仓库 List list1 = storeService.list(wrapper); if (list1!=null &&list1.size()>0){ // 如果有结果 for (Store store : list1) { Map map = new HashMap<>(); // 创建结果Map map.put("id",store.getId()); // 设置仓库ID map.put("name",store.getName()); // 设置仓库名称 list.add(map); // 添加到结果列表 } } return list; } @Override // 商品退货方法 public void returnGoods(DetailStoreGoods detailStoreGoods, String token) { Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); Goods goods = super.getById(detailStoreGoods.getGoodsId()); // 获取商品信息 /*补全入库订单信息*/ detailStoreGoods.setCn(IdWorker.getIdStr()); // 生成唯一编号 detailStoreGoods.setCreateby(employee.getNickName()); // 设置创建人 detailStoreGoods.setCreateid(employee.getId()); // 设置创建人ID detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); // 设置类型为入库 if (DetailStoreGoods.STATE_EXPIRY.equals(detailStoreGoods.getState())){ // 如果是过期商品 //如果是过期,将入库订单的state1修改成2:待处理的状态 detailStoreGoods.setState1(DetailStoreGoods.STATE1_UNTREATED); // 设置状态为未处理 }else { detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); // 设置状态为正常 } /*获取仓库的信息*/ QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() .eq("goods_id", detailStoreGoods.getGoodsId()) // 商品ID条件 .eq("store_id", detailStoreGoods.getStoreId()); // 仓库ID条件 GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); if (goodsStore==null){ // 如果商品在该仓库没有库存记录 goodsStore = new GoodsStore(); // 创建新的库存记录 goodsStore.setGoodsId(detailStoreGoods.getGoodsId()); // 设置商品ID goodsStore.setStoreId(detailStoreGoods.getStoreId()); // 设置仓库ID Store store = storeService.getById(detailStoreGoods.getStoreId()); // 获取仓库信息 goodsStore.setStoreName(store.getName()); // 设置仓库名称 goodsStore.setInNum(0L); // 设置入库数量为0 goodsStore.setResidueNum(0L); // 设置剩余数量为0 goodsStoreService.save(goodsStore); // 保存库存记录 } long num = goods.getResidueNum() - detailStoreGoods.getGoodsNum(); // 计算货架剩余数量 if (num>=0){ // 如果货架还有足够商品 //货架还有商品数量 /*更改商品信息*/ UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() .set("residue_num", num) // 更新剩余数量 .eq("id", detailStoreGoods.getGoodsId()); super.update(goodsUpdateWrapper); /*更改商品库存信息*/ UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() .set("residue_num", goodsStore.getResidueNum() + detailStoreGoods.getGoodsNum()) // 增加库存数量 .eq("goods_id", detailStoreGoods.getGoodsId()) .eq("store_id", detailStoreGoods.getStoreId()); goodsStoreService.update(goodsStoreUpdateWrapper); detailStoreGoods.setUntreatedNum(detailStoreGoods.getGoodsNum()); // 设置未处理数量 }else { // 如果货架商品不足 //货架没有商品数量 /*更改商品信息*/ UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() .set("residue_num", 0) // 设置剩余数量为0 .eq("id", detailStoreGoods.getGoodsId()); super.update(goodsUpdateWrapper); /*更改商品库存信息*/ UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() .set("residue_num", goodsStore.getResidueNum() + goods.getResidueNum()) // 增加库存数量 .eq("goods_id", detailStoreGoods.getGoodsId()) .eq("store_id", detailStoreGoods.getStoreId()); goodsStoreService.update(goodsStoreUpdateWrapper); detailStoreGoods.setGoodsNum(goods.getResidueNum()); // 设置商品数量为货架剩余数量 detailStoreGoods.setUntreatedNum(goods.getResidueNum()); // 设置未处理数量 } detailStoreGoodsService.save(detailStoreGoods); // 保存退货记录 } @Override // 分页查询商品库存 public Page queryPageGoodsStore(QueryGoodsStore qo) { Page page = new Page<>(qo.getCurrentPage(),qo.getPageSize()); // 创建分页对象 Page goodsPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建商品分页对象 QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP) // 查询上架商品 .like(StringUtils.hasText(qo.getName()), "name", qo.getName()); // 名称模糊查询 super.page(goodsPage,wrapper); // 执行分页查询 if (goodsPage.getTotal()<=0) { // 如果没有结果 page.setRecords(new ArrayList<>()); // 设置空列表 page.setTotal(0); // 设置总数为0 return page; } List list = new ArrayList<>(); // 创建结果列表 for (Goods record : goodsPage.getRecords()) { GoodsStoreVo vo = new GoodsStoreVo(); // 创建VO对象 BeanUtils.copyProperties(record,vo); // 复制属性 list.add(vo); // 添加到结果列表 } page.setTotal(goodsPage.getTotal()); // 设置总数 page.setRecords(list); // 设置记录 return page; } @Override // 根据ID查询商品库存 public GoodsStoreVo queryGoodsStoreById(Long id) { GoodsStoreVo vo = new GoodsStoreVo(); // 创建VO对象 Goods goods = super.getById(id); // 根据ID查询商品 BeanUtils.copyProperties(goods,vo); // 复制属性 return vo; } @Override // 更新库存信息 public void updateInventory(GoodsStoreVo vo) { if (vo.getInventory()==null){ // 如果库存为空 vo.setInventory(0L); // 设置为0 } if(vo.getShelves()==null){ // 如果货架数量为空 vo.setShelves(0L); // 设置为0 } UpdateWrapper updateWrapper = new UpdateWrapper() .set("inventory",vo.getInventory()) // 设置库存 .set("shelves",vo.getShelves()) // 设置货架数量 .eq("id",vo.getId()); // ID条件 super.update(updateWrapper); // 执行更新 } @Override // 分页查询入库通知单 public Page queryPageNoticeIn(QueryNoticeIn qo) { Page noticeInPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建分页对象 List list = new ArrayList<>(); // 创建结果列表 int start=(qo.getCurrentPage()-1)*qo.getPageSize(); // 计算起始位置 Map map = new HashMap<>(); // 创建查询参数Map map.put("start",start); // 设置起始位置 map.put("size",qo.getPageSize()); // 设置每页大小 if (StringUtils.hasLength(qo.getName())){ // 如果有名称条件 map.put("name",qo.getName()); // 设置名称参数 } int totalCount=goodsMapper.getNoticeInTotalCount(map); // 获取总数 list=goodsMapper.getNoticePageList(map); // 获取分页列表 noticeInPage.setTotal(totalCount); // 设置总数 noticeInPage.setRecords(list); // 设置记录 return noticeInPage; } @Override // 分页查询货架出库通知单 public Page queryPageNoticeOut_shelves(QueryNoticeOut qo) { Page noticeOutPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建分页对象 List list = new ArrayList<>(); // 创建结果列表 int start=(qo.getCurrentPage()-1)*qo.getPageSize(); // 计算起始位置 Map map = new HashMap<>(); // 创建查询参数Map map.put("start",start); // 设置起始位置 map.put("size",qo.getPageSize()); // 设置每页大小 if (StringUtils.hasLength(qo.getName())){ // 如果有名称条件 map.put("name",qo.getName()); // 设置名称参数 } int totalCount=goodsMapper.getNoticeOutShelvesTotalCount(map); // 获取总数 list=goodsMapper.getNoticeShelvesPageList(map); // 获取分页列表 noticeOutPage.setTotal(totalCount); // 设置总数 noticeOutPage.setRecords(list); // 设置记录 return noticeOutPage; } @Override // 保存货架出库记录 public void saveOut_shelves(DetailStoreGoods detailStoreGoods,String token) { Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); // 查询商品在指定仓库的库存 QueryWrapper detailStoreGoodsQueryWrapper = new QueryWrapper().eq("goods_id", detailStoreGoods.getGoodsId()) .eq("store_id", detailStoreGoods.getStoreId()); GoodsStore goodsStore = goodsStoreService.getOne(detailStoreGoodsQueryWrapper); if (goodsStore==null || goodsStore.getResidueNum()==null ||goodsStore.getResidueNum()==0){ // 如果没有库存 throw new BusinessException("出库失败,库存中没有该商品的库存"); // 抛出业务异常 } /*补全出库单的信息*/ detailStoreGoods.setCn(IdWorker.getIdStr()); // 生成唯一编号 detailStoreGoods.setCreateby(employee.getNickName()); // 设置创建人 detailStoreGoods.setCreateid(employee.getId()); // 设置创建人ID detailStoreGoods.setType(DetailStoreGoods.TYPE_OUT); // 设置类型为出库 detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); // 设置状态为正常 long num = goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum(); // 计算库存剩余数量 Goods goods = super.getById(detailStoreGoods.getGoodsId()); // 获取商品信息 if (num>=0){ // 如果库存足够 /*修改货架商品数量*/ UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() .set("residue_num", goods.getResidueNum() == null ? detailStoreGoods.getGoodsNum() : goods.getResidueNum() + detailStoreGoods.getGoodsNum()) // 增加货架数量 .eq("id",detailStoreGoods.getGoodsId()); super.update(goodsUpdateWrapper); /*修改商品库存数量*/ UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() .set("residue_num", goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum()) // 减少库存数量 .eq("goods_id", detailStoreGoods.getGoodsId()) .eq("store_id", detailStoreGoods.getStoreId()); goodsStoreService.update(goodsStoreUpdateWrapper); /*添加出库记录*/ detailStoreGoodsService.save(detailStoreGoods); // 保存出库记录 }else { // 如果库存不足 /*修改货架商品数量*/ UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() .set("residue_num", goods.getResidueNum() == null ? goodsStore.getResidueNum() : goods.getResidueNum() + goodsStore.getResidueNum()) // 增加货架数量 .eq("id",detailStoreGoods.getGoodsId()); super.update(goodsUpdateWrapper); /*修改商品库存数量*/ UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() .set("residue_num",0L) // 设置库存为0 .eq("goods_id", detailStoreGoods.getGoodsId()) .eq("store_id", detailStoreGoods.getStoreId()); goodsStoreService.update(goodsStoreUpdateWrapper); /*添加出库记录*/ detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); // 设置出库数量为库存剩余数量 detailStoreGoodsService.save(detailStoreGoods); // 保存出库记录 } } @Override // 分页查询销售统计 public SalesStatisticsVo queryPageStatisticSaleByQo(QueryStatisticSale qo) { Long total=goodsMapper.queryPageStatisticSaleByQo(qo.getName()); // 获取销售总量 SalesStatisticsVo vo = new SalesStatisticsVo(); // 创建销售统计VO vo.setTotal(total); // 设置总量 QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP) // 查询上架商品 .like(StringUtils.hasText(qo.getName()), "name", qo.getName()); // 名称模糊查询 Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建分页对象 super.page(page,wrapper); // 执行分页查询 Page saleGoodsVoPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建销售商品分页 saleGoodsVoPage.setTotal(page.getTotal()); // 设置总数 List saleGoodsVos = new ArrayList<>(); // 创建销售商品列表 for (Goods record : page.getRecords()) { SaleGoodsVo goodsVo = new SaleGoodsVo(); // 创建销售商品VO goodsVo.setGoodsId(record.getId()); // 设置商品ID goodsVo.setGoodsName(record.getName()); // 设置商品名称 goodsVo.setSalesVolume(record.getSalesVolume()); // 设置销售量 goodsVo.setPercentage(total); // 设置占比 goodsVo.setCoverUrl(record.getCoverUrl()); // 设置封面URL saleGoodsVos.add(goodsVo); // 添加到列表 } saleGoodsVoPage.setRecords(saleGoodsVos); // 设置记录 vo.setVos(saleGoodsVoPage); // 设置分页结果 return vo; } @Override // 分页查询未处理的异常出库通知单 public Page queryPageNoticeOut_untreated(QueryNoticeOut qo) { Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); // 创建分页对象 List vos = new ArrayList<>(); // 创建结果列表 QueryWrapper queryWrapper = new QueryWrapper().eq("state1", DetailStoreGoods.STATE1_UNTREATED); // 查询未处理记录 queryWrapper.eq(StringUtils.hasText(qo.getState()),"state",qo.getState()); // 状态条件 queryWrapper.like(StringUtils.hasText(qo.getName()),"goods_name",qo.getName()); // 商品名称模糊查询 queryWrapper.eq("type",DetailStoreGoods.TYPE_IN); // 类型为入库 queryWrapper.orderByDesc("create_time"); // 按创建时间降序 List list = detailStoreGoodsService.list(queryWrapper); // 执行查询 for (DetailStoreGoods detailStoreGoods : list) { NoticeInNotNormalVo vo = new NoticeInNotNormalVo(); // 创建VO对象 vo.setCn(detailStoreGoods.getCn()); // 设置编号 vo.setCreateTime(detailStoreGoods.getCreateTime()); // 设置创建时间 vo.setGoodsId(detailStoreGoods.getGoodsId()); // 设置商品ID vo.setGoodsName(detailStoreGoods.getGoodsName()); // 设置商品名称 vo.setUntreatedNum(detailStoreGoods.getUntreatedNum()); // 设置未处理数量 vo.setState(detailStoreGoods.getState()); // 设置状态 vo.setStoreId(detailStoreGoods.getStoreId()); // 设置仓库ID Store store = storeService.getById(detailStoreGoods.getStoreId()); // 查询仓库信息 vo.setStoreName(store.getName()); // 设置仓库名称 Goods goods = super.getById(detailStoreGoods.getGoodsId()); // 查询商品信息 vo.setCoverUrl(goods.getCoverUrl()); // 设置商品封面URL vos.add(vo); // 添加到结果列表 } page.setRecords(vos); // 设置记录 return page; } @Override // 处理未处理的异常出库单 public void resolveOutUntreatedForm(NoticeInNotNormalVo vo, String token) { Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); // 查询未处理的出库记录 QueryWrapper queryWrapper = new QueryWrapper() .eq("cn", vo.getCn()) // 编号条件 .eq("state1", DetailStoreGoods.STATE1_UNTREATED); // 未处理状态 DetailStoreGoods detailStoreGoods = detailStoreGoodsService.getOne(queryWrapper); if (detailStoreGoods==null){ // 如果记录不存在 throw new BusinessException("该订单已被处理"); // 抛出业务异常 } long num = detailStoreGoods.getUntreatedNum() - vo.getUntreatedNum(); // 计算剩余未处理数量 // 查询商品库存 QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() .eq("goods_id", vo.getGoodsId()) // 商品ID条件 .eq("store_id", vo.getStoreId()); // 仓库ID条件 GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); if (num>0){ // 如果还有剩余未处理 //未处理完毕 UpdateWrapper updateWrapper = new UpdateWrapper() .eq("cn", detailStoreGoods.getCn()) // 编号条件 .set("untreated_num",num); // 更新未处理数量 detailStoreGoodsService.update(updateWrapper); //改变库存 UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() .eq("goods_id", vo.getGoodsId()) // 商品ID条件 .eq("store_id", vo.getStoreId()) // 仓库ID条件 .set("residue_num",goodsStore.getResidueNum()-vo.getUntreatedNum()); // 减少库存 goodsStoreService.update(goodsStoreUpdateWrapper); }else { // 如果全部处理完毕 //处理完毕 UpdateWrapper updateWrapper = new UpdateWrapper() .eq("cn", detailStoreGoods.getCn()) // 编号条件 .set("untreated_num",0L) // 设置未处理数量为0 .set("state1",DetailStoreGoods.STATE1_NORMAL) // 设置状态为正常 .set("createid",employee.getId()) // 设置处理人ID .set("createby",employee.getNickName()) // 设置处理人名称 .set("create_time",new Date()) // 设置处理时间 .set("type",DetailStoreGoods.TYPE_OUT); // 设置类型为出库 detailStoreGoodsService.update(updateWrapper);//改变库存 UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() .eq("goods_id", vo.getGoodsId()) // 商品ID条件 .eq("store_id", vo.getStoreId()) // 仓库ID条件 .set("residue_num",0L); // 设置库存为0 goodsStoreService.update(goodsStoreUpdateWrapper); } } }