rk
9 小时以前 77fc61a25c14071584e45731476207959137d6b6
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -132,7 +132,7 @@
        dealBatchMultiFiles(goods, goods.getFileList(), user,false);
        return goods.getId();
    }
    private void dealDefaultGoodsSku(Goods goods) {
    private Integer dealDefaultGoodsSku(Goods goods) {
        Date date = goods.getEditDate();
        Integer userId = goods.getEditor();
        Sku sku = new Sku();
@@ -186,6 +186,8 @@
        goodsSkuAttr.setGoodsSkuId(goodsSku.getId());
        goodsSkuAttr.setSkuAttrId(skuAttr.getId());
        goodsSkuAttrMapper.insert(goodsSkuAttr);
        return goodsSku.getId();
    }
    public void dealBatchMultiFiles(Goods goods, List<Multifile> fileList, LoginUserInfo user,boolean update) {
@@ -352,7 +354,23 @@
                    .set(Goods::getEditor,user.getId())
                    .set(Goods::getStatus,Constants.ONE )
                    .in(Goods::getId,idList));
            //批量下架 sku数据
            goodsSkuMapper.update(null,new UpdateWrapper<GoodsSku>().lambda()
                    .set(GoodsSku::getEditDate,new Date() )
                    .set(GoodsSku::getEditor,user.getId())
                    .set(GoodsSku::getStatus,Constants.ONE )
                    .eq(GoodsSku::getIsdeleted,Constants.ZERO)
                    .in(GoodsSku::getGoodsId,idList));
            return;
        }else{
            //批量上架 sku数据
            goodsSkuMapper.update(null,new UpdateWrapper<GoodsSku>().lambda()
                    .set(GoodsSku::getEditDate,new Date() )
                    .set(GoodsSku::getEditor,user.getId())
                    .set(GoodsSku::getStatus,Constants.ZERO )
                    .eq(GoodsSku::getIsdeleted,Constants.ZERO)
                    .in(GoodsSku::getGoodsId,idList));
        }
        long shopNum   = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
                .eq(Shop::getIsdeleted,Constants.ZERO)
@@ -451,6 +469,16 @@
            goods.setLabels(  StringUtils.removeEnd( goods.getLabels().replace(",",","),","));
        }
        goodsMapper.updateById(goods);
        boolean needUpdatesku = true;
        if(goods.getSkuPrice()!=null){
            GoodsSku queryGoodsSku=new GoodsSku();
            queryGoodsSku.setGoodsId(goods.getId());
            queryGoodsSku.setIsdeleted(Constants.ZERO);
            GoodsSku goodsSku=goodsSkuMapper.selectOne(new QueryWrapper<>(queryGoodsSku).last("limit 1"));
            if(goodsSku !=null && Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(goods.getSkuPrice()) ==0){
                needUpdatesku = false;//价格未变化无需重新生成供货价
            }
        }
        //清空原有的sku数据
        skuMapper.update(null,new UpdateWrapper<Sku>().lambda()
                .set(Sku::getIsdeleted,Constants.ONE)
@@ -460,7 +488,21 @@
                .set(GoodsSku::getIsdeleted,Constants.ONE)
                .eq(GoodsSku::getIsdeleted,Constants.ZERO)
                .eq(GoodsSku::getGoodsId,goods.getId()));
        dealDefaultGoodsSku(goods);//新建sku信息
       Integer skuId = dealDefaultGoodsSku(goods);//新建sku信息
        if(needUpdatesku){ //先删除原来的数据
            shopGoodsRelationMapper.delete(new QueryWrapper<ShopGoodsRelation>().lambda()
                    .eq(ShopGoodsRelation::getGoodsId,goods.getId())
            );
        }else{
            //否则更新所有供货价关联关系中的skuID
            shopGoodsRelationMapper.update(null,new UpdateWrapper<ShopGoodsRelation>().lambda()
                    .eq(ShopGoodsRelation::getGoodsId,goods.getId())
                    .set(ShopGoodsRelation::getGoodsSkuId,skuId)
            );
        }
        dealBatchMultiFiles(goods, goods.getFileList(), user,true);
    }
