package com.gxwebsoft.shop.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.shop.entity.Cashier; import com.gxwebsoft.shop.mapper.CashierMapper; import com.gxwebsoft.shop.param.CashierParam; import com.gxwebsoft.shop.service.CashierService; import com.gxwebsoft.shop.vo.CashierVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 收银Service实现 * * @author 科技小王子 * @since 2024-08-04 11:51:43 */ @Service public class CashierServiceImpl extends ServiceImpl implements CashierService { @Override public PageResult pageRel(CashierParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); return new PageResult<>(list, page.getTotal()); } @Override @Transactional(rollbackFor = {Exception.class}) public CashierVo listRel(CashierParam param) { List list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("create_time desc"); final List cashiers = page.sortRecords(list); // 整理数据 final CashierVo vo = new CashierVo(); // 计算单品总价 for (Cashier cashier : cashiers) { cashier.setTotalPrice(cashier.getPrice().multiply(BigDecimal.valueOf(cashier.getCartNum()))); } // 计算购物车金额 final Integer cartNum = cashiers.stream().map(Cashier::getCartNum).reduce(Integer::sum).orElse(0); final Integer selectNums = cashiers.stream().filter(d -> d.getSelected().equals(true)).map(Cashier::getCartNum).reduce(Integer::sum).orElse(0); final BigDecimal totalPrice = cashiers.stream().filter(d -> d.getSelected().equals(true)).map(Cashier::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add); // 封装数据 vo.setCashiers(cashiers); vo.setTotalPrice(totalPrice); vo.setTotalNums(Long.valueOf(cartNum)); vo.setSelectNums(Long.valueOf(selectNums)); return vo; } @Override @Transactional(rollbackFor = {Exception.class}) public List listRelByGroupId(CashierParam param) { List list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("create_time desc"); final List cashiers = page.sortRecords(list); // 计算单品总价 cashiers.forEach(d->{ d.setTotalPrice(d.getPrice().multiply(BigDecimal.valueOf(d.getCartNum()))); }); final Map> collectByGroupId = cashiers.stream().collect(Collectors.groupingBy(Cashier::getGroupId)); // 整理数据 final ArrayList cashierVos = new ArrayList<>(); for (Integer groupId : collectByGroupId.keySet()) { final CashierVo vo = new CashierVo(); final List cashierList = collectByGroupId.get(groupId); for (Cashier cashier : cashierList) { if (cashier.getGroupId().equals(groupId)) { // 计算购物车金额 final Integer cartNum = cashierList.stream().map(Cashier::getCartNum).reduce(Integer::sum).orElse(0); final Integer selectNums = cashierList.stream().filter(d -> d.getSelected().equals(true)).map(Cashier::getCartNum).reduce(Integer::sum).orElse(0); final BigDecimal totalPrice = cashierList.stream().filter(d -> d.getSelected().equals(true)).map(Cashier::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add); vo.setGroupId(Long.valueOf(groupId)); vo.setCashiers(cashierList); vo.setTotalPrice(totalPrice); vo.setTotalNums(Long.valueOf(cartNum)); vo.setSelectNums(Long.valueOf(selectNums)); vo.setComments("订单备注:"); } } cashierVos.add(vo); } return cashierVos; } @Override public Cashier getByIdRel(Integer id) { CashierParam param = new CashierParam(); param.setId(id); return param.getOne(baseMapper.selectListRel(param)); } }