ZarApiService.java 6.21 KB
package com.huaheng.api.sap.service;

import com.huaheng.api.sap.domain.ZarDomain;

import com.huaheng.api.wcs.service.taskCancel.TaskCancelService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.ZoneAreaUtils;
import com.huaheng.framework.web.domain.AjaxResult;

import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.sap.domain.Zarsh;
import com.huaheng.pc.sap.domain.Zarsi;
import com.huaheng.pc.sap.service.BackSapStatusService;
import com.huaheng.pc.sap.service.ZarshService;
import com.huaheng.pc.sap.service.ZarsiService;
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.Component;
import org.springframework.transaction.annotation.Transactional;

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


@Component
@Transactional
public class ZarApiService {
    @Resource
    private ZarshService zarshService;
    @Resource
    private ZarsiService zarsiService;
    @Resource
    private BackSapStatusService backSapStatusService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private TaskCancelService taskCancelService;


    /**
     *
     * @param zarDomain 入库出库单
     */
    public AjaxResult saveSapData(ZarDomain zarDomain) {
        if(StringUtils.isNull(zarDomain)){
            throw new ServiceException("参数为空");
        }
        List<Zarsi> zarsiList = zarDomain.getZarsiList();
        Zarsh zarsh=zarDomain.getZarsh();
        if(zarsiList==null||zarsiList.size()==0){
//            throw new ServiceException("zarsiList参数为空");
        }
        if(zarsh==null){
            throw new ServiceException("zarsh参数为空");
        }
        if(StringUtils.isEmpty(zarsh.getUniqueId())){
            throw new ServiceException("唯一号uniqueId参数为空");
        }
        Zarsh zarsh1=zarshService.checkZarshByUniqueId(zarsh.getUniqueId());
        if(StringUtils.isNotEmpty(zarsh.getCFlag())&&zarsh.getCFlag().equals("D")){
            //取消
            return cancelTaskBySap(zarsh);
        }
        if(zarsh1!=null){
            throw new ServiceException("单据已存在,请不要重复下发");
        }
        if(!zarshService.save(zarsh)){
            throw new ServiceException("保存主表数据失败");
        }
        if(!zarsiService.saveBatchs(zarsiList,zarsh)){
            throw new ServiceException("保存子表数据失败");
        }
        AjaxResult ajaxResult= zarshService.saveSapDataByApi(zarDomain);
        if(ajaxResult==null||ajaxResult.hasErr()){
            String msg=ajaxResult.getMsg();
            //调用sap的api,传递任务状态
            backSapStatusService.saveBackSapStatus(zarsh.getUniqueId(), zarsh.getLgnum(), null, 1, "C", null,msg);
        }
        return ajaxResult;
    }

    /**
     * 上游系统取消任务,入库已组盘不能取消;出库已下发任务不能取消
     * @param zarsh
     */
    public AjaxResult cancelTaskBySap(Zarsh zarsh){
        Integer mflag=zarsh.getMFlag();
        String uniqueId=zarsh.getUniqueId();
        Zarsh zarsh1=zarshService.checkZarshByUniqueId(zarsh.getUniqueId());
        if(zarsh1!=null){
            throw new ServiceException("找不到该任务,"+uniqueId);
        }
        AjaxResult ajaxResult=null;
        switch (mflag){
            case 2:
            case 8:
                ReceiptHeader receiptHeader=receiptHeaderService.getReceiptByReferCode(uniqueId);
                if(receiptHeader==null){
                    throw new ServiceException("找不到该任务,"+uniqueId);
                }
                if(receiptHeader.getFirstStatus()> QuantityConstant.RECEIPT_HEADER_RECEIVING){
                    throw new ServiceException("任务已经在执行,不能取消");
                }
                ajaxResult=receiptHeaderService.removeById(receiptHeader.getId().toString());
                break;
            case 1:
            case 3:
                //取消任务
                List<TaskDetail> list=taskHeaderService.getTaskByUnique(uniqueId);
                String ids="";
                for (TaskDetail detail:list){
                    Integer taskId=detail.getTaskId();
                    TaskHeader taskHeader = taskHeaderService.getById(taskId);
                    if(taskHeader.getStatus().intValue()  <= QuantityConstant.TASK_STATUS_BUILD) {
                        continue;
                    }
                    String containerCode = taskHeader.getContainerCode();
                    if (StringUtils.isEmpty(containerCode)) {
                        return AjaxResult.error("空托盘");
                    }
                    //获取任务库区,调用该库区wcs
                    Integer area= ZoneAreaUtils.getAreaByZoneCode(taskHeader.getZoneCode());
                    AjaxResult ajaxResult1 = taskCancelService.cancelTask(String.valueOf(taskId),
                            taskHeader.getWarehouseCode(), area.toString());
                    if (ajaxResult1.hasErr()) {
                        return ajaxResult1;
                    }
                    ids=taskId+",";
                }
                ajaxResult=taskHeaderService.cancelTask(Convert.toIntArray(ids));
                break;
            default:
                break;

        }
        if(ajaxResult==null||ajaxResult.hasErr()){
            return ajaxResult;
        }
        //更新zarsh表
        zarsh1.setCFlag("D");
        zarshService.updateById(zarsh1);
        return ajaxResult;
    }

}