package com.yeqifu.bus.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yeqifu.bus.entity.Goods;
import com.yeqifu.bus.entity.Sales;
import com.yeqifu.bus.entity.Salesback;
import com.yeqifu.bus.mapper.GoodsMapper;
import com.yeqifu.bus.mapper.SalesMapper;
import com.yeqifu.bus.mapper.SalesbackMapper;
import com.yeqifu.bus.service.ISalesbackService;
import com.yeqifu.sys.common.WebUtils;
import com.yeqifu.sys.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 * InnoDB free: 9216 kB 服务实现类
 * </p>
 *
 * @author luoyi-
 * @since 2019-12-23
 */
@Service
public class SalesbackServiceImpl extends ServiceImpl<SalesbackMapper, Salesback> implements ISalesbackService {

    @Autowired
    private SalesMapper salesMapper;

    @Autowired
    private GoodsMapper goodsMapper;

    /**
     * @param id 销售单的id
     * @param number 退货的数量
     * @param remark 退货的备注信息
     */
    @Override
    public void addSalesback(Integer id, Integer number, String remark) {
        //1.通过销售单ID查询出销售单信息
        Sales sales = salesMapper.selectById(id);
        //2.根据商品ID查询商品信息
        Goods goods = goodsMapper.selectById(sales.getGoodsid());
        //3.修改商品的数量 ，将商品的现有数量加上退货的数量
        goods.setNumber(goods.getNumber()+number);

        // 修改销售单的数量，将销售单的数量减去退货的数量
        sales.setNumber(sales.getNumber()-number);
        // 更新销售单信息
        salesMapper.updateById(sales);

        // 4. 更新商品信息
        goodsMapper.updateById(goods);

        //5.添加退货单信息
        Salesback salesback = new Salesback();
        // 设置退货单的商品ID，从销售单中获取
        salesback.setGoodsid(sales.getGoodsid());
        // 设置退货数量
        salesback.setNumber(number);
        // 从会话中获取用户信息
        User user = (User) WebUtils.getSession().getAttribute("user");
        // 设置操作人，使用从会话中获取的用户名称
        salesback.setOperateperson(user.getName());
        // 设置退货价格，从销售单中获取
        salesback.setSalebackprice(sales.getSaleprice());
        // 设置付款类型，从销售单中获取
        salesback.setPaytype(sales.getPaytype());
        // 设置退货时间为当前时间
        salesback.setSalesbacktime(new Date());
        // 设置备注信息
        salesback.setRemark(remark);

        // 设置客户ID，从销售单中获取
        salesback.setCustomerid(sales.getCustomerid());

        // 将退货单信息插入到数据库中
        getBaseMapper().insert(salesback);
    }
    
}
