rk
8 小时以前 4d2dda710968035fa52e69dea47525985674422b
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -29,6 +29,7 @@
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.bouncycastle.jcajce.provider.asymmetric.GOST;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -56,6 +57,8 @@
    @Autowired
    private GoodsMapper goodsMapper;
    @Autowired
    private ShopGoodsRelationMapper shopGoodsRelationMapper;
@@ -82,6 +85,9 @@
    @Autowired
    private MultifileService multifileService;
    @Autowired
    private CollectMapper collectMapper;
    @Autowired
@@ -308,6 +314,8 @@
        goods.setEditor(user.getId());
        goods.setId(id);
        goodsMapper.updateById(goods);
        //删除供货价
        shopGoodsRelationMapper.delete(new UpdateWrapper<ShopGoodsRelation>().lambda().eq(ShopGoodsRelation::getGoodsId,id));
    }
    @Override
@@ -326,29 +334,79 @@
    @Override
    public void updateStatusById(List<Goods> list) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        for(Goods model:list){
            if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
                MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
                queryWrapper.selectAll(Goods.class);
                queryWrapper.innerJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId);
                queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
                queryWrapper.eq(Goods::getId,model.getId());
                List<Goods> query= goodsAdminJoinMapper.selectJoinList(Goods.class,queryWrapper);
                if(query==null||query.size()<=0){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), model.getName()+":商品未配置SKU,无法上架");
                }
            }
            Goods update=new Goods();
            update.setEditor(user.getId());
            update.setEditDate(new Date());
            update.setStatus(model.getStatus());
            update.setId(model.getId());
            goodsMapper.updateById(model);
        if(list == null || list.size()==0){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<Integer> idList = new ArrayList<>();
        for(Goods model:list){
            idList.add(model.getId() );
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(Constants.formatIntegerNum(list.get(0).getStatus()) == Constants.ONE){
            //如果是批量下架
            goodsMapper.update(null,new UpdateWrapper<Goods>().lambda()
                    .set(Goods::getEditDate,new Date() )
                    .set(Goods::getEditor,user.getId())
                    .set(Goods::getStatus,Constants.ONE )
                    .in(Goods::getId,idList));
            return;
        }
        long shopNum   = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
                .eq(Shop::getIsdeleted,Constants.ZERO)
                .eq(Shop::getStatus,Constants.ZERO));
        MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Goods.class);
        queryWrapper.select("(select count(s.id) from shop_goods_relation s  " +
                "left join shop g on s.SHOP_ID =g.id " +
                "where g.status=0 and s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
        queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
        queryWrapper.in(Goods::getId,idList);
        List<Goods> goodsList= goodsAdminJoinMapper.selectJoinList(Goods.class,queryWrapper);
        if(goodsList==null || goodsList.size() == 0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品信息查询无效 ");
        }
        //查询全部sku信息
        List<GoodsSku> goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>().lambda()
                        .eq(GoodsSku::getIsdeleted,Constants.ZERO)
                        .in(GoodsSku::getGoodsId,idList) );
        if(goodsSkuList==null || goodsSkuList.size() == 0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品尚未设置零售价,请先设置价格! ");
        }
        for(Goods param: list){
            Goods goods = getGoodsFromListById(param.getId(),goodsList,goodsSkuList);
            if(goods ==null ){
                continue;
            }
            //如果是上架
            goods.setGoodsSkuList(goodsSkuList);
            if(goods.getSkuPrice() == null || goods.getSkuPrice().compareTo(new BigDecimal(0)) <=0){
                //默认sku信息
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":商品商品尚未设置零售价,无法上架");
            }
            if(Constants.formatLongNum(goods.getPricedShopNum()) <= shopNum){
                //默认sku信息
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":有未设置供货价的经销商,无法上架");
            }
        }
        goodsMapper.update(null,new UpdateWrapper<Goods>().lambda()
                .set(Goods::getEditDate,new Date() )
                .set(Goods::getEditor,user.getId())
                .set(Goods::getStatus,Constants.ZERO )
                .in(Goods::getId,idList));
    }
    private Goods getGoodsFromListById(Integer id, List<Goods> goodsList, List<GoodsSku> skuList) {
        for(Goods model: goodsList){
            if(Constants.equalsObject(model.getIdList(),id)){
                for(GoodsSku sku :skuList){
                    if(Constants.equalsInteger(sku.getGoodsId(),id)){
                        model.setSkuPrice(sku.getPrice());
                    }
                }
                return  model;
            }
        }
        return null;
    }
