package com.zy.api.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.R; import com.core.exception.CoolException; import com.zy.api.controller.params.ReceviceTaskParams; import com.zy.api.controller.params.WorkTaskParams; import com.zy.api.service.WcsApiService; import com.zy.asrs.entity.BasDevice; import com.zy.asrs.entity.LocAroundBind; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasDeviceService; import com.zy.asrs.service.LocAroundBindService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; import com.zy.common.constant.MesConstant; import com.zy.common.utils.HttpHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @Service public class WcsApiServiceImpl implements WcsApiService { @Autowired private BasDeviceService basDeviceService; @Autowired private LocAroundBindService locAroundBindService; @Autowired private LocMastService locMastService; @Autowired private WrkMastService wrkMastService; /** * 通知WCS锁定库位,及禁止当前库位的一切操作 * @author Ryan * @date 2026/1/10 11:18 * @param params * @return com.core.common.R */ @Override @Transactional(rollbackFor = Exception.class) public R lockLocs(ReceviceTaskParams params) { BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper() .eq("status", 1) .eq("dev_no", params.getDeviceNo())); if (Objects.isNull(basDevice)) { throw new CoolException("机台信息不存在或已禁用!!"); } List binds = locAroundBindService.selectList(new EntityWrapper().eq("dev_no", basDevice.getDevNo())); if (Objects.isNull(binds) || binds.isEmpty()) { throw new CoolException("机台未绑定工作站台!!"); } Set locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet()); reportLockLocs(locs); return R.ok("上报成功!!"); } /** * 余料回库 (搬运余料回库) * @author Ryan * @date 2026/1/10 13:19 * @param params * @return com.core.common.R */ @Override @Transactional(rollbackFor = Exception.class) public R backLocs(WorkTaskParams params) { if (Objects.isNull(params.getWrkCode())) { throw new CoolException("工作号不能为空!!"); } String wrkCode = params.getWrkCode(); if (wrkCode.contains("-1")) { throw new CoolException("配对任务编码错误,请检查后重新上传!!"); } WrkMast mast = wrkMastService.selectOne(new EntityWrapper().eq("wrk_code", params.getWrkCode())); if (Objects.isNull(mast)) { throw new CoolException("任务不存在!!"); } if (!mast.getWrkSts().equals(103L)) { throw new CoolException("当前任务并非余料出库任务!!"); } mast.setWrkSts(53L); if (!wrkMastService.updateById(mast)) { throw new CoolException("任务状态更新失败!!"); } return R.ok("接收成功,执行回库中..."); } /** * 上报锁定库位信息 * @author Ryan * @date 2026/1/10 12:50 * @param locs */ @Transactional(rollbackFor = Exception.class) public void reportLockLocs(Set locs) { String response; try { response = new HttpHandler.Builder() .setUri(MesConstant.URL) .setPath(MesConstant.LOCK_LOCS_URL) .setJson(JSON.toJSONString(locs)) .build() .doPost(); R result = JSON.parseObject(response, R.class); if (result.get("code").equals("200")) { //TODO 上报是否成功 } } catch (IOException e) { throw new RuntimeException(e); } } }