@@ -632,6 +674,7 @@
        }
        Multifile find = new Multifile();
        find.setObjId(id);
        find.setObjType(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey());
        find.setIsdeleted(Constants.ZERO);
        List<Multifile> fileList=  multifileMapper.selectList(new QueryWrapper<>(find));
        goods.setFileList(fileList);
@@ -798,8 +841,9 @@
    public List<Goods> findList(Goods goods) {
        QueryWrapper<Goods> wrapper = new QueryWrapper<>(goods);
        wrapper.lambda()
            .in(goods.getIdList() != null && goods.getIdList().size()>0, Goods::getId, goods.getIdList())
            .eq( Goods::getIsdeleted, Constants.ZERO);
                .in(goods.getIdList() != null && goods.getIdList().size()>0, Goods::getId, goods.getIdList())
                .like(goods.getZhuanquId()!=null,Goods::getZhuanquIds,"["+goods.getZhuanquId()+"]")
                .eq( Goods::getIsdeleted, Constants.ZERO);
        return goodsMapper.selectList(wrapper);
    }
@@ -834,6 +878,7 @@
                    " INNER JOIN goods g on  g.id=gs.GOODS_ID " +
                    " where gs.STOCK<=0 and gs.ISDELETED=0 and g.id=t.id ");
        }
        queryWrapper.eq(!Constants.equalsInteger(pageWrap.getModel().getTabStatus(), 3), Goods::getIsdeleted, Constants.ZERO);
        queryWrapper.eq(Constants.equalsInteger(pageWrap.getModel().getTabStatus(), 3), Goods::getIsdeleted, Constants.ONE);
