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<MallOrderMapper, MallOrder> 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<MallOrder> 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<MallOrderGoods> mallOrderGoodsList = mallOrder.getMallOrderGoodsList();
|
Long id = mallOrder.getId();
|
if (StringUtils.isNotNull(mallOrderGoodsList)) {
|
List<MallOrderGoods> list = new ArrayList<MallOrderGoods>();
|
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<MallOrder>()
|
.eq(MallOrder::getUserId,userId)
|
.eq(MallOrder::getOrderSn,orderSn)
|
);
|
}
|
|
@Override
|
public MallOrder findBySn(String orderSn) {
|
return this.getOne(new LambdaQueryWrapper<MallOrder>()
|
.eq(MallOrder::getOrderSn,orderSn)
|
,false);
|
}
|
|
}
|