自动化立体仓库 - WMS系统
0f64ee96e72e34135201f28e033e1b5537031712..1e874438b4baf12c2668d04a59b0bd5098ef7fd6
5 天以前 1
#pda
1e8744 对比 | 目录
5 天以前 1
#
396129 对比 | 目录
5 天以前 1
#
254210 对比 | 目录
5 天以前 lty
#
878014 对比 | 目录
5 天以前 lty
Merge remote-tracking branch 'origin/jshdasrs' into jshdasrs
c6e32e 对比 | 目录
5 天以前 lty
#
f6fa41 对比 | 目录
5 天以前 1
#
2d2c9d 对比 | 目录
5 天以前 lty
#
dcb503 对比 | 目录
5 天以前 lty
#
3231d3 对比 | 目录
5 天以前 lty
Merge remote-tracking branch 'origin/jshdasrs' into jshdasrs
53ca01 对比 | 目录
5 天以前 1
#
7854ae 对比 | 目录
5 天以前 lty
#
25155d 对比 | 目录
6 天以前 1
#
bd3f1b 对比 | 目录
8 天以前 1
#
4768cb 对比 | 目录
8 天以前 dubin
库存明细统计报表导出
d71313 对比 | 目录
8 天以前 dubin
库存明细统计导出
e86267 对比 | 目录
2个文件已添加
28个文件已修改
1742 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PdaPickListParam.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PickWrkDetlListParam.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkDetlService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 1117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SubmitOrderSyncHandler.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/order.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/out.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -4,6 +4,8 @@
import com.core.annotations.AppAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OpenService;
@@ -402,6 +404,7 @@
            return R.error("单据编号[order_id]以 "+sign_arm_sku+" 与 "+sign_arm_order+" 作为拆分标记拆分失败!!!");
        }
        if (param.getArm_no()>4){
            openService.taskArmOrderResult(param);
            return R.ok();
        }
@@ -524,6 +527,23 @@
    }
    /**
     * PDA检索盘点数量
     */
    @PostMapping("/pick/v1/getPickList")
    @AppAuth(memo = "PDA检索盘点数量")
    public synchronized R getPickList(@RequestHeader(required = false) String appkey,
                                        @RequestBody PdaPickListParam param,
                                        HttpServletRequest request) {
        auth(appkey, param, request);
        List<PickWrkDetlListParam> list = openService.getPickList(param);
        if (!list.isEmpty()) {
            return R.ok(list);
        }
        return R.error("库位不存在或无明细");
    }
    /**
     * PDA绑定解绑
     */
    @PostMapping("/agv/bindCtnrAndBin/v1")
