自动化立体仓库 - WMS系统
zjj
2023-12-27 d814bde01eb91d1544b718463cd31317726bbf6b
Merge remote-tracking branch 'origin/mdqdasrsVersion' into mdqdasrsVersion
1个文件已添加
18个文件已修改
413 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OpenOrderPakinJDParam.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OpenOrderPakinParam.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/PushDowmOrderSyncScheduler.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/PushDowmOrderSyncHandler.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SubmitOrderSyncHandler.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/DetlDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/entity/param/SaceOrderOtherParam.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -64,12 +64,16 @@
        if (Cools.isEmpty(param1.getOrderNo())) {
            return R.error("单据编号[orderNo]不能为空");
        }
        if (Cools.isEmpty(param1.getId())) {
            return R.error("单据唯一值[id]不能为空");
        }
        if (Cools.isEmpty(param1.getFormId())) {
            return R.error("单据类型[orderType]不能为空");
        }
        if (Cools.isEmpty(param1.getMatList())) {
            return R.error("单据明细[orderDetails]不能为空");
        }
        List<Map<String, Object>> result = new ArrayList<>();
@@ -129,6 +133,9 @@
        if (Cools.isEmpty(param1.getOrderNo())) {
            return R.error("单据编号[orderNo]不能为空");
        }
        if (Cools.isEmpty(param1.getId())) {
            return R.error("单据唯一值[id]不能为空");
        }
        if (Cools.isEmpty(param1.getFormId())) {
            return R.error("单据类型[FormId]不能为空");
        }
src/main/java/com/zy/asrs/entity/param/OpenOrderPakinJDParam.java
@@ -19,6 +19,8 @@
    private String createDate;
    private String type;//类型  (1、整单上报  2、行号上报)
    private List<DetlDto2> matList;
    @Data
@@ -34,15 +36,17 @@
        private Double anfme;
        private String owner;
        private int beBatch;
        public DetlDto2(){}
        public DetlDto2(String matnr,String maktx,String batch,String specs,Double anfme,String owner){
        public DetlDto2(String matnr,String maktx,String batch,String specs,Double anfme,String owner,int beBatch){
            this.matnr=matnr;
            this.maktx=maktx;
            this.batch=batch;
            this.specs=specs;
            this.anfme=anfme;
            this.owner=owner;
            this.beBatch=beBatch;
        }
    }
