ReceiptContainerDetailServiceImpl.java 4.97 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.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
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 org.springframework.web.bind.annotation.ResponseBody;

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;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    /**
     * 根据入库单编码查询入库组盘明细
     * @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().subtract(receiptContainerDetail.getQty()));

                //如果为临时容器,则删除
                receiptContainerDetail.getContainerCode();

                if (!receiptDetailService.updateById(receiptDetail)){throw new SecurityException("回滚入库单明细失败");}
                //删除组盘明细
                if (!this.removeById(id)){ throw new ServiceException("回滚入库组盘失败");}
                LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
                lambdaQueryWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerDetail.getReceiptContainerId());
                List<ReceiptContainerDetail> list = this.list(lambdaQueryWrapper);
                if (list.size() == 0){
                    if (!receiptContainerHeaderService.removeById(receiptContainerDetail.getReceiptContainerId())){
                        throw new ServiceException("删除入库组盘头失败");
                    }
                }

                //查询入库头表
                LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
                containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
                List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda);


                //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
                if (containerDetailList.size() == 0){
                    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;
    }


}