bug
jiangqs
2023-08-25 156e141e55a8abf486157d1fa89d25e23f4a06a3
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
@@ -8,6 +8,7 @@
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.ruoyi.order.domain.pojo.order.ServiceRecordDetail;
import com.ruoyi.order.domain.pojo.order.UserServiceRecord;
import com.ruoyi.order.domain.vo.AppConsumerPageVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo;
@@ -15,19 +16,22 @@
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.ServiceRecordDetailService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.order.util.MsgUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.AppShopGoodsGetDto;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
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.member.Member;
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
@@ -59,6 +63,9 @@
    @Resource
    private RemoteGoodsService remoteGoodsService;
    @Resource
    private ServiceRecordDetailService serviceRecordDetailService;
    /**
     * 获取用户服务
@@ -93,7 +100,12 @@
     * @param merSureConsumerGoodsDto
     */
    @Override
    @Transactional
    public void sureMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){
        ConsumerGoods oldConsumerGoods = this.getById(merSureConsumerGoodsDto.getConsumerGoodsId());
        if(oldConsumerGoods.getSureNum()==null||oldConsumerGoods.getSureNum()<1){
            throw new ServiceException(AppErrorConstant.GOODS_SURE_FAILED);
        }
        List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if(merSureConsumerGoodsListDtoList!=null && !merSureConsumerGoodsListDtoList.isEmpty()){
            ConsumerGoods consumerGoods;
@@ -104,27 +116,69 @@
            Integer servicePerson = 0;
            Integer experienceService = 0;
            Integer experiencePerson = 0;
            Goods goods;
            GoodsFile goodsFile;
            String consumerGoodsId;
            List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
            MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getUserId(), merSureConsumerGoodsDto.getShopId());
            int sureNum = 0;
            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;
                goods = remoteGoodsService.getGoods(merSureConsumerGoodsListDto.getGoodsId()).getData();
                goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
                if(goods!=null&&goods.getGoodsType()==1&&goods.getCycleNumFlag()==1){
                    for(int i=0;i<merSureConsumerGoodsListDto.getGoodsNum();i++){
                        consumerGoods = new ConsumerGoods();
                        consumerGoodsId = IdUtils.simpleUUID();
                        consumerGoods.setConsumerGoodsId(consumerGoodsId);
                        consumerGoods.setDelFlag(0);
                        consumerGoods.setServiceStatus(1);
                        consumerGoods.setShopId(merSureConsumerGoodsDto.getShopId());
                        consumerGoods.setUserId(merSureConsumerGoodsDto.getMemberUserId());
                        consumerGoods.setOrderId(oldConsumerGoods.getOrderId());
                        consumerGoods.setOrderGoodsId(oldConsumerGoods.getOrderGoodsId());
                        consumerGoods.setGoodsId(goods.getGoodsId());
                        consumerGoods.setGoodsName(goods.getGoodsName());
                        consumerGoods.setCycleNumFlag(goods.getCycleNumFlag());
                        consumerGoods.setServiceNum(goods.getServiceNum());
                        consumerGoods.setUsedNum(0);
                        consumerGoods.setCreateTime(new Date());
                        consumerGoods.setGoodsType(goods.getGoodsType());
                        consumerGoods.setGoodsTag(goods.getGoodsTags());
                        consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                        consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
                        consumerGoods.setGoodsNurses(goods.getGoodsNurses());
                        consumerGoods.setSourceFrom(1);
                        consumerGoodsList.add(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;
                        }
                        sureNum = sureNum + 1;
                    }
                }
            }
            if(sureNum>oldConsumerGoods.getSureNum()){
                throw new ServiceException(AppErrorConstant.GOODS_SURE_FAILED);
            }else{
                int surpNum = oldConsumerGoods.getSureNum();
                surpNum = surpNum - sureNum;
                oldConsumerGoods.setSureNum(surpNum);
                if(surpNum==0){
                    oldConsumerGoods.setDelFlag(1);
                }
                this.saveOrUpdate(oldConsumerGoods);
            }
            this.saveBatch(consumerGoodsList);
            //判断是否加人
            if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
                cyclePerson = 1;
@@ -142,7 +196,7 @@
            memberTotalChangeDto.setTypeService(1);
            memberTotalChangeDto.setServiceCount(serviceCount);
            remoteMemberService.changeMemberTotal(memberTotalChangeDto);
            ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
            /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
            shopTotalChangeDto.setShopId(merSureConsumerGoodsDto.getShopId());
            shopTotalChangeDto.setTypeCycleService(1);
            shopTotalChangeDto.setCycleService(cycleService);
@@ -153,7 +207,7 @@
            shopTotalChangeDto.setTypeExperienceService(1);
            shopTotalChangeDto.setExperienceService(experienceService);
            shopTotalChangeDto.setExperiencePerson(experiencePerson);
            remoteShopService.changeShopTotal(shopTotalChangeDto);
            remoteShopService.changeShopTotal(shopTotalChangeDto);*/
        }
    }
@@ -162,10 +216,11 @@
     * @param merSureConsumerGoodsDto
     */
    @Override
    @Transactional
    public void useMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){
        List<MerSureConsumerGoodsListDto> goodsList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if (goodsList != null && !goodsList.isEmpty()) {
            ConsumerGoods goods;
            ConsumerGoods consumerGoods;
            Integer serviceNum;
            Integer usedNum;
            Integer useNum;
@@ -183,42 +238,46 @@
            Integer experienceService = 0;
            Integer experiencePerson = 0;
            //获取会员商品总数
            MerMemberConsumerGoodsTotalVo memberGoodsTotal = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getUserId(), merSureConsumerGoodsDto.getShopId());
            List<ServiceRecordDetail> serviceRecordDetailList = new ArrayList<>();
            ServiceRecordDetail serviceRecordDetail;
            MerMemberConsumerGoodsTotalVo memberGoodsTotal = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getMemberUserId(), merSureConsumerGoodsDto.getShopId());
            List<String> consumerGoodsList = new ArrayList<>();
            for (MerSureConsumerGoodsListDto goodsDto : goodsList) {
                goods = this.getById(goodsDto.getConsumerGoodsId());
                serviceNum = goods.getServiceNum();
                usedNum = goods.getUsedNum();
                consumerGoods = this.getById(goodsDto.getConsumerGoodsId());
                serviceRecordDetail = new ServiceRecordDetail();
                serviceNum = consumerGoods.getServiceNum();
                usedNum = consumerGoods.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());
                consumerGoods.setUsedNum(usedNum + useNum);
                consumerGoods.setUseTime(new Date());
                //判断商品是否已使用完
                if (goods.getUsedNum().equals(serviceNum)) {
                    goods.setServiceStatus(2);
                    goods.setCompleteTime(new Date());
                if (consumerGoods.getUsedNum().equals(serviceNum)) {
                    consumerGoods.setServiceStatus(2);
                    consumerGoods.setCompleteTime(new Date());
                }
                this.saveOrUpdate(goods);
                shopId = goods.getShopId();
                userId = goods.getUserId();
                serviceType = goods.getGoodsType();
                this.saveOrUpdate(consumerGoods);
                shopId = consumerGoods.getShopId();
                userId = consumerGoods.getUserId();
                serviceType = consumerGoods.getGoodsType();
                //拼接商品ID
                if (StringUtils.isBlank(goodsIds)) {
                    goodsIds = goods.getConsumerGoodsId();
                    goodsIds = consumerGoods.getConsumerGoodsId();
                } else {
                    goodsIds = goodsIds + "," + goods.getConsumerGoodsId();
                    goodsIds = goodsIds + "," + consumerGoods.getConsumerGoodsId();
                }
                //拼接商品名称
                if (StringUtils.isBlank(goodsNames)) {
                    goodsNames = goods.getGoodsName();
                    goodsNames = consumerGoods.getGoodsName();
                } else {
                    goodsNames = goodsNames + "、" + goods.getGoodsName();
                    goodsNames = goodsNames + "、" + consumerGoods.getGoodsName();
                }
                //处理商品服务次数
                switch (goods.getGoodsType()) {
                switch (consumerGoods.getGoodsType()) {
                    case 1:
                        cycleService = cycleService + useNum;
                        break;
@@ -231,7 +290,17 @@
                    default:
                        break;
                }
                serviceRecordDetail.setDelFlag(0);
                serviceRecordDetail.setConsumerGoodsId(consumerGoods.getConsumerGoodsId());
                serviceRecordDetail.setConsumerGoodsName(consumerGoods.getGoodsName());
                serviceRecordDetail.setServiceNum(consumerGoods.getServiceNum());
                serviceRecordDetail.setSurpNum(consumerGoods.getServiceNum()-consumerGoods.getUsedNum());
                if(serviceRecordDetail.getSurpNum()==0){
                    consumerGoodsList.add(consumerGoods.getGoodsName());
                }
                serviceRecordDetailList.add(serviceRecordDetail);
            }
            //判断是否减人
            if (cycleService > 0 && memberGoodsTotal.getCycleOrder() - cycleService < 1) {
                cyclePerson = 1;
@@ -252,13 +321,17 @@
            serviceRecord.setConsumerGoodsIds(goodsIds);
            serviceRecord.setConsumerGoodsNames(goodsNames);
            userServiceRecordService.saveOrUpdate(serviceRecord);
            for(ServiceRecordDetail serviceRecordDetail1 : serviceRecordDetailList){
                serviceRecordDetail1.setRecordId(serviceRecord.getId());
            }
            serviceRecordDetailService.saveBatch(serviceRecordDetailList);
            //更新商户和会员服务统计
            MemberTotalChangeDto memberTotalChange = new MemberTotalChangeDto();
            memberTotalChange.setUserId(merSureConsumerGoodsDto.getUserId());
            memberTotalChange.setUserId(merSureConsumerGoodsDto.getMemberUserId());
            memberTotalChange.setTypeService(2);
            memberTotalChange.setServiceCount(serviceCount);
            remoteMemberService.changeMemberTotal(memberTotalChange);
            ShopTotalChangeDto shopTotalChange = new ShopTotalChangeDto();
            /*ShopTotalChangeDto shopTotalChange = new ShopTotalChangeDto();
            shopTotalChange.setShopId(merSureConsumerGoodsDto.getShopId());
            shopTotalChange.setTypeCycleService(2);
            shopTotalChange.setCycleService(cycleService);
@@ -269,7 +342,15 @@
            shopTotalChange.setTypeExperienceService(2);
            shopTotalChange.setExperienceService(experienceService);
            shopTotalChange.setExperiencePerson(experiencePerson);
            remoteShopService.changeShopTotal(shopTotalChange);
            remoteShopService.changeShopTotal(shopTotalChange);*/
            if(!consumerGoodsList.isEmpty()){
                Member member = remoteMemberService.getMember(userId).getData();
                try {
                    MsgUtils.sendMsg(member.getMobile(),null,null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
@@ -354,6 +435,7 @@
                consumerGoods.setUsedNum(0);
                consumerGoods.setCreateTime(new Date());
                consumerGoods.setGoodsType(goods.getGoodsType());
                consumerGoods.setGoodsTag(goods.getGoodsTags());
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
@@ -393,13 +475,19 @@
            //处理商品服务次数
            switch (consumerGoods.getGoodsType()) {
                case 1:
                    cycleService = cycleService + consumerGoods.getServiceNum();
                    if(consumerGoods.getServiceNum()!=null){
                        cycleService = cycleService + consumerGoods.getServiceNum();
                    }
                    break;
                case 2:
                    serviceService = serviceService + consumerGoods.getServiceNum();
                    if(consumerGoods.getServiceNum()!=null){
                        serviceService = serviceService + consumerGoods.getServiceNum();
                    }
                    break;
                case 3:
                    experienceService = experienceService + consumerGoods.getServiceNum();
                    if(consumerGoods.getServiceNum()!=null) {
                        experienceService = experienceService + consumerGoods.getServiceNum();
                    }
                    break;
                default:
                    break;
@@ -422,8 +510,9 @@
        memberTotalChangeDto.setTypeService(1);
        memberTotalChangeDto.setServiceCount(serviceCount);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(shopId);
        shopTotalChangeDto.setOrderType(1);
        shopTotalChangeDto.setTypeCycleService(1);
        shopTotalChangeDto.setCycleService(cycleService);
        shopTotalChangeDto.setCyclePerson(cyclePerson);
@@ -433,7 +522,7 @@
        shopTotalChangeDto.setTypeExperienceService(1);
        shopTotalChangeDto.setExperienceService(experienceService);
        shopTotalChangeDto.setExperiencePerson(experiencePerson);
        remoteShopService.changeShopTotal(shopTotalChangeDto);
        remoteShopService.changeShopTotal(shopTotalChangeDto);*/
        return this.saveBatch(consumerGoodsList);
    }
}