| package com.zy.asrs.controller; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.baomidou.mybatisplus.mapper.Wrapper; | 
| import com.baomidou.mybatisplus.plugins.Page; | 
| import com.core.annotations.ManagerAuth; | 
| import com.core.common.*; | 
| import com.zy.asrs.entity.*; | 
| import com.zy.asrs.entity.param.OrderDomainParam; | 
| import com.zy.asrs.service.*; | 
| import com.zy.common.CodeRes; | 
| import com.zy.common.config.AdminInterceptor; | 
| import com.zy.common.utils.BarcodeUtils; | 
| import com.zy.common.utils.QrCode; | 
| 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.RequestBody; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RequestParam; | 
| import org.springframework.web.bind.annotation.RestController; | 
|   | 
| 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.Date; | 
| import java.util.List; | 
| import java.util.Map; | 
|   | 
| @RestController | 
| public class ManPakOutController extends BaseController { | 
|     @Autowired | 
|     private ManPakOutService manPakOutService; | 
|     @Autowired | 
|     private OrderDetlService orderDetlService; | 
|     @Autowired | 
|     private ManLocDetlService manLocDetlService; | 
|     @Autowired | 
|     private OrderService orderService; | 
|     @Autowired | 
|     private DocTypeService docTypeService; | 
|   | 
|     @RequestMapping(value = "/ManPakOut/list/auth") | 
|     @ManagerAuth | 
|     public R list(@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){ | 
|         EntityWrapper<ManPakOut> wrapper = new EntityWrapper<>(); | 
|         excludeTrash(param); | 
|         convert(param, wrapper); | 
|         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
|             wrapper.orderBy("create_time",false); | 
|         } | 
|         return R.ok(manPakOutService.selectPage(new Page<>(curr, limit), wrapper)); | 
|     } | 
|   | 
|     @RequestMapping(value = "/ManPakOut/detailed/auth") | 
|     //@ManagerAuth | 
|     public R detailed(@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){ | 
|         EntityWrapper<ManPakOut> wrapper = new EntityWrapper<>(); | 
|         excludeTrash(param); | 
|         convert(param, wrapper); | 
|         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
|             wrapper.orderBy("create_time",true); | 
|         } | 
|         wrapper.isNotNull("name"); | 
|   | 
|         Page<ManPakOut> manPakOutPage = manPakOutService.selectPage(new Page<>(curr, limit), wrapper); | 
|         manPakOutPage.getRecords().forEach(manPakOut -> { | 
|             if(manPakOut.getStatus() == 1){ | 
|   | 
|             } | 
|         }); | 
|         return R.ok(manPakOutPage); | 
|     } | 
|   | 
|     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ | 
|         for (Map.Entry<String, Object> entry : map.entrySet()){ | 
|             String val = String.valueOf(entry.getValue()); | 
|             if (val.contains(RANGE_TIME_LINK)){ | 
|                 String[] dates = val.split(RANGE_TIME_LINK); | 
|                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); | 
|                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); | 
|             } else { | 
|                 wrapper.like(entry.getKey(), val); | 
|             } | 
|         } | 
|     } | 
|   | 
|     @RequestMapping(value = "/ManPakOut/add/auth") | 
|     @ManagerAuth(memo = "生成拣货单") | 
|     @Transactional | 
|     public R manPakOutAdd(@RequestBody OrderDomainParam param){ | 
|         if (Cools.isEmpty(param)){ | 
|             return R.error("数据异常"); | 
|         } | 
|         if (!Cools.isEmpty(param.getOrderNo())){ | 
|             Order order = orderService.selectOne(new EntityWrapper<Order>() | 
|                     .eq("order_no", param.getOrderNo()) | 
|             ); | 
|             if (Cools.isEmpty(order)){ | 
|                 return R.error("单据不存在"); | 
|             } | 
|             List<OrderDetl> orderDetls =orderDetlService.selectList(new EntityWrapper<OrderDetl>() | 
|                     .eq("order_no", param.getOrderNo()) | 
|             ); | 
|             if (Cools.isEmpty(orderDetls)){ | 
|                 return R.error("单据明细为空"); | 
|             } | 
|             for (OrderDetl orderDetl : orderDetls){ | 
|                 List<ManLocDetl> manLocDetls=null; | 
|                 try{ | 
|                     if (Cools.isEmpty(orderDetl.getBatch())){ | 
|                         manLocDetls = manLocDetlService.selectList(new EntityWrapper<ManLocDetl>() | 
|                                 .eq("matnr",orderDetl.getMatnr()) | 
|                         ); | 
|                     }else { | 
|                         manLocDetls = manLocDetlService.selectList(new EntityWrapper<ManLocDetl>() | 
|                                 .eq("matnr",orderDetl.getMatnr()) | 
|                                 .eq("batch",orderDetl.getBatch()) | 
|                         ); | 
|                     } | 
|                 }catch (Exception e){ | 
|                     return R.error("添加拣货单失败"); | 
|                 } | 
|   | 
|                 if (!Cools.isEmpty(manLocDetls)){ | 
|                     for (ManLocDetl manLocDetl:manLocDetls){ | 
|                         Double statusAnfme = 0.0; | 
|                         if (Cools.isEmpty(manLocDetl.getStatus())){ | 
|                             manLocDetl.setStatus(1); | 
|                         } | 
|                         try{ | 
|                             if (manLocDetl.getStatus$().equals("禁用")){ | 
|                                 if (Cools.isEmpty(manLocDetl.getBatch())){ | 
|                                     List<ManPakOut> manPakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>() | 
|                                             .eq("loc_no", manLocDetl.getLocNo()) | 
|                                             .eq("matnr", manLocDetl.getMatnr()) | 
|                                             .eq("status",0) | 
|                                     ); | 
|                                     if (!Cools.isEmpty(manPakOuts)){ | 
|                                         for (ManPakOut manPakOut:manPakOuts){ | 
|                                             statusAnfme=statusAnfme+manPakOut.getAnfme(); | 
|                                         } | 
|                                     } | 
|                                 }else { | 
|                                     List<ManPakOut> manPakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>() | 
|                                             .eq("loc_no", manLocDetl.getLocNo()) | 
|                                             .eq("matnr", manLocDetl.getMatnr()) | 
|                                             .eq("batch",manLocDetl.getBatch()) | 
|                                             .eq("status",0) | 
|                                     ); | 
|                                     if (!Cools.isEmpty(manPakOuts)){ | 
|                                         for (ManPakOut manPakOut:manPakOuts){ | 
|                                             statusAnfme=statusAnfme+manPakOut.getAnfme(); | 
|                                         } | 
|                                     } | 
|                                 } | 
|                             } | 
|                         }catch (Exception e){ | 
|                             return R.error("查询库存禁用数量失败"); | 
|                         } | 
|                         Wrapper<ManLocDetl> wrapper = new EntityWrapper<ManLocDetl>() | 
|                                 .eq("loc_no", manLocDetl.getLocNo()) | 
|                                 .eq("matnr", manLocDetl.getMatnr()); | 
|                         if (orderDetl.getAnfme() > manLocDetl.getAnfme()-statusAnfme){ | 
|                             if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){ | 
|                                 manLocDetl.setStatus(0); | 
|                                 try{ | 
|                                     if (Cools.isEmpty(manLocDetl.getBatch())){ | 
|                                         manLocDetlService.update(manLocDetl,wrapper.eq("modi_time",manLocDetl.getModiTime())); | 
|                                     }else { | 
|                                         manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch())); | 
|                                     } | 
|                                 }catch (Exception e){ | 
|                                     return R.error("更新库存失败"); | 
|                                 } | 
|                                 orderDetl.setAnfme(orderDetl.getAnfme()-manLocDetl.getAnfme()); | 
|                             }else { | 
|                                 return R.error("添加拣货单失败"); | 
|                             } | 
|                         }else if (orderDetl.getAnfme()-manLocDetl.getAnfme()-statusAnfme==0){ | 
|                             if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){ | 
|                                 manLocDetl.setStatus(0); | 
|                                 try{ | 
|                                     if (Cools.isEmpty(manLocDetl.getBatch())){ | 
|                                         manLocDetlService.update(manLocDetl,wrapper.eq("modi_time",manLocDetl.getModiTime())); | 
|                                     }else { | 
|                                         manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch())); | 
|                                     } | 
|                                 }catch (Exception e){ | 
|                                     return R.error("更新库存失败"); | 
|                                 } | 
|                                 orderDetl.setAnfme(orderDetl.getAnfme()-manLocDetl.getAnfme()); | 
|                             }else { | 
|                                 return R.error("添加拣货单失败"); | 
|                             } | 
|                         }else if (orderDetl.getAnfme()<manLocDetl.getAnfme()-statusAnfme){ | 
|                             Double a=manLocDetl.getAnfme(); | 
|                             manLocDetl.setAnfme(orderDetl.getAnfme()); | 
|                             if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){ | 
|                                 orderDetl.setAnfme(orderDetl.getAnfme()-manLocDetl.getAnfme()); | 
|                                 manLocDetl.setStatus(0); | 
|                                 manLocDetl.setAnfme(a); | 
|                                 try{ | 
|                                     if (Cools.isEmpty(manLocDetl.getBatch())){ | 
|                                         manLocDetlService.update(manLocDetl,wrapper.eq("modi_time",manLocDetl.getModiTime())); | 
|                                     }else { | 
|                                         manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch())); | 
|                                     } | 
|                                 }catch (Exception e){ | 
|                                     return R.error("更新库存失败"); | 
|                                 } | 
|   | 
|                             }else { | 
|                                 return R.error("添加拣货单失败"); | 
|                             } | 
|                         }else { | 
|                             return R.error("系统出错,请联系管理员"); | 
|                         } | 
|                         if (orderDetl.getAnfme()==0){ | 
|                             break; | 
|                         } | 
|                     } | 
|                     if (orderDetl.getAnfme()!=0){ | 
|                         ManLocDetl manLocDetl=new ManLocDetl(); | 
|                         manLocDetl.setAnfme(0.0); | 
|                         manLocDetl.setMatnr(orderDetl.getMatnr()); | 
|                         manLocDetl.setMaktx(orderDetl.getMaktx()); | 
|                         manLocDetl.setMemo(orderDetl.getMemo()+"库存不足"); | 
|                         if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){ | 
|                             continue; | 
|                         }else { | 
|                             return R.error("添加拣货单失败"); | 
|                         } | 
|                     } | 
|                 }else { | 
|                     ManLocDetl manLocDetl=new ManLocDetl(); | 
|                     manLocDetl.setAnfme(0.0); | 
|                     manLocDetl.setMatnr(orderDetl.getMatnr()); | 
|                     manLocDetl.setMaktx(orderDetl.getMaktx()); | 
|                     manLocDetl.setMemo(orderDetl.getMemo()+"无库存"); | 
|                     if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){ | 
|                         continue; | 
|                     }else { | 
|                         return R.error("添加拣货单失败"); | 
|                     } | 
|                 } | 
|   | 
|   | 
|             } | 
|             orderService.updateSettle(order.getId(),(long)2,null); | 
|         }else { | 
|             return R.error("单据编号异常"); | 
|         } | 
|         return R.ok("拣货单添加成功"); | 
|     } | 
|     private R addPakOUT(ManLocDetl manLocDetl,String OrderNo){ | 
|         ManPakOut manPakOut=new ManPakOut(); | 
|         manPakOut.setWrkNo(OrderNo+"-"+System.currentTimeMillis()); | 
|         manPakOut.setWrkSts((long)1); | 
|         manPakOut.setAnfme(manLocDetl.getAnfme()); | 
|         manPakOut.setLocNo(manLocDetl.getLocNo()); | 
|         manPakOut.setNodeId(manLocDetl.getNodeId()); | 
|         manPakOut.setMatnr(manLocDetl.getMatnr()); | 
|         manPakOut.setMaktx(manLocDetl.getMaktx()); | 
|         manPakOut.setSpecs(manLocDetl.getSpecs()); | 
|         manPakOut.setUnit(manLocDetl.getUnit()); | 
|         manPakOut.setBarcode(manLocDetl.getBarcode()); | 
|         manPakOut.setDocNum(OrderNo); | 
|         manPakOut.setStatus(0); | 
|         manPakOut.setCreateTime(new Date()); | 
|         if (!Cools.isEmpty(manLocDetl.getBatch())){ | 
|             manPakOut.setBatch(manLocDetl.getBatch()); | 
|             manPakOut.setUpdateTime(new Date()); | 
|         }else { | 
|             manPakOut.setUpdateTime(manLocDetl.getModiTime());//用于识别货物 | 
|         } | 
|   | 
|         manPakOut.setMemo(manLocDetl.getMemo()); | 
|         if (Cools.isEmpty(manPakOutService.selectOne(new EntityWrapper<ManPakOut>().eq("doc_num",OrderNo)))){ | 
|             manPakOut.setName(manLocDetl.getMaktx()); | 
|         } | 
|         try{ | 
|             if (!manPakOutService.insert(manPakOut)){ | 
|                 return R.error("添加拣货明细失败,请联系管理员"); | 
|             } | 
|         }catch (Exception e){ | 
|             return R.error("添加拣货明细失败,请联系管理员"); | 
|         } | 
|         return R.ok(); | 
|   | 
|     } | 
|   | 
|     @RequestMapping("/manPakOut/finish") | 
|     public R finish(@RequestBody ManPakOut manPakOut){ | 
|         Wrapper<ManLocDetl> wrapper = new EntityWrapper<ManLocDetl>() | 
|                 .eq("loc_no", manPakOut.getLocNo()) | 
|                 .eq("matnr", manPakOut.getMatnr()); | 
|         try{ | 
|             if (Cools.isEmpty(manPakOut.getBatch())){ | 
|                 List<ManLocDetl> manLocDetls = manLocDetlService.selectList(wrapper); | 
|                 Double anfme=manPakOut.getAnfme(); | 
|                 for (ManLocDetl manLocDetl:manLocDetls){ | 
|                     if (anfme<manLocDetl.getAnfme()){ | 
|                         manLocDetl.setAnfme(manLocDetl.getAnfme()-anfme); | 
|                         manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch())); | 
|                         anfme=0.0; | 
|                     }else if (anfme>=manLocDetl.getAnfme()){ | 
|                         manLocDetlService.delete(wrapper.eq("batch",manLocDetl.getBatch())); | 
|                         anfme=anfme-manLocDetl.getAnfme(); | 
|                     } | 
|                     if (anfme==0.0){ | 
|                         break; | 
|                     } | 
|                 } | 
|             }else { | 
|                 ManLocDetl manLocDetl = manLocDetlService.selectOne(wrapper.eq("batch", manPakOut.getBatch())); | 
|                 if (manPakOut.getAnfme()<manLocDetl.getAnfme()){ | 
|                     manLocDetl.setAnfme(manLocDetl.getAnfme()-manPakOut.getAnfme()); | 
|                     manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch())); | 
|                 }else if (manPakOut.getAnfme()-manLocDetl.getAnfme()==0){ | 
|                     manLocDetlService.delete(wrapper.eq("batch",manLocDetl.getBatch())); | 
|                 } | 
|             } | 
|         }catch (Exception e){ | 
|             return R.error("更新库存数量失败"); | 
|         } | 
|   | 
|   | 
|         ManPakOut out = Cools.isEmpty(manPakOut.getBatch())? manPakOutService.selectOne(new EntityWrapper<ManPakOut>() | 
|                 .eq("wrk_no", manPakOut.getWrkNo()) | 
|                 .eq("matnr", manPakOut.getMatnr())) | 
|                 :manPakOutService.selectOne(new EntityWrapper<ManPakOut>() | 
|                 .eq("wrk_no", manPakOut.getWrkNo()) | 
|                 .eq("matnr", manPakOut.getMatnr()) | 
|                 .eq("batch",manPakOut.getBatch())); | 
|         out.setWrkSts(manPakOut.getWrkSts()); | 
|         out.setZpallet(manPakOut.getZpallet()); | 
|         out.setAnfme(manPakOut.getAnfme()); | 
|         out.setNodeId(manPakOut.getNodeId()); | 
|         out.setLocNo(manPakOut.getLocNo()); | 
|         out.setMatnr(manPakOut.getMatnr()); | 
|         out.setMaktx(manPakOut.getMaktx()); | 
|         out.setBatch(manPakOut.getBatch()); | 
|         out.setStatus(manPakOut.getStatus()); | 
|         boolean update =Cools.isEmpty(manPakOut.getBatch())? manPakOutService.update(out, new EntityWrapper<ManPakOut>() | 
|                 .eq("wrk_no", manPakOut.getWrkNo()) | 
|                 .eq("matnr", manPakOut.getMatnr())) | 
|                 :manPakOutService.update(out, new EntityWrapper<ManPakOut>() | 
|                 .eq("wrk_no", manPakOut.getWrkNo()) | 
|                 .eq("matnr", manPakOut.getMatnr()) | 
|                 .eq("batch",manPakOut.getBatch())); | 
|         try { | 
|             Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", manPakOut.getDocNum())); | 
|             List<ManPakOut> pakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>().eq("doc_num", order.getOrderNo())); | 
|             if (Cools.isEmpty(pakOuts)){ | 
|                 return R.error("查询拣货单明细失败"); | 
|             }else { | 
|                 Long settle = order.getSettle(); | 
|                 for (ManPakOut pakOut:pakOuts){ | 
|                     if (pakOut.getStatus()==0 || pakOut.getStatus()==8){ | 
|                         order.setSettle(settle); | 
|                         break; | 
|                     }else { | 
|                         order.setSettle(4L); | 
|                     } | 
|                 } | 
|             } | 
|             orderService.updateSettle(order.getId(),order.getSettle(),(long)9527); | 
|         }catch (Exception e){ | 
|             return R.error("更新订单状态失败"); | 
|         } | 
|         return update? R.ok("更新成功") : R.error("更新失败"); | 
|     } | 
|   | 
|     @RequestMapping("/manPakOut/notIssued") | 
|     public R notIssued(){ | 
|         List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 1L).or().eq("settle", 2L)); | 
|         List<Order> orders1=new ArrayList<Order>(); | 
|         try { | 
|             for (Order order:orders){ | 
|                 DocType docType = docTypeService.selectById(order.getDocType()); | 
|                 if (docType.getPakout()==1){ | 
|                     orders1.add(order); | 
|                 } | 
|             } | 
|         }catch (Exception e){ | 
|             return R.error("获取订单状态失败"); | 
|         } | 
|         return R.ok(orders1); | 
|     } | 
|   | 
|     public static void main(String[] args) { | 
|         ManPakOutService bean = SpringUtils.getBean(ManPakOutService.class); | 
|         ManPakOut out = bean.selectOne(null); | 
|         System.out.println("JSON.toJSONString(out) = " + JSON.toJSONString(out)); | 
|     } | 
|   | 
|     @RequestMapping(value = "/ManPakOut/print/auth") | 
|     @ManagerAuth(memo = "订单编码打印") | 
|     public R manPakOutPrint(@RequestParam(value = "param[]") String[] param) { | 
|         if(Cools.isEmpty(param)) { | 
|             return R.parse(CodeRes.EMPTY); | 
|         } | 
|         List<ManPakOut> res = new ArrayList<>(); | 
|         for (String orderNo : param){ | 
|             res = manPakOutService.selectList(new EntityWrapper<ManPakOut>().eq("doc_num", orderNo)); | 
|         } | 
|         return R.ok().add(res); | 
|     } | 
|     @RequestMapping(value = "/ManPakOut/code/auth") | 
| //    @ManagerAuth(memo = "物料编码条形码获取(type:1(条形码);2(二维码)") | 
|     public R manPakOutCodeBarcode(@RequestParam(defaultValue = "2") 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("/node/order/pakout") | 
|     public R nodeOrderPakout(@RequestParam String locType){ | 
|         return R.ok(manPakOutService.pakoutByLocType(locType)); | 
|     } | 
| } |