WaiguanShipmentController.java 7 KB
package com.huaheng.api.wcs.controller;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.stream.Collectors;

import javax.annotation.Resource;

import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import com.alibaba.fastjson.JSONException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.wcs.domain.WaiguanShipmentDomain;
import com.huaheng.api.wcs.service.WaiguanShipmentService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
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.zone.domain.Zone;
import com.huaheng.pc.config.zone.service.ZoneService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

/**
 * 重入处理接口
 * wcs向wms传递数据
 * @author ricard
 * @date   2019/10/11
 */

@RestController
@RequestMapping("/API/WMS/v2")
public class WaiguanShipmentController extends BaseController {

    @Resource
    private WaiguanShipmentService waiguanShipmentService;
    @Resource
    private ContainerService containerService;
    @Resource
    private TaskHeaderService taskHeaderService;

    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ZoneService zoneService;

    /**
     * 外观仓通过托盘请求出库信息
     * @param
     * @return
     */
    @Log(title = "wcs外观仓通过托盘请求出库信息", action = BusinessType.INSERT)
    @PostMapping("/getTaskByContainerCode")
    @ApiOperation("wcs外观仓通过托盘请求出库信息")
    @ResponseBody
    @ApiLogger(apiName = "wcs外观仓通过托盘请求出库信息", from = "WCS")
    public AjaxResult getTaskByContainerCode(@RequestBody WaiguanShipmentDomain waiguanShipmentDomain) {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return waiguanShipmentService.getTaskByContainerCode(waiguanShipmentDomain);
            }
        });
        return ajaxResult;
    }

    @PostMapping("/quickReceiptByF")
    @ApiOperation("外观仓收货保存")
    @Log(title = "外观仓收货保存", action = BusinessType.OTHER)
    @Transactional(rollbackFor = Exception.class)
    @ApiLogger(apiName = "外观仓收货保存", from = "WCS")
    public AjaxResult quickReceiptByF(@RequestBody @ApiParam(value = "收货单") List<ReceiptBill> receiptBills) throws Exception {
        if (receiptBills == null || receiptBills.size() <= 0) {
            throw new JSONException("没有收货信息");
        }
        if (StringUtils.isNull(receiptBills.get(0).getArea())) {
            throw new JSONException("area信息没有");
        }
        Zone zone = zoneService.getZoneByArea(receiptBills.get(0).getArea().toString());
        if (zone == null) {
            throw new JSONException("没有找到对应的库区area=" + receiptBills.get(0).getArea());
        }
        String zoneCode = zone.getCode();
        // 设置wcs固定登录缓存,调用公共组盘接口
        ShiroUtils.setUserByWcsZone("WCS", QuantityConstant.WAREHOUSECODE, zoneCode);

        String containerCode = receiptBills.get(0).getContainerCode();
        String locationCode = receiptBills.get(0).getLocationCode();
        String companyCode = QuantityConstant.COMPANYCODE;
        String receiptDetailId = receiptBills.get(0).getReceiptDetailId();

        LambdaQueryWrapper<Container> containerQueryWrapper = Wrappers.lambdaQuery();
        containerQueryWrapper.eq(Container::getCode, containerCode);
        Container container = containerService.getOne(containerQueryWrapper);
        if (container == null) {
            throw new JSONException("不存在这个托盘");
        }
//pda入库增加托盘任务校验
        List<TaskHeader> unfinishTask = taskHeaderService.getUnCompleteTaskList().stream().filter((t) -> {
            return t.getContainerCode().equals(container.getCode());
        }).collect(Collectors.toList());

        if (unfinishTask.size() > 0) {
            TaskHeader t = unfinishTask.get(0);
            String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(t.getCreated());
            throw new ServiceException(container.getCode() + "托盘已经有未完成的任务,请不要重复下发\n该托盘任务创建于:" + time);
        }

        if (locationCode != null && locationCode.equals(container.getLocationCode())) {
        } else {
            ReceiptContainerView record = new ReceiptContainerView();
            record.setContainerCode(containerCode);
            record.setLocationCode(locationCode);
            record.setTaskType((short)100);
            record.setCompanyCode(receiptBills.get(0).getCompanyCode());
            receiptContainerHeaderService.checkContainer(record);
            if (locationCode != null) {
                receiptContainerHeaderService.mobileCheckLocationCode(record);
            }
            int receiptHeaderId = receiptHeaderService.createHeader(companyCode, ShiroUtils.getZoneCode());
            ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptHeaderId);
            List<Integer> receiptDetailIds = receiptDetailService.insertTodayReceiptDetail(receiptHeaderId, receiptBills, true, companyCode);
            if (receiptDetailIds != null && receiptDetailIds.size() > 0) {
                AjaxResult ajaxResult = receiptContainerHeaderService.createReceiptContainer(receiptDetailIds, receiptBills.get(0));
                if (ajaxResult.hasErr()) {
                    return ajaxResult;
                }
            } else {
                return AjaxResult.error("插入入库明细表单失败");
            }
        }

        return AjaxResult.success("收货成功");
    }

}