ReceiptContainerDetailServiceImpl.java 3.81 KB
package com.huaheng.pc.receipt.receiptContainerDetail.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContainerDetailMapper, ReceiptContainerDetail> implements ReceiptContainerDetailService{

    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    /**
     * 根据入库单编码查询入库组盘明细
     * @param receiptCode 入库单编码
     * @return AjaxResult
     */
    @Override
    public AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode) {
        LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(ReceiptContainerDetail::getReceiptCode, receiptCode)
                .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());

        List<Map<String, Object>> detail = this.listMaps(lambdaQueryWrapper);
        return AjaxResult.success(detail);
    }

    /**
     * 撤销入库组盘明细
     * @param idList
     * @return
     */
    @Override
    public Boolean detailRemove(List<Integer> idList) {
        for (Integer id : idList){
            ReceiptContainerDetail receiptContainerDetail = this.getById(id);
            //如果已生成任务不允许撤销
            if (receiptContainerDetail.getStatus() < 10){
                //回滚入库单明细收货数量
                ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
                receiptDetail.setOpenQty(receiptDetail.getOpenQty() - receiptContainerDetail.getQty());
                if (!receiptDetailService.updateById(receiptDetail)){throw new SecurityException("回滚入库单明细失败");}

                //查询入库头表
                LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
                containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
                List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda);
                //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
                if (containerDetailList == null){
                    ReceiptHeader receiptHeader = new ReceiptHeader();
                    receiptHeader.setId(receiptContainerDetail.getReceiptId());
                    receiptHeader.setFirstStatus(200);
                    receiptHeader.setLastStatus(200);
                    receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());

                    if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); }
                }

            } else {
                throw new SecurityException("已生成任务,不允许取消");
            }
        }
        return true;
    }


}