| src/main/java/com/zy/asrs/controller/CheckOrderController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/LocDetl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/WrkDetl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/CheckOrderService.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/java/com/zy/common/model/LocDetlDto.java | ●●●●● 补丁 | 查看 | 原始文档 | 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/CheckOrderController.java
@@ -12,6 +12,7 @@ import com.zy.asrs.service.*; import com.core.annotations.ManagerAuth; import com.zy.common.model.DetlDto; import com.zy.common.model.LocDto; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -34,6 +35,17 @@ private DocTypeService docTypeService; @PostMapping(value = "/checkOrder/preview/auth") @ManagerAuth public R checkOrderPreview(@RequestParam("orderId") Long orderId) { List<LocDto> locDtos = checkOrderService.preview(orderId); return R.ok(locDtos); } @PostMapping(value = "/checkOrder/createTask/auth") @ManagerAuth src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.SpringUtils; @@ -31,7 +32,7 @@ private static final long serialVersionUID = 1L; @TableId @TableId(type = IdType.AUTO) private Long id; @TableField("loc_id") @@ -228,6 +229,13 @@ @ApiModelProperty(value= "是否冻结,0.未冻结,1.已冻结") private Integer frozen; /** * 差异数量 */ @ApiModelProperty(value= "差异数量") @TableField("diff_qty") private String diffQty = ""; public String getLocNo$(){ LocMastService service = SpringUtils.getBean(LocMastService.class); LocMast locMast = service.selectById(this.locNo); src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -16,7 +16,6 @@ import java.util.Date; @Data @Accessors(chain = true) @TableName("asr_wrk_detl") public class WrkDetl implements Serializable { src/main/java/com/zy/asrs/service/CheckOrderService.java
@@ -2,8 +2,14 @@ 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; public interface CheckOrderService extends IService<CheckOrder> { void remove(Long orderId); List<LocDto> preview(Long orderId); } src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java
@@ -1,16 +1,19 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.CheckOrderDetl; import com.zy.asrs.entity.OrderDetlPakin; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.CheckOrderMapper; import com.zy.asrs.entity.CheckOrder; import com.zy.asrs.service.CheckOrderDetlService; import com.zy.asrs.service.CheckOrderService; import com.zy.asrs.service.*; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.common.model.LocDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service("checkOrderService") public class CheckOrderServiceImpl extends ServiceImpl<CheckOrderMapper, CheckOrder> implements CheckOrderService { @@ -18,6 +21,15 @@ @Autowired private CheckOrderDetlService checkOrderDetlService; @Autowired private LocMastService locMastService; @Autowired private LocDetlService locDetlService; @Autowired private StaDescService staDescService; @Override public void remove(Long orderId) { if (this.baseMapper.deleteById(orderId) < 1 ) { @@ -25,4 +37,34 @@ } checkOrderDetlService.delete(new EntityWrapper<CheckOrderDetl>().eq("order_id", orderId)); } @Override public List<LocDto> preview(Long orderId) { CheckOrder checkOrder = this.baseMapper.selectById(orderId); if (Cools.isEmpty(checkOrder)) { throw new CoolException("数据错误"); } List<CheckOrderDetl> checkOrderDetls = checkOrderDetlService.selectList(new EntityWrapper<CheckOrderDetl>().eq("order_id", orderId)); if (Cools.isEmpty(checkOrderDetls)) { throw new CoolException("获取明细数据错误"); } List<LocDto> locDtos = new ArrayList<>(); for (CheckOrderDetl checkOrderDetl : checkOrderDetls) { LocDto locDto = new LocDto(checkOrderDetl.getLocNo(), checkOrderDetl.getMatnr(), checkOrderDetl.getMaktx(), checkOrderDetl.getBatch(), checkOrderDetl.getOrderNo(), checkOrderDetl.getAnfme().doubleValue()); LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", checkOrderDetl.getLocNo())); LocDetl locDetl = locDetlService.selectById(checkOrderDetl.getLocDetlId()); locDto.setFrozen(locDetl.getFrozen()); locDto.setFrozenLoc(locMast.getFrozen()); List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), 107); locDto.setStaNos(staNos); locDtos.add(locDto); } return locDtos; } } src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -1068,7 +1068,7 @@ @Transactional public void cancelWrkMast(String workNo, Long userId) { Date now = new Date(); WrkMast wrkMast = wrkMastService.selectById(workNo); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",workNo)); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } src/main/java/com/zy/common/model/LocDetlDto.java
@@ -1,10 +1,12 @@ package com.zy.common.model; import com.zy.asrs.entity.LocDetl; import lombok.Data; /** * Created by vincent on 2020/6/17 */ @Data public class LocDetlDto { private LocDetl locDetl; @@ -19,19 +21,5 @@ this.count = count; } public LocDetl getLocDetl() { return locDetl; } public void setLocDetl(LocDetl locDetl) { this.locDetl = locDetl; } public Double getCount() { return count; } public void setCount(Double count) { this.count = count; } } src/main/webapp/static/js/checkOrder/checkOrder.js
@@ -1,7 +1,7 @@ var insTbCount = 0; layui.config({ base: baseUrl + "/static/layui/lay/modules/" }).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate'], function () { }).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate','tableMerge'], function () { var $ = layui.jquery; var layer = layui.layer; var form = layui.form; @@ -11,6 +11,7 @@ var xmSelect = layui.xmSelect; var layDate = layui.laydate; var laytpl = layui.laytpl; var tableMerge = layui.tableMerge; // 渲染搜索模板 $.ajax({ @@ -91,7 +92,7 @@ if (layEvent === 'edit') { showEditModel(data); }else if (layEvent === 'createTask') { createTask(data.id); pakoutPreview(data.id); }else if (layEvent === 'del') { doDel(data.id); } else if (layEvent === 'complete') { @@ -440,6 +441,164 @@ } function pakoutPreview(id) { let loadIndex = layer.load(2); $.ajax({ url: baseUrl + "/checkOrder/preview/auth", headers: {'token': localStorage.getItem('token')}, data: { orderId: id }, method: 'POST', success: function (res) { layer.close(loadIndex); var tableCache; if (res.code === 200){ layer.open({ type: 1 ,title: false ,closeBtn: false ,offset: '50px' ,area: ['1200px', '700px'] ,shade: 0.5 ,shadeClose: false ,btn: ['立即出库', '稍后处理'] ,btnAlign: 'c' ,moveType: 1 //拖拽模式,0或者1 ,content: $('#pakoutPreviewBox').html() ,success: function(layero, index){ stoPreTabIdx = table.render({ elem: '#stoPreTab', data: res.data, height: 520, page: false, limit: Number.MAX_VALUE, cellMinWidth: 100, cols: [[ // {type: 'checkbox', merge: ['orderNo']}, {field: 'orderNo', title: '单据编号', merge: true, align: 'center'}, {field: 'title', title: '商品', merge: true, align: 'center', width: 350}, {field: 'batch', title: '序列码', align: 'center'}, {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'}, {field: 'locNo', title: '货位', align: 'center', width: 100, templet: '#locNoTpl'}, {field: 'frozen$', title: '明细', align: 'center', width: 90, templet: '#locFrozen'}, {field: 'frozenLoc$', title: '库位', align: 'center', width: 90, templet: '#locFrozenLoc'}, {field: 'staNos', align: 'center', title: '出库站', merge: ['locNo'], templet: '#tbBasicTbStaNos'}, {type: 'checkbox', merge: ['locNo']}, ]], done: function (res) { tableMerge.render(this); $('.layui-table-body.layui-table-main').css("overflow", "auto"); tableCache = tableData = table.cache.stoPreTab; } }); // 修改出库站 form.on('select(tbBasicTbStaNos)', function (obj) { let index = obj.othis.parents('tr').attr("data-index"); let data = tableCache[index]; for (let i = 0; i<tableCache.length; i++) { if (tableCache[i].locNo === data.locNo) { tableCache[i]['staNo'] = Number(obj.elem.value); } } obj.othis.children().find("input").css("color", "blue"); return false; }); // 批量修改出库站 form.on('submit(batchModifySta)', function () { let stoPreTabData = layui.table.checkStatus('stoPreTab').data; if (stoPreTabData.length < 1) { layer.msg("请至少选择一条以上合并数据", {icon: 7}); return false; } modifySta(stoPreTabData); }); // 批量修改出库站 - 站点选择 function modifySta(stoPreTabData) { // 出库站取交集 let staBatchSelectVal = []; for(let i = 0; i<stoPreTabData.length; i++) { let staNos = stoPreTabData[i].staNos; if (staNos !== null) { if (staBatchSelectVal.length === 0) { staBatchSelectVal = staNos; } else { staBatchSelectVal = staBatchSelectVal.filter(val => { return new Set(staNos).has(val) } ) } } } if (staBatchSelectVal.length === 0) { layer.msg("出库站没有交集,无法批量修改", {icon: 2}); return; } admin.open({ type: 1, area: '300px', offset: 'auto', title: '请选择站点', content: $('#staBatchSelectDialog').html(), success: function (layero, ddIndex) { // 渲染下拉框 let template = Handlebars.compile($('#batchStaSelectTpl').html()); $('#batchSelectStaBox').html(template({list: staBatchSelectVal})); // 确认 form.on('submit(staBatchSelectConfirm)', function (obj) { let loadIdx = layer.load(2); let batchSta = Number(obj.field.batchSta); let arr = []; for (let j = 0; j<stoPreTabData.length; j++) { for (let i = 0; i<tableCache.length; i++) { if (tableCache[i].orderNo === stoPreTabData[j].orderNo && tableCache[i].matnr === stoPreTabData[j].matnr && tableCache[i].locNo === stoPreTabData[j].locNo) { tableCache[i]['staNo'] = batchSta; arr.push(i); } } } stoPreTabIdx.reload({data: tableCache}); arr.forEach(item => { $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .order-sta-select').val(batchSta); }); layui.form.render('select'); arr.forEach(item => { $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue"); }); layer.close(loadIdx); layer.close(ddIndex); return false; }); // 弹窗不出现滚动条 $(layero).children('.layui-layer-content').css('overflow', 'visible'); layui.form.render('select'); }, }) } } ,yes: function(index, layero){ //按钮【立即出库】的回调 pakout(tableCache, index); } ,btn2: function(index, layero){ //按钮【稍后处理】的回调 layer.close(index) //return false 开启该代码可禁止点击该按钮关闭 } }); } 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}); $.ajax({ src/main/webapp/views/checkOrder/checkOrder.html
@@ -37,6 +37,15 @@ .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; } </style> </head> <body> @@ -204,112 +213,38 @@ </div> </form> </script> <!-- 订单任务追溯 --> <script id="wrkTraceDialog" type="text/html" style="position: relative"> <div style="position: absolute; top: 0; left: 0;"> <div class="layui-card" style="overflow: hidden;"> <div class="layui-card-header" style="text-align: center;width: 80%;font-weight: inherit;font-size: 18px">{{ d.orderNo }}</div> <div class="layui-card-body"> <div id="wrkTraceCharts" style="height: 300px;width: 400px;transform: translateX(-10%);"></div> </div> </div> <!-- 出库预览 --> <script type="text/html" id="pakoutPreviewBox" style="display: none"> <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;"> <span style="font-size: large; font-weight: bold">出库预览</span> </div> <div class="layui-row" > <div class="layui-col-md5"> <h1 style="opacity: 0;">Hello World</h1> <div class="layui-card"> <div class="layui-card-body" style="padding: 10px"> <table id="stoPreTab" lay-filter="stoPreTab"></table> </div> <div class="layui-col-md7" style=""> {{# if(d.list.length > 0){ }} <ul class="layui-timeline" style="height: 400px; overflow: scroll;"> {{# layui.each(d.list, function(index, item){ }} <li class="layui-timeline-item"> <i class="layui-icon layui-timeline-axis"></i> <div class="layui-timeline-content layui-text"> <div class="layui-timeline-title"> <h3 class="inline-block"> {{ item.wrkNo }} {{# if(item.wrkMast.ioType < 100){ }} <span class="layui-badge layui-bg-blue" style="line-height: 20px;"> {{ item.wrkMast.ioType$ }} </span> {{# } }} {{# if(item.wrkMast.ioType > 100){ }} <span class="layui-badge layui-bg-orange" style="line-height: 20px;"> {{ item.wrkMast.ioType$ }} </span> {{# } }} {{# if(item.wrkMast.wrkSts < 14){ }} <span class="layui-badge layui-bg-red" style="line-height: 20px;"> {{ item.wrkMast.wrkSts$ }} </span> {{# } }} {{# if(item.wrkMast.wrkSts >= 14){ }} <span class="layui-badge layui-bg-green" style="line-height: 20px;"> {{ item.wrkMast.wrkSts$ }} </span> {{# } }} </h3>  {{ item.wrkMast.ioTime$ }} </div> <table class="layui-table" lay-skin="nob" style="width: 80%"> <tbody> {{# layui.each(item.wrkDetls, function(idx, wrkDetl){ }} <tr style="background: none"> <td>No.</td> <td><span class="layui-badge layui-bg-cyan">{{ idx+1 }}</span></td> </tr> <tr style="background: none"> <td>品号:</td> <td>{{ wrkDetl.matnr }}</td> </tr> <tr style="background: none"> <td>品名:</td> <td>{{ wrkDetl.maktx }}</td> </tr> <tr style="background: none"> <td>规格:</td> <td>{{ wrkDetl.specs }}</td> </tr> <tr style="background: none"> <td>数量:</td> <td style="font-weight: bold">{{ wrkDetl.anfme }}</td> </tr> <tr style="background: none"> <td>条码:</td> <td style="font-weight: bold">{{ wrkDetl.zpallet }}</td> </tr> {{# }); }} </tbody> </table> <hr class="layui-border-cyan" style="width: 90%; opacity: .6;"> </div> </li> {{# }); }} </ul> {{# } else { }} <div style="height: 350px;display: flex;justify-content: center;align-items: center;"> <h2 style="font-weight: bold;letter-spacing: 2px">暂无任务</h2> </div> {{# } }} </div> <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem"> 批量修改 </button> </div> </script> <script type="text/html" id="tbBasicTbStaNos"> <div class="ew-select-fixed"> <select class="order-sta-select" lay-filter="tbBasicTbStaNos"> {{#if (d.staNos!=null) {}} {{# for(let i=0; i<d.staNos.length; i++) { }} <option value="{{d.staNos[i]}}">{{d.staNos[i]}}</option> {{# } }} {{# } }} </select> </div> </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> <script type="text/javascript" src="../../static/js/echarts/echarts.min.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/tools/md5.js"></script> <script type="text/javascript" src="../../static/js/checkOrder/checkOrder.js" charset="utf-8"></script> <script type="text/template" id="docTypeTpl">