#
lsh
2024-09-18 cc18b818b28445bf6e9da0363fde3703c21178f5
#
6个文件已修改
5个文件已添加
503 ■■■■ 已修改文件
zy-asrs-common/src/main/java/com/zy/asrs/common/model/MesPakinParam.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/model/MesPakoutParam.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/Order.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/OrderMapper.xml 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/OrderSyncScheduler.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/OrderSyncHandler.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkLogHandler.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/PostMesDataUtils.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/model/MesPakinParam.java
New file
@@ -0,0 +1,43 @@
package com.zy.asrs.common.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2022/4/21
 */
@Data
public class MesPakinParam {
    // 入库时间
    private String pakinTime;
    // 来源地 - 写死
    private String lgortFrom;
    // 目的地 - 写死
    private String lgortTo;
    private List<Detl> list = new ArrayList<>();
    @Data
    public static class Detl {
        // 物料条码
        private String barcode;
        // 数量
        private Double anfme;
        public Detl() {
        }
        public Detl(String barcode, Double anfme) {
            this.barcode = barcode;
            this.anfme = anfme;
        }
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/model/MesPakoutParam.java
New file
@@ -0,0 +1,71 @@
package com.zy.asrs.common.model;
import com.alibaba.fastjson.JSON;
import com.zy.asrs.framework.common.DateUtils;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2022/4/21
 */
@Data
public class MesPakoutParam {
    // true: 订单出; false: 手动出
    private boolean tag;
    // 单据编号
    private String orderNo;
    // 出库时间
    private String pakoutTime;
    // 来源地 - 写死
    private String lgortFrom;
    // 目的地 - 写死
    private String lgortTo;
    // 客户号
    private String kunnr;
    private List<Detl> list = new ArrayList<>();
    @Data
    public static class Detl {
        // 物料条码
        private String barcode;
        // 数量
        private Double anfme;
        public Detl() {
        }
        public Detl(String barcode, Double anfme) {
            this.barcode = barcode;
            this.anfme = anfme;
        }
    }
    public static void main(String[] args) {
        MesPakoutParam param = new MesPakoutParam();
        param.setTag(true);
        param.setOrderNo("8135998");
//        param.setPakoutTime(DateUtils.convert(new Date()));
        param.setLgortFrom("5006");
        param.setLgortTo("1111");
        Detl detl = new Detl();  param.getList().add(detl);
        detl.setBarcode("1100146-10000-23132132");
        detl.setAnfme(1.0D);
        System.out.println(JSON.toJSONString(param));
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/Order.java
@@ -39,6 +39,7 @@
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderMapper.java
@@ -6,12 +6,16 @@
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface OrderMapper extends BaseMapper<Order> {
    void updateOrder1(Long orderId,@Param("userId")Long userId);
    List<Order> selectComplete();
    int updateSettle(@Param("orderId") Long orderId, @Param("settle") Long settle, @Param("userId") Long userId, @Param("hostId") Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java
@@ -26,4 +26,7 @@
    List<OrderNameListDto> selectAllorderNo(Long hostId);
    List<String> selectAllOutOrderNo(String orderNo,Long hostId);
    List<Order> selectComplete();
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java
@@ -38,6 +38,11 @@
    private DocTypeService docTypeService;
    @Override
    public List<Order> selectComplete() {
        return this.baseMapper.selectComplete();
    }
    @Override
    public List<OrderDetl> selectWorkingDetls(Long orderId) {
        return orderDetlMapper.selectWorkingDetls(orderId);
    }
zy-asrs-common/src/main/resources/mapper/wms/OrderMapper.xml
@@ -2,6 +2,47 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.common.wms.mapper.OrderMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.common.wms.entity.Order">
        <id column="id" property="id" />
        <result column="uuid" property="uuid" />
        <result column="order_no" property="orderNo" />
        <result column="order_time" property="orderTime" />
        <result column="doc_type" property="docType" />
        <result column="item_id" property="itemId" />
        <result column="item_name" property="itemName" />
        <result column="allot_item_id" property="allotItemId" />
        <result column="def_number" property="defNumber" />
        <result column="number" property="number" />
        <result column="cstmr" property="cstmr" />
        <result column="cstmr_name" property="cstmrName" />
        <result column="tel" property="tel" />
        <result column="oper_memb" property="operMemb" />
        <result column="total_fee" property="totalFee" />
        <result column="discount" property="discount" />
        <result column="discount_fee" property="discountFee" />
        <result column="other_fee" property="otherFee" />
        <result column="act_fee" property="actFee" />
        <result column="pay_type" property="payType" />
        <result column="salesman" property="salesman" />
        <result column="account_day" property="accountDay" />
        <result column="post_fee_type" property="postFeeType" />
        <result column="post_fee" property="postFee" />
        <result column="pay_time" property="payTime" />
        <result column="send_time" property="sendTime" />
        <result column="ship_name" property="shipName" />
        <result column="ship_code" property="shipCode" />
        <result column="settle" property="settle" />
        <result column="status" property="status" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="memo" property="memo" />
        <result column="host_id" property="hostId" />
    </resultMap>
    <update id="updateOrder1">
        update wms_order
        set settle = 6
@@ -26,5 +67,14 @@
        and host_id = #{hostId}
    </update>
    <select id="selectComplete" resultMap="BaseResultMap">
        select top 5 *
        from man_order
        where 1=1
          and settle = 4
          and status = 1
        order by create_time asc
    </select>
</mapper>
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/OrderSyncScheduler.java
New file
@@ -0,0 +1,53 @@
package com.zy.asrs.wms.task;
import com.zy.asrs.common.wms.entity.Order;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.wms.task.handler.OrderSyncHandler;
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 com.zy.asrs.wms.task.core.ReturnT;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Slf4j
@Component
public class OrderSyncScheduler {
    @Autowired
    private OrderSyncHandler orderSyncHandler;
    @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/5 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
//        String erpReport = Parameter.get().getErpReport();
        if (true) {
            List<Order> orders = orderService.selectComplete();
            for (Order order : orders) {
                ReturnT<String> result = orderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
                }
            }
        }
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/OrderSyncHandler.java
New file
@@ -0,0 +1,95 @@
package com.zy.asrs.wms.task.handler;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.openapi.service.ApiLogService;
import com.zy.asrs.common.wms.entity.*;
import com.zy.asrs.common.wms.service.DocTypeService;
import com.zy.asrs.common.wms.service.OrderDetlService;
import com.zy.asrs.common.wms.service.OrderService;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.wms.task.AbstractHandler;
import com.zy.asrs.wms.task.core.ReturnT;
import com.zy.asrs.wms.utils.PostMesDataUtils;
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.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Slf4j
@Service
public class OrderSyncHandler extends AbstractHandler<String> {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    @Value("${erp.url}")
    private String ERP_URL;
    @Value("${erp.report}")
    private String ERP_REPORT;
    @Value("${erp.login}")
    private String ERP_LOGIN;
    @Transactional
    public ReturnT<String> start(Order order) {
        DocType docType = docTypeService.getById(order.getDocType());
        if (null == docType) {
            return new ReturnT<String>().setCode(500);
        }
        List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId,order.getId()));
        //上报念初ERP   【 上报三方平台 】
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String nowFormat = dateFormat.format(new Date());
        ArrayList<LinkedHashMap<String, Object>> mats = new ArrayList<>();
        String orderNo = order.getOrderNo();
        for (OrderDetl orderDetl:orderDetls){
            LinkedHashMap<String, Object> mat = new LinkedHashMap<>();
            mat.put("GoodsCode", orderDetl.getMatnr());
            mat.put("Num", orderDetl.getAnfme());
            if (!Cools.isEmpty(orderDetl.getBatch())) {
                mat.put("BatchNo", orderDetl.getBatch());
            }
            if (!Cools.isEmpty(orderDetl.getThreeCode())) {
                mat.put("DepotName", orderDetl.getThreeCode());
            }
            if (!Cools.isEmpty(orderDetl.getSupp())) {
                mat.put("FromDanCode", orderDetl.getSupp());
            }
            if (!Cools.isEmpty(orderDetl.getSuppCode())) {
                mat.put("FromNo", orderDetl.getSuppCode());
            }
            mats.add(mat);
        }
        LinkedHashMap<String, Object> param = new LinkedHashMap<>();
        param.put("Login", ERP_LOGIN);
        param.put("DanType", order.getDocType$()+"SH");
        param.put("Date", nowFormat);
        param.put("DanCode", orderNo);
        param.put("Data", mats);
        ReturnT<String> mesReturn = new PostMesDataUtils().getMesData("上报MES", ERP_URL, ERP_REPORT, param);
        return mesReturn;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkLogHandler.java
@@ -73,7 +73,7 @@
                while (iterator.hasNext()) {
                    WrkDetl wrkDetl = iterator.next();
                    if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                        wrkDetlsKeyOrder.add(wrkDetl);
                        orderService.checkComplete(wrkDetl.getOrderNo(),hostId);
                        iterator.remove();
                    }
                }
@@ -118,87 +118,6 @@
                }
            }
            if (!wrkDetlsKeyOrder.isEmpty()) {
                //上报念初ERP   【 上报三方平台 】
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
                String nowFormat = dateFormat.format(new Date());
                ArrayList<LinkedHashMap<String, Object>> mats = new ArrayList<>();
                String orderNo = "";
                for (WrkDetl wrkDetl : wrkDetlsKeyOrder) {
                    orderNo = wrkDetl.getOrderNo();
                    LinkedHashMap<String, Object> mat = new LinkedHashMap<>();
                    mat.put("GoodsCode", wrkDetl.getMatnr());
                    mat.put("Num", wrkDetl.getAnfme());
                    if (!Cools.isEmpty(wrkDetl.getBatch())) {
                        mat.put("BatchNo", wrkDetl.getBatch());
                    }
                    if (!Cools.isEmpty(wrkDetl.getThreeCode())) {
                        mat.put("DepotName", wrkDetl.getThreeCode());
                    }
                    if (!Cools.isEmpty(wrkDetl.getSupp())) {
                        mat.put("FromDanCode", wrkDetl.getSupp());
                    }
                    if (!Cools.isEmpty(wrkDetl.getSuppCode())) {
                        mat.put("FromNo", wrkDetl.getSuppCode());
                    }
                    mats.add(mat);
                }
                Order order = orderService.selectByNo(orderNo, hostId);
                if (order != null) {
                    LinkedHashMap<String, Object> param = new LinkedHashMap<>();
                    param.put("Login", ERP_LOGIN);
                    param.put("DanType", order.getDocType$()+"SH");
                    param.put("Date", nowFormat);
                    param.put("DanCode", orderNo);
                    param.put("Data", mats);
                    String response = "";
                    try {
                        response = new HttpHandler.Builder()
                                .setUri(ERP_URL)
                                .setPath(ERP_REPORT + Utils.ncErpDataEncode(param))
                                .build()
                                .doGet();
                        JSONObject jsonObject = JSON.parseObject(response);
                        JSONArray result = jsonObject.getJSONArray("result");
                        Object object = result.get(0);
                        JSONObject data = JSON.parseObject(object.toString());
                        if (data.getBoolean("State")) {
                            //上报成功
                        } else {
                            //上报失败
                            exceptionHandle("上报ERP失败[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        //异常上报失败
                        exceptionHandle("上报ERP异常失败[workNo={0}]失败", wrkMast.getWrkNo());
                    } finally {
                        //记录上报数据
                        OperateLog operateLog = new OperateLog();
                        operateLog.setAction("上报ERP," + ERP_URL + ERP_REPORT);
                        operateLog.setRequest(Utils.ncErpDataEncode(param));
                        operateLog.setResponse(response);
                        operateLog.setCreateTime(new Date());
                        operateLog.setSystem("WMS");
                        operateLog.setUserId(9527L);
                        operateLog.setIp("127.0.0.1");
                        operateLogService.save(operateLog);
                        //记录上报数据
                        OperateLog operateLog1 = new OperateLog();
                        operateLog1.setAction("上报ERP," + ERP_URL + ERP_REPORT);
                        operateLog1.setRequest(param.toString());
                        operateLog1.setResponse(response);
                        operateLog1.setCreateTime(new Date());
                        operateLog1.setSystem("WMS");
                        operateLog1.setUserId(9527L);
                        operateLog1.setIp("127.0.0.1");
                        operateLogService.save(operateLog1);
                    }
                }
            }
            // 保存工作主档历史档
            if (!wrkMastLogService.saveToHistory(wrkMast.getId())) {
                exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo());
@@ -209,16 +128,16 @@
            }
            // 保存工作明细档历史档
            if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) {
//                exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo());
                exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 删除工作明细档
            if (!wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId))) {
//                exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo());
                exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 修改订单状态 作业中 ===>> 已完成
            for (WrkDetl wrkDetl : wrkDetlsKeyOrder) {
                orderService.checkComplete(wrkDetl.getOrderNo(), hostId);
            }
//            // 修改订单状态 作业中 ===>> 已完成
//            for (WrkDetl wrkDetl : wrkDetlsKeyOrder) {
//                orderService.checkComplete(wrkDetl.getOrderNo(), hostId);
//            }
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/PostMesDataUtils.java
New file
@@ -0,0 +1,83 @@
package com.zy.asrs.wms.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.common.sys.entity.OperateLog;
import com.zy.asrs.common.utils.HttpHandler;
import com.zy.asrs.common.utils.Utils;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.common.sys.service.OperateLogService;
import com.zy.asrs.wms.task.AbstractHandler;
import com.zy.asrs.wms.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.LinkedHashMap;
@Slf4j
public class PostMesDataUtils extends AbstractHandler<String> {
    public ReturnT<String> getMesData(String name,String URL,String mesPath, LinkedHashMap<String, Object> combParam){
        if(combParam != null){
            String response = "";
            boolean success = false;
            try {
                response = new HttpHandler.Builder()
                        .setUri(URL)
                        .setPath(mesPath + Utils.ncErpDataEncode(combParam))
                        .build()
                        .doGet();
                System.out.println("response:"+response);
                JSONObject jsonObject = JSON.parseObject(response);
                JSONArray result = jsonObject.getJSONArray("result");
                Object object = result.get(0);
                JSONObject data = JSON.parseObject(object.toString());
                if (data.getBoolean("State")) {
                    //上报成功
                    success = true;
                } else {
                    //上报失败
                    log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
                    throw new CoolException("上报"+name);
                }
                if (jsonObject.getInteger("code").equals(200) || jsonObject.getInteger("Code").equals(200)) {
                } else {
                }
            } catch (Exception e) {
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
//                      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    OperateLogService operateLogService = SpringUtils.getBean(OperateLogService.class);
                    //记录上报数据
                    OperateLog operateLog = new OperateLog();
                    operateLog.setAction("上报ERP," + URL + mesPath);
                    operateLog.setRequest(Utils.ncErpDataEncode(combParam));
                    operateLog.setResponse(response);
                    operateLog.setCreateTime(new Date());
                    operateLog.setSystem("WMS");
                    operateLog.setUserId(9527L);
                    operateLog.setIp("127.0.0.1");
                    operateLogService.save(operateLog);
                    //记录上报数据
                    OperateLog operateLog1 = new OperateLog();
                    operateLog1.setAction("上报ERP," + URL + mesPath);
                    operateLog1.setRequest(combParam.toString());
                    operateLog1.setResponse(response);
                    operateLog1.setCreateTime(new Date());
                    operateLog1.setSystem("WMS");
                    operateLog1.setUserId(9527L);
                    operateLog1.setIp("127.0.0.1");
                    operateLogService.save(operateLog1);
                } catch (Exception e) {
                    log.error("", e); }
            }
        }
        return SUCCESS;
    }
}