jiangqs
2023-06-30 cbc564a7088503ad8cc7af4e1d2ba417d061e615
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
@@ -11,10 +11,15 @@
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;
@@ -37,6 +42,13 @@
    @Resource
    private UserServiceRecordService userServiceRecordService;
    @Resource
    private RemoteMemberService remoteMemberService;
    @Resource
    private RemoteShopService remoteShopService;
    /**
     * 获取用户服务
     * @param page
@@ -74,12 +86,63 @@
        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);
        }
    }
@@ -89,62 +152,118 @@
     */
    @Override
    public void useMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){
        List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if(merSureConsumerGoodsListDtoList!=null && !merSureConsumerGoodsListDtoList.isEmpty()){
            ConsumerGoods consumerGoods;
        List<MerSureConsumerGoodsListDto> goodsList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if (goodsList != null && !goodsList.isEmpty()) {
            ConsumerGoods goods;
            Integer serviceNum;
            Integer usedNum;
            Integer useNum;
            Integer surpNum;
            Integer surplusNum;
            Long shopId = null;
            Long userId = null;
            String consumerGoodsNames = "";
            String consumerGoodsIds = "";
            String goodsNames = "";
            String goodsIds = "";
            Integer serviceType = 1;
            for(MerSureConsumerGoodsListDto merSureConsumerGoodsListDto : merSureConsumerGoodsListDtoList){
                consumerGoods = this.getById(merSureConsumerGoodsListDto.getConsumerGoodsId());
                serviceNum = consumerGoods.getServiceNum();
                usedNum = consumerGoods.getUsedNum();
                surpNum = serviceNum - usedNum;
                useNum = merSureConsumerGoodsListDto.getServiceNum();
                if(useNum>surpNum){
            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);
                }
                consumerGoods.setUsedNum(usedNum+useNum);
                consumerGoods.setUseTime(new Date());
                if(consumerGoods.getUsedNum().equals(serviceNum)){
                    consumerGoods.setServiceStatus(2);
                    consumerGoods.setCompleteTime(new Date());
                goods.setUsedNum(usedNum + useNum);
                goods.setUseTime(new Date());
                //判断商品是否已使用完
                if (goods.getUsedNum().equals(serviceNum)) {
                    goods.setServiceStatus(2);
                    goods.setCompleteTime(new Date());
                }
                this.saveOrUpdate(consumerGoods);
                shopId = consumerGoods.getShopId();
                userId= consumerGoods.getUserId();
                serviceType = consumerGoods.getGoodsType();
                if(StringUtils.isBlank(consumerGoodsIds)){
                    consumerGoodsIds = consumerGoods.getConsumerGoodsId();
                }else{
                    consumerGoodsIds = consumerGoodsIds + "," + consumerGoods.getConsumerGoodsId();
                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(consumerGoodsNames)){
                    consumerGoodsNames = consumerGoods.getGoodsName();
                }else{
                    consumerGoodsNames = consumerGoodsNames + "、" + consumerGoods.getGoodsName();
                //拼接商品名称
                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;
                }
            }
            UserServiceRecord userServiceRecord = new UserServiceRecord();
            userServiceRecord.setCreateTime(new Date());
            userServiceRecord.setServiceType(serviceType);
            userServiceRecord.setDelFlag(0);
            userServiceRecord.setShopId(shopId);
            userServiceRecord.setUserId(userId);
            userServiceRecord.setConsumerGoodsIds(consumerGoodsIds);
            userServiceRecord.setConsumerGoodsNames(consumerGoodsNames);
            userServiceRecordService.saveOrUpdate(userServiceRecord);
            //判断是否减人
            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
@@ -154,4 +273,17 @@
        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);
    }
}