From e23c8975e6bb0934cb5db46a94d0f83c9739d9ab Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 20 Mar 2022 16:33:17 +0800
Subject: [PATCH] 重构:套餐项目

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java |  466 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 375 insertions(+), 91 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
index d113cc4..e9416e8 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
@@ -1,25 +1,35 @@
 package com.matrix.system.hive.service.imp;
 
+import cn.hutool.core.collection.CollUtil;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.core.tools.DateUtil;
 import com.matrix.core.tools.WebUtil;
+import com.matrix.system.app.mapper.SysProjUseMapper;
 import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.common.validate.GroupValidateStatusCheckUtil;
 import com.matrix.system.constance.Dictionary;
 import com.matrix.system.hive.bean.*;
 import com.matrix.system.hive.dao.*;
-import com.matrix.system.hive.plugin.util.CollectionUtils;
+import com.matrix.system.hive.dto.ProjUseOperationDto;
+import com.matrix.system.hive.hievEnum.OrderOperationEnum;
 import com.matrix.system.hive.plugin.util.MoneyUtil;
+import com.matrix.system.hive.service.ShoppingGoodsService;
+import com.matrix.system.hive.service.SysBeauticianStateService;
+import com.matrix.system.hive.service.SysProjServicesService;
 import com.matrix.system.hive.service.SysProjUseService;
+import com.matrix.system.hive.validation.ProjUseGroup;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * @date 2016-07-03 20:53
@@ -29,7 +39,11 @@
 
     @Autowired
     private SysProjUseDao sysProjUseDao;
+    @Autowired
+    SysProjServicesService projServicesService;
 
+    @Autowired
+    SysBeauticianStateService sysBeauticianStateService;
 
     @Autowired
     private SysProjuseFreezeDao sysProjuseFreezeDao;
@@ -50,6 +64,14 @@
     @Autowired
     SysVipInfoDao sysVipInfoDao;
 
+    @Autowired
+    ShoppingGoodsService shoppingGoodsService;
+
+    @Autowired
+    BusParameterSettingsDao busParameterSettingsDao;
+
+    @Autowired
+    SysUsersDao sysUsersDao;
 
     @Override
     public int add(SysProjUse sysProjUse) {
@@ -61,7 +83,6 @@
     @Override
     public int modify(SysProjUse sysProjUse) {
         //插入套餐项目操作记录
-
 
 
         return sysProjUseDao.update(sysProjUse);
@@ -221,15 +242,30 @@
                 freeze.setOrderItemId(taocan.getId().toString());
                 freeze.setVipId(taocan.getVipId());
                 SysProjuseFreeze freezeProj = sysProjuseFreezeDao.selectByOrderItemId(freeze);
-                Date dateAfter = DateUtil.nextNDate(taocan.getFailTime(), freezeProj.getGapDays());
-
-                taocan.setFailTime(dateAfter);
+                // todo  因为目前没有在冻结的时候插入冻结记录,所以这里暂时这样处理
+                if (freezeProj != null) {
+                    Date dateAfter = DateUtil.nextNDate(taocan.getFailTime(), freezeProj.getGapDays());
+                    taocan.setFailTime(dateAfter);
+                }
                 break;
             default:
                 return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择无效或者冻结的套餐");
         }
         taocan.setStatus(Dictionary.TAOCAN_STATUS_YX);
         sysProjUseDao.updateProjStatus(taocan);
+        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        SysProjUseFlow useFlow = new SysProjUseFlow();
+        useFlow.setProjName(taocan.getProjName());
+        useFlow.setProjUseId(taocan.getId());
+        useFlow.setOptionType("人工修改");
+        useFlow.setRemark("设置为有效状态");
+        useFlow.setFailTime(taocan.getFailTime());
+        useFlow.setStatus(Dictionary.TAOCAN_STATUS_YX);
+        useFlow.setCreateBy(sysUsers.getSuName());
+        useFlow.setUpdateBy(sysUsers.getSuName());
+        sysProjUseDao.insertFlow(useFlow);
+
+
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功");
 
     }
@@ -257,6 +293,19 @@
             } else {
                 i = sysProjuseFreezeDao.insert(freeze);
             }
+
+            SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+            SysProjUseFlow useFlow = new SysProjUseFlow();
+            useFlow.setProjName(taocan.getProjName());
+            useFlow.setProjUseId(taocan.getId());
+            useFlow.setOptionType("人工修改");
+            useFlow.setStatus(Dictionary.TAOCAN_STATUS_DJ);
+            useFlow.setRemark("冻结项目");
+
+            useFlow.setCreateBy(sysUsers.getSuName());
+            useFlow.setUpdateBy(sysUsers.getSuName());
+            sysProjUseDao.insertFlow(useFlow);
+
             return i;
         } else {
             throw new GlobleException("未找到套餐");
@@ -302,73 +351,6 @@
         return money;
     }
 
-    public double getTotalMoney(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId) {
-        List<SysProjUse> list = sysProjUseDao.selectByModel(sysProjUse);
-        double money = 0;
-        if (CollectionUtils.isEmpty(list)) {
-            throw new GlobleException("该套餐没有可退款的项目!");
-        }
-        //判断套餐是否存在欠款
-        SysProjUse projuse = list.get(0);
-        checkOrderStatu(projuse);
-        if (!(projuse.getStatus().equals(Dictionary.TAOCAN_STATUS_YX))) {
-            throw new GlobleException("不是有效套餐");
-        }
-        if (projuse.getSource().contains(Dictionary.TAOCAN_SOURCE_ZR)) {
-            throw new GlobleException("转让的套餐不能退款");
-        }
-        if (projuse.getSource().contains(Dictionary.TAOCAN_SOURCE_ZS)) {
-            throw new GlobleException("赠送的套餐不能退款");
-        }
-        //获取会员卡
-        cardUse = moneyCardUseDao.selectVipCard(projuse.getVipId());
-        String content;
-        //如果是套餐卡
-        ShoppingGoodsAssemble shoppingGoodsAssemble = shoppingGoodsAssembleDao.selectById(sysProjUse.getAssembleId());
-        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(shoppingGoodsAssemble.getShoppingGoodsId());
-        if (Dictionary.SHOPPING_GOODS_TYPE_TCK.equals(projuse.getType())) {
-            money = projuse.getBalance();
-            //余次使用流水操作
-
-            content = shoppingGoods.getName() + "退款¥" + projuse.getBalance();
-        } else {
-            for (SysProjUse itemUser : list) {
-                Double emoney = MoneyUtil.mul(Double.parseDouble(itemUser.getSurplusCount() + ""), itemUser.getPrice());
-                money = MoneyUtil.add(emoney, money);
-            }
-            //余次使用流水操作
-            content = shoppingGoods.getName() + "退款¥" + money;
-        }
-
-
-        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-        // 1、金额退到该用户的有效会籍卡中
-        System.out.println("==========" + cardUse);
-        if (moneyCardUseId != null) {
-            if (cardUse == null) {
-                content += "到现金。";
-            } else {
-                //SysOrderItem orderItem = orderItemDao.selectById(cardUse.getOrderItemId());
-
-                StringBuilder contentBuild = new StringBuilder();
-                contentBuild.append("到" + cardUse.getCardName())
-                        .append(",余次:" + cardUse.getLastCountName())
-                        .append(",本金余额:" + MoneyUtil.add(cardUse.getRealMoney(), money))
-                        .append(",赠送余额:" + cardUse.getGiftMoney())
-                        .append(",有效期:" + DateUtil.dateToString(cardUse.getFailTime(), DateUtil.DATE_FORMAT_MM))
-                        .append(",是否赠送:" + cardUse.getSourceName());
-                content += contentBuild.toString();
-
-                cardUse.setRealMoney(cardUse.getRealMoney() + money);
-                ;
-                moneyCardUseDao.update(cardUse);
-
-            }
-        } else {
-            content += "到现金。";
-        }
-        return money;
-    }
 
     /**
      * 检测是否存在欠款
@@ -379,11 +361,9 @@
         if (Dictionary.TAOCAN_SOURCE_QY.equals(projuse.getSource())) {
             return;
         }
-        if (projuse.getPlatformFlag().contains(Dictionary.SHOPPING_GOODS_SALE_PLATFORM_XX)) {
-            SysOrderItem orderItem = orderItemDao.selectById(projuse.getOrderItemId());
-            if (!Dictionary.ORDER_STATU_YFK.equals(orderItem.getStatus())) {
-                throw new GlobleException("该商品存在欠款!");
-            }
+        String orderStatus = orderItemDao.selectOrderStatusByItemId(projuse.getOrderItemId());
+        if (!Dictionary.ORDER_STATU_YFK.equals(orderStatus)) {
+            throw new GlobleException(projuse.getProjName()+"的购买订单存在欠款!");
         }
     }
 
@@ -400,11 +380,24 @@
                 throw new GlobleException("套餐已冻结");
         }
         taocan.setStatus(Dictionary.TAOCAN_STATUS_WX);
+
         int i = sysProjUseDao.updateTcStatus(sysProjUse.getId(), "无效");
+
+        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        SysProjUseFlow useFlow = new SysProjUseFlow();
+        useFlow.setProjName(taocan.getProjName());
+        useFlow.setProjUseId(taocan.getId());
+        useFlow.setOptionType("人工修改");
+        useFlow.setStatus(Dictionary.TAOCAN_STATUS_WX);
+        useFlow.setRemark("设置为无效状态");
+        useFlow.setFailTime(taocan.getFailTime());
+
+        useFlow.setCreateBy(sysUsers.getSuName());
+        useFlow.setUpdateBy(sysUsers.getSuName());
+        sysProjUseDao.insertFlow(useFlow);
+
         return i;
     }
-
-
 
 
     /*********************以下为项目使用情况操作***********************/
