AsServiceImpl.java 7.76 KB
package com.huaheng.api.as.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.inventory.asmInventory.domain.AsmInventory;
import com.huaheng.pc.inventory.asmInventory.service.IAsmInventoryService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ASDocumentDetail;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 升降柜实现方法
 * @author xcq
 */
@Service
public class AsServiceImpl implements AsService {

    @Resource
    private ShipmentDetailService shipmentDetailService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private AsService asService;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult executionResultFeedbackService(List<ASDocumentDetail> asDocumentDetailList) {
        if (asDocumentDetailList == null || asDocumentDetailList.size() == 0){
            return AjaxResult.error("执行结果不能为空值!");
        }
        List<String> codes = asDocumentDetailList.stream().map(ASDocumentDetail::getRIG_ORDINE).distinct().collect(Collectors.toList());
        for (ASDocumentDetail asDocumentDetail : asDocumentDetailList){
            String code = asDocumentDetail.getRIG_ORDINE();
            String materialCode = asDocumentDetail.getRIG_ARTICOLO();
            // 查询出库单详情
            LambdaQueryWrapper<ShipmentDetail> query = Wrappers.lambdaQuery();
            query.eq(ShipmentDetail::getShipmentCode, code)
                    .eq(ShipmentDetail::getMaterialCode, materialCode);
            ShipmentDetail shipmentDetail = shipmentDetailService.getOne(query);
            if (shipmentDetail != null && (!QuantityConstant.SHIPMENT_HEADER_RETURN.equals(shipmentDetail.getStatus()))){
                shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_RETURN);
                shipmentDetail.setTaskQty(asDocumentDetail.getRIG_QTAE());
                shipmentDetailService.updateById(shipmentDetail);
            }
        }
        for (String code : codes){
            LambdaQueryWrapper<ShipmentDetail> query = Wrappers.lambdaQuery();
            query.eq(ShipmentDetail::getShipmentCode, code);
            List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(query);
            Boolean complete = true;
            BigDecimal total = BigDecimal.ZERO;
            for (ShipmentDetail item : shipmentDetailList){
                if (!QuantityConstant.SHIPMENT_HEADER_RETURN.equals(item.getStatus())){
                    complete = false;
                }
                total = total.add(item.getTaskQty());
            }
            if (complete){
                LambdaQueryWrapper<ShipmentHeader> queryWrapper = Wrappers.lambdaQuery();
                queryWrapper.eq(ShipmentHeader::getCode, code);
                ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(queryWrapper);
                shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_RETURN);
                shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_RETURN);
                shipmentHeader.setTotalQty(total);
                shipmentHeaderService.updateById(shipmentHeader);
            }

        }
        return AjaxResult.success();
    }


    @Resource
    private IAsmInventoryService asmInventoryService;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult shipmentExecutionResult(List<ASDocumentDetail> asDocumentDetailList) {
        if (asDocumentDetailList == null || asDocumentDetailList.size() == 0){
            return AjaxResult.error("执行结果不能为空值!");
        }
        for (ASDocumentDetail asDocumentDetail : asDocumentDetailList){
            String id = asDocumentDetail.getRIG_ORDINE();
            String materialCode = asDocumentDetail.getRIG_ARTICOLO();
            // 查询出库单详情
            LambdaQueryWrapper<AsmInventory> query = Wrappers.lambdaQuery();
            query.eq(AsmInventory::getId, id)
                    .eq(AsmInventory::getMaterialCode, materialCode);
            AsmInventory asmInventory = asmInventoryService.getOne(query);
            if (asmInventory != null && (!QuantityConstant.SHIPMENT_HEADER_RETURN.equals(asmInventory.getState()))){
                asmInventory.setState(QuantityConstant.SHIPMENT_HEADER_RETURN);
                asmInventory.setTaskQty(asDocumentDetail.getRIG_QTAE());
                asmInventoryService.updateById(asmInventory);
                // 反馈结果完成后创建升降柜周转任务
                AjaxResult result = asService.createTransitTask(asmInventory);
                if (result.hasErr()){
                    throw new ServiceException(result.getMsg());
                }
            }
        }
        return AjaxResult.success();
    }


    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;

    @Override
    public AjaxResult createTransitTask(AsmInventory asmInventory) {
        // 创建任务头表
        TaskHeader taskHeader = new TaskHeader();
        // 任务类型
        taskHeader.setTaskType(QuantityConstant.TASK_ASM_SHIPMENT);
        // 任务状态
        taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
        // 仓库
        taskHeader.setWarehouseCode(QuantityConstant.WAREHOUSECODE);
        // 容器号
        taskHeader.setContainerCode(asmInventory.getLocation());
        // 创建时间
        taskHeader.setCreated(new Date());
        // 创建人
        taskHeader.setCreatedBy(asmInventory.getCreatedBy());
        // 更新时间
        taskHeader.setLastUpdated(new Date());
        // 更新用户
        taskHeader.setLastUpdatedBy(asmInventory.getLastUpdatedBy());
        // 周转任务状态
        taskHeader.setTurnoverStatus(QuantityConstant.TASK_NEWLY_BUILT);
        if (!taskHeaderService.save(taskHeader)){
            throw new ServiceException("创建周转任务头表失败!");
        }
        // 查询物料数据
        // 创建任务详情
        TaskDetail taskDetail = new TaskDetail();
        // 任务头表id
        taskDetail.setTaskId(taskHeader.getId());
        // 物料编码
        taskDetail.setMaterialCode(asmInventory.getMaterialCode());
        // 出库数量
        taskDetail.setQty(asmInventory.getTaskQty());
        // 容器号
        taskDetail.setContainerCode(asmInventory.getLocation());
        // 仓库
        taskDetail.setWarehouseCode(QuantityConstant.WAREHOUSECODE);
        // 货主
        taskDetail.setCompanyCode(QuantityConstant.COMPANYCODE);
        // 任务类型
        taskDetail.setTaskType(QuantityConstant.TASK_ASM_SHIPMENT);
        if (!taskDetailService.save(taskDetail)){
            throw new ServiceException("创建任务详情失败!");
        }
        return AjaxResult.success();
    }
}