| | |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.AdjDetl; |
| | | import com.zy.asrs.entity.AgvLocDetl; |
| | | import com.zy.asrs.entity.AgvLocMast; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.entity.param.LocMastInitParam; |
| | | import com.zy.asrs.service.AdjDetlService; |
| | | import com.zy.asrs.service.AgvLocDetlService; |
| | |
| | | |
| | | @RequestMapping(value = "/locMast/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){ |
| | | 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) { |
| | | excludeTrash(param); |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | convert1(param, wrapper); |
| | | if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} |
| | | return R.ok(agvLockMastService.selectPage(new Page<>(curr, limit), wrapper.eq("status",0))); |
| | | if (!Cools.isEmpty(orderByField)) { |
| | | wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); |
| | | } |
| | | return R.ok(agvLockMastService.selectPage(new Page<>(curr, limit), wrapper.eq("status", 0))); |
| | | } |
| | | |
| | | @RequestMapping(value = "/locMast/add/auth") |
| | |
| | | @RequestMapping(value = "/locMast/update/auth") |
| | | @ManagerAuth(memo = "库位修改") |
| | | @Transactional |
| | | public R update(AgvLocMast locMast){ |
| | | if (Cools.isEmpty(locMast) || null==locMast.getLocNo()){ |
| | | public R update(AgvLocMast locMast) { |
| | | if (Cools.isEmpty(locMast) || null == locMast.getLocNo()) { |
| | | return R.error("参数缺失"); |
| | | } |
| | | AgvWrkMast wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() |
| | | .eq("source_loc_no", locMast.getLocNo()) |
| | | .or().eq("loc_no", locMast.getLocNo())); |
| | | if(!Cools.isEmpty(wrkMast)){ |
| | | return R.error("该库位正在作业,请先处理工作档"); |
| | | if (!Cools.isEmpty(wrkMast)) { |
| | | return R.error("该库位正在作业,请先处理工作档"); |
| | | } |
| | | AgvLocMast oldLocMast = agvLockMastService.selectById(locMast.getLocNo()); |
| | | if (locMast.getLocSts().equals("F") && (oldLocMast.getLocSts().equals("D") || oldLocMast.getLocSts().equals("O"))) { |
| | | return R.error("当前操作已被阻止,请联系管理员"); |
| | | } |
| | | int br = 0; |
| | | if (locMast.getLocSts() == "O" || locMast.getLocSts() == "X"){ |
| | | switch (locMast.getBarcode().substring(0,2)) { |
| | | if (locMast.getLocSts() == "O" || locMast.getLocSts() == "X") { |
| | | switch (locMast.getBarcode().substring(0, 2)) { |
| | | case "10": |
| | | br = 1; |
| | | break; |
| | |
| | | break; |
| | | } |
| | | if (oldLocMast.getLocType1() != br) { |
| | | return R.error("货架和库位类型不匹配!"); |
| | | return R.error("货架和库位类型不匹配!"); |
| | | } |
| | | } |
| | | Date now = new Date(); |
| | |
| | | locMast.setBarcode(""); |
| | | } |
| | | } |
| | | } else if (oldLocMast.getLocSts().equals("D")) { |
| | | if (locMast.getLocSts().equals("O")) { |
| | | locMast.setBarcode(""); |
| | | } |
| | | } |
| | | locMast.setModiUser(getUserId()); |
| | | locMast.setModiTime(now); |
| | | if(!agvLockMastService.updateById(locMast)) { |
| | | if (!agvLockMastService.updateById(locMast)) { |
| | | throw new CoolException("主库位修改失败"); |
| | | } |
| | | return R.ok(); |
| | |
| | | |
| | | @RequestMapping(value = "/locMast/delete/auth") |
| | | @ManagerAuth(memo = "库位删除") |
| | | public R delete(@RequestParam String param){ |
| | | public R delete(@RequestParam String param) { |
| | | List<AgvLocMast> list = JSONArray.parseArray(param, AgvLocMast.class); |
| | | if (Cools.isEmpty(list)){ |
| | | if (Cools.isEmpty(list)) { |
| | | return R.error("参数缺失"); |
| | | } |
| | | for (AgvLocMast entity : list){ |
| | | for (AgvLocMast entity : list) { |
| | | agvLockMastService.delete(new EntityWrapper<>(entity)); |
| | | } |
| | | return R.ok(); |
| | |
| | | |
| | | @RequestMapping(value = "/locMast/export/auth") |
| | | @ManagerAuth(memo = "库位导出") |
| | | public R export(@RequestBody JSONObject param){ |
| | | public R export(@RequestBody JSONObject param) { |
| | | List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | Map<String, Object> map = excludeTrash(param.getJSONObject("locMast")); |
| | |
| | | @ManagerAuth |
| | | public R query(@RequestBody JSONObject param) { |
| | | Wrapper<AgvLocMast> wrapper = new EntityWrapper<AgvLocMast>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); |
| | | if (null != agvLockMastService.selectOne(wrapper)){ |
| | | if (null != agvLockMastService.selectOne(wrapper)) { |
| | | return R.parse(BaseRes.REPEAT).add(getComment(AgvLocMast.class, String.valueOf(param.get("key")))); |
| | | } |
| | | return R.ok(); |
| | |
| | | return R.ok(agvLockMastService.selectById(String.valueOf(id))); |
| | | } |
| | | |
| | | private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ |
| | | for (Map.Entry<String, Object> entry : map.entrySet()){ |
| | | 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)){ |
| | | 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])); |
| | |
| | | } |
| | | } |
| | | } |
| | | private <T> void convert1(Map<String, Object> map, EntityWrapper<T> wrapper){ |
| | | for (Map.Entry<String, Object> entry : map.entrySet()){ |
| | | |
| | | private <T> void convert1(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)){ |
| | | 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])); |
| | |
| | | List<String> staNoList = agvBasDevpService.selectCacheShelvesStationCodeByLocType(agvLocMast.getLocType1()); |
| | | |
| | | |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "FOUR")); |
| | | if (config != null) { |
| | | if (config.getStatus().intValue() == 1) { |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", locDto.getAgvStaNo())); |
| | | if (agvWrkMasts != null && !agvWrkMasts.isEmpty()) { |
| | | for (AgvWrkMast agvWrkMast : agvWrkMasts) { |
| | | if (agvWrkMast.getWrkSts() < 204) { |
| | | return R.error(locDto.getAgvStaNo() + "该站点已有任务,等任务完成或者货架搬走再叫料"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "FOUR")); |
| | | // if (config != null) { |
| | | // if (config.getStatus().intValue() == 1) { |
| | | // List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", locDto.getAgvStaNo())); |
| | | // if (agvWrkMasts != null && !agvWrkMasts.isEmpty()) { |
| | | // for (AgvWrkMast agvWrkMast : agvWrkMasts) { |
| | | // if (agvWrkMast.getWrkSts() < 204) { |
| | | // return R.error(locDto.getAgvStaNo() + "该站点已有任务,等任务完成或者货架搬走再叫料"); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | if (!staNoList.contains(locDto.getAgvStaNo())) { |
| | |
| | | @Select("select * from agv_loc_detl where 1=1 and loc_no = #{locNo} and matnr = #{matnr} and three_code = #{csocode}") |
| | | AgvLocDetl selectItemByOrderNo(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); |
| | | |
| | | @Select("select * from agv_loc_detl where 1=1 and loc_no = #{locNo} and matnr = #{matnr} and three_code = #{csocode}") |
| | | List<AgvLocDetl> selectItemByOrderNo2(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); |
| | | |
| | | |
| | | @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where b.loc_sts = 'F' and a.matnr = #{matnr} AND a.three_code = #{threeCode} AND a.process_sts = 1") |
| | | Double selectSumAnfmeByMatnrProcess(@Param("matnr") String matnr,@Param("threeCode") String threeCode); |
| | | |
| | |
| | | |
| | | AgvLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode); |
| | | |
| | | List<AgvLocDetl> selectItem2(String locNo, String matnr, String batch, String csocode, String isoCode); |
| | | |
| | | public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq, String type); |
| | | |
| | | public void updateStock(String sourceLoc, String targetLoc); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<AgvLocDetl> selectItem2(String locNo, String matnr, String batch, String csocode, String isoCode) { |
| | | return this.baseMapper.selectItemByOrderNo2(locNo, matnr, batch, csocode, isoCode); |
| | | } |
| | | |
| | | @Override |
| | | public Double getSumAnfmeProcess(String matnr, String threeCode) { |
| | | return this.baseMapper.selectSumAnfmeByMatnrProcess(matnr, threeCode); |
| | | } |
| | |
| | | // //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false); |
| | | // } |
| | | // } |
| | | // 预留20个库位 |
| | | agvLocMast = agvCommonService.getLocByLocRule(3, 1, code,false); |
| | | |
| | | |
| | |
| | | @Transactional |
| | | public void checkComplete2(String orderNo) { |
| | | Order order = this.selectByNo(orderNo); |
| | | if (order.getDocType() == 38) { |
| | | return; |
| | | } |
| | | if (Cools.isEmpty(order)) { |
| | | return; |
| | | } |
| | |
| | | List<OrderDetl> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_id", order.getId())); |
| | | // 作业数量是否等于数量 |
| | | boolean complete = true; |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | complete = false; |
| | | break; |
| | | if (order.getDocType() == 38) { |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | if (orderDetl.getReportQty() < orderDetl.getQty()) { |
| | | complete = false; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | complete = false; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | agvWrkMastWorking = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() |
| | | .eq("source_loc_no",agvWrkMast.getLocNo()) |
| | | .le("wrk_sts",204L)); |
| | | .lt("wrk_sts",204L)); |
| | | |
| | | if(!Cools.isEmpty(agvWrkMastWorking)){ |
| | | return; |
| | |
| | | //目标站点 |
| | | if (agvWrkMast.getLocNo().startsWith("QO") && agvWrkMast.getLocNo().endsWith("F4") && Integer.valueOf(agvWrkMast.getBarcode().substring(0, 2)) == 30) { |
| | | if (!agvWrkMast.getSourceLocNo().endsWith("02F1")) { |
| | | AgvLocMast locByFloor = agvCommonService.getLocByLocRule(3, 1, AsrsConstants.ERCHANG,true); |
| | | if (locByFloor != null) { |
| | | AgvLocMast locByFloor = null; |
| | | try { |
| | | locByFloor = agvCommonService.getLocByLocRule(3, 1, AsrsConstants.ERCHANG, true); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | if (locByFloor != null && locByFloor.getLocNo().endsWith("02F1")) { |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getSourceLocNo()); |
| | | agvLocMast.setLocSts("O"); |
| | | agvLocMast.setModiTime(now); |
| | | agvLocMast.setBarcode(""); |
| | | agvLocMastService.updateById(agvLocMast); |
| | | wrkMast.setLocNo(locByFloor.getLocNo()); |
| | | } else { |
| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.enums.SqlLike; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0, 2))); |
| | | |
| | | // 目标楼层 |
| | | mast.setPauseMk(agvLocMast.getLocType3().toString()); |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0, 2))); |
| | | |
| | | |
| | | mast.setAppeUser(9527L); |
| | |
| | | } else if (agvLocMast.getFloor() == 1 && agvLocMast.getLev1() == 2) { |
| | | floor = "02F1"; |
| | | } |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113)); |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("barcode", "30").like("source_loc_no", floor).or().eq("io_type", 113)); |
| | | if (agvWrkMasts.size() >= 5) { |
| | | //log.error("暂停回流"); |
| | | return FAIL; |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0, 2))); |
| | | |
| | | |
| | | mast.setAppeUser(9527L); |
| | |
| | | } else if (agvLocMast.getFloor() == 2) { |
| | | floor = "F2"; |
| | | } |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113)); |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("barcode", "31", SqlLike.RIGHT).like("source_loc_no", floor).or().eq("io_type", 113)); |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "RETURN_6_MAX")); |
| | | if (config == null && !Cools.isEmpty(config.getValue())) { |
| | | if (config != null && !Cools.isEmpty(config.getValue())) { |
| | | if (agvWrkMasts.size() >= Integer.parseInt(config.getValue())) { |
| | | return FAIL; |
| | | } |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0, 2))); |
| | | |
| | | |
| | | mast.setAppeUser(9527L); |
| | | mast.setAppeTime(now); |
| | | mast.setModiUser(9527L); |
| | | mast.setModiTime(now); |
| | | mast.setLogErrMemo("autoEmptyBack4"); |
| | | mast.setLogErrMemo("autoEmptyBackSiqi"); |
| | | if (!agvWrkMastService.insertByIncrease(mast)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvBasDevp.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvBasDevp.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvBasDevp.getBarcode().substring(0, 2))); |
| | | |
| | | mast.setAppeUser(9527L); |
| | | mast.setAppeTime(now); |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvBasDevp.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvBasDevp.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvBasDevp.getBarcode().substring(0, 2))); |
| | | |
| | | mast.setAppeUser(9527L); |
| | | mast.setAppeTime(now); |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0, 2))); |
| | | |
| | | |
| | | mast.setAppeUser(9527L); |
| | |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0,2))); |
| | | mast.setWhsType(Integer.parseInt(agvLocMast.getBarcode().substring(0, 2))); |
| | | |
| | | |
| | | mast.setAppeUser(9527L); |
| | |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.LocUtils; |
| | | import com.zy.system.entity.Config; |
| | | import com.zy.system.service.ConfigService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private LocRuleService locRuleService; |
| | | @Autowired |
| | | AgvBasDevpService agvBasDevpService; |
| | | |
| | | @Autowired |
| | | private ConfigService configService; |
| | | |
| | | @Autowired |
| | | private LocUtils locUtils; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 库位规则查找,会预留20个库位 |
| | | */ |
| | | public synchronized AgvLocMast getLocByLocRule20(int type, int floor, String factory, boolean flag) { |
| | | |
| | | try { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("loc_sts", "O").eq("loc_type1", type); |
| | | List<AgvLocMast> agvLocMasts = new ArrayList<>(); |
| | | //不是空板优先找2层 |
| | | if (Cools.isEmpty(factory)) { |
| | | wrapper.eq("floor", floor).orderBy("lev1", true); |
| | | } else { |
| | | //B是二厂,G是三厂 |
| | | if (factory.equals("B")) { |
| | | wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag); |
| | | |
| | | } else { |
| | | wrapper.eq("floor", floor).orderBy("lev1", true); |
| | | |
| | | } |
| | | } |
| | | int num = 20; |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM")); |
| | | if (config != null && !Cools.isEmpty(config.getValue())) { |
| | | num = Integer.parseInt(config.getValue()); |
| | | } |
| | | agvLocMasts = agvLocMastService.selectList(wrapper); |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | |
| | | } |
| | | |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); |
| | | if (agvLocMast1.getLocSts().equals("O")) { |
| | | return agvLocMast1; |
| | | } |
| | | } |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } catch (Exception e) { |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 库位规则查找 |
| | | */ |
| | | public synchronized AgvLocMast getLocByLocRule(int type, int floor, String factory, boolean flag) { |