| src/main/java/com/zy/asrs/controller/OutController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/CheckOrderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/WorkService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/CheckOrderDetlMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/static/js/checkOrder/checkOrder.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/checkOrder/checkOrder.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OutController.java
@@ -5,12 +5,14 @@ import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.common.model.LocDto; import com.zy.common.model.TaskDto; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -46,6 +48,9 @@ @Resource private OrderPakoutService orderPakOutService; @Autowired private CheckOrderService checkOrderService; @PostMapping("/out/pakout/orderDetlIds/auth") @@ -220,4 +225,61 @@ return R.ok(); } @PostMapping("/out/checkPakOut/auth") @ManagerAuth(memo = "订单出库") public synchronized R checkPakOut(@RequestBody List<LocDto> locDtos) throws InterruptedException { if (Cools.isEmpty(locDtos)) { return R.parse(BaseRes.PARAM); } List<LocDto> locDtoArrayList = new ArrayList<>(); for (LocDto locDto : locDtos){ if (locDto.getFrozen()!=1 && locDto.getFrozenLoc()!=1){ locDtoArrayList.add(locDto); } } locDtos = locDtoArrayList; if (Cools.isEmpty(locDtos)) { return R.parse("库存/库位被冻结,请处理后出库!!!"); } boolean lack = true; for (LocDto locDto : locDtos) { if (!locDto.isLack()) { lack = false; break; } } if (lack) { return R.error("库存不足"); } Thread.sleep(1000L); List<TaskDto> taskDtos = new ArrayList<>(); // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务 for (LocDto locDto : locDtos) { if (locDto.isLack()) { continue; } TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto); if (TaskDto.has(taskDtos, taskDto)) { TaskDto dto = TaskDto.find(taskDtos, taskDto); assert dto != null; dto.getLocDtos().addAll(taskDto.getLocDtos()); } else { taskDtos.add(taskDto); } } // ----------------------------------------------------------------------------------------------- for (TaskDto taskDto : taskDtos) { BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); workService.checkStockOut(staNo, taskDto, getUserId()); } String orderNo = taskDtos.get(0).getLocDtos().get(0).getOrderNo(); CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", orderNo)); checkOrder.setSettle(11L); if (!checkOrderService.updateById(checkOrder)) { throw new CoolException("更新盘点单状态失败"); } return R.ok(); } } src/main/java/com/zy/asrs/service/CheckOrderService.java
@@ -2,7 +2,6 @@ import com.zy.asrs.entity.CheckOrder; import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.CheckOrderDetl; import com.zy.common.model.LocDto; import java.util.List; src/main/java/com/zy/asrs/service/WorkService.java
@@ -42,6 +42,8 @@ void stockOut(BasDevp staNo, TaskDto taskDto, Long userId); void checkStockOut(BasDevp staNo, TaskDto taskDto, Long userId); /** * 空板入库 * @return 库位号 src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java
@@ -1,6 +1,7 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -18,6 +18,7 @@ import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.asrs.utils.Utils; import com.zy.common.model.*; import com.zy.common.model.enumUtils.OrderEnumVo; import com.zy.common.model.enums.IoWorkType; import com.zy.common.model.enums.WorkNoType; import com.zy.common.properties.SlaveProperties; @@ -93,6 +94,12 @@ @Resource private OrderPakoutService orderPakOutService; @Autowired private CheckOrderService checkOrderService; @Autowired private CheckOrderDetlService checkOrderDetlService; @Override @Transactional @@ -390,7 +397,7 @@ } @Override @Transactional @Transactional(rollbackFor = Exception.class) public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) { Date now = new Date(); List<LocDto> locDtos = taskDto.getLocDtos(); @@ -403,8 +410,9 @@ LocMast locMast = locMastService.selectById(taskDto.getLocNo()); // 判断是否是盘点单 String orderNo = taskDto.getLocDtos().get(0).getOrderNo(); OrderPakout orderPakout = orderPakOutService.selectByNo(orderNo); int ioType = orderPakout.getDocType() == 8 ? 107 : (taskDto.isAll() ? 101 : 103); // OrderPakout orderPakout = orderPakOutService.selectByNo(orderNo); CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", orderNo)); int ioType = checkOrder.getDocType() == 8 ? 107 : (taskDto.isAll() ? 101 : 103); StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo()); // 生成工作号 int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); @@ -486,6 +494,98 @@ } @Override @Transactional(rollbackFor = Exception.class) public void checkStockOut(BasDevp staNo, TaskDto taskDto, Long userId) { Date now = new Date(); List<LocDto> locDtos = taskDto.getLocDtos(); for (LocDto locDto : locDtos) { if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) { throw new CoolException("订单出库异常,请联系管理员"); } } // 获取库位 LocMast locMast = locMastService.selectById(taskDto.getLocNo()); int ioType = 107; StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo()); // 生成工作号 int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); // 生成工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(ioType); // 入出库状态 wrkMast.setIoPri(13D); // 优先级:13 wrkMast.setCrnNo(locMast.getCrnNo()); wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 源站 wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站 wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setBarcode(locMast.getBarcode()); wrkMast.setAppeUser(userId); // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo()); } // 生成工作档明细 for (LocDto locDto : taskDto.getLocDtos()) { if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) { continue; } List<CheckOrderDetl> checkOrderDetls = checkOrderDetlService.selectList(new EntityWrapper<CheckOrderDetl>() .eq("loc_no", locDto.getLocNo()) .eq("matnr", locDto.getMatnr()) .eq("batch", locDto.getBatch()) .eq("order_no", locDto.getOrderNo()) ); if (checkOrderDetls.size() > 1) { throw new CoolException("数据大于1,请检查数据"); } WrkDetl wrkDetl = new WrkDetl(); wrkDetl.sync(checkOrderDetls.get(0)); wrkDetl.setZpallet(wrkMast.getBarcode()); wrkDetl.setIoTime(now); wrkDetl.setWrkNo(workNo); wrkDetl.setBatch(locDto.getBatch()); wrkDetl.setOrderNo(locDto.getOrderNo()); wrkDetl.setAnfme(locDto.getAnfme()); // 数量 wrkDetl.setAppeTime(now); wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now); wrkDetl.setModiUser(userId); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } // 修改订单明细 checkOrderDetls.get(0).setStatus(2); if (!checkOrderDetlService.updateById(checkOrderDetls.get(0))){ throw new CoolException("保存订单明细失败"); } } // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 locMast = locMastService.selectById(taskDto.getLocNo()); if (locMast.getLocSts().equals("F")) { locMast.setLocSts(ioType == 101 ? "R" : "P"); locMast.setModiUser(userId); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { throw new CoolException("预约库位状态失败,库位号:" + taskDto.getLocNo()); } } else { throw new CoolException(taskDto.getLocNo() + "库位不是在库状态"); } } @Override @Transactional public String emptyPlateIn(Integer devpNo, Long userId) { // 源站点状态检测 src/main/resources/mapper/CheckOrderDetlMapper.xml
@@ -20,7 +20,7 @@ <result column="price" property="price" /> <result column="sku" property="sku" /> <result column="units" property="units" /> <result column="barcode" property="barcode" /> <result column="zpallet" property="zpallet" /> <result column="origin" property="origin" /> <result column="manu" property="manu" /> <result column="manu_date" property="manuDate" /> @@ -52,6 +52,13 @@ <result column="line_number" property="lineNumber" /> <result column="loc_no" property="locNo" /> <result column="version" property="version" /> <result column="standby1" property="standby1" /> <result column="standby2" property="standby2" /> <result column="standby3" property="standby3" /> <result column="box_type1" property="boxType1" /> <result column="box_type2" property="boxType2" /> <result column="box_type3" property="boxType3" /> <result column="loc_detl_id" property="locDetlId" /> </resultMap> src/main/webapp/static/js/checkOrder/checkOrder.js
@@ -1,7 +1,9 @@ var insTbCount = 0; layui.config({ base: baseUrl + "/static/layui/lay/modules/" }).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate','tableMerge'], function () { }).extend({ notice: 'notice/notice', }).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate','tableMerge','notice'], function () { var $ = layui.jquery; var layer = layui.layer; var form = layui.form; @@ -12,6 +14,7 @@ var layDate = layui.laydate; var laytpl = layui.laytpl; var tableMerge = layui.tableMerge; var notice = layui.notice; // 渲染搜索模板 $.ajax({ @@ -598,6 +601,31 @@ }) } function pakout(tableCache, layerIndex) { // let loadIndex = layer.load(2); notice.msg('正在生成盘点出库任务......', {icon: 4}); $.ajax({ url: baseUrl + "/out/checkPakOut/auth", headers: {'token': localStorage.getItem('token')}, contentType: 'application/json;charset=UTF-8', data: JSON.stringify(tableCache), method: 'POST', success: function (res) { notice.destroy(); if (res.code === 200) { layer.close(layerIndex); layer.msg(res.msg, {icon: 1}); insTb.reload({where: null}); insTb2.reload({where: null, page: {curr: 1}}); } else if (res.code === 403) { top.location.href = baseUrl + "/"; } else { layer.msg(res.msg, {icon: 2}) } } }); } function createTask(orderId) { let loadIndex = layer.msg('请求中...', {icon: 16, shade: 0.01, time: false}); src/main/webapp/views/checkOrder/checkOrder.html
@@ -37,14 +37,9 @@ .btn-delete { display: none; } /* 限制下拉框大小,不超出表格 */ .ew-select-fixed select { max-width: 100%; width: 100%; } .ew-select-fixed .layui-form-select dl { max-height: 200px; overflow-y: auto; .layui-table-view .layui-table-cell .layui-select-title .layui-input { height: 28px; line-height: 28px; } </style> </head> @@ -239,6 +234,21 @@ </select> </div> </script> <script type="text/html" id="staBatchSelectDialog"> <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center"> <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required=""> </select> <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">确定</button> </form> </script> <script type="text/template" id="batchStaSelectTpl"> <option value="">选择出库站</option> {{#each list}} <option value="{{this}}">{{this}}</option> {{/each}} </script> <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>