自动化立体仓库 - WMS系统
野心家
2023-08-04 37a8b4bd1b8a5f09ad9e258733d4d12d6b19c6fa
erp轮询,登录,查询创建物料,查询创建订单,审核
6个文件已修改
2个文件已添加
2个文件已删除
373 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MatController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/OutboundOrderScheduler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/OutboundOrderHandler.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java
@@ -135,6 +135,24 @@
        return R.ok();
    }
    @RequestMapping(value = "/mat/KingDeeadd/auth")
    @ManagerAuth
    public R KingDeeadd(Mat mat) {
        if (null != matService.selectByMatnr(mat.getMatnr())) {
            return R.error("编号已存在");
        }
        Date now = new Date();
        mat.setCreateBy(getUserId());
        mat.setCreateTime(now);
        mat.setUpdateBy(getUserId());
        mat.setUpdateTime(now);
        mat.setStatus(1);
        if (!matService.insert(mat)) {
            throw new CoolException("添加失败,请联系管理员");
        }
        return R.ok();
    }
    @RequestMapping(value = "/mat/update/auth")
    @ManagerAuth
    public R update(Mat mat){
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -204,4 +204,7 @@
        System.out.println(JSON.toJSONString(param1));
    }
    /*********************************同步物料档案和订单****************************************************/
}
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -14,7 +14,7 @@
    /**
     * 将已完成order和orderDetl移动到log表
     */
    @Scheduled(cron = "0/30 * * * * ?")
    //@Scheduled(cron = "0/30 * * * * ?")
    public void execute(){
        orderMoveHistoryHandler.start();
    }
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
@@ -13,7 +13,7 @@
    @Autowired
    private InboundOrderHandler inboundOrderHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0 * * * * ?")
    void login(){
        Boolean fig=false;
        if(fig){
src/main/java/com/zy/asrs/task/kingdee/OutboundOrderScheduler.java
File was deleted
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
New file
@@ -0,0 +1,55 @@
package com.zy.asrs.task.kingdee;
import com.core.common.Cools;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.OrderSyncHandler;
import com.zy.asrs.task.kingdee.handler.ReviewOrderSyncHandler;
import com.zy.common.entity.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Slf4j
@Component
public class ReviewOrderSyncScheduler {
    @Autowired
    private ReviewOrderSyncHandler reviewOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Autowired
    private ApiLogService apiLogService;
//    @Scheduled(cron = "0 0 1 * * ? ")
    public void clearApiLog(){
        try {
            apiLogService.clearWeekBefore();
        } catch (Exception e) {
            log.error("第三方接口日志自动清除失败(范围:一周之前", e);
        }
    }
    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
            List<Order> orders = orderService.selectComplete();
            for (Order order : orders) {
                ReturnT<String> result = reviewOrderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
                }
            }
    }
}
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -71,7 +71,7 @@
    @Transactional
    public synchronized ReturnT<String> start() {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //登录金蝶r
        //登录金蝶
        ReturnT<String> start = loginAuthenticationHandler.start();
        for(int i=0;i<14;i++) {
            InFormIdParam inFormIdParam = new InFormIdParam();
@@ -89,7 +89,7 @@
                //生产领料
                case 3 : inFormIdParam.setFormId("PRD_PickMtrl");docName=22;anfme ="FActualQty"; break;
                //生产退料
                case 4 : inFormIdParam.setFormId("BD_MATERIAL");docName=24;anfme ="FQty"; break;
                case 4 : inFormIdParam.setFormId("PRD_ReturnMtrl");docName=24;anfme ="FQty"; break;
                //生产补料
                case 5 : inFormIdParam.setFormId("PRD_FeedMtrl");docName=25;anfme ="FActualQty"; break;
                //直接调拨单
@@ -109,7 +109,7 @@
                //销售退货
                case 13 : inFormIdParam.setFormId("SAL_RETURNSTOCK");docName=33;anfme ="FRealQty"; break;
            }
            inFormIdParam.setLimit(10);
            inFormIdParam.setLimit(100);
            inFormIdParam.setStartRow("0");
            Date time=new Date();
            String FDocumentStatus=null;
@@ -124,9 +124,9 @@
                Tag tag = tagService.selectById(20);
                //最新时间
                time=tag.getCreateTime();
                //物料状态
                //物料状态 FUseOrgId .FNumber
                FDocumentStatus="C";
                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(time)+"' and FDocumentStatus='"+FDocumentStatus+"'");
                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(time)+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='201'");
                jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus");
                // FName : 物料名称 ;
                // FNumber :物料编号;
