自动化立体仓库 - WMS系统
zhangc
2025-02-27 d0d64cf47ce37027307ceb64dc72e3ae36796a92
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -11,9 +11,11 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.entity.param.ReportErpParam;
import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.task.handler.OrderSyncHandler;
import com.zy.common.model.DetlDto;
import com.zy.common.model.OrderDto;
import com.zy.common.model.OrderMergeVo;
@@ -23,9 +25,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service("orderService")
@@ -54,7 +60,15 @@
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private AgvWaitPakinService agvWaitPakinService;
    @Autowired
    private ManPakOutService manPakOutService;
    @Autowired
    private OrderSyncHandler orderSyncHandler;
    @Autowired
    private AgvLocMastService agvLocMastService;
    @Value("${u8.url}")
    private String url;
@@ -77,14 +91,27 @@
    }
    @Override
    public boolean updateTel(Long orderId, String tel) {
        return this.baseMapper.updateTel(orderId, tel) > 0;
    }
    @Override
    public boolean updateSettle(Long orderId, Long settle, Long userId) {
        return this.baseMapper.updateSettle(orderId, settle, userId) > 0;
    }
    @Override
    public void checkComplete(String orderNo) {
    public boolean updateSettle2(Long orderId, Long settle, Integer plt, String inTime) {
        return this.baseMapper.updateSettle2(orderId, settle, plt, inTime) > 0;
    }
    @Override
    public void checkComplete(String orderNo, Integer pltType) {
        Order order = this.selectByNo(orderNo);
        if(Cools.isEmpty(order)){
        if (order.getDocType() == 38) {
            return;
        }
        if (Cools.isEmpty(order)) {
            return;
        }
        if (order.getSettle() >= 4L) {
@@ -99,45 +126,70 @@
                break;
            }
        }
        // 如果 作业数量等于单据总数量 && 工作明细档中无该单据的数据 && AGV工作明细档中无该单据的数据
        boolean wrkDeltExist = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo)) < 1;
        boolean agvWrkDetlExist = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().eq("order_no",orderNo)) < 1;
        boolean waitPakinExist = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("order_no",orderNo)) < 1;
        //int count = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo));
        boolean wrkDeltExist = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().like("order_no", orderNo)) < 1;
        boolean agvWrkDetlExist = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().like("order_no", orderNo)) < 1;
        boolean waitPakinExist = agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().like("order_no", orderNo)) < 1;
        ManPakOut manPakOut = manPakOutService.selectByOrderWithName(orderNo);
        boolean manPakoutExist = Cools.isEmpty(manPakOut) || manPakOut.getPayment() == 1;
        boolean manPakoutExist = Cools.isEmpty(manPakOut) || (manPakOut.getPayment() != null && manPakOut.getPayment() == 1);
        if (complete && wrkDeltExist && agvWrkDetlExist && waitPakinExist && manPakoutExist) {
            // 出库订单重新整理明细
//            DocType docType = docTypeService.selectById(order.getDocType());
//            if (null != docType && docType.getPakout() == 1) {
//                // 重组明细
//                if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
//                    throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败");
//                }
//                List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo);
//                for (WrkDetl wrkDetl : wrkDetls) {
//                    OrderDetl orderDetl = new OrderDetl();
//                    orderDetl.sync(wrkDetl);
//                    orderDetl.setQty(orderDetl.getAnfme());
//                    orderDetl.setOrderId(order.getId());
//                    orderDetl.setOrderNo(orderNo);
//                    orderDetl.setStatus(1);
//                    orderDetl.setCreateTime(order.getCreateTime());
//                    orderDetl.setCreateBy(order.getCreateBy());
//                    orderDetl.setUpdateTime(order.getUpdateTime());
//                    orderDetl.setUpdateBy(order.getUpdateBy());
//                    if (!orderDetlService.insert(orderDetl)) {
//                        throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败");
//                    }
//                }
//            }
            if (!this.updateSettle(order.getId(), 4L, null)) {
            if (pltType == null) {
                if (!this.updateSettle(order.getId(), 6L, 9528L)) {
                    throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
                }
            } else if (!this.updateSettle2(order.getId(), 6L, pltType, DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F))) {
                throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
            }
        } else {
            if (pltType != null && pltType > 0) {
                order.setPltType(pltType);
                order.setInTime(DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F));
                this.baseMapper.updateById(order);
            }
        }
    }
    @Override
    @Transactional
    public void checkComplete2(String orderNo) {
        Order order = this.selectByNo(orderNo);
        if (order.getDocType() == 38) {
            return;
        }
        if (Cools.isEmpty(order)) {
            return;
        }
        if (order.getSettle() >= 4L) {
            return;
        }
        List<OrderDetl> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()));
        // 作业数量是否等于数量
        boolean complete = true;
        for (OrderDetl orderDetl : orderDetls) {
            if (orderDetl.getAnfme() > orderDetl.getQty()) {
                complete = false;
                break;
            }
        }
        // 如果 作业数量等于单据总数量 && 工作明细档中无该单据的数据 && AGV工作明细档中无该单据的数据
        //int count = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo));
        boolean wrkDeltExist = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().like("order_no", orderNo)) < 1;
        boolean agvWrkDetlExist = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().like("order_no", orderNo)) < 1;
        boolean waitPakinExist = agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().like("order_no", orderNo)) < 1;
        ManPakOut manPakOut = manPakOutService.selectByOrderWithName(orderNo);
        boolean manPakoutExist = Cools.isEmpty(manPakOut) || (manPakOut.getPayment() != null && manPakOut.getPayment() == 1);
        if (complete && wrkDeltExist && agvWrkDetlExist && waitPakinExist && manPakoutExist) {
            if (!this.updateSettle(order.getId(), 6L, 9528L)) {
                throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
            }
        }
    }
    @Override
