From 7ea6501464a8df3cad55c21e04b606e88d7b8580 Mon Sep 17 00:00:00 2001 From: 野心家 <1051256694@qq.com> Date: 星期一, 05 五月 2025 15:41:45 +0800 Subject: [PATCH] 呼叫AGV搬运 --- src/main/java/com/zy/asrs/controller/MobileController.java | 352 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 312 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java index e0ce184..75264dd 100644 --- a/src/main/java/com/zy/asrs/controller/MobileController.java +++ b/src/main/java/com/zy/asrs/controller/MobileController.java @@ -1,24 +1,42 @@ package com.zy.asrs.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.annotations.ManagerAuth; +import com.core.common.BaseRes; 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.CombParam; import com.zy.asrs.entity.param.MobileAdjustParam; +import com.zy.asrs.entity.param.OffSaleParam; +import com.zy.asrs.entity.param.RCSParam; import com.zy.asrs.entity.result.MobileAdjustResult; +import com.zy.asrs.mapper.ManLocDetlMapper; import com.zy.asrs.service.*; +import com.zy.asrs.task.WorkMastScheduler; +import com.zy.common.model.LocDto; +import com.zy.common.model.TaskDto; +import com.zy.common.model.WrkDto; +import com.zy.common.model.enums.WorkNoType; +import com.zy.common.service.CommonService; +import com.zy.common.utils.HttpHandler; import com.zy.common.web.BaseController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; 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 org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; + +import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; /** * 绉诲姩绔帴鍙f帶鍒跺櫒 @@ -27,6 +45,7 @@ @RestController @RequestMapping("mobile") public class MobileController extends BaseController { + private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class); @Autowired private MobileService mobileService; @@ -37,6 +56,8 @@ @Autowired private OrderService orderService; @Autowired + private OrderDetlService orderDetlService; + @Autowired private DocTypeService docTypeService; @Autowired private WrkMastService wrkMastService; @@ -46,6 +67,36 @@ private BasDevpService basDevpService; @Autowired private PackService packService; + @Autowired + private ManLocDetlMapper manLocDetlMapper; + @Autowired + private CommonService commonService; + @Autowired + private StaDescService staDescService; + @Autowired + private ApiLogService apiLogService; + @Value("${rcs.address.url}") + private String url; + @Value("${rcs.address.attrcs}") + private String attrcs; + + + // 鍟嗗搧涓婃灦 + @RequestMapping("/mat/onSale/auth") + @ManagerAuth + public R matOnSale(@RequestBody CombParam combParam){ + mobileService.onSale(combParam); + return R.ok("涓婃灦鎴愬姛"); + } + // 鍟嗗搧涓嬫灦 + @RequestMapping("/mat/offSale/auth") + //@ManagerAuth + public R matOffSale(@RequestBody OffSaleParam offSaleParam){ + mobileService.offSale(offSaleParam); + return R.ok("涓嬫灦鎴愬姛"); + } + + // 缁勬墭 ---------------------------------------------------------------------------------------------------- @@ -141,10 +192,256 @@ if (wrkMast != null) { List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); // 鍘婚櫎宸插嚭搴撶‘璁ょ殑鏄庣粏 - wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() == 1); + wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() != null && wrkDetl.getInspect() != 0); return R.ok().add(Cools.add("wrkNo", wrkMast.getWrkNo()).add("ioType", wrkMast.getIoType()).add("list", wrkDetls)); } return R.ok(); + } + + /** + * 鍑哄簱纭瀹屾垚 + * @param list + * @return + */ + @RequestMapping("/pakout/confirm/auth") + @ManagerAuth + @Transactional + public R pakoutConfirm(@RequestBody List<WrkDetl> list) { + if (Cools.isEmpty(list)) { + return R.ok(); + } + Set<Integer> wrkNos = new HashSet<>(); + List<WrkDto> dtos = new ArrayList<>(); + for (WrkDetl wrkDetl : list) { + if (wrkNos.contains(wrkDetl.getWrkNo())) { + for (WrkDto dto : dtos) { + if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) { + dto.getWrkDetls().add(wrkDetl); + break; + } + } + } else { + wrkNos.add(wrkDetl.getWrkNo()); + dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl)); + } + } + + for (WrkDto dto : dtos) { + WrkMast wrkMast = wrkMastService.selectById(dto.getWrkNo()); + if (wrkMast != null) { + // 101 + if (wrkMast.getIoType() == 101) { + for (WrkDetl wrkDetl : dto.getWrkDetls()) { + wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); + } + } + // 103 + if (wrkMast.getIoType() == 103) { + if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) { + throw new CoolException("鎷f枡鍑哄簱纭澶辫触"); + } + for (WrkDetl wrkDetl : dto.getWrkDetls()) { + wrkDetl.setInspect(1); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("鎷f枡鍑哄簱纭澶辫触"); + } + } + } + } + } + + for (Integer wrkNo : wrkNos) { + WrkMast wrkMast = wrkMastService.selectById(wrkNo); + if (wrkMast.getWrkSts() == 15 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) { + List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo); + boolean complete = true; + for (WrkDetl wrkDetl : wrkDetls) { + if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) { + complete = false; + break; + } + } + if (complete) { + wrkMast.setInvWh("Y"); + wrkMast.setModiTime(new Date()); + if (!wrkMastService.updateById(wrkMast)) { + throw new CoolException("淇敼宸ヤ綔妗�" + wrkNo + "澶辫触"); + } + } + } + } + return R.ok("瀹屾垚纭"); + } + + + /** + * 琛ョ┖鎵樼洏鍒板叆搴撶紦瀛樹綅 + * @param map + * @return + */ + @RequestMapping("/supplementEmpty") + @ManagerAuth + @Transactional + public R supplementEmpty(@RequestBody HashMap<String,Object> map){ + if (Cools.isEmpty(map)) { + return R.error("琛ョ┖鎵樼洏搴撲綅涓虹┖"); + } + List<LocMast> locMastList=locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D")); + if (locMastList.isEmpty()) { + return R.error("绔嬪簱閲屾病鏈夌┖鎵樼洏"); + } + // 鑾峰彇宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type); + + // 鑾峰彇婧愮珯 + Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() + .eq("type_no", 110) + .eq("stn_no", 102) + .eq("crn_no", locMastList.get(0).getCrnNo()); + StaDesc staDesc = staDescService.selectOne(wrapper); + Integer sourceStaNo = staDesc.getCrnStn(); + if (Cools.isEmpty(sourceStaNo)) { + throw new CoolException("妫�绱㈡簮绔欏け璐�"); + } + Date now = new Date(); + // 淇濆瓨宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱 + wrkMast.setIoPri(10D); + wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯 + wrkMast.setStaNo(102); // 鐩爣绔� + wrkMast.setCrnNo(locMastList.get(0).getCrnNo()); + wrkMast.setSourceLocNo(locMastList.get(0).getLocNo()); // 婧愬簱浣� + wrkMast.setFullPlt("N"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("Y"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(getUserId()); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(getUserId()); + wrkMast.setModiTime(now); + wrkMast.setMemo((String) map.get("locNo"));//agv鏀捐揣浣� + boolean res = wrkMastService.insert(wrkMast); + if (!res) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害 + if (locMastList.get(0).getLocSts().equals("D")){ + locMastList.get(0).setLocSts("R"); + locMastList.get(0).setModiUser(getUserId()); + locMastList.get(0).setModiTime(now); + if (!locMastService.updateById(locMastList.get(0))) { + throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�"); + } + } + return R.ok(); + } + + /** + * agv鎵弿婧愮珯鐐规樉绀虹洰鏍囩珯鐐� + * @param locNo + * @return + */ + @RequestMapping("/AGVSite") + public R AGVSite(@RequestParam(required = false) String locNo){ + HashMap<Integer,String> map=new HashMap<>(); + map.put(100,"100-鍏ュ簱鍙�"); + map.put(1000,"1000-琛ョ┖鏉垮彛"); + map.put(2001,"2001-鍑哄簱鍙�1"); + map.put(2002,"2002-鍑哄簱鍙�2"); + map.put(3001,"3001-浣滀笟鍙�1"); + map.put(3002,"3002-浣滀笟鍙�2"); + map.remove(Integer.parseInt(locNo)); + return R.ok(map); + } + + /** + * 鎵ц绉诲簱浠诲姟 + * @param sourceStaNo + * @param staNo + * @return + */ + @RequestMapping("/AGVMove") + public R AGVMove(@RequestParam(required = false) String sourceStaNo + ,@RequestParam(required = false) String staNo){ + RCSParam rcsParam = new RCSParam(); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃� HH:mm:ss"); + String formattedDate = now.format(formatter); // 鏍煎紡鍖栨棩鏈熸椂闂� + //缃戠粶娴佹按鍙� + rcsParam.setReqId(now.toString()); + //搴旂敤鏍囪瘑 + rcsParam.setClientId("WMS"); + //閫氱煡鏃堕棿 + rcsParam.setReqTime(formattedDate); + RCSParam.DataBody dataBody=new RCSParam.DataBody(); + //浠诲姟鍙� + dataBody.setId(formattedDate); + + List<RCSParam.TaskBody> taskBodyList=new ArrayList<>(); + RCSParam.TaskBody taskBody=new RCSParam.TaskBody(); + //鍙栬揣绫诲瀷 + taskBody.setType("load"); + taskBody.setStation(sourceStaNo); + taskBodyList.add(taskBody); + + RCSParam.TaskBody taskBody1=new RCSParam.TaskBody(); + //鏀捐揣绫诲瀷 + taskBody1.setType("unload"); + taskBody1.setStation(staNo); + taskBodyList.add(taskBody1); + + dataBody.setTasks(taskBodyList); + rcsParam.setData(dataBody); + String response =""; + Boolean bool =false; + + try { + log.info("wms娲惧彂鎼繍浠诲姟缁橝GV鎼繍={}", rcsParam); + response = new HttpHandler.Builder() + // .setHeaders(headParam) + .setUri(url) + .setPath(attrcs) + .setJson(JSON.toJSONString(rcsParam)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if(jsonObject.getBoolean("IsSuccess")){ + bool = true; + } + } catch (Exception e) { + log.error("wms娲惧彂鎼繍浠诲姟缁橝GV鎼繍澶辫触杩斿洖鍊�={}", response); + } finally { + apiLogService.save("wms娲惧彂鎼繍浠诲姟缁橝GV鎼繍" + , url + attrcs + , null + , "127.0.0.1" + , JSON.toJSONString(rcsParam) + , response + , bool + ); + } + if(bool){ + return R.ok(); + }else { + return R.error("涓嬪彂浠诲姟澶辫触"); + } + + } + + + // 鏍规嵁搴撲綅鐮佸拰鍟嗗搧鐮佹悳绱㈠晢鍝� + @RequestMapping("/mat/find/auth") + public R find(@RequestParam(required = false) String locNo + , @RequestParam(required = false) String matnr){ + //List<ManLocDetl> manLocDetls = manLocDetlMapper.selectItem0(locNo, matnr); + ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(locNo, matnr); + return R.ok(manLocDetl); + //return R.ok(manLocDetlMapper.selectItem0(locNo, matnr)); } /** @@ -190,41 +487,7 @@ } - @RequestMapping("/pakout/confirm/auth") - @ManagerAuth - @Transactional - public R pakoutConfirm(@RequestBody List<WrkDetl> list) { - if (Cools.isEmpty(list)) { - return R.ok(); - } - // todo:luxiaotao 鎷f枡鍑哄簱鍙慨鏀瑰伐浣滄。鏄庣粏 - Set<Integer> wrkNos = new HashSet<>(); - for (WrkDetl wrkDetl : list) { - wrkNos.add(wrkDetl.getWrkNo()); - wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); - } - for (Integer wrkNo : wrkNos) { - WrkMast wrkMast = wrkMastService.selectById(wrkNo); - if (wrkMast.getWrkSts() == 14 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) { - List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo); - boolean complete = true; - for (WrkDetl wrkDetl : wrkDetls) { - if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) { - complete = false; - break; - } - } - if (complete) { - wrkMast.setInvWh("Y"); - wrkMast.setModiTime(new Date()); - if (!wrkMastService.updateById(wrkMast)) { - throw new CoolException("淇敼宸ヤ綔妗�" + wrkNo + "澶辫触"); - } - } - } - } - return R.ok("瀹屾垚纭"); - } + // 鐩樼偣 ---------------------------------------------------------------------------------------------------- @@ -259,5 +522,14 @@ return R.ok("鐩樼偣鎴愬姛"); } + @PostMapping("/order/out/pakout/auth") + @ManagerAuth(memo = "璁㈠崟鍑哄簱") + public synchronized R pakoutByOrder(@RequestBody JSONObject param) { + if(!param.containsKey("staNo") || !param.containsKey("orderNo")){ + return R.parse(BaseRes.PARAM); + } + mobileService.pakoutByOrder(param,getUserId()); + return R.ok("鍑哄簱鎴愬姛"); + } } -- Gitblit v1.9.1