src/main/java/com/zy/asrs/entity/param/OpenOrderPakinParam.java
@@ -28,13 +28,8 @@
    public OpenOrderPakinParam(OpenOrderPakinJDParam param1){
        this.orderNo=param1.getOrderNo();
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.getFormId(param1.getFormId());
        if (Cools.isEmpty(kingDeeUtilType)){
            this.orderType=param1.getFormId();
        }else {
            this.orderType=kingDeeUtilType.desc;
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(param1.getId());
        this.orderType=kingDeeUtilType.desc;
        this.orderTime=param1.getCreateDate();
        List<OpenOrderPakinJDParam.DetlDto2> matList = param1.getMatList();
        List<DetlDto> dtos = new ArrayList<>();
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
@@ -29,13 +29,7 @@
    public OpenOrderPakoutParam(OpenOrderPakinJDParam param1){
        this.orderNo=param1.getOrderNo();
        KingDeeUtilType kingDeeUtilType = null;
        if (!Cools.isEmpty(param1.getId())){
            kingDeeUtilType = KingDeeUtilType.get(param1.getId());
        }
        if (Cools.isEmpty(kingDeeUtilType)){
            kingDeeUtilType = KingDeeUtilType.getFormId(param1.getFormId());
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(param1.getId());
        if (Cools.isEmpty(kingDeeUtilType)){
            this.orderType=param1.getFormId();
        }else {
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -132,6 +132,7 @@
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getOwnerName(),detail.getPayment());
            dto.setBeBatch(detail.getBeBatch());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
@@ -172,6 +173,7 @@
            orderDetl.setPayment(detlDto.getPayment());
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            orderDetl.setBeBatch(detlDto.getBeBatch());
            orderDetl.setWeight(detlDto.getWeight());
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
@@ -237,6 +239,7 @@
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            dto.setBeBatch(detail.getBeBatch());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
@@ -263,6 +266,7 @@
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            orderDetl.setBeBatch(detlDto.getBeBatch());
            orderDetl.setWeight(detlDto.getWeight());
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
src/main/java/com/zy/asrs/task/kingdee/PushDowmOrderSyncScheduler.java
@@ -10,6 +10,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/*
@@ -33,9 +34,15 @@
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = pushDowmOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]提交至erp失败", order.getOrderNo());
            try{
                ReturnT<String> result = pushDowmOrderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]提交至erp失败", order.getOrderNo());
                }
            }catch (Exception e){
                Order order1 = orderService.selectById(order.getId());
                order1.setUpdateTime(new Date());
                orderService.updateById(order1);
            }
        }
    }
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
@@ -11,6 +11,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
@@ -28,7 +29,7 @@
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
@@ -36,9 +37,15 @@
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = reviewOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]向erp审核失败", order.getOrderNo());
            try{
                ReturnT<String> result = reviewOrderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]向erp审核失败", order.getOrderNo());
                }
            }catch (Exception e){
                Order order1 = orderService.selectById(order.getId());
                order1.setUpdateTime(new Date());
                orderService.updateById(order1);
            }
        }
    }
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java
@@ -3,13 +3,15 @@
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.kingdee.handler.SubmitOrderSyncHandler;
import com.zy.asrs.task.kingdee.handler.SaveOrderSyncHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
@@ -18,27 +20,31 @@
@Slf4j
@Component
public class SaveOrderSyncScheduler {
    @Autowired
    private SubmitOrderSyncHandler submitOrderSyncHandler;
    private SaveOrderSyncHandler saveOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Value("${erp.switch.SaveOrderSwitch}")
    private boolean SaveOrderSwitch;
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if (1==1) return;
        if(!ReviewOrderSwitch){
        if(!SaveOrderSwitch){
            return;
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = submitOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]提交至erp失败", order.getOrderNo());
            try{
                ReturnT<String> result = saveOrderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]提交至erp失败", order.getOrderNo());
                }
            }catch (Exception e){
                Order order1 = orderService.selectById(order.getId());
                order1.setUpdateTime(new Date());
                orderService.updateById(order1);
            }
        }
    }
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java
@@ -3,7 +3,8 @@
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.kingdee.handler.SaveOrderSyncHandler;
import com.zy.asrs.task.kingdee.handler.SubmitOrderSyncHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -11,6 +12,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
@@ -21,24 +23,30 @@
public class SubmitOrderSyncScheduler {
    @Autowired
    private SaveOrderSyncHandler saveOrderSyncHandler;
    private SubmitOrderSyncHandler submitOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Value("${erp.switch.SubmitOrderSwitch}")
    private boolean SubmitOrderSwitch;
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
        if(!SubmitOrderSwitch){
            return;
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = saveOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]保存至erp失败", order.getOrderNo());
            try{
                ReturnT<String> result = submitOrderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]保存至erp失败", order.getOrderNo());
                }
            }catch (Exception e){
                Order order1 = orderService.selectById(order.getId());
                order1.setUpdateTime(new Date());
                orderService.updateById(order1);
            }
        }
    }
src/main/java/com/zy/asrs/task/kingdee/handler/PushDowmOrderSyncHandler.java
@@ -4,10 +4,15 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
@@ -19,7 +24,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
/**
@@ -38,6 +45,8 @@
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
@@ -60,11 +69,33 @@
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
        if (kingDeeUtilType.entryId>1){
            Order order1 = orderService.selectById(order.getId());
            order1.setUpdateTime(new Date());
            orderService.updateById(order1);
            return SUCCESS;
        }
        //条件拼接
        log.info("条件拼接");
        String entryIds = null;
        if (kingDeeUtilType.entryId==1){
            List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
            for (OrderDetl orderDetl:orderDetls){
                if (Cools.isEmpty(entryIds)){
                    entryIds = orderDetl.getBeBatch().toString();
                }else {
                    entryIds = entryIds+"," +orderDetl.getBeBatch();
                }
            }
            orderNoS = "";
        }
        if (Cools.isEmpty(entryIds)){
            entryIds = "";
        }
        JSONObject dataJsonObject = new JSONObject();
        dataJsonObject.put("Numbers",orderNoS);
        dataJsonObject.put("EntryIds","");
        dataJsonObject.put("EntryIds",entryIds);
        dataJsonObject.put("RuleId",kingDeeUtilType.ruleId);
        dataJsonObject.put("TargetFormId",kingDeeUtilType.correspondingFormId);
@@ -90,14 +121,27 @@
                    .setHttps(true)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
//            JSONObject data = JSON.parseObject(response);
            log.info("下推response:"+response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            //下推完成原订单4转6  6.上报完成
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
            String bool1=IsSuccess.toString();
            if (bool1.equals("true")){
                ObjectMapper objectMapper =  new ObjectMapper();
                JsonNode rootNode = objectMapper.readTree(response);
                boolean bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean();
                log.info("下推bool:"+bool);
                //下推完成原订单4转6  6.上报完成
                if(bool){
                    success = true;
                    order.setSettle(6L);
                    order.setUpdateTime(new Date());
                    orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
                }
            } else {
                success = false;
                order.setSettle(7L);
                order.setUpdateTime(new Date());
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            }
        } catch (Exception e) {
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
@@ -4,6 +4,8 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
@@ -19,6 +21,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.Set;
@@ -79,12 +82,20 @@
                    .doPost();
            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            String bool1=IsSuccess.toString();
            //审核完成原订单4转6  6.上报完成
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            if(bool1.equals("true")){
                ObjectMapper objectMapper =  new ObjectMapper();
                JsonNode rootNode = objectMapper.readTree(response);
                boolean bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean();
                log.info("审核bool:"+bool);
                //审核完成原订单4转6  6.上报完成
                if(bool){
                    success = true;
                    order.setSettle(6L);
                    order.setUpdateTime(new Date());
                    orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
                }
            }
        } catch (Exception e) {
            log.error("fail", e);
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java
@@ -4,10 +4,16 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
@@ -19,8 +25,8 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Set;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by Monkey D. Luffy on 2023.10.21
@@ -43,10 +49,16 @@
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Transactional
    public ReturnT<String> start(Order order) {
        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
        if (Cools.isEmpty(orderDetls) || orderDetls.size()==0){
            return SUCCESS;
        }
        //登录金蝶r
        ReturnT<String> start = loginAuthenticationHandler.start();
        DocType docType = docTypeService.selectById(order.getDocType());
@@ -54,12 +66,72 @@
            return SUCCESS;
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
        if (kingDeeUtilType.entryId!=2){
            return SUCCESS;
        }
        Date now = new Date();
        //条件拼接
        JSONObject jsonObjectFBillTypeID = new JSONObject();
        JSONObject jsonObjectFPickerId = new JSONObject();
        if (kingDeeUtilType.pakIn==1){
            jsonObjectFBillTypeID.put("FNUMBER","QTRKD01_SYS");
        }else {
            jsonObjectFBillTypeID.put("FNUMBER","QTCKD01_SYS");
            jsonObjectFPickerId.put("FStaffNumber","X0103_GLGW074_1");
        }
        JSONObject jsonObjectFStockOrgId = new JSONObject();
        jsonObjectFStockOrgId.put("FNUMBER","100");
        JSONObject jsonObjectFOwnerIdHead = new JSONObject();
        jsonObjectFOwnerIdHead.put("FNUMBER","100");
        JSONObject jsonObjectFDEPTID = new JSONObject();
        jsonObjectFDEPTID.put("FNUMBER","CX");
        List<JSONObject> jsonObjects = new ArrayList<>();
        for (OrderDetl orderDetl:orderDetls){
            JSONObject jsonObjectFMATERIALID = new JSONObject();
            jsonObjectFMATERIALID.put("FNUMBER",orderDetl.getMatnr());
            JSONObject jsonObjectFSTOCKID = new JSONObject();
            jsonObjectFSTOCKID.put("FNUMBER","CK001");
            JSONObject jsonObjectFLOT = new JSONObject();
            jsonObjectFLOT.put("FNUMBER",orderDetl.getBatch());
            // 使用LinkedHashMap来保持插入顺序
            Map<String, Object> orderedMap = new LinkedHashMap<>();
            // 按照期望的顺序添加键值对
            orderedMap.put("FMATERIALID", jsonObjectFMATERIALID);
            orderedMap.put("FSTOCKID", jsonObjectFSTOCKID);
            orderedMap.put("FLOT", jsonObjectFLOT);
            orderedMap.put("FQty", orderDetl.getQty());                    // 将"FQty"放到最后
            JSONObject jsonObjectEnd = new JSONObject(orderedMap);
            jsonObjects.add(jsonObjectEnd);
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("Numbers",order.getOrderNo());
        jsonObject.put("FBillTypeID",jsonObjectFBillTypeID);
        if (kingDeeUtilType.pakIn==0){
            jsonObject.put("FPickerId",jsonObjectFPickerId);
        }
        jsonObject.put("FDate",DateUtils.convert(now, DateUtils.yyyyMMdd_F));
        jsonObject.put("FStockOrgId",jsonObjectFStockOrgId);
        jsonObject.put("FOwnerTypeIdHead","BD_OwnerOrg");
        jsonObject.put("FOwnerIdHead",jsonObjectFOwnerIdHead);
        jsonObject.put("FDEPTID",jsonObjectFDEPTID);
        jsonObject.put("FEntity",jsonObjects);
        JSONObject jsonObjectModel = new JSONObject();
        jsonObjectModel.put("Model",jsonObject);
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("data", jsonObject);
        jsonObject1.put("data", jsonObjectModel);
        jsonObject1.put("FormId",kingDeeUtilType.correspondingFormId);
        String add = jsonObject1.toJSONString();
        //上报
@@ -74,15 +146,29 @@
                    .setUri(URL)
                    .setPath(outaddressSave)
                    .setJson(add)
                    .setHttps(true)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            String bool1=IsSuccess.toString();
            //保存完成原订单8转6
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
            if(bool1.equals("true")){
                ObjectMapper objectMapper =  new ObjectMapper();
                JsonNode rootNode = objectMapper.readTree(response);
                boolean bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean();
                log.info("审核bool:"+bool);
                //提交完成原订单4转6  6.上报完成
                if(bool){
                    success = true;
                    order.setSettle(6L);
                    order.setUpdateTime(new Date());
                    orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
                }
            }else {
                success = false;
                order.setSettle(7L);
                order.setUpdateTime(new Date());
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            }
        } catch (Exception e) {
src/main/java/com/zy/asrs/task/kingdee/handler/SubmitOrderSyncHandler.java
@@ -4,6 +4,8 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
@@ -19,6 +21,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.Set;
@@ -54,7 +57,9 @@
            return SUCCESS;
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
        if (kingDeeUtilType.entryId!=2){
            return SUCCESS;
        }
        //条件拼接
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("Numbers",order.getOrderNo());
@@ -76,14 +81,22 @@
                    .setJson(add)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
//            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            String bool1=IsSuccess.toString();
            //提交完成原订单8转6
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            if(bool1.equals("true")){
                ObjectMapper objectMapper =  new ObjectMapper();
                JsonNode rootNode = objectMapper.readTree(response);
                boolean bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean();
                log.info("审核bool:"+bool);
                //提交完成原订单4转6  6.上报完成
                if(bool){
                    success = true;
                    order.setSettle(6L);
                    order.setUpdateTime(new Date());
                    orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
                }
            }
        } catch (Exception e) {
            log.error("fail", e);
src/main/java/com/zy/common/model/DetlDto.java
@@ -23,6 +23,7 @@
    private int owner;
    private String ownerName;
    private int beBatch;
    private int payment;
@@ -36,6 +37,7 @@
        this.batch=detlDto2.getBatch();
        this.anfme=detlDto2.getAnfme();
        this.ownerName=detlDto2.getOwner();
        this.beBatch=detlDto2.getBeBatch();
        this.payment=0;
    }
src/main/java/com/zy/erp/kingdee/entity/param/SaceOrderOtherParam.java
New file
@@ -0,0 +1,18 @@
package com.zy.erp.kingdee.entity.param;
import lombok.Data;
@Data
public class SaceOrderOtherParam {
    //账号ID
    private String FMATERIALID;
    //账号
    private String FSTOCKID;
    //密码
    private String FLOT;
    //
    private Integer FQty;
}
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java
@@ -2,55 +2,57 @@
public enum KingDeeUtilType {
    SAL_DELIVERYNOTICE(1, "发货通知单-销售出库单","SAL_DELIVERYNOTICE","FQty","销售出库单","SAL_OUTSTOCK",0,"DeliveryNotice-Outstock"),
    SAL_DELIVERYNOTICE(1, "发货通知单-销售出库单","SAL_DELIVERYNOTICE","FQty","销售出库单","SAL_OUTSTOCK",0,"DeliveryNotice-Outstock",0),
    //米多青岛
    STK_OutStockApply30(2, "试用品发货通知单-其他出库单","","","其他出库单","STK_MisDelivery",0,""),
    STK_OutStockApply30(2, "试用品发货通知单-其他出库单","SAL_DELIVERYNOTICE","","其他出库单","STK_MisDelivery",0,"731ce15d-c58d-4c21-96f9-d121c0a7b255",0),
    /*
    * 退货通知单至销售退货单单据唯一标识:一级:SalReturnNotice-SalReturnstock  二级:a0ab8e5c-5224-4ba2-b31f-b061e64aa1a2
    * */
    SAL_RETURNNOTICE(3, "退货通知单-销售退货单","SAL_RETURNNOTICE","","销售退货单","SAL_RETURNSTOCK",0,"SalReturnNotice-SalReturnstock"),
    SAL_RETURNNOTICE(3, "退货通知单-销售退货单","SAL_RETURNNOTICE","","销售退货单","SAL_RETURNSTOCK",0,"SalReturnNotice-SalReturnstock",0),
    /*
    * 采购收料单至采购入库单唯一标识:一级:PUR_ReceiveBill-STK_InStock  二级:b60e30ca-634c-4f92-b874-db9837496705
    * */
    PUR_ReceiveBill(4, "收料通知单-采购入库单","PUR_ReceiveBill","","采购入库单","STK_InStock",1,"PUR_ReceiveBill-STK_InStock"),
    PUR_ReceiveBill(4, "收料通知单-采购入库单","PUR_ReceiveBill","","采购入库单","STK_InStock",1,"PUR_ReceiveBill-STK_InStock",0),
    /*
    * 退料申请单至采购退料单单据唯一标识:PUR_MRAPP-PUR_MRB
    * */
    PUR_MRAPP(5, "退料申请单-采购退料单","PUR_MRAPP","","采购退料单","PUR_MRB",1,"PUR_MRAPP-PUR_MRB"),
    PUR_MRAPP(5, "退料申请单-采购退料单","PUR_MRAPP","","采购退料单","PUR_MRB",1,"PUR_MRAPP-PUR_MRB",0),
    /*
    * 生产用料清单到生产领料单唯一标识:一级:PRD_PPBOM2PICKMTRL_NORMAL  二级:3539ff08-0c46-435d-a8cd-b6308b0b57b5
    * */
    PRD_PPBOM1(6, "生产用料清单-生产领料单","PRD_PPBOM","","生产领料单","PRD_PickMtrl",0,"PRD_PPBOM2PICKMTRL_NORMAL"),
    PRD_PPBOM1(6, "生产用料清单-生产领料单","PRD_PPBOM","","生产领料单","PRD_PickMtrl",0,"PRD_PPBOM2PICKMTRL_NORMAL",1),
    PRD_PPBOM2(7, "生产用料清单-生产补料单","PRD_PPBOM","","生产补料单","PRD_FeedMtrl",1,"PRD_PPBOM2FEEDMTRL"),
    PRD_PPBOM2(7, "生产用料清单-生产补料单","PRD_PPBOM","","生产补料单","PRD_FeedMtrl",1,"PRD_PPBOM2FEEDMTRL",1),
    PRD_PPBOM3(8, "生产用料清单-生产退料单","PRD_PPBOM","","生产退料单","PRD_ReturnMtrl",1,"PRD_PPBOM2RETURNMTRL"),
    PRD_PPBOM3(8, "生产用料清单-生产退料单","PRD_PPBOM","","生产退料单","PRD_ReturnMtrl",1,"PRD_PPBOM2RETURNMTRL",1),
    PRD_MO(9, "生产订单-生产入库单","PRD_MO","","生产入库单","PRD_INSTOCK",1,"PRD_MO2INSTOCK"),
    PRD_MO(9, "生产订单-生产入库单","PRD_MO","","生产入库单","PRD_INSTOCK",1,"PRD_MO2INSTOCK",0),
    PRD_MORPT(10, "生产汇报单-生产入库单","PRD_MORPT","","生产入库单","PRD_INSTOCK",1,"PRD_MORPT2INSTOCK"),
    PRD_MORPT(10, "生产汇报单-生产入库单","PRD_MORPT","","生产入库单","PRD_INSTOCK",1,"PRD_MORPT2INSTOCK",0),
    STK_TRANSFERAPPLY(11, "调拨申请单-直接调拨单","STK_TRANSFERAPPLY","","直接调拨单","STK_TransferDirect",0,"StkTransferApphy-StkTransferDirect"),
    STK_TRANSFERAPPLY1(11, "调拨申请单1-直接调拨单","STK_TRANSFERAPPLY","","直接调拨单","STK_TransferDirect",0,"StkTransferApphy-StkTransferDirect",1),
    STK_OutStockApply337(12, "研发领料出库申请单-研发领料出库单","","","研发领料出库单","",0,""),
    STK_MisDelivery13(13, "组装拆卸单1","STK_ASSEMBLY","","","",0,""),
    STK_MisDelivery14(14, "组装拆卸单2","STK_ASSEMBLY","","","",0,""),
    STK_OutStockApply337(12, "研发领料出库申请单-研发领料出库单","STK_OUTSTOCKAPPLY","","研发领料出库单","",0,"STK_OutstockApplyTosTK_MisDelivery",0),
    STK_ASSEMBLY1(13, "组装拆卸单1","STK_ASSEMBLY","","","",1,"",0),
    STK_ASSEMBLY2(14, "组装拆卸单2","STK_ASSEMBLY","","","",0,"",0),
    SAL_RETURNNOTICE1(15, "其它入库单","STK_MISCELLANEOUS","","其它入库单","STK_MISCELLANEOUS",1,"",2),
    SAL_DELIVERYNOTICE2(16, "其它出库单","STK_MisDelivery","","其他出库单","STK_MisDelivery",0,"",2),
    PRD_PPBOM(17, "生产用料清单-生产用料清单变更单","PRD_PPBOM","","生产领料单","PRD_PPBOMChange",1,"PRD_PPBOM2PPBOMCHANGE",10),
    STK_TRANSFERAPPLY2(18, "调拨申请单2-直接调拨单","STK_TRANSFERAPPLY","","直接调拨单","STK_TransferDirect",0,"StkTransferApphy-StkTransferDirect",1),
    STK_TRANSFERAPPLY3(19, "调拨申请单3-直接调拨单","STK_TRANSFERAPPLY","","直接调拨单","STK_TransferDirect",0,"StkTransferApphy-StkTransferDirect",1),
    ;
    public Integer id;
    public String desc;//类型名称
    public String formId;//单据类型唯一编码
    public Integer id;//唯一
    public String desc;//类型名称  保持唯一
    public String formId;//单据类型
    public String anfme;//单据数量字段名
    public String correspondingName;//目标单据数量字段
    public String correspondingFormId;//目标formId  非默认下推时启用  默认下推时启用ruleId
    public Integer pakIn; //出入库标志
    public String ruleId;//单据转换唯一标识 非默认下推时启用  默认下推时启用correspondingFormId
    public int entryId;//单据转换唯一标识 非默认下推时启用  默认下推时启用correspondingFormId
    KingDeeUtilType(Integer id, String desc,String formId,String anfme,String correspondingName,String correspondingFormId,int pakIn,String ruleId){
    KingDeeUtilType(Integer id, String desc,String formId,String anfme,String correspondingName,String correspondingFormId,int pakIn,String ruleId,int entryId){
        this.id = id;
        this.desc = desc;
        this.formId = formId;
@@ -59,6 +61,7 @@
        this.correspondingFormId = correspondingFormId;
        this.pakIn = pakIn;   //1入库  0出库
        this.ruleId = ruleId;
        this.entryId = entryId;
    }
    public static KingDeeUtilType get(Short id) {
src/main/resources/application.yml
@@ -20,9 +20,6 @@
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=mdqdasrs
    username: sa
    password: sa@123
#    url: jdbc:sqlserver://127.0.0.1:51433;databasename=mdqdasrs
#    username: sa
#    password: Zoneyung@zy56$
  mvc:
    static-path-pattern: /**
  redis:
@@ -68,8 +65,12 @@
    InboundOrderSwitch: false
    #登录接口开关
    LoginAuthenticationSwitch: true
    #上报单据开关  米多无用
    #审核单据开关 米多无用
    ReviewOrderSwitch: false
    #保存单据开关
    SaveOrderSwitch: true
    #提交单据开关 米多无用
    SubmitOrderSwitch: false
    #下推单据开关
    PushDowmOrderSwitch: true
  #  地址
@@ -81,11 +82,11 @@
    inaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc
    #单据下推地址
    pushDowmAudit: K3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Push.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 :
src/main/resources/mapper/OrderMapper.xml
@@ -65,7 +65,7 @@
        where 1=1
        and settle = 4
        and status = 1
        order by create_time asc
        order by update_time asc
    </select>
    <select id="selectInOrOutOrders" resultMap="BaseResultMap">
        SELECT * FROM man_order o left join man_doc_type d on o.doc_type = d.doc_id WHERE d.pakin = #{flag} and o.settle in (1,2)
src/main/webapp/static/js/order/order.js
@@ -197,6 +197,7 @@
                            {field: 'payment$', title: '货物特征', width: 160},
                            // {field: 'batch', title: '批号'},
                            {field: 'anfme', title: '数量'},
                            {field: 'batch', title: '批次'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
                            // {field: 'unit', title: '单位'},
@@ -271,6 +272,11 @@
                            layer.msg('数量不能小于已作业数量', {icon: 2});
                            return false;
                        }
                        if (nList[xi].batch === ""){
                            layer.msg('批次不能为空', {icon: 2});
                            return false;
                        }
                    }
                    for (let xi = 0; xi < nList.length; xi++) {
                        if (nList[xi].owner <= 0){
@@ -321,6 +327,7 @@
                        {field: 'specs', title: '规格'},
                        {field: 'weight', title: '重量', edit: true},
                        {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        {field: 'batch', title: '批次(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        {field: 'owner', title: '货主编号', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        {field: 'payment', title: '货物状态', style: 'color: blue;font-weight: bold', templet: '#payment'},
                        // {field: 'payment', title: '货物状态',align: 'center', templet: '#payment'},