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

import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.DataUtils;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.mobile.receipt.ReceiptBill;
import com.huaheng.pc.general.location.domain.Location;
import com.huaheng.pc.general.location.service.ILocationService;
import com.huaheng.pc.general.material.domain.Material;
import com.huaheng.pc.general.material.service.IMaterialService;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper;
import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapperAuto;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.mapper.ReceiptContainerHeaderMapper;
import com.huaheng.pc.receipt.receiptContainerHeader.mapper.ReceiptContainerHeaderMapperAuto;
import com.huaheng.pc.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.IReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.mapper.ReceiptHeaderMapper;
import com.huaheng.pc.receipt.receiptHeader.mapper.ReceiptHeaderMapperAuto;
import com.huaheng.pc.receipt.receiptHeader.service.IReceiptHeaderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 * 入库组盘明细 服务层实现
 * 
 * @author huaheng
 * @date 2018-08-19
 */
@Service
public class ReceiptContainerDetailServiceImpl implements IReceiptContainerDetailService {

    @Resource
    private ReceiptContainerDetailMapperAuto aotuMapper;
    @Resource
    private ReceiptContainerDetailMapper receiptContainerDetailMapper;
    @Resource
    private IReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private IReceiptHeaderService receiptHeaderService;
    @Resource
    private ILocationService locationService;
    @Resource
    private IMaterialService materialService;


    public List<ReceiptContainerDetail> selectListEntityByLike(ReceiptContainerDetail condition) {
        return aotuMapper.selectListEntityByLike(condition);
//        return receiptContainerDetailMapper.ListEntityByLike(condition);
    }

    public List<ReceiptContainerDetail> selectListEntityByEqual(ReceiptContainerDetail condition) {
        return aotuMapper.selectListEntityByEqual(condition);
    }

    public ReceiptContainerDetail selectFirstEntity(ReceiptContainerDetail condition) {
        ReceiptContainerDetail item = aotuMapper.selectFirstEntity(condition);
        return item;
    }

    public ReceiptContainerDetail selectEntityById(Integer id) {
        return aotuMapper.selectEntityById(id);
    }

    public List<Map<String, Object>> selectListMapByEqual(String columns, ReceiptContainerDetail condition) {
        return aotuMapper.selectListMapByEqual(columns, condition);
    }

    public Map<String, Object> selectFirstMap(String columns, ReceiptContainerDetail condition) {
        Map<String, Object> item = aotuMapper.selectFirstMap(columns, condition);
        return item;
    }

    public int insert(ReceiptContainerDetail record) {
        return aotuMapper.insert(record);
    }

    public int updateByModel(ReceiptContainerDetail record) {
        return aotuMapper.updateByModel(record);
    }

    public int updateByCondition(ReceiptContainerDetail record, ReceiptContainerDetail condition) {
        return aotuMapper.updateByCondition(record, condition);
    }

    public int deleteById(Integer id) {
        return aotuMapper.deleteById(id);
    }

    public int deleteByCondition(ReceiptContainerDetail condition) {
        return aotuMapper.deleteByCondition(condition);
    }

    @Override
    public Integer countByHeaderId(Integer readerId) {
        return  receiptContainerDetailMapper.countByHeaderId(readerId);
    }

    @Override
    public Integer countByReceiptId(Integer receiptId) {
        return  receiptContainerDetailMapper.countByReceiptId(receiptId);
    }

