| | |
| | | @Select("SELECT SUM(anfme) FROM agv_loc_detl WHERE loc_no = #{locNo}") |
| | | Double sumByLocNo(@Param("locNo")String locNo); |
| | | |
| | | @Select("SELECT SUM(anfme) FROM agv_loc_detl WHERE matnr = #{matnr}") |
| | | Double sumByMatnr(@Param("matnr")String matnr); |
| | | |
| | | int updateAnfme(@Param("locNo")String locNo, @Param("anfme")Double anfme, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); |
| | | |
| | | int deleteLocDetl(@Param("locNo")String locNo, @Param("anfme")Double anfme, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); |
| | |
| | | |
| | | public Double selectSumAnfmeByLocNo(String locNo); |
| | | |
| | | public Double selectSumAnfmeByMatnr(String matnr); |
| | | |
| | | public AgvLocDetl selectLocdetl(String locNo,String matnr,String batch,String csocode,String isocode); |
| | | |
| | | public void compareToEss(MultipartFile file) throws IOException; |
| | |
| | | |
| | | List<String> selectLocNo(String matnr); |
| | | |
| | | Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode); |
| | | Set<String> selectLocNos(String matnr); |
| | | |
| | | LocDetl selectByContainerCode(String containerCode); |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Double selectSumAnfmeByMatnr(String matnr) { |
| | | return this.baseMapper.sumByMatnr(matnr); |
| | | } |
| | | |
| | | @Override |
| | | public AgvLocDetl selectLocdetl(String locNo, String matnr, String batch, String csocode, String isocode) { |
| | | return this.baseMapper.selectLocdetl(locNo,matnr,batch,csocode,isocode); |
| | | } |
| | |
| | | @Value("${agv.containerArrivedPath}") |
| | | private String containerArrivedPath; |
| | | |
| | | @Value("${agvBasDev.maxWorkNum}") |
| | | private int maxWrokNum; |
| | | |
| | | @Autowired |
| | | AgvWrkMastMapper agvWrkMastMapper; |
| | | @Autowired |
| | |
| | | } |
| | | |
| | | public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException { |
| | | |
| | | //任务过滤,过滤掉已存在相同目标库位的工作档 |
| | | agvWrkMastList = filter(agvWrkMastList); |
| | | |
| | | AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); |
| | | agvTaskCreateParam.setTaskType(taskType); |
| | |
| | | return this.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",containerCode)); |
| | | } |
| | | |
| | | private List<AgvWrkMast> filter(List<AgvWrkMast> agvWrkMastList){ |
| | | return agvWrkMastList.stream().filter(agvWrkMast -> { |
| | | int num = this.selectCount(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvWrkMast.getLocNo())); |
| | | return num <= maxWrokNum; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | |
| | | private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ |
| | | //往容器入场参数中放入源站点位置 |
| | | for(AgvWrkMast agvWrkMast : agvWrkMastList){ |
| | |
| | | return this.baseMapper.selectLocNo(matnr); |
| | | } |
| | | |
| | | public Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode) { |
| | | public Set<String> selectLocNos(String matnr) { |
| | | |
| | | Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr); |
| | | Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode); |
| | | //Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode); |
| | | List<LocDetl> locDetls = this.selectList(wrapper); |
| | | |
| | | Set<String> locNos = new HashSet<>(); |
| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.DocType; |
| | | import com.zy.asrs.entity.Mat; |
| | | import com.zy.asrs.entity.Order; |
| | | import com.zy.asrs.service.AgvLocDetlService; |
| | | import com.zy.asrs.service.DocTypeService; |
| | | import com.zy.asrs.service.MatService; |
| | | import com.zy.asrs.service.OrderService; |
| | |
| | | private AutoReplenishmentHandler autoReplenishmentHandler; |
| | | @Autowired |
| | | private MatService matService; |
| | | @Autowired |
| | | private AgvLocDetlService agvLocDetlService; |
| | | |
| | | /* |
| | | 定时便利库存,生成自动补货单据 |
| | | */ |
| | | //@Scheduled(cron = "0/5 * * * * ? ") |
| | | public void createOrder(){ |
| | | //检测是否有未完成的补货单据 |
| | | DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "自动补货单")); |
| | | int count = orderService.selectCount(new EntityWrapper<Order>() |
| | | .eq("doc_type", docType.getDocId()) |
| | | .andNew().eq("settle",2) |
| | | .or("settle",1)); |
| | | if(count > 0){ |
| | | return; |
| | | } |
| | | |
| | | //查询所有需要补货的物料 |
| | | List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().eq(false, "store_min", 0)); |
| | | if(!Cools.isEmpty(matList)){ |
| | | for (Mat mat : matList){ |
| | | //查询当前物料是否在agv库小于库存上限 |
| | | Double anfmeSum = agvLocDetlService.selectSumAnfmeByMatnr(mat.getMatnr()); |
| | | if(anfmeSum < mat.getStoreMin()){ |
| | | autoReplenishmentHandler.create(mat,mat.getStoreMax() - anfmeSum); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* |
| | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.SnowflakeIdWorker; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | |
| | | private WrkDetlService wrkDetlService; |
| | | @Autowired |
| | | private OrderService orderService; |
| | | @Autowired |
| | | private SnowflakeIdWorker snowflakeIdWorker; |
| | | |
| | | |
| | | @Transactional |
| | | public ReturnT<String> create(Mat mat, double anfme) { |
| | | //创建一个新的自动补货单据 |
| | | Order order = createOrder(); |
| | | OrderDetl orderDetl = createOrderDetl(order); |
| | | orderDetl.setMatnr(mat.getMatnr()); |
| | | orderDetl.setMaktx(mat.getMaktx()); |
| | | orderDetl.setSpecs(mat.getSpecs()); |
| | | orderDetl.setAnfme(anfme); |
| | | orderDetl.setQty(0.0); |
| | | |
| | | orderService.insert(order); |
| | | orderDetlService.insert(orderDetl); |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> start(Order order) { |
| | |
| | | order.setSettle(2L); |
| | | orderService.updateById(order); |
| | | |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | private Order createOrder(){ |
| | | Date now = new Date(); |
| | | return new Order( |
| | | String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] |
| | | "AUTO" + snowflakeIdWorker.nextId(), // 订单编号 |
| | | DateUtils.convert(now), // 单据日期 |
| | | 21L, // 单据类型 21.自动补货单 |
| | | null, // 项目编号 |
| | | null, // |
| | | null, // 调拨项目编号 |
| | | null, // 初始票据号 |
| | | null, // 票据号 |
| | | null, // 客户编号 |
| | | null, // 客户 |
| | | null, // 联系方式 |
| | | null, // 操作人员 |
| | | null, // 合计金额 |
| | | null, // 优惠率 |
| | | null, // 优惠金额 |
| | | null, // 销售或采购费用合计 |
| | | null, // 实付金额 |
| | | null, // 付款类型 |
| | | null, // 业务员 |
| | | null, // 结算天数 |
| | | null, // 邮费支付类型 |
| | | null, // 邮费 |
| | | null, // 付款时间 |
| | | null, // 发货时间 |
| | | null, // 物流名称 |
| | | null, // 物流单号 |
| | | 1L, // 订单状态 |
| | | 1, // 状态 |
| | | 9999L, // 添加人员 |
| | | now, // 添加时间 |
| | | 9999L, // 修改人员 |
| | | now, // 修改时间 |
| | | null // 备注 |
| | | ); |
| | | |
| | | } |
| | | |
| | | private OrderDetl createOrderDetl(Order order){ |
| | | Date now = new Date(); |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | |
| | | orderDetl.setOrderId(order.getId()); |
| | | orderDetl.setOrderNo(order.getOrderNo()); |
| | | orderDetl.setCreateBy(order.getCreateBy()); |
| | | orderDetl.setCreateTime(now); |
| | | orderDetl.setUpdateBy(order.getCreateBy()); |
| | | orderDetl.setUpdateTime(now); |
| | | orderDetl.setStatus(1); |
| | | orderDetl.setQty(0.0D); |
| | | |
| | | return orderDetl; |
| | | } |
| | | |
| | | private Set<String> pakoutLoc(Order order){ |
| | |
| | | } |
| | | |
| | | String matnr = orderDetl.getMatnr(); |
| | | String batch = orderDetl.getBatch(); |
| | | String csocode = orderDetl.getThreeCode(); |
| | | String isocode = orderDetl.getDeadTime(); |
| | | |
| | | Double orderAnfme = orderDetl.getAnfme(); |
| | | double orderAnfme = orderDetl.getAnfme(); |
| | | |
| | | //List<String> locNosSearch = locDetlService.selectLocNo(matnr); |
| | | Set<String> locNosSearch = locDetlService.selectLocNo(matnr, batch, csocode, isocode); |
| | | Set<String> locNosSearch = locDetlService.selectLocNos(matnr); |
| | | |
| | | //重新排序 并且检测该库位是否含没有料箱码的物料,如有有则不允许出库 |
| | | Set<String> resort = resort(locNosSearch); |
| | |
| | | for (LocDetl locDetl :locDetls){ |
| | | if(matnr.equals(locDetl.getMatnr())){ |
| | | orderAnfme -= locDetl.getAnfme(); |
| | | }else { |
| | | OrderDetl odNew = createOrderDetl(order); |
| | | odNew.setMatnr(locDetl.getMatnr()); |
| | | odNew.setMaktx(locDetl.getMaktx()); |
| | | odNew.setBatch(locDetl.getBatch()); |
| | | odNew.setThreeCode(locDetl.getThreeCode()); |
| | | odNew.setDeadTime(locDetl.getDeadTime()); |
| | | odNew.setSpecs(locDetl.getSpecs()); |
| | | odNew.setAnfme(0.0); |
| | | odNew.setQty(locDetl.getAnfme()); |
| | | orderDetlService.insert(odNew); |
| | | } |
| | | } |
| | | if(orderAnfme <= 0){ |
| | |
| | | orderDetlService.updateById(orderDetl); |
| | | break; |
| | | } |
| | | } |
| | | if(orderAnfme > 0){ |
| | | orderDetl.setAnfme(orderDetl.getAnfme() - orderAnfme); |
| | | orderDetl.setQty(orderDetl.getAnfme()); |
| | | orderDetlService.updateById(orderDetl); |
| | | } |
| | | } |
| | | |
| | |
| | | //wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | |
| | | //补货标识 |
| | | wrkMast.setMk("Y"); |
| | | if (!wrkMastService.insert(wrkMast)) { |
| | | throw new CoolException("保存工作档失败,出库库位号:"+locNo); |
| | |
| | | // ,{field: 'barcode', align: 'center',title: '条码', hide: true} |
| | | // ,{field: 'manu', align: 'center',title: '厂家', hide: true} |
| | | // ,{field: 'itemNum', align: 'center',title: '品项数', hide: true} |
| | | // ,{field: 'safeQty', align: 'center',title: '安全库存量', hide: true} |
| | | ,{field: 'safeQty', align: 'center',title: '安全库存量', hide: true} |
| | | // ,{field: 'length', align: 'center',title: '单箱毛重', hide: true} |
| | | // ,{field: 'volume', align: 'center',title: '单箱体积', hide: true} |
| | | // ,{field: 'threeCode', align: 'center',title: '箱子尺寸', hide: true} |