@@ -493,7 +486,7 @@
         SysProjuseFreeze freeze = new SysProjuseFreeze();
         freeze.setFreezeTime(new Date());
         freeze.setVipId(sysProjUse.getVipId());
-        freeze.setOrderItemId(sysProjUse.getId()+"");
+        freeze.setOrderItemId(sysProjUse.getId() + "");
         SysProjuseFreeze getfreeze = sysProjuseFreezeDao.selectByOrderItemId(freeze);
         int i = 0;
         if (getfreeze != null) {
@@ -502,6 +495,17 @@
         } else {
             i = sysProjuseFreezeDao.insert(freeze);
         }
+        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        SysProjUseFlow useFlow = new SysProjUseFlow();
+        useFlow.setProjName(sysProjUse.getProjName());
+        useFlow.setProjUseId(sysProjUse.getId());
+        useFlow.setOptionType("人工修改");
+        useFlow.setStatus(Dictionary.TAOCAN_STATUS_DJ);
+        useFlow.setRemark("冻结项目");
+
+        useFlow.setCreateBy(sysUsers.getSuName());
+        useFlow.setUpdateBy(sysUsers.getSuName());
+        sysProjUseDao.insertFlow(useFlow);
         return i;
 
     }
@@ -527,13 +531,21 @@
                 throw new GlobleException("套餐已冻结");
         }
         sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
-        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(sysProjUse.getProjId());
-        String content = shoppingGoods.getName() + "设置为" + sysProjUse.getStatus();
 
+        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        SysProjUseFlow useFlow = new SysProjUseFlow();
+        useFlow.setProjName(sysProjUse.getProjName());
+        useFlow.setProjUseId(sysProjUse.getId());
+        useFlow.setOptionType("人工修改");
+        useFlow.setStatus(Dictionary.TAOCAN_STATUS_WX);
+        useFlow.setRemark("设置为无效状态");
+        useFlow.setFailTime(sysProjUse.getFailTime());
+
+        useFlow.setCreateBy(sysUsers.getSuName());
+        useFlow.setUpdateBy(sysUsers.getSuName());
+        sysProjUseDao.insertFlow(useFlow);
         return sysProjUseDao.update(sysProjUse);
     }