    /**
     * 删除入库配盘明细
     * @param id
     * @return
     */
    @Override
    @Transactional
    public AjaxResult deleteDetail(Integer id) {
        if (id == null)
            return AjaxResult.error("id不能为空");

        ReceiptContainerDetail receiptContainerDetail = this.selectEntityById(id);
        if (receiptContainerDetail == null)
            return AjaxResult.error("配盘明细不存在!");

        ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.selectEntityById(receiptContainerDetail.getHeaderId());
        if(receiptContainerHeader == null){
            return AjaxResult.error("找不到配盘单!");
        }
        if(receiptContainerHeader.getStatus() > 9){
            return AjaxResult.error("配盘单已经生成任务,不能删除");
        }
        //扣减入库单据得已收货数量
        receiptContainerDetailMapper.updateReceiptDetailQty(receiptContainerDetail.getReceiptDetailId(), receiptContainerDetail.getQty());
        //将已收货数量为0的入库单据明细状态改为0
        receiptContainerDetailMapper.updateReceiptDetailStatus(receiptContainerDetail.getReceiptDetailId());
        //删除入库组盘明细
        Integer result = this.deleteById(id);
        if (result > 0){
            //判断该容器是否还有其他明细,没有则删除该组盘主表,并且解除库位锁定
            Integer count=this.countByHeaderId(receiptContainerHeader.getId());
            if(count==0) {
                receiptContainerHeaderService.deleteById(receiptContainerHeader.getId());
                if (StringUtils.isNotEmpty(receiptContainerHeader.getLocationCode()))   {
                    locationService.updateStatus(receiptContainerHeader.getLocationCode(), "empty");
                }
            }
            //判断单据是否还存在组盘,不存在就回滚状态
            count = this.countByReceiptId(receiptContainerDetail.getReceiptId());
            if(count==0) {
                //恢复单据主表到新建状态
                ReceiptHeader receiptHeader = new ReceiptHeader();
                receiptHeader.setId(receiptContainerDetail.getReceiptId());
                receiptHeader.setFirstStatus((short) 0);
                receiptHeader.setLastStatus((short) 0);
                receiptHeaderService.updateByModel(receiptHeader);
            }
            return AjaxResult.success("删除配盘明细成功");
        }
        else
            return AjaxResult.error("删除配盘明细失败");
    }

    @Override
    public List<Integer> insertTodayReceiptcContainerDetail(int headerId, int receiptId, List<Integer> receiptDetailId, List<ReceiptBill> receiptBills) {
        List<Integer> mReceiptContainerIds = new ArrayList<>();
        ReceiptHeader condition = new ReceiptHeader();
        condition.setId(receiptId);
        condition.setWarehouseId(ShiroUtils.getWarehouseId());
        condition.setCompanyCodeList(ShiroUtils.getCompanyCodeList());
        condition.setDeleted(false);
        condition.setEnable(true);
        ReceiptHeader receiptHeader = receiptHeaderService.selectFirstEntity(condition);
        if(receiptHeader == null) {
            throw new ServiceException("没有找到入库单表头!");
        }
        for(int i=0; i<receiptBills.size(); i++) {
            ReceiptBill receiptBill = receiptBills.get(i);
            Material condition2 = new Material();
            condition2.setCode(receiptBill.getMaterialCode());
            condition2.setWarehouseId(ShiroUtils.getWarehouseId());
            condition2.setDeleted(false);
            condition2.setEnable(true);
            Material material = materialService.selectFirstEntity(condition2);
            ReceiptContainerDetail record = new ReceiptContainerDetail();
            record.setHeaderId(headerId);
            record.setReceiptCode(receiptHeader.getCode());
            record.setReceiptId(receiptId);
            record.setReceiptDetailId(receiptDetailId.get(i));
            record.setMaterialCode(receiptBill.getMaterialCode());
            record.setMaterialName(material.getName());
            record.setMaterialSpec(material.getSpecification());
            record.setQty(receiptBill.getQty());
            record.setCreatedBy(ShiroUtils.getLoginName());
            ReceiptContainerDetail receiptContainerDetail = selectFirstEntity(record);
            if(receiptContainerDetail == null) {
                insert(record);
                mReceiptContainerIds.add(record.getId());
            } else {
                mReceiptContainerIds.add(receiptContainerDetail.getId());
            }
        }
        return mReceiptContainerIds;
    }



}