package com.sunda.spmswms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sunda.spmswms.entity.SapPackageBox;
import com.sunda.spmswms.mapper.SapPackageBoxMapper;
import com.sunda.spmswms.service.ISapPackageBoxService;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

/**
 * <p>
 * 装箱单箱码关系表 服务实现类
 * </p>
 *
 * @author Wayne
 * @since 2021-04-22
 */
@Service
public class SapPackageBoxServiceImpl extends ServiceImpl<SapPackageBoxMapper, SapPackageBox> implements ISapPackageBoxService {

    /** 出库任务结果明细，更新装箱单箱码实际出库箱码数量。存在一个箱码对多行数据，可能一次更新多行数据。 */
    @Override
    public int updateSapPackageBox(String packageList, String boxNote, double actualOperateQty, String whsOutUuid, String containerBrand, String packingSpec, String loadingType) {
        SapPackageBox sapPackageBox = new SapPackageBox();
        sapPackageBox.setActualOperateQty(actualOperateQty);
        sapPackageBox.setWhsOutUuid(whsOutUuid);
        sapPackageBox.setContainerBrand(containerBrand);
        sapPackageBox.setPackingSpec(packingSpec);
        sapPackageBox.setLoadingType(loadingType);
        
        /**
         * 因为存在同个装箱单任务1的箱码BJ-1XXXX-0101不出库，而在任务2中出库，
         * 如果只根据装箱单号、箱码进行更新，那么在更新任务1时会把任务2的箱码BJ-1XXXX-0101变成任务1的，
         * 这会造成任务1会多出任务明细，任务2会少任务明细，因此再加上出库任务的UUID进行更新
         * 2022-10-25 xzp add
         */
        List<SapPackageBox> boxList = this.baseMapper.selectList(new QueryWrapper<SapPackageBox>()
                .eq("PACKAGE_LIST", packageList).eq("BOX_NOTE", boxNote).eq("WHS_OUT_UUID", whsOutUuid));
        if (CollectionUtils.isEmpty(boxList)) {
        	return this.baseMapper.update(sapPackageBox, new QueryWrapper<SapPackageBox>()
                    .eq("PACKAGE_LIST", packageList).eq("BOX_NOTE", boxNote));
        } else {
        	return this.baseMapper.update(sapPackageBox, new QueryWrapper<SapPackageBox>()
                    .eq("PACKAGE_LIST", packageList).eq("BOX_NOTE", boxNote).eq("WHS_OUT_UUID", whsOutUuid));
        }
    }

    /** 多出的箱码，新增数据到装箱单箱码关系表中，unplanned = 1 表示是计划之外新增出库的箱码 */
    @Override
    public int addSapPackageBox(String packageList, String boxNote, double actualOperateQty, String unplanned, String whsOutUuid, String containerBrand, String packingSpec, String loadingType) {
        SapPackageBox sapPackageBox = new SapPackageBox();
        sapPackageBox.setPackageList(packageList);
        sapPackageBox.setBoxNote(boxNote);
        sapPackageBox.setActualOperateQty(actualOperateQty);
        sapPackageBox.setUnplanned(unplanned);
        sapPackageBox.setWhsOutUuid(whsOutUuid);
        sapPackageBox.setContainerBrand(containerBrand);
        sapPackageBox.setPackingSpec(packingSpec);
        sapPackageBox.setLoadingType(loadingType);
        return this.baseMapper.insert(sapPackageBox);
    }

    @Override
    public int deleteUnplannedBN(String whsOutUuid, String unplanned) {
        QueryWrapper<SapPackageBox> queryWrapper = new QueryWrapper<SapPackageBox>()
                .eq("WHS_OUT_UUID", whsOutUuid).eq("UNPLANNED", unplanned);
        return this.baseMapper.delete(queryWrapper);
    }
}