-
-
 
 
     /**
@@ -576,15 +588,265 @@
         }
         proj.setStatus(Dictionary.TAOCAN_STATUS_YX);
         sysProjUseDao.update(proj);
-        StringBuilder content = new StringBuilder();
-        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(proj.getProjId());
-        content.append(shoppingGoods.getName() + "设置为有效")
-                .append(",有效期:" + DateUtil.dateToString(proj.getFailTime(), DateUtil.DATE_FORMAT_MM));
 
+        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        SysProjUseFlow useFlow = new SysProjUseFlow();
+        useFlow.setProjName(proj.getProjName());
+        useFlow.setProjUseId(proj.getId());
+        useFlow.setOptionType("人工修改");
+        useFlow.setStatus(Dictionary.TAOCAN_STATUS_YX);
+        useFlow.setRemark("设置为有效状态");
+        useFlow.setFailTime(proj.getFailTime());
+
+        useFlow.setCreateBy(sysUsers.getSuName());
+        useFlow.setUpdateBy(sysUsers.getSuName());
+        sysProjUseDao.insertFlow(useFlow);
 
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功");
     }
 
+
+    /**
+     * 项目套餐退款
+     * @param projUseDtoList
+     */
+    @Override
+    public void projectTk(List<ProjUseOperationDto> projUseDtoList) {
+
+        List<ShoppingGoods> shoppingGoodsList = shoppingGoodsDao.selectByIds(projUseDtoList.stream().map(ProjUseOperationDto::getGoodsId).collect(Collectors.toList()));
+        Map<Long, ShoppingGoods> shoppingGoodsMap = shoppingGoodsList.stream().collect(Collectors.toMap(ShoppingGoods::getId, Function.identity()));
+
+
+        projUseDtoList.forEach(projUseOperationDto -> {
+            //校验参数
+            GroupValidateStatusCheckUtil.check(projUseOperationDto, ProjUseGroup.projectTk.class);
+
+            ShoppingGoods shoppingGoods = shoppingGoodsMap.get(projUseOperationDto.getGoodsId());
+            if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())) {
+
+                doProjectTk(projUseOperationDto);
+
+            } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(shoppingGoods.getGoodType())) {
+                
+                taocanTk(projUseOperationDto);
+            }
+
+
+
+        });
+    }
+
+    /**
+     * 套餐退款
+     * @param projUseOperationDto
+     */
+    private void taocanTk(ProjUseOperationDto projUseOperationDto) {
+
+        List<SysProjUse> projUseList = sysProjUseDao.selectByOrderItemId(projUseOperationDto.getOrderItemId());
+
+        List<SysProjUse> tcList = projUseList.stream().filter(item -> Objects.isNull(item.getTaocanId()) && item.getStatus().equals(Dictionary.TAOCAN_STATUS_YX) ).collect(Collectors.toList());
+
+        if (tcList.size() < projUseOperationDto.getCount()) {
+            throw new GlobleException("套餐余次不足");
+        }
+        projUseOperationDto.setOrderOperationType(OrderOperationEnum.RETURN);
+        for (int i = 0; i < projUseOperationDto.getCount(); i++) {
+            SysProjUse sysProjUse = tcList.get(i);
+            setTaocanTk(sysProjUse,projUseOperationDto);
+            //设置套餐下的项目无效
+            projUseList.stream().filter(item->Objects.equals(sysProjUse.getId(),item.getTaocanId())).collect(Collectors.toList())
+                    .forEach(item-> setTaocanTk(item,projUseOperationDto));
+        }
+
+    }
+
+    private void setTaocanTk(SysProjUse sysProjUse, ProjUseOperationDto projUseOperationDto) {
+        sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
+        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
+        sysProjUse.setSurplusCount(0);
+        sysProjUseDao.update(sysProjUse);
+        saveProjUseFlow(projUseOperationDto,sysProjUse);
+    }
+
+    /**
+     * 项目退款
+     * @param projUseOperationDto
+     */
+    private void doProjectTk(ProjUseOperationDto projUseOperationDto) {
+
+        List<SysProjUse> projUseList = sysProjUseDao.selectByOrderItemId(projUseOperationDto.getOrderItemId());
+        if(projUseList.size()==1){
+            SysProjUse sysProjUse = projUseList.get(0);
+            int sub = sysProjUse.getSurplusCount() - projUseOperationDto.getCount();
+            if (sub < 0) {
+                throw new GlobleException("项目余次不足");
+            } else if (sub == 0) {
+                sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
+                sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
+            }
+            sysProjUse.setSurplusCount(sub);
+            sysProjUseDao.update(sysProjUse);
+            projUseOperationDto.setOrderOperationType(OrderOperationEnum.RETURN);
+            //保存操作流水
+            saveProjUseFlow(projUseOperationDto,sysProjUse);
+        }else{
+            throw new GlobleException("查询项目余次异常");
+        }
+    }
+
+    /**
+     * 保存项目操作流水
+     * @param projUseOperationDto
+     * @param sysProjUse
+     */
+    private void saveProjUseFlow(ProjUseOperationDto projUseOperationDto, SysProjUse sysProjUse) {
+        SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
+        sysProjUseFlow.setOptionType(projUseOperationDto.getOrderOperationType().getDisplayName());
+        SysUsers user = sysUsersDao.selectById(projUseOperationDto.getUpdateUserId());
+        sysProjUseFlow.setUpdateBy(user.getSuName());
+        sysProjUseFlow.setCreateBy(user.getSuName());
+        sysProjUseDao.insertFlow(sysProjUseFlow);
+    }
+
+    /**
+     * 添加用户套餐
+     *
+     * @param projUseDtoList
+     * @return
+     */
+    @Override
+    public void addUserProjUse(List<ProjUseOperationDto> projUseDtoList) {
+
+        if(CollUtil.isEmpty(projUseDtoList)){
+            throw new GlobleException("projUseDtoList 不能为空");
+        }
+
+        List<ShoppingGoods> shoppingGoodsList = shoppingGoodsDao.selectByIds(projUseDtoList.stream().map(ProjUseOperationDto::getGoodsId).collect(Collectors.toList()));
+        Map<Long, ShoppingGoods> shoppingGoodsMap = shoppingGoodsList.stream().collect(Collectors.toMap(ShoppingGoods::getId, Function.identity()));
+
+        for (ProjUseOperationDto projUseOperationDto : projUseDtoList) {
+
+            ShoppingGoods shoppingGoods = shoppingGoodsMap.get(projUseOperationDto.getGoodsId());
+            if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())) {
+                createProjectUse(projUseOperationDto, shoppingGoods);
+            } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(shoppingGoods.getGoodType())) {
+                //每个套餐独立生成一个明细
+                int orderCount = projUseOperationDto.getCount();
+                while (orderCount > 0) {
+                    createTaocanProjUse(projUseOperationDto, shoppingGoods);
+                    orderCount--;
+                }
+            }
+        }
+    }
+
+
+    private void createTaocanProjUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) {
+
+        GroupValidateStatusCheckUtil.check(projUseOperationDto,ProjUseGroup.addTc.class);
+
+        //新建套餐
+        SysProjUse taocanProjUse = new SysProjUse();
+
+        ShoppingGoods taocanShoppingGoods = shoppingGoods;
+
+        Long projId = shoppingGoods.getId();
+
+        taocanProjUse.setProjId(projId);
+        taocanProjUse.setIsOver(Dictionary.DELETED_N);
+        taocanProjUse.setOrderItemId(projUseOperationDto.getOrderItemId());
+
+        taocanProjUse.setProjName(taocanShoppingGoods.getName());
+        taocanProjUse.setVipId(projUseOperationDto.getVipId());
+        taocanProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
+        taocanProjUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC);
+        taocanProjUse.setIsCourse(taocanShoppingGoods.getIsCourse());
+        taocanProjUse.setIsInfinite(taocanShoppingGoods.getIsInfinite());
+        // 赠送和打折后金额为0的都视为赠送项目
+        if (projUseOperationDto.isFree()) {
+            taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
+        } else {
+            taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
+        }
+        // 失效时间
+        Date invalidTime = shoppingGoodsService.calInvalidTime(taocanShoppingGoods, 1, null);
+        taocanProjUse.setFailTime(invalidTime);
+        sysProjUseDao.insert(taocanProjUse);
+        //计划次数
+        int surplusCount = 0;
+        //总余额
+        Double sumBanance = 0D;
+        //创建套餐绑定的项目
+        List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(projId, ShoppingGoods.SHOPPING_GOODS_TYPE_XM);
+        for (ShoppingGoodsAssemble assemble : assembleList) {
+            ProjUseOperationDto projUseDto = new ProjUseOperationDto();
+            projUseDto.setCount(assemble.getTotal());
+            projUseDto.setGoodsId(assemble.getShoppingGoodsId());
+            projUseDto.setFree(projUseOperationDto.isFree());
+            projUseDto.setPayMoney(MoneyUtil.mul(assemble.getPrice(), projUseOperationDto.getTcZk()));
+            projUseDto.setOrderItemId(projUseOperationDto.getOrderItemId());
+            projUseDto.setVipId(projUseOperationDto.getVipId());
+            projUseDto.setTcId(taocanProjUse.getId());
+            projUseDto.setUpdateUserId(projUseOperationDto.getUpdateUserId());
+            SysProjUse tempUse = createProjectUse(projUseDto, assemble.getShoppingGoods());
+            sumBanance += tempUse.getBalance();
+            surplusCount += tempUse.getSurplusCount();
+        }
+        if (Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())) {
+            //固定套餐,剩余次数等于绑定项目的次数
+            taocanProjUse.setSurplusCount(surplusCount);
+            //合计套餐余额
+            taocanProjUse.setBalance(sumBanance);
+        } else {
+            //任选套餐剩余次数等于最大使用次数
+            taocanProjUse.setSurplusCount(taocanShoppingGoods.getCarUseCount());
+            taocanProjUse.setBalance(projUseOperationDto.getPayMoney());
+        }
+
+        sysProjUseDao.update(taocanProjUse);
+    }
+
+    private SysProjUse createProjectUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) {
+
+        GroupValidateStatusCheckUtil.check(projUseOperationDto,ProjUseGroup.addProject.class);
+
+        SysProjUse puse = new SysProjUse();
+        puse.setIsOver(Dictionary.DELETED_N);
+        puse.setOrderItemId(projUseOperationDto.getOrderItemId());
+        puse.setProjId(projUseOperationDto.getGoodsId());
+        puse.setSurplusCount(projUseOperationDto.getCount());
+        puse.setVipId(projUseOperationDto.getVipId());
+        puse.setStatus(Dictionary.TAOCAN_STATUS_YX);
+        puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM);
+        puse.setProjName(shoppingGoods.getName());
+        puse.setTaocanId(projUseOperationDto.getTcId());
+        // 赠送和打折后金额为0的都视为赠送项目
+        if (!projUseOperationDto.isFree()) {
+            puse.setSource(Dictionary.TAOCAN_SOURCE_GM);
+            puse.setPrice(projUseOperationDto.getPayMoney());
+        } else {
+            puse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
+            //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗
+            boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
+            if (zsConsumeAchieve) {
+                //赠送情况下,如果收款金额大于0,就是赠送金额划扣的情况,金额即为划扣的折扣金额
+                if (projUseOperationDto.getPayMoney() > 0) {
+                    puse.setPrice(projUseOperationDto.getPayMoney());
+                } else {
+                    puse.setPrice(shoppingGoods.getSealPice());
+                }
+            } else {
+                puse.setPrice(0D);
+            }
+        }
+
+        // 设置失效时间
+        Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 1, null);
+        puse.setFailTime(invalidTime);
+        puse.setBalance(puse.getPrice() * puse.getSurplusCount());
+        sysProjUseDao.insert(puse);
+        return puse;
+    }
 
 
     @Override
@@ -604,4 +866,26 @@
     public List<SysProjUse> findTaocaoProjUseWithProj(SysProjUse sysProjUse) {
         return sysProjUseDao.selectTaoCanListWithProj(sysProjUse);
     }
+
+    @Override
+    public int findTaocanCountForCourseAndInfinite(Long taocanId, Long vipId) {
+        return sysProjUseDao.selectTaocanCountForCourseAndInfinite(taocanId, vipId);
+    }
+
+    @Override
+    public void deleteByOrderItemId(Long id) {
+        int count=sysProjUseDao.selectUseCountByOrderItemId(id);
+        if(count>0){
+            SysProjUse query=new SysProjUse();
+            query.setOrderItemId(id);
+            List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(query);
+            if(sysProjUses.size()>1){
+                throw new GlobleException(sysProjUses.get(0).getProjName()+"套餐已经被使用无法删除");
+            }else {
+                throw new GlobleException(sysProjUses.get(0).getProjName()+"项目已经被使用无法删除");
+            }
+        }else {
+            sysProjUseDao.deleteByOrderItemId(id);
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.1