| package com.doumee.service.business.impl; | 
|   | 
| import com.doumee.core.constants.Constants; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import com.doumee.core.model.LoginUserInfo; | 
| import com.doumee.core.model.PageData; | 
| import com.doumee.core.model.PageWrap; | 
| import com.doumee.core.utils.DateUtil; | 
| import com.doumee.core.utils.Utils; | 
| import com.doumee.dao.business.DiscountLogMapper; | 
| import com.doumee.dao.business.DiscountMemberMapper; | 
| import com.doumee.dao.business.join.DiscountMemberJoinMapper; | 
| import com.doumee.dao.business.model.Discount; | 
| import com.doumee.dao.business.model.DiscountLog; | 
| import com.doumee.dao.business.model.DiscountMember; | 
| import com.doumee.dao.business.model.Member; | 
| import com.doumee.dao.business.web.request.DiscountMemberDTO; | 
| import com.doumee.dao.system.model.SystemUser; | 
| import com.doumee.service.business.DiscountMemberService; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
| import com.baomidou.mybatisplus.core.metadata.IPage; | 
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
| import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.apache.shiro.SecurityUtils; | 
| import org.checkerframework.checker.units.qual.A; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.util.CollectionUtils; | 
|   | 
| import java.util.Date; | 
| import java.util.List; | 
| import java.util.Objects; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * 用户骑行套餐卡关联表Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2025/02/17 09:43 | 
|  */ | 
| @Service | 
| public class DiscountMemberServiceImpl implements DiscountMemberService { | 
|   | 
|     @Autowired | 
|     private DiscountMemberMapper discountMemberMapper; | 
|   | 
|     @Autowired | 
|     private DiscountMemberJoinMapper discountMemberJoinMapper; | 
|   | 
|     @Autowired | 
|     private DiscountLogMapper discountLogMapper; | 
|   | 
|   | 
|     @Override | 
|     public String create(DiscountMember discountMember) { | 
|         discountMemberMapper.insert(discountMember); | 
|         return discountMember.getId(); | 
|     } | 
|   | 
|     @Override | 
|     public void deleteById(String id) { | 
|         discountMemberMapper.deleteById(id); | 
|     } | 
|   | 
|     @Override | 
|     public void delete(DiscountMember discountMember) { | 
|         UpdateWrapper<DiscountMember> deleteWrapper = new UpdateWrapper<>(discountMember); | 
|         discountMemberMapper.delete(deleteWrapper); | 
|     } | 
|   | 
|     @Override | 
|     public void deleteByIdInBatch(List<String> ids) { | 
|         if (CollectionUtils.isEmpty(ids)) { | 
|             return; | 
|         } | 
|         discountMemberMapper.deleteBatchIds(ids); | 
|     } | 
|   | 
|     @Override | 
|     public void updateById(DiscountMember discountMember) { | 
|         discountMemberMapper.updateById(discountMember); | 
|     } | 
|   | 
|     @Override | 
|     public void updateByIdInBatch(List<DiscountMember> discountMembers) { | 
|         if (CollectionUtils.isEmpty(discountMembers)) { | 
|             return; | 
|         } | 
|         for (DiscountMember discountMember: discountMembers) { | 
|             this.updateById(discountMember); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public DiscountMember findById(String id) { | 
|         return discountMemberMapper.selectById(id); | 
|     } | 
|   | 
|     @Override | 
|     public DiscountMember getDetail(String id) { | 
|         DiscountMember discountMember = discountMemberMapper.selectById(id); | 
|         if(Objects.isNull(discountMember)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
| //        List<DiscountLog> discountLogList = discountLogMapper.selectJoinList(DiscountLog.class,new MPJLambdaWrapper<DiscountLog>() | 
| //                .selectAll(DiscountLog.class) | 
| //                .selectAs(SystemUser::getRealname,DiscountLog::getCreatorName) | 
| //                .leftJoin(SystemUser.class,SystemUser::getId,DiscountLog::getCreator) | 
| //                .eq(DiscountLog::getDiscountMemberId,discountMember.getId()) | 
| //                .eq(DiscountLog::getIsdeleted,Constants.ZERO) | 
| //                .orderByDesc(DiscountLog::getId) | 
| //        ); | 
| //        discountMember.setUseTimes(discountMember.getDiscountLogList().size()); | 
| //        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(discountLogList)){ | 
| //            discountMember.setDiscountLogList(discountLogList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList())); | 
| //            discountMember.setOptLogList(discountLogList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList())); | 
| // | 
| //        } | 
|         return discountMember; | 
|     } | 
|   | 
|     @Override | 
|     public DiscountMember findOne(DiscountMember discountMember) { | 
|         QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember); | 
|         return discountMemberMapper.selectOne(wrapper); | 
|     } | 
|   | 
|     @Override | 
|     public List<DiscountMember> findList(DiscountMember discountMember) { | 
|         QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember); | 
|         return discountMemberMapper.selectList(wrapper); | 
|     } | 
|    | 
|     @Override | 
|     public PageData<DiscountMember> findPage(PageWrap<DiscountMember> pageWrap) { | 
|         IPage<DiscountMember> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         MPJLambdaWrapper<DiscountMember> queryWrapper = new MPJLambdaWrapper<>(); | 
|         Utils.MP.blankToNull(pageWrap.getModel()); | 
|         DiscountMember model = pageWrap.getModel(); | 
|         queryWrapper.selectAll(DiscountMember.class) | 
|                 .selectAs(Member::getOpenid,DiscountMember::getOpenid) | 
|                 .select(" ( select count(1) from discount_log d where d.discount_member_id = t.id and d.type = 0 ) ",DiscountMember::getUseTimes) | 
|                 .leftJoin(Member.class,Member::getId,DiscountMember::getMemberId) | 
|                 .like(StringUtils.isNotBlank(model.getCode()),DiscountMember::getCode,model.getCode()) | 
|                 .like(StringUtils.isNotBlank(model.getName()),DiscountMember::getName,model.getName()) | 
|                 .like(StringUtils.isNotBlank(model.getOpenid()),Member::getOpenid,model.getOpenid()) | 
|                 .eq(Objects.nonNull(model.getStatus()),DiscountMember::getStatus,model.getStatus()) | 
|                 .ne(DiscountMember::getStatus,Constants.TWO) | 
|                 .orderByDesc(DiscountMember::getCode); | 
|         return PageData.from(discountMemberJoinMapper.selectJoinPage(page, DiscountMember.class,queryWrapper)); | 
|     } | 
|   | 
|   | 
|     @Override | 
|     public void cancel(DiscountMemberDTO model){ | 
|         LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         MPJLambdaWrapper<DiscountMember> queryWrapper = new MPJLambdaWrapper<>(); | 
|         queryWrapper.selectAll(DiscountMember.class) | 
|                 .leftJoin(Member.class,Member::getId,DiscountMember::getMemberId) | 
|                 .eq(DiscountMember::getStatus,Constants.ZERO) | 
|                 .like(StringUtils.isNotBlank(model.getCode()),DiscountMember::getCode,model.getCode()) | 
|                 .like(StringUtils.isNotBlank(model.getName()),DiscountMember::getName,model.getName()) | 
|                 .like(StringUtils.isNotBlank(model.getOpenid()),Member::getOpenid,model.getOpenid()) | 
|                 .eq(Objects.nonNull(model.getId()),DiscountMember::getId,model.getId()) | 
|                 .in(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(model.getChoseIdList()) | 
|                         ,DiscountMember::getId,model.getChoseIdList()) | 
|                 .orderByDesc(DiscountMember::getId); | 
|         List<DiscountMember> list = discountMemberJoinMapper.selectJoinList(DiscountMember.class,queryWrapper); | 
|         if(CollectionUtils.isEmpty(list)){ | 
|             return; | 
|         } | 
|         for (DiscountMember discountMember:list) { | 
|             if(!Constants.equalsInteger(discountMember.getStatus(),Constants.ZERO)){ | 
|                 continue; | 
|             } | 
|             discountMemberMapper.update(null,new UpdateWrapper<DiscountMember>().lambda() | 
|                     .set(DiscountMember::getStatus,Constants.ONE) | 
|                     .eq(DiscountMember::getId,discountMember.getId()) | 
|             ); | 
|             //操作日志 | 
|             DiscountLog discountLog = new DiscountLog(); | 
|             discountLog.setIsdeleted(Constants.ZERO); | 
|             discountLog.setCreator(principal.getId()); | 
|             discountLog.setCreateDate(new Date()); | 
|             discountLog.setDiscountMemberId(discountMember.getId()); | 
|             discountLog.setType(Constants.ONE); | 
|             discountLog.setInfo(model.getInfo()); | 
|             discountLog.setEditInfo("退货退卡"); | 
|             discountLog.setGoodsorderId(discountMember.getGoodsorderId()); | 
|             discountLogMapper.insert(discountLog); | 
|         } | 
|     } | 
|   | 
|   | 
|   | 
|     @Override | 
|     public void adjust(DiscountMemberDTO model){ | 
|         if(Objects.isNull(model) | 
|             || Objects.isNull(model.getAddDays())){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|         LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         MPJLambdaWrapper<DiscountMember> queryWrapper = new MPJLambdaWrapper<>(); | 
|         queryWrapper.selectAll(DiscountMember.class) | 
|                 .leftJoin(Member.class,Member::getId,DiscountMember::getMemberId) | 
|                 .eq(DiscountMember::getStatus,Constants.ZERO) | 
|                 .like(StringUtils.isNotBlank(model.getCode()),DiscountMember::getCode,model.getCode()) | 
|                 .like(StringUtils.isNotBlank(model.getName()),DiscountMember::getName,model.getName()) | 
|                 .like(StringUtils.isNotBlank(model.getOpenid()),Member::getOpenid,model.getOpenid()) | 
|                 .eq(Objects.nonNull(model.getId()),DiscountMember::getId,model.getId()) | 
|                 .in(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(model.getChoseIdList()) | 
|                         ,DiscountMember::getId,model.getChoseIdList()) | 
|                 .orderByDesc(DiscountMember::getId); | 
|         List<DiscountMember> list = discountMemberJoinMapper.selectJoinList(DiscountMember.class,queryWrapper); | 
|         if(CollectionUtils.isEmpty(list)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到可调整的套餐卡信息"); | 
|         } | 
|         for (DiscountMember discountMember:list) { | 
|             if(!Constants.equalsInteger(discountMember.getStatus(),Constants.ZERO)){ | 
|                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+discountMember.getCode()+"】套餐卡已作废,无法进行该操作"); | 
|             } | 
|             String useEndDate = DateUtil.getXDaysAfter(discountMember.getUseEndDate(),model.getAddDays()); | 
|             discountMemberMapper.update(null,new UpdateWrapper<DiscountMember>().lambda() | 
|                             //.setSql(" use_end_date =  use_end_date::date +   " + model.getAddDays() ) | 
|                             .set(DiscountMember::getUseEndDate,useEndDate) | 
|                     .eq(DiscountMember::getId,discountMember.getId()) | 
|             ); | 
|             //操作日志 | 
|             DiscountLog discountLog = new DiscountLog(); | 
|             discountLog.setIsdeleted(Constants.ZERO); | 
|             discountLog.setCreator(principal.getId()); | 
|             discountLog.setCreateDate(new Date()); | 
|             discountLog.setDiscountMemberId(discountMember.getId()); | 
|             discountLog.setType(Constants.TWO); | 
|             discountLog.setGoodsorderId(discountMember.getGoodsorderId()); | 
|             discountLog.setInfo(model.getInfo()); | 
|             discountLog.setEditDays(model.getAddDays()); | 
|             discountLog.setEditInfo("将有效期增加"+model.getAddDays()+"天, 调整后有效期至"+useEndDate); | 
|             discountLogMapper.insert(discountLog); | 
|   | 
|         } | 
|     } | 
|   | 
|   | 
|     @Override | 
|     public long count(DiscountMember discountMember) { | 
|         QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember); | 
|         return discountMemberMapper.selectCount(wrapper); | 
|     } | 
| } |