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 extends BaseService { private final CustomerPointMapper customerPointMapper; private final CustomerPointDetailMapper customerPointDetailMapper; public CustomerPointService(CustomerPointMapper customerPointMapper, CustomerPointDetailMapper customerPointDetailMapper) { this.customerPointMapper = customerPointMapper; this.customerPointDetailMapper = customerPointDetailMapper; } public Page queryPage(QueryCustomerPointDTO dto, Page page) { List list = customerPointMapper.queryPage(dto, page); page.setRecords(list); return page; } public Page queryCustomerDetails(QueryPointDetailDTO dto, Page page) { List 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() .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); } }