@@ -733,7 +791,11 @@
        queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getParentCategoryId);
        //库存量
        queryWrapper.select("(select sum(STOCK) from goods_sku where ISDELETED=0 and GOODS_ID=t.id) as stockNum ");
        queryWrapper.select("(select count(id) from shop_goods_relation s where s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
        if(pageWrap.getModel().getShopId() !=null){
            queryWrapper.select("(select  s.price from shop_goods_relation s  where s.ISDELETED=0 and s.GOODS_ID=t.id  and s.shop_id="+pageWrap.getModel().getShopId()+" limit 1) as shopPrice");//商家供货价
        }else{
            queryWrapper.select("(select count(s.id) from shop_goods_relation s  left join shop g on s.SHOP_ID =g.id where g.status=0 and s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
        }
        //实际销量
        queryWrapper.select("(select sum(gd.GOODS_NUM) from  goodsorder_detail gd" +
                "        inner join  goods_sku gs on gs.id=gd.GOODS_SKU_ID" +
@@ -756,9 +818,12 @@
        queryWrapper.eq(pageWrap.getModel().getBrandId() != null, Goods::getBrandId, pageWrap.getModel().getBrandId());
        queryWrapper.eq(pageWrap.getModel().getStatus() != null, Goods::getStatus, pageWrap.getModel().getStatus());
        queryWrapper.in(pageWrap.getModel().getIdList() != null && pageWrap.getModel().getIdList().size()>0, Goods::getId, pageWrap.getModel().getIdList());
        if(pageWrap.getModel().getShopId() !=null){
            queryWrapper.orderByAsc("shopPrice");
        }
        queryWrapper.orderByDesc(Goods::getId);
        IPage<Goods> result = goodsAdminJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
        initResult(result.getRecords());
        initResult(result.getRecords(),pageWrap.getModel().getShopId()==null);
        return PageData.from(result);
    }
@@ -781,12 +846,16 @@
    private void initResult(List<Goods> list) {
    private void initResult(List<Goods> list,boolean shopId) {
        if (list == null || list.size() == 0) {
            return;
        }
       long shopNum = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
                .eq(Shop::getIsdeleted,Constants.ZERO));
        long shopNum = 0;
        if(shopId){//不针对商家搜索的话,
            shopNum   = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
                    .eq(Shop::getIsdeleted,Constants.ZERO)
                    .eq(Shop::getStatus,Constants.ZERO));
        }
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
        for (Goods goods : list) {
@@ -865,7 +934,6 @@
        if (!CollectionUtils.isEmpty(page.getRecords())){
            String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
            page.getRecords().forEach(s->s.setImgurl(preFixPath+s.getImgurl()));
        }
        return page;
    }
@@ -935,8 +1003,7 @@
    @Override
    public GoodsInfoResponse getGoodsInfo(Integer goodsId) {
    public GoodsInfoResponse getGoodsInfo(Integer goodsId,Integer memberId) {
        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        GoodsInfoResponse goodsResponse = goodsMapper.getGoodsInfo(goodsId);
@@ -958,6 +1025,14 @@
                                                                                            Constants.GOODS_FILE);
        List<MultiFileDTO> multiFileDTOS = objAllFileUrl.get(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey());
        goodsResponse.setGoodBannerMultiFiles(multiFileDTOS);
        goodsResponse.setCollectStatus(Constants.ZERO);
        if(Objects.nonNull(memberId)){
            goodsResponse.setCollectStatus(collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                    .eq(Collect::getMemberId,memberId)
                    .eq(Collect::getObjId,goodsId)
                    .eq(Collect::getObjType,Constants.ONE)
            )>Constants.ZERO?Constants.ONE:Constants.ZERO);
        }
        return goodsResponse;
    }