| | |
| | | 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.entity.OrderDetl; |
| | | import zy.cloud.wms.manager.entity.Wave; |
| | | import zy.cloud.wms.manager.entity.WaveDetl; |
| | | import zy.cloud.wms.manager.service.OrderDetlService; |
| | | import zy.cloud.wms.manager.service.OrderService; |
| | | import zy.cloud.wms.manager.service.WaveDetlService; |
| | | import zy.cloud.wms.manager.service.WaveService; |
| | | import zy.cloud.wms.manager.entity.*; |
| | | import zy.cloud.wms.manager.entity.dto.OrderDetlDTO; |
| | | import zy.cloud.wms.manager.entity.param.StockOutParam; |
| | | import zy.cloud.wms.manager.service.*; |
| | | import zy.cloud.wms.manager.utils.AddZero; |
| | | |
| | | import javax.imageio.ImageIO; |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | private WaveService waveService; |
| | | @Autowired |
| | | private WaveDetlService waveDetlService; |
| | | @Autowired |
| | | private PickoutService pickoutService; |
| | | @Autowired |
| | | private PickoutDetlService pickoutDetlService; |
| | | @Autowired |
| | | private LocDetlService locDetlService; |
| | | |
| | | |
| | | @RequestMapping(value = "/order/{id}/auth") |
| | | @ManagerAuth |
| | |
| | | excludeTrash(param); |
| | | convert(param, wrapper); |
| | | hostEq(wrapper); |
| | | if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} |
| | | else { |
| | | wrapper.orderBy("update_time", false); |
| | | if (!Cools.isEmpty(orderByField)){ |
| | | wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); |
| | | } |
| | | return R.ok(orderService.selectPage(new Page<>(curr, limit), wrapper)); |
| | | else { |
| | | wrapper.orderBy("create_time",false); |
| | | } |
| | | |
| | | Page<Order> orderPage = orderService.selectPage(new Page<>(curr, limit), wrapper); |
| | | return R.ok(orderPage); |
| | | } |
| | | |
| | | private void convert(Map<String, Object> map, EntityWrapper wrapper){ |
| | |
| | | @ManagerAuth |
| | | @Transactional |
| | | public R deleteBatch(@RequestParam(value = "ids[]") Long[] ids){ |
| | | if (Cools.isEmpty((Object) ids)){ |
| | | return R.error(); |
| | | } |
| | | for (Long id : ids){ |
| | | if (!orderService.deleteById(id)) { |
| | | throw new CoolException("服务器错误,请联系管理员"); |
| | | /*** |
| | | * 控管 |
| | | */ |
| | | for (Long id : ids) { |
| | | Order target = orderService.selectOne(new EntityWrapper<Order>() |
| | | .eq("id", id)); |
| | | if (target.getSettle() == 0 || target.getSettle() == 1) { |
| | | orderService.deleteById(id); |
| | | orderDetlService.delete(new EntityWrapper<OrderDetl>() |
| | | .eq("order_id",id)); |
| | | }else { |
| | | throw new CoolException("仅允许删除'初始化','待处理'状态的订单"); |
| | | } |
| | | |
| | | } |
| | | return R.ok(); |
| | | } |
| | |
| | | */ |
| | | @RequestMapping("/orders/wave/auth") |
| | | @ManagerAuth |
| | | @Transactional |
| | | public R createWave(@RequestBody List<Order> orders){ |
| | | /** |
| | | * 控管 |
| | | * 控管与初始化 |
| | | */ |
| | | Integer seqNo = 1; |
| | | for (Order order : orders) { |
| | | if (order.getSettle() != 2L) { |
| | | return R.error("仅支持'未拣货'状态生成波次"); |
| | | if (order.getSettle() != 1L) { |
| | | return R.error("仅支持'待处理'状态生成波次"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 生成波次表头 |
| | | */ |
| | | |
| | | Wave wave = new Wave(); |
| | | wave.setHostId(getHostId()); |
| | | String s = UUID.randomUUID().toString().replace("-",""); |
| | | wave.setUuid(s); |
| | | String waveNo = "wave-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); |
| | | wave.setWaveNo(waveNo); |
| | | String waveNo = "WAVE-" + new SimpleDateFormat("yyyyMMdd").format(new Date())+"-"; |
| | | String currNum = waveService.getCurrNum(waveNo); |
| | | if (!Cools.isEmpty(currNum)) { |
| | | String[] split = currNum.split("-"); |
| | | if (split.length < 3){ |
| | | wave.setWaveNo(waveNo + "0001"); |
| | | } else { |
| | | Integer newNum = Integer.parseInt(split[2]) + 1; |
| | | String format = AddZero.addZeroForNum(newNum + "", 4); |
| | | wave.setWaveNo(waveNo + format); |
| | | } |
| | | }else { |
| | | wave.setWaveNo(waveNo + "0001"); |
| | | } |
| | | |
| | | wave.setOrdersQty(orders.size()); |
| | | wave.setStatus((short) 0); |
| | | wave.setCreateBy(getUserId()); |
| | |
| | | List<OrderDetl> allOrderDetls = orderDetlService.selectBatchByOrderNo(orders); |
| | | for (OrderDetl allOrderDetl : allOrderDetls) { |
| | | WaveDetl checkWaveDetl = waveDetlService.selectOne(new EntityWrapper<WaveDetl>() |
| | | .eq("wave_id",wave.getId()) |
| | | .eq("matnr", allOrderDetl.getMatnr()) |
| | | .eq("batch", allOrderDetl.getBatch())); |
| | | if (Cools.isEmpty(checkWaveDetl)) { |
| | |
| | | waveDetl.setAnfme(allOrderDetl.getAnfme()); |
| | | waveDetl.setMatnr(allOrderDetl.getMatnr()); |
| | | waveDetl.setMaktx(allOrderDetl.getMaktx()); |
| | | waveDetl.setSpecs(allOrderDetl.getSpecs()); |
| | | waveDetl.setModel(allOrderDetl.getModel()); |
| | | waveDetl.setUnit(allOrderDetl.getUnit()); |
| | | waveDetl.setStatus(0); |
| | | waveDetl.setBatch(allOrderDetl.getBatch()); |
| | | waveDetl.setCreateBy(getUserId()); |
| | |
| | | waveDetlService.insert(waveDetl); |
| | | }else { |
| | | checkWaveDetl.setOrderQty(checkWaveDetl.getOrderQty()+1); |
| | | checkWaveDetl.setOrderNos(checkWaveDetl.getOrderNos() + "-split-" +allOrderDetl.getOrderNo()); |
| | | checkWaveDetl.setOrderNos(checkWaveDetl.getOrderNos() + "," +allOrderDetl.getOrderNo()); |
| | | checkWaveDetl.setAnfme(checkWaveDetl.getAnfme() + allOrderDetl.getAnfme()); |
| | | waveDetlService.update(checkWaveDetl,new EntityWrapper<WaveDetl>() |
| | | .eq("id",checkWaveDetl.getId())); |
| | | } |
| | | } |
| | | System.out.println("done"); |
| | | return null; |
| | | |
| | | /** |
| | | * 控管,出过BUG,只生成表头,不生成表身 |
| | | */ |
| | | if (Cools.isEmpty(allOrderDetls)) { |
| | | waveService.delete(new EntityWrapper<Wave>() |
| | | .eq("id",wave.getId())); |
| | | throw new CoolException("找不到出库单细节,请联系管理员"); |
| | | } |
| | | /** |
| | | * 反写出库单表头 |
| | | */ |
| | | for (Order order : orders) { |
| | | order.setWaveNo(wave.getWaveNo()); |
| | | order.setSettle(11L); |
| | | orderService.update(order,new EntityWrapper<Order>() |
| | | .eq("id",order.getId())); |
| | | } |
| | | return R.ok("已生成波次"); |
| | | } |
| | | |
| | | /** |
| | | * 通过批号订单中包含的出库单 |
| | | */ |
| | | |
| | | @RequestMapping("/order/orderByWave/auth") |
| | | @ManagerAuth |
| | | public R getOrderDetailByWave(@RequestParam(defaultValue = "1")Integer curr, |
| | | @RequestParam(defaultValue = "10")Integer limit, |
| | | @RequestParam(required = false)String orderByField, |
| | | @RequestParam(required = false)String orderByType, |
| | | @RequestParam Map<String, Object> param, |
| | | String research){ |
| | | EntityWrapper<Wave> wrapper = new EntityWrapper<>(); |
| | | excludeTrash(param); |
| | | convert(param, wrapper); |
| | | hostEq(wrapper); |
| | | wrapper.orderBy("create_time",false); |
| | | List<Wave> waves = waveService.selectList(wrapper); |
| | | if (Cools.isEmpty(waves)) { |
| | | throw new CoolException("找不到该波次"); |
| | | } |
| | | |
| | | HashSet<String> allOrders = new HashSet<>(); |
| | | for (Wave wave : waves) { |
| | | List<WaveDetl> waveDetls = waveDetlService.selectList(new EntityWrapper<WaveDetl>() |
| | | .eq("wave_id", wave.getId())); |
| | | for (WaveDetl waveDetl : waveDetls) { |
| | | String[] split = waveDetl.getOrderNos().split(","); |
| | | for (String s : split) { |
| | | allOrders.add(s); |
| | | } |
| | | } |
| | | } |
| | | ArrayList<String> allOrdersList = new ArrayList<>(allOrders); |
| | | EntityWrapper<OrderDetl> orderDetailWrapper = new EntityWrapper<>(); |
| | | for (int i = 0; i < allOrdersList.size(); i++) { |
| | | String s = allOrdersList.get(i); |
| | | if (i == 0){ |
| | | orderDetailWrapper |
| | | .eq("order_no",s); |
| | | }else { |
| | | orderDetailWrapper |
| | | .or() |
| | | .eq("order_no",s); |
| | | } |
| | | } |
| | | if (!Cools.isEmpty(research)) { |
| | | orderDetailWrapper.eq("order_no",research); |
| | | } |
| | | Page<OrderDetl> orderDetlPage = orderDetlService.selectPage(new Page<>(curr, limit),orderDetailWrapper); |
| | | return R.ok(orderDetlPage); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 开始播种,更新订单细节,减少库存量 |
| | | * @param orderDetls |
| | | * @return |
| | | */ |
| | | @RequestMapping("/order/waveBack") |
| | | public R waveBack(@RequestBody OrderDetlDTO orderDetls){ |
| | | /** |
| | | * 控管与初始化 |
| | | */ |
| | | if (Cools.isEmpty(orderDetls.getOrderDetls())) { |
| | | |
| | | throw new CoolException("未收到有效播种信息,请联系管理员"); |
| | | } |
| | | |
| | | /** |
| | | * 更新原出库单,根据拣货单来减去库存 |
| | | */ |
| | | for (OrderDetl newOne : orderDetls.getOrderDetls()) { |
| | | Order order = orderService.selectOne(new EntityWrapper<Order>() |
| | | .eq("id", newOne.getOrderId())); |
| | | Pickout pickout = pickoutService.selectOne(new EntityWrapper<Pickout>() |
| | | .eq("wave_no", order.getWaveNo())); |
| | | OrderDetl oldOne = orderDetlService.selectOne(new EntityWrapper<OrderDetl>() |
| | | .eq("id", newOne.getId())); |
| | | /** |
| | | * 计算出差值,减去库存 |
| | | */ |
| | | double diffValue = newOne.getOutQty() - oldOne.getOutQty(); |
| | | if (diffValue !=0) { |
| | | /** |
| | | * 获取拣货单分配的库位 |
| | | */ |
| | | List<PickoutDetl> pickoutDetls = pickoutDetlService.selectList(new EntityWrapper<PickoutDetl>() |
| | | .eq("head_id", pickout.getId()) |
| | | .eq("matnr", newOne.getMatnr())); |
| | | /** |
| | | * 通过拣货单分配的库位,遍历库存, |
| | | */ |
| | | for (PickoutDetl pickoutDetl : pickoutDetls) { |
| | | if (diffValue == 0) break; |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>() |
| | | .eq("node_id", pickoutDetl.getNodeId()) |
| | | .eq("matnr",newOne.getMatnr())); |
| | | if (Cools.isEmpty(locDetl) || locDetl.getAnfme() == 0) { |
| | | continue; |
| | | } |
| | | if (locDetl.getAnfme() > diffValue){ |
| | | locDetl.setAnfme(locDetl.getAnfme() - diffValue); |
| | | locDetlService.update(locDetl, new EntityWrapper<LocDetl>() |
| | | .eq("node_id",locDetl.getNodeId() ) |
| | | .eq("matnr",locDetl.getMatnr())); |
| | | break; |
| | | } |
| | | if (locDetl.getAnfme() < diffValue){ |
| | | locDetl.setAnfme(0.0); |
| | | diffValue = diffValue - locDetl.getAnfme(); |
| | | locDetlService.update(locDetl, new EntityWrapper<LocDetl>() |
| | | .eq("node_id",locDetl.getNodeId() ) |
| | | .eq("matnr",locDetl.getMatnr())); |
| | | } |
| | | |
| | | } |
| | | orderDetlService.update(newOne, new EntityWrapper<OrderDetl>() |
| | | .eq("id", newOne.getId() )); |
| | | } |
| | | Boolean result = orderDetlService.checkFinish(order.getId()); |
| | | if (result) { |
| | | orderDetlService.finishOrder(order.getId()); |
| | | } |
| | | } |
| | | return R.ok("播种成功"); |
| | | } |
| | | } |