#自动下发分拣线单据, 自动分配余料至同一站口,同一标记
| | |
| | | @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; |
| | |
| | | this.updateBy = updateBy; |
| | | this.updateTime = updateTime; |
| | | this.memo = memo; |
| | | this.width = width; |
| | | this.height = height; |
| | | } |
| | | |
| | | public OrderDetl(OrderDetl orderDetl) { |
| | |
| | | this.standby1 = orderDetl.getStandby1(); |
| | | this.standby2 = orderDetl.getStandby2(); |
| | | this.standby3 = orderDetl.getStandby3(); |
| | | this.width = orderDetl.getWidth(); |
| | | this.height = orderDetl.getHeight(); |
| | | } |
| | | |
| | | |
| | |
| | | private String po; |
| | | |
| | | //箱数 |
| | | private Float ctns; |
| | | private Double ctns; |
| | | |
| | | //条码值\非分拣属性(可人工开关)\不可为空\扫码可获取 |
| | | private String upc; |
| | |
| | | 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; |
| | |
| | | @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); |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | |
| | | Order selectOrderMoveStatus(); |
| | | Order selectOrderMoveStatusInitial(); |
| | | |
| | | List<String> AllStatusSatisfyOrder(@Param("moveStatus") Integer moveStatus); |
| | | |
| | | boolean updateOrderStatus(@Param("orderNo")String orderNo); |
| | | } |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | * @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); |
| | | } |
| | |
| | | Order selectOrderMoveStatus(); |
| | | Order selectOrderMoveStatusInitial(); |
| | | |
| | | List<String> AllStatusSatisfyOrder(Integer moveStatus); |
| | | |
| | | boolean updateOrderStatus(String orderNo); |
| | | |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | 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()); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | URL: http://58.210.10.90:28090 |
| | | #根据参数获取码垛数量 |
| | | QuantityOfPalletizing: api |
| | | #分拣线对接 |
| | | line: |
| | | # 地址 |
| | | address: |
| | | URL: http://58.210.10.90:28090 |
| | | PATH: API |
| | | |
| | | #erp对接 |
| | | erp: |
| | |
| | | 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> |
| | |
| | | </otherwise> |
| | | </choose> |
| | | </update> |
| | | <select id="selectByOrderNo" resultMap="BaseResultMap"> |
| | | select * |
| | | from man_order_detl |
| | | where order_no = #{orderNo} |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | 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> |