From 1eedb8a57c2eb5c9953dcf058184ebdc6987fbf5 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 24 May 2022 15:14:21 +0800
Subject: [PATCH] Merge branch 'feature/订单服务单代码改造' into alpha
---
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java | 543 +++++++++++++++++++++++++++++++++++++----------------
1 files changed, 379 insertions(+), 164 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 45f9083..788d974 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,28 +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.core.tools.DateUtil;
+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 javax.xml.crypto.Data;
-import java.sql.Timestamp;
-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
@@ -32,7 +39,11 @@
@Autowired
private SysProjUseDao sysProjUseDao;
+ @Autowired
+ SysProjServicesService projServicesService;
+ @Autowired
+ SysBeauticianStateService sysBeauticianStateService;
@Autowired
private SysProjuseFreezeDao sysProjuseFreezeDao;
@@ -53,6 +64,14 @@
@Autowired
SysVipInfoDao sysVipInfoDao;
+ @Autowired
+ ShoppingGoodsService shoppingGoodsService;
+
+ @Autowired
+ BusParameterSettingsDao busParameterSettingsDao;
+
+ @Autowired
+ SysUsersDao sysUsersDao;
@Override
public int add(SysProjUse sysProjUse) {
@@ -63,6 +82,8 @@
@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,26 +380,23 @@
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;
- }
-
- /**
- * cardUser暂时没有用到
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int returnMoneyTc(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId) {
- //充值记录
- //SysRechargeFlow flow=new SysRechargeFlow();
-
- // 计算出套餐所有项目的剩余次数的钱
- getTotalMoney(sysProjUse, cardUse, moneyCardUseId);
- //3、套餐下的项目状态改为退款
- sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
- int j = sysProjUseDao.updateProjStatus(sysProjUse);
-
- return j;
}
@@ -509,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) {
@@ -518,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;
}
@@ -543,56 +531,22 @@
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);
}
-
- /**
- * 退款
- *
- * @param sysProjUse
- * @return
- */
- public int returnMoneyProj(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId) {
- int i = 0;
- sysProjUse = sysProjUseDao.selectById(sysProjUse.getId());
- //判断套餐是否存在欠款
- checkOrderStatu(sysProjUse);
- if (!(sysProjUse.getStatus().equals(Dictionary.TAOCAN_STATUS_YX))) {
- throw new GlobleException("不是有效项目");
- }
- if (sysProjUse.getSource().equals(Dictionary.TAOCAN_SOURCE_ZR)) {
- throw new GlobleException("转让的项目不能退款");
- }
- if (sysProjUse.getSource().equals(Dictionary.TAOCAN_SOURCE_ZS)) {
- throw new GlobleException("赠送的项目不能退款");
- }
- StringBuilder content = new StringBuilder();
- ShoppingGoodsAssemble shoppingGoodsAssemble = shoppingGoodsAssembleDao.selectById(sysProjUse.getAssembleId());
- ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(shoppingGoodsAssemble.getShoppingGoodsId());
- content.append(shoppingGoods + "退款");
- if (cardUse != null) {
- // 1、金额退到该用户的有效会籍卡中
- MoneyCardUse upCard = moneyCardUseDao.selectById(cardUse.getId());
- upCard.setRealMoney(upCard.getRealMoney() + sysProjUse.getBalance());
- ;
- moneyCardUseDao.update(upCard);
-
- content.append("到会籍卡(" + upCard.getCardName() + ")" + sysProjUse.getBalance() + "元")
- .append(",余次:" + upCard.getLastCountName())
- .append(",本金余额:" + upCard.getRealMoney())
- .append(",有效期:" + DateUtil.dateToString(upCard.getFailTime(), DateUtil.DATE_FORMAT_MM))
- .append(",是否赠送:" + upCard.getSourceName());
- } else {
- content.append("现金" + sysProjUse.getBalance() + "元");
- }
-
- sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
- return sysProjUseDao.update(sysProjUse);
- }
/**
* 设置为有效套餐
@@ -634,33 +588,266 @@
}
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 double getTotalMoneyProj(SysProjUse sysProjUse) {
- sysProjUse = sysProjUseDao.selectById(sysProjUse.getId());
- //判断套餐是否存在欠款
- checkOrderStatu(sysProjUse);
- if (!(sysProjUse.getStatus().equals(Dictionary.TAOCAN_STATUS_YX))) {
- throw new GlobleException("不是有效项目");
+ 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("套餐余次不足");
}
- if (sysProjUse.getSource().equals(Dictionary.TAOCAN_SOURCE_ZR)) {
- 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));
}
- if (sysProjUse.getSource().contains(Dictionary.TAOCAN_SOURCE_ZS)) {
- throw new GlobleException("赠送的项目不能退款");
+
+ }
+
+ 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("查询项目余次异常");
}
- return sysProjUse.getBalance();
+ }
+
+ /**
+ * 保存项目操作流水
+ * @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());
+ projUseDto.setDeductionNum(assemble.getDeductionNum());
+ 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());
+ puse.setDeductionNum(projUseOperationDto.getDeductionNum());
+ // 赠送和打折后金额为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;
}
@@ -670,9 +857,37 @@
}
@Override
- public List<SysProjUse> selectTaocanProjUse(Long taocanId) {
+ public List<SysProjUse> selectTaocanProjUse(Long taocanId, String status) {
SysProjUse projUse = new SysProjUse();
projUse.setTaocanId(taocanId);
+ projUse.setStatus(status);
return sysProjUseDao.selectByModel(projUse);
}
+
+ @Override
+ 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