package com.ruoyi.order.service.impl.order;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.order.domain.dto.*;
|
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
|
import com.ruoyi.order.domain.pojo.order.UserServiceRecord;
|
import com.ruoyi.order.domain.vo.AppConsumerPageVo;
|
import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo;
|
import com.ruoyi.order.domain.vo.MerConsumerGoodsVo;
|
import com.ruoyi.order.domain.vo.MerMemberConsumerGoodsTotalVo;
|
import com.ruoyi.order.mapper.order.ConsumerGoodsMapper;
|
import com.ruoyi.order.service.order.ConsumerGoodsService;
|
import com.ruoyi.order.service.order.UserServiceRecordService;
|
import com.ruoyi.system.api.constant.AppErrorConstant;
|
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
|
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
|
import com.ruoyi.system.api.service.RemoteMemberService;
|
import com.ruoyi.system.api.service.RemoteShopService;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 服务 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-04-25
|
*/
|
@Service
|
public class ConsumerGoodsServiceImpl extends ServiceImpl<ConsumerGoodsMapper, ConsumerGoods> implements ConsumerGoodsService {
|
|
@Resource
|
private ConsumerGoodsMapper consumerGoodsMapper;
|
|
@Resource
|
private UserServiceRecordService userServiceRecordService;
|
|
@Resource
|
private RemoteMemberService remoteMemberService;
|
|
@Resource
|
private RemoteShopService remoteShopService;
|
|
/**
|
* 获取用户服务
|
* @param page
|
* @param appConsumerPageDto
|
* @return
|
*/
|
@Override
|
public List<AppConsumerPageVo> pageUserConsumerGoods(Page page, AppConsumerPageDto appConsumerPageDto){
|
return consumerGoodsMapper.pageUserConsumerGoods(page, appConsumerPageDto);
|
}
|
|
/**
|
* 获取会员服务商品
|
* @param merConsumerGoodsDto
|
* @return
|
*/
|
@Override
|
public MerConsumerGoodsVo listMerConsumerGoods(MerConsumerGoodsDto merConsumerGoodsDto){
|
MerConsumerGoodsVo merConsumerGoodsVo = new MerConsumerGoodsVo();
|
if(merConsumerGoodsDto.getGoodsType()==1){
|
List<MerConsumerGoodsListVo> noSureList = consumerGoodsMapper.listMerNoSureConsumerGoods(merConsumerGoodsDto);
|
merConsumerGoodsVo.setNoSureList(noSureList);
|
}
|
List<MerConsumerGoodsListVo> sureList = consumerGoodsMapper.listMerConsumerGoods(merConsumerGoodsDto);
|
merConsumerGoodsVo.setSureList(sureList);
|
return merConsumerGoodsVo;
|
}
|
|
/**
|
* 确认商品次数
|
* @param merSureConsumerGoodsDto
|
*/
|
@Override
|
public void sureMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){
|
List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
|
if(merSureConsumerGoodsListDtoList!=null && !merSureConsumerGoodsListDtoList.isEmpty()){
|
ConsumerGoods consumerGoods;
|
Integer serviceCount = 0;
|
Integer cycleService = 0;
|
Integer cyclePerson = 0;
|
Integer serviceService = 0;
|
Integer servicePerson = 0;
|
Integer experienceService = 0;
|
Integer experiencePerson = 0;
|
MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getUserId(), merSureConsumerGoodsDto.getShopId());
|
for(MerSureConsumerGoodsListDto merSureConsumerGoodsListDto : merSureConsumerGoodsListDtoList){
|
consumerGoods = this.getById(merSureConsumerGoodsListDto.getConsumerGoodsId());
|
consumerGoods.setCycleNumFlag(1);
|
consumerGoods.setServiceNum(merSureConsumerGoodsListDto.getServiceNum());
|
this.saveOrUpdate(consumerGoods);
|
//处理商品服务次数
|
switch (consumerGoods.getGoodsType()) {
|
case 1:
|
cycleService = cycleService + consumerGoods.getServiceNum();
|
break;
|
case 2:
|
serviceService = serviceService + consumerGoods.getServiceNum();
|
break;
|
case 3:
|
experienceService = experienceService + consumerGoods.getServiceNum();
|
break;
|
default:
|
break;
|
}
|
}
|
//判断是否加人
|
if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
|
cyclePerson = 1;
|
}
|
if (serviceService > 0 && memberConsumerGoodsTotalVo.getServiceOrder() == 0) {
|
servicePerson = 1;
|
}
|
if (experienceService > 0 && memberConsumerGoodsTotalVo.getExperienceOrder() == 0) {
|
experiencePerson = 1;
|
}
|
serviceCount = cycleService + serviceService + experienceService;
|
//更新商户和会员服务统计
|
MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
|
memberTotalChangeDto.setUserId(merSureConsumerGoodsDto.getUserId());
|
memberTotalChangeDto.setTypeService(1);
|
memberTotalChangeDto.setServiceCount(serviceCount);
|
remoteMemberService.changeMemberTotal(memberTotalChangeDto);
|
ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
|
shopTotalChangeDto.setShopId(merSureConsumerGoodsDto.getShopId());
|
shopTotalChangeDto.setTypeCycleService(1);
|
shopTotalChangeDto.setCycleService(cycleService);
|
shopTotalChangeDto.setCyclePerson(cyclePerson);
|
shopTotalChangeDto.setTypeServiceService(1);
|
shopTotalChangeDto.setServiceService(serviceService);
|
shopTotalChangeDto.setServicePerson(servicePerson);
|
shopTotalChangeDto.setTypeExperienceService(1);
|
shopTotalChangeDto.setExperienceService(experienceService);
|
shopTotalChangeDto.setExperiencePerson(experiencePerson);
|
remoteShopService.changeShopTotal(shopTotalChangeDto);
|
}
|
}
|
|
/**
|
* 确认商品次数
|
* @param merSureConsumerGoodsDto
|
*/
|
@Override
|
public void useMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){
|
List<MerSureConsumerGoodsListDto> goodsList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
|
if (goodsList != null && !goodsList.isEmpty()) {
|
ConsumerGoods goods;
|
Integer serviceNum;
|
Integer usedNum;
|
Integer useNum;
|
Integer surplusNum;
|
Long shopId = null;
|
Long userId = null;
|
String goodsNames = "";
|
String goodsIds = "";
|
Integer serviceType = 1;
|
Integer serviceCount = 0;
|
Integer cycleService = 0;
|
Integer cyclePerson = 0;
|
Integer serviceService = 0;
|
Integer servicePerson = 0;
|
Integer experienceService = 0;
|
Integer experiencePerson = 0;
|
//获取会员商品总数
|
MerMemberConsumerGoodsTotalVo memberGoodsTotal = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getUserId(), merSureConsumerGoodsDto.getShopId());
|
for (MerSureConsumerGoodsListDto goodsDto : goodsList) {
|
goods = this.getById(goodsDto.getConsumerGoodsId());
|
serviceNum = goods.getServiceNum();
|
usedNum = goods.getUsedNum();
|
surplusNum = serviceNum - usedNum;
|
useNum = goodsDto.getServiceNum();
|
//判断使用数量是否超过剩余数量
|
if (useNum > surplusNum) {
|
throw new ServiceException(AppErrorConstant.BEYOND_SURP_NUM);
|
}
|
goods.setUsedNum(usedNum + useNum);
|
goods.setUseTime(new Date());
|
//判断商品是否已使用完
|
if (goods.getUsedNum().equals(serviceNum)) {
|
goods.setServiceStatus(2);
|
goods.setCompleteTime(new Date());
|
}
|
this.saveOrUpdate(goods);
|
shopId = goods.getShopId();
|
userId = goods.getUserId();
|
serviceType = goods.getGoodsType();
|
//拼接商品ID
|
if (StringUtils.isBlank(goodsIds)) {
|
goodsIds = goods.getConsumerGoodsId();
|
} else {
|
goodsIds = goodsIds + "," + goods.getConsumerGoodsId();
|
}
|
//拼接商品名称
|
if (StringUtils.isBlank(goodsNames)) {
|
goodsNames = goods.getGoodsName();
|
} else {
|
goodsNames = goodsNames + "、" + goods.getGoodsName();
|
}
|
//处理商品服务次数
|
switch (goods.getGoodsType()) {
|
case 1:
|
cycleService = cycleService + useNum;
|
break;
|
case 2:
|
serviceService = serviceService + useNum;
|
break;
|
case 3:
|
experienceService = experienceService + useNum;
|
break;
|
default:
|
break;
|
}
|
}
|
//判断是否减人
|
if (cycleService > 0 && memberGoodsTotal.getCycleOrder() - cycleService < 1) {
|
cyclePerson = 1;
|
}
|
if (serviceService > 0 && memberGoodsTotal.getServiceOrder() - serviceService < 1) {
|
servicePerson = 1;
|
}
|
if (experienceService > 0 && memberGoodsTotal.getExperienceOrder() - experienceService < 1) {
|
experiencePerson = 1;
|
}
|
serviceCount = cycleService + serviceService + experienceService;
|
UserServiceRecord serviceRecord = new UserServiceRecord();
|
serviceRecord.setCreateTime(new Date());
|
serviceRecord.setServiceType(serviceType);
|
serviceRecord.setDelFlag(0);
|
serviceRecord.setShopId(shopId);
|
serviceRecord.setUserId(userId);
|
serviceRecord.setConsumerGoodsIds(goodsIds);
|
serviceRecord.setConsumerGoodsNames(goodsNames);
|
userServiceRecordService.saveOrUpdate(serviceRecord);
|
//更新商户和会员服务统计
|
MemberTotalChangeDto memberTotalChange = new MemberTotalChangeDto();
|
memberTotalChange.setUserId(merSureConsumerGoodsDto.getUserId());
|
memberTotalChange.setTypeService(2);
|
memberTotalChange.setServiceCount(serviceCount);
|
remoteMemberService.changeMemberTotal(memberTotalChange);
|
ShopTotalChangeDto shopTotalChange = new ShopTotalChangeDto();
|
shopTotalChange.setShopId(merSureConsumerGoodsDto.getShopId());
|
shopTotalChange.setTypeCycleService(2);
|
shopTotalChange.setCycleService(cycleService);
|
shopTotalChange.setCyclePerson(cyclePerson);
|
shopTotalChange.setTypeServiceService(2);
|
shopTotalChange.setServiceService(serviceService);
|
shopTotalChange.setServicePerson(servicePerson);
|
shopTotalChange.setTypeExperienceService(2);
|
shopTotalChange.setExperienceService(experienceService);
|
shopTotalChange.setExperiencePerson(experiencePerson);
|
remoteShopService.changeShopTotal(shopTotalChange);
|
}
|
}
|
|
/**
|
* 分页获取用户服务次数列表
|
* @param page
|
* @param merConsumerGoodsPageDto
|
* @return
|
*/
|
@Override
|
public List<MerConsumerGoodsListVo> pageMerConsumerGoodsNum(Page page, MerConsumerGoodsPageDto merConsumerGoodsPageDto){
|
List<MerConsumerGoodsListVo> merConsumerGoodsListVos = consumerGoodsMapper.pageMerConsumerGoodsNum(page, merConsumerGoodsPageDto);
|
return merConsumerGoodsListVos;
|
}
|
|
/**
|
* @description 获取用户在商户
|
* @author jqs
|
* @date 2023/6/29 15:13
|
* @param userId
|
* @param shopId
|
* @return MerMemberConsumerGoodsTotalVo
|
*/
|
@Override
|
public MerMemberConsumerGoodsTotalVo getMemberConsumerGoodsTotalVo(Long userId, Long shopId){
|
return consumerGoodsMapper.getMemberConsumerGoodsTotalVo(userId, shopId);
|
}
|
}
|