WinController.java 12.9 KB
package com.huaheng.api.erp.controller;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.zxing.WriterException;
import com.huaheng.api.erp.domain.MaterialDomain;
import com.huaheng.api.erp.domain.PDAInventory;
import com.huaheng.api.erp.domain.PrintDomain;
import com.huaheng.api.tv.domain.ProjectBean;
import com.huaheng.api.wcs.domain.LabelDomain;
import com.huaheng.api.wcs.domain.LabelingDomain;
import com.huaheng.common.constant.HttpConstant;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.QRCodeGenerator;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.constant.ProcessCode;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.service.ConfigService;
import com.huaheng.pc.config.address.domain.Address;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.proPackaging.domain.ProPackaging;
import com.huaheng.pc.config.proPackaging.service.IProPackagingService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @author lty
 */
@RestController
@RequestMapping("/API/WMS/v2")
public class WinController extends BaseController {

    @Resource
    TaskHeaderService taskHeaderService;
    @Resource
    AddressService addressService;
    @Resource
    ShipmentHeaderService shipmentHeaderService;
    @Resource
    ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    ReceiptHeaderService receiptHeaderService;
    @Resource
    ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private ConfigService configService;
    @Resource
    IProPackagingService proPackingService;

    @PostMapping("/printLabel")
    @ApiOperation("请求打印数据")
    @ResponseBody
    @ApiLogger(apiName = "请求打印数据", from = "win or wcs")
    public AjaxResult printLabel(@RequestBody Map<String, String> map) {
        String containerCode = map.get("containerCode");
        String taskNo = map.get("taskNo");

        if (StringUtils.isEmpty(containerCode)) {
            containerCode = configService.getKey(QuantityConstant.LABEL_SCANNING);
            ;
        }

        // 1.根据托盘找对应任务下发里面数据 再挖明细
        LambdaQueryWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        receiptContainerDetailLambdaQueryWrapper.eq(ReceiptContainerDetail::getContainerCode, containerCode);
        List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(receiptContainerDetailLambdaQueryWrapper);
        if (receiptContainerDetails.size() < 1) {
            return AjaxResult.error("!");
        }

        ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptContainerDetails.get(0).getReceiptId());

        LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getCode, receiptHeader.getShipmentCode());
        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderLambdaQueryWrapper);

        PrintDomain printDomain = new PrintDomain();
        if (StringUtils.isNotEmpty(shipmentHeader.getReferCode())) {
            // erp单号

            printDomain.setErpCode(shipmentHeader.getReferCode());
        } else {
            printDomain.setErpCode("不存在");
        }

        if (StringUtils.isNotEmpty(shipmentHeader.getCustomerName())) {
            // 客户名称
            printDomain.setName(shipmentHeader.getCustomerName());
        } else {
            printDomain.setName("不存在");
        }

        printDomain.setCode(shipmentHeader.getCode());
        printDomain.setContainerCode(containerCode);


        Map<String, Long> countMap =
                receiptContainerDetails.stream().collect(Collectors.groupingBy(detail -> detail.getMaterialCode() + "_" + detail.getBatch()
                        + "_" + detail.getColor() + "_" + detail.getProPackaging() + "_" + detail.getProductSchedule() + "_" + detail.getLevel(), Collectors.counting()));

        List<MaterialDomain> materialDomains = new ArrayList<>();
        List<LabelDomain> labelDomains = new ArrayList<>();

        // 订单号
        String A = "|A=" + shipmentHeader.getCode();
        String C = "", D = "", F = "", G = "", H = "", I = "", B = "", E = "";
        // 条码
        String J = "|J=" + containerCode;
        String M = "|M=" + containerCode;

        if (StringUtils.isNotEmpty(shipmentHeader.getCustomerName())) {
            // 规格
            B = "|B=" + shipmentHeader.getCustomerName();
        } else {
            B = "|B=不存在";
        }

        if (StringUtils.isNotEmpty(shipmentHeader.getReferCode())) {
            // 客户名称
            E = "|E=" + shipmentHeader.getReferCode();
        } else {
            E = "|E=不存在";
        }

        // 中转计数
        String s = "";

        for (String key : countMap.keySet()) {
            // 不可能为空
            Optional<ReceiptContainerDetail> receiptContainerDetailsList = receiptContainerDetails.stream()
                    .filter(d -> key.contains(d.getMaterialCode())
                            && key.contains(d.getLevel())
                            && key.contains(d.getColor())
                            && key.contains(d.getProPackaging())
                            && key.contains(d.getProductSchedule()))
                    .findFirst();

            ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailsList.get();
            MaterialDomain materialDomain = new MaterialDomain();
            materialDomain.setMaterialCode(receiptContainerDetail.getMaterialCode());
            materialDomain.setMaterialName(receiptContainerDetail.getMaterialName());
            switch (receiptContainerDetail.getLevel()) {
                case QuantityConstant.PREMIUM_PRODUCTS_LEVEL:
                    materialDomain.setLevel("优等品");
                    receiptContainerDetail.setLevel("优等品");
                    break;
                case QuantityConstant.FIRST_GRADE_LEVEL:
                    materialDomain.setLevel("一等品");
                    receiptContainerDetail.setLevel("一等品");
                    break;
                case QuantityConstant.ACCEPTABLE_PRODUCT_LEVEL:
                    materialDomain.setLevel("合格品");
                    receiptContainerDetail.setLevel("合格品");
                    break;
                default:
                    materialDomain.setLevel(receiptContainerDetail.getLevel());
            }

            materialDomain.setColor(receiptContainerDetail.getColor());
            LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
            proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, receiptContainerDetail.getProPackaging());
            ProPackaging proPackaging = proPackingService.getOne(proPackagingLambdaQueryWrapper);
            if (proPackaging == null) {
                return AjaxResult.error("没有包装信息");
            }
            int pieceBox = proPackaging.getPieceBox();
            materialDomain.setBox(countMap.get(key).intValue() / pieceBox);
            materialDomain.setScattered(countMap.get(key).intValue());
            materialDomains.add(materialDomain);

            LabelDomain labelDomain = new LabelDomain();
            labelDomain.setH(countMap.get(key).intValue()/pieceBox);
            labelDomain.setI(countMap.get(key).intValue());
            labelDomain.setC(receiptContainerDetail.getMaterialCode());
            labelDomain.setD(receiptContainerDetail.getMaterialName());
            labelDomain.setF(receiptContainerDetail.getLevel());
            labelDomain.setG(receiptContainerDetail.getColor());
            labelDomains.add(labelDomain);
        }

        for (int i = 0; i < labelDomains.size(); i++) {
            C = C + "|C" + s + "=" + labelDomains.get(i).getC();
            D = D + "|D" + s + "=" + labelDomains.get(i).getD();
            ;
            F = F + "|F" + s + "=" + labelDomains.get(i).getF();
            G = G + "|G" + s + "=" + labelDomains.get(i).getG();
            H = H + "|H" + s + "=" + labelDomains.get(i).getH();
            s = "" + (i + 1);
        }
        I = I + "|I=";
        String stack = "";
        printDomain.setMaterial(materialDomains);
        if (StringUtils.isNotEmpty(taskNo)) {

            LambdaQueryWrapper<TaskHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode)
                    .ne(TaskHeader::getPortGroup, QuantityConstant.PORTGROUP_P30);
            TaskHeader taskHeader = taskHeaderService.getOne(lambdaQueryWrapper);

            String IP = "";
            switch (taskHeader.getStack()) {
                case QuantityConstant.STACK_HUI_ZI:
                    stack = "2";
                    break;
                case QuantityConstant.STACK_GONG_ZI:
                    stack = "1";
                    break;
                case QuantityConstant.STACK_PING_FANG:
                    stack = "1";
                    break;
                case QuantityConstant.STACK_SHU_FANG:
                    stack = "0";
                    return AjaxResult.success().setData(stack);
                default:
                    AjaxResult.error("不存在的剁型");
            }
            IP = addressService.selectAddress(""+taskHeader.getStack(), taskHeader.getWarehouseCode(), null);

            LabelingDomain labelingDomain = new LabelingDomain();
            labelingDomain.setIp(IP);
            String data = "";
            labelingDomain.setPort(QuantityConstant.PRINT_PORE);
            labelingDomain.setText("SLA|JIANYI1" + A + B + E + J + C + D + F + G + H + I + M + "|");

            String url = addressService.selectAddress(QuantityConstant.ADDRESS_WCS_TASK_LABEL, taskHeader.getWarehouseCode(), null);
            String jsonParam = JSON.toJSONString(labelingDomain);
            String result = OkHttpUtils.bodypost(url, jsonParam);
            if (StringUtils.isEmpty(result)) {
                throw new ServiceException("接口地址错误或返回为空,刷新贴标条码超时");
            }
            AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
            if (ajaxResult.getCode() != HttpConstant.OK) {
                throw new ServiceException(ajaxResult.getMsg());
            }
            data = (String) ajaxResult.getData();
            if (!data.contains("ACK")) {
                throw new ServiceException("请求贴标机数据不成功");
            }
            return AjaxResult.success().setData(stack);
        }
        return AjaxResult.success(printDomain);
    }

    /**
     * @author lty
     * //生成dataMatrix类型二维码
     */

    @GetMapping(value = "/imageDmx/{text}")
    public ResponseEntity<byte[]> getImageDmx(@PathVariable("text") String text) {
        byte[] qrcode = null;
        try {
            qrcode = QRCodeGenerator.getDataMatrixImage(text, 210, 210);
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Set headers
        final HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.IMAGE_JPEG);
        return new ResponseEntity<byte[]>(qrcode, headers, HttpStatus.CREATED);
    }

}