| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import zy.cloud.wms.common.config.AdminInterceptor; |
| | | import zy.cloud.wms.common.utils.BarcodeUtils; |
| | | import zy.cloud.wms.common.utils.QrCode; |
| | | import zy.cloud.wms.common.web.BaseController; |
| | | import zy.cloud.wms.manager.entity.Order; |
| | | import zy.cloud.wms.manager.service.OrderService; |
| | | |
| | | import javax.imageio.ImageIO; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.awt.image.BufferedImage; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/order/code/auth") |
| | | // @ManagerAuth(memo = "条形码获取(type:1(条形码);2(二维码)") |
| | | public R barcode(@RequestParam(defaultValue = "1") Integer type |
| | | ,@RequestParam String param |
| | | ,HttpServletResponse response) throws Exception { |
| | | AdminInterceptor.cors(response); |
| | | if (Cools.isEmpty(param)){ |
| | | return R.parse(BaseRes.EMPTY); |
| | | } |
| | | BufferedImage img; |
| | | if (type == 1) { |
| | | img = BarcodeUtils.encode(param); |
| | | } else { |
| | | img = QrCode.createImg(param); |
| | | } |
| | | if (!ImageIO.write(img, "jpg", response.getOutputStream())) { |
| | | throw new IOException("Could not write an image of format jpg"); |
| | | } |
| | | response.getOutputStream().flush(); |
| | | response.getOutputStream().close(); |
| | | return R.ok(); |
| | | } |
| | | |
| | | } |
| | |
| | | @RequestMapping("/stock/out/create") |
| | | @ManagerAuth(memo = "生成拣货单") |
| | | public R stockOut(@RequestBody StockOutParam stockOutParam) { |
| | | return workService.stockOut(stockOutParam, getUserId()); |
| | | return workService.stockOutCreate(stockOutParam, getUserId()); |
| | | } |
| | | |
| | | @RequestMapping("/stock/out/print") |
| | |
| | | @Data |
| | | public class StockOutParam { |
| | | |
| | | // 订单号 |
| | | // 单据编号 |
| | | private String orderNo; |
| | | |
| | | } |
| | |
| | | |
| | | private Double total; |
| | | |
| | | private String custName; |
| | | private String cstmrName; |
| | | |
| | | private String workerName; |
| | | |
| | |
| | | |
| | | R stockOutCheck(String number, Long userId); |
| | | |
| | | R stockOutPrint(StockOutParam param, Long userId); |
| | | |
| | | R stockOutPreview(StockOutParam param, Long userId); |
| | | |
| | | R stockOut(StockOutParam param, Long userId); |
| | | R stockOutCreate(StockOutParam param, Long userId); |
| | | |
| | | R stockOutPrint(StockOutParam param, Long userId); |
| | | |
| | | R stockOutComplete(StockConfirmParam param, Long userId); |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R stockOutPrint(StockOutParam param, Long userId) { |
| | | List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>().eq("doc_num", param.getOrderNo())); |
| | | Double total = 0.0D; |
| | | String custName = ""; |
| | | for (Pakout pakout : pakouts) { |
| | | total = pakout.getAnfme() + total; |
| | | custName = pakout.getCustName(); |
| | | } |
| | | StoPrintVo vo = new StoPrintVo(); |
| | | vo.setDocNum(param.getOrderNo()); |
| | | vo.setList(pakouts); |
| | | vo.setTotal(total); |
| | | vo.setCustName("浙江中扬立库技术有限公司"); |
| | | vo.setWorkerName("陆晓涛"); |
| | | return R.ok().add(vo); |
| | | } |
| | | |
| | | @Override |
| | | public R stockOutPreview(StockOutParam param, Long userId) { |
| | | Order order = orderService.selectByOrderNo(param.getOrderNo()); |
| | | if (order.getSettle() != 1) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R stockOut(StockOutParam param, Long userId) { |
| | | public R stockOutCreate(StockOutParam param, Long userId) { |
| | | Order order = orderService.selectByOrderNo(param.getOrderNo()); |
| | | if (order.getSettle() != 1) { |
| | | return R.error("此单据无法生成拣货单"); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R stockOutPrint(StockOutParam param, Long userId) { |
| | | Order order = orderService.selectByOrderNo(param.getOrderNo()); |
| | | if (order == null) { |
| | | return R.error("此单据已失效"); |
| | | } |
| | | List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>().eq("doc_num", order.getOrderNo())); |
| | | Double total = 0.0D; |
| | | for (Pakout pakout : pakouts) { |
| | | total = pakout.getAnfme() + total; |
| | | } |
| | | StoPrintVo vo = new StoPrintVo(); |
| | | vo.setDocNum(param.getOrderNo()); |
| | | vo.setList(pakouts); |
| | | vo.setTotal(total); |
| | | vo.setCstmrName(order.getCstmrName()); |
| | | vo.setWorkerName(order.getOperMemb()); |
| | | return R.ok().add(vo); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R stockOutComplete(StockConfirmParam param, Long userId) { |
| | | List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>() |
| | |
| | | case 'print': |
| | | layer.confirm('开始打印' +data.number + ' 拣货单?', {shadeClose: true}, function(){ |
| | | layer.closeAll(); |
| | | printPakouts(data.number); |
| | | printPakouts(data.orderNo); |
| | | }) |
| | | break; |
| | | // 修改 |
| | |
| | | , btn: ['打印拣货单'] |
| | | }, function() { |
| | | layer.closeAll(); |
| | | printPakouts(number); |
| | | printPakouts(orderNo); |
| | | } |
| | | ) |
| | | // 缺料 |
| | |
| | | // }); |
| | | } |
| | | |
| | | |
| | | // 打印拣货单 |
| | | function printPakouts(orderNo) { |
| | | $.ajax({ |
| | | url: baseUrl+"/work/stock/out/print", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: JSON.stringify({ |
| | | orderNo: orderNo |
| | | }), |
| | | contentType:'application/json;charset=UTF-8', |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | res.data["barcodeUrl"]=baseUrl+"/order/code/auth?type=1¶m="+res.data.docNum; |
| | | var tpl = $('#pakoutPrintTpl').html(); |
| | | var template = Handlebars.compile(tpl); |
| | | var html = template(res); |
| | | var box = $("#pakoutPrintBox"); |
| | | box.html(html);box.show(); |
| | | box.print({ |
| | | mediaPrint:true, |
| | | deferred: $.Deferred().done(function () { |
| | | layer.confirm('[重要] 打印是否成功?', {btn: ['Yes', 'No']}, function(){ |
| | | $.ajax({ |
| | | url: baseUrl+"/pakout/print/auth", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: { |
| | | docNumber: docNumber |
| | | }, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | layer.closeAll(); |
| | | $(".layui-laypage-btn")[0].click(); |
| | | layer.msg(res.msg, {icon: 1}) |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}) |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | }) |
| | | }); |
| | | box.hide(); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | </script> |
| | | |
| | | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../../static/js/jquery/jQuery.print.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/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/order/order.js" charset="utf-8"></script> |
| | | |
| | | </body> |
| | | <script type="text/template" id="pakoutPrintTpl"> |
| | | <!-- 头 --> |
| | | <div id="print-header" style="margin: 20px 0"> |
| | | <div style="text-align: center"> |
| | | <div style="text-align: center;margin-bottom: 10px"> |
| | | <span style="font-family: 宋体"> 拣货单 </span> |
| | | </div> |
| | | |
| | | <img class="template-code template-qrcode" src="{{data.barcodeUrl}}" style="width: 80%"> |
| | | <p style="letter-spacing: 2px;margin-top: 5px">{{data.docNum}}</p> |
| | | </div> |
| | | <div style="font-size: xx-small; text-align: left; margin-top: 10px"> |
| | | <span style="font-family: 宋体">客户:{{data.cstmrName}}</span> |
| | | </div> |
| | | <div style="margin-top: 10px"> |
| | | <div style="float: left;width: 50%; text-align: left"> |
| | | <span style="font-size: xx-small;font-family: 宋体">拣货数量:{{data.total}}</span> |
| | | </div> |
| | | <div style="float: left; width: 50%; text-align: right"> |
| | | <span style="font-size: xx-small;font-family: 宋体">拣货人:{{data.workerName}}</span> |
| | | </div> |
| | | <div style="clear:both;"></div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 主体 --> |
| | | <div style="margin-top: 10px"> |
| | | {{#each data.list}} |
| | | <div class="pakout-item" style="padding: 10px 5px 10px 5px;border-top: 1px solid #525252"> |
| | | <div class="item-header" style="margin-top: 10px;font-family: 宋体; font-size: x-small"> |
| | | {{maktx}} |
| | | </div> |
| | | <div class="item-content" style="margin: 10px 0 "> |
| | | <div style="float: left;font-family: 宋体; font-size: xx-small">{{anfme}}{{unit}}</div> |
| | | <div style="float: right;font-family: 宋体; font-size: xx-small">货位:{{locNo}}</div> |
| | | <div style="clear: both;"></div> |
| | | </div> |
| | | </div> |
| | | {{/each}} |
| | | </div> |
| | | </script> |
| | | </html> |
| | | |