| | |
| | | package com.mzl.flower.service.point; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.mzl.flower.config.security.SecurityUtils; |
| | | import com.mzl.flower.dto.request.point.ChangePointDTO; |
| | | import com.mzl.flower.dto.request.point.QueryCustomerPointDTO; |
| | | import com.mzl.flower.dto.request.point.QueryPointDetailDTO; |
| | | import com.mzl.flower.dto.response.point.CustomerPointDTO; |
| | | import com.mzl.flower.dto.response.point.CustomerPointDetailDTO; |
| | | import com.mzl.flower.entity.customer.Customer; |
| | | import com.mzl.flower.entity.point.CustomerPoint; |
| | | import com.mzl.flower.entity.point.CustomerPointDetail; |
| | | import com.mzl.flower.mapper.point.CustomerPointDetailMapper; |
| | | import com.mzl.flower.mapper.point.CustomerPointMapper; |
| | | import com.mzl.flower.service.BaseService; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | import com.mzl.flower.constant.Constants.*; |
| | | |
| | | @Service |
| | | @Transactional |
| | | public class CustomerPointService { |
| | | public class CustomerPointService extends BaseService { |
| | | |
| | | private final CustomerPointMapper customerPointMapper; |
| | | |
| | | private final CustomerPointDetailMapper customerPointDetailMapper; |
| | | |
| | | |
| | | public CustomerPointService(CustomerPointMapper customerPointMapper, CustomerPointDetailMapper customerPointDetailMapper) { |
| | | this.customerPointMapper = customerPointMapper; |
| | | this.customerPointDetailMapper = customerPointDetailMapper; |
| | | } |
| | | |
| | | public Page<CustomerPointDTO> queryPage(QueryCustomerPointDTO dto, Page page) { |
| | | List<CustomerPointDTO> list = customerPointMapper.queryPage(dto, page); |
| | | page.setRecords(list); |
| | | return page; |
| | | } |
| | | |
| | | public Page<CustomerPointDetailDTO> queryCustomerDetails(QueryPointDetailDTO dto, Page page) { |
| | | List<CustomerPointDetailDTO> list = customerPointMapper.queryCustomerDetails(dto, page); |
| | | page.setRecords(list); |
| | | |
| | | return page; |
| | | } |
| | | |
| | | public void giveawayPoint(ChangePointDTO dto) { |
| | | CustomerPointDetail detail = new CustomerPointDetail(); |
| | | Customer customer = getCustomer(dto.getCustomerId()); |
| | | detail.setCustomerId(customer.getId()); |
| | | detail.setUserId(customer.getUserId()); |
| | | detail.setPoint(dto.getPoint()); |
| | | detail.setRemarks(dto.getRemarks()); |
| | | detail.setRecordDate(LocalDate.now()); |
| | | detail.setChangeType(POINT_CHANGE_TYPE.add.name()); |
| | | detail.setType(POINT_TYPE.giveaway.name()); |
| | | detail.create(SecurityUtils.getUserId()); |
| | | customerPointDetailMapper.insert(detail); |
| | | |
| | | //更新汇总表 |
| | | updateCustomerPoint(detail); |
| | | } |
| | | |
| | | public void updateCustomerPoint(CustomerPointDetail detail) { |
| | | CustomerPoint point = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>() |
| | | .eq(CustomerPoint::getCustomerId, detail.getCustomerId())); |
| | | boolean isAdd = false; |
| | | if(point == null){ |
| | | isAdd = true; |
| | | point = new CustomerPoint(); |
| | | point.setCustomerId(detail.getCustomerId()); |
| | | point.setUserId(detail.getUserId()); |
| | | point.setTotalPoint(0); |
| | | point.setUsedPoint(0); |
| | | point.setExpiredPoint(0); |
| | | point.create(SecurityUtils.getUserId()); |
| | | } |
| | | |
| | | if(POINT_CHANGE_TYPE.add.name().equals(detail.getChangeType())){ |
| | | point.setTotalPoint(point.getTotalPoint() + detail.getPoint()); |
| | | point.setUsedPoint(point.getUsedPoint() + detail.getUsePoint()); |
| | | point.setExpiredPoint(point.getExpiredPoint() + detail.getExpiredPoint()); |
| | | }else if(POINT_CHANGE_TYPE.reduce.name().equals(detail.getChangeType())){ |
| | | // if(point.getTotalPoint()!= null && point.getTotalPoint()!=0 && point.getTotalPoint()>= detail.getPoint()){ |
| | | // point.setTotalPoint(point.getTotalPoint() - detail.getPoint()); |
| | | // }else{ |
| | | // //积分不足,直接清0 |
| | | // point.setTotalPoint(0); |
| | | // } |
| | | point.setTotalPoint(point.getTotalPoint() - detail.getPoint()); |
| | | } |
| | | if(isAdd){ |
| | | customerPointMapper.insert(point); |
| | | }else{ |
| | | customerPointMapper.updateById(point); |
| | | } |
| | | |
| | | } |
| | | |
| | | public void deductionPoint(ChangePointDTO dto) { |
| | | CustomerPointDetail detail = new CustomerPointDetail(); |
| | | Customer customer = getCustomer(dto.getCustomerId()); |
| | | detail.setCustomerId(customer.getId()); |
| | | detail.setUserId(customer.getUserId()); |
| | | detail.setPoint(dto.getPoint()); |
| | | detail.setRemarks(dto.getRemarks()); |
| | | detail.setRecordDate(LocalDate.now()); |
| | | detail.setChangeType(POINT_CHANGE_TYPE.reduce.name()); |
| | | detail.setType(POINT_TYPE.deduction.name()); |
| | | detail.create(SecurityUtils.getUserId()); |
| | | customerPointDetailMapper.insert(detail); |
| | | |
| | | //更新汇总表 |
| | | updateCustomerPoint(detail); |
| | | } |
| | | } |