自动化立体仓库 - WMS系统
lty
14 小时以前 df11218af96a29e69221078ad981737068acc435
#自动下发分拣线单据, 自动分配余料至同一站口,同一标记
16个文件已修改
1个文件已添加
250 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/OrderDetl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OrderToLine.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasArmRulesMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasArmRulesService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasArmRulesServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderToLineHandler.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasArmRulesMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -353,9 +353,23 @@
    @TableField("box_type3")
    private String boxType3 = "1";
    /**
     * 宽度
     */
    @ApiModelProperty(value= "宽度")
    @TableField("width")
    private Double width;
    /**
     * 高度
     */
    @ApiModelProperty(value= "高度")
    @TableField("height")
    private Double height;
    public OrderDetl() {}
    public OrderDetl(Long orderId, String orderNo, Double anfme, Double qty, String matnr, String maktx, String batch, String specs, String model, String color, String brand, String unit, Double price, String sku, Double units, String barcode, String origin, String manu, String manuDate, String itemNum, Double safeQty, Double weight, Double manLength, Double volume, String threeCode, String supp, String suppCode, Integer beBatch, String deadTime, Integer deadWarn, Integer source, Integer inspect, Integer danger, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
    public OrderDetl(Long orderId, String orderNo, Double anfme, Double qty, String matnr, String maktx, String batch, String specs, String model, String color, String brand, String unit, Double price, String sku, Double units, String barcode, String origin, String manu, String manuDate, String itemNum, Double safeQty, Double weight, Double manLength, Double volume, String threeCode, String supp, String suppCode, Integer beBatch, String deadTime, Integer deadWarn, Integer source, Integer inspect, Integer danger, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo,Double width,Double height) {
        this.orderId = orderId;
        this.orderNo = orderNo;
        this.anfme = anfme;
@@ -395,6 +409,8 @@
        this.updateBy = updateBy;
        this.updateTime = updateTime;
        this.memo = memo;
        this.width = width;
        this.height = height;
    }
    public OrderDetl(OrderDetl orderDetl) {
@@ -442,6 +458,8 @@
        this.standby1 = orderDetl.getStandby1();
        this.standby2 = orderDetl.getStandby2();
        this.standby3 = orderDetl.getStandby3();
        this.width = orderDetl.getWidth();
        this.height = orderDetl.getHeight();
    }
src/main/java/com/zy/asrs/entity/param/OrderToLine.java
@@ -33,7 +33,7 @@
        private String po;
        //箱数
        private Float ctns;
        private Double ctns;
        //条码值\非分拣属性(可人工开关)\不可为空\扫码可获取
        private String upc;
@@ -55,7 +55,7 @@
            this.sku = sku;
            this.po = po;
        }
        public MatList(String sku, String po, Float ctns, String upc, Integer sign, String supplier, Long binding_tags) {
        public MatList(String sku, String po, Double ctns, String upc, Integer sign, String supplier, Long binding_tags) {
            this.sku = sku;
            this.po = po;
            this.ctns = ctns;
src/main/java/com/zy/asrs/mapper/BasArmRulesMapper.java
@@ -23,5 +23,7 @@
                         @Param("materialNumber") Double materialNumber,
                         @Param("status") int status);
    Integer getNumber(@Param("weight")Double weight,@Param("volume")Double volume,@Param("length")Double length,@Param("width")Double width,@Param("height")Double height);
}
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -62,4 +62,5 @@
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("brand")String brand, @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("workQty")Double workQty);
    List<OrderDetl> selectByOrderNo(@Param("orderNo") String orderNo);
}
src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -25,4 +25,8 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    List<String> AllStatusSatisfyOrder(@Param("moveStatus") Integer moveStatus);
    boolean updateOrderStatus(@Param("orderNo")String orderNo);
}
src/main/java/com/zy/asrs/service/BasArmRulesService.java
@@ -12,4 +12,6 @@
    boolean updateStatus(Double materialLength,Double materialWidth,Double materialHeight,Double materialWeight,Double materialNumber,int status);
    boolean updateStatus(ArmPrecomputeParam.CombMat combMat);
    Integer getNumber(Double weight,Double volume,Double length,Double width,Double height);
}
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -37,4 +37,6 @@
     * @return
     */
    boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double workQty);
    List<OrderDetl> selectByOrderNo(String orderNo);
}
src/main/java/com/zy/asrs/service/OrderService.java
@@ -36,4 +36,8 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    List<String> AllStatusSatisfyOrder(Integer moveStatus);
    boolean updateOrderStatus(String orderNo);
}
src/main/java/com/zy/asrs/service/impl/BasArmRulesServiceImpl.java
@@ -33,4 +33,9 @@
    public boolean updateStatus(Double materialLength,Double materialWidth,Double materialHeight,Double materialWeight,Double materialNumber,int status){
        return this.baseMapper.updateStatus(materialLength,materialWidth,materialHeight,materialWeight,materialNumber,status);
    }
    @Override
    public Integer getNumber(Double weight,Double volume,Double length,Double width,Double height){
        return this.baseMapper.getNumber(weight,volume,length,width,height);
    }
}
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -94,4 +94,9 @@
    public boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double workQty) {
        return this.baseMapper.increaseWorkQty(orderId, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, workQty) > 0;
    }
    @Override
    public List<OrderDetl> selectByOrderNo(String orderNo) {
        return this.baseMapper.selectByOrderNo(orderNo);
    }
}
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -209,4 +209,15 @@
        return this.baseMapper.selectOrderMoveStatusInitial();
    }
    @Override
    public List<String> AllStatusSatisfyOrder(Integer moveSatus){
        return this.baseMapper.AllStatusSatisfyOrder(moveSatus);
    }
    @Override
    public boolean updateOrderStatus(String orderNo){
        return this.baseMapper.updateOrderStatus(orderNo);
    }
}
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java
@@ -1,16 +1,91 @@
package com.zy.asrs.task;
import com.alibaba.fastjson.JSON;
import com.zy.asrs.entity.BasArmRules;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.param.OrderToLine;
import com.zy.asrs.service.BasArmRulesService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.impl.OrderDetlServiceImpl;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.OrderToLineHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
//订单下发至分拣线
public class OrderToSortLineScheduler {
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private BasArmRulesService basArmRulesService;
    @Autowired
    private OrderToLineHandler orderToLineHandler;
//    @Scheduled(cron = "0/3 * * * * ? ")
    //    @Scheduled(cron = "0/3 * * * * ? ")
    private void orderToSortLine() {
        //获取未下发单据
        List<String> orderNos = orderService.AllStatusSatisfyOrder(0);
        for (String orderNo : orderNos) {
            List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(orderNo);
            OrderToLine orderToLine = new OrderToLine();
            orderToLine.setOrderNo(orderNo);
            orderToLine.setCreateTime(System.currentTimeMillis());
            Long bindingTag = System.currentTimeMillis();//混搭标记
            List<OrderToLine.MatList> matLists = new ArrayList<>();
            for (OrderDetl orderDetl : orderDetls) {
                Integer number =  basArmRulesService.getNumber(orderDetl.getWeight(),orderDetl.getVolume(),orderDetl.getManLength(),orderDetl.getWidth(),orderDetl.getHeight());
                Double anfme = orderDetl.getAnfme();
                Double remainder = anfme % number;  //取余   余数混搭
                if(remainder != 0){
                    // 组装物料信息
                    OrderToLine.MatList matMix = new OrderToLine.MatList(
                            orderDetl.getMatnr(),  // matnr -> sku
                            orderDetl.getSupp(),  //  supp -> po
                            remainder,          //余料
                            orderDetl.getBarcode(),   //barcode -> upc
                            1,
                            orderDetl.getOrigin(),   //origin -> supplier 货源
                            bindingTag        //余料标记相同
                    );
                    matLists.add(matMix);
                }
                Double ctns = anfme - remainder;
                // 组装物料信息
                OrderToLine.MatList mat = new OrderToLine.MatList(
                        orderDetl.getMatnr(),  // matnr -> sku
                        orderDetl.getSupp(),  //  supp -> po
                        ctns,          //整料
                        orderDetl.getBarcode(),   //barcode -> upc
                        1,
                        orderDetl.getOrigin(),   //origin -> supplier 货源
                        System.currentTimeMillis()
                );
                matLists.add(mat);
            }
            orderToLine.setMatList(matLists);
            try{
                ReturnT<String> returnT = orderToLineHandler.start(orderToLine);
                if (!returnT.isSuccess()) {
                    log.error("下发单据失败===>"+ JSON.toJSON(orderToLine));
                }
            } catch (Exception e){
                log.error("下发单据异常===>"+e.getMessage());
            }
        }
    }
src/main/java/com/zy/asrs/task/handler/OrderToLineHandler.java
New file
@@ -0,0 +1,78 @@
package com.zy.asrs.task.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.exception.CoolException;
import com.zy.asrs.entity.param.ArmPrecomputeParam;
import com.zy.asrs.entity.param.OrderToLine;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.BasArmRulesService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service
@Transactional
public class OrderToLineHandler extends AbstractHandler<String> {
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private OrderService orderService;
    @Value("${line.address.URL}")
    //端口
    private String URL;
    @Value("${line.address.PATH}")
    //审核地址
    private String Path;
    public ReturnT<String> start(OrderToLine orderToline) {
        try{
            String response = "";
            boolean success = false;
            try {
                response = new HttpHandler.Builder()
                        .setUri(URL)
                        .setPath(Path)
                        .setJson(JSON.toJSONString(orderToline))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    success = true;
                    orderService.updateOrderStatus(orderToline.getOrderNo());   //更新订单状态 0 -> 1
                } else {
                    log.error("下发单据!!!url:{};request:{};response:{}", URL+Path, JSON.toJSONString(orderToline), response);
                    throw new CoolException("下发单据失败");
                }
            } catch (Exception e) {
                log.error("fail", e);
                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "下发单据至分拣线",
                            URL + Path,
                            null,
                            "127.0.0.1",
                            JSON.toJSONString(orderToline),
                            response,
                            success
                    );
                } catch (Exception e) { log.error("", e); }
            }
        }catch (Exception e){
        }
        return SUCCESS;
    }
}
src/main/resources/application.yml
@@ -80,6 +80,12 @@
    URL: http://58.210.10.90:28090
    #根据参数获取码垛数量
    QuantityOfPalletizing: api
