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
|
public Integer create(Goods goods) {
|
LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
isCreateParamValid(goods, user);
|
|
goods.setIsdeleted(Constants.ZERO);
|
goods.setCreateDate(new Date());
|
goods.setCreator(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);
|
dealBatchMultiFiles(goods, goods.getFileList(), user);
|
return goods.getId();
|
}
|
|
public void dealBatchMultiFiles(Goods goods, List<Multifile> fileList, LoginUserInfo user) {
|
Date today = new Date();
|
Multifile del = new Multifile();
|
del.setObjId(goods.getId());
|
multifileMapper.delete(new QueryWrapper<>(del));
|
fileList.stream().forEach(s -> {
|
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());
|
multifileMapper.insert(s);
|
/* if(Constants.equalsInteger(goods.getType(),Constants.ZERO)){
|
//平台商城
|
}
|
if(Constants.equalsInteger(goods.getType(),Constants.ONE)){
|
//咖豆商城
|
}
|
|
if(Constants.equalsInteger(goods.getType(),Constants.TWO)){
|
//咖啡计划商品
|
}*/
|
});
|
|
}
|
|
public void isCreateParamValid(Goods goods, LoginUserInfo user) {
|
//平台商城
|
if (StringUtils.isBlank(goods.getName())
|
|| goods.getCategoryId() == null
|
|| StringUtils.isBlank(goods.getImgurl())
|
|| org.apache.commons.collections.CollectionUtils.isEmpty(goods.getFileList())
|
) {
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
|
}
|
|
|
}
|
|
@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<Goods> deleteWrapper = new UpdateWrapper<>(goods);
|
goodsMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
goodsMapper.deleteBatchIds(ids);
|
}
|
|
@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);
|
}
|
}
|
|
|
@Override
|
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);
|
dealBatchMultiFiles(goods, goods.getFileList(), user);
|
}
|
|
|
/**
|
* 新增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<Sku> list=goods.getSkuList();
|
Date today=new Date();
|
|
|
/**------------------start先删除sku在新增---------------------- */
|
Sku querySku=new Sku();
|
querySku.setGoodsId(goods.getId());
|
List<Sku> 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.size();i++){
|
Sku sku=list.get(i);
|
sku.setCreateDate(today);
|
sku.setCreator(user.getId());
|
sku.setIsdeleted(Constants.ZERO);
|
sku.setGoodsId(goods.getId());
|
sku.setIsPlan(Constants.ZERO);
|
sku.setSortnum(i+1);
|
skuMapper.insert(sku);
|
createSkuAttr(sku,user);
|
}
|
}
|
|
/**
|
* 新增sku规格值
|
* @param sku
|
* @param user
|
*/
|
public void createSkuAttr(Sku sku,LoginUserInfo user){
|
List<SkuAttr> list=sku.getSkuAttrList();
|
for(int i=0;i<list.size();i++){
|
SkuAttr s=list.get(i);
|
s.setCreateDate(sku.getCreateDate());
|
s.setCreator(user.getId());
|
s.setIsdeleted(Constants.ZERO);
|
s.setSkuId(sku.getId());
|
s.setSortnum(i+1);
|
skuAttrMapper.insert(s);
|
}
|
}
|
|
/**
|
* 新增编辑商品sku
|
* @param goods
|
* @param user
|
*/
|
public void createGoodsSku(Goods goods,LoginUserInfo user){
|
|
GoodsSku queryGS=new GoodsSku();
|
queryGS.setGoodsId(goods.getId());
|
List<GoodsSku> 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<goods.getGoodsSkuList().size();z++){
|
GoodsSku goodsSku=goods.getGoodsSkuList().get(z);
|
goodsSku.setCreator(user.getId());
|
goodsSku.setCreateDate(new Date());
|
goodsSku.setIsdeleted(Constants.ZERO);
|
goodsSku.setGoodsId(goods.getId());
|
//goodsSku.setStatus(Constants.ZERO);
|
goodsSkuMapper.insert(goodsSku);
|
|
goodsSku.getGoodsSkuAttrList().stream().forEach(s->{
|
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<Goods> goodss) {
|
if (CollectionUtils.isEmpty(goodss)) {
|
return;
|
}
|
for (Goods goods : goodss) {
|
this.updateById(goods);
|
}
|
}
|
|
@Override
|
public Goods findById(Integer id) {
|
MPJLambdaWrapper<Goods> 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("(select name from labels where id=t1.parent_id) as categoryName");
|
queryWrapper.selectAs(Labels::getName ,Goods::getBrandName);
|
queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getCategoryId);
|
Goods goods=goodsAdminJoinMapper.selectJoinOne(Goods.class,queryWrapper);
|
|
Multifile find = new Multifile();
|
find.setObjId(id);
|
find.setIsdeleted(Constants.ZERO);
|
List<Multifile> fileList= multifileMapper.selectList(new QueryWrapper<>(find));
|
goods.setFileList(fileList);
|
goods.setResourcePath(path);
|
|
GoodsSku queryGoodsSku=new GoodsSku();
|
queryGoodsSku.setGoodsId(id);
|
queryGoodsSku.setIsdeleted(Constants.ZERO);
|
List<GoodsSku> goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku));
|
goods.setGoodsSkuList(goodsSkuList);
|
return goods;
|
}
|
|
|
/**
|
* 根据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<Sku> skuList=skuMapper.selectList(new QueryWrapper<>(qerysku).orderByAsc("SORTNUM"));
|
if(skuList!=null&&skuList.size()>0){
|
for(int i=0;i<skuList.size();i++){
|
Sku s=skuList.get(i);
|
s.setSkuIndex(i);
|
SkuAttr delSkuAttr=new SkuAttr();
|
delSkuAttr.setSkuId(s.getId());
|
delSkuAttr.setIsdeleted(Constants.ZERO);
|
List<SkuAttr> skuAttrList= skuAttrMapper.selectList(new QueryWrapper<>(delSkuAttr).orderByAsc("SORTNUM"));
|
for(int z=0;z<skuAttrList.size();z++){
|
SkuAttr ss=skuAttrList.get(z);
|
ss.setSkuAttrIndex(z);
|
}
|
s.setSkuAttrList(skuAttrList);
|
}
|
}
|
goods.setSkuList(skuList);
|
/**-----------------------------end查询SKU-----------------------------*/
|
|
/**-----------------------------start查询商品规格-----------------------------*/
|
GoodsSku queryGoodsSku=new GoodsSku();
|
queryGoodsSku.setGoodsId(id);
|
queryGoodsSku.setIsdeleted(Constants.ZERO);
|
List<GoodsSku> goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku).orderByAsc("CREATE_DATE"));
|
if(goodsSkuList.size()>0){
|
for(int i=0;i<goodsSkuList.size();i++){
|
GoodsSku gs=goodsSkuList.get(i);
|
|
MPJLambdaWrapper<GoodsSkuAttr> 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());
|
List<GoodsSkuAttr>goodsSkuAttrList= goodsSkuAttrJoinMapper.selectJoinList(GoodsSkuAttr.class,queryWrapper);
|
if(goodsSkuAttrList.size()>0){
|
for(int j=0;j<goodsSkuAttrList.size();j++){
|
GoodsSkuAttr g=goodsSkuAttrList.get(j);
|
Sku sku = goods.getSkuList().stream().filter(skuparam-> 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<Goods> wrapper = new QueryWrapper<>(goods);
|
return goodsMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<Goods> findList(Goods goods) {
|
QueryWrapper<Goods> wrapper = new QueryWrapper<>(goods);
|
return goodsMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<Goods> findPage(PageWrap<Goods> pageWrap) {
|
IPage<Goods> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
|
Utils.MP.blankToNull(pageWrap.getModel());
|
|
queryWrapper.selectAll(Goods.class);
|
queryWrapper.selectAs(Labels::getName, Goods::getCategoryName);
|
queryWrapper.select("ls.name as parentName ");
|
//库存量
|
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 ");
|
|
queryWrapper.leftJoin(Labels.class, Labels::getId, Goods::getCategoryId);
|
queryWrapper.leftJoin("labels ls on ls.id=t.PARENT_CATEGORY_ID");
|
|
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<Goods> result = goodsAdminJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
|
initResult(result.getRecords());
|
return PageData.from(result);
|
}
|
|
|
@Override
|
public List<Goods> findListByParentCategory(Goods pageWrap) {
|
MPJLambdaWrapper<Goods> 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<Goods> result = goodsAdminJoinMapper.selectJoinList( Goods.class, queryWrapper);
|
return result;
|
}
|
|
|
|
private void initResult(List<Goods> list) {
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
Multifile multifile=new Multifile();
|
|
String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
|
for (Goods model : list) {
|
multifile.setIsdeleted(Constants.ZERO);
|
multifile.setObjId(model.getId());
|
List<Multifile> fileList=multifileMapper.selectList(new QueryWrapper<>(multifile));
|
for(Multifile file:fileList){
|
if(StringUtils.isNotBlank(file.getFileurl())){
|
file.setFileFullUrl(path+file.getFileurl());
|
}
|
}
|
model.setFileList(fileList);
|
model.setResourcePath(path);
|
|
//查询sku
|
MPJLambdaWrapper<GoodsSku> queryWrapper = new MPJLambdaWrapper<>();
|
queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
|
queryWrapper.eq(GoodsSku::getGoodsId,model.getId());
|
List<GoodsSku> gsList=goodsSkuMapper.selectList(queryWrapper);
|
for(GoodsSku sd:gsList){
|
if(StringUtils.isNotBlank(sd.getImgurl())){
|
sd.setImgurl(path+sd.getImgurl());
|
}
|
}
|
model.setGoodsSkuList(gsList);
|
}
|
}
|
|
@Override
|
public long count(Goods goods) {
|
QueryWrapper<Goods> wrapper = new QueryWrapper<>(goods);
|
return goodsMapper.selectCount(wrapper);
|
}
|
|
|
/****************************************移动端接口开始********************************************************************/
|
|
/**
|
* 商品列表接口
|
*
|
* @param pageWrap
|
* @return
|
*/
|
@Override
|
public IPage<GoodsInfoResponse> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
|
|
QueryWrapper<GoodsRequest> wrapper = new QueryWrapper<GoodsRequest>()
|
.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<GoodsInfoResponse> 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<Labels>()
|
// .apply(" find_in_set( id, " + goodsResponse.getLabels().split(",") + " ) ")));
|
// }
|
// //查询是否已订阅
|
// goodsResponse.setIsSubscribe(goodsorderDetailMapper.selectCount(new QueryWrapper<GoodsorderDetail>()
|
// .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<GoodsSkuResponse> 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<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+1)
|
.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));
|
}
|
|
goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList);
|
//Sku基础信息
|
List<SkuResponse> 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<Integer, List<MultiFileDTO>> objAllFileUrl = multifileService.getOBJAllFileUrl(goodsResponse.getId(),
|
Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey(),
|
Constants.ZERO,
|
Constants.GOODS_FILE);
|
List<MultiFileDTO> 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();
|
}
|
|
|
}
|