自动化立体仓库 - WMS系统
pang.jiabao
2025-04-28 a85a8d0c33d4a821a98a0ff6789298a23a180006
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -9,7 +9,6 @@
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.sun.org.apache.xpath.internal.operations.Or;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.InOutCountDto;
@@ -31,7 +30,11 @@
import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 * Created by vincent on 2022/4/9
@@ -49,6 +52,8 @@
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderLogService orderLogService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
@@ -92,12 +97,12 @@
            throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交");
        }
        for (DetlDto detlDto : param.getOrderDetails()){
            if (Cools.isEmpty(detlDto) || Cools.isEmpty(detlDto.getOwnerName(),detlDto.getPayment())){
        for (DetlDto detlDto : param.getOrderDetails()) {
            if (Cools.isEmpty(detlDto) || Cools.isEmpty(detlDto.getOwnerName(), detlDto.getPayment())) {
                throw new CoolException(param.getOrderNo() + "缺少货主或货物形态");
            }else {
            } else {
                LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
                if (Cools.isEmpty(locOwner)){
                if (Cools.isEmpty(locOwner)) {
                    LocOwner locOwner1 = new LocOwner();
                    locOwner1.setOwner(detlDto.getOwnerName());
                    locOwnerService.insert(locOwner1);
@@ -150,7 +155,7 @@
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getOwnerName(),detail.getPayment());
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(), detail.getOwnerName(), detail.getPayment());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
@@ -183,9 +188,9 @@
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
            if (Cools.isEmpty(locOwner)){
            if (Cools.isEmpty(locOwner)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }else {
            } else {
                orderDetl.setOwner(locOwner.getId().intValue());
            }
            orderDetl.setPayment(detlDto.getPayment());
@@ -209,12 +214,17 @@
            }
            orderService.remove(order.getId());
        }
        OrderLog orderLog = orderLogService.selectByNo(param.getCCode());
        if (!Cools.isEmpty(orderLog)) {
            throw new CoolException(param.getCCode() + "单据已经完成,不需要再传递");
        }
        DocType docType = docTypeService.selectOrAdd(param.getType(), Boolean.FALSE);
        Date now = new Date();
        //查找做单用户
        User user = userService.selectOne(new EntityWrapper<User>().eq("username", param.getCMaker()));
        if(Cools.isEmpty(user)){
        if (Cools.isEmpty(user)) {
            throw new CoolException("未查询到该用户");
        }
@@ -259,7 +269,7 @@
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        for (OpenOrderPakoutParam.Body body : param.getADDBody()){
        for (OpenOrderPakoutParam.Body body : param.getADDBody()) {
            Mat mat = matService.selectByMatnr(body.getCInvCode());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(body.getCInvCode() + "编号商品检索失败,请先添加商品");
@@ -413,9 +423,9 @@
        }
        //删除存货档案
        if(param.deleteFlag == 1){
            for (MatSyncParam.MatParam matParam : param.getMatDetails()){
                matService.deleteById(matParam.getMatnr());
        if (param.deleteFlag == 1) {
            for (MatSyncParam.MatParam matParam : param.getMatDetails()) {
                matService.delete(new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()));
            }
            return;
@@ -534,30 +544,30 @@
    }
    /*
    * 速腾数字孪生调用接口
    * */
     * 速腾数字孪生调用接口
     * */
    @Override
    public DigitalTwin inventoryQuantity() {
        DigitalTwin digitalTwin = new DigitalTwin();
        LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
        LocChartPie locUseRateL = reportQueryMapper.getLocUseRateL();
        LocChartPie locUseRateP = reportQueryMapper.getLocUseRateP();
        if(locUseRate!=null) {
            digitalTwin.setCount(locUseRate.getOqty()+locUseRate.getFqty()+locUseRate.getUqty()+locUseRate.getXqty());
        if (locUseRate != null) {
            digitalTwin.setCount(locUseRate.getOqty() + locUseRate.getFqty() + locUseRate.getUqty() + locUseRate.getXqty());
            digitalTwin.setOqty(locUseRate.getOqty());
            digitalTwin.setFqty(locUseRate.getFqty());
            digitalTwin.setUqty(locUseRate.getUqty());
            digitalTwin.setXqty(locUseRate.getXqty());
        }
        if(locUseRateL!=null) {
            digitalTwin.setCountL(locUseRateL.getOqty()+locUseRateL.getFqty()+locUseRateL.getUqty()+locUseRateL.getXqty());
        if (locUseRateL != null) {
            digitalTwin.setCountL(locUseRateL.getOqty() + locUseRateL.getFqty() + locUseRateL.getUqty() + locUseRateL.getXqty());
            digitalTwin.setOqtyL(locUseRateL.getOqty());
            digitalTwin.setFqtyL(locUseRateL.getFqty());
            digitalTwin.setUqtyL(locUseRateL.getUqty());
            digitalTwin.setXqtyL(locUseRateL.getXqty());
        }
        if (locUseRateP!=null){
            digitalTwin.setCountP(locUseRateP.getOqty()+locUseRateP.getFqty()+locUseRateP.getUqty()+locUseRateP.getXqty());
        if (locUseRateP != null) {
            digitalTwin.setCountP(locUseRateP.getOqty() + locUseRateP.getFqty() + locUseRateP.getUqty() + locUseRateP.getXqty());
            digitalTwin.setOqtyP(locUseRateP.getOqty());
            digitalTwin.setFqtyP(locUseRateP.getFqty());
            digitalTwin.setUqtyP(locUseRateP.getUqty());
@@ -572,8 +582,8 @@
        List<OpenOrderPakoutParam> list = new ArrayList<>();
        for (Object o : jsonArray){
            JSONObject jsonObject = (JSONObject)o;
        for (Object o : jsonArray) {
            JSONObject jsonObject = (JSONObject) o;
            String brand = jsonObject.get("brand").toString();
            String batch = jsonObject.get("batch").toString();
            Integer packageNo = Integer.parseInt(jsonObject.get("packageNo").toString());
@@ -581,7 +591,7 @@
            Pla pla = plaService.selectByBatchAndPackageNo(batch, packageNo, brand);
            Mat mat = matService.selectByMaktx(pla.getBrand());
            //当生产单号不一致时,需要新建一个param
            if(list.size() == 0 || checkOrder(list,pla.getProOrderNo()) == null){
            if (list.isEmpty() || (!Cools.isEmpty(pla.getProOrderNo()) && checkOrder(list, pla.getProOrderNo()) == null)) {
                OpenOrderPakoutParam param = new OpenOrderPakoutParam();
                param.setcMaker(json.get("user").toString());
                String type = Cools.isEmpty(pla.getProOrderNo()) ? "调拨入库单" : "产成品入库";
@@ -594,72 +604,78 @@
                OpenOrderPakoutParam.Body body = new OpenOrderPakoutParam.Body();
                body.setcInvCode(mat.getMatnr());
                body.setiQuantity(pla.getWeightAnfme());
                body.setcBatch("");
                body.setcBatch(pla.getBatch());
                body.setCPackage(pla.getPackageNo()+"");
                body.setCbMemo(pla.getMemo());
                bodyList.add(body);
                param.setaDDBody(bodyList);
                list.add(param);
            }else {
            } else {
                OpenOrderPakoutParam param = checkOrder(list, pla.getProOrderNo());
                List<OpenOrderPakoutParam.Body> bodyList = param.getADDBody();
                OpenOrderPakoutParam.Body body = checkOrderDetl(bodyList, mat.getMatnr());
                //有新的牌号则添加新的orderDetl,否则累加
                if(body == null){
                if (body == null) {
                    body = new OpenOrderPakoutParam.Body();
                    body.setcInvCode(mat.getMatnr());
                    body.setiQuantity(pla.getWeightAnfme());
                    body.setcBatch(pla.getBatch());
                    body.setCPackage(pla.getPackageNo()+"");
                    body.setCbMemo(pla.getMemo());
                    bodyList.add(body);
                }else {
                } else {
                    body.setiQuantity(body.getIQuantity() + pla.getWeightAnfme());
                    body.setcBatch(pla.getBatch());
                    body.setCPackage(pla.getPackageNo()+"");
                }
            }
        }
        for (OpenOrderPakoutParam param : list){
        for (OpenOrderPakoutParam param : list) {
            doHttpRequest(param, "入库单上报", url, orderReportPath, null, "127.0.0.1");
        }
        return 200;
        //return doHttpRequest(list, "入库单上报", url, orderReportPath, null, "127.0.0.1");
    }
    @Override
    public List<String> selectOrderInformation(Map<String, String> param) {
        ArrayList<String> list = new ArrayList<>();
    public List<Order> selectOrderInformation(Map<String, String> param) {
        List<Order> list = new ArrayList<>();
        String name = param.get("name");
        User user = userService.selectOne(new EntityWrapper<User>().eq("username", name));
        if (Cools.isEmpty(user)){
        if (Cools.isEmpty(user)) {
            return list;
        }
        List<Order> orderList = orderService.selectList(new EntityWrapper<Order>().eq("create_by", user.getId()));
        if (Cools.isEmpty(orderList)){
        if (Cools.isEmpty(orderList)) {
            return list;
        }
        for (Order order : orderList){
            if (order.getSettle() ==1 || order.getSettle() ==2){
                list.add(order.getOrderNo());
        for (Order order : orderList) {
            if (order.getSettle() == 1 || order.getSettle() == 2) {
                List<OrderDetl> detlList = orderDetlService.selectByOrderId(order.getId());
                order.setOrderDetls(detlList);
                list.add(order);
            }
        }
        return list;
    }
    private OpenOrderPakoutParam checkOrder(List<OpenOrderPakoutParam> list, String orderNo){
    private OpenOrderPakoutParam checkOrder(List<OpenOrderPakoutParam> list, String orderNo) {
        for (OpenOrderPakoutParam param : list){
        for (OpenOrderPakoutParam param : list) {
            if(Cools.eq("调拨入库单",param.getType()) && Cools.isEmpty(orderNo)){
            if (Cools.eq("调拨入库单", param.getType()) && Cools.isEmpty(orderNo)) {
                return param;
            }
            //判断是否包含重复的订单号
            if(Cools.eq(param.getCCode(),orderNo)){
            if (Cools.eq(param.getCCode(), orderNo)) {
                return param;
            }
        }
@@ -668,11 +684,11 @@
    }
    private OpenOrderPakoutParam.Body checkOrderDetl(List<OpenOrderPakoutParam.Body> bodyList, String matnr){
    private OpenOrderPakoutParam.Body checkOrderDetl(List<OpenOrderPakoutParam.Body> bodyList, String matnr) {
        for (OpenOrderPakoutParam.Body param : bodyList){
        for (OpenOrderPakoutParam.Body param : bodyList) {
            //判断是否包含重复的订单号
            if(Cools.eq(param.getCInvCode(),matnr)){
            if (Cools.eq(param.getCInvCode(), matnr)) {
                return param;
            }
        }
@@ -681,38 +697,36 @@
    }
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip) {
        String response = "";
        boolean success = false;
        try {
            log.info("请求参数:{}", requestParam);
            response = new HttpHandler.Builder()
                    .setUri(url)
                    .setTimeout(30, TimeUnit.SECONDS)
                    .setPath(path)
                    .setJson(JSONObject.toJSONString(requestParam))
                    .build()
                    .doPost();
            response = response.replace("\\", "");
            response = response.substring(1,response.length()-1);
            log.info("入库单上报请求返回报文:{}", response);
            JSONObject jsonObject = JSON.parseObject(response);
            JSONArray jsonArray = (JSONArray)jsonObject.get("");
            JSONObject jsonResult = (JSONObject) jsonArray.get(0);
            if(Cools.isEmpty(jsonResult.get("ErrorCode"))){
                throw new CoolException(jsonResult.get("errorMsg").toString());
            if (Cools.isEmpty(jsonObject.get("ErrorCode"))) {
                throw new CoolException(jsonObject.get("ErrorMsg").toString());
            }
            int code = Integer.parseInt(jsonResult.get("ErrorCode").toString());
            if(code != 1){
                throw new CoolException(jsonResult.get("errorMsg").toString());
            int code = Integer.parseInt(jsonObject.get("ErrorCode").toString());
            if (code == 0) {
                throw new CoolException(jsonObject.get("ErrorMsg").toString());
            }
            success = true;
            return code;
        }catch (Exception e){
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new CoolException(e.getMessage());
        }finally {
        } finally {
            apiLogService.save(
                    namespace,
                    url + path,
@@ -726,4 +740,5 @@
    }
}