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.entity.param.PakOutDTO; 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 param){ EntityWrapper wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); return R.ok(manPakOutService.selectPage(new Page<>(curr, limit), wrapper)); } @RequestMapping(value = "/ManPakOut/list/auth1") @ManagerAuth public R list1(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam Map param){ EntityWrapper wrapper = new EntityWrapper<>(); excludeTrash(param); convert1(param, wrapper); 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 param){ EntityWrapper wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); String docnum = String.valueOf(param.get("doc_num")); if (Cools.isEmpty(docnum) || docnum.equals("null")) { docnum = null; } Date stime = null; Date etime = null; if(param.get("create_time") != null){ String[] dates = param.get("create_time").toString().split(RANGE_TIME_LINK); stime = DateUtils.convert(dates[0]); etime = DateUtils.convert(dates[1]); } Long userId = getUserId(); if(getUser().getRoleId() == 2 || getUser().getRoleId() == 24){ userId = null; } String custName = Cools.isEmpty(param.get("cust_name")) ? "" : param.get("cust_name").toString(); List pakOutDTOS = manPakOutService.selectPakOut(docnum, stime, etime, curr, limit,userId,custName); for (PakOutDTO pakOutDTO:pakOutDTOS){ List manPakOuts = manPakOutService.selectList(new EntityWrapper().eq("doc_num", pakOutDTO.getDoc_num())); for (ManPakOut manPakOut:manPakOuts){ if (manPakOut.getCount() < manPakOut.getAnfme()){ pakOutDTO.setStatus(0); break; } } if (pakOutDTO.getStatus() == null){ pakOutDTO.setStatus(1); } } int count = manPakOutService.selectPakOutCount(docnum, stime, etime,curr, limit,userId,custName); Page page = new Page<>(); // 最后按状态未出库->已出库排序 // page.setRecords(pakOutDTOS.stream().sorted(Comparator.comparingInt(PakOutDTO::getStatus)).collect(Collectors.toList())); page.setRecords(pakOutDTOS); page.setTotal(count); return R.ok(page); } private void convert(Map map, EntityWrapper wrapper){ for (Map.Entry 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); } } } private void convert1(Map map, EntityWrapper wrapper){ for (Map.Entry 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.eq(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() .eq("order_no", param.getOrderNo()) ); if (Cools.isEmpty(order)){ return R.error("单据不存在"); } List orderDetls =orderDetlService.selectList(new EntityWrapper() .eq("order_no", param.getOrderNo()) ); if (Cools.isEmpty(orderDetls)){ return R.error("单据明细为空"); } for (OrderDetl orderDetl : orderDetls){ List manLocDetls=null; try{ if (Cools.isEmpty(orderDetl.getBatch())){ manLocDetls = manLocDetlService.selectList(new EntityWrapper() .eq("matnr",orderDetl.getMatnr()) ); }else { manLocDetls = manLocDetlService.selectList(new EntityWrapper() .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 manPakOuts = manPakOutService.selectList(new EntityWrapper() .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 manPakOuts = manPakOutService.selectList(new EntityWrapper() .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 wrapper = new EntityWrapper() .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()().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 wrapper = new EntityWrapper() .eq("loc_no", manPakOut.getLocNo()) .eq("matnr", manPakOut.getMatnr()); try{ if (Cools.isEmpty(manPakOut.getBatch())){ List manLocDetls = manLocDetlService.selectList(wrapper); Double anfme=manPakOut.getAnfme(); for (ManLocDetl manLocDetl:manLocDetls){ 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()() .eq("wrk_no", manPakOut.getWrkNo()) .eq("matnr", manPakOut.getMatnr())) :manPakOutService.selectOne(new EntityWrapper() .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() .eq("wrk_no", manPakOut.getWrkNo()) .eq("matnr", manPakOut.getMatnr())) :manPakOutService.update(out, new EntityWrapper() .eq("wrk_no", manPakOut.getWrkNo()) .eq("matnr", manPakOut.getMatnr()) .eq("batch",manPakOut.getBatch())); try { Order order = orderService.selectOne(new EntityWrapper().eq("order_no", manPakOut.getDocNum())); List pakOuts = manPakOutService.selectList(new EntityWrapper().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 orders = orderService.selectList(new EntityWrapper().eq("settle", 1L).or().eq("settle", 2L)); List orders1=new ArrayList(); 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 res = new ArrayList<>(); for (String orderNo : param){ res = manPakOutService.selectList(new EntityWrapper().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(); } }