| | |
| | | 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.tools.DateUtil; |
| | | import com.matrix.core.tools.WebUtil; |
| | | import com.matrix.system.common.bean.SysUsers; |
| | | import com.matrix.system.common.dao.BusParameterSettingsDao; |
| | | import com.matrix.system.common.validate.ParameterValidate; |
| | | import com.matrix.system.constance.Dictionary; |
| | | import com.matrix.system.hive.bean.*; |
| | | import com.matrix.system.hive.dao.*; |
| | | import com.matrix.system.hive.dto.ProjUseOperationDto; |
| | | 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.Map; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @date 2016-07-03 20:53 |
| | |
| | | |
| | | @Autowired |
| | | private SysProjUseDao sysProjUseDao; |
| | | @Autowired |
| | | SysProjServicesService projServicesService; |
| | | |
| | | @Autowired |
| | | SysBeauticianStateService sysBeauticianStateService; |
| | | |
| | | @Autowired |
| | | private SysProjuseFreezeDao sysProjuseFreezeDao; |
| | |
| | | @Autowired |
| | | SysVipInfoDao sysVipInfoDao; |
| | | |
| | | @Autowired |
| | | ShoppingGoodsService shoppingGoodsService; |
| | | |
| | | @Autowired |
| | | BusParameterSettingsDao busParameterSettingsDao; |
| | | |
| | | @Override |
| | | public int add(SysProjUse sysProjUse) { |
| | |
| | | @Override |
| | | public int modify(SysProjUse sysProjUse) { |
| | | //插入套餐项目操作记录 |
| | | |
| | | |
| | | |
| | | return sysProjUseDao.update(sysProjUse); |
| | |
| | | freeze.setVipId(taocan.getVipId()); |
| | | SysProjuseFreeze freezeProj = sysProjuseFreezeDao.selectByOrderItemId(freeze); |
| | | // todo 因为目前没有在冻结的时候插入冻结记录,所以这里暂时这样处理 |
| | | if(freezeProj!=null){ |
| | | if (freezeProj != null) { |
| | | Date dateAfter = DateUtil.nextNDate(taocan.getFailTime(), freezeProj.getGapDays()); |
| | | taocan.setFailTime(dateAfter); |
| | | } |
| | |
| | | taocan.setStatus(Dictionary.TAOCAN_STATUS_YX); |
| | | sysProjUseDao.updateProjStatus(taocan); |
| | | SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | SysProjUseFlow useFlow=new SysProjUseFlow(); |
| | | SysProjUseFlow useFlow = new SysProjUseFlow(); |
| | | useFlow.setProjName(taocan.getProjName()); |
| | | useFlow.setProjUseId(taocan.getId()); |
| | | useFlow.setOptionType("人工修改"); |
| | |
| | | } |
| | | |
| | | SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | SysProjUseFlow useFlow=new SysProjUseFlow(); |
| | | SysProjUseFlow useFlow = new SysProjUseFlow(); |
| | | useFlow.setProjName(taocan.getProjName()); |
| | | useFlow.setProjUseId(taocan.getId()); |
| | | useFlow.setOptionType("人工修改"); |
| | |
| | | int i = sysProjUseDao.updateTcStatus(sysProjUse.getId(), "无效"); |
| | | |
| | | SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | SysProjUseFlow useFlow=new SysProjUseFlow(); |
| | | SysProjUseFlow useFlow = new SysProjUseFlow(); |
| | | useFlow.setProjName(taocan.getProjName()); |
| | | useFlow.setProjUseId(taocan.getId()); |
| | | useFlow.setOptionType("人工修改"); |
| | |
| | | |
| | | return i; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /*********************以下为项目使用情况操作***********************/ |
| | |
| | | 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) { |
| | |
| | | i = sysProjuseFreezeDao.insert(freeze); |
| | | } |
| | | SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | SysProjUseFlow useFlow=new SysProjUseFlow(); |
| | | SysProjUseFlow useFlow = new SysProjUseFlow(); |
| | | useFlow.setProjName(sysProjUse.getProjName()); |
| | | useFlow.setProjUseId(sysProjUse.getId()); |
| | | useFlow.setOptionType("人工修改"); |
| | |
| | | sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); |
| | | |
| | | SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | SysProjUseFlow useFlow=new SysProjUseFlow(); |
| | | SysProjUseFlow useFlow = new SysProjUseFlow(); |
| | | useFlow.setProjName(sysProjUse.getProjName()); |
| | | useFlow.setProjUseId(sysProjUse.getId()); |
| | | useFlow.setOptionType("人工修改"); |
| | |
| | | sysProjUseDao.insertFlow(useFlow); |
| | | return sysProjUseDao.update(sysProjUse); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | sysProjUseDao.update(proj); |
| | | |
| | | SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | SysProjUseFlow useFlow=new SysProjUseFlow(); |
| | | SysProjUseFlow useFlow = new SysProjUseFlow(); |
| | | useFlow.setProjName(proj.getProjName()); |
| | | useFlow.setProjUseId(proj.getId()); |
| | | useFlow.setOptionType("人工修改"); |
| | |
| | | return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 添加用户套餐 |
| | | * |
| | | * @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) { |
| | | ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addTc.class); |
| | | if (baseIdResult.hasErrors()) { |
| | | throw new GlobleException(baseIdResult.getErrors()); |
| | | } |
| | | |
| | | //新建套餐 |
| | | 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()); |
| | | 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) { |
| | | |
| | | ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addProject.class); |
| | | if (baseIdResult.hasErrors()) { |
| | | throw new GlobleException(baseIdResult.getErrors()); |
| | | } |
| | | |
| | | 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 |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |