自动化立体仓库 - WMS系统
skyouc
1 天以前 44bc5cf48fa23a1bf5fcefedce1b4686033b245a
添加损溢单上报接口
11个文件已修改
228 ■■■■ 已修改文件
src/main/java/com/zy/api/controller/KopenApiController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/OrderParams.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/KopenApiService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/CheckOrderDetl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/KopenApiController.java
@@ -172,14 +172,15 @@
     */
    @ApiOperation("零件损溢单下发")
    @PostMapping("/sendBSBYDetails")
    public XSR sendStockAdjust(@RequestBody StockAdjustParams params) {
        if (Objects.isNull(params)) {
    public XSR sendStockAdjust(@RequestBody List<StockAdjustParams> params) {
        if (Objects.isNull(params) || params.isEmpty()) {
            return XSR.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            return XSR.error("上报订单列表不能为空!!");
        }
        return kopenApiService.sendStockAdjust(params, 1L);
    }
}
src/main/java/com/zy/api/entity/OrderParams.java
@@ -1,7 +1,6 @@
package com.zy.api.entity;
import java.io.Serializable;
import java.util.List;
import org.springframework.format.annotation.DateTimeFormat;
src/main/java/com/zy/api/service/KopenApiService.java
@@ -3,7 +3,6 @@
import java.util.List;
import com.zy.api.controller.params.PageRequestParams;
import com.zy.api.entity.OrderItemsParam;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockAdjustParams;
@@ -79,5 +78,5 @@
     * @param params
     * @return com.core.common.R
     */
    XSR sendStockAdjust(StockAdjustParams params, Long userId);
    XSR sendStockAdjust(List<StockAdjustParams> params, Long userId);
}
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -472,10 +472,15 @@
     */
    @Override
    public XSR getStockInfo(PageRequestParams params) {
        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()),
                new EntityWrapper<LocDetl>()
                        .eq(!Objects.isNull(params.getPro_komcode()), "matnr", params.getPro_komcode())
                        .eq(Objects.isNull(params.getPro_id()), "supp_code", params.getPro_id()));
        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
        if (!Objects.isNull(params.getPro_id())) {
            wrapper.eq("supp_code", params.getPro_id());
        }
        if (!Objects.isNull(params.getPro_komcode())) {
            wrapper.eq("matnr", params.getPro_komcode());
        }
        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()),  wrapper);
        return XSR.ok(locDetls.getRecords());
    }
@@ -490,25 +495,13 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public XSR sendStockAdjust(StockAdjustParams params, Long userId) {
    public XSR sendStockAdjust(List<StockAdjustParams> params, Long userId) {
        if (Objects.isNull(params)) {
            return XSR.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            return XSR.error("订单明细不能为空!!");
        }
        // 校验参数
        if (Objects.isNull(params.getBsby_no())) {
            return XSR.error("损溢单编号不能为空!!");
        }
        CheckOrder checkOrder = checkOrderService
                .selectOne(new EntityWrapper<CheckOrder>().eq("order_no", params.getBsby_no()));
        if (!Objects.isNull(checkOrder)) {
            return XSR.error("损溢单已存在!!");
        }
        gentCheckOrders(params, userId);
        params.forEach(param -> {
            gentCheckOrders(param, userId);
        });
        return XSR.ok("零件损溢单下发成功!!");
    }
@@ -516,18 +509,32 @@
    /** 生成新的零件损溢单 
     * @param userId */
    @Transactional(rollbackFor = Exception.class)   
    public void gentCheckOrders(StockAdjustParams checkOrder, Long userId) {
    public void gentCheckOrders(StockAdjustParams params, Long userId) {
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            throw new CoolException("订单明细不能为空!!");
        }
        // 校验参数
        if (Objects.isNull(params.getBsby_no())) {
            throw new CoolException("损溢单编号不能为空!!");
        }
        CheckOrder checkOrder = checkOrderService
                .selectOne(new EntityWrapper<CheckOrder>().eq("order_no", params.getBsby_no()));
        if (!Objects.isNull(checkOrder)) {
            throw new CoolException("损溢单已存在!!");
        }
        CheckOrder order = new CheckOrder();
        order.setOrderNo(checkOrder.getBsby_no());
        order.setCstmrName(checkOrder.getCompany_id());
        order.setDefNumber(checkOrder.getKopen_id());
        order.setOrderNo(params.getBsby_no());
        order.setCstmrName(params.getCompany_id());
        order.setDefNumber(params.getKopen_id());
        order.setDocType(4L);
        order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        order.setSettle(Long.valueOf(CommonEnum.COMMON_ENUM_Y.type + ""));
        order.setStatus(CommonEnum.COMMON_ENUM_Y.type);
        order.setOrderTime(checkOrder.getUpdate_time());
        order.setMemo(checkOrder.getResason());
        order.setShipName(checkOrder.getReason_name());
        order.setOrderTime(params.getUpdate_time());
        order.setMemo(params.getResason());
        order.setShipName(params.getReason_name());
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
@@ -535,11 +542,11 @@
            throw new CoolException("损溢单新增失败!!");
        }
        if (Objects.isNull(checkOrder.getDetails()) || checkOrder.getDetails().isEmpty()) {
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            throw new CoolException("订单明细不能为空!!");
        }
        checkOrder.getDetails().forEach(item -> {
        params.getDetails().forEach(item -> {
            CheckOrderDetl checkOrderDetl = new CheckOrderDetl();
            //通过托盘, 物料编码, 供应商编码查询库存明细
            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
src/main/java/com/zy/asrs/entity/CheckOrderDetl.java
@@ -5,9 +5,7 @@
import com.core.common.SpringUtils;
import com.zy.asrs.enums.CheckStatusEnum;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.entity.Order;
import com.baomidou.mybatisplus.annotations.TableField;
import com.core.common.SpringUtils;
import com.zy.common.utils.Synchro;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
@@ -16,15 +14,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.core.common.SpringUtils;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -1,6 +1,7 @@
package com.zy.asrs.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.CheckOrder;
import com.zy.asrs.entity.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -25,4 +26,9 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    /**
     * 查询损溢单完结的订单
     * @return
     */
    List<CheckOrder> selectCompleteCheck();
}
src/main/java/com/zy/asrs/service/OrderService.java
@@ -1,10 +1,7 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.*;
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import java.util.List;
@@ -35,5 +32,11 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    /**
     * 查询损溢单完结的订单
     * @return
     */
    List<CheckOrder> selectCompleteCheck();
}
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -209,4 +209,13 @@
        return this.baseMapper.selectOrderMoveStatusInitial();
    }
    /**
     * 查询损溢单完结的订单
     * @return
     */
    @Override
    public List<CheckOrder> selectCompleteCheck() {
        return this.baseMapper.selectCompleteCheck();
    }
}
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -1,6 +1,7 @@
package com.zy.asrs.task;
import com.core.common.Cools;
import com.zy.asrs.entity.CheckOrder;
import com.zy.asrs.entity.Order;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.service.ApiLogService;
@@ -124,4 +125,37 @@
            }
        }
    }
    /**损溢单完结上报 */
    @Scheduled(cron = "0/30 * * * * ?")
    @Async("checkOrderThreadPool")
    public void completeCheckOrderReport() {
        if (!ErpReportOld){
            return;
        }
        String erpReport = Parameter.get().getErpReport();
        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
            List<CheckOrder> orders = orderService.selectCompleteCheck();
            for (CheckOrder order : orders) {
                try {
                    ReturnT<String> result = orderSyncHandler.startCheckOrderReport(order);
                    if (!result.isSuccess()) {
                        log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
                    }
                } catch (Exception e) {
                    log.error(e.getMessage());
                    log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
                }
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
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;
@@ -10,12 +11,14 @@
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.ReportOrderParams;
import com.zy.api.entity.StockAdjustParams;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.dto.XSR;
import com.zy.api.service.KopenApiService;
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.CheckOrderDetlServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -44,6 +47,8 @@
@Service
public class OrderSyncHandler extends AbstractHandler<String> {
    private final CheckOrderDetlServiceImpl checkOrderDetlService;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
@@ -62,6 +67,10 @@
    private KopenApiService kopenApiService;
    @Autowired
    private MatService matService;
    OrderSyncHandler(CheckOrderDetlServiceImpl checkOrderDetlService) {
        this.checkOrderDetlService = checkOrderDetlService;
    }
    @Transactional
    public ReturnT<String> startOrderIssuedOnceMore(Order order) {
@@ -389,7 +398,8 @@
                        throw new CoolException("服务器内部错误,请联系管理员");
                    }
                } else {
                    log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.OUT_DISPATCH_RESULT,
                    log.error("请求接口失败!!!url:{};request:{};response:{}",
                            MesConstant.URL + MesConstant.OUT_DISPATCH_RESULT,
                            JSON.toJSONString(orderParam), JSON.toJSONString(response));
                    throw new CoolException("上报KOPEN系统失败");
                }
@@ -424,7 +434,6 @@
                    .setCus_id(order.getCstmrName())
                    .setCus_address(order.getTel());
            List<OrderItemsParam> reportOrderParams = new ArrayList<>();
            orderDetls.forEach(detl -> {
                Mat material = matService.selectByMatnr(detl.getMatnr());
@@ -447,11 +456,10 @@
            List<OutOrderParams> pubOrderParamsList = new ArrayList<>();
            pubOrderParamsList.add(pubOrderParams);
            //设置派工单明细
            // 设置派工单明细
            stockUpOrderParams.setDetails(pubOrderParamsList);
            stockUpOrderParams.setUpdate_time(order.getUpdateBy$());
            XSR response = null;
            boolean success = false;
            try {
@@ -470,7 +478,8 @@
                        throw new CoolException("服务器内部错误,请联系管理员");
                    }
                } else {
                    log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.OUT_DETAILS_RESULT,
                    log.error("请求接口失败!!!url:{};request:{};response:{}",
                            MesConstant.URL + MesConstant.OUT_DETAILS_RESULT,
                            JSON.toJSONString(stockUpOrderParams), JSON.toJSONString(response));
                    throw new CoolException("上报KOPEN系统失败");
                }
@@ -497,4 +506,51 @@
        return SUCCESS;
    }
    /**
     * 损溢单完结上报
     *
     * @param order
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> startCheckOrderReport(CheckOrder order) {
        List<StockAdjustParams> adjustParams = new ArrayList<>();
        StockAdjustParams adjustParam = new StockAdjustParams();
        adjustParam.setCompany_id(order.getCstmrName())
                .setWms_id(order.getId() + "")
                .setType(0 + "")
                .setCompany_id(order.getCstmrName());
        adjustParam.setBsby_no(order.getNumber())
                .setResason("")
                .setReason_name("");
        List<CheckOrderDetl> detls = checkOrderDetlService
                .selectList(new EntityWrapper<CheckOrderDetl>().eq("order_id", order.getId()));
        if (Objects.isNull(detls) || detls.isEmpty()) {
            throw new CoolException("损溢单详情不存在");
        }
        List<OrderItemsParam> items = new ArrayList<>();
        detls.forEach(detl -> {
            Mat material = matService.selectByMatnr(detl.getMatnr());
            if (Objects.isNull(material)) {
                throw new CoolException("物料不存在");
            }
            OrderItemsParam itemParam = new OrderItemsParam();
            itemParam.setLocation_no(detl.getZpallet())
                    .setPro_komcode(material.getMatnr())
                    .setPro_id(detl.getSuppCode())
                    .setBsby_qty(detl.getDiffQty().intValue());
            items.add(itemParam);
        });
        adjustParam.setDetails(items);
        adjustParams.add(adjustParam);
        return SUCCESS;
        // TODO Auto-generated method stub
    }
}
src/main/resources/mapper/OrderMapper.xml
@@ -118,5 +118,15 @@
        and move_status = 1
        order by update_time
    </select>
    <select id="selectCompleteCheck" resultType="com.zy.asrs.entity.Order">
        SELECT TOP
            20 *
        FROM
            man_check_order
        WHERE
            settle = 4
          AND status = 1
          AND doc_type = 4
    </select>
</mapper>