@@ -175,7 +227,7 @@
            }
            for (DetlDto detlDto : detlDtos) {
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme(), detlDto.getCsocode(), detlDto.getIsoseq())) {
                    throw new CoolException("修改单据明细数量失败");
                }
            }
@@ -201,26 +253,31 @@
    public void report(Long orderId, String username) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Order order = this.selectById(orderId);
        Map<String, Object> param = new HashMap<>();
        param.put("id",order.getOrderNo());
        param.put("dDate",sdf.format(new Date()));
        param.put("cHandler",username);
        List<Map<String,Object>> orderDetlsParam = new ArrayList<>();
        param.put("orderDetails",orderDetlsParam);
//        Map<String, Object> param = new HashMap<>();
//        param.put("id",order.getOrderNo());
//        param.put("dDate",sdf.format(new Date()));
//        param.put("cHandler",username);
//
//        List<Map<String,Object>> orderDetlsParam = new ArrayList<>();
//        param.put("orderDetails",orderDetlsParam);
        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(orderId);
        for (OrderDetl orderDetl : orderDetls){
            Map<String, Object> odMap = new HashMap<>();
            odMap.put("autoid",orderDetl.getItemNum());
            odMap.put("iQuantity",orderDetl.getQty());
            orderDetlsParam.add(odMap);
        }
        ReportErpParam reportErpParam = new ReportErpParam();
        orderSyncHandler.mappingParam(order, reportErpParam);
        orderSyncHandler.mappingParamChildren(orderDetls, reportErpParam);
        int code = doHttpRequest(param, "单据审核", url, orderReportPath, null, "127.0.0.1");
//        for (OrderDetl orderDetl : orderDetls){
//            Map<String, Object> odMap = new HashMap<>();
//            odMap.put("autoid",orderDetl.getItemNum());
//            odMap.put("iQuantity",orderDetl.getQty());
//            orderDetlsParam.add(odMap);
//        }
        int code = doHttpRequest(reportErpParam, "单据审核", url, orderReportPath, null, "127.0.0.1");
        //int code = doHttpRequest(param, "单据审核", "localhost:8080", "/test/report", null, "127.0.0.1");
        if(code == 0){
        if (code == 0) {
            log.info("单据审核,{}", order);
            order.setSettle(6L);
            this.updateById(order);
        }
@@ -241,7 +298,7 @@
            for (OrderDetl orderDetl : orderDetls) {
                Double leave = orderDetl.getAnfme() - orderDetl.getQty();
                OrderMergeVo vo = new OrderMergeVo(orderDetl.getMatnr(), orderDetl.getBatch(), leave);
                OrderDto orderDto = new OrderDto(orderDetl.getOrderNo(), null,null, leave);
                OrderDto orderDto = new OrderDto(orderDetl.getOrderNo(), null, null, leave);
                if (OrderMergeVo.has(result, vo)) {
                    OrderMergeVo exist = OrderMergeVo.find(result, vo.getMatnr(), vo.getBatch());
                    assert exist != null;
@@ -262,12 +319,20 @@
        }
        return result;
    }
    @Override
    public List<Order> selectorderNoL(String orderNo) {
        return this.baseMapper.selectorderNoL(orderNo);
    }
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){
    @Override
    public List<Order> selectToBeHistoryOrder() {
        return this.selectList(new EntityWrapper<Order>().eq("status", 1).ge("settle", 6));
        //return this.baseMapper.selectToBeHistoryOrder();
    }
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip) {
        String response = "";
        boolean success = false;
@@ -275,25 +340,26 @@
            response = new HttpHandler.Builder()
                    .setUri(url)
                    .setPath(path)
                    .setTimeout(30, TimeUnit.SECONDS)
                    .setJson(JSONObject.toJSONString(requestParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if(Cools.isEmpty(jsonObject.get("errCode"))){
            if (Cools.isEmpty(jsonObject.get("errCode"))) {
                throw new CoolException(jsonObject.get("Message").toString());
            }
            int code = (int) jsonObject.get("errCode");
            if(code != 0){
            if (code != 0) {
                throw new CoolException(jsonObject.get("errMsg").toString());
            }
            success = true;
            return code;
        }catch (Exception e){
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new CoolException("调用接口响应错误");
        }finally {
        } finally {
            apiLogService.save(
                    namespace,
                    url + path,