自动化立体仓库 - WMS系统
6827eba9c63451de02dc0b90451d64c31a06068f..f245b2ecba9428659f2a8fb3e1f3d23bddda1218
2025-12-18 lty
#
f245b2 对比 | 目录
2025-12-18 1
#
c78e0f 对比 | 目录
2025-12-18 1
#
b3b5eb 对比 | 目录
10个文件已修改
454 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OrderController.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 333 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/apiLog/apiLog.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -29,6 +29,14 @@
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private OrderPakinService orderPakinService;
    @Autowired
    private OrderDetlPakinService orderDetlPakinService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Autowired
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private DocTypeService docTypeService;
@@ -398,19 +406,32 @@
    @RequestMapping(value = "/order/delete/auth")
    @ManagerAuth(memo = "手动删除订单")
    @Transactional
    public R delete(@RequestParam Long orderId){
        orderService.remove(orderId);
//        Order order = orderService.selectById(orderId);
//        if (order != null) {
//            order.setStatus(0);
//        }
//        if (!orderService.updateById(order)) {
//            throw new CoolException("删除订单失败");
//        }
//        orderDetlService.modifyStatus(orderId, 0);
    public R delete(@RequestParam Long orderId) {
        // 获取订单信息
        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("id", orderId));
        String orderNo = order.getOrderNo();
        // 删除 OrderDetl 表中与订单相关的数据
        orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no", orderNo));
        // 根据 PakinPakoutStatus 删除相关数据
        if (order.getPakinPakoutStatus() == 1) {
            // 删除 OrderPakin 和 OrderDetlPakin 相关数据
            orderPakinService.delete(new EntityWrapper<OrderPakin>().eq("order_no", orderNo));
            orderDetlPakinService.delete(new EntityWrapper<OrderDetlPakin>().eq("order_no", orderNo));
        } else if (order.getPakinPakoutStatus() == 2) {
            // 删除 OrderPakout 和 OrderDetlPakout 相关数据
            orderPakoutService.delete(new EntityWrapper<OrderPakout>().eq("order_no", orderNo));
            orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>().eq("order_no", orderNo));
        }
        // 删除 Order 表中对应的订单数据
        orderService.delete(new EntityWrapper<Order>().eq("order_no", orderNo));
        return R.ok();
    }
    @RequestMapping(value = "/order/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -872,7 +872,7 @@
            agvBindCtnrAndBinParam.setStgBinCode(basAgvLocNoSou.getAgvLocNo());
            agvBindCtnrAndBinParam.setReqCode(String.valueOf(System.currentTimeMillis()));
            agvBindCtnrAndBinParam.setIndBind("1");
            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器解绑",
            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定",
                    AgvConstant.AGV_URL+"/"+AgvConstant.AGV_1LBind,AgvConstant.getAGVADAPTOR(1), agvBindCtnrAndBinParam);
            if(resultBind.getCode() != 200){
                throw new CoolException("agv入库绑定失败");
@@ -888,7 +888,8 @@
    @Override
    @Transactional
    public void combAuto(CombParam param, Long userId) {
    public void
    combAuto(CombParam param, Long userId) {
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
@@ -920,10 +921,26 @@
        String orderNo = null;
        for (CombParam.CombMat combMat : param.getCombMats()) {
            if(combMat.getSupplier().equals("1")){
//                List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
//                        .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo())
//                        .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
//                        .eq("standby3", combMat.getStandby3()).eq("box_type2","BU-00001"));//1时检索和得
//                if (orderDetlPakins.size() > 0) {
//                    orderNo = orderDetlPakins.get(0).getOrderNo();
//                    combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
//                    combMat.setBoxType2(orderDetlPakins.get(0).getBoxType2());
//                    combMat.setBoxType3(orderDetlPakins.get(0).getBoxType3());
//                    combMat.setMemo(orderDetlPakins.get(0).getMemo());
//                    combMat.setSupp(orderDetlPakins.get(0).getSupp());
//                    combMat.setSuppCode(orderDetlPakins.get(0).getSuppCode());
//                    combMat.setManu(orderDetlPakins.get(0).getManu());//仓库编码
//                } else {
//                    throw new CoolException("未查询到相关订单===>>" + param.getBarcode());
//                }
                List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                        .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo())
                        .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
                        .eq("standby3", combMat.getStandby3()).eq("box_type2","BU-00001"));//1时检索和得
                        .eq("standby3", combMat.getStandby3()).eq("box_type2","shyucheng.test"));
                if (orderDetlPakins.size() > 0) {
                    orderNo = orderDetlPakins.get(0).getOrderNo();
                    combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -344,9 +344,9 @@
            // 获取路径
            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
            if(ioType.equals(107)){
                staDesc = staDescService.queryCrnStnCheck(ioType, locMast.getCrnNo(), outSta);
            }
//            if(ioType.equals(107)){
//                staDesc = staDescService.queryCrnStnCheck(ioType, locMast.getCrnNo(), outSta);
//            }
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java
@@ -46,6 +46,13 @@
        //遍历单据
        for (String orderNo : orderNos) {
            OrderPakin orderPakin = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().eq("order_no",orderNo));
            if(orderPakin.getDocType() == 16){
                orderPakin.setMoveStatus(1);
                orderPakinService.updateById(orderPakin);
                continue;
            }
            try{
                List<OrderDetlPakin> orderDetlPakinListAll = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_no",orderNo).eq("inspect",0));
                if (orderDetlPakinListAll.size()<1){
@@ -77,7 +84,7 @@
                            return;
                        } else if (number == 0){
                            Integer status =  basArmRulesService.getStatus(orderDetl.getWeight(),orderDetl.getVolume(),orderDetl.getManLength(),orderDetl.getWidth(),orderDetl.getHeight());
                            Integer status =  basArmRulesService.getStatus(mat.getWeight(),mat.getVolume(),mat.getManLength(),mat.getWidth(),mat.getHeight());
                            if (!Cools.isEmpty(status) && status == 2){
                                continue;
                            } else {
src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java
@@ -12,10 +12,8 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by Monkey D. Luffy on 2023.07.25
@@ -58,7 +56,7 @@
        put(1005, 1007);put(1008, 1010);put(1019, 1021);put(1022, 1024);put(1029, 1031);
        put(2001, 2003);put(2007, 2009);put(2013, 2015);put(2019, 2021);put(2025, 2027);
        put(2003, 2003);put(2009, 2009);put(2015, 2015);put(2021, 2021);put(2027, 2027);
        put(1105,1105);put(1104,1105);put(1043,1042);put(1042,1042);
        put(1105,1105);put(1104,1105);put(1043,1042);put(1042,1042);put(1103,1105);put(1044,1042);
    }};
    public static final Map<Integer, Integer> siteInMap = new HashMap<Integer, Integer>() {{
        put(1043, 1042);put(1042, 1042);put(1044, 1042);put(1105, 1105);put(1104, 1105);
@@ -85,8 +83,10 @@
//    }};
    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/2 * * * * ? ")
    private void execute(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentTime = sdf.format(new Date());
        for(Integer staNo : STA_WORK_IN){
            BasDevp basDevp = basDevpService.selectById(staNo);
            basDevp.setDevNo(siteInMap.get(basDevp.getDevNo()));
@@ -95,7 +95,6 @@
                if(Cools.isEmpty(wrkMast)){
                    continue;
                }
//                boolean wrkTypeSign = fullKM(wrkMast);
                if (!Cools.isEmpty(wrkMast)){
                    ReturnT<String> result = wrkMastStaInItHandler.start(wrkMast,basDevp,21);//入库
                    if (result.getCode()==200){
@@ -115,19 +114,12 @@
                if (Cools.isEmpty(wrkMast)){
                    continue;
                }
//                if (wrkMast.getWrkSts()!=2 || wrkMast.getIoType()==10){
//                    continue;
//                }
//                boolean wrkTypeSign = fullKM(wrkMast);
                if (!Cools.isEmpty(wrkMast)){
//                    if (wrkTypeSign){
                        ReturnT<String> result = wrkMastStaInItHandler.start(wrkMast,basDevp,22);//出库
                        if (result.getCode()==200) {
                            continue;
                        } else {
                            System.out.println(staNo+"失败3!");
                            System.out.println(staNo+"失败2!");
                        }
                }
            }
@@ -137,7 +129,12 @@
            basDevp.setDevNo(siteOutMap.get(basDevp.getDevNo()));
            if (basDevp.getWrkNo() > 10000 && basDevp.getLoading().equals("Y") && basDevp.getAutoing().equals("Y")){
                ReturnT<String> result = wrkMastStaInItHandler.start(null,basDevp,23);//异常退出
                if (result.getCode()==200) {
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
                if (Cools.isEmpty(wrkMast)){
                    continue;
                }
                if (result.getCode() == 200) {
                    System.out.println(staNo + "时间!" + currentTime);
                    continue;
                } else {
                    System.out.println(staNo+"失败3!");
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
@@ -18,7 +18,8 @@
    @Value("${erp.switch.InboundOrderSwitch}")
    private boolean InboundOrderSwitch;
    @Scheduled(cron = "0 */15 * * * ?")
//    @Scheduled(cron = "0 */15 * * * ?")
    @Scheduled(cron = "0/5 * * * * ?")
    void login(){
        if(!InboundOrderSwitch){
            return;
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java
@@ -49,6 +49,8 @@
                        if (!result.isSuccess()) {
                            log.error("单据[orderNo={}]新增保存至erp失败", order.getOrderNo());
                        }
//                        order.setSettle(8L);
//                        orderService.updateById(order);
                    }else if( order.getDocType() == 21){  //导入订单出库(领料)
                        order.setSettle(8L);
                        orderService.updateById(order);
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -56,9 +56,6 @@
    @Value("${erp.address.scpSalreturn}")
    //销售退货单
    private String scpSalreturn;
    @Value("${erp.address.scpSalreturnDetl}")
    //销售退货单
    private String scpSalreturnDetl;
    @Value("${erp.address.imMdcMftproorder}")
    //生产领料单
    private String imMdcMftproorder;
@@ -174,9 +171,10 @@
                    break;
                case "SAL_RETURNSTOCK"://销售退货
                    path = scpSalreturn;
                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");//业务起始日期
                    jsonObject.put("modify_starttime",  "2025-11-25 00:00:00");//业务起始日期
                    jsonObject.put("billstatus",  "B");//单据状态
                    jsonObject.put("end_starttime",  sdf1.format(now));//业务起始日期
                    jsonObject.put("modify_endtime",  sdf1.format(now));//业务起始日期
                    jsonObject.put("billtype_number",  "im_SalOutBill_STD_BT_S_R");//单据类型
                    break;
                case "PRD_PickMtrl"://生产领料单
                    path = imMdcMftproorder;
@@ -785,10 +783,11 @@
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
                    for (int page = 1; page <= totalPages; page++) {
                        jsonObject1.put("pageNo", page);
                        add = jsonObject1.toJSONString();
                        // 重新发起请求以获取该页的数据
                        response = new HttpHandler.Builder()
                                .setHeaders(headers)
                                .setUri(URL)
@@ -799,171 +798,150 @@
                        jsonResponse = JSON.parseObject(response);
                        data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                        for (int j = 0; j < data.size(); j++) {
                            JSONObject jsonObjectNew = data.getJSONObject(j);
                            Date createTime =  sdf1.parse(jsonObjectNew.get("createtime").toString());
                            String billNo = jsonObjectNew.get("billno").toString();//单据编号
                            String orderId = jsonObjectNew.get("id").toString();
                            JSONObject detailParam = new JSONObject();
                            JSONObject dataObj = new JSONObject();
                            dataObj.put("billno", billNo);
                            detailParam.put("pageNo", 1);
                            detailParam.put("pageSize", 100);
                            detailParam.put("data", dataObj);
                            boolean hasNext = true;
                            while (hasNext) {
                                String reqJson = detailParam.toJSONString();
                                String detailResp = new HttpHandler.Builder()
                                        .setHeaders(headers)
                                        .setUri(URL)
                                        .setPath(scpSalreturnDetl)
                                        .setJson(reqJson)
                                        .build()
                                        .doPost();
                                JSONObject detailJson = JSON.parseObject(detailResp);
                                JSONObject detData = detailJson.getJSONObject("data");
                                JSONArray rows = detData.getJSONArray("rows");
                                // ====== 处理明细 ======
                                for (int i = 0; i < rows.size(); i++) {
                                    JSONObject jsonObjectNew2 = rows.getJSONObject(i);
                                    Order order = orderService.selectByNo(billNo);//检索单据
                                    LocOwner locOwner = null;
                                    if (Cools.isEmpty(order)) {
                            Date createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = jsonObjectNew.getString("org_name");
                            String ownerUuid = jsonObjectNew.getString("org_number");
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
//                                callApiLogSaveOwner(null, kingDeeUtilType,
//                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
//                                continue;
//                            }
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        order = new Order(
                                                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                                billNo,    // 订单编号
                                                createTime.toString(),    // 单据日期
                                                docType.getDocId(),    // 单据类型
                                                null,    // 项目编号
                                                orderId,    //收料单id
                                                null,    // 调拨项目编号
                                                null,    // 初始票据号
                                                null,    // 票据号
                                                null,    // 项目id
                                                null,    // 货主
                                                null,    // 联系方式
                                                null,    // 操作人员
                                                null,    // 合计金额
                                                null,    // 优惠率
                                                null,    // 优惠金额
                                                null,    // 销售或采购费用合计
                                                null,    // 实付金额
                                                null,    // 付款类型
                                                null,    // 业务员
                                                null,    // 结算天数
                                                null,    // 邮费支付类型
                                                null,    // 邮费
                                                null,    // 付款时间
                                                null,    // 发货时间
                                                null,    // 物流名称
                                                null,    // 物流单号
                                                1L,    // 订单状态
                                                1,    // 状态
                                                9527L,    // 添加人员
                                                now,    // 添加时间
                                                9527L,    // 修改人员
                                                now,    // 修改时间
                                                null,    // 备注
                                                kingDeeUtilType.pakIn !=1?2:1
                                        );
                                        if( orderService.insert(order)){
                                            callApiLogSaveOrder(order, kingDeeUtilType, "创建销售退货单成功!单号:" + billNo, true);
                                        }
                                    }
//                                    String suppCode = jsonObjectNew2.getString("supplier_number"); //供应商
                                    String suppCode = null; //供应商
                                    JSONArray billEntryArray = jsonObjectNew2.getJSONArray("materialentry");
                                    for (int k = 0; k < billEntryArray.size(); k++) {
                                        JSONObject entry = billEntryArray.getJSONObject(k);
                                        String matnr = entry.getString("material_number"); //物料编码,内部SKU
                                        Double anfme = entry.getDouble("qty");//箱数
                                        Double totalNumItems = 0.0;
                                        Double Totalvolume = 0.0;//总体积
                                        String warehouse = null;//仓库编码
                                        String pOrderNo = "1";//采购单号
                                        String s3 = "1";//客户sku(客户编号)
                                        String s2 = "1"; //条码UPC
                                        String memo ="1"; //备注(英文描述)
                                        String s1 = "1"; //客户PO
//                                        Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
//                                        Double Totalvolume = entry.getDouble("eap7_decimalfield2");//总体积
//                                        String warehouse = entry.getString("warehouse_number");//仓库编码
//                                        String pOrderNo = entry.getString("eap7_textfield3");//采购单号
//                                        String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
//                                        String s2 = entry.getString("eap7_textfield5"); //条码UPC
//                                        String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
//                                        String s1 = entry.getString("eap7_textfield7"); //客户PO
                                        String detlId = entry.getString("id"); //明细id
                                        Long seq = entry.getLong("seq"); //分录行号
//                                        String
                                        if(anfme == 0){
                                            callApiLogSaveOrder(order,kingDeeUtilType, "单据数量异常"+matnr, false);
                                            continue;
                                        }
                                        //物料编码
                                        Mat mat = matService.selectByMatnr(matnr);
                                        if (Cools.isEmpty(mat)) {
                                            callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false);
                                            continue;
                                        }
                                        Order order1 = orderService.selectByNo( billNo);
                                        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order1.getId());
                                        boolean sign = false;
                                        for (OrderDetl orderDetl : orderDetls){
                                            if (orderDetl.getMatnr().equals(matnr)){
                                                sign = true;
                                                break;
                                            }
                                        }
                                        if (sign){
                                            continue;
                                        }
                                        LocSupp locSupp = null;
                                        String supp =null;
//                                        locSupp = locSuppService.selectByUuid(suppCode);
//                                        if(locSupp != null){supp = locSupp.getOwner();}
                                        OrderDetl orderDetl = new OrderDetl();
                                        orderDetl.sync(mat);
                                        orderDetl.setThreeCode(detlId);//ERP明细id
                                        orderDetl.setLineNumber(seq);//分录行号
                                        orderDetl.setAnfme(anfme);//总箱数
                                        orderDetl.setErpAnfme(anfme);//erp数据
                                        orderDetl.setOrderId(order.getId());
                                        orderDetl.setOrderNo(order.getOrderNo());//表头单据
                                        orderDetl.setSupp(supp);//供应商名称(货源)
                                        orderDetl.setSuppCode(suppCode);//供应商编码
                                        orderDetl.setSku(matnr);//内部SKU
                                        orderDetl.setStandby1(s1);//客户PO
                                        orderDetl.setStandby2(s2);//条码UPC
                                        orderDetl.setStandby3(s3);//客户SKU
                                        orderDetl.setBoxType1(null); //货主名称
                                        orderDetl.setBoxType2(null);//货主编号(erp组织)
                                        orderDetl.setBoxType3(pOrderNo);//采购单号
                                        orderDetl.setMemo(memo);//英文备注
                                        orderDetl.setVolume(Totalvolume);//总体积
                                        orderDetl.setSafeQty(totalNumItems);//总件数
                                        orderDetl.setManu(warehouse);//仓库编码
                                        orderDetl.setCreateBy(9527L);
                                        orderDetl.setCreateTime(new Date());
                                        orderDetl.setUpdateBy(9527L);
                                        orderDetl.setUpdateTime(new Date());
                                        orderDetl.setStatus(1);
                                        orderDetl.setQty(0.0D);
                                        orderDetlService.insert(orderDetl);
                                    }
                                }
                                // 是否还有下一页
                                boolean lastPage = detData.getBoolean("lastPage");
                                if (lastPage) {
                                    hasNext = false;
                                } else {
                                    // 下一页
                                    int currPage = detData.getIntValue("pageNo");
                                    detailParam.put("pageNo", currPage + 1);
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        null,    // 调拨项目编号
                                        null,    // 初始票据号
                                        null,    // 票据号
                                        null,    // 项目id
                                        owner,    // 货主
                                        null,    // 联系方式
                                        null,    // 操作人员
                                        null,    // 合计金额
                                        null,    // 优惠率
                                        null,    // 优惠金额
                                        null,    // 销售或采购费用合计
                                        null,    // 实付金额
                                        null,    // 付款类型
                                        null,    // 业务员
                                        null,    // 结算天数
                                        null,    // 邮费支付类型
                                        null,    // 邮费
                                        null,    // 付款时间
                                        null,    // 发货时间
                                        null,    // 物流名称
                                        null,    // 物流单号
                                        1L,    // 订单状态
                                        1,    // 状态
                                        9527L,    // 添加人员
                                        now,    // 添加时间
                                        9527L,    // 修改人员
                                        now,    // 修改时间
                                        null,    // 备注
                                        kingDeeUtilType.pakIn !=1?2:1
                                );
                                if (orderService.insert(order)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "创建出库退货单成功!单号:" + billNo, true);
                                }
                            }
                            // ========= 直接从主接口取明细 billentry =========
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
                            if (billEntryArray == null || billEntryArray.isEmpty()) {
                                continue;
                            }
                            for (int k = 0; k < billEntryArray.size(); k++) {
                                JSONObject entry = billEntryArray.getJSONObject(k);
                                String matnr = entry.getString("material_number"); //物料编码,内部SKU
//                                Double anfme = entry.getDouble("eap7_decimalfield");//箱数
                                Double anfme = 1.0;//箱数
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
                                String pOrderNo = entry.getString("eap7_textfield3");//采购单号
                                String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
                                String s2 = entry.getString("eap7_textfield5"); //条码UPC
                                String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
                                String s1 = entry.getString("eap7_textfield7"); //客户PO
                                String detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
                                    continue;
                                }
                                // ========= 物料校验 =========
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                orderDetl.setBoxType3(pOrderNo);
                                orderDetl.setMemo(memo);
                                orderDetl.setVolume(totalVolume);
                                orderDetl.setSafeQty(totalNumItems);
                                orderDetl.setManu(warehouse);
                                orderDetl.setCreateBy(9527L);
                                orderDetl.setCreateTime(new Date());
                                orderDetl.setUpdateBy(9527L);
                                orderDetl.setUpdateTime(new Date());
                                orderDetl.setStatus(1);
                                orderDetl.setQty(0.0D);
                                orderDetlService.insert(orderDetl);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
@@ -1318,11 +1296,11 @@
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
//                                callApiLogSaveOwner(null, kingDeeUtilType,
//                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
//                                continue;
//                            }
                            if (locOwner == null) {
                                callApiLogSaveOwner(null, kingDeeUtilType,
                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
                                continue;
                            }
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
@@ -1379,7 +1357,9 @@
                            for (int k = 0; k < billEntryArray.size(); k++) {
                                JSONObject entry = billEntryArray.getJSONObject(k);
                                String matnr = entry.getString("material_number"); //物料编码,内部SKU
                                Double anfme = entry.getDouble("eap7_decimalfield");//箱数
//                                Double anfme = entry.getDouble("eap7_decimalfield");//箱数
                                Double anfme = 1.0;//箱数
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
@@ -1390,8 +1370,7 @@
                                String s1 = entry.getString("eap7_textfield7"); //客户PO
                                String detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String suppCode = null;
                                String suppCode = entry.getString("supplier_number");
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
@@ -1413,10 +1392,10 @@
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
                                if (locSupp != null) {
                                    supp = locSupp.getOwner();
                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
src/main/webapp/views/apiLog/apiLog.html
@@ -35,6 +35,12 @@
                            <input class="layui-input" type="text" name="request" placeholder="请输入(订单号或品号)" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label">result</label>
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="result" placeholder="1/0" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
src/main/webapp/views/order/order.html
@@ -101,6 +101,8 @@
<!--        <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>-->
        <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
    {{# } }}
<!--    <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>-->
    {{# if (d.settle == 98) { }}
    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">彻底完结</a>
    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="continueExecution">继续执行</a>