自动化立体仓库 - WMS系统
#
LSH
2023-12-27 a374f2b69941b4b391b2735e6afc9ba943efc6b1
#
1个文件已添加
7个文件已修改
178 ■■■■ 已修改文件
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/PushDowmOrderSyncHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/entity/param/SaceOrderOtherParam.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java
@@ -11,6 +11,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
@@ -27,18 +28,23 @@
    @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(!SaveOrderSwitch){
            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 = 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
@@ -30,7 +30,7 @@
    @Value("${erp.switch.SubmitOrderSwitch}")
    private boolean SubmitOrderSwitch;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!SubmitOrderSwitch){
src/main/java/com/zy/asrs/task/kingdee/handler/PushDowmOrderSyncHandler.java
@@ -138,6 +138,11 @@
                    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) {
            log.info("下推error:"+response);
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/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
@@ -36,9 +36,9 @@
    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, "其他入库单","SAL_RETURNNOTICE","","其他入库单","STK_MISCELLANEOUS",1,"",2),
    SAL_DELIVERYNOTICE2(16, "其他出库单","SAL_DELIVERYNOTICE","","其他出库单","SAL_DELIVERYNOTICE",0,"",2),
    PRD_PPBOM(17, "生产用料清单-生产用料清单变更单","PRD_PPBOM","","生产领料单","PRD_PPBOMChange",1,"PRD_PPBOM2PPBOMCHANGE",2),
    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),
    ;
src/main/resources/application.yml
@@ -17,12 +17,12 @@
#    url: jdbc:sqlserver://10.10.10.100:1433;databasename=mdqdasrs
#    username: sa
#    password: Dtzhcy101+
    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
#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=mdqdasrs
#    username: sa
#    password: Zoneyung@zy56$
#    password: sa@123
    url: jdbc:sqlserver://47.97.1.152:51433;databasename=mdqdasrs
    username: sa
    password: Zoneyung@zy56$
  mvc:
    static-path-pattern: /**
  redis:
@@ -68,8 +68,12 @@
    InboundOrderSwitch: false
    #登录接口开关
    LoginAuthenticationSwitch: true
    #上报单据开关  米多无用
    #审核单据开关 米多无用
    ReviewOrderSwitch: false
    #保存单据开关
    SaveOrderSwitch: true
    #提交单据开关 米多无用
    SubmitOrderSwitch: false
    #下推单据开关
    PushDowmOrderSwitch: true
  #  地址
@@ -81,11 +85,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/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'},