123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825 |
- package com.ruoyi.ams.business;
- import com.alibaba.fastjson.JSON;
- import com.ruoyi.ams.agv.ndc.common.ByteUtil;
- import com.ruoyi.ams.agv.ndc.common.CRC16Util;
- import com.ruoyi.ams.agv.ndc.domain.AmsTask;
- import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
- import com.ruoyi.ams.box.service.IWmsBoxInfoService;
- import com.ruoyi.ams.config.domain.AsnSoStrategy;
- import com.ruoyi.ams.config.domain.dto.*;
- import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
- import com.ruoyi.ams.config.mapper.AsnSoStrategyMapper;
- import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
- import com.ruoyi.ams.config.service.LocationAllocationStrategy;
- import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
- import com.ruoyi.ams.inv.service.IInvLotAttService;
- import com.ruoyi.ams.inv.service.IInvLotLocIdService;
- import com.ruoyi.ams.task.domain.WcsTask;
- import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
- import com.ruoyi.ams.task.mapper.WcsTaskMapper;
- import com.ruoyi.ams.task.service.IWcsTaskService;
- import com.ruoyi.base.constant.Constant;
- import com.ruoyi.base.domain.BaseLocationInfo;
- import com.ruoyi.base.domain.BaseLocationZone;
- import com.ruoyi.base.domain.BaseSku;
- import com.ruoyi.base.domain.dto.BaseLocationInfoSameColDTO;
- import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
- import com.ruoyi.base.mapper.BaseLocationInfoMapper;
- import com.ruoyi.base.service.IBaseLocationInfoService;
- import com.ruoyi.base.service.IBaseSkuService;
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.common.core.redis.RedisCache;
- import com.ruoyi.common.core.redis.RedisKey;
- import com.ruoyi.common.exception.ServiceException;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.math.BigDecimal;
- import java.util.*;
- import java.util.stream.Collectors;
- @Slf4j
- @Service
- public class BusinessServiceImpl implements IBusinessService {
- @Autowired
- private IBusinessService businessService;
- @Autowired
- private IBaseLocationInfoService baseLocationInfoService;
- @Autowired
- private LocationAllocationStrategy locationAllocationStrategy;
- @Autowired
- private InvLotLocIdMapper invLotLocIdMapper;
- @Autowired
- private IInvLotLocIdService invLotLocIdService;
- @Autowired
- private IInvLotAttService iInvLotAttService;
- @Autowired
- private WcsTaskMapper wcsTaskMapper;
- @Autowired
- private AsnSoStrategyMapper asnSoStrategyMapper;
- @Autowired
- private BaseLocationInfoMapper baseLocationInfoMapper;
- @Autowired
- private IBaseSkuService baseSkuService;
- @Autowired
- private RedisCache redisCache;
- @Autowired
- private IWmsBoxInfoService wmsBoxInfoService;
- @Autowired
- private IWcsTaskService wcsTaskService;
- @Autowired
- private IAmsTaskService amsTaskService;
- @Autowired
- private IFlowConfigHeaderService flowConfigHeaderService;
- public static int geniKey(String taskNo) {
- int res = CRC16Util.calcCrc16(ByteUtil.string2byteArray(taskNo));
- if (res == 0) {
- BigDecimal t = new BigDecimal(taskNo);
- t = t.add(BigDecimal.ONE);
- return geniKey(t.toString());
- } else {
- return res;
- }
- }
- @Override
- public AjaxResult agvCall(Long flowId, AgvCallDTO agvCallDTO) {
-
- FlowConfigHeaderVO flowConfigHeaderVO = flowConfigHeaderService.selectFlowConfigHeaderById(flowId);
- List<AgvCallDTO> agvCallDTOList = new ArrayList<>();
- agvCallDTO.setWarehouseId(Constant.WAREHOUSE_ID);
- agvCallDTOList.add(agvCallDTO);
- return businessService.agvCall(flowConfigHeaderVO, agvCallDTOList);
- }
- @Override
- public AjaxResult agvCall(FlowConfigHeaderVO flowConfigHeaderVO, AgvCallDTO agvCallDTO) {
- List<AgvCallDTO> agvCallDTOList = new ArrayList<>();
- List<AgvCallItemDTO> callItemDTOList = new ArrayList<>();
- AgvCallItemDTO callItemDTO = new AgvCallItemDTO();
- callItemDTO.setLotattDTO(new LotattDTO());
- callItemDTO.setExtParam(agvCallDTO.getExtParam());
- callItemDTOList.add(callItemDTO);
- agvCallDTO.setAgvCallItemDTOList(callItemDTOList);
- agvCallDTOList.add(agvCallDTO);
- return businessService.agvCall(flowConfigHeaderVO, agvCallDTOList);
- }
- @Transactional
- @Override
- public AjaxResult agvCall(FlowConfigHeaderVO flowConfigHeaderVO, List<AgvCallDTO> agvCallDTOList) {
-
- Long token = SnowflakeIdWorker.generateId();
- try {
-
- AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
- for (AgvCallDTO agvCallDTO : agvCallDTOList) {
-
- BaseLocationInfo locationFrom = null;
- BaseLocationInfo locationTo = null;
- List<WcsTask> wcsTaskList = new ArrayList<>();
- String paramLocationFrom = agvCallDTO.getLocationFrom();
- String paramLocationTo = agvCallDTO.getLocationTo();
- List<String> zoneIdList = new ArrayList<>();
- if (StringUtils.isEmpty(paramLocationFrom)) {
- paramLocationFrom = flowConfigHeaderVO.getLocationFrom();
- }
- if (StringUtils.isEmpty(paramLocationTo)) {
- paramLocationTo = flowConfigHeaderVO.getLocationTo();
- }
- if (!StringUtils.isEmpty(flowConfigHeaderVO.getLocationFrom())) {
- zoneIdList = Arrays.stream(flowConfigHeaderVO.getLocationFrom().split(",")).collect(Collectors.toList());
- }
- if (flowConfigHeaderVO.getFlowType().equals("ASN")) {
- List<BaseLocationInfo> locationFromList = this.convertLocation(paramLocationFrom, agvCallDTO.getWarehouseId(), null);
- List<BaseLocationInfo> locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId(), "shift_no+ 0,shift_index");
- locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "ASN", asnSoStrategy, token);
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "ASN", asnSoStrategy, token);
-
- if (agvCallDTO.getAgvCallItemDTOList().size() > 0) {
- iInvLotAttService.deleteInvLotAttBylocationId(locationFrom.getId());
- invLotLocIdService.deleteInvLotLocIdById(locationFrom.getId());
- invLotLocIdService.initInv(locationFrom.getId().toString(), agvCallDTO);
- }
- wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, agvCallDTO, token));
- } else if (flowConfigHeaderVO.getFlowType().equals("SO")) {
- AgvCallItemDTO agvCall = agvCallDTO.getAgvCallItemDTOList().get(0);
- List<BaseLocationInfo> locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId(), null);
- HashMap<String, String> hashMap = JSON.parseObject(JSON.toJSONString(agvCall.getLotattDTO()), HashMap.class);
- List<BaseLocationInfo> locationFromList = baseLocationInfoMapper.selectSortedLocationLotattListByZoneIdListOrderBy(zoneIdList
- , agvCallDTO.getWarehouseId(), hashMap, agvCall.getSku(), "inv.create_time");
- locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "SO", asnSoStrategy, token);
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "SO", asnSoStrategy, token);
- wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, agvCallDTO, token));
- } else if (flowConfigHeaderVO.getFlowType().equals("MV")) {
- List<BaseLocationInfo> locationFromList = this.convertLocation(paramLocationFrom, agvCallDTO.getWarehouseId(), null);
- List<BaseLocationInfo> locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId(), null);
- locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "MV", asnSoStrategy, token);
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "MV", asnSoStrategy, token);
-
- if (agvCallDTO.getAgvCallItemDTOList().size() > 0) {
- iInvLotAttService.deleteInvLotAttBylocationId(locationFrom.getId());
- invLotLocIdService.deleteInvLotLocIdById(locationFrom.getId());
- invLotLocIdService.initInv(locationFrom.getId().toString(), agvCallDTO);
- }
- wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, agvCallDTO, token));
- }
- }
- return AjaxResult.success("任务下发成功");
- } catch (Exception e) {
- redisCache.unlockCacheObject(token);
- throw new ServiceException(e.getMessage(), token);
- }
- }
- @Transactional
- @Override
- public BaseLocationInfo inLocationAllocation(InWarehouseDTO inWarehouseDTO, Long token) {
-
- if (!StringUtils.isEmpty(inWarehouseDTO.getLocationTo())) {
- BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(inWarehouseDTO.getLocationTo(), inWarehouseDTO.getWarehouseId());
- return baseLocationInfo;
- } else {
- if (StringUtils.isEmpty(inWarehouseDTO.getLocationZoneTo()) && StringUtils.isEmpty(inWarehouseDTO.getLocationTo())) {
-
-
- AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
- BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, inWarehouseDTO.getSku());
-
- LotattDTO lotattDTO = inWarehouseDTO.getLotattDTO();
- Map<String, String> lotattMap = new HashMap<>();
- if (asnSoStrategy.getAsnSameLotatt1Flag().equals("optimization")) {
- lotattMap.put(asnSoStrategy.getAsnSameLotatt1Value(), lotattDTO.getAttr(asnSoStrategy.getAsnSameLotatt1Value()));
- }
- if (asnSoStrategy.getAsnSameLotatt2Flag().equals("optimization")) {
- lotattMap.put(asnSoStrategy.getAsnSameLotatt2Value(), lotattDTO.getAttr(asnSoStrategy.getAsnSameLotatt2Value()));
- }
- List<BaseLocationInfo> locationInfoList = new ArrayList<>();
- if (asnSoStrategy.getAsnSameSku().equals("force")) {
- List<String> colNo = baseLocationInfoMapper.selectSameSkuColNo(baseSku.getSku(), null, lotattMap);
- for (String s : colNo) {
- List<BaseLocationInfo> locs = baseLocationInfoService.selectNeighborLocation(s, null);
- locationInfoList.addAll(locs);
- }
- if (colNo == null || colNo.size() == 0) {
- colNo = baseLocationInfoMapper.selectSameSkuTypeColNo(baseSku.getSkuType(), null);
- for (String s : colNo) {
- List<BaseLocationInfo> locs = baseLocationInfoService.selectNeighborLocation(s, null);
- locationInfoList.addAll(locs);
- }
- }
-
- } else if (asnSoStrategy.getAsnSameSku().equals("optimization") || asnSoStrategy.getAsnSameSkuType().equals("optimization")) {
- List<String> skuColNo = baseLocationInfoMapper.selectSameSkuColNo(baseSku.getSku(), null, lotattMap);
- List<String> skuTypeColNo = baseLocationInfoMapper.selectSameSkuColNo(baseSku.getSkuType(), null, lotattMap);
- List<String> cols = new ArrayList<>();
- cols.addAll(skuColNo);
- cols.addAll(skuTypeColNo);
- List<BaseLocationInfo> locs = baseLocationInfoMapper.selectLocationByColNos(cols);
- locationInfoList.addAll(locs);
- } else {
- locationInfoList = baseLocationInfoMapper.selectLocationBindSku(baseSku.getSkuType());
- }
- return locationAllocationStrategy.filterLockLocation(locationInfoList, inWarehouseDTO, asnSoStrategy, token);
- } else {
-
- List<BaseLocationInfo> locationInfoList = baseLocationInfoService.selectSortedLocatinListByZoneId(Long.parseLong(inWarehouseDTO.getLocationZoneTo()), inWarehouseDTO.getWarehouseId(), null);
- return locationAllocationStrategy.filterLockLocation(locationInfoList, token);
- }
- }
- }
- @Transactional
- @Override
- public BaseLocationInfo outInvAllocation(OutWarehouseDTO outWarehouseDTO, Long token) {
-
- if (!StringUtils.isEmpty(outWarehouseDTO.getLocationFrom())) {
- BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(outWarehouseDTO.getLocationFrom(), outWarehouseDTO.getWarehouseId());
- return baseLocationInfo;
- } else {
-
- List<Long> zoneIdList = new ArrayList<>();
- if (!StringUtils.isEmpty(outWarehouseDTO.getLocationZoneFrom())) {
- zoneIdList.add(Long.parseLong(outWarehouseDTO.getLocationZoneFrom()));
- } else {
- List<BaseLocationLotattVO> zoneList = invLotLocIdMapper.selectInvZoneBySkuLotatt(outWarehouseDTO.getSku(), outWarehouseDTO.getSkuType(), outWarehouseDTO.getLotattDTO());
- for (BaseLocationLotattVO vo : zoneList) {
- zoneIdList.add(vo.getZoneId());
- }
- }
- LotattDTO lotattDTO = outWarehouseDTO.getLotattDTO();
- List<BaseLocationLotattVO> locationInfoList = baseLocationInfoMapper.selectSortedLocationLotattListByZoneIdList(zoneIdList, outWarehouseDTO.getWarehouseId(), lotattDTO.getAttr());
- AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
- return locationAllocationStrategy.filterLockInv(locationInfoList, outWarehouseDTO, asnSoStrategy, token);
- }
- }
- @Override
- public BaseLocationInfo zoneLocationAllocation(List<BaseLocationInfo> locationInfoList, String locationType
- , String type, AsnSoStrategy asnSoStrategy, Long token) {
- BaseLocationInfo locationInfo = null;
- if (type.equals("ASN")) {
-
- if (locationType.equals("locationFrom")) {
- for (BaseLocationInfo b : locationInfoList) {
- if (!b.getStockStatus().equals("00")) {
- continue;
- }
- if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
- continue;
- }
- locationInfo = b;
- break;
- }
- if (locationInfo == null) {
- throw new ServiceException("入库起始库位没有可以分配的空库位", token);
- }
- } else {
- for (BaseLocationInfo b : locationInfoList) {
- if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
- continue;
- }
- if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
- continue;
- }
- locationInfo = b;
- break;
- }
- if (locationInfo == null) {
- throw new ServiceException("入库目标点没有可以分配的库位", token);
- }
- }
- } else if (type.equals("SO")) {
-
- if (locationType.equals("locationFrom")) {
- for (BaseLocationInfo b : locationInfoList) {
- if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("N") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
- continue;
- }
- if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
- continue;
- }
-
- boolean con = invLotLocIdService.verifyInventoryCanOutbound(b.getId().toString());
- if (!con) {
- continue;
- }
- locationInfo = b;
- break;
- }
- if (locationInfo == null) {
- throw new ServiceException("出库起始点没有可以分配的库存!", token);
- }
- } else {
- for (BaseLocationInfo b : locationInfoList) {
- if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
- continue;
- }
- if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
- continue;
- }
- locationInfo = b;
- break;
- }
- if (locationInfo == null) {
- throw new ServiceException("出库目标点没有可以分配的库位", token);
- }
- }
- } else {
- if (locationType.equals("locationFrom")) {
- for (BaseLocationInfo b : locationInfoList) {
- if (!b.getStockStatus().equals("00") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
- continue;
- }
- if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
- continue;
- }
- locationInfo = b;
- break;
- }
-
- if (locationInfo == null) {
- throw new ServiceException("搬运起始点没有可以分配的库位", token);
- }
- } else {
- for (BaseLocationInfo b : locationInfoList) {
- if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
- continue;
- }
- if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
- continue;
- }
- locationInfo = b;
- break;
- }
-
- if (locationInfo == null) {
- throw new ServiceException("搬运目标点没有可以分配的库位", token);
- }
- }
- }
- return locationInfo;
- }
- @Override
- public List<BaseLocationInfo> convertLocation(String locationNoOrZoneId, Long warehouseId, String orderBy) {
- List<BaseLocationInfo> locationInfoList = new ArrayList<>();
- if (!StringUtils.isEmpty(locationNoOrZoneId)) {
- String[] arr = locationNoOrZoneId.split(",");
- for (String obj : arr) {
- boolean isLocation = baseLocationInfoService.checkIsLocation(obj, warehouseId);
- if (isLocation) {
- BaseLocationInfo info = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(obj, warehouseId);
- locationInfoList.add(info);
- } else {
- List<BaseLocationInfo> infoList = baseLocationInfoService.selectSortedLocatinListByZoneId(Long.parseLong(obj), warehouseId, orderBy);
- locationInfoList.addAll(infoList);
- }
- }
- }
- return locationInfoList;
- }
- @Override
- public List<WcsTask> genTask(BaseLocationInfo locationFrom, BaseLocationInfo locationTo, FlowConfigHeaderVO flowConfigHeaderVO, AgvCallDTO agvCallDTO, Long token) {
- if (flowConfigHeaderVO.getLocationFromStrategyFlag().equals("N")) {
- if (locationFrom == null) {
- throw new ServiceException("起始库位不能为空", token);
- }
- }
- if (flowConfigHeaderVO.getLocationToStrategyFlag().equals("N")) {
- if (locationTo == null) {
- throw new ServiceException("目标库位不能为空", token);
- }
- }
- List<WcsTask> wcsTaskList = new ArrayList<>();
- if (StringUtils.isEmpty(flowConfigHeaderVO.getRootFlow())) {
- String taskNo = System.currentTimeMillis() + "";
- WcsTask wcsTask = new WcsTask();
- wcsTask.setTaskNo(taskNo);
- if (locationFrom != null) {
- wcsTask.setAreaFrom(locationFrom.getZoneId().toString());
- wcsTask.setLocationFrom(locationFrom.getId().toString());
- }
- if (locationTo != null) {
- wcsTask.setAreaTo(locationTo.getZoneId() + "");
- wcsTask.setLocationTo(locationTo.getId().toString());
- }
- wcsTask.setState(9L);
- wcsTask.setPriority(1L);
- wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
- wcsTask.setCreateDate(new Date());
- wcsTask.setCreateUser(agvCallDTO.getCreateUser());
- wcsTask.setBusinessType("01");
- wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
- wcsTask.setExt8(token.toString());
- wcsTask.setExt7(flowConfigHeaderVO.getId().toString());
- wcsTask.setExt6(StringUtils.isNotEmpty(agvCallDTO.getToArea()) ? agvCallDTO.getToArea() : "");
- wcsTask.setExtParam(agvCallDTO.getExtParam());
- wcsTaskList.add(wcsTask);
- businessService.addTask(wcsTask);
- } else {
-
- }
- return wcsTaskList;
- }
- @Transactional
- @Override
- public AjaxResult addTask(WcsTask wcsTask) {
-
- if (!StringUtils.isEmpty(wcsTask.getLocationFrom())) {
- baseLocationInfoService.updateLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Constant.STOCK_STATUS.STOCK10.getValue());
- }
- if (!StringUtils.isEmpty(wcsTask.getLocationTo())) {
- baseLocationInfoService.updateLocationStockStatus(Long.parseLong(wcsTask.getLocationTo()), Constant.STOCK_STATUS.STOCK10.getValue());
- }
- Integer priority = 1;
- if (!wcsTask.getTaskType().equals("OB")) {
- if (wcsTask.getPriority() == 99) {
- int current = wcsTaskMapper.selectCurrentPriority();
- priority = current - 100;
- } else {
- int current = wcsTaskMapper.selectCurrentPriority();
- priority = current + 10;
- }
- } else {
-
- priority = wcsTask.getPriority().intValue();
- }
- wcsTask.setPriority((long) priority);
- int result = wcsTaskMapper.insertWcsTask(wcsTask);
- if (result > 0) {
- return AjaxResult.success("任务生成成功");
- } else {
- throw new ServiceException("任务生成失败");
- }
- }
- @Override
- public AjaxResult addTaskList(List<WcsTask> wcsTaskList) {
- for (WcsTask wcsTask : wcsTaskList) {
-
- if (!StringUtils.isEmpty(wcsTask.getLocationFrom())) {
- baseLocationInfoService.updateLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Constant.STOCK_STATUS.STOCK10.getValue());
- }
- if (!StringUtils.isEmpty(wcsTask.getLocationTo())) {
- baseLocationInfoService.updateLocationStockStatus(Long.parseLong(wcsTask.getLocationTo()), Constant.STOCK_STATUS.STOCK10.getValue());
- }
- Integer priority = 1;
- if (!wcsTask.getTaskType().equals("OB")) {
- if (wcsTask.getPriority() == 99) {
- int current = wcsTaskMapper.selectCurrentPriority();
- priority = current - 100;
- } else {
- int current = wcsTaskMapper.selectCurrentPriority();
- priority = current + 10;
- }
- } else {
-
- priority = wcsTask.getPriority().intValue();
- }
- wcsTask.setPriority((long) priority);
- int result = wcsTaskMapper.insertWcsTask(wcsTask);
- if (result > 0) {
- return AjaxResult.success("任务生成成功");
- } else {
- throw new ServiceException("任务生成失败");
- }
- }
- return AjaxResult.success("");
- }
- @Override
- public AjaxResult sendTask(WcsTask wcsTask) {
- BaseLocationInfo locFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(wcsTask.getLocationFrom(), Constant.WAREHOUSE_ID);
- BaseLocationInfo locTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(wcsTask.getLocationTo(), Constant.WAREHOUSE_ID);
- AmsTask amsTask = new AmsTask();
- amsTask.setTaskNo(wcsTask.getTaskNo());
- if (wcsTask.getBusinessType() == null || wcsTask.getBusinessType().equals("")) {
- amsTask.setBusinessType(Constant.TASK_BUSINESS_TYPE.TASK_01.getValue());
- } else {
- amsTask.setBusinessType(wcsTask.getBusinessType());
- }
- amsTask.setIsDelete(0);
- amsTask.setAciAccept(0);
- amsTask.setIkey((long) geniKey(amsTask.getTaskNo()));
- amsTask.setPriority(wcsTask.getPriority().intValue());
- amsTask.setStFrom(locFrom.getAgvStation().intValue());
- amsTask.setStTo(locTo.getAgvStation().intValue());
- amsTask.setExt1(wcsTask.getExt1());
- amsTask.setExt2(wcsTask.getExt2());
- amsTask.setExt3(wcsTask.getExt3());
- if (wcsTask.getBusinessType().equals("m")) {
-
- wcsTask.setState(2L);
- int result = wcsTaskService.updateWcsTask(wcsTask);
- if (result > 0) {
-
- return AjaxResult.success("下发成功");
- } else {
- return AjaxResult.error("下发失败");
- }
- } else {
- int result = amsTaskService.insertAmsTask(amsTask);
- if (result > 0) {
-
- return AjaxResult.success("下发成功");
- } else {
- return AjaxResult.error("下发失败");
- }
- }
- }
- @Override
- public AjaxResult sendTaskList(List<WcsTask> wcsTaskList) {
- return null;
- }
- @Transactional
- @Override
- public void autoSend() {
- List<WcsTask> wcsTaskList = wcsTaskService.selectWcsUnallocated(Constant.WAREHOUSE_ID);
- if (wcsTaskList != null && wcsTaskList.size() > 0) {
- for (WcsTask wcsTask : wcsTaskList) {
-
- if (wcsTask.getBusinessType().equals(Constant.TASK_BUSINESS_TYPE.TASK_POWER.getValue()) ||
- wcsTask.getBusinessType().equals(Constant.TASK_BUSINESS_TYPE.TASK_m.getValue())) {
- log.info("定时充电/盘点取消任务直接下发");
- sendTask(wcsTask);
- wcsTask.setState(2L);
- wcsTaskService.updateWcsTask(wcsTask);
- break;
- }
-
- if (StringUtils.isNotEmpty(wcsTask.getTaskType())
- && wcsTask.getTaskType().equals(Constant.TASK_TYPE.FORWARD.getValue())) {
- sendTask(wcsTask);
- wcsTask.setState(10L);
- wcsTaskService.updateWcsTask(wcsTask);
- break;
- }
- try {
-
- businessService.taskDispatchStack(wcsTask);
- Thread.sleep(500);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- @Transactional
- @Override
- public void autoSendTranSit() {
- List<BaseLocationInfo> baseLocationInfos = baseLocationInfoService.selectSortedLocatinListByZoneId(Constant.ZONE_TYPE.TRANSIT.getValue()
- , Constant.WAREHOUSE_ID, null);
- for (BaseLocationInfo baseLocationInfo : baseLocationInfos) {
-
- }
- }
- @Transactional
- @Override
- public boolean taskDispatchStack(WcsTask wcsTask) {
-
-
- WcsTask currentTask = new WcsTask();
-
- BaseLocationInfo basLocationInfoFrom = null;
-
- BaseLocationZone basLocationZoneTo = null;
-
- basLocationInfoFrom = baseLocationInfoService.selectBaseLocationInfoById(Long.parseLong(wcsTask.getLocationFrom()));
-
- BaseLocationInfo locationInfoTo = baseLocationInfoService.selectBaseLocationInfoById(Long.parseLong(wcsTask.getLocationTo()));
-
- if (businessService.taskDispatchCheck(wcsTask) == false) {
- return false;
- }
- if (basLocationInfoFrom != null) {
- if (basLocationInfoFrom.getIsEmpty().equals("Y")) {
- wcsTask.setRemark("起始库位为空无法进行任务");
- wcsTaskService.updateWcsTask(wcsTask);
- return false;
- }
-
- if (!StringUtils.isEmpty(basLocationInfoFrom.getColNo())) {
- List<BaseLocationInfo> locationInfoList = baseLocationInfoMapper.laneCheck(basLocationInfoFrom.getColNo(), "LANE_FROM", Constant.WAREHOUSE_ID);
- if (locationInfoList != null && locationInfoList.size() > 0) {
- wcsTask.setRemark("起始库位同列或同巷道有车辆在任务中,等待其他任务完成");
- wcsTaskService.updateWcsTask(wcsTask);
- return false;
- }
- }
- }
-
- if (basLocationInfoFrom.getLocationType().equals("2")) {
-
- List<WcsTaskLocationDTO> locationDTOS = wcsTaskService.selectTaskByColNo(basLocationInfoFrom.getColNo(), basLocationInfoFrom.getColIndex(), basLocationInfoFrom.getZoneId(), null);
- if (locationDTOS.size() > 0) {
- wcsTask.setRemark("队列中有其他任务阻挡,让其他任务先执行");
- wcsTaskService.updateWcsTask(wcsTask);
- return false;
- }
-
- List<BaseLocationInfo> beforeLoc = baseLocationInfoService.selectBeforeLocationByColNo(basLocationInfoFrom.getColNo(), basLocationInfoFrom.getColIndex());
- if (beforeLoc != null) {
- for (BaseLocationInfo b : beforeLoc) {
-
-
- if (b.getIsEmpty().equals("N")) {
- wcsTask.setRemark("有阻挡物,任务无法执行");
- wcsTaskService.updateWcsTask(wcsTask);
- return false;
- }
- }
- }
- }
- currentTask = wcsTask;
-
- if (locationInfoTo != null && locationInfoTo.getLocationType().equals("2")) {
- List<BaseLocationInfo> beforeLoc = baseLocationInfoService.selectBeforeLocationByColNo(locationInfoTo.getColNo(), locationInfoTo.getColIndex());
- if (beforeLoc != null) {
- for (BaseLocationInfo b : beforeLoc) {
-
- if (b.getId().equals(locationInfoTo.getId())) {
- continue;
- }
-
-
- if (b.getIsEmpty().equals("N")) {
- currentTask.setRemark("目标库位前方有阻挡1");
- currentTask.setUpdateDate(new Date());
- wcsTaskService.updateWcsTask(currentTask);
- return false;
- }
- }
- }
- List<WcsTaskLocationDTO> dtos = wcsTaskService.selectTaskByColNoAfter(locationInfoTo.getColNo(), locationInfoTo.getColIndex(), locationInfoTo.getZoneId(), null);
- if (dtos != null && dtos.size() > 0) {
- currentTask.setRemark("目标库位同列有未完成的任务");
- wcsTaskService.updateWcsTask(currentTask);
- return false;
- }
- }
-
- if (locationInfoTo != null) {
- if (locationInfoTo.getZoneId() != 10) {
- String locationtoTmp = "";
- List<BaseLocationInfoSameColDTO> b = baseLocationInfoService.selectSameColCanToLoc(locationInfoTo.getColNo(), locationInfoTo.getColIndex());
- for (BaseLocationInfoSameColDTO bt : b) {
- if (bt.getIsOb() == false) {
- locationtoTmp = bt.getId().toString();
- } else {
- break;
- }
- }
- if (!StringUtils.isEmpty(locationtoTmp)) {
- wcsTask.setLocationTo(locationtoTmp);
- wcsTaskService.updateWcsTask(wcsTask);
-
- locationInfoTo.setStockStatus("00");
- baseLocationInfoService.updateBaseLocationInfo(locationInfoTo);
-
- BaseLocationInfo newlocationInfoTo = baseLocationInfoService.selectBaseLocationInfoById(Long.parseLong(locationtoTmp));
- newlocationInfoTo.setStockStatus("10");
- baseLocationInfoService.updateBaseLocationInfo(newlocationInfoTo);
- }
- }
- }
- currentTask.setState(10L);
- currentTask.setRemark("");
- if (wcsTaskService.updateWcsTask(currentTask) > 0) {
- AjaxResult result = businessService.sendTask(currentTask);
- if ((int) result.get(AjaxResult.CODE_TAG) == 500) {
- throw new ServiceException("自动下发任务失败:" + result.get("msg"));
- }
- return true;
- } else {
- return false;
- }
- }
- @Override
- public boolean taskDispatchCheck(WcsTask wcsTask) {
- if (!StringUtils.isEmpty(wcsTask.getBeforeTask())) {
- List<WcsTask> taskFindBeforeRecord = wcsTaskMapper.selectBeforeTask(wcsTask.getBeforeTask());
- if (taskFindBeforeRecord != null && taskFindBeforeRecord.size() > 0) {
-
- wcsTask.setRemark("前置任务未完成主任务无法下发");
- wcsTaskService.updateWcsTask(wcsTask);
- return false;
- }
- }
- return true;
- }
- }
|