#分拣线对接
line:
  # 地址
  address:
    URL: http://58.210.10.90:28090
    PATH: API
#erp对接
erp:
src/main/resources/mapper/BasArmRulesMapper.xml
@@ -31,4 +31,15 @@
        and material_weight = #{materialWeight}
    </update>
    <select id="getNumber" resultType="Integer">
        select material_number
        from asr_bas_arm_rules
        where 1=1
        and material_volume = #{volume}
        and material_length = #{length}
        and material_width = #{width}
        and material_height = #{height}
        and material_weight = #{weight}
    </select>
</mapper>
src/main/resources/mapper/OrderDetlMapper.xml
@@ -201,5 +201,10 @@
            </otherwise>
        </choose>
    </update>
    <select id="selectByOrderNo" resultMap="BaseResultMap">
        select  *
        from man_order_detl
        where order_no = #{orderNo}
    </select>
</mapper>
src/main/resources/mapper/OrderMapper.xml
@@ -118,5 +118,18 @@
        and move_status = 1
        order by update_time
    </select>
    <select id="AllStatusSatisfyOrder" resultType="String">
        select order_no
        from man_order
        where move_status = #{moveStatus}
    </select>
    <update id="updateOrderStatus">
        update man_order
        set move_status = 1
        where 1=1
        and order_no = #{orderNo}
    </update>
</mapper>