@@ -137,7 +137,7 @@
                //获取最新时间
                DocType docType= docTypeService.selectById(docName);
                //单据状态
                FDocumentStatus="C";
                FDocumentStatus="B";
                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"' and FDocumentStatus='"+FDocumentStatus+"'");
                jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+anfme+",FDocumentStatus");
                // FBillNo :单据编号;
@@ -152,8 +152,6 @@
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("data", jsonObject);
            String add = jsonObject1.toJSONString();
            System.out.println(add);
            //上报
            String response = "";
            boolean success = false;
@@ -169,6 +167,9 @@
                        .build()
                        .doPost();
                JSONArray data = JSON.parseArray(response);
                if(data.size()>0){
                    success = true;
                }
                if(i==0){
                    for (int j = 0; j < data.size(); j++) {
                        JSONArray jsonArray = data.getJSONArray(j);
@@ -181,8 +182,9 @@
                            mat.setMatnr(jsonArray.get(1).toString());
                            mat.setMaktx(jsonArray.get(0).toString());
                            mat.setSpecs(jsonArray.get(3).toString());//规格
                            mat.setTagId(20L);
                            //对美国时间进行转换
                            DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                            DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
                            DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
                            LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(2).toString(), formatter);
                            String format = dateFormat.format(dateTime);
@@ -192,18 +194,18 @@
                            mat.setStatus(1);
                            //最新抓取商品时间
                            tag.setCreateTime(date);
//                        tagService.update(tag,new EntityWrapper<Tag>().eq("id",20));
//                        if (!matService.insert(mat)) {
//                            throw new CoolException("服务器内部错误,请联系管理员");
//                        } else {
//                            log.info("同步新物料[商品编号:{}]", mat.getMatnr());
//                        }
                        tagService.update(tag,new EntityWrapper<Tag>().eq("id",20));
                        if (!matService.insert(mat)) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        } else {
                            log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                        }
                        }
                    }
                }else {
                    for(int j=0;j<data.size();j++){
                        JSONArray jsonArray = data.getJSONArray(j);
                        Order order = orderService.selectByNo(jsonArray.get(0).toString());
                         Order order = orderService.selectByNo(jsonArray.get(0).toString());
                        if (Cools.isEmpty(order)) {
                        DocType docType = docTypeService.selectById(docName);
                        Date now = new Date();
@@ -245,23 +247,28 @@
                                null    // 备注
                        );
                        //对美国时间进行转换
                        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
                        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
                        LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(1).toString(), formatter);
                        String format = dateFormat.format(dateTime);
                        Date date = sdf.parse(format);
                        //最新抓取时间
                        docType.setCreateTime(date);
//                        docTypeService.update(docType,new EntityWrapper<DocType>().eq("doc_id",docName));
//                        if (!orderService.insert(order)) {
//                            throw new CoolException("生成单据主档失败,请联系管理员");
//                        }
                        docTypeService.update(docType,new EntityWrapper<DocType>().eq("doc_id",docName));
                        if (!orderService.insert(order)) {
                            throw new CoolException("生成单据主档失败,请联系管理员");
                        }
                        }
                        //物料编码
                        Mat mat = matService.selectByMatnr(jsonArray.get(2).toString());
                        if (Cools.isEmpty(mat)) {
                            throw new CoolException(jsonArray.get(2).toString() + "编号商品检索失败,请先添加商品");
                        }
                        OrderDetl orderDetl1=orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no",jsonArray.get(0).toString()).eq("matnr",jsonArray.get(2).toString()));
                        if(!Cools.isEmpty(orderDetl1)){
                            continue;
                        }
                        DocType docType = docTypeService.selectById(docName);
                        OrderDetl orderDetl = new OrderDetl();
                        orderDetl.sync(mat);
                        orderDetl.setBatch(null);
@@ -274,9 +281,16 @@
                        orderDetl.setUpdateTime(new Date());
                        orderDetl.setStatus(1);
                        orderDetl.setQty(0.0D);
