|
@@ -12,11 +12,13 @@ import com.ruoyi.ams.business.IBusinessService;
|
|
|
import com.ruoyi.ams.config.domain.dto.AgvCallDTO;
|
|
|
import com.ruoyi.ams.config.domain.dto.AgvCallItemDTO;
|
|
|
import com.ruoyi.ams.config.domain.dto.LotattDTO;
|
|
|
+import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
|
|
|
import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
|
|
|
import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
|
|
|
import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
|
|
|
import com.ruoyi.ams.task.service.IWcsTaskService;
|
|
|
import com.ruoyi.ams.xuankuang.domain.form.AgvInTaskForm;
|
|
|
+import com.ruoyi.ams.xuankuang.domain.form.OutTaskForm;
|
|
|
import com.ruoyi.ams.xuankuang.domain.vo.WcsResponseVo;
|
|
|
import com.ruoyi.base.constant.Constant;
|
|
|
import com.ruoyi.base.domain.BaseLocationInfo;
|
|
@@ -28,16 +30,18 @@ import com.ruoyi.base.utils.IdSequenceUtils;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.system.service.ISysConfigService;
|
|
|
+import com.sun.deploy.perf.PerfRollup;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
+import static com.baomidou.mybatisplus.core.toolkit.StringPool.Y;
|
|
|
+
|
|
|
/**
|
|
|
* @author Jwk
|
|
|
* @version 1.0
|
|
@@ -70,6 +74,8 @@ public class AgvCallProxyService {
|
|
|
@Autowired
|
|
|
private IWmsDocOrderDetailsService iWmsDocOrderDetailsService;
|
|
|
@Autowired
|
|
|
+ private WmsDocOrderSubService wmsDocOrderSubService;
|
|
|
+ @Autowired
|
|
|
private WcsTaskSubService wcsTaskSubService;
|
|
|
@Autowired
|
|
|
private WmsToWcsApiService wmsToWcsApiService;
|
|
@@ -84,6 +90,7 @@ public class AgvCallProxyService {
|
|
|
* 桶装入库
|
|
|
* @return
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public void bucketIntoStorage(String palletNo, String materialType,
|
|
|
String agvSourceLocationId, Double quantity) {
|
|
|
//1.预备参数设置
|
|
@@ -121,6 +128,7 @@ public class AgvCallProxyService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public void bucketOutOfStorage(String palletNo, String materialType, String targetLocationId, Double quantity) {
|
|
|
BaseSku baseSku = iBaseSkuService.selectBaseSkuByMaterialType(materialType);
|
|
|
Assert.isTrue(ObjectUtil.isNotNull(baseSku) && StringUtils.isNotBlank(baseSku.getSku()), "the materialType is illegal");
|
|
@@ -128,11 +136,48 @@ public class AgvCallProxyService {
|
|
|
Assert.isTrue(ObjectUtil.isNotNull(quantity) && quantity > 0, "quantity is illegal");
|
|
|
BigDecimal quantityDecimal = new BigDecimal(quantity);
|
|
|
|
|
|
- iWmsDocOrderHeaderService.createOrderHeader(orderNo, Constant.ORDER_TYP.TZ.getValue(), Constant.ORDER_STS.STS00.getValue());
|
|
|
- iWmsDocOrderDetailsService.createOrderDetail(orderNo, baseSku.getSku(), quantityDecimal);
|
|
|
+ WmsDocOrderHeader docOrderHeader = iWmsDocOrderHeaderService.createOrderHeader(orderNo, Constant.ORDER_TYP.TZ.getValue(), Constant.ORDER_STS.STS00.getValue());
|
|
|
+ WmsDocOrderDetails docOrderDetail = iWmsDocOrderDetailsService.createOrderDetail(orderNo, baseSku.getSku(), quantityDecimal);
|
|
|
+
|
|
|
+ List<BaseLocationLotattDTO> baseLocationLotattList = wmsDocOrderSubService.addConfirmAllocationAuto(orderNo);
|
|
|
+ List<BaseLocationLotattDTO> filteredBaseLocationLotattList = wmsDocOrderSubService.filterInv(baseLocationLotattList, orderNo);
|
|
|
+ Assert.isTrue(CollectionUtil.isNotEmpty(filteredBaseLocationLotattList), "filteredBaseLocationLotattList is empty");
|
|
|
+
|
|
|
+ //int errorCount = 0;
|
|
|
+ for (BaseLocationLotattDTO baseLocationLotatt : filteredBaseLocationLotattList){
|
|
|
+ String taskNo = idSequenceUtils.generateId(Constant.ID_TYPE.LOTNUMBER.getDesc());
|
|
|
+ String locationInfoId = String.valueOf(baseLocationLotatt.getId());
|
|
|
+ //每个推荐的出库库存都创建一个wcs任务
|
|
|
+ wcsTaskSubService.addWcsOutTask(taskNo, locationInfoId, Constant.DRUM_CONNECTORS.toString(), orderNo, palletNo);
|
|
|
+ OutTaskForm outTaskForm = assemblyOutTaskForm(orderNo, taskNo, baseSku.getSkuType(), materialType, quantity, baseLocationLotatt);
|
|
|
+ WcsResponseVo wcsResponseVo = wmsToWcsApiService.wmsOutTask(outTaskForm);
|
|
|
+ if (!wcsResponseVo.isSuccess()) {
|
|
|
+ //errorCount++;
|
|
|
+ docOrderHeader.setRemark(wcsResponseVo.getMessage());
|
|
|
+ iWmsDocOrderHeaderService.updateWmsDocOrderHeader(docOrderHeader);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //此处屏蔽的代码:代表只有在全部同步失败的情况下,不改变单头和明细的状态
|
|
|
+ //if(errorCount == filteredBaseLocationLotattList.size()) return;
|
|
|
+ docOrderHeader.setOrderStatus(Constant.ASN_STS.STS10.getValue());
|
|
|
+ docOrderDetail.setLineStatus(Constant.ASN_STS.STS10.getValue());
|
|
|
+ iWmsDocOrderDetailsService.updateWmsDocOrderDetails(docOrderDetail);
|
|
|
+ iWmsDocOrderHeaderService.updateWmsDocOrderHeader(docOrderHeader);
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private OutTaskForm assemblyOutTaskForm(String orderNo, String taskNo, String skuType, String materialType, Double quantity, BaseLocationLotattDTO baseLocationLotatt) {
|
|
|
+ OutTaskForm outTaskForm = new OutTaskForm();
|
|
|
+ outTaskForm.setDocNo(orderNo);
|
|
|
+ outTaskForm.setTaskNo(taskNo);
|
|
|
+ outTaskForm.setRow(Integer.valueOf(baseLocationLotatt.getRowIndex()));
|
|
|
+ outTaskForm.setCol(Integer.parseInt(baseLocationLotatt.getRowNo()));
|
|
|
+ outTaskForm.setFloor(Integer.parseInt(baseLocationLotatt.getShiftNo()));
|
|
|
+ outTaskForm.setPackageType(Integer.valueOf(skuType));
|
|
|
+ outTaskForm.setMaterial(Integer.valueOf(materialType));
|
|
|
+ outTaskForm.setTotal(quantity.intValue());
|
|
|
+ return outTaskForm;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -163,21 +208,21 @@ public class AgvCallProxyService {
|
|
|
BaseSku baseSku = iBaseSkuService.selectBaseSkuByMaterialType(materialType);
|
|
|
Assert.isTrue(ObjectUtil.isNotNull(baseSku), "baseSku is null");
|
|
|
// 1.推荐目标库位
|
|
|
- BaseLocationLotattDTO baseLocationLotatt = baseLocationInfoSubService.recommendAReceiptLocation(baseSku.getSku());
|
|
|
- Assert.isTrue(ObjectUtil.isNotNull(baseLocationLotatt), "baseLocationLotatt is null");
|
|
|
- // 2.入库缓存位生成库存
|
|
|
+ BaseLocationInfo baseLocationInfo = baseLocationInfoSubService.recommendAReceiptLocation(baseSku.getSku());
|
|
|
+ Assert.isTrue(ObjectUtil.isNotNull(baseLocationInfo), "baseLocationLotatt is null");
|
|
|
+ // 2.桶装接驳位生成库存
|
|
|
invLotLocIdSubService.initInv(bucketCacheLocationId, baseSku.getSku(), palletNo, asnNo, taskNo, quantity);
|
|
|
|
|
|
// 3.生成任务
|
|
|
wcsTaskSubService.addWcsTask(taskNo, bucketCacheLocationId
|
|
|
- , String.valueOf(baseLocationLotatt.getId()), asnNo, palletNo, Constant.TASK_STS.TASK_PUBILSH.getLongValue(), "四向车入库任务");
|
|
|
+ , String.valueOf(baseLocationInfo.getId()), asnNo, palletNo, Constant.TASK_STS.TASK_PUBILSH.getLongValue(), "四向车入库任务");
|
|
|
//4.同步当前的wcs任务
|
|
|
- AgvInTaskForm agvInTaskForm = assemblyAgvInTaskForm(taskNo, asnNo, materialType, quantity, palletNo, baseLocationLotatt);
|
|
|
+ AgvInTaskForm agvInTaskForm = assemblyAgvInTaskForm(taskNo, asnNo, materialType, quantity, palletNo, baseLocationInfo);
|
|
|
return wmsToWcsApiService.wmsAgvInTask(agvInTaskForm);
|
|
|
}
|
|
|
|
|
|
|
|
|
- private AgvInTaskForm assemblyAgvInTaskForm(String taskNo, String asnNo, String materialType, Double quantity, String palletNo, BaseLocationLotattDTO baseLocationLotatt) {
|
|
|
+ private AgvInTaskForm assemblyAgvInTaskForm(String taskNo, String asnNo, String materialType, Double quantity, String palletNo, BaseLocationInfo baseLocationInfo) {
|
|
|
AgvInTaskForm agvInTaskForm = new AgvInTaskForm();
|
|
|
agvInTaskForm.setTaskNo(taskNo);
|
|
|
agvInTaskForm.setAgvId("1");
|
|
@@ -185,9 +230,9 @@ public class AgvCallProxyService {
|
|
|
agvInTaskForm.setDocNo(asnNo);
|
|
|
agvInTaskForm.setNum(quantity.intValue());
|
|
|
agvInTaskForm.setPalletId(palletNo);
|
|
|
- agvInTaskForm.setRow(Integer.valueOf(baseLocationLotatt.getRowIndex()));
|
|
|
- agvInTaskForm.setCol(Integer.valueOf(baseLocationLotatt.getRowNo()));
|
|
|
- agvInTaskForm.setFloor(Integer.valueOf(baseLocationLotatt.getShiftNo()));
|
|
|
+ agvInTaskForm.setRow(Integer.valueOf(baseLocationInfo.getRowIndex()));
|
|
|
+ agvInTaskForm.setCol(Integer.valueOf(baseLocationInfo.getRowNo()));
|
|
|
+ agvInTaskForm.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo()));
|
|
|
return agvInTaskForm;
|
|
|
}
|
|
|
|