OrderAssignApiService.java 8.82 KB
package com.huaheng.api.SSP.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huaheng.api.SSP.domain.ConfirmHeaderModel;
import com.huaheng.api.SSP.domain.ConfirmModel;
import com.huaheng.api.SSP.domain.ConfirmTypeModel;
import com.huaheng.api.U8.domain.ICSReceiptHeader;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.http.HttpUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.general.material.domain.Material;
import com.huaheng.pc.general.material.service.IMaterialService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.IReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.IReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.IShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.IShipmentHeaderService;
import net.bytebuddy.implementation.bytecode.Throw;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Transactional
@Service
public class OrderAssignApiService {

    @Autowired
    IReceiptHeaderService iReceiptHeaderService;

    @Autowired
    IReceiptDetailService iReceiptDetailService;

    @Autowired
    IShipmentHeaderService iShipmentHeaderService;

    @Autowired
    IShipmentDetailService iShipmentDetailService;

    @Autowired
    IMaterialService iMaterialService;

    public AjaxResult receiptAssign(String url){
        short status = 0;
        ReceiptHeader receiptHeader = new ReceiptHeader();
        receiptHeader.setFirstStatus(status);
        receiptHeader.setLastStatus(status);
        receiptHeader.setSspId("0");
        //查询一条未被钱柜扫描的入库单
        ReceiptHeader item = iReceiptHeaderService.selectFirstEntity(receiptHeader);
        if (item==null){
            return shipmentAssign(url);
        }
        ConfirmHeaderModel cfh = new ConfirmHeaderModel();
        cfh.setCubeCode(item.getUserDef1());
        cfh.setOrderHeaderId(item.getId());
        cfh.setOrderCode(item.getCode());
        cfh.setOrderType("receipt");
        cfh.setWarehouseCode(item.getWarehouseCode());
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        cfh.setcDatetime(df.format(new Date()));
        ConfirmModel confirmModel = new ConfirmModel();
        confirmModel.setConfirmHeaderModel(cfh);
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setReceiptId(item.getId());
        List<ReceiptDetail> details = iReceiptDetailService.selectListEntityByEqual(receiptDetail);
        List<ConfirmTypeModel> typeModels = new ArrayList<>();
        //遍历入库子单
        int i = 0;
        for (ReceiptDetail ds:details){
            //查找子单中钱柜的物料
            Material material = iMaterialService.selectEntityById(ds.getId());
            if (material != null || material.getZoneCode().equals("QG")) {
                ConfirmTypeModel cft = new ConfirmTypeModel();
                cft.setOrderDetailId(ds.getId());
                cft.setCompanyCode(ds.getCompanyCode());
                cft.setContainerCode("0");
                cft.setItemCode(ds.getMaterialCode());
                cft.setItemName(material.getName());
                cft.setItemBarcode(material.getBarcode());
                cft.setItemState(ds.getInventoryStatus());
                float a = Convert.toFloat(ds.getQty());
                cft.setQty(a);
                cft.setItemUnit(material.getMasterUnit());
                typeModels.add(cft);
                i++;
            }
        }
        //若此单据无钱柜物料 则修改状态
        ReceiptHeader receiptHeaderOver = new ReceiptHeader();
        receiptHeaderOver.setId(item.getId());
        if (i < 1){
            receiptHeaderOver.setSspId("1");
            iReceiptHeaderService.updateByModel(receiptHeaderOver);
            return AjaxResult.success("已扫描一条入单据,没有发现钱柜物料");
        }else {
            confirmModel.setOrderItems(typeModels);
            try {
                String JsonParam = JSON.toJSONString(confirmModel);
                String result = HttpUtils.bodypost(url, JsonParam);
                AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);


                short statusover = 100;
                receiptHeaderOver.setFirstStatus(statusover);
                receiptHeaderOver.setLastStatus(statusover);
                receiptHeaderOver.setSspId("1");
                if (iReceiptHeaderService.updateByModel(receiptHeaderOver) < 1) {
                    throw new ServiceException("入库订单状态更新失败!");
                }
                return ajaxResult;
            } catch (Exception e) {
                throw new ServiceException("入库订单下发发送失败!");
            }
        }

    }



    public AjaxResult shipmentAssign(String url) {
        ShipmentHeader shipmentHeader = new ShipmentHeader();
        shipmentHeader.setLastStatus(0);
        shipmentHeader.setLastStatus(0);
        shipmentHeader.setSspId("0");
        //判断系统中是否有钱柜的还未下发的出库单
        ShipmentHeader list = iShipmentHeaderService.selectFirstEntity(shipmentHeader);
        if (list==null){
            return AjaxResult.success("所有出入库单都已下发成功!");
        }
        ShipmentHeader item = iShipmentHeaderService.selectFirstEntity(shipmentHeader);
        ConfirmHeaderModel cfh = new ConfirmHeaderModel();
        cfh.setCubeCode(item.getUserDef1());
        cfh.setOrderHeaderId(item.getId());
        cfh.setOrderCode(item.getCode());
        cfh.setOrderType("shipment");
        cfh.setWarehouseCode(item.getWarehouseCode());
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        cfh.setcDatetime(df.format(new Date()));
        ConfirmModel confirmModel = new ConfirmModel();
        confirmModel.setConfirmHeaderModel(cfh);
        ShipmentDetail shipmentDetail = new ShipmentDetail();
        shipmentDetail.setShipmentId(item.getId());
        List<ShipmentDetail> details = iShipmentDetailService.selectListEntityByEqual(shipmentDetail);
        List<ConfirmTypeModel> typeModels = new ArrayList<>();
        //遍历入库子单
        int i = 0;
        for (ShipmentDetail ds:details){
            //查找子单中钱柜的物料
            Material material = iMaterialService.selectEntityById(ds.getId());
            if (material != null || material.getZoneCode().equals("QG")) {
                ConfirmTypeModel cft = new ConfirmTypeModel();
                cft.setOrderDetailId(ds.getId());
                cft.setCompanyCode(ds.getCompanyCode());
                cft.setContainerCode("0");
                cft.setItemCode(ds.getMaterialCode());
                cft.setItemName(material.getName());
                cft.setItemBarcode(material.getBarcode());
                cft.setItemState(ds.getInventoryStatus());
                float a = Convert.toFloat(ds.getQty());
                cft.setQty(a);
                cft.setItemUnit(material.getMasterUnit());
                typeModels.add(cft);
                i++;
            }
        }
        //若此单据无钱柜物料 则修改状态
        ShipmentHeader shipmentHeaderOver = new ShipmentHeader();
        shipmentHeaderOver.setId(item.getId());
        if (i<1){

            shipmentHeaderOver.setSspId("1");
            iShipmentHeaderService.updateByModel(shipmentHeaderOver);
            return AjaxResult.success("已扫描一条出库单据,没有发现钱柜物料");
        }else {
            confirmModel.setOrderItems(typeModels);
            try {
                String JsonParam = JSON.toJSONString(confirmModel);
                String result = HttpUtils.bodypost(url, JsonParam);
                AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);


                shipmentHeaderOver.setFirstStatus(100);
                shipmentHeaderOver.setLastStatus(100);
                shipmentHeaderOver.setSspId("1");
                if (iShipmentHeaderService.updateByModel(shipmentHeaderOver)<1){
                    throw new ServiceException("出库单据状态更新失败");
                }
                return ajaxResult;
            } catch (Exception e) {
                throw new ServiceException("出库订单发送失败!");
            }
        }
    }
}