AcsReceiptService.java 7.8 KB
package com.huaheng.api.acs.service;

import com.alibaba.fastjson.JSONException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.huaheng.api.general.service.BasicDataApiService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.BusinessException;
import com.huaheng.common.utils.DataUtils;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.mobile.receipt.ReceiptBill;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.sap.domain.SapReceiptData;
import com.huaheng.pc.sap.domain.SapReceiptDetailData;
import com.huaheng.pc.sap.service.SapReceiptDataService;
import com.huaheng.pc.sap.service.SapReceiptDetailDataService;
import com.huaheng.pc.task.agvTask.service.AgvTaskService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName AcsServiceImpl
 * @Description TODO
 * @Author Administrator
 * @Date 2019/12/2615:38
 */
@Service
public class AcsReceiptService {

    private static final Logger logger = LoggerFactory.getLogger(AcsReceiptService.class);

    @Resource
    private SapReceiptDataService sapReceiptDataService;
    @Resource
    private SapReceiptDetailDataService sapReceiptDetailDataService;
    @Resource
    private MaterialService materialService;
    @Resource
    private BasicDataApiService basicDataApiService;
    @Resource
    private AcsReceiptService acsReceiptService;
    @Resource
    private ContainerService containerService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private AgvTaskService agvTaskService;


    /**
     * 商片仓拍照入库
     *
     * @param receiptBills
     * @return
     */
    public AjaxResult getReceiptContainerByB(List<ReceiptBill> receiptBills) {
        if (receiptBills == null || receiptBills.size() <= 0) {
            throw new JSONException("商片仓入库:没有信息");
        }
        String containerCode = receiptBills.get(0).getContainerCode();
        if (StringUtils.isEmpty(containerCode)) {
            throw new JSONException("商片仓入库:没有托盘信息");
        }
        Container container = containerService.getContainerByCode(containerCode, QuantityConstant.WAREHOUSECODE);
        if (container == null) {
            return AjaxResult.error(containerCode + "容器号:不存在系统");
        }
        if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
            return AjaxResult.error(containerCode + " 容器状态不为空");
        }
        List<InventoryDetail> inventoryDetails = inventoryDetailService.list(new LambdaQueryWrapper<InventoryDetail>()
                .eq(InventoryDetail::getContainerCode, containerCode));
        if (!inventoryDetails.isEmpty()) {
            return AjaxResult.error(containerCode + " 容器存在库存");
        }
        Integer integer = taskHeaderService.UncompleteCount(containerCode, QuantityConstant.WAREHOUSECODE);
        if (integer.intValue() > 0) {
            return AjaxResult.error(containerCode + "容器存在未完成的立库任务");
        }
        int unCompleteTask = agvTaskService.getUnCompleteTask(containerCode);
        if (unCompleteTask > 0) {
            return AjaxResult.error(containerCode + "容器存在未完成的AGV任务");
        }
        return acsReceiptService.saveReceiptContainer(receiptBills);
    }

    @Transactional(rollbackFor = Exception.class)
    public AjaxResult saveReceiptContainer(List<ReceiptBill> receiptBills) {
        String containerCode = receiptBills.get(0).getContainerCode();
        int area = receiptBills.get(0).getArea();
        boolean tag = sapReceiptDataService.checkDataExist(containerCode, null);
        if (!tag) {
            throw new BusinessException("入库:请不要重复发送相同的数据");
        }

        SapReceiptData sapReceiptData = new SapReceiptData();
        if (area == 11) {
            sapReceiptData.setLgort("SC01");
            sapReceiptData.setLgnum("SP2");
            sapReceiptData.setFromPos("2B01");
            sapReceiptData.setPlType(1);
        }
        sapReceiptData.setUniqueId(DataUtils.createUniqueId());
        sapReceiptData.setDrumId(containerCode);
        sapReceiptData.setMFlag("2");
        sapReceiptData.setDatum(DateUtils.getDate());
        sapReceiptData.setUzeit(DateUtils.getTimes());
        sapReceiptData.setInKind(1);

        if (!sapReceiptDataService.save(sapReceiptData)) {
            throw new BusinessException("入库:保存信息异常");
        }
        saveSapReceiptDetail(receiptBills, sapReceiptData);
        return AjaxResult.success();
    }

    public void saveSapReceiptDetail(List<ReceiptBill> receiptBills, SapReceiptData sapReceiptData) {
        List<SapReceiptDetailData> list = new ArrayList<>();
        for (ReceiptBill receiptBill : receiptBills) {
            if (StringUtils.isEmpty(receiptBill.getMaterialCode())) {
                throw new BusinessException("入库:请扫物料条码");
            }
            if (StringUtils.isEmpty(receiptBill.getRollNumber())) {
                throw new BusinessException("入库:请扫卷号条码");
            }
            if (sapReceiptData.getLgnum().equals("SP2")) {
                if (StringUtils.isNull(receiptBill.getContainerNumber())) {
                    throw new BusinessException("入库:没有位置号");
                }
            }
            if (sapReceiptData.getLgnum().equals("WJ2")) {
                if (StringUtils.isNull(receiptBill.getLevel())) {
                    throw new BusinessException("入库:没有等级");
                }
            }
            if (StringUtils.isNull(receiptBill.getQty())) {
                throw new BusinessException("入库:数量为空");
            }
            SapReceiptDetailData sapReceiptDetailData = new SapReceiptDetailData();
            sapReceiptDetailData.setDrumId(sapReceiptData.getDrumId());
            sapReceiptDetailData.setLgnum(sapReceiptData.getLgnum());
            sapReceiptDetailData.setLgort(sapReceiptData.getLgort());
            sapReceiptDetailData.setUniqueId(sapReceiptData.getUniqueId());
            sapReceiptDetailData.setVerme(receiptBill.getQty());
            sapReceiptDetailData.setCharg(receiptBill.getRollNumber());
            sapReceiptDetailData.setMatnr(receiptBill.getMaterialCode());
            if (StringUtils.isNotNull(receiptBill.getContainerNumber())) {
                sapReceiptDetailData.setErrmsg(receiptBill.getContainerNumber().toString());
            }

            Material material = materialService.getMaterialByCode(receiptBill.getMaterialCode(), QuantityConstant.WAREHOUSECODE);
            if (StringUtils.isNull(material)) {
                material = new Material();
                material.setCode(receiptBill.getMaterialCode());
                material.setName(receiptBill.getMaterialCode());
                basicDataApiService.material(material);
            }
            list.add(sapReceiptDetailData);
        }
        if (!sapReceiptDetailDataService.saveBatch(list)) {
            throw new BusinessException("入库:保存信息异常1");
        }
    }

}