package com.ruoyi.goods.service.impl.goods;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.bean.BeanUtils;
|
import com.ruoyi.common.core.utils.uuid.IdUtils;
|
import com.ruoyi.common.security.utils.CodeFactoryUtil;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.goods.domain.dto.*;
|
import com.ruoyi.goods.domain.pojo.goods.GoodsTotal;
|
import com.ruoyi.goods.domain.vo.*;
|
import com.ruoyi.goods.mapper.goods.GoodsMapper;
|
import com.ruoyi.goods.service.activity.ActivityGoodsService;
|
import com.ruoyi.goods.service.activity.ActivityRecordService;
|
import com.ruoyi.goods.service.activity.ActivityService;
|
import com.ruoyi.goods.service.goods.GoodsFileService;
|
import com.ruoyi.goods.service.goods.GoodsService;
|
import com.ruoyi.goods.service.goods.GoodsTotalService;
|
import com.ruoyi.goods.service.goods.ShopGoodsService;
|
import com.ruoyi.system.api.constant.AppErrorConstant;
|
import com.ruoyi.system.api.domain.dto.AppActivityGoodsPageDto;
|
import com.ruoyi.system.api.domain.dto.MerGoodsPriceListDto;
|
import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
|
import com.ruoyi.system.api.domain.dto.MgtClassNumDto;
|
import com.ruoyi.system.api.domain.poji.activity.Activity;
|
import com.ruoyi.system.api.domain.poji.activity.ActivityGoods;
|
import com.ruoyi.system.api.domain.poji.config.SysClassification;
|
import com.ruoyi.system.api.domain.poji.goods.Goods;
|
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
|
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
|
import com.ruoyi.system.api.domain.poji.shop.Shop;
|
import com.ruoyi.system.api.domain.poji.sys.SysUser;
|
import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
|
import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
|
import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO;
|
import com.ruoyi.system.api.service.RemoteConfigService;
|
import com.ruoyi.system.api.service.RemoteOrderService;
|
import com.ruoyi.system.api.service.RemoteShopService;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.nio.charset.StandardCharsets;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 商品表 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-04-25
|
*/
|
@Service
|
public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements GoodsService {
|
|
@Resource
|
private GoodsMapper goodsMapper;
|
|
@Resource
|
private ActivityGoodsService activityGoodsService;
|
|
@Resource
|
private ShopGoodsService shopGoodsService;
|
|
@Resource
|
private GoodsFileService goodsFileService;
|
|
@Resource
|
private RemoteConfigService remoteConfigService;
|
|
@Resource
|
private GoodsTotalService goodsTotalService;
|
|
@Resource
|
private ActivityService activityService;
|
|
@Resource
|
private ActivityRecordService activityRecordService;
|
|
@Resource
|
private RemoteShopService remoteShopService;
|
|
|
/**
|
* @param page shopId
|
* @return List<AppSimpleGoodsVo>
|
* @description 获取推荐商品列表
|
* @author jqs34
|
* @date 2023/6/4 16:27
|
*/
|
@Override
|
public List<AppSimpleGoodsVo> pageRecommendGoods(Page page, Long shopId) {
|
List<AppSimpleGoodsVo> appSimpleGoodsVoList = goodsMapper.pageRecommendGoods(page, shopId);
|
return appSimpleGoodsVoList;
|
}
|
|
/**
|
* @description 获取活动精选
|
* @author jqs
|
* @date 2023/7/4 18:06
|
* @param shopId
|
* @return List<AppSimpleGoodsVo>
|
*/
|
@Override
|
public AppHomeActivityVo pageActivityGoods(Long shopId){
|
AppHomeActivityVo appHomeActivityVo = new AppHomeActivityVo();
|
Activity activity = activityService.getRecommendActivity(shopId);
|
List<AppSimpleGoodsVo> simpleGoodsVoList = new ArrayList<>();
|
if(activity!=null){
|
appHomeActivityVo.setEndTime(activity.getActivityEndTime());
|
appHomeActivityVo.setTimestamp(activity.getActivityEndTime().getTime());
|
simpleGoodsVoList = goodsMapper.pageActivityGoods(activity.getActivityId(),shopId);
|
appHomeActivityVo.setGoodsVoList(simpleGoodsVoList);
|
}
|
return appHomeActivityVo;
|
}
|
|
/**
|
* 获取商城商品列表
|
* @param page
|
* @param appShopGoodsPageDto
|
* @return
|
*/
|
@Override
|
public List<AppSimpleGoodsVo> pageShopGoods(Page page, AppShopGoodsPageDto appShopGoodsPageDto){
|
List<AppSimpleGoodsVo> appSimpleGoodsVoList = goodsMapper.pageShopGoods(page,appShopGoodsPageDto);
|
return appSimpleGoodsVoList;
|
}
|
|
/**
|
* 获取搜索商品列表
|
* @param page
|
* @param appSearchGoodsPageDto
|
* @return
|
*/
|
@Override
|
public List<AppSimpleGoodsVo> pageSearchGoods(Page page, AppSearchGoodsPageDto appSearchGoodsPageDto){
|
List<AppSimpleGoodsVo> appSimpleGoodsVoList = goodsMapper.pageSearchGoods(page,appSearchGoodsPageDto);
|
return appSimpleGoodsVoList;
|
}
|
|
/**
|
* 获取搜索商品列表
|
* @param page
|
* @param appSearchGoodsPageDto
|
* @return
|
*/
|
@Override
|
public List<AppSimpleActivityGoodsVo> pageSearchActivityGoods(Page page, AppSearchGoodsPageDto appSearchGoodsPageDto){
|
List<String> activityIdList = activityService.listActivityIdByShopId(appSearchGoodsPageDto.getShopId());
|
appSearchGoodsPageDto.setActivityIdList(activityIdList);
|
// 获取搜索结果的商品列表
|
List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsMapper.pageSearchActivityGoods(page, appSearchGoodsPageDto);
|
// 计算销售百分比和设置时间戳
|
for (AppSimpleActivityGoodsVo appSimpleActivityGoodsVo : appSimpleGoodsVoList) {
|
int activityNumber = appSimpleActivityGoodsVo.getActivityNumber();
|
int salesNumber = appSimpleActivityGoodsVo.getSalesNumber();
|
BigDecimal salesPercent = BigDecimal.ZERO;
|
// 计算销售百分比
|
if (activityNumber != 0) {
|
salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber),2, BigDecimal.ROUND_HALF_UP);
|
}
|
// 设置销售百分比和时间戳
|
appSimpleActivityGoodsVo.setSalesPercent(salesPercent);
|
appSimpleActivityGoodsVo.setTimestamp(appSimpleActivityGoodsVo.getEndTime().getTime());
|
}
|
// 返回结果
|
return appSimpleGoodsVoList;
|
}
|
|
/**
|
* 获取商品详情
|
* @param appGoodsInfoGetDto
|
* @return
|
*/
|
@Override
|
public AppGoodsInfoVo getGoodsInfo(AppGoodsInfoGetDto appGoodsInfoGetDto){
|
AppGoodsInfoVo appGoodsInfoVo = new AppGoodsInfoVo();
|
Goods goods = this.getById(appGoodsInfoGetDto.getId());
|
if(goods.getGoodsStatus()==-1){
|
throw new ServiceException(AppErrorConstant.GOODS_DELETED);
|
}
|
BeanUtils.copyProperties(goods, appGoodsInfoVo);
|
//商户是否定制价格
|
ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(appGoodsInfoGetDto.getShopId(),goods.getGoodsId());
|
if (shopGoods != null) {
|
appGoodsInfoVo.setSalesPrice(shopGoods.getSalesPrice());
|
appGoodsInfoVo.setServiceNum(shopGoods.getServiceNum());
|
}
|
//是否绑定经销商
|
Shop shop = remoteShopService.getShop(appGoodsInfoGetDto.getShopId()).getData();
|
if(shop.getBelongShopId()!=null &&shop.getShopType()==2){
|
//经销商定制价格
|
Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
|
shopGoods = shopGoodsService.getByShopIdAndGoodsId(belongShop.getShopId(), goods.getGoodsId());
|
if (1 == belongShop.getModifyPricePermission() && null != shopGoods) {
|
appGoodsInfoVo.setSalesPrice(shopGoods.getSalesPrice());
|
appGoodsInfoVo.setServiceNum(shopGoods.getServiceNum());
|
}
|
}
|
|
|
GoodsTotal goodsTotal = goodsTotalService.getById(goods.getGoodsId());
|
appGoodsInfoVo.setSalesNum(goodsTotal.getBuyNumCount());
|
//活动商品判断
|
if(appGoodsInfoGetDto.getActivityFlag()==1){
|
ActivityGoods activityGoods = activityGoodsService.getByGoodsId(appGoodsInfoGetDto.getActivityId(),goods.getGoodsId());
|
Activity activity = activityService.getById(appGoodsInfoGetDto.getActivityId());
|
//原价取较大值
|
if(shopGoods!=null&&goods.getSalesPrice().compareTo(shopGoods.getSalesPrice())>0){
|
appGoodsInfoVo.setSalesPrice(goods.getSalesPrice());
|
}
|
appGoodsInfoVo.setActivityFlag(1);
|
appGoodsInfoVo.setActivityPrice(activityGoods.getActivityPrice());
|
appGoodsInfoVo.setSalesNum(activityGoods.getSalesNumber());
|
appGoodsInfoVo.setActivityStartTime(activity.getActivityStartTime());
|
appGoodsInfoVo.setActivityDeadline(activity.getActivityEndTime());
|
appGoodsInfoVo.setTimestamp(activity.getActivityEndTime().getTime());
|
Integer availableBuyNum = 0;
|
//售罄判断
|
if(activityGoods.getActivityNumber().equals(activityGoods.getSalesNumber())){
|
appGoodsInfoVo.setSellOutFlag(1);
|
}else{
|
availableBuyNum = activityGoods.getActivityNumber() - activityGoods.getSalesNumber();
|
appGoodsInfoVo.setSellOutFlag(0);
|
}
|
appGoodsInfoVo.setActivityId(appGoodsInfoGetDto.getActivityId());
|
//限购判断
|
appGoodsInfoVo.setPurchaseLimitationFlag(activityGoods.getPurchaseLimitationFlag());
|
if(activityGoods.getPurchaseLimitationFlag()==1){
|
Integer buyNum = activityRecordService.getUserActivityGoodsNum(goods.getGoodsId(),activityGoods.getActivityId(),appGoodsInfoGetDto.getUserId());
|
Integer limitBuyNum = activityGoods.getLimitNumber() - buyNum;
|
if(limitBuyNum<availableBuyNum){
|
availableBuyNum = limitBuyNum;
|
}
|
}
|
appGoodsInfoVo.setAvailableBuyNum(availableBuyNum);
|
}else{
|
appGoodsInfoVo.setActivityFlag(0);
|
}
|
//商品图片
|
List<GoodsFile> goodsFileList = goodsFileService.listByGoodsId(goods.getGoodsId());
|
List<String> bannerList = new ArrayList<>();
|
if(goodsFileList!=null&&!goodsFileList.isEmpty()){
|
for(GoodsFile goodsFile : goodsFileList){
|
if(goodsFile.getFileType()==1){
|
appGoodsInfoVo.setGoodsPicture(goodsFile.getFileUrl());
|
}else if(goodsFile.getFileType()==2){
|
appGoodsInfoVo.setGoodsVideo(goodsFile.getFileUrl());
|
}else if(goodsFile.getFileType()==3){
|
bannerList.add(goodsFile.getFileUrl());
|
}
|
}
|
if(!bannerList.isEmpty()){
|
appGoodsInfoVo.setGoodsBanners(String.join(",", bannerList));
|
}
|
}
|
return appGoodsInfoVo;
|
}
|
|
/**
|
* 分页商户商品列表
|
* @param merGoodsPageDto
|
* @return
|
*/
|
@Override
|
public List<MerGoodsPageVo> pageMerShopGoods(Page page,MerGoodsPageDto merGoodsPageDto){
|
List<MerGoodsPageVo> merGoodsPageVoList = goodsMapper.pageMerShopGoods(page,merGoodsPageDto);
|
return merGoodsPageVoList;
|
|
}
|
|
/**
|
* @description 获取确认次数周期商品
|
* @author jqs
|
* @date 2023/7/31 16:49
|
* @param shopId
|
* @return List<MerGoodsPageVo>
|
*/
|
@Override
|
public List<MerGoodsPageVo> listMerCycleGoods (Long shopId){
|
List<MerGoodsPageVo> merGoodsPageVoList = goodsMapper.listMerCycleGoods(shopId);
|
return merGoodsPageVoList;
|
|
}
|
|
/**
|
* 修改商户商品
|
*
|
* @param merShopGoodsEditDto
|
*/
|
@Override
|
public void editMerShopGoods(MerShopGoodsEditDto merShopGoodsEditDto) {
|
Shop shop = remoteShopService.getShop(merShopGoodsEditDto.getShopId()).getData();
|
if (2 == shop.getShopType()) {
|
Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData();
|
ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(shop.getBelongShopId(), merShopGoodsEditDto.getGoodsId());
|
if (null != shopGoods && 1 == belongShop.getModifyPricePermission()) {
|
throw new ServiceException("经销商开启了统一价格管理");
|
}
|
}
|
|
Goods goods = this.getById(merShopGoodsEditDto.getGoodsId());
|
if (merShopGoodsEditDto.getSalePrice().compareTo(goods.getMininumPrice()) < 0) {
|
throw new ServiceException(AppErrorConstant.SALESPRICE_MIN + goods.getMininumPrice().toString() + "元");
|
}
|
//商户定制价格
|
ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(merShopGoodsEditDto.getShopId(), goods.getGoodsId());
|
if (shopGoods != null) {
|
shopGoods.setSalesPrice(merShopGoodsEditDto.getSalePrice());
|
shopGoods.setServiceNum(merShopGoodsEditDto.getServiceNum());
|
shopGoods.setUpdateTime(new Date());
|
shopGoods.setUpdateUserId(merShopGoodsEditDto.getUserId());
|
} else {
|
shopGoods = new ShopGoods();
|
shopGoods.setDelFlag(0);
|
shopGoods.setShopId(merShopGoodsEditDto.getShopId());
|
shopGoods.setGoodsId(merShopGoodsEditDto.getGoodsId());
|
shopGoods.setSalesPrice(merShopGoodsEditDto.getSalePrice());
|
shopGoods.setServiceNum(merShopGoodsEditDto.getServiceNum());
|
shopGoods.setUpdateTime(new Date());
|
shopGoods.setUpdateUserId(merShopGoodsEditDto.getUserId());
|
}
|
shopGoodsService.saveOrUpdate(shopGoods);
|
}
|
|
/**
|
* 平台分页获取商品
|
* @param page
|
* @param mgtGoodsPageDto
|
* @return
|
*/
|
@Override
|
public List<MgtGoodsPageVo> pageMgtGoods(Page page, MgtGoodsPageDto mgtGoodsPageDto) {
|
// 调用goodsMapper的方法获取MgtGoodsPageVo列表
|
List<MgtGoodsPageVo> mgtGoodsPageVoList = goodsMapper.pageMgtGoods(page, mgtGoodsPageDto);
|
// 如果列表不为空
|
if (mgtGoodsPageVoList != null && !mgtGoodsPageVoList.isEmpty()) {
|
// 获取所有商品分类的ID
|
List<Long> goodsClassIds = mgtGoodsPageVoList.stream()
|
.map(MgtGoodsPageVo::getGoodsClass)
|
.map(Long::valueOf)
|
.collect(Collectors.toList());
|
// 通过远程服务获取商品分类
|
Map<Long, SysClassification> sysClassificationMap = remoteConfigService.getSysClassificationList(goodsClassIds).getData();
|
// 遍历所有商品
|
mgtGoodsPageVoList.forEach(mgtGoodsPageVo -> {
|
// 获取商品分类
|
SysClassification sysClassification = sysClassificationMap.get(Long.valueOf(mgtGoodsPageVo.getGoodsClass()));
|
// 如果商品分类不为空,则设置商品分类名称
|
if (sysClassification != null) {
|
mgtGoodsPageVo.setGoodsClass(sysClassification.getClassName());
|
}
|
});
|
}
|
// 返回处理后的商品列表
|
return mgtGoodsPageVoList;
|
}
|
|
/**
|
*
|
* @return
|
*/
|
@Override
|
public MgtGoodsTotalVo getMgtGoodsTotal(){
|
MgtGoodsTotalVo goodsTotalVo = goodsMapper.getMgtGoodsTotal();
|
LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(Goods::getDelFlag,0);
|
goodsTotalVo.setGoodsTotal(this.count(queryWrapper));
|
return goodsTotalVo;
|
}
|
|
/**
|
* @description: editMgtGoods
|
* @param: mgtGoodsEditDto
|
* @return: void
|
* @author jqs34
|
* @date: 2023/6/4 15:37
|
*/
|
@Override
|
public void editMgtGoods(MgtGoodsEditDto mgtGoodsEditDto) {
|
Goods goods;
|
Boolean newGoods = false;
|
String goodsId = mgtGoodsEditDto.getGoodsId();
|
Goods goodsSame = this.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getDelFlag,0).eq(Goods::getGoodsName,mgtGoodsEditDto.getGoodsName()));
|
// 创建MgtClassNumDto对象
|
MgtClassNumDto mgtClassNumDto = new MgtClassNumDto();
|
if(mgtGoodsEditDto.getGoodsType()!=1){
|
mgtGoodsEditDto.setCycleNumFlag(1);
|
}else{
|
if(mgtGoodsEditDto.getCycleNumFlag()==null){
|
throw new ServiceException("周期商品需选择是否明确次数");
|
}
|
}
|
// 判断是否有商品ID 没有则新建
|
if (StringUtils.isNotBlank(goodsId)) {
|
if(goodsSame!=null&&!Objects.equals(goodsSame.getGoodsId(), goodsId)){
|
throw new ServiceException(AppErrorConstant.GOODS_DOUBLE);
|
}
|
goods = this.getById(goodsId);
|
if(goods.getGoodsStatus()==-1){
|
throw new ServiceException(AppErrorConstant.GOODS_DELETED);
|
}
|
//删除历史数据
|
goodsFileService.deleteByGoodsId(goodsId);
|
// 如果类别ID不为空并且文章的类别ID不为空并且类别ID不同,则设置子类别ID和新增类别ID
|
if (mgtGoodsEditDto.getGoodsClassId() != null && goods.getGoodsClassId() != null
|
&& !mgtGoodsEditDto.getGoodsClassId().equals(goods.getGoodsClassId())) {
|
mgtClassNumDto.setSubClassId(goods.getGoodsClassId());
|
mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
|
}
|
// 如果类别ID不为空并且文章的类别ID为空,则设置新增类别ID
|
else if (mgtGoodsEditDto.getGoodsClassId() != null && goods.getGoodsClassId() == null) {
|
mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
|
}
|
} else {
|
if(goodsSame!=null){
|
throw new ServiceException(AppErrorConstant.GOODS_DOUBLE);
|
}
|
goods = new Goods();
|
goodsId = IdUtils.simpleUUID();
|
goods.setGoodsId(goodsId);
|
goods.setDelFlag(0);
|
goods.setGoodsNo(CodeFactoryUtil.getGoodsNo());
|
goods.setCreateTime(new Date());
|
goods.setCreateUserId(mgtGoodsEditDto.getUserId());
|
newGoods = true;
|
mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
|
}
|
goods.setUpdateTime(new Date());
|
goods.setUpdateUserId(mgtGoodsEditDto.getUserId());
|
goods.setGoodsStatus(mgtGoodsEditDto.getGoodsStatus());
|
goods.setGoodsType(mgtGoodsEditDto.getGoodsType());
|
goods.setGoodsClassId(mgtGoodsEditDto.getGoodsClassId());
|
goods.setGoodsName(mgtGoodsEditDto.getGoodsName());
|
goods.setCycleNumFlag(mgtGoodsEditDto.getCycleNumFlag());
|
goods.setServiceNum(mgtGoodsEditDto.getServiceNum());
|
goods.setGoodsIntroduction(mgtGoodsEditDto.getGoodsIntroduction());
|
goods.setSalesPrice(mgtGoodsEditDto.getSalesPrice());
|
goods.setMininumPrice(mgtGoodsEditDto.getMininumPrice());
|
if (mgtGoodsEditDto.getSubscription() != null && mgtGoodsEditDto.getSubscription().compareTo(BigDecimal.valueOf(0)) > 0) {
|
goods.setSubscriptionFlag(1);
|
} else {
|
goods.setSubscriptionFlag(0);
|
}
|
goods.setSubscription(mgtGoodsEditDto.getSubscription());
|
String goodsDetail = mgtGoodsEditDto.getGoodsDetail();
|
if(StringUtils.isNotBlank(goodsDetail)){
|
byte[] decodedBytes = Base64.getDecoder().decode(goodsDetail);
|
goodsDetail = new String(decodedBytes, StandardCharsets.UTF_8);
|
goods.setGoodsDetail(goodsDetail);
|
}
|
goods.setRecommendFlag(0);
|
goods.setGoodsNurses(mgtGoodsEditDto.getGoodsNurses());
|
goods.setGoodsTags(mgtGoodsEditDto.getGoodsTags());
|
this.saveOrUpdate(goods);
|
//商品图片视频处理
|
final String goodsIdFinal = goodsId;
|
saveGoodsFiles(goodsIdFinal, mgtGoodsEditDto.getGoodsPicture(), 1);
|
saveGoodsFiles(goodsIdFinal, mgtGoodsEditDto.getGoodsVideo(), 2);
|
saveGoodsFiles(goodsIdFinal, mgtGoodsEditDto.getGoodsBanners(), 3);
|
//如果是新建商品创建商品统计
|
if (newGoods) {
|
GoodsTotal goodsTotal = new GoodsTotal();
|
goodsTotal.setGoodsId(goodsId);
|
goodsTotal.setBuyCount(0);
|
goodsTotal.setBuyNumCount(0);
|
goodsTotal.setBuyUserCount(0);
|
goodsTotal.setBuyMoneyTotal(new BigDecimal("0.00"));
|
goodsTotalService.saveOrUpdate(goodsTotal);
|
}
|
//更新商品分类统计
|
remoteConfigService.changeClassNum(mgtClassNumDto);
|
}
|
|
/**
|
* @description: 处理商品文件
|
* @param: goodsId fileUrls fileType
|
* @return: void
|
* @author jqs34
|
* @date: 2023/6/4 16:25
|
*/
|
private void saveGoodsFiles(String goodsId, String fileUrls, int fileType) {
|
if (StringUtils.isNotEmpty(fileUrls)) {
|
List<GoodsFile> files = Arrays.stream(fileUrls.split(","))
|
.map(str -> {
|
GoodsFile goodsFile = new GoodsFile();
|
goodsFile.setDelFlag(0);
|
goodsFile.setGoodsId(goodsId);
|
goodsFile.setFileType(fileType);
|
goodsFile.setFileUrl(str);
|
return goodsFile;
|
})
|
.collect(Collectors.toList());
|
// 保存文件列表
|
goodsFileService.saveBatch(files);
|
}
|
}
|
|
/**
|
* @description: 上下架
|
* @author jqs
|
* @date 2023/6/5 17:21
|
* @version 1.0
|
*/
|
@Override
|
public void upDownMgtGoods(MgtGoodsUpDownDto mgtGoodsUpDownDto){
|
Goods goods = this.getById(mgtGoodsUpDownDto.getGoodsId());
|
if(goods.getGoodsStatus()==-1){
|
throw new ServiceException(AppErrorConstant.GOODS_DELETED);
|
}
|
goods.setGoodsStatus(mgtGoodsUpDownDto.getGoodsStatus());
|
goods.setUpdateTime(new Date());
|
goods.setUpdateUserId(mgtGoodsUpDownDto.getUserId());
|
this.saveOrUpdate(goods);
|
}
|
|
/**
|
* @description 推荐商品
|
* @author jqs
|
* @date 2023/6/5 17:32
|
* @param mgtGoodsRecommendDto
|
* @return void
|
*/
|
@Override
|
public void recommendMgtGoods(MgtGoodsRecommendDto mgtGoodsRecommendDto){
|
Goods goods = this.getById(mgtGoodsRecommendDto.getGoodsId());
|
if(goods.getGoodsStatus()==-1){
|
throw new ServiceException(AppErrorConstant.GOODS_DELETED);
|
}
|
goods.setRecommendFlag(mgtGoodsRecommendDto.getRecommendFlag());
|
goods.setUpdateTime(new Date());
|
goods.setUpdateUserId(mgtGoodsRecommendDto.getUserId());
|
this.saveOrUpdate(goods);
|
}
|
|
/**
|
* @description 删除商品
|
* @author jqs
|
* @date 2023/6/5 17:36
|
* @param goodsId
|
* @return void
|
*/
|
@Override
|
public void deleteMgtGoods(String goodsId,Long userId){
|
Goods goods = this.getById(goodsId);
|
goods.setDelFlag(1);
|
goods.setGoodsStatus(-1);
|
goods.setUpdateTime(new Date());
|
goods.setUpdateUserId(userId);
|
this.saveOrUpdate(goods);
|
if(goods.getGoodsClassId()!=null){
|
MgtClassNumDto mgtClassNumDto = new MgtClassNumDto();
|
mgtClassNumDto.setSubClassId(goods.getGoodsClassId());
|
//更新商品分类统计
|
remoteConfigService.changeClassNum(mgtClassNumDto);
|
}
|
}
|
|
/**
|
* @description 删除商品分类
|
* @author jqs
|
* @date 2023/6/8 10:31
|
* @param classId
|
* @return void
|
*/
|
@Override
|
public void deleteGoodsClass(Long classId){
|
goodsMapper.deleteGoodsClass(classId);
|
}
|
|
/**
|
* @description 删除商品标签
|
* @author jqs
|
* @date 2023/6/8 17:02
|
* @param goodsTag
|
* @return void
|
*/
|
@Override
|
public void deleteGoodsTag(String goodsTag){
|
goodsMapper.deleteGoodsTag(goodsTag);
|
}
|
|
/**
|
* @description 通过id获取商品列表
|
* @author jqs
|
* @date 2023/6/13 15:55
|
* @param goodsIds
|
* @return List<Goods>
|
*/
|
@Override
|
public List<Goods> listGoodsByGoodsId(String goodsIds){
|
return goodsMapper.listGoodsByGoodsId(goodsIds);
|
}
|
|
/**
|
* @description 分页获取商品选择列表
|
* @author jqs
|
* @date 2023/6/13 16:33
|
* @param page
|
* @param mgtSelectGoodsPageDto
|
* @return List<MgtSelectGoodsPageVo>
|
*/
|
@Override
|
public List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page, MgtSelectGoodsPageDto mgtSelectGoodsPageDto){
|
return goodsMapper.pageMgtSelectGoods(page, mgtSelectGoodsPageDto);
|
}
|
|
/**
|
* @description 通过id获取商品列表
|
* @author jqs
|
* @date 2023/7/3 9:58
|
* @param merGoodsPriceListDto
|
* @return List<MerGoodsPriceListVo>
|
*/
|
@Override
|
public List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(MerGoodsPriceListDto merGoodsPriceListDto){
|
return goodsMapper.listGoodsPriceByGoodsId(merGoodsPriceListDto.getShopId(),merGoodsPriceListDto.getGoodsIds());
|
}
|
|
|
/**
|
* @description 分页获取活动商品
|
* @author jqs
|
* @date 2023/7/6 9:40
|
* @param page
|
* @param appActivityGoodsPageDto
|
* @return List<AppSimpleActivityGoodsVo>
|
*/
|
@Override
|
public List<AppSimpleActivityGoodsVo> pageAppActivityGoods(Page page, AppActivityGoodsPageDto appActivityGoodsPageDto){
|
// 获取搜索结果的商品列表
|
List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsMapper.pageAppActivityGoods(page, appActivityGoodsPageDto);
|
// 计算销售百分比和设置时间戳
|
for (AppSimpleActivityGoodsVo appSimpleActivityGoodsVo : appSimpleGoodsVoList) {
|
int activityNumber = appSimpleActivityGoodsVo.getActivityNumber();
|
int salesNumber = appSimpleActivityGoodsVo.getSalesNumber();
|
BigDecimal salesPercent = BigDecimal.ZERO;
|
// 计算销售百分比
|
if (activityNumber != 0) {
|
salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber),2, BigDecimal.ROUND_HALF_UP);
|
}
|
// 设置销售百分比和时间戳
|
appSimpleActivityGoodsVo.setSalesPercent(salesPercent);
|
appSimpleActivityGoodsVo.setTimestamp(appSimpleActivityGoodsVo.getEndTime().getTime());
|
//限购判断
|
if(appSimpleActivityGoodsVo.getPurchaseLimitationFlag()==1){
|
Integer buyNum = activityRecordService.getUserActivityGoodsNum(appSimpleActivityGoodsVo.getGoodsId(),appActivityGoodsPageDto.getActivityId(),appActivityGoodsPageDto.getUserId());
|
Integer limitBuyNum = appSimpleActivityGoodsVo.getLimitNumber() - buyNum;
|
appSimpleActivityGoodsVo.setAvailableBuyNum(limitBuyNum);
|
}
|
}
|
// 返回结果
|
return appSimpleGoodsVoList;
|
}
|
|
/**
|
* @description 获取商品编辑详情
|
* @author jqs
|
* @date 2023/7/11 16:48
|
* @param mgtBaseGetDto
|
* @return MgtGoodsEditInfoVo
|
*/
|
@Override
|
public MgtGoodsEditInfoVo getMgtGoodsEditInfo(MgtBaseGetDto mgtBaseGetDto){
|
MgtGoodsEditInfoVo mgtGoodsEditInfoVo = new MgtGoodsEditInfoVo();
|
Goods goods = this.getById(mgtBaseGetDto.getId());
|
BeanUtils.copyProperties(goods,mgtGoodsEditInfoVo);
|
if(goods.getSubscriptionFlag()==0){
|
mgtGoodsEditInfoVo.setSubscription(null);
|
}
|
List<GoodsFile> goodsFileList = goodsFileService.listByGoodsId(goods.getGoodsId());
|
if(goodsFileList!=null&&!goodsFileList.isEmpty()){
|
StringJoiner goodsBannersSj = new StringJoiner(",");
|
for(GoodsFile goodsFile : goodsFileList){
|
if(goodsFile.getFileType()==1){
|
mgtGoodsEditInfoVo.setGoodsPicture(goodsFile.getFileUrl());
|
}else if(goodsFile.getFileType()==2){
|
mgtGoodsEditInfoVo.setGoodsVideo(goodsFile.getFileUrl());
|
}else if(goodsFile.getFileType()==3){
|
goodsBannersSj.add(goodsFile.getFileUrl());
|
}
|
}
|
if(goodsBannersSj!=null){
|
mgtGoodsEditInfoVo.setGoodsBanners(goodsBannersSj.toString());
|
}
|
}
|
return mgtGoodsEditInfoVo;
|
}
|
|
/**
|
* @description 获取商品分类名
|
* @author jqs
|
* @date 2023/8/12 18:33
|
* @param classId
|
* @return List<String>
|
*/
|
@Override
|
public List<String> listGoodsNameByGoodsClass(Long classId){
|
List<String> goodsNameList = goodsMapper.listGoodsNameByGoodsClass(classId);
|
return goodsNameList;
|
}
|
|
@Override
|
public List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page,PageShopMgtGoodsDTO pageShopMgtGoodsDTO) {
|
//1.查找门店
|
Shop shop = remoteShopService.getShop(pageShopMgtGoodsDTO.getShopId()).getData();
|
if (null == shop || shop.getDelFlag() != 0 || shop.getShopStatus() == -1) {
|
return Collections.emptyList();
|
}
|
List<Shop> shops = new ArrayList<>();
|
//2.判断门店是否经销商
|
if (shop.getShopType()==1){
|
//经销商 获取下级-加盟商ids
|
shops = remoteShopService.getFranchiseeIdsBYDealerId(shop.getShopId());
|
}
|
//将该门店加入
|
shops.add(shop);
|
List<Long> shopIds = shops.stream().map(Shop::getShopId).collect(Collectors.toList());
|
//查询信息
|
pageShopMgtGoodsDTO.setShopIds(shopIds);
|
//3.根据shopId查询商品信息
|
List<PageShopMgtGoodsVO> list= goodsMapper.pageShopMgtGoods(page,pageShopMgtGoodsDTO);
|
|
if (list != null && !list.isEmpty()) {
|
//4.商品分类
|
// 获取所有商品分类的ID
|
List<Long> goodsClassIds = list.stream()
|
.map(PageShopMgtGoodsVO::getGoodsClass)
|
.map(Long::valueOf)
|
.collect(Collectors.toList());
|
// 通过远程服务获取商品分类
|
Map<Long, SysClassification> sysClassificationMap = remoteConfigService.getSysClassificationList(goodsClassIds).getData();
|
// 遍历所有商品
|
list.forEach(mgtGoodsPageVo -> {
|
// 获取商品分类
|
SysClassification sysClassification = sysClassificationMap.get(Long.valueOf(mgtGoodsPageVo.getGoodsClass()));
|
// 如果商品分类不为空,则设置商品分类名称
|
if (sysClassification != null) {
|
mgtGoodsPageVo.setGoodsClass(sysClassification.getClassName());
|
}
|
});
|
Map<Long, Shop> shopMap = shops.stream()
|
.collect(Collectors.toMap(
|
Shop::getShopId, // 键映射函数
|
shop1 -> shop1 // 值映射函数
|
));
|
//5.门店信息
|
list.forEach(mgtGoodsPageVo -> {
|
// 获取门店信息
|
Shop shopInfo = shopMap.get(Long.valueOf(mgtGoodsPageVo.getBindShopId()));
|
// 如果门店信息不为空,则设置门店信息
|
if (shopInfo != null) {
|
mgtGoodsPageVo.setShopName(shopInfo.getShopName());
|
mgtGoodsPageVo.setModifyPricePermission(shop.getModifyPricePermission());
|
}
|
});
|
|
}
|
|
|
|
return list;
|
}
|
@Resource
|
private RemoteOrderService remoteOrderService;
|
@Override
|
public StaticsShopMgtGoodsVO staticsShopMgtGoods(PageShopMgtGoodsDTO pageShopMgtGoodsDTO) {
|
StaticsShopMgtGoodsVO vo = new StaticsShopMgtGoodsVO();
|
|
//1.查找门店
|
Shop shop = remoteShopService.getShop(pageShopMgtGoodsDTO.getShopId()).getData();
|
if (null == shop || shop.getDelFlag() != 0 || shop.getShopStatus() == -1) {
|
return vo;
|
}
|
List<Shop> shops = new ArrayList<>();
|
//2.判断门店是否经销商
|
if (shop.getShopType()==1){
|
//经销商 获取下级-加盟商ids
|
shops = remoteShopService.getFranchiseeIdsBYDealerId(shop.getShopId());
|
}
|
//将该门店加入
|
shops.add(shop);
|
List<Long> shopIds = shops.stream().map(Shop::getShopId).collect(Collectors.toList());
|
//查询信息
|
pageShopMgtGoodsDTO.setShopIds(shopIds);
|
//3.根据shopId查询商品ids
|
List<String> goodsId= goodsMapper.staticsShopMgtGoods(pageShopMgtGoodsDTO);
|
|
//查询商品销量 销售额
|
return remoteOrderService.getGoodsSellStatic(goodsId).getData();
|
}
|
@Override
|
public R<Void> updateGoodsPrice(UpdateGoodsPriceDTO updateGoodsPriceDTO) {
|
//判断当前登录人员类型
|
SysUser sysUser = SecurityUtils.getSysUser();
|
if ("01".equals(sysUser.getUserType())){
|
//B端
|
Shop shop = remoteShopService.getShop(updateGoodsPriceDTO.getShopId()).getData();
|
if (null == shop || shop.getDelFlag() != 0 || shop.getShopStatus() == -1) {
|
return R.fail("该门店不存在");
|
}
|
//判断是否经销商 是否开启价格修改权限
|
int modifyPricePermission = shop.getModifyPricePermission()==null?0:shop.getModifyPricePermission();
|
if (1 != shop.getShopType() || 1 != modifyPricePermission){
|
return R.fail("权限不足");
|
}
|
}else if (!"00".equals(sysUser.getUserType())){
|
//也不是平台
|
return R.fail("用户类型错误");
|
}
|
//修改门店内商品价格
|
ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(updateGoodsPriceDTO.getBindShopId(), String.valueOf(updateGoodsPriceDTO.getGoodsId()));
|
if (null == shopGoods || shopGoods.getDelFlag() != 0){
|
return R.fail("该门店不存在该商品");
|
}
|
shopGoods.setUpdateUserId(sysUser.getUserId());
|
shopGoods.setSalesPrice(updateGoodsPriceDTO.getGoodsPrice());
|
shopGoodsService.updateById(shopGoods);
|
return R.ok();
|
}
|
}
|