src/main/java/com/zy/asrs/controller/OutController.java
@@ -74,7 +74,7 @@
        // 获取订单主表
        OrderPakout orderPakOut = orderPakOutService.selectByNo(orderDetlPakouts.get(0).getOrderNo());
        // 盘点单出库
        if (orderPakOut.getDocType() == 8) {
        if (orderPakOut.getDocType() == 20) {
            for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
                if (issued <= 0.0D) {
@@ -122,7 +122,54 @@
                    locDtos.add(locDto);
                }
            }
        } else {
        } else if(orderPakOut.getDocType() == 10 || orderPakOut.getDocType() == 14) {
            for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
                if (issued <= 0.0D) {
                    continue;
                }
//                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
//                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                List<LocDetl> locDetls = locDetlService.queryStockMatnr(orderDetl.getMatnr());
                for (LocDetl locDetl : locDetls) {
                    if (issued > 0) {
                        LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                                issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
                        locDto.setFrozen(locDetl.getFrozen());
                        locDto.setFrozenLoc(locMast.getFrozen());
                        List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
                        locDto.setStaNos(staNos);
                        locDto.setBrand(orderDetl.getBrand());
                        locDto.setStandby1(orderDetl.getStandby1());
                        locDto.setStandby2(orderDetl.getStandby2());
                        locDto.setStandby3(orderDetl.getStandby3());
                        locDto.setBoxType1(orderDetl.getBoxType1());
                        locDto.setBoxType2(orderDetl.getBoxType2());
                        locDto.setBoxType3(orderDetl.getBoxType3());
                        locDtos.add(locDto);
                        exist.add(locDetl.getLocNo());
                        // 剩余待出数量递减
                        issued = issued - locDetl.getAnfme();
                    } else {
                        break;
                    }
                }
                if (issued > 0) {
                    LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                    locDto.setBrand(orderDetl.getBrand());
                    locDto.setStandby1(orderDetl.getStandby1());
                    locDto.setStandby2(orderDetl.getStandby2());
                    locDto.setStandby3(orderDetl.getStandby3());
                    locDto.setBoxType1(orderDetl.getBoxType1());
                    locDto.setBoxType2(orderDetl.getBoxType2());
                    locDto.setBoxType3(orderDetl.getBoxType3());
                    locDto.setLack(Boolean.TRUE);
                    locDtos.add(locDto);
                }
            }
        }else {
            for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
                if (issued <= 0.0D) {
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -48,11 +48,11 @@
    private String maktx;
    @ApiModelProperty(value= "规格")
    @ExcelProperty("规格")
    //@ExcelProperty("规格")
    private String specs;
    @ApiModelProperty(value= "货品特征")
    @ExcelProperty("货品特征")
    //@ExcelProperty("货品特征")
    private String batch;
    @ApiModelProperty(value= "单据编号")
@@ -173,18 +173,21 @@
     * 备用1(PO)
     */
    @ApiModelProperty(value= "备用1")//PO
    @ExcelProperty("客户PO")
    private String standby1 = "1";
    /**
     * 备用2(UPC)
     */
    @ApiModelProperty(value= "备用2")//UPC
    @ExcelProperty("条码UPC")
    private String standby2 = "1";
    /**
     * 备用3(SKU)
     */
    @ApiModelProperty(value= "备用3")//SKU
    @ExcelProperty("客户SKU")
    private String standby3 = "1";
    /**
@@ -192,6 +195,7 @@
     */
    @ApiModelProperty(value= "备用1")
    @TableField("box_type1")
    @ExcelProperty("货主")
    private String boxType1 = "1";
    /**
@@ -206,6 +210,7 @@
     */
    @ApiModelProperty(value= "备用3")
    @TableField("box_type3")
    @ExcelProperty("采购单号")
    private String boxType3 = "1";
    /**
src/main/java/com/zy/asrs/entity/param/PdaPickListParam.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class PdaPickListParam {
    String barcode;
}
src/main/java/com/zy/asrs/entity/param/PickWrkDetlListParam.java
New file
@@ -0,0 +1,39 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class PickWrkDetlListParam {
    // 物料编号
    private String matnr;
    // 物料名称
    private String maknx;
    //单据编号
    private String orderNo;
    //采购单号
    private String boxType3;
    //客户PO
    private String standby1;
    //条码UPC
    private String standby2;
    //客户sku
    private String standby3;
    // 客户信息
    private String manu;
    // 备注
    private String memo;
    // 物料数量
    private Double count;
    private Double total;
}
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -79,6 +79,7 @@
                                @Param("standby3")String standby3,@Param("boxType1")String boxType1,@Param("boxType2")String boxType2);
    Double queryStockAnfme(String matnr, String batch);
    List<LocDetl> queryStockMatnr(@Param("matnr")String matnr);
    List<StockVo> queryStockTotal();
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -21,6 +21,7 @@
    List<WrkDetl> selectAndLogByOrderNo(String orderNo);
    int updateInspect( @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
    List<WrkDetl> findByBarcode(String barcode);
    List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr);
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -66,6 +66,7 @@
    // --------------------------------------------------
    List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos);
    List<LocDetl> queryStockMatnr(String matnr);
//    List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3);
    List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2);
src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,5 +1,6 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
@@ -57,5 +58,6 @@
    boolean agvApplicationPassedTheGrating(ArmAgvGratingParam param);
    boolean agvApplicationPassedTheGrating(AgvGoTheArnParam param);
    boolean agvBindAndBin(String taskNo);
    boolean taskArmOrderResult(OrderArmEndParam param);
    List<PickWrkDetlListParam> getPickList(PdaPickListParam param);
}
src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -16,6 +16,7 @@
    boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch);
    List<WrkDetl> selectAndLogByOrderNo(String orderNo);
    List<WrkDetl> findByBarcode(String barcode);
    boolean updateInspect(Integer wrkNo, String matnr, String batch);
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -111,7 +111,10 @@
        return this.baseMapper.queryStock(matnr, batch, orderNo, locNos);
    }
    @Override
    public List<LocDetl> queryStockMatnr(String matnr) {
        return this.baseMapper.queryStockMatnr(matnr);
    }
//    @Override
//    public List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -75,7 +75,8 @@
    private CommonService commonService;
    @Autowired
    private LocMastServiceImpl locMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Override
    @Transactional
    public void pakinOrderCreate(OpenOrderPakinParam param) {
@@ -774,7 +775,7 @@
        if (Cools.isEmpty(basArmMast)){
            throw new CoolException("未查询到相关机械臂拆码垛任务!!!"+ JSON.toJSONString(param));
        }
        basArmMastService.updateArmMastStatus(param.getArm_no(),basArmMast.getSortingLine(),basArmMast.getStaNo(),1,3);
//        basArmMastService.updateArmMastStatus(param.getArm_no(),basArmMast.getSortingLine(),basArmMast.getStaNo(),1,3);
        basArmMastService.updateArmMastStatus(param.getArm_no(),basArmMast.getSortingLine(),basArmMast.getStaNo(),2,3);
    }
@@ -798,6 +799,22 @@
        if (!Cools.isEmpty(basArmMast)){
            basArmMastService.updateArmMastStatus(param.getArm_no(),basArmMast.getSortingLine(),basArmMast.getStaNo(), 5,6);
        }
    }
    @Override
    @Transactional
    public boolean taskArmOrderResult(OrderArmEndParam param){
        if(param.getDone_num() == 0){
            if(basArmMastService.delete(new EntityWrapper<BasArmMast>().eq("arm_no",param.getArm_no())
                    .eq("status",1))){
                return true;
            }
        }
        if(param.getDone_num() == 1){
            return true;
        }
        log.error("未找到对应任务"+ param);
        return false;
    }
    @Override
@@ -888,6 +905,44 @@
            throw new CoolException("未能绑定");
        }
    }
    @Override
    @Transactional
    public List<PickWrkDetlListParam> getPickList(PdaPickListParam param) {
        List<WrkDetl> wrkDetls = wrkDetlService.findByBarcode(param.getBarcode());
        List<PickWrkDetlListParam> result = new ArrayList<>();
        wrkDetls.forEach(wrkDetl -> {
            Double total;
            EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
            LocDetl locDetl = locDetlService.selectOne(
                    wrapper.eq("zpallet", wrkDetl.getZpallet())
                            .eq("matnr", wrkDetl.getMatnr())
            );
            // 可拣总量:优先取库存表,否则取作业数量
            if (Cools.isEmpty(locDetl)) {
                total = wrkDetl.getAnfme();
            } else {
                total = locDetl.getAnfme();
            }
            // ===== 组装返回对象 =====
            PickWrkDetlListParam dto = new PickWrkDetlListParam();
            dto.setMatnr(wrkDetl.getMatnr());
            dto.setMaknx(wrkDetl.getMaktx());
            dto.setOrderNo(wrkDetl.getOrderNo());
            dto.setBoxType3(wrkDetl.getBoxType3());
            dto.setStandby1(wrkDetl.getStandby1());
            dto.setStandby2(wrkDetl.getStandby2());
            dto.setStandby3(wrkDetl.getStandby3());
            dto.setManu(wrkDetl.getManu());
            dto.setMemo(wrkDetl.getMemo());
            // 当前拣货数量
            dto.setCount(wrkDetl.getAnfme());
            // 可拣总数量
            dto.setTotal(total);
            result.add(dto);
        });
        return result;
    }
    @Override
    @Transactional
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -76,6 +76,11 @@
    }
    @Override
    public List<WrkDetl> findByBarcode(String barcode) {
        return this.baseMapper.findByBarcode(barcode);
    }
    @Override
    public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) {
        return this.baseMapper.selectPakoutQuery(staNo, matnr);
    }
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java
@@ -35,7 +35,7 @@
    @Autowired
    private BasArmMastSignService basArmMastSignService;
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/3 * * * * ? ")
    private void orderToSortLine() {
        //获取未下发单据
        List<String> orderNos = orderPakinService.AllStatusSatisfyOrder(0);
@@ -69,10 +69,10 @@
                        Integer number =  basArmRulesService.getNumber(mat.getWeight(),mat.getVolume(),mat.getManLength(),mat.getWidth(),mat.getHeight());
                        if (number == null) {
                            BasArmRules basArmRules = new BasArmRules();
                            basArmRules.setMaterialHeight(orderDetl.getHeight());
                            basArmRules.setMaterialWeight(orderDetl.getWeight());
                            basArmRules.setMaterialLength(orderDetl.getManLength());
                            basArmRules.setMaterialWidth(orderDetl.getWidth());
                            basArmRules.setMaterialHeight(mat.getHeight());
                            basArmRules.setMaterialWeight(mat.getWeight());
                            basArmRules.setMaterialLength(mat.getManLength());
                            basArmRules.setMaterialWidth(mat.getWidth());
                            basArmRulesService.insert(basArmRules);
                            return;
                        } else if (number == 0){
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -261,9 +261,8 @@
//                        .doPost();
//                JSONObject jsonObject = JSON.parseObject(response);
//                if (jsonObject.getInteger("code").equals(200)) {
                if (true) {
                    success = true;
                    // 修改订单状态 4.完成 ===>> 6.已上报
                if (order.getSettle() == 8L) {
                    // 修改订单状态 8.完成 ===>> 6.已上报
                    if (!orderService.updateSettle(order.getId(), settle, null)) {
                        throw new CoolException("服务器内部错误,请联系管理员");
                    }
@@ -275,19 +274,6 @@
                log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "出库上报",
                            MesConstant.URL + MesConstant.PAKOUT_URL,
                            null,
                            "127.0.0.1",
                            JSON.toJSONString(pakoutParam),
                            response,
                            success
                    );
                } catch (Exception e) { log.error("", e); }
            }
        }
        return SUCCESS;
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
@@ -18,7 +18,7 @@
    @Value("${erp.switch.InboundOrderSwitch}")
    private boolean InboundOrderSwitch;
    @Scheduled(cron = "0 */30 * * * ?")
    @Scheduled(cron = "0 */15 * * * ?")
    void login(){
        if(!InboundOrderSwitch){
            return;
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
@@ -32,7 +32,7 @@
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
//    @Scheduled(cron = "0/20 * * * * ?")
    @Scheduled(cron = "0/20 * * * * ?")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java
@@ -32,7 +32,7 @@
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Scheduled(cron = "0/20 * * * * ?")
    @Scheduled(cron = "0/20 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
@@ -44,9 +44,14 @@
            List<Order> orders = orderService.selectComplete();
            if(orders.size() > 0){
                for (Order order : orders) {
                    ReturnT<String> result = saveOrderSyncHandler.start(order);//4已完成
                    if (!result.isSuccess()) {
                        log.error("单据[orderNo={}]新增保存至erp失败", order.getOrderNo());
                    if(order.getDocType() == 3 || order.getDocType() == 16 || order.getDocType() == 18 || order.getDocType() == 19){
                        ReturnT<String> result = saveOrderSyncHandler.start(order);//4已完成
                        if (!result.isSuccess()) {
                            log.error("单据[orderNo={}]新增保存至erp失败", order.getOrderNo());
                        }
                    }else{
                        order.setSettle(9L);
                        orderService.updateById(order);
                    }
                }
            }
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java
@@ -34,7 +34,7 @@
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
//    @Scheduled(cron = "0/20 * * * * ?")
    @Scheduled(cron = "0/20 * * * * ?")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -50,6 +50,31 @@
    @Value("${erp.address.impurreceivebilldetl}")
    //进仓通知单
    private String imPurreceiveBillDetlAddress;
    @Value("${erp.address.imSaloutbill}")
    //销售出库单
    private String imSaloutbill;
    @Value("${erp.address.scpSalreturn}")
    //销售退货单
    private String scpSalreturn;
    @Value("${erp.address.scpSalreturnDetl}")
    //销售退货单
    private String scpSalreturnDetl;
    @Value("${erp.address.imMdcMftproorder}")
    //生产领料单
    private String imMdcMftproorder;
    @Value("${erp.address.imMdcMftreturnorder}")
    //生产退料单
    private String imMdcMftreturnorder;
    @Value("${erp.address.imMdcMftfeedorder}")
    //生产补料单
    private String imMdcMftfeedorder;
    @Value("${erp.address.imProductinbill}")
    //生产进仓单
    private String imProductinbill;
    @Value("${erp.address.qcppManuinspec}")
    //产品检验单
    private String qcppManuinspec;
    @Autowired
    private ApiLogService apiLogService;
@@ -131,7 +156,6 @@
                    path = orgAddress;
                    break;
                case "PUR_RECEIVEBIll": //已审核收料单查询
//                    jsonObject.put("start_biztime", latestUpdateTime);//业务起始日期
                    jsonObject.put("start_biztime",  "2025-01-01 00:00:00");//业务起始日期
                    jsonObject.put("end_biztime", sdf1.format(now));//业务结束日期
                    jsonObject.put("billno", null);
@@ -142,16 +166,84 @@
                    jsonObject.put("supplier_number", null);
                    path = imPurreceiveBillAddress;
                    break;
                case "SAL_OUTSTOCK"://销售出库单查询
                    path = imSaloutbill;
                    jsonObject.put("modify_starttime",  latestUpdateTime);//业务起始日期
                    jsonObject.put("billstatus",  "B");//单据状态
                    jsonObject.put("modify_endtime",  sdf1.format(now));//业务起始日期
                    break;
                case "SAL_RETURNSTOCK"://销售退货
                    path = scpSalreturn;
                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");//业务起始日期
                    jsonObject.put("billstatus",  "B");//单据状态
                    jsonObject.put("end_starttime",  sdf1.format(now));//业务起始日期
                    break;
                case "PRD_PickMtrl"://生产领料单
                    path = imMdcMftproorder;
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
                    jsonObject.put("start_createtime", "2025-11-25 00:00:00");
                    jsonObject.put("end_createtime", sdf1.format(now));
//                    jsonObject.put("end_auditdate", sdf1.format(now));
//                    jsonObject.put("end_modifytime", sdf1.format(now));
                    jsonObject.put("billno", null);
                    jsonObject.put("billstatus", Arrays.asList("B","C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("org_number", null);
                    jsonObject.put("id", null);
                    break;
                case "PRD_ReturnMtrl"://生产退料单
                    path = imMdcMftreturnorder;
                    jsonObject.put("id", null);
                    jsonObject.put("billno", null);
                    jsonObject.put("org_number", null);
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("start_createtime", "2025-11-25 00:00:00");
                    jsonObject.put("end_createtime", sdf1.format(now));
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("end_modifytime", sdf1.format(now));
//                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
//                    jsonObject.put("end_auditdate", sdf1.format(now));
                    break;
                case "PRD_FeedMtrl"://生产补料单
                    path = imMdcMftfeedorder;
                    jsonObject.put("id", null);
                    jsonObject.put("billno", null);
                    jsonObject.put("org_number", null);
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("start_createtime", "2025-11-25 00:00:00");
                    jsonObject.put("end_createtime", sdf1.format(now));
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("end_modifytime", sdf1.format(now));
//                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
//                    jsonObject.put("end_auditdate", sdf1.format(now));
                    break;
                case "PRD_MORPT"://生产进仓单
                    path = imProductinbill;
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("modifytime_start", "2025-11-25 00:00:00");
                    jsonObject.put("modifytime_end", sdf1.format(now));
                    break;
                case "STK_InspectionForm"://产品检验
                    path = qcppManuinspec;
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("auditdate_start", "2025-11-25 00:00:00");
                    jsonObject.put("auditdate_end", sdf1.format(now));
                    break;
            }
            if(path == null){
                continue;
            }
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("data", jsonObject);
            jsonObject1.put("pageSize", 20);
            jsonObject1.put("pageNo", 1);
            String add = jsonObject1.toJSONString();
            //上报
            String response = "";
            boolean success = false;
            if(path == null){
                continue;
            }
            try {
                //获取Cookie值
                HashMap<String, Object> headers = new HashMap<>();
@@ -236,9 +328,9 @@
                                    // 更新字段
                                    if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
                                    if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
                                    if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length);
                                    if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height);
                                    if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width);
                                    if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length1);
                                    if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height1);
                                    if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width1);
                                    if (mat.getCreateTime().compareTo(sdf1.parse(createTime)) != 0)
                                        mat.setCreateTime(sdf1.parse(createTime));
                                    mat.setUpdateTime(modifyTime);
@@ -263,6 +355,7 @@
                        docTypeService.updateById(docType);
                    }
                }
                //供应商
                else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){//供应商同步
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
@@ -329,6 +422,7 @@
                        }
                    }
                }
                //收料单
                else if(kingDeeUtilType.formId.equals("PUR_RECEIVEBIll")){
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
@@ -357,7 +451,6 @@
                            JSONObject detailParam = new JSONObject();
                            JSONObject dataObj = new JSONObject();
                            dataObj.put("billno", billNo);
                            detailParam.put("data", dataObj);
                            detailParam.put("pageNo", 1);
                            detailParam.put("pageSize", 100);
                            detailParam.put("data", dataObj);
@@ -377,7 +470,7 @@
                                // ====== 处理明细 ======
                                for (int i = 0; i < rows.size(); i++) {
                                    JSONObject jsonObjectNew2 = rows.getJSONObject(i);
                                    Order order = orderService.selectByNo( billNo);//检索单据
                                    Order order = orderService.selectByNo(billNo);//检索单据
                                    LocOwner locOwner = null;
                                    if (ownerUuid != null) {
                                        locOwner = locOwnerService.selectByUuid(ownerUuid);
@@ -518,6 +611,1014 @@
                        docTypeService.updateById(docType);
                    }
                }
                //销售出库
                else if(kingDeeUtilType.formId.equals("SAL_OUTSTOCK")){
                    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)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        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.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(
                                        // 单据主档
                                        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 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);
                    }
                }
                //销售退货
                else if(kingDeeUtilType.formId.equals("SAL_RETURNSTOCK")){
                    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)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        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)) {
                                        // 单据主档
                                        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);
                                }
                            }
                        }
                        docTypeService.updateById(docType);
                    }
                }
                //产品检验单
                else if(kingDeeUtilType.formId.equals("STK_InspectionForm")){
                    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)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        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.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(
                                        // 单据主档
                                        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 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);
                    }
                }
                //生产领料,生产补料
                else if(kingDeeUtilType.formId.equals("PRD_PickMtrl") || kingDeeUtilType.formId.equals("PRD_FeedMtrl")){
                    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)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        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.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = jsonObjectNew.getString("org_name");
                            String ownerUuid = jsonObjectNew.getString("org_number");
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        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("qty");//箱数
                                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);
                    }
                }
                //生产退料单PRD_ReturnMtrl
                else if(kingDeeUtilType.formId.equals("PRD_ReturnMtrl") ) {
                    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)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        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.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(
                                        // 单据主档
                                        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 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);
                    }
                }
                //生产汇报单
                else if(kingDeeUtilType.formId.equals("PRD_MORPT")) {
                    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)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        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.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = "和得科技";
                            String ownerUuid = "BU-00001";
                            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(
                                        // 单据主档
                                        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("sumentry");
                            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("completqty");//箱数
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
                                String pOrderNo = entry.getString("eap7_textfield");//采购单号
                                String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
                                String s2 = entry.getString("eap7_textfield1"); //条码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);
                    }
                }
            } catch (Exception e) {
                log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -541,7 +1642,7 @@
    public void callApiLogSaveSupp(LocSupp locSupp, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
        apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
                "货主编号:" + locSupp.getOwnerUuid() + "、货主名称:" + locSupp.getOwner(),
                "供应商编号:" + locSupp.getOwnerUuid() + "、供应商名称:" + locSupp.getOwner(),
                response, bool);
    }
    public void callApiLogSaveOwner(LocOwner locOwner, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
@@ -40,7 +40,31 @@
    @Value("${erp.address.imPurinbillBatchAudit}")
    //审核地址
    private String imPurinbillBatchAudit;
    @Value("${erp.address.imSaloutbillReport}")
    //销售出库单审核地址
    private String imSaloutbillReport;
    @Value("${erp.address.scpSalreturnReport}")
    //销售退货单审核地址
    private String scpSalreturnReport;
    @Value("${erp.address.imMdcMftproorderReport}")
    //生产领料单上报
    private String imMdcMftproorderReport;
    @Value("${erp.address.imMdcMftreturnorderReport}")
    //生产退料单上报
    private String imMdcMftreturnorderReport;
    @Value("${erp.address.imMdcMftfeedorderReport}")
    //生产补料单上报
    private String imMdcMftfeedorderReport;
    @Value("${erp.address.imProductinbillReport}")
    //生产汇报单上报
    private String imProductinbillReport;
    @Value("${erp.address.imOtheroutbillAudi}")
    //其他出库审核上报
    private String imOtheroutbillAudi;
    @Value("${erp.address.imOtherinbillAudit}")
    //其他入库审核上报
    private String imOtherinbillAudit;
    @Autowired
    private OrderService orderService;
    @Autowired
@@ -81,15 +105,56 @@
    private JSONObject buildRequestParams(Order order, KingDeeUtilType kingDeeUtilType,
                                          SimpleDateFormat sdf1, SimpleDateFormat sdf2) {
        switch (kingDeeUtilType.formId) {
        JSONArray idArray = new JSONArray();
        JSONObject dataObj = new JSONObject();
        if(kingDeeUtilType == null){
            return null;
        }
        switch(kingDeeUtilType.formId) {
            case "PUR_RECEIVEBIll": // 进仓通知单提交
                path = imPurinbillBatchAudit;
                JSONArray idArray = new JSONArray();
                idArray.add(order.getNumber());
                JSONObject dataObj = new JSONObject();
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "SAL_OUTSTOCK"://销售出库上报
                path = imSaloutbillReport;
                idArray.add(order.getOrderNo());
                dataObj.fluentPut("billno", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "SAL_RETURNSTOCK"://销售退料单
                path = scpSalreturnReport;
                dataObj.fluentPut("billno", order.getOrderNo());
                return new JSONObject().fluentPut("data", dataObj);
            case "PRD_PickMtrl"://生产领料单上报
                path = imMdcMftproorderReport;
                idArray.add(order.getNumber());
                dataObj.fluentPut("ids", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "PRD_ReturnMtrl"://生产退料单上报
                path = imMdcMftreturnorderReport;
                idArray.add(order.getNumber());
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "PRD_FeedMtrl": //生产补料单
                path = imMdcMftfeedorderReport;
                idArray.add(order.getNumber());
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "PRD_MORPT"://生产汇报单
                path = imProductinbillReport;
                idArray.add(order.getNumber());
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "STK_MISCELLANEOUS"://其他入库单
                path = imOtheroutbillAudi;
                idArray.add(order.getId());
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "STK_MisDelivery"://其他出库单
                path = imOtherinbillAudit;
                idArray.add(order.getId());
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            default:
                throw new IllegalArgumentException("Unsupported formId: " + kingDeeUtilType.formId);
        }
@@ -133,9 +198,8 @@
            }
            // 解析返回的响应
            JSONObject data = jsonResponse.getJSONObject("data");
            String errorCode = jsonResponse.getString("errorCode");
            boolean status = jsonResponse.getBooleanValue("status");
            if ("0".equals(errorCode) && status) {
            if (status) {
                // 获取成功与失败的数量
                int successCount = data.getInteger("successCount");
                int failCount = data.getInteger("failCount");
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java
@@ -36,6 +36,10 @@
    @Value("${erp.address.imPurinbillAdd}")
    private String imPurinbillAdd;
    @Value("${erp.address.imOtheroutbill}")
    private String imOtheroutbill;
    @Value("${erp.address.imOtherinbill}")
    private String imOtherinbill;
    @Autowired
    private OrderService orderService;
@@ -82,7 +86,10 @@
    private JSONObject buildRequestParams(Order order, KingDeeUtilType kingDeeUtilType, SimpleDateFormat sdf1, SimpleDateFormat sdf2) {
        List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",order.getOrderNo()));
        if (kingDeeUtilType == null || kingDeeUtilType.formId == null) {
            log.warn("kingDeeUtilType 为空,已跳过本次同步!");
            return null;
        }
        switch (kingDeeUtilType.formId) {
            case "PUR_RECEIVEBIll": // 进仓通知单
                path = imPurinbillAdd;
@@ -90,8 +97,9 @@
                JSONArray billentryArray = new JSONArray();  // 用于存储 billentry 对象
                String suppCode = null;  // 供应商
                String boxType2 = null;  // 货主/货源
                // 遍历订单详情
                Date now = new Date();
                for (OrderDetl orderDetl : orderDetlList) {
                    suppCode = orderDetl.getSuppCode();
                    boxType2 = orderDetl.getBoxType2();
@@ -99,8 +107,7 @@
                        continue;
                    }
//                    JSONArray idArr = new JSONArray();
//                    idArr.add(0L);   // ✅ 注意必须是 Long 类型的 0L
//                    Double reportNum = orderDetl.getQty() - orderDetl.getWorkQty();//上报数量减去已上报数量
//                    idArr.add(0L);
                    // 创建 billentry_lk 对象
                    JSONObject billentryLk = new JSONObject()
                            .fluentPut("id", 0L)
@@ -122,11 +129,9 @@
                            .fluentPut("qty", orderDetl.getQty())  // 数量
                            .fluentPut("material_number", orderDetl.getMatnr())  // 物料编号
                            .fluentPut("billentry_lk", billentryLkArray);
                    billentryArray.add(billentry);
//                    orderDetl.setWorkQty(orderDetl.getQty());
//                    orderDetlService.updateById(orderDetl);//将上报数覆盖到历史上
                }
                Date now = new Date();
                return new JSONObject()
                        .fluentPut("data", new JSONArray(Arrays.asList(
                                new JSONObject()
@@ -144,9 +149,73 @@
                                        .fluentPut("supplier_number", suppCode)  // 供应商编号
                                        .fluentPut("billentry", billentryArray)  // 将 billentry 数组添加到请求参数
                        )));
            case "STK_MISCELLANEOUS": // 其他入库单
                path = imOtherinbill;
                billentryArray = new JSONArray();
                for (OrderDetl orderDetl : orderDetlList) {
                    if (orderDetl.getQty() == 0) {
                        continue;
                    }
                    JSONObject billentry = new JSONObject()
                            .fluentPut("id", 0L)
                            .fluentPut("material_number", orderDetl.getMatnr())       // 物料编码
                            .fluentPut("qty", orderDetl.getQty())                    // 数量
                            .fluentPut("warehouse_number", "CK001")     // 仓库
                            .fluentPut("invstatus_number", "110")
                            .fluentPut("invtype_number", "110")
                            .fluentPut("outinvstatus_number", "110")
                            .fluentPut("outinvtype_number", "110")
                            .fluentPut("linetype_number", "010");
                    billentryArray.add(billentry);
                }
                Date nowMis = new Date();
                return new JSONObject()
                        .fluentPut("data", new JSONArray(Arrays.asList(
                                new JSONObject()
//                                        .fluentPut("id", 0L)
                                        .fluentPut("billno", order.getOrderNo())
//                                        .fluentPut("bookdate", sdf1.format(nowMis))
                                        .fluentPut("biztime", sdf1.format(nowMis))
                                        .fluentPut("biztype_number", "354")
                                        .fluentPut("billtype_number", "im_OtherInBill_STD_BT_S")
                                        .fluentPut("org_number", "BU-00001")
                                        .fluentPut("invscheme_number", "354")
                                        .fluentPut("billentry", billentryArray)
                        )));
            case "STK_MisDelivery": // 其他出库单
                path = imOtheroutbill;
                billentryArray = new JSONArray();
                Date nowOut = new Date();
                for (OrderDetl orderDetl : orderDetlList) {
                    if (orderDetl.getQty() == 0) {
                        continue;
                    }
                    JSONObject billentry = new JSONObject()
                            .fluentPut("id", 0L)
                            .fluentPut("material_number", orderDetl.getMatnr())       // 物料编码
                            .fluentPut("qty", orderDetl.getQty())                    // 数量
                            .fluentPut("warehouse_number", "CK001")     // 仓库
                            .fluentPut("invstatus_number", "110")
                            .fluentPut("invtype_number", "110")
                            .fluentPut("outinvstatus_number", "110")
                            .fluentPut("outinvtype_number", "110")
                            .fluentPut("linetype_number", "010");
                    billentryArray.add(billentry);
                }
                return new JSONObject()
                        .fluentPut("data", new JSONArray(Arrays.asList(
                                new JSONObject()
//                                        .fluentPut("id", 0L)
                                        .fluentPut("billno", order.getOrderNo())
//                                        .fluentPut("bookdate", sdf1.format(nowMis))
                                        .fluentPut("biztime", sdf1.format(nowOut))
                                        .fluentPut("biztype_number", "354")
                                        .fluentPut("billtype_number", "im_OtherInBill_STD_BT_S")
                                        .fluentPut("org_number", "BU-00001")
                                        .fluentPut("invscheme_number", "354")
                                        .fluentPut("billentry", billentryArray)
                        )));
            default:
                // 默认处理:可以抛出异常或返回空对象
                throw new IllegalArgumentException("Unsupported formId: " + kingDeeUtilType.formId);
        }
    }
@@ -155,11 +224,9 @@
    private ReturnT<String> sendRequestAndProcessResponse(Order order, ErpSecret erpSecret, JSONObject add) {
        String response = "";
        boolean success = false;
        try {
            // 设置请求头
            HashMap<String, Object> headers = buildRequestHeaders(erpSecret);
            // 发送请求,将 JSONObject 转换为 String
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
@@ -168,10 +235,8 @@
                    .setJson(add.toJSONString()) // 将 JSONObject 转换为 String
                    .build()
                    .doPost();
            // 解析响应
            JSONObject jsonResponse = JSON.parseObject(response);
            // 判断是否因为 token 过期 (errorCode = 401)
            if ("401".equals(jsonResponse.getString("errorCode"))) {
                log.error("认证失败,尝试重新获取 Token");
@@ -188,18 +253,15 @@
                        .build()
                        .doPost();
            }
            // 解析返回的响应
            JSONObject data = jsonResponse.getJSONObject("data");
            String errorCode = jsonResponse.getString("errorCode");
            boolean status = jsonResponse.getBooleanValue("status");
            // 检查接口调用的整体状态
            if ("0".equals(errorCode) && status) {
                // 获取成功与失败的数量
                int successCount = data.getInteger("successCount");
                int failCount = data.getInteger("failCount");
                if (failCount == 0) {
                    success = true;
                    log.info("接口调用成功,成功的操作数量: {}", successCount);
@@ -209,12 +271,10 @@
                        JSONObject resultItem = resultArray.getJSONObject(i);
                        String billNo = resultItem.getString("number");  // 获取返回的单据号
                        String billId = resultItem.getString("id");      // 获取返回的ID
                        // 判断返回的单据号与订单号是否一致
                        if (billNo != null && billNo.equals(order.getOrderNo())) {
                            // 如果一致,设置订单的 number
                            order.setNumber(billId);
                            orderService.updateById(order);
                            log.info("订单号 {} 与返回的单据号匹配,设置订单 ID 为 {}", order.getOrderNo(), billId);
                        }
                    }
@@ -244,7 +304,6 @@
            // 保存接口日志
            saveApiLog(add, response, success);
        }
        return success ? SUCCESS : FAIL;
    }
@@ -258,7 +317,7 @@
    private void saveApiLog(JSONObject add, String response, boolean success) {
        try {
            apiLogService.save(
                    "进仓通知单上报新增",
                    "入库上报新增",
                    URL + path,
                    null,
                    "127.0.0.1",
src/main/java/com/zy/asrs/task/kingdee/handler/SubmitOrderSyncHandler.java
@@ -40,7 +40,10 @@
    @Value("${erp.address.imPurinbillBatchSubmit}")
    private String imPurinbillBatchSubmit;
    @Value("${erp.address.imOtheroutbillSubmit}")
    private String imOtheroutbillSubmit;
    @Value("${erp.address.imOtherinbillSubmit}")
    private String imOtherinbillSubmit;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Autowired
@@ -81,15 +84,24 @@
    private JSONObject buildRequestParams(Order order, KingDeeUtilType kingDeeUtilType,
                                          SimpleDateFormat sdf1, SimpleDateFormat sdf2) {
        JSONObject dataObj = new JSONObject();
        JSONArray idArray = new JSONArray();
        switch (kingDeeUtilType.formId) {
            case "PUR_RECEIVEBIll": // 进仓通知单提交
                path = imPurinbillBatchSubmit;
                JSONArray idArray = new JSONArray();
                idArray.add(order.getNumber());
                JSONObject dataObj = new JSONObject();
                dataObj.fluentPut("id", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "STK_MISCELLANEOUS"://其他入库单
                path = imOtherinbillSubmit;
                idArray.add(order.getOrderNo());
                dataObj.fluentPut("billno", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            case "STK_MisDelivery"://其他出库单
                path = imOtheroutbillSubmit;
                idArray.add(order.getOrderNo());
                dataObj.fluentPut("billno", idArray);
                return new JSONObject().fluentPut("data", dataObj);
            default:
                throw new IllegalArgumentException("Unsupported formId: " + kingDeeUtilType.formId);
        }
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java
@@ -4,24 +4,29 @@
    BD_MATERIAL(0, "物料档案","BD_MATERIAL","","","",1),
    BD_RRGANIZATION(2, "供应商","BD_RRGANIZATION","","","",1),
    PUR_RECEIVEBIll(3, "收料单","PUR_RECEIVEBIll","","","",1),
//    INR(1, "进仓通知库单上报","INR","FRealQty","","",1),
//    PUR_MRB(2, "采购退料单","PUR_MRB","FRMREALQTY","","",1),
//    PRD_PickMtrl(3, "生产领料单","PRD_PickMtrl","FActualQty","","",1),
//    PRD_ReturnMtrl(4, "生产退料单","PRD_ReturnMtrl","FQty","","",1),
//    PRD_FeedMtrl(5, "生产补料单","PRD_FeedMtrl","FActualQty","","",1),
    SAL_OUTSTOCK(7, "销售出库单","SAL_OUTSTOCK","FRealQty","","",0),
//    STK_MisDelivery(19, "其他出库单","STK_MisDelivery","FQty","","",0),
//    STK_MISCELLANEOUS(18, "其他入库单","STK_MISCELLANEOUS","FQty","其他入库单","STK_MISCELLANEOUS",1),
//    SAL_RETURNSTOCK(9, "销售退货单","SAL_RETURNSTOCK","FRealQty","","",1),
    PRD_PickMtrl(10, "生产领料单","PRD_PickMtrl","","","",0),
//    PRD_ReturnMtrl(12, "生产退料单","PRD_ReturnMtrl","FQty","","",1),
//    PRD_FeedMtrl(14, "生产补料单","PRD_FeedMtrl","FActualQty","","",0),
    PRD_MORPT(16, "生产汇报单","PRD_MORPT","FFinishQty","生产入库单","PRD_INSTOCK",1),
//    STK_InspectionForm(20, "产品检验单","STK_InspectionForm","","","",0),
    //    PUR_MRB(2, "采购退料单","PUR_MRB","FRMREALQTY","","",1),
//    STK_TransferDirect(6, "直接调拨单","STK_TransferDirect","","FQty","",1),
//    STK_StockCountGain(7, "盘盈单","STK_StockCountGain","FGainQty","","",1),
//    STK_StockCountLoss(8, "盘亏单","STK_StockCountLoss","FLossQty","","",1),
//    STK_MisDelivery(9, "其他出库单","STK_MisDelivery","FQty","","",1),
//    SP_PickMtrl(10, "简单生产领料单","SP_PickMtrl","FActualQty","","",1),
//    SP_ReturnMtrl(11, "简单生产退料单","SP_ReturnMtrl","FQty","","",1),
//    SAL_OUTSTOCK(12, "销售出库单","SAL_OUTSTOCK","FRealQty","","",1),
//    SAL_RETURNSTOCK(13, "销售退货单","SAL_RETURNSTOCK","FRealQty","","",1),
//    SAL_DELIVERYNOTICE(14, "发货通知单","SAL_DELIVERYNOTICE","FQty","销售出库单","SAL_OUTSTOCK",0),
//    STK_MISCELLANEOUS(15, "其他入库单","STK_MISCELLANEOUS","FQty","其他入库单","STK_MISCELLANEOUS",1),
//    BD_Supplier(16, "供应商","BD_Supplier","","","",1),
//    PUR_ReceiveBill(17, "收料通知单","PUR_ReceiveBill","FPOQTY","采购入库单","STK_InStock",1),
//    PRD_MORPT(18, "生产汇报单","PRD_MORPT","FFinishQty","生产入库单","PRD_INSTOCK",1),
//    PRD_INSTOCK(19, "生产入库单","PRD_INSTOCK","","","",1),
//    SAL_RETURNNOTICE(20, "退货通知单","SAL_RETURNNOTICE","FBaseJunkedQty","销售退货单","SAL_RETURNSTOCK",1),
//    STK_OutStockApply(21, "出库申请单","STK_OutStockApply","FTotalSecQty","其他出库单","STK_MisDelivery",0),
@@ -43,7 +48,15 @@
        this.correspondingFormId = correspondingFormId;
        this.pakIn = pakIn;   //1入库  0出库
    }
    public static KingDeeUtilType getByFormId(String formId) {
        if (formId == null) return null;
        for (KingDeeUtilType type : values()) {
            if (formId.equals(type.formId)) {
                return type;
            }
        }
        return null;
    }
    public static KingDeeUtilType get(Short id) {
        if (null == id) {
            return null;
src/main/resources/application.yml
@@ -10,8 +10,8 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jshdasrs
    url: jdbc:sqlserver://10.10.10.235;databasename=jshdasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jshdasrs
#    url: jdbc:sqlserver://10.10.10.235;databasename=jshdasrs
#    url: jdbc:sqlserver://192.168.4.191:50948;databasename=jshdasrs
    username: sa
    password: sa@123
@@ -98,7 +98,7 @@
    #登录接口开关
    LoginAuthenticationSwitch: true
    #上报、审核单据开关
    ReviewOrderSwitch: false
    ReviewOrderSwitch: true
  #  地址
  address:
    URL: https://shyucheng.test.kdgalaxy.com
@@ -118,18 +118,53 @@
    imPurinbillBatchSubmit: /kapi/v2/im/im_purinbill/batchSubmit
    #进仓入库单审核
    imPurinbillBatchAudit: /kapi/v2/im/im_purinbill/batchAudit
    #销售出库单查询
    imSaloutbill: /kapi/v2/eap7/im/im_saloutbill/query
    #销售出库单上报
    imSaloutbillReport: /kapi/v2/im/im_saloutbill/batchAudit
    #销售退货查询
    scpSalreturn: /kapi/v2/eap7/scp/scp_salreturn/batchQuery
    #销售退货进仓单
    scpSalreturnDetl: /kapi/v2/eap7/scp/scp_salreturn/query
    #销售退货上报
    scpSalreturnReport: /kapi/v2/eap7/scp/scp_salreturn/audit
    #生产领料查询
    imMdcMftproorder: /kapi/v2/im/im_mdc_mftproorder/batchQuery
    #生产领料汇报
    imMdcMftproorderReport: /kapi/v2/im/im_mdc_mftproorder/batchAudit
    #生产退料单查询
    imMdcMftreturnorder: /kapi/v2/im/im_mdc_mftreturnorder/batchQuery
    #生产退料单上报
    imMdcMftreturnorderReport: /kapi/v2/im/im_mdc_mftreturnorder/batchAudit
    #生产补料单
    imMdcMftfeedorder: /kapi/v2/im/im_mdc_mftfeedorder/batcheQuery
    #生产补料单汇报
    imMdcMftfeedorderReport: /kapi/v2/im/im_mdc_mftfeedorder/batchAudit
    #生产进仓单查询
    imProductinbill: /kapi/v2/eap7/pom/pom_mftorderreport/query
    #生产进仓单查询上报
    imProductinbillReport: /kapi/v2/im/im_productinbill/batchAudit
    #其他出库单上报
    imOtheroutbill: /kapi/v2/im/im_otheroutbill/batchSave
    #其他出库单提交
    imOtheroutbillSubmit: /kapi/v2/im/im_otheroutbill/batchSubmit
    #其他出库单审核
    imOtheroutbillAudi: /kapi/v2/im/im_otheroutbill/batchAudit
    #其他入库新增
    imOtherinbill: /kapi/v2/im/im_otherinbill/batchAdd
    #其他入库提交
    imOtherinbillSubmit: /kapi/v2/im/im_otherinbill/batchSubmit
    #其他入库审核
    imOtherinbillAudit: /kapi/v2/im/im_otherinbill/batchAudit
    #产品检验单查询
    qcppManuinspec: /kapi/v2/eap7/qcpp/qcpp_manuinspec/query
    #结果上报(保存)单地址
    outaddressSave: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc
    #结果上报(提交)单地址
    outaddressSubmit: K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc
    #结果上报(审核)单地址
    outaddressAudit: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
#    #结果上报(保存)单地址
#    outaddressSave: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc
#    #结果上报(提交)单地址
#    outaddressSubmit: K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc
#    #结果上报(审核)单地址
#    outaddressAudit: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
  #  登录账号管理
  login :
    xAcfwIdentity: "djF8MTlhNTNhZjJhOWEwMWRlODhlMDF8NDkxNTk0MDU4MTQxNXwus9WaEHKRh0daJe1TWmVoMkv3zQY2knNTZRzaOhRgwnw"
src/main/resources/mapper/LocDetlMapper.xml
@@ -414,9 +414,15 @@
        ROW_NUMBER() over (order by sum(a.anfme) desc) as row
        , a.matnr
        , sum(a.anfme) as anfme
        , a.order_no as orderNo
        , a.standby1
        , a.standby2
        , a.standby3
        , a.box_type1 as boxType1
        , a.box_type3 as boxType3
        from asr_loc_detl a
        where 1=1
        group by a.matnr
        group by a.matnr,a.order_no,a.box_type3,a.standby1,a.standby2,a.standby3,a.box_type1
    </select>
    <select id="selectPakoutByRule" resultMap="BaseResultMap">
@@ -535,7 +541,70 @@
        end
        desc
    </select>
    <select id="queryStockMatnr" resultMap="BaseResultMap">
        select a.*
        from asr_loc_detl a
        left join asr_loc_mast b on a.loc_no = b.loc_no
        where 1=1
        and b.loc_sts = 'F'
        and a.matnr = #{matnr}
        order by
        DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
        desc,
        NEWID(),
        case
        when (left(a.loc_no, 2) = '01') then 0
        when (left(a.loc_no, 2) = '02') then 1
        when (left(a.loc_no, 2) = '03') then 1
        when (left(a.loc_no, 2) = '04') then 0
        when (left(a.loc_no, 2) = '05') then 0
        when (left(a.loc_no, 2) = '06') then 1
        when (left(a.loc_no, 2) = '07') then 1
        when (left(a.loc_no, 2) = '08') then 0
        when (left(a.loc_no, 2) = '09') then 0
        when (left(a.loc_no, 2) = '10') then 1
        when (left(a.loc_no, 2) = '11') then 1
        when (left(a.loc_no, 2) = '12') then 0
        when (left(a.loc_no, 2) = '13') then 0
        when (left(a.loc_no, 2) = '14') then 1
        when (left(a.loc_no, 2) = '15') then 1
        when (left(a.loc_no, 2) = '16') then 0
        when (left(a.loc_no, 2) = '17') then 0
        when (left(a.loc_no, 2) = '18') then 1
        when (left(a.loc_no, 2) = '19') then 1
        when (left(a.loc_no, 2) = '20') then 0
        when (left(a.loc_no, 2) = '21') then 0
        when (left(a.loc_no, 2) = '22') then 1
        when (left(a.loc_no, 2) = '23') then 1
        when (left(a.loc_no, 2) = '24') then 0
        when (left(a.loc_no, 2) = '25') then 0
        when (left(a.loc_no, 2) = '26') then 1
        when (left(a.loc_no, 2) = '27') then 1
        when (left(a.loc_no, 2) = '28') then 0
        when (left(a.loc_no, 2) = '29') then 0
        when (left(a.loc_no, 2) = '30') then 1
        when (left(a.loc_no, 2) = '31') then 1
        when (left(a.loc_no, 2) = '32') then 0
        when (left(a.loc_no, 2) = '33') then 0
        when (left(a.loc_no, 2) = '34') then 1
        when (left(a.loc_no, 2) = '35') then 1
        when (left(a.loc_no, 2) = '36') then 0
        when (left(a.loc_no, 2) = '37') then 0
        when (left(a.loc_no, 2) = '38') then 1
        when (left(a.loc_no, 2) = '39') then 1
        when (left(a.loc_no, 2) = '40') then 0
        when (left(a.loc_no, 2) = '41') then 0
        when (left(a.loc_no, 2) = '42') then 1
        when (left(a.loc_no, 2) = '43') then 1
        when (left(a.loc_no, 2) = '44') then 0
        when (left(a.loc_no, 2) = '45') then 0
        when (left(a.loc_no, 2) = '46') then 1
        when (left(a.loc_no, 2) = '47') then 1
        when (left(a.loc_no, 2) = '48') then 0
        else 0
        end
        desc
    </select>
    <select id="queryStockAll" resultMap="BaseResultMap">
        select a.*
        from asr_loc_detl a
src/main/resources/mapper/WrkDetlMapper.xml
@@ -76,7 +76,9 @@
        and matnr = #{matnr}
        <include refid="batchSeq"></include>
    </delete>
    <select id="findByBarcode" resultMap="BaseResultMap">
        select * from asr_wrk_detl where 1=1 and zpallet = #{barcode} and wrk_no != 9996
    </select>
    <update id="updateAnfme">
        update asr_wrk_detl
        set anfme = #{anfme}
src/main/webapp/static/js/common.js
@@ -234,7 +234,7 @@
    ,{field: 'anfme', align: 'center',title: '数量', hide: false}
    ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: false}
    // ,{field: 'specs', align: 'center',title: '规格', hide: true}
    ,{field: 'boxType3', align: 'center',title: '采购单号', hide: true}
    // ,{field: 'model', align: 'center',title: '代码', hide: true}
    // ,{field: 'color', align: 'center',title: '颜色', hide: true}
    // ,{field: 'brand', align: 'center',title: '品牌', hide: true}
src/main/webapp/static/js/orderPakout/order.js
@@ -129,7 +129,7 @@
                            {field: 'standby3', title: '客户SKU'},
                            {field: 'boxType1', title: '货主'},
                            {field: 'boxType3', title: '采购单号'},
                            ,{field: 'standby1', align: 'center',title: '客户PO', hide: false}
                            {field: 'standby1', align: 'center',title: '客户PO', hide: false}
                            ,{field: 'standby2', align: 'center',title: 'UPC', hide: false},
                            // {field: 'batch', title: '批号'},
                            // {field: 'anfme', title: '数量'},
src/main/webapp/static/js/orderPakout/out.js
@@ -34,8 +34,8 @@
            ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160}
            ,{field: 'matnr', align: 'center',title: '商品编号', width: 160}
            ,{field: 'maktx', align: 'center',title: '商品名称', width: 200}
            ,{field: 'batch', align: 'center',title: '序列码',hide:true}
            ,{field: 'specs', align: 'center',title: '规格'}
            // ,{field: 'batch', align: 'center',title: '序列码',hide:true}
            // ,{field: 'specs', align: 'center',title: '规格'}
            ,{field: 'standby1', align: 'center',title: 'po', hide: false}
            ,{field: 'standby2', align: 'center',title: 'upc', hide: false}
            // ,{field: 'anfme', align: 'center',title: '数量'}
@@ -160,7 +160,7 @@
                                cols: [[
                                    // {type: 'checkbox', merge: ['orderNo']},
                                    {field: 'orderNo', title: '单据编号', merge: true, align: 'center'},
                                    {field: 'title', title: '商品', merge: true, align: 'center', width: 350},
                                    {field: 'matnr', title: '物料编码', merge: true, align: 'center', width: 350},
                                    {field: 'batch', title: '序列码', align: 'center',hide:true},
                                    {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    {field: 'locNo', title: '货位', align: 'center', width: 100, templet: '#locNoTpl'},