//                        if (!orderDetlService.insert(orderDetl)) {
//                            throw new CoolException("生成单据明细失败,请联系管理员");
//                        }
                        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
                        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
                        LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(1).toString(), formatter);
                        String format = dateFormat.format(dateTime);
                        Date date = sdf.parse(format);
                        //最新抓取时间
                        docType.setCreateTime(date);
                        if (!orderDetlService.insert(orderDetl)) {
                            throw new CoolException("生成单据明细失败,请联系管理员");
                        }
                    }
                }
            } catch (Exception e) {
@@ -287,8 +301,8 @@
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "登录金蝶",
                            MesConstant.URL + MesConstant.PAKIN_URL,
                            "轮询数据",
                            URL + inaddress,
                            null,
                            "127.0.0.1",
                            add,
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java
@@ -91,7 +91,7 @@
                // 保存接口日志
                apiLogService.save(
                        "登录金蝶",
                        MesConstant.URL + MesConstant.PAKIN_URL,
                        URL + loginaddress,
                        null,
                        "127.0.0.1",
                        JSON.toJSONString(loginParam),
src/main/java/com/zy/asrs/task/kingdee/handler/OutboundOrderHandler.java
File was deleted
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
New file
@@ -0,0 +1,204 @@
package com.zy.asrs.task.kingdee.handler;
import com.alibaba.fastjson.JSON;
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.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.Tag;
import com.zy.asrs.entity.param.InFormIdParam;
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;
import com.zy.common.constant.MesConstant;
import com.zy.common.model.MesPakinParam;
import com.zy.common.model.MesPakoutParam;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
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;
/**
 * Created by vincent on 2020/7/7
 */
@Slf4j
@Service
public class ReviewOrderSyncHandler extends AbstractHandler<String> {
    @Value("${erp.address.URL}")
    //端口
    private String URL;
    @Value("${erp.address.outaddress}")
    //审核地址
    private String outaddress;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Transactional
    public ReturnT<String> start(Order order) {
        //登录金蝶r
        ReturnT<String> start = loginAuthenticationHandler.start();
        DocType docType = docTypeService.selectById(order.getDocType());
        if (null == docType) {
            return SUCCESS;
        }
        InFormIdParam inFormIdParam = new InFormIdParam();
        int docId = Long.valueOf(docType.getDocId()).intValue();
        switch (docId) {
            //采购入库
            case 13:
                inFormIdParam.setFormId("STK_InStock");
                break;
            //采购退料
            case 21:
                inFormIdParam.setFormId("PUR_MRB");
                break;
            //生产领料
            case 22:
                inFormIdParam.setFormId("PRD_PickMtrl");
                break;
            //生产退料
            case 24:
                inFormIdParam.setFormId("PRD_ReturnMtrl");
                break;
            //生产补料
            case 25:
                inFormIdParam.setFormId("PRD_FeedMtrl");
                break;
            //直接调拨单
            case 26:
                inFormIdParam.setFormId("STK_TransferDirect");
                break;
            //盘盈单
            case 28:
                inFormIdParam.setFormId("STK_StockCountGain");
                break;
            //盘亏单
            case 29:
                inFormIdParam.setFormId("STK_StockCountLoss");
                break;
            //其他出库
            case 30:
                inFormIdParam.setFormId("STK_MisDelivery");
                break;
            //简单生产领料
            case 31:
                inFormIdParam.setFormId("SP_PickMtrl");
                break;
            //简单生产退料
            case 32:
                inFormIdParam.setFormId("SP_ReturnMtrl");
                break;
            //销售出库
            case 14:
                inFormIdParam.setFormId("SAL_OUTSTOCK");
                break;
            //销售退货
            case 33:
                inFormIdParam.setFormId("SAL_RETURNSTOCK");
                break;
        }
        //条件拼接
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("Numbers",order.getOrderNo());
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("data", jsonObject);
        jsonObject1.put("FormId",inFormIdParam.getFormId());
        String add = jsonObject1.toJSONString();
        //上报
        String response = "";
        boolean success = false;
        try {
            //获取Cookie值
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Cookie", start.getContent());
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(URL)
                    .setPath(outaddress)
                    .setJson(add)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            //上报完成订单4转6
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            }
        } catch (Exception e) {
            log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "审核",
                        URL+ outaddress,
                        null,
                        "127.0.0.1",
                        add,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
        return SUCCESS;
    }
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
            Object v = json.get(k);
            if (k.equals(key)) {
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                    return result;
                }
            }
        }
        return null;
    }
}