package com.ltkj.mall.service.impl; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.exception.user.DataNotFoundException; import com.ltkj.common.utils.DateUtils; import com.ltkj.mall.domain.MallFootprint; import com.ltkj.mall.mallOrderUtils.OrderConstants; import com.ltkj.mall.mapper.MallFootprintMapper; import com.ltkj.mall.mapper.MallOrderMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ltkj.common.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; import com.ltkj.mall.domain.MallOrderGoods; import com.ltkj.mall.domain.MallOrder; import com.ltkj.mall.service.IMallOrderService; import javax.annotation.Resource; /** * 订单Service业务层处理 * * @author ltkj_赵佳豪&李格 * @date 2023-07-12 */ @Service public class MallOrderServiceImpl extends ServiceImpl implements IMallOrderService { @Resource private MallOrderMapper mallOrderMapper; /** * 查询订单 * * @param id 订单主键 * @return 订单 */ @Override public MallOrder selectMallOrderById(Long id) { return mallOrderMapper.selectMallOrderById(id); } /** * 查询订单列表 * * @param mallOrder 订单 * @return 订单 */ @Override public List selectMallOrderList(MallOrder mallOrder) { return mallOrderMapper.selectMallOrderList(mallOrder); } /** * 新增订单 * * @param mallOrder 订单 * @return 结果 */ @Transactional @Override public int insertMallOrder(MallOrder mallOrder) { //mallOrder.setCreateTime(DateUtils.getNowDate()); int rows = mallOrderMapper.insertMallOrder(mallOrder); insertMallOrderGoods(mallOrder); return rows; } /** * 修改订单 * * @param mallOrder 订单 * @return 结果 */ @Transactional @Override public int updateMallOrder(MallOrder mallOrder) { //mallOrder.setUpdateTime(DateUtils.getNowDate()); mallOrderMapper.deleteMallOrderGoodsByOrderId(mallOrder.getId()) ; insertMallOrderGoods(mallOrder); return mallOrderMapper.updateMallOrder(mallOrder); } /** * 批量删除订单 * * @param ids 需要删除的订单主键 * @return 结果 */ @Transactional @Override public int deleteMallOrderByIds(Long[] ids) { mallOrderMapper.deleteMallOrderGoodsByOrderIds(ids); return mallOrderMapper.deleteMallOrderByIds(ids); } /** * 删除订单信息 * * @param id 订单主键 * @return 结果 */ @Transactional @Override public int deleteMallOrderById(Long id) { mallOrderMapper.deleteMallOrderGoodsByOrderId(id); return mallOrderMapper.deleteMallOrderById(id); } /** * 新增订单商品信息 * * @param mallOrder 订单对象 */ public void insertMallOrderGoods(MallOrder mallOrder) { List mallOrderGoodsList = mallOrder.getMallOrderGoodsList(); Long id = mallOrder.getId(); if (StringUtils.isNotNull(mallOrderGoodsList)) { List list = new ArrayList(); for (MallOrderGoods mallOrderGoods : mallOrderGoodsList) { mallOrderGoods.setOrderId(id); list.add(mallOrderGoods); } if (list.size() > 0) { mallOrderMapper.batchMallOrderGoods(list); } } } //这里应该产生一个唯一的订单,但是实际上这里仍然存在两个订单相同的可能性 @Override public String generateOrderSn(Integer userId) { DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMdd"); String now = df.format(LocalDate.now()); String orderSn = now + getRandomNum(6); while (countByOrderSn(userId, orderSn) != 0) { orderSn = now + getRandomNum(6); } return orderSn; } private String getRandomNum(Integer num) { String base = "0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < num; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } public int countByOrderSn(Integer userId, String orderSn) { return count(new LambdaQueryWrapper() .eq(MallOrder::getUserId,userId) .eq(MallOrder::getOrderSn,orderSn) ); } @Override public MallOrder findBySn(String orderSn) { return this.getOne(new LambdaQueryWrapper() .eq(MallOrder::getOrderSn,orderSn) ,false); } }