116 lines
4.5 KiB
Java
116 lines
4.5 KiB
Java
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<CashierMapper, Cashier> implements CashierService {
|
|
|
|
@Override
|
|
public PageResult<Cashier> pageRel(CashierParam param) {
|
|
PageParam<Cashier, CashierParam> page = new PageParam<>(param);
|
|
page.setDefaultOrder("create_time desc");
|
|
List<Cashier> list = baseMapper.selectPageRel(page, param);
|
|
return new PageResult<>(list, page.getTotal());
|
|
}
|
|
|
|
@Override
|
|
@Transactional(rollbackFor = {Exception.class})
|
|
public CashierVo listRel(CashierParam param) {
|
|
List<Cashier> list = baseMapper.selectListRel(param);
|
|
// 排序
|
|
PageParam<Cashier, CashierParam> page = new PageParam<>();
|
|
page.setDefaultOrder("create_time desc");
|
|
|
|
final List<Cashier> 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<CashierVo> listRelByGroupId(CashierParam param) {
|
|
List<Cashier> list = baseMapper.selectListRel(param);
|
|
// 排序
|
|
PageParam<Cashier, CashierParam> page = new PageParam<>();
|
|
page.setDefaultOrder("create_time desc");
|
|
final List<Cashier> cashiers = page.sortRecords(list);
|
|
|
|
// 计算单品总价
|
|
cashiers.forEach(d->{
|
|
d.setTotalPrice(d.getPrice().multiply(BigDecimal.valueOf(d.getCartNum())));
|
|
});
|
|
|
|
final Map<Integer, List<Cashier>> collectByGroupId = cashiers.stream().collect(Collectors.groupingBy(Cashier::getGroupId));
|
|
|
|
// 整理数据
|
|
final ArrayList<CashierVo> cashierVos = new ArrayList<>();
|
|
for (Integer groupId : collectByGroupId.keySet()) {
|
|
final CashierVo vo = new CashierVo();
|
|
final List<Cashier> 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));
|
|
}
|
|
|
|
}
|