package com.doumee.service.business.impl; 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.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.ID; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CardMapper; import com.doumee.dao.business.CardParamMapper; import com.doumee.dao.business.join.CardJoinMapper; import com.doumee.dao.business.model.Card; import com.doumee.dao.business.model.CardParam; import com.doumee.dao.business.model.Scan; import com.doumee.dao.web.dto.AddCardDTO; import com.doumee.dao.web.dto.CardDTO; import com.doumee.dao.web.dto.QueryCardDTO; import com.doumee.dao.web.request.DealIntegralRequest; import com.doumee.service.business.CardService; 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.doumee.service.business.IntegralService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * 充值卡信息表Service实现 * @author 江蹄蹄 * @date 2023/04/13 11:22 */ @Service public class CardServiceImpl implements CardService { @Autowired private CardMapper cardMapper; @Autowired private CardParamMapper cardParamMapper; @Autowired private CardJoinMapper cardJoinMapper; @Autowired private IntegralService integralService; @Transactional(rollbackFor = {Exception.class,BusinessException.class}) @Override public List create(AddCardDTO card) { LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); CardParam cardParam = cardParamMapper.selectById(card.getParamId()); if (Objects.isNull(cardParam)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"卡类型参议异常"); } Integer num = card.getNum(); int startNo = Integer.valueOf(cardParam.getStartNo()); Card count = new Card(); count.setParamId(card.getParamId()); long countNum = Constants.formatLongNum(count(count)); startNo = countNum != 0 ? (int) (startNo + countNum) : startNo; List list = new ArrayList<>(); for (int i = 0; i deleteWrapper = new UpdateWrapper<>(card); cardMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } cardMapper.deleteBatchIds(ids); } @Override public void updateById(AddCardDTO card) { Card update = new Card(); update.setId(card.getId()); update.setStatus(card.getStatus()); Date validDate = Objects.isNull(card.getValidDate()) ? null : DateUtil.toDate(LocalDateTime.of(card.getValidDate(), LocalTime.of(23, 59, 59))); update.setValidDate(validDate); cardMapper.updateById(update); } @Override public void updateByIdInBatch(List cards) { if (CollectionUtils.isEmpty(cards)) { return; } for (AddCardDTO card: cards) { this.updateById(card); } } @Override public Card findById(Integer id) { return cardMapper.selectById(id); } @Override public Card findOne(Card card) { QueryWrapper wrapper = new QueryWrapper<>(card); return cardMapper.selectOne(wrapper); } @Override public List findList(Card card) { QueryWrapper wrapper = new QueryWrapper<>(card); return cardMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.eq(Card::getIsdeleted,Constants.ZERO); if (pageWrap.getModel().getStartDateTime() != null && pageWrap.getModel().getEndDateTime() != null) { queryWrapper.ge(Card::getCreateDate, pageWrap.getModel().getStartDateTime()); queryWrapper.le(Card::getCreateDate, pageWrap.getModel().getEndDateTime()); } if (pageWrap.getModel().getCode() != null) { queryWrapper.likeRight(Card::getCode, pageWrap.getModel().getCode()); } if (pageWrap.getModel().getIsUsed() != null) { queryWrapper.eq(Card::getIsUsed, pageWrap.getModel().getIsUsed()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.eq(Card::getStatus, pageWrap.getModel().getStatus()); } queryWrapper.selectAll(Card.class) .selectAs(CardParam::getName,CardDTO::getParamName); queryWrapper.leftJoin(CardParam.class,CardParam::getId,Card::getParamId); queryWrapper.orderByDesc(Card::getCreateDate); // for(PageWrap.SortData sortData: pageWrap.getSorts()) { // if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { // queryWrapper.orderByDesc(sortData.getProperty()); // } else { // queryWrapper.orderByAsc(sortData.getProperty()); // } // } return PageData.from(cardJoinMapper.selectJoinPage(page, CardDTO.class,queryWrapper)); } @Override public Long count(Card card) { QueryWrapper wrapper = new QueryWrapper<>(card); return cardMapper.selectCount(wrapper); } @Transactional(rollbackFor = {Exception.class,BusinessException.class}) @Override public void exchangeCard(String code, String password, Integer memberId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(Card::getCode,code) // .eq(Card::getPassword,password.toUpperCase()) // .eq(Card::getIsdeleted,Constants.ZERO) .last("limit 1"); Card card = cardMapper.selectOne(wrapper); if (Objects.isNull(card)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"卡号不正确"); } if (Constants.equalsInteger(card.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"卡已删除"); } if ((!Objects.isNull(card)) && Constants.equalsInteger(card.getIsUsed(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"充值卡已使用"); } if (Constants.equalsInteger(card.getStatus(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"充值卡已经被禁用"); } if (Objects.nonNull(card.getValidDate()) && card.getValidDate().before(new Date())){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"充值卡已经过期"); } if (!card.getPassword().equalsIgnoreCase(password)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"密码错误"); } UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().set(Card::getIsUsed,Constants.ONE) .set(Card::getMemberId,memberId) .set(Card::getUseDate,new Date()); updateWrapper.lambda().eq(Card::getId,card.getId()); cardMapper.update(null,updateWrapper); DealIntegralRequest dealIntegralRequest = new DealIntegralRequest(); dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.EXCHANGE_CARD); dealIntegralRequest.setIntegralNum(card.getMoney()); dealIntegralRequest.setMemberId(memberId); dealIntegralRequest.setObjId(card.getId()); dealIntegralRequest.setDealType(Constants.ZERO); integralService.dealIntegral(dealIntegralRequest); } }