src/main/java/com/zy/asrs/entity/OrderDetl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/OrderMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/GhjtScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/GhjtHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/LocDetlMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/OrderDetlMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/OrderMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/order/order.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -397,14 +397,14 @@ } public String getInspect$(){ if (null == this.inspect){ return null; } if (null == this.inspect){ return "待备货"; } switch (this.inspect){ case 1: return "是"; case 0: return "否"; return "备货中"; case 2: return "已备货"; default: return String.valueOf(this.inspect); return "待备货"; } } src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -86,4 +86,9 @@ * 查询包装组号在库时间 */ List<InLocTimeDto> queryInLocTime(@Param("param") List<String> param); /** * 按包装组号列表查询库位号列表 */ List<LocDetl> selectLocNoByGroupNo(@Param("packageGroupNos") List<String> packageGroupNos); } src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -48,4 +48,9 @@ * 按包装组号标记盘点记录异常 */ void updateCheckExceptionByGroup(@Param("groups") List<String> groups); /** * 按包装组号更新订单明细状态 */ void updateOrderDetlStatusByPackageNo(@Param("brands") List<String> brands,@Param("status") int status); } src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -21,4 +21,14 @@ List<Order> selectorderNoL(@Param("orderNo")String orderNo); void updateSettleByOrderNo(@Param("orderNo") String orderNo, @Param("status") long status, @Param("userId") Long userId); /** * 查询出库申请单中没有备货的订单明细的包装组号 */ List<String> selectStockUpOrderDetl(); /** * 更新订单备货状态 */ void updateStatusByOrderNo(@Param("orderNo") String orderNo,@Param("status") int status,@Param("userId") int userId); } src/main/java/com/zy/asrs/task/GhjtScheduler.java
@@ -1,7 +1,6 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.OrderMapper; import com.zy.asrs.mapper.WrkMastMapper; @@ -36,20 +35,24 @@ @Resource private ConfigMapper configMapper; // 备货(根据出库单,把要出的货提前放到靠近出库口位置) // @Scheduled(cron = "0/4 * * * * ? ") public void stockUp() { // 查询待出库订单 List<Order> orderList = orderMapper.selectList(new EntityWrapper<Order>().eq("settle", 1)); // ghjtHandler.stockUp(); List<Order> orders = orderMapper.selectComplete(); for (Order order : orders) { try { // ghjtHandler.OutBoundCompleteReport(order); } catch (Exception e) { log.error("出库订单完成则上报MES失败,异常信息:" + e); } // 自动备货(根据出库单,把要出的货提前放到靠近出库口位置) // 定时任务获取待备货订单明细->获取堆垛机对应的源库位,获取备货区库位->生成移库任务11-> // 执行移库任务12->入库完成4->更新工作档定时任务中更新订单备货状态和订单明细备货状态5->转储历史 @Scheduled(cron = "0/10 * * * * ?") public synchronized void autoStockUp() { // 查询自动备货配置 Config config = configMapper.selectConfigByCode("auto_stock_up"); if (config == null || config.getStatus() == 0) { return; } // 查询出库申请单中没有备货的订单明细的包装组号 List<String> list = orderMapper.selectStockUpOrderDetl(); if (list.isEmpty()) { return; } ghjtHandler.autoStockUpHandler(list, Integer.parseInt(config.getValue())); } // 下发出库任务给GWCS(从出库码头到出库口) src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
@@ -4,12 +4,13 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.OrderDetlMapper; import com.zy.asrs.mapper.OrderMapper; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.mapper.*; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.WorkService; import com.zy.asrs.service.WrkDetlService; import com.zy.common.constant.MesConstant; import com.zy.common.utils.HttpHandler; @@ -19,10 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; /** @@ -48,6 +46,15 @@ @Resource private OrderDetlMapper orderDetlMapper; @Resource private LocDetlMapper locDetlMapper; @Resource private LocMastMapper locMastMapper; @Resource private WorkService workService; @Transactional public void startCkrwPushGwcs(WrkMast wrkMast) { @@ -158,4 +165,96 @@ return flag; } /** * 自动备货处理 */ public void autoStockUpHandler(List<String> list,int columnNum) { // 根据包装组号获取所在库位 List<LocDetl> locDetls = locDetlMapper.selectLocNoByGroupNo(list); if (locDetls.isEmpty()) { return; } // 相同则合并,一个库位两个包装组号 Map<String,List<String>> map = new HashMap<>(); for(LocDetl locDetl : locDetls) { List<String> brand = map.get(locDetl.getLocNo()); if (brand == null) { map.put(locDetl.getLocNo(),new ArrayList<String>(){{add(locDetl.getBrand());}}); } else { brand.add(locDetl.getBrand()); map.put(locDetl.getLocNo(),brand); } } // 遍历堆垛机并且判断是否存在任务 for (int i = 1; i <= 6; i++) { // 要备货的库位 String sourceLocNo = null; // 备货目标库位 String staLocNo = null; Integer wrkCount = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i)); if(wrkCount > 0) { log.warn("{}号堆垛机已存在任务",i); continue; } // 根据堆垛机号查询到对应的深库位和浅库位 深库位4*n-3和4*n 浅库位4*n-2和4*n-1 int s1 = 4*i-3; int s2 = 4*i; int q1 = 4 * i - 2; int q2 = 4 * i -1; // 根据堆垛机号获取一个浅库位 for(String key : map.keySet()) { int row = Integer.parseInt(key.substring(0, 2)); if (row == q1 || row == q2) { sourceLocNo = key; break; } } // 浅库位没有则找一个深库位 if (sourceLocNo == null) { for(String key : map.keySet()) { int row = Integer.parseInt(key.substring(0, 2)); if (row == s1 || row == s2) { sourceLocNo = key; break; } } } // 没有找到源库位 if (sourceLocNo == null) { log.warn("没有找到源库位,堆垛机:{}",i); continue; } // 寻找一个备货的目标库位,先深后浅 List<LocMast> locMasts1 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", s1, s2) .le("bay1", columnNum)); if (locMasts1.isEmpty()) { // 深库位为空了,取浅库位 List<LocMast> locMasts2 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", q1, q2) .le("bay1", columnNum)); if (!locMasts2.isEmpty()) { staLocNo = locMasts2.get(0).getLocNo(); } } else { staLocNo = locMasts1.get(0).getLocNo(); } if(staLocNo == null) { log.warn("{}号堆垛机备货区满了",i); continue; } // 备货的源库位,目标库位都获取到了,生成移库任务 workService.locMove(sourceLocNo,staLocNo,29L); // 订单明细改成备货中,在任务完成时候改成备货完成,并判断整个订单是否完成 orderDetlMapper.updateOrderDetlStatusByPackageNo(map.get(sourceLocNo), 1); // 移除已生成备货库位 map.remove(sourceLocNo); } } } src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -4,6 +4,7 @@ import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.OrderDetlMapper; import com.zy.asrs.mapper.OrderMapper; import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; @@ -16,6 +17,7 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * Created by vincent on 2020/7/4 @@ -39,6 +41,9 @@ private OrderDetlService orderDetlService; @Resource private OrderDetlMapper orderDetlMapper; @Resource private OrderMapper orderMapper; public ReturnT<String> start(WrkMast wrkMast) { // 4.入库完成 if (wrkMast.getWrkSts() == 4) { @@ -313,6 +318,26 @@ return FAIL.setMsg("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 备货,更新订单明细及订单状态 List<WrkDetl> wrkDetlList = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); if (!wrkDetlList.isEmpty()) { List<String> brands = wrkDetlList.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList()); // 查询订单明细 List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("brand", brands)); if (!orderDetlList.isEmpty()) { // 更新明细为已备货 orderDetlMapper.updateOrderDetlStatusByPackageNo(brands,2); // 获取订单号 String orderNo = orderDetlList.get(0).getOrderNo(); // 判断该订单明细是否全部已备货 Integer selectCount = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().eq("order_no", orderNo).ne("inspect", 2)); if (selectCount == 0) { // 更新订单为备货完成 orderMapper.updateStatusByOrderNo(orderNo,2,29); } } } // 修改源库位状态 ==> O LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); if (null != sourceLoc) { src/main/resources/mapper/LocDetlMapper.xml
@@ -388,6 +388,12 @@ brand, appe_time </select> <select id="selectLocNoByGroupNo" resultType="com.zy.asrs.entity.LocDetl"> select distinct ald.loc_no as locNo,ald.brand from asr_loc_detl ald where ald.brand in <foreach collection="packageGroupNos" item="item" index="index" open="(" close=")" separator=","> #{item} </foreach> </select> <update id="updateMatTurn"> UPDATE a src/main/resources/mapper/OrderDetlMapper.xml
@@ -237,5 +237,11 @@ #{item} </foreach> </update> <update id="updateOrderDetlStatusByPackageNo"> update man_order_detl set inspect = #{status} where brand in <foreach collection="brands" open="(" separator="," close=")" item="item" index="index"> #{item} </foreach> </update> </mapper> src/main/resources/mapper/OrderMapper.xml
@@ -63,6 +63,9 @@ and order_no = #{orderNo} and settle != #{status} </update> <update id="updateStatusByOrderNo"> update man_order set account_day = #{status},update_time = getdate(),update_by = #{userId} where order_no = #{orderNo} </update> <select id="selectComplete" resultMap="BaseResultMap"> select @@ -91,5 +94,18 @@ and order_no = #{orderNo} </if> </select> <select id="selectStockUpOrderDetl" resultType="java.lang.String"> select DISTINCT md.brand from man_order mo left join man_order_detl md on mo.order_no = md.order_no where mo.doc_type = 21 and mo.account_day = 1 and md.inspect = 0 and mo.settle = 1 </select> </mapper> src/main/webapp/static/js/order/order.js
@@ -260,8 +260,8 @@ // {field: 'inQty', title: '已入库量'}, // {field: 'color', title: '颜色'}, // {field: 'specs', title: '接头'}, {field: 'qty$', title: '状态', style: 'font-weight: bold'}, {field: 'source$', title: '是否确认', style: 'font-weight: bold'} {field: 'qty$', title: '出库状态', style: 'font-weight: bold'}, {field: 'inspect$', title: '备货状态', style: 'font-weight: bold'} ]], request: { pageName: 'curr',