@@ -923,49 +968,74 @@
     * @return
     */
    @Override
    public IPage<GoodsInfoResponse> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
    public IPage<Goods> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
       GoodsRequest model = pageWrap.getModel();
       QueryWrapper<GoodsRequest> wrapper = new QueryWrapper<GoodsRequest>()
                .eq("g.ISDELETED",Constants.ZERO)
        MPJLambdaWrapper<Goods> wrapper = new MPJLambdaWrapper<Goods>()
                .selectAll(Goods.class)
                .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getMinPrice)
                .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getLinePrice)
                .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator)
                .eq(Goods::getIsdeleted,Constants.ZERO)
                .eq(!Objects.isNull(model) && Objects.nonNull(model.getCategoryId()),
                        "g.CATEGORY_ID", model.getCategoryId())
                        Goods::getCategoryId, model.getCategoryId())
               //适用品牌  适用系列
               .apply(!Objects.isNull(model) && Objects.nonNull(model.getApplicableBrandId()),
                       " find_in_set( '["+model.getApplicableBrandId()+"]' , g.BRAND_IDS )  ")
                       " find_in_set( '["+model.getApplicableBrandId()+"]' , t.BRAND_IDS )  ")
               .apply(!Objects.isNull(model) && Objects.nonNull(model.getSeriesBrandId()),
                       " find_in_set( '["+model.getSeriesBrandId()+"]' , g.SERIAL_IDS )  ")
                .eq("g.STATUS", Constants.ZERO)
                .like(StringUtils.isNotBlank(model.getGoodsName()),"g.NAME",model.getGoodsName());
                       " find_in_set( '["+model.getSeriesBrandId()+"]' , t.SERIAL_IDS )  ")
               .apply(!Objects.isNull(model) && Objects.nonNull(model.getQualityId()),
                        " find_in_set( '["+model.getQualityId()+"]' , t.ZHUANQU_IDS )  ")
                .eq(Goods::getStatus, Constants.ZERO)
                .like(StringUtils.isNotBlank(model.getGoodsName()),Goods::getName,model.getGoodsName());
        if(Objects.nonNull(model.getShopId())){
            wrapper.select("  ifnull( ( select sgr.PRICE from shop_goods_relation sgr where sgr.GOODS_ID = t.ID and sgr.ISDELETED = 0 and sgr.`STATUS` = 0  and sgr.SHOP_ID = "+model.getShopId()+" ) ,0) ",Goods::getExFactoryPrice);
            wrapper.select(" ifnull(( select sum(gd.GOODS_NUM) from goodsorder_detail gd  inner join goodsorder go on gd.ORDER_ID = go.id  where gd.GOODS_ID = t.`id` and  go.DISTRIBUTION_SHOP_ID = "+model.getShopId()+" ),0) ",Goods::getRealSaleNum);
                if(Objects.nonNull(model.getSortInfo())){
                    //排序方式:0=综合排序;1=销量由低到高 ;2=价格由低到高;3=销量由高到低;4=价格由高到低
                    if(Constants.equalsInteger(model.getSortInfo(),Constants.ZERO)){
                        wrapper.orderByDesc("g.CREATE_DATE");
                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.ONE)){
                        wrapper.orderByAsc("realSaleNum");
                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.TWO)){
                        wrapper.orderByAsc("g.price");
                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.THREE)){
                        wrapper.orderByDesc("realSaleNum");
                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.FOUR)){
                        wrapper.orderByDesc("g.price");
                    }
                }
        IPage<GoodsInfoResponse> page =
                Objects.isNull(model.getShopId())?
                goodsMapper.goodsPage(pageWrap.toPage(),wrapper)
                :
                goodsMapper.goodsPageForShop(pageWrap.toPage(),wrapper,model.getShopId()) ;
        }else{
            wrapper.select(" (( select ifnull(sum(GOODS_NUM),0) from goodsorder_detail gd  where gd.GOODS_ID =  t.id  )) ",Goods::getRealSaleNum);
        }
        if(Objects.nonNull(model.getSortInfo())){
            //排序方式:0=综合排序;1=销量由低到高 ;2=价格由低到高;3=销量由高到低;4=价格由高到低
            if(Constants.equalsInteger(model.getSortInfo(),Constants.ZERO)){
                wrapper.orderByDesc("t.CREATE_DATE");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.ONE)){
                wrapper.orderByAsc("(realSaleNum + t.SALENUM)");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.TWO)){
                wrapper.orderByAsc("minPrice");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.THREE)){
                wrapper.orderByDesc("(realSaleNum + t.SALENUM)");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.FOUR)){
                wrapper.orderByDesc("minPrice");
            }
        }
        IPage<Goods> page =
                goodsMapper.selectJoinPage(pageWrap.toPage(), Goods.class, wrapper);
        if (!CollectionUtils.isEmpty(page.getRecords())){
            String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
            for (GoodsInfoResponse goodsInfoResponse:page.getRecords()
                 ) {
            for (Goods goodsInfoResponse:page.getRecords()) {
                goodsInfoResponse.setImgurl(StringUtils.isNotBlank(goodsInfoResponse.getImgurl())?(preFixPath+goodsInfoResponse.getImgurl()):null);
                //sku基础信息
                this.getSkuInfo(goodsInfoResponse);
                if(Objects.isNull(model.getShopId())){
                    //sku基础信息
                    this.getSkuInfo(goodsInfoResponse);
                }
                if(StringUtils.isNotBlank(goodsInfoResponse.getBrandIds())){
                    List<Labels> allBrands = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
                            .in(Labels::getId,getNumIdByIdsString(goodsInfoResponse.getBrandIds()))
                            .eq(Labels::getType,Constants.LabelsType.APPLICABLE_BRAND.getKey())
                            .eq(Labels::getIsdeleted,Constants.ZERO)
                    );
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(allBrands)){
                        goodsInfoResponse.setBrandNames(String.join("/",allBrands.stream().map(i->i.getName()).collect(Collectors.toList())));
                    }
                }
            }
        }
        if(StringUtils.isNotBlank(model.getGoodsName())&&Objects.nonNull(model.getMemberId())){
            searchHistoryMapper.delete(new QueryWrapper<SearchHistory>().lambda()
                    .eq(SearchHistory::getMemberId,model.getMemberId())
                    .eq(SearchHistory::getContent,model.getGoodsName())
            );
            SearchHistory searchHistory = new SearchHistory();
            searchHistory.setIsdeleted(Constants.ZERO);
            searchHistory.setContent(model.getGoodsName());
@@ -982,51 +1052,17 @@
     * @param goodsResponse
     * @return
     */
    public void getSkuInfo(GoodsInfoResponse goodsResponse) {
    public void getSkuInfo(Goods goodsResponse) {
        List<GoodsSkuResponse>  goodsSkuResponseList = goodsSkuMapper.getSkuResponseList(goodsResponse.getId());
//        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        Integer sumStock = Constants.ZERO;
        for (GoodsSkuResponse goodsSkuResponse:goodsSkuResponseList) {
            goodsSkuResponse.setStock(Objects.isNull(goodsSkuResponse.getStock())?Constants.ZERO:goodsSkuResponse.getStock());
//            if(StringUtils.isBlank(goodsSkuResponse.getImgurl())){
//                goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getGoodsImgUrl());
//            }else{
//                goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getImgurl());
//            }
//            //处理数据下标
//            String goodsSkuName = goodsSkuResponse.getName();
//            List<String> strList = Arrays.asList(goodsSkuName.split(";"));
//            StringBuffer indexData = new StringBuffer();
//            for (int i = 0; i < strList.size(); i++) {
//                //查询sku信息
//                Sku sku =  skuMapper.selectOne(new QueryWrapper<Sku>()
//                        .eq("GOODS_ID",goodsResponse.getId())
//                        .eq("SORTNUM",i)
//                        .last(" limit 1 ")
//                );
//                if(Objects.isNull(sku)){
//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看");
//                }
//                //查询SKU_ATTR
//                SkuAttr skuAttr = skuAttrMapper.selectOne(new QueryWrapper<SkuAttr>()
//                        .eq("SKU_ID",sku.getId())
//                        .eq("NAME",strList.get(i))
//                        .last(" limit 1 ")
//                );
//                if(Objects.isNull(skuAttr)){
//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看");
//                }
//                indexData.append("," + ( skuAttr.getSortnum()-1));
//            }
//            goodsSkuResponse.setIndexData(indexData.toString().substring(1));
            sumStock = sumStock + goodsSkuResponse.getStock();
        }
        //真实销量 = realSaleNum  - saleNum;
        //真实库存= sumStock - (realSaleNum  - saleNum)
        goodsResponse.setStock(sumStock - goodsResponse.getRealSaleNum() + goodsResponse.getSaleNum());
        goodsResponse.setStock(sumStock);
        goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList);
        //Sku基础信息
        List<SkuResponse> skuResponseList = skuMapper.getSkuResponseList(goodsResponse.getId());
@@ -1041,10 +1077,22 @@
    }
    @Override
    public GoodsInfoResponse getGoodsInfo(Integer goodsId,Integer memberId) {
    public Goods 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);
//        GoodsInfoResponse goodsResponse = goodsMapper.getGoodsInfo(goodsId);
        Goods goodsResponse = goodsMapper.selectOne(
                 new MPJLambdaWrapper<Goods>()
                        .selectAll(Goods.class)
                        .select(" (( select ifnull(sum(GOODS_NUM),0) from goodsorder_detail gd  where gd.GOODS_ID =  t.id  )) ",Goods::getRealSaleNum)
                        .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getMinPrice)
                         .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getLinePrice)
                        .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator)
//                        .eq(Goods::getIsdeleted,Constants.ZERO)
//                        .eq(Goods::getStatus, Constants.ZERO)
                        .eq(Goods::getId,goodsId)
                         .last("limit 1")
        );
        if(Objects.isNull(goodsResponse)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }