package com.doumee.service.business.impl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.oss.FileModel; import com.doumee.core.oss.UploadFileService; import com.doumee.core.utils.*; import com.doumee.dao.business.*; import com.doumee.dao.business.join.GoodsAdminJoinMapper; import com.doumee.dao.business.join.GoodsSkuAttrJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.web.dto.MultiFileDTO; import com.doumee.dao.web.request.goods.GoodsRequest; import com.doumee.dao.web.response.goods.GoodsInfoResponse; import com.doumee.dao.web.response.goods.GoodsSkuResponse; import com.doumee.dao.web.response.goods.SkuResponse; import com.doumee.service.business.GoodsService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.service.business.MultifileService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; 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.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.InputStream; import java.math.BigDecimal; import java.net.URL; import java.util.*; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 商品信息表Service实现 * * @author 江蹄蹄 * @date 2023/03/21 15:48 */ @Service public class GoodsServiceImpl implements GoodsService { @Autowired private GoodsMapper goodsMapper; @Autowired private LabelsMapper labelsMapper; @Autowired private GoodsorderDetailMapper goodsorderDetailMapper; @Autowired private GoodsSkuMapper goodsSkuMapper; @Autowired private SkuMapper skuMapper; @Autowired private SkuAttrMapper skuAttrMapper; @Autowired private GoodsSkuAttrMapper goodsSkuAttrMapper; @Autowired private MultifileMapper multifileMapper; @Autowired private MultifileService multifileService; @Autowired private GoodsAdminJoinMapper goodsAdminJoinMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private GoodsSkuAttrJoinMapper goodsSkuAttrJoinMapper; @Autowired private MemberMapper memberMapper; @Autowired private UploadFileService uploadFileService; @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public Integer create(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); isCreateParamValid(goods, user); Date date =new Date(); goods.setIsdeleted(Constants.ZERO); goods.setCreateDate(date); goods.setCreator(user.getId()); goods.setEditDate(date); goods.setEditor(user.getId()); goods.setStatus(Constants.ONE); goods.setIsrec(Constants.ZERO); if(StringUtils.isNotBlank(goods.getLabels())){ goods.setLabels( StringUtils.removeEnd( goods.getLabels().replace(",",","),",")); } goodsMapper.insert(goods); dealDefaultGoodsSku(goods); dealBatchMultiFiles(goods, goods.getFileList(), user,false); return goods.getId(); } private void dealDefaultGoodsSku(Goods goods) { Date date = goods.getEditDate(); Integer userId = goods.getEditor(); Sku sku = new Sku(); sku.setIsdeleted(Constants.ZERO); sku.setCreateDate(date); sku.setCreator(userId); sku.setEditDate(date); sku.setEditor(userId); sku.setGoodsId(goods.getId()); sku.setName("默认"); sku.setSortnum(0); skuMapper.insert(sku); SkuAttr skuAttr = new SkuAttr(); skuAttr.setIsdeleted(Constants.ZERO); skuAttr.setCreateDate(date); skuAttr.setCreator(userId); skuAttr.setEditDate(date); skuAttr.setEditor(userId); skuAttr.setSkuId(sku.getId()); skuAttr.setName("默认"); skuAttr.setSortnum(0); skuAttrMapper.insert(skuAttr); GoodsSku goodsSku = new GoodsSku(); goodsSku.setIsdeleted(Constants.ZERO); goodsSku.setCreateDate(date); goodsSku.setCreator(userId); goodsSku.setEditDate(date); goodsSku.setEditor(userId); goodsSku.setSkuId(sku.getId()); goodsSku.setGoodsId(goods.getId()); goodsSku.setName(goods.getName()); goodsSku.setPrice(goods.getSkuPrice()); goodsSku.setShowPrice(goods.getPrice()); goodsSku.setStock(goods.getStockNum()); goodsSku.setIntegralRate(goods.getDeductRata()); goodsSku.setUnitName(goods.getUnitName()); goodsSku.setWeight(goods.getWeight()); goodsSku.setImgurl(goods.getImgurl()); goodsSku.setStatus(goods.getStatus()); goodsSkuMapper.insert(goodsSku); GoodsSkuAttr goodsSkuAttr = new GoodsSkuAttr(); goodsSkuAttr.setIsdeleted(Constants.ZERO); goodsSkuAttr.setCreateDate(date); goodsSkuAttr.setCreator(userId); goodsSkuAttr.setEditDate(date); goodsSkuAttr.setEditor(userId); goodsSkuAttr.setSkuId(sku.getId()); goodsSkuAttr.setGoodsSkuId(goodsSku.getId()); goodsSkuAttr.setSkuAttrId(skuAttr.getId()); goodsSkuAttrMapper.insert(goodsSkuAttr); } public void dealBatchMultiFiles(Goods goods, List fileList, LoginUserInfo user,boolean update) { Date today = new Date(); //清空原有的 if(update){ multifileMapper.delete(new UpdateWrapper().lambda() .eq(Multifile::getIsdeleted,Constants.ZERO) .eq(Multifile::getObjId,goods.getId())); } if(fileList!=null && fileList.size()>0){ List multifileList = new ArrayList<>(); fileList.stream().forEach(s -> { if(StringUtils.isNotBlank(s.getFileurl())){ s.setIsdeleted(Constants.ZERO); s.setCreator(user.getId()); s.setCreateDate(today); s.setObjId(goods.getId()); s.setType(Constants.ZERO); s.setObjType(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey()); multifileList.add(s); } }); if(multifileList.size()>0){ multifileMapper.insert(multifileList); } } } public void isCreateParamValid(Goods goods, LoginUserInfo user) { //平台商城 if (StringUtils.isBlank(goods.getName()) || goods.getCategoryId() == null || goods.getBrandList() == null || goods.getBrandList().size() == 0 || goods.getWeight() == null || goods.getPrice() == null || goods.getSkuPrice() == null || StringUtils.isBlank(goods.getImgurl()) || org.apache.commons.collections.CollectionUtils.isEmpty(goods.getFileList())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage()); } //查询分类 Labels cate = labelsMapper.selectById(goods.getCategoryId()); if(cate == null || Constants.equalsInteger(cate.getIsdeleted(),Constants.ONE) ||! Constants.equalsInteger(cate.getType(),Constants.LabelsType.GOODSTYPE.getKey())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,分类信息不存在"); } if(goods.getBrandId()!=null){ Labels brand = labelsMapper.selectById(goods.getCategoryId()); if(brand == null || Constants.equalsInteger(brand.getIsdeleted(),Constants.ONE) ||! Constants.equalsInteger(brand.getType(),Constants.LabelsType.GOODSBRAND.getKey())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,品牌信息不存在"); } } List bIds = new ArrayList<>(); for(Labels b : goods.getBrandList()){ bIds.add(b.getId()); if(b.getChildIdList() == null || b.getChildIdList().size() ==0){ bIds.addAll(b.getChildIdList()); } } List idsBrand = new ArrayList<>(); List idsSerial = new ArrayList<>(); //查询全部适用品牌和系列数据 List allBrands = labelsMapper.selectList(new QueryWrapper().lambda() .in(Labels::getId,bIds) .eq(Labels::getIsdeleted,Constants.ZERO) ); for(Labels b : goods.getBrandList()){ Labels tb = findLabelFromListByid(allBrands,b.getId(),Constants.LabelsType.APPLICABLE_BRAND.getKey(),null); if(tb == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请选择正确的适用品牌"); } idsBrand.add("["+b.getId()+"]"); if(b.getChildIdList() == null || b.getChildIdList().size() ==0){ for(Integer c :b.getChildIdList()){ Labels cb = findLabelFromListByid(allBrands,b.getId(),Constants.LabelsType.SERIES_BRAND.getKey(),b.getId()); if(cb == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,品牌【"+tb.getName() +"】下所属系列不正确"); } idsSerial.add("["+c+"]"); } } } goods.setBrandIds(String.join(",",idsBrand)); if(idsSerial.size()>0){ goods.setSerialIds(String.join(",",idsSerial)); } } private Labels findLabelFromListByid(List allBrands, Integer id, int type,Integer parentId) { if(allBrands == null || allBrands.size() ==0){ return null; } for(Labels labels:allBrands){ if(!Constants.equalsInteger(id,labels.getId())){ return null; } if(!Constants.equalsInteger(type,labels.getType())){ return null; } if(parentId !=null && !Constants.equalsInteger(parentId,labels.getParentId())){ return null; } return labels; } return null; } @Override public void deleteById(Integer id) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goods query=goodsMapper.selectById(id); if(Objects.nonNull(query)&&Constants.equalsInteger(query.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品已上架不允许修改"); } Goods goods=new Goods(); goods.setIsdeleted(Constants.ONE); goods.setEditDate(new Date()); goods.setEditor(user.getId()); goods.setId(id); goodsMapper.updateById(goods); } @Override public void delete(Goods goods) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(goods); goodsMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } goodsMapper.deleteBatchIds(ids); } @Override public void updateStatusById(List list) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); for(Goods model:list){ if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)){ MPJLambdaWrapper 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 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); } } @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public void updateById(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goods query=goodsMapper.selectById(goods.getId()); if(Objects.nonNull(query)&&Constants.equalsInteger(query.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品已上架不允许修改"); } isCreateParamValid(goods, user); goods.setEditDate(new Date()); goods.setEditor(user.getId()); if(StringUtils.isNotBlank(goods.getLabels())){ goods.setLabels( StringUtils.removeEnd( goods.getLabels().replace(",",","),",")); } goodsMapper.updateById(goods); //清空原有的sku数据 skuMapper.update(null,new UpdateWrapper().lambda() .set(Sku::getIsdeleted,Constants.ONE) .eq(Sku::getIsdeleted,Constants.ZERO) .eq(Sku::getGoodsId,goods.getSkuId())); goodsSkuMapper.update(null,new UpdateWrapper().lambda() .set(GoodsSku::getIsdeleted,Constants.ONE) .eq(GoodsSku::getIsdeleted,Constants.ZERO) .eq(GoodsSku::getGoodsId,goods.getSkuId())); dealDefaultGoodsSku(goods);//新建sku信息 dealBatchMultiFiles(goods, goods.getFileList(), user,true); } /** * 新增SKU * @param goods */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void createGoodSku(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goods goodquery= goodsMapper.selectById(goods.getId()); if(Objects.isNull(goodquery)||Constants.equalsInteger(goodquery.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品未下架,禁止操作"); } if(goods.getSkuList().size()>0&&goods.getGoodsSkuList().size()>0){ //新增SKU createSku(goods,user,goodquery); //新增商品sku createGoodsSku(goods,user); } } /** * 新增SKu * @param goods * @param user */ public void createSku(Goods goods,LoginUserInfo user,Goods goodquery ){ List list=goods.getSkuList(); Date today=new Date(); /**------------------start先删除sku在新增---------------------- */ Sku querySku=new Sku(); querySku.setGoodsId(goods.getId()); List skuRes= skuMapper.selectList(new QueryWrapper<>(querySku)); if(skuRes!=null&&skuRes.size()>0){ skuRes.stream().forEach(s->{ SkuAttr delSkuAttr=new SkuAttr(); delSkuAttr.setSkuId(s.getId()); skuAttrMapper.delete(new QueryWrapper<>(delSkuAttr)); }); Sku delSku=new Sku(); delSku.setGoodsId(goods.getId()); skuMapper.delete(new QueryWrapper<>(delSku)); } /**------------------end先删除sku在新增---------------------- */ if(Constants.equalsInteger(goodquery.getType(),Constants.TWO)){ //咖啡计划商品 必须要包含且只有一条数据的周期规格sku Integer markIsPlan=0; for(Sku model:list){ if(Constants.equalsInteger(model.getIsPlan(),Constants.ONE)){ markIsPlan++; } } if(markIsPlan==0||markIsPlan>1){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "请按要求填写周期规格!"); } } for(int i=0;i list=sku.getSkuAttrList(); for(int i=0;i gsRes= goodsSkuMapper.selectList(new QueryWrapper<>(queryGS)); if(gsRes!=null&&gsRes.size()>0){ gsRes.stream().forEach(s->{ GoodsSkuAttr goodsSkuAttrdele=new GoodsSkuAttr(); goodsSkuAttrdele.setGoodsSkuId(s.getId()); goodsSkuAttrMapper.delete(new QueryWrapper<>(goodsSkuAttrdele)); }); GoodsSku delGoodsSku=new GoodsSku(); delGoodsSku.setGoodsId(goods.getId()); goodsSkuMapper.delete(new QueryWrapper<>(delGoodsSku)); } for(int z=0;z{ Sku sku = goods.getSkuList().stream().filter(skuindex -> Constants.equalsInteger(skuindex.getSkuIndex(),s.getSkuIndex())).findFirst().orElse(null); if(sku!=null){ SkuAttr skuAttr = sku.getSkuAttrList().stream().filter(skuAttrIndex -> Constants.equalsInteger(skuAttrIndex.getSkuAttrIndex(),s.getSkuAttrIndex())).findFirst().orElse(null); GoodsSkuAttr goodsSkuAttr=new GoodsSkuAttr(); goodsSkuAttr.setIsdeleted(Constants.ZERO); goodsSkuAttr.setCreator(user.getId()); goodsSkuAttr.setCreateDate(new Date()); goodsSkuAttr.setGoodsSkuId(goodsSku.getId()); goodsSkuAttr.setSkuId(sku.getId()); goodsSkuAttr.setSkuAttrId(skuAttr.getId()); goodsSkuAttrMapper.insert(goodsSkuAttr); } }); } } @Override public void updateByIdInBatch(List goodss) { if (CollectionUtils.isEmpty(goodss)) { return; } for (Goods goods : goodss) { this.updateById(goods); } } @Override public Goods findById(Integer id) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ACTIVITY_FILE).getCode(); queryWrapper.eq(Goods::getId,id); queryWrapper.selectAll(Goods.class); queryWrapper.select("t1.name",Goods::getCategoryName); queryWrapper.select("t2.name" ,Goods::getBrandName); queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getCategoryId); queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getBrandId); Goods goods=goodsAdminJoinMapper.selectJoinOne(Goods.class,queryWrapper); if(goods == null){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } Multifile find = new Multifile(); find.setObjId(id); find.setIsdeleted(Constants.ZERO); List fileList= multifileMapper.selectList(new QueryWrapper<>(find)); goods.setFileList(fileList); goods.setResourcePath(path); GoodsSku queryGoodsSku=new GoodsSku(); queryGoodsSku.setGoodsId(id); queryGoodsSku.setIsdeleted(Constants.ZERO); List goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku)); goods.setGoodsSkuList(goodsSkuList); if(goodsSkuList.size()>0){ //默认sku信息 GoodsSku goodsSku = goodsSkuList.get(0); goods.setSkuPrice(goodsSku.getPrice()); goods.setWeight(goodsSku.getWeight()); goods.setStockNum(goodsSku.getStock()); goods.setUnitName(goodsSku.getUnitName()); } initGoodsApplyBrandAndSerial(goods); return goods; } private void initGoodsApplyBrandAndSerial(Goods goods) { List idbrandList = getNumIdByIdsString(goods.getBrandIds()); List idSerailList = getNumIdByIdsString(goods.getSerialIds()); if(idbrandList.size()>0){ List brandList = new ArrayList<>(); List allIds = new ArrayList<>(); allIds.addAll(idbrandList); if(idSerailList.size()>0){ allIds.addAll(idSerailList); } List allBrands = labelsMapper.selectList(new QueryWrapper().lambda() .in(Labels::getId,allIds) .eq(Labels::getIsdeleted,Constants.ZERO) ); for(Integer b : idbrandList){ Labels tb = findLabelFromListByid(allBrands,b,Constants.LabelsType.APPLICABLE_BRAND.getKey(),null); if(tb != null){ brandList.add(tb); tb.setChildIdList(new ArrayList<>()); tb.setChildList(new ArrayList<>()); for(Integer c : idSerailList) { Labels cb = findLabelFromListByid(allBrands, c, Constants.LabelsType.SERIES_BRAND.getKey(), b); if (cb != null) { tb.getChildIdList().add(c); tb.getChildList().add(cb); } } } } } } private List getNumIdByIdsString(String brandIds) { List idbrandList = new ArrayList<>(); if(StringUtils.isNotBlank(brandIds)){ String[] idsBrand = brandIds.replace("[","").replace("]", "").split(","); try { for(String s :idsBrand){ idbrandList.add(Integer.parseInt(s)); } }catch (Exception e){ } } return idbrandList; } /** * 根据GoodsId 查询SKU数据 * @param id * @return */ @Override public Goods findSkuByGoodsId(Integer id) { String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode(); Goods goods=new Goods(); goods.setResourcePath(path); /**-----------------------------start查询SKU-----------------------------*/ Sku qerysku=new Sku(); qerysku.setIsdeleted(Constants.ZERO); qerysku.setGoodsId(id); List skuList=skuMapper.selectList(new QueryWrapper<>(qerysku).orderByAsc("SORTNUM")); if(skuList!=null&&skuList.size()>0){ for(int i=0;i skuAttrList= skuAttrMapper.selectList(new QueryWrapper<>(delSkuAttr).orderByAsc("SORTNUM")); for(int z=0;z goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku).orderByAsc("CREATE_DATE")); if(goodsSkuList.size()>0){ for(int i=0;i queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(GoodsSkuAttr.class); queryWrapper.selectAs(SkuAttr::getName,GoodsSkuAttr::getSkuName); queryWrapper.selectAs(Sku::getName,GoodsSkuAttr::getSkuAttrName); queryWrapper.leftJoin(Sku.class,Sku::getId,GoodsSkuAttr::getSkuId); queryWrapper.leftJoin(SkuAttr.class,SkuAttr::getId,GoodsSkuAttr::getSkuAttrId); queryWrapper.eq(GoodsSkuAttr::getIsdeleted,Constants.ZERO); queryWrapper.eq(GoodsSkuAttr::getGoodsSkuId,gs.getId()); ListgoodsSkuAttrList= goodsSkuAttrJoinMapper.selectJoinList(GoodsSkuAttr.class,queryWrapper); if(goodsSkuAttrList.size()>0){ for(int j=0;j Constants.equalsInteger(skuparam.getId(),g.getSkuId())).findFirst().orElse(null); g.setSkuIndex(sku.getSkuIndex()); SkuAttr skuAttr = sku.getSkuAttrList().stream().filter(skuAttrparam -> Constants.equalsInteger(skuAttrparam.getId(),g.getSkuAttrId())).findFirst().orElse(null); g.setSkuAttrIndex(skuAttr.getSkuAttrIndex()); gs.setGoodsSkuAttrList(goodsSkuAttrList); } gs.setGoodsSkuAttrList(goodsSkuAttrList); } } } goods.setGoodsSkuList(goodsSkuList); return goods; } @Override public void recycleBin(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goods query=goodsMapper.selectById(goods.getId()); if(Objects.nonNull(query)&&Constants.equalsInteger(query.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品已恢复,禁止操作"); } goods.setEditDate(new Date()); goods.setEditor(user.getId()); goods.setIsdeleted(Constants.ZERO); goodsMapper.updateById(goods); } @Override public Goods findOne(Goods goods) { QueryWrapper wrapper = new QueryWrapper<>(goods); return goodsMapper.selectOne(wrapper); } @Override public List findList(Goods goods) { QueryWrapper wrapper = new QueryWrapper<>(goods); return goodsMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Goods.class); queryWrapper.select("t1.name",Goods::getCategoryName); queryWrapper.select("t2.name" ,Goods::getBrandName); queryWrapper.select("t3.name" ,Goods::getParentName); queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getCategoryId); queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getBrandId); 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 sum(gd.GOODS_NUM) from goodsorder_detail gd" + " inner join goods_sku gs on gs.id=gd.GOODS_SKU_ID" + " INNER JOIN goodsorder go on go.id=gd.ORDER_ID and go.ISDELETED=0 and go.PAY_STATUS=1 " + " where gs.GOODS_ID=t.id) as salesVolume "); if (Constants.equalsInteger(pageWrap.getModel().getTabStatus(), Constants.TWO)) { //已售罄 queryWrapper.exists("select gs.STOCK from goods_sku gs " + " 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); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()), Activity::getName, pageWrap.getModel().getName()); queryWrapper.like(pageWrap.getModel().getId() != null, Goods::getId, pageWrap.getModel().getId()); queryWrapper.eq(pageWrap.getModel().getCategoryId() != null, Goods::getCategoryId, pageWrap.getModel().getCategoryId()); queryWrapper.eq(pageWrap.getModel().getParentCategoryId() != null, Goods::getParentCategoryId, pageWrap.getModel().getParentCategoryId()); queryWrapper.eq(pageWrap.getModel().getBrandId() != null, Goods::getBrandId, pageWrap.getModel().getBrandId()); queryWrapper.eq(pageWrap.getModel().getStatus() != null, Goods::getStatus, pageWrap.getModel().getStatus()); queryWrapper.orderByDesc(Goods::getCreateDate); IPage result = goodsAdminJoinMapper.selectJoinPage(page, Goods.class, queryWrapper); initResult(result.getRecords()); return PageData.from(result); } @Override public List findListByParentCategory(Goods pageWrap) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Labels labels= labelsMapper.selectById(pageWrap.getCategoryId()); queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO); if(Objects.nonNull(labels)){ queryWrapper.eq(Goods::getParentCategoryId,labels.getParentId()); } // queryWrapper.leftJoin(Labels.class, Labels::getId, Goods::getParentCategoryId); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getName()),Goods::getName,pageWrap.getName()); queryWrapper.orderByDesc(Goods::getCreateDate); List result = goodsAdminJoinMapper.selectJoinList( Goods.class, queryWrapper); return result; } private void initResult(List list) { if (list == null || list.size() == 0) { return; } String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode(); for (Goods goods : list) { goods.setResourcePath(path); //查询sku MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper() .eq(GoodsSku::getIsdeleted,Constants.ZERO) .last("limit 1") .eq(GoodsSku::getGoodsId,goods.getId()); GoodsSku goodsSku = goodsSkuMapper.selectOne(queryWrapper); goods.setGoodsSkuList(new ArrayList<>()); if(goodsSku !=null){ goods.getGoodsSkuList().add(goodsSku); //默认sku信息 goods.setSkuPrice(goodsSku.getPrice()); goods.setWeight(goodsSku.getWeight()); goods.setStockNum(goodsSku.getStock()); goods.setUnitName(goodsSku.getUnitName()); } } } @Override public long count(Goods goods) { QueryWrapper wrapper = new QueryWrapper<>(goods); return goodsMapper.selectCount(wrapper); } /****************************************移动端接口开始********************************************************************/ /** * 商品列表接口 * * @param pageWrap * @return */ @Override public IPage getGoodsPage(PageWrap pageWrap) { QueryWrapper wrapper = new QueryWrapper() .eq("g.ISDELETED",Constants.ZERO) .eq("g.PARENT_CATEGORY_ID",pageWrap.getModel().getParentCategoryId()) .eq(!Objects.isNull(pageWrap.getModel()) && Objects.nonNull(pageWrap.getModel().getCategoryId()), "g.CATEGORY_ID", pageWrap.getModel().getCategoryId()) .eq("g.STATUS", Constants.ZERO) .like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsName()),"g.NAME",pageWrap.getModel().getGoodsName()); // .eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getType()), "g.TYPE", pageWrap.getModel().getType()); for(PageWrap.SortData sortData:pageWrap.getSorts1()){ if ("CREATE_DATE".equalsIgnoreCase(sortData.getProperty())){ if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){ wrapper.orderByAsc("g.CREATE_DATE"); } wrapper.orderByDesc("g.CREATE_DATE"); } if ("realSaleNum".equalsIgnoreCase(sortData.getProperty())){ if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){ wrapper.orderByAsc("realSaleNum"); } wrapper.orderByDesc("realSaleNum"); } if ("PRICE".equalsIgnoreCase(sortData.getProperty())){ if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){ wrapper.orderByAsc("g.PRICE"); } wrapper.orderByDesc("g.PRICE"); } } IPage page = goodsMapper.goodsPage(pageWrap.toPage(),wrapper); if (!CollectionUtils.isEmpty(page.getRecords())){ String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE); page.getRecords().forEach(s->s.setImgurl(preFixPath+s.getImgurl())); } // if (pageWrap.getModel().getType().equals(Constants.TWO)) { // for (GoodsInfoResponse goodsResponse : page.getRecords()) { // //查询商品的分类 // goodsResponse.setCategoryLabels(labelsMapper.selectById(goodsResponse.getCategoryId())); // //查询商品的品牌 // goodsResponse.setBrandLabels(labelsMapper.selectById(goodsResponse.getBrandId())); // //查询商品的标签信息 // if (StringUtils.isNotBlank(goodsResponse.getLabels())) { // goodsResponse.setLabelsList(labelsMapper.selectList(new QueryWrapper() // .apply(" find_in_set( id, " + goodsResponse.getLabels().split(",") + " ) "))); // } // //查询是否已订阅 // goodsResponse.setIsSubscribe(goodsorderDetailMapper.selectCount(new QueryWrapper() // .eq("CREATOR", pageWrap.getModel().getMemberId()) // .apply(" GOODS_SKU_ID in ( SELECT g.id FROM goods_sku g where g.GOODS_ID = " + goodsResponse.getId() + " ) ") // )); // //sku基础信息 // this.getSkuInfo(goodsResponse); // } // } return page; } /** * 查询商品sku组合信息 * * @param goodsResponse * @return */ public void getSkuInfo(GoodsInfoResponse goodsResponse) { List goodsSkuResponseList = goodsSkuMapper.getSkuResponseList(goodsResponse.getId()); String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode(); for (GoodsSkuResponse goodsSkuResponse:goodsSkuResponseList) { if(StringUtils.isBlank(goodsSkuResponse.getImgurl())){ goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getGoodsImgUrl()); }else{ goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getImgurl()); } //处理数据下标 String goodsSkuName = goodsSkuResponse.getName(); List strList = Arrays.asList(goodsSkuName.split(";")); StringBuffer indexData = new StringBuffer(); for (int i = 0; i < strList.size(); i++) { //查询sku信息 Sku sku = skuMapper.selectOne(new QueryWrapper() .eq("GOODS_ID",goodsResponse.getId()) .eq("SORTNUM",i+1) .last(" limit 1 ") ); if(Objects.isNull(sku)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看"); } //查询SKU_ATTR SkuAttr skuAttr = skuAttrMapper.selectOne(new QueryWrapper() .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)); } goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList); //Sku基础信息 List skuResponseList = skuMapper.getSkuResponseList(goodsResponse.getId()); if (!Objects.isNull(skuResponseList) && skuResponseList.size() > Constants.ZERO) { for (SkuResponse skuResponse : skuResponseList) { skuResponse.setAttrList(skuAttrMapper.getSkuAttrResponseList(skuResponse.getId())); //商品sku组合信息 skuResponse.setGoodsSkuAttrList(goodsSkuAttrMapper.getSkuAttrResponseList(skuResponse.getId())); } } goodsResponse.setSkuResponsesList(skuResponseList); } @Override public GoodsInfoResponse getGoodsInfo(Integer goodsId) { String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode(); GoodsInfoResponse goodsResponse = goodsMapper.getGoodsInfo(goodsId); if(Objects.isNull(goodsResponse)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前专区关联商品已删除"); } goodsResponse.setImgurl(fullUrl + goodsResponse.getImgurl()); //查询商品的分类 goodsResponse.setCategoryLabels(labelsMapper.selectById(goodsResponse.getCategoryId())); //查询商品的品牌 goodsResponse.setBrandLabels(labelsMapper.selectById(goodsResponse.getBrandId())); //查询商品的标签信息 goodsResponse.setLabels(goodsResponse.getLabels()); //sku基础信息 this.getSkuInfo(goodsResponse); Map> objAllFileUrl = multifileService.getOBJAllFileUrl(goodsResponse.getId(), Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey(), Constants.ZERO, Constants.GOODS_FILE); List multiFileDTOS = objAllFileUrl.get(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey()); goodsResponse.setGoodBannerMultiFiles(multiFileDTOS); return goodsResponse; } /** * 获取商品分享图片 * @param memberId * @param goodsId * @return * @throws Exception */ @Override public String generateShare(Integer memberId,Integer goodsId) throws Exception{ Member member = memberMapper.selectById(memberId); Goods goods = goodsMapper.selectById(goodsId); String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE); InputStream inputStream = GeneratePicUtil.generateImg(preFixPath+goods.getImgurl(),member.getSharingCode(),goods.getName(), goods.getPrice()); FileModel fileModel = uploadFileService.uploadAliOssFile( GeneratePicUtil.getMultipartFile(inputStream, ID.nextGUID()+".png") ,"share",true); return fileModel.getFileUrl(); } }