From 156e141e55a8abf486157d1fa89d25e23f4a06a3 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期五, 25 八月 2023 19:32:30 +0800
Subject: [PATCH] bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java |  183 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 136 insertions(+), 47 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
index b0155f3..df34a6f 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
+++ b/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);
     }
 }

--
Gitblit v1.7.1