| | |
| | | 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.validate.ParameterValidate; |
| | | import com.matrix.system.common.validate.group.Group; |
| | | 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.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.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.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | private SysProjUseDao sysProjUseDao; |
| | | @Autowired |
| | | SysProjServicesService projServicesService; |
| | | |
| | | @Autowired |
| | | SysBeauticianStateService sysBeauticianStateService; |
| | | |
| | | @Autowired |
| | | private SysProjuseFreezeDao sysProjuseFreezeDao; |
| | |
| | | |
| | | @Autowired |
| | | BusParameterSettingsDao busParameterSettingsDao; |
| | | |
| | | @Autowired |
| | | SysUsersDao sysUsersDao; |
| | | |
| | | @Override |
| | | public int add(SysProjUse sysProjUse) { |
| | |
| | | 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()+"的购买订单存在欠款!"); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 项目套餐退款 |
| | | * @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 |
| | |
| | | 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); |
| | |
| | | |
| | | |
| | | private void createTaocanProjUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) { |
| | | ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addTc.class); |
| | | if (baseIdResult.hasErrors()) { |
| | | throw new GlobleException(baseIdResult.getErrors()); |
| | | } |
| | | |
| | | 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); |
| | |
| | | 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(); |
| | |
| | | |
| | | private SysProjUse createProjectUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) { |
| | | |
| | | ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addProject.class); |
| | | if (baseIdResult.hasErrors()) { |
| | | throw new GlobleException(baseIdResult.getErrors()); |
| | | } |
| | | GroupValidateStatusCheckUtil.check(projUseOperationDto,ProjUseGroup.addProject.class); |
| | | |
| | | SysProjUse puse = new SysProjUse(); |
| | | puse.setIsOver(Dictionary.DELETED_N); |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |