| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.MesOrderReportParam; |
| | | import com.zy.asrs.entity.param.MesPakinReportParam; |
| | | import com.zy.asrs.entity.param.MesPakoutReportParam; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import io.swagger.models.auth.In; |
| | | import lombok.Synchronized; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class AgvWrkMastHandler extends AbstractHandler<String> { |
| | | |
| | | //入库类型数组 |
| | | private static final int[] IN_TYPE_ARRAY = new int[1]; |
| | | //出库类型数组 |
| | | private static final int[] OUT_TYPE_ARRAY = new int[1]; |
| | | //移库类型数组 |
| | | private static final int[] MOVE_TYPE_ARRAY = new int[1]; |
| | | |
| | | @Value("${agvBasDev.maxWorkNum}") |
| | | private int maxWrokNum; |
| | | @Value("${mes.url}") |
| | | private String url; |
| | | @Value("${mes.orderReportPath}") |
| | | private String orderReportPath; |
| | | @Value("${mes.pakinReportPath}") |
| | | private String pakinReportPath; |
| | | @Value("${mes.pakoutReportPath}") |
| | | private String pakoutReportPath; |
| | | @Value("${mes.getTokenPath}") |
| | | private String getTokenPath; |
| | | @Value("${mes.appKey}") |
| | | private String appKey; |
| | | @Value("${mes.appSecret}") |
| | | private String appSecret; |
| | | |
| | | |
| | | @Autowired |
| | | private AgvWrkMastService agvWrkMastService; |
| | |
| | | private AgvBasDevpService agvBasDevpService; |
| | | @Autowired |
| | | private AgvWorkService agvWorkService; |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | | @Transactional |
| | | public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) { |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String barcode = agvWrkMast.getBarcode(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | String agvBasDevp = ""; |
| | | if (agvWrkMast.getIoType() > 100) { |
| | | agvBasDevp = agvWrkMast.getLocNo(); |
| | | } else { |
| | | agvBasDevp = agvWrkMast.getSourceLocNo(); |
| | | } |
| | | |
| | | |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | // 空板入库 设置库位状态为D.空桶/空栈板 |
| | | String locSts = agvWrkMast.getIoType() == 10 ? "D" : "F"; |
| | | if (agvWrkMast.getIoType() == 10 || agvWrkMast.getIoType() == 109) { |
| | | if (agvWrkMast.getIoType() == 109 && agvWrkMast.getLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"R",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | try{ |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String barcode = agvWrkMast.getBarcode(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | String agvBasDevp = ""; |
| | | if (agvWrkMast.getIoType() > 100) { |
| | | agvBasDevp = agvWrkMast.getLocNo(); |
| | | } else { |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | agvBasDevp = agvWrkMast.getSourceLocNo(); |
| | | } |
| | | } else { |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | |
| | | //用于上报mes的工作档明细 |
| | | List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | // 空板入库 设置库位状态为D.空桶/空栈板 |
| | | String locSts = agvWrkMast.getIoType() == 10 ? "D" : "F"; |
| | | |
| | | if (agvWrkMast.getIoType() != 111) { |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | } |
| | | |
| | | switch (agvWrkMast.getIoType()){ |
| | | case 1: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | //更新目标库位明细 |
| | | log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo); |
| | | agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); |
| | | //生成入库通知历史档 |
| | | boolean save = agvWaitPakinLogService.save(barcode); |
| | | //删除入库通知档 |
| | | log.info("删除入库通知档 supp_code: " + barcode); |
| | | agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode)); |
| | | break; |
| | | case 10: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); |
| | | break; |
| | | case 11: |
| | | case 12: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | //更新库存明细 |
| | | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | break; |
| | | case 53: |
| | | //修改工作党明细 |
| | | //修改库存信息 |
| | | List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | agvWrkDetlList.forEach(agvWrkDetl -> { |
| | | AgvLocDetl agvLocDetl = agvLocDetlService.selectByMatnrAndBatchAndCsocodeAndisoCode(agvWrkMast.getLocNo(), agvWrkDetl.getMatnr(), agvWrkDetl.getBatch(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime()); |
| | | if (!Cools.isEmpty(agvLocDetl)) { |
| | | double updateAnfme = agvLocDetl.getAnfme() - agvWrkDetl.getAnfme(); |
| | | agvLocDetlService.updateAnfme(updateAnfme,agvLocDetl.getLocNo(),agvLocDetl.getMatnr(),agvLocDetl.getBatch(),agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime()); |
| | | } |
| | | //AgvLocDetl agvLocDetl = agvLocDetlService.selectLocdetl(agvWrkMast.getLocNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getBatch(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime()); |
| | | |
| | | }); |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); |
| | | break; |
| | | case 58: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); |
| | | break; |
| | | case 108: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | //更新库存明细 |
| | | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | break; |
| | | case 109: |
| | | // 库位 -- 接驳位 / 库位 |
| | | if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | // 接驳位 -- 库位 |
| | | } else { |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | } |
| | | // 接驳位 -- 库位 |
| | | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); |
| | | // 库位 -- 接驳位 / 库位 |
| | | } else { |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | } |
| | | break; |
| | | case 111: |
| | | // 库位 -- 接驳位 / 库位 |
| | | if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | // 接驳位 -- 库位 |
| | | } else { |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | } |
| | | |
| | | // 接驳位 -- 库位 |
| | | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); |
| | | // 库位 -- 接驳位 / 库位 |
| | | } else { |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | } |
| | | break; |
| | | case 112: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | for (AgvWrkDetl agvWrkDetl : agvWrkDetls) { |
| | | AgvLocDetl locDetl = new AgvLocDetl(); |
| | | locDetl.setLocNo(agvWrkMast.getLocNo()); |
| | | locDetl.sync(agvWrkDetl); |
| | | locDetl.setModiTime(new Date()); |
| | | agvLocDetlService.insert(locDetl); |
| | | } |
| | | // 接驳位 -- 库位 |
| | | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); |
| | | // 库位 -- 接驳位 / 库位 |
| | | } else { |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | } |
| | | break; |
| | | case 113: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | // 接驳位 -- 库位 |
| | | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); |
| | | } |
| | | break; |
| | | case 121: |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | //更新库存明细 |
| | | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | break; |
| | | |
| | | default: |
| | | return null; |
| | | } |
| | | if (agvWrkMast.getIoType() != 111) { |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | } |
| | | |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | }else{ |
| | | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); |
| | | maps.forEach(map -> { |
| | | String o = map.get("orderNo").toString(); |
| | | orderService.checkComplete(o); |
| | | }); |
| | | } |
| | | |
| | | //上报mes |
| | | MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld); |
| | | if(!Cools.isEmpty(param)){ |
| | | doHttpRequest(param,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); |
| | | } |
| | | |
| | | return SUCCESS; |
| | | }catch (Exception e){ |
| | | log.error(""+e.getMessage()); |
| | | } |
| | | |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | //类型为入库时 |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //更新目标库位明细 |
| | | log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo); |
| | | agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); |
| | | //生成入库通知历史档 |
| | | boolean save = agvWaitPakinLogService.save(barcode); |
| | | //删除入库通知档 |
| | | log.info("删除入库通知档 supp_code: " + barcode); |
| | | agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode)); |
| | | } |
| | | //类型为库位移转时 |
| | | if(agvWrkMast.getIoType() == 11 || agvWrkMast.getIoType() == 12){ |
| | | //更新库存明细 |
| | | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | } |
| | | |
| | | //类型为库位移转时 |
| | | if(agvWrkMast.getIoType() == 108){ |
| | | //更新库存明细 |
| | | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | } |
| | | |
| | | if(agvWrkMast.getIoType() == 109){ |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); |
| | | // 新建工作档 |
| | | Date now = new Date(); |
| | | createWrkMast(109, 201L, agvWrkMast.getLocNo(), "", agvWrkMast.getBarcode(), now, 9527L, agvWrkMast.getWhsType(), 0); |
| | | } |
| | | if (agvWrkMast.getIoType() == 58) { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); |
| | | } |
| | | |
| | | |
| | | |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | }else{ |
| | | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); |
| | | maps.forEach(map -> { |
| | | String o = map.get("orderNo").toString(); |
| | | orderService.checkComplete(o); |
| | | }); |
| | | } |
| | | |
| | | return SUCCESS; |
| | | return FAIL; |
| | | } |
| | | |
| | | |
| | | @Transactional |
| | | public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) { |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | //生成空板入库任务 |
| | | Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2)); |
| | | try { |
| | | agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | log.error(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | }else{ |
| | | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); |
| | | maps.forEach(map -> { |
| | | String o = map.get("orderNo").toString(); |
| | | orderService.checkComplete(o); |
| | | }); |
| | | try{ |
| | | |
| | | //用于上报mes的工作档明细 |
| | | List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | |
| | | Date now = new Date(); |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | if (agvWrkMast.getIoType() == 110) { |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | } |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | //生成空板入库任务 |
| | | Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2)); |
| | | try { |
| | | // agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true); |
| | | AgvWrkMast wrkMast = new AgvWrkMast(); |
| | | //工作状态 |
| | | wrkMast.setWrkSts(201L); |
| | | //入出库类型 |
| | | wrkMast.setIoType(10); |
| | | wrkMast.setIoTime(now); |
| | | //优先级 |
| | | wrkMast.setIoPri(300.0); |
| | | //源站点 |
| | | wrkMast.setSourceLocNo(agvWrkMast.getLocNo()); |
| | | //目标站点 |
| | | wrkMast.setLocNo(agvWrkMast.getSourceLocNo()); |
| | | //货架编码 |
| | | wrkMast.setBarcode(agvWrkMast.getBarcode()); |
| | | //货架类型 |
| | | wrkMast.setWhsType(Integer.valueOf(agvWrkMast.getBarcode().substring(0, 2))); |
| | | |
| | | wrkMast.setAppeUser(9527L); |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(9527L); |
| | | wrkMast.setModiTime(now); |
| | | wrkMast.setLogErrMemo("completedCarryWrk"); |
| | | if (!agvWrkMastService.insertByIncrease(wrkMast)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getSourceLocNo()); |
| | | agvLocMast.setLocSts("S"); |
| | | agvLocMast.setModiTime(now); |
| | | agvLocMastService.updateById(agvLocMast); |
| | | |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getLocNo()); |
| | | agvBasDevp.setLocSts("R"); |
| | | agvBasDevp.setLocType2(Short.valueOf(agvWrkMast.getBarcode().substring(0, 2))); |
| | | agvBasDevpService.updateById(agvBasDevp); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | log.error(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | }else{ |
| | | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); |
| | | maps.forEach(map -> { |
| | | String o = map.get("orderNo").toString(); |
| | | orderService.checkComplete(o); |
| | | }); |
| | | } |
| | | |
| | | //上报mes |
| | | MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld); |
| | | if(!Cools.isEmpty(param)){ |
| | | doHttpRequest(param,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); |
| | | } |
| | | |
| | | return SUCCESS; |
| | | }catch (Exception e){ |
| | | log.error(""+e.getMessage()); |
| | | } |
| | | return SUCCESS; |
| | | return FAIL; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> completedCarryWrk2(AgvWrkMast agvWrkMast) { |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | String agvBasDevp = ""; |
| | | if (agvWrkMast.getIoType() > 100) { |
| | | agvBasDevp = agvWrkMast.getLocNo(); |
| | | } else { |
| | | agvBasDevp = agvWrkMast.getSourceLocNo(); |
| | | } |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | } |
| | | try{ |
| | | //用于上报mes的工作档明细 |
| | | List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | }else{ |
| | | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); |
| | | maps.forEach(map -> { |
| | | String o = map.get("orderNo").toString(); |
| | | orderService.checkComplete(o); |
| | | }); |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | String agvBasDevp = ""; |
| | | if (agvWrkMast.getIoType() > 100) { |
| | | agvBasDevp = agvWrkMast.getLocNo(); |
| | | } else { |
| | | agvBasDevp = agvWrkMast.getSourceLocNo(); |
| | | } |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | } |
| | | |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | if(!isJSON(orderNo)){ |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | }else{ |
| | | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); |
| | | maps.forEach(map -> { |
| | | String o = map.get("orderNo").toString(); |
| | | orderService.checkComplete(o); |
| | | }); |
| | | } |
| | | //上报mes |
| | | MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld); |
| | | if(!Cools.isEmpty(param)){ |
| | | doHttpRequest(param,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); |
| | | } |
| | | return SUCCESS; |
| | | }catch (Exception e){ |
| | | log.error(""+e.getMessage()); |
| | | } |
| | | return SUCCESS; |
| | | return FAIL; |
| | | } |
| | | |
| | | @Transactional |
| | | @Synchronized |
| | | public ReturnT<String> startPutWayWrk(AgvWrkMast agvWrkMast) throws IOException { |
| | | |
| | | //下发任务 |
| | | int startWrkCode = agvWrkMastService.startWrk(agvWrkMast); |
| | | if(startWrkCode != 0){ |
| | | throw new CoolException("任务下发失败"); |
| | | } |
| | | try{ |
| | | //下发任务 |
| | | int startWrkCode = agvWrkMastService.startWrk(agvWrkMast); |
| | | if(startWrkCode != 0){ |
| | | throw new CoolException("任务下发失败"); |
| | | } |
| | | |
| | | agvWrkMast.setWrkSts(202L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //修改AGV入库通知档状态入出状态为Y |
| | | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); |
| | | agvWrkMast.setWrkSts(202L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //修改AGV入库通知档状态入出状态为Y |
| | | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); |
| | | } |
| | | return SUCCESS; |
| | | }catch (Exception e){ |
| | | log.error("修改AGV入库通知档状态入出状态为Y"+e.getMessage()); |
| | | } |
| | | return SUCCESS; |
| | | |
| | | return FAIL; |
| | | } |
| | | |
| | | @Transactional |
| | |
| | | public ReturnT<String> startAllcationIn(AgvWrkMast agvWrkMast) throws IOException { |
| | | |
| | | //下发任务 |
| | | int startWrkCode = agvWrkMastService.startAllcationIn(agvWrkMast); |
| | | if(startWrkCode != 0){ |
| | | throw new CoolException("任务下发失败"); |
| | | try{ |
| | | int startWrkCode = agvWrkMastService.startAllcationIn(agvWrkMast); |
| | | if(startWrkCode != 0){ |
| | | throw new CoolException("任务下发失败"); |
| | | } |
| | | return SUCCESS; |
| | | }catch (Exception e){ |
| | | log.error("任务下发失败"+e.getMessage()); |
| | | } |
| | | return SUCCESS; |
| | | return FAIL; |
| | | |
| | | } |
| | | |
| | |
| | | wrkMast.setSourceLocNo(sourceLocNo); |
| | | //目标站点 |
| | | wrkMast.setLocNo(locNo); |
| | | //容器编码 |
| | | //货架编码 |
| | | wrkMast.setBarcode(barcode); |
| | | //容器类型 |
| | | //货架类型 |
| | | wrkMast.setWhsType(containerType); |
| | | // 目标楼层 |
| | | wrkMast.setCrnNo(floor); |
| | |
| | | |
| | | return wrkMast; |
| | | } |
| | | |
| | | private Object getReportParamByIoType(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ |
| | | if(Cools.isEmpty(agvWrkDetls)){ |
| | | return null; |
| | | } |
| | | //区分不同任务类型的上报方式 |
| | | |
| | | if(Arrays.asList(IN_TYPE_ARRAY).contains(agvWrkMast.getIoType())){ |
| | | |
| | | } |
| | | if(Arrays.asList(OUT_TYPE_ARRAY).contains(agvWrkMast.getIoType())){ |
| | | |
| | | } |
| | | if(Arrays.asList(MOVE_TYPE_ARRAY).contains(agvWrkMast.getIoType())){ |
| | | return generateMesParam(agvWrkMast,agvWrkDetls); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | private void reportMesPakinOrder(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ |
| | | |
| | | for (AgvWrkDetl agvWrkDetl : agvWrkDetls){ |
| | | MesPakinReportParam mesPakinReportParam = new MesPakinReportParam(); |
| | | mesPakinReportParam.setInboundOrderCode(agvWrkDetl.getOrderNo()); |
| | | mesPakinReportParam.setBizType("0"); |
| | | mesPakinReportParam.setInventoryAttr(new MesPakinReportParam.InventoryAttr(agvWrkDetl.getThreeCode(),agvWrkDetl.getMatnr(),agvWrkMast.getLocNo())); |
| | | mesPakinReportParam.setNoQrCodeExecAmount(new MesPakinReportParam.NoQrCodeExecAmount(agvWrkDetl.getAnfme(),agvWrkDetl.getUnit(),null)); |
| | | |
| | | doHttpRequest(mesPakinReportParam,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); |
| | | } |
| | | |
| | | } |
| | | |
| | | private void reportMesPakoutOrder(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ |
| | | for (AgvWrkDetl agvWrkDetl : agvWrkDetls){ |
| | | MesPakoutReportParam mesPakoutReportParam = new MesPakoutReportParam(); |
| | | mesPakoutReportParam.setStorageCode(agvWrkMast.getLocNo()); |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo()); |
| | | mesPakoutReportParam.setWareHouseCode(agvLocMast.getPltType().toString()); |
| | | mesPakoutReportParam.setMaterialCode(agvWrkDetl.getMatnr()); |
| | | mesPakoutReportParam.setBatchNos(Arrays.asList(agvWrkDetl.getBatch())); |
| | | mesPakoutReportParam.setAmount(new MesPakoutReportParam.Amount(agvWrkDetl.getAnfme(),agvWrkDetl.getUnit(),null)); |
| | | |
| | | doHttpRequest(mesPakoutReportParam,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); |
| | | |
| | | } |
| | | } |
| | | |
| | | private MesOrderReportParam generateMesParam(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ |
| | | |
| | | if(agvWrkMast.getIoType() == 53){ |
| | | String locNo = agvWrkMast.getLocNo(); |
| | | agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo()); |
| | | agvWrkMast.setSourceLocNo(locNo); |
| | | } |
| | | |
| | | MesOrderReportParam param = new MesOrderReportParam(); |
| | | |
| | | List<MesOrderReportParam.TransferOrderItem> transferOrderItems = new ArrayList<>(); |
| | | List<MesOrderReportParam.TransferOrderItem.InventoryDetail> inventoryDetails = new ArrayList<>(); |
| | | //添加transferOrderItem属性 |
| | | MesOrderReportParam.TransferOrderItem transferOrderItem = new MesOrderReportParam.TransferOrderItem(); |
| | | transferOrderItem.setRemark(agvWrkDetls.get(0).getOrderNo()); |
| | | transferOrderItem.setTargetLocationCode(agvWrkMast.getLocNo()); |
| | | transferOrderItems.add(transferOrderItem); |
| | | transferOrderItem.setInventoryDetails(inventoryDetails); |
| | | |
| | | param.setTransferOrderItems(transferOrderItems); |
| | | |
| | | for (AgvWrkDetl agvWrkDetl : agvWrkDetls){ |
| | | MesOrderReportParam.TransferOrderItem.InventoryDetail inventoryDetail = new MesOrderReportParam.TransferOrderItem.InventoryDetail(); |
| | | //添加amount属性 |
| | | MesOrderReportParam.TransferOrderItem.InventoryDetail.Amount amount = new MesOrderReportParam.TransferOrderItem.InventoryDetail.Amount(); |
| | | amount.setAmount(agvWrkDetl.getAnfme()); |
| | | amount.setUnitName(agvWrkDetl.getUnit()); |
| | | inventoryDetail.setAmount(amount); |
| | | //添加bizKey属性 |
| | | MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey bizKey = new MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey(); |
| | | bizKey.setBatchNo(agvWrkDetl.getThreeCode()); |
| | | inventoryDetail.setBizKey(bizKey); |
| | | //添加inventoryDetail属性 |
| | | inventoryDetail.setLocationCode(agvWrkMast.getSourceLocNo()); |
| | | inventoryDetail.setMaterialCode(agvWrkDetl.getMatnr()); |
| | | inventoryDetail.setQcStatus(1); |
| | | inventoryDetail.setStorageStatus(1); |
| | | inventoryDetails.add(inventoryDetail); |
| | | } |
| | | |
| | | return param; |
| | | } |
| | | |
| | | //获取mes token信息 |
| | | private Map<String,Object> getMesTokenInfo(){ |
| | | Map<String,String> param = new HashMap<>(); |
| | | param.put("appKey",appKey); |
| | | param.put("appSecret",appSecret); |
| | | |
| | | JSONObject jsonObject = doHttpRequest(param,null, "获取MesToken", url, getTokenPath, null, "127.0.0.1"); |
| | | |
| | | Map<String,Object> headParam = new HashMap<>(); |
| | | headParam.put("X-AUTH",JSON.parseObject(jsonObject.get("data").toString()).get("appAccessToken").toString()); |
| | | |
| | | return headParam; |
| | | |
| | | } |
| | | |
| | | private JSONObject doHttpRequest(Object requestParam,Map<String,Object> headParam, String namespace, String url, String path, String appkey, String ip){ |
| | | |
| | | String response = ""; |
| | | boolean success = false; |
| | | |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(url) |
| | | .setPath(path) |
| | | .setHeaders(headParam) |
| | | .setJson(JSONObject.toJSONString(requestParam)) |
| | | .setHttps(true) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | |
| | | if(Cools.isEmpty(jsonObject.get("code")) && Integer.parseInt(jsonObject.get("code").toString()) != 200){ |
| | | throw new CoolException(jsonObject.get("dsc").toString()); |
| | | } |
| | | |
| | | return jsonObject; |
| | | |
| | | // String succeed = jsonObject.get("succeed").toString(); |
| | | // |
| | | // int code = Cools.eq("0",succeed) ? 0 : 1; |
| | | // if(code != 200){ |
| | | // throw new CoolException(jsonObject.get("dsc").toString()); |
| | | // } |
| | | // success = true; |
| | | |
| | | }catch (Exception e){ |
| | | log.error(e.getMessage()); |
| | | throw new CoolException(e.getMessage()); |
| | | }finally { |
| | | apiLogService.save( |
| | | namespace, |
| | | url + path, |
| | | appkey, |
| | | ip, |
| | | JSON.toJSONString(JSONObject.toJSONString(requestParam)), |
| | | response, |
| | | success |
| | | ); |
| | | } |
| | | |
| | | } |
| | | } |