|
@@ -1,9 +1,7 @@
|
|
|
package com.ruoyi.ams.order.service.impl;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
import com.ruoyi.ams.box.domain.WmsBoxInfo;
|
|
|
import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
|
|
@@ -13,17 +11,17 @@ import com.ruoyi.ams.config.domain.FlowConfigHeader;
|
|
|
import com.ruoyi.ams.config.domain.dto.AgvCallDTO;
|
|
|
import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
|
|
|
import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
|
|
|
+import com.ruoyi.ams.inv.domain.ActTransactionLog;
|
|
|
import com.ruoyi.ams.inv.domain.InvLotAtt;
|
|
|
import com.ruoyi.ams.inv.domain.InvLotLocId;
|
|
|
+import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
|
|
|
import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
|
|
|
import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
|
|
|
+import com.ruoyi.ams.inv.service.IActTransactionLogService;
|
|
|
import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
|
import com.ruoyi.ams.order.domain.ActAllocationDetails;
|
|
|
import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
|
|
|
-import com.ruoyi.ams.order.form.ArrangeStockForm;
|
|
|
-import com.ruoyi.ams.order.form.CheckOutInfoForm;
|
|
|
-import com.ruoyi.ams.order.form.PickForm;
|
|
|
-import com.ruoyi.ams.order.form.PickInfoForm;
|
|
|
+import com.ruoyi.ams.order.form.*;
|
|
|
import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
|
|
|
import com.ruoyi.ams.order.service.IActAllocationDetailsService;
|
|
|
import com.ruoyi.ams.order.vo.StockOrderVO;
|
|
@@ -34,11 +32,13 @@ import com.ruoyi.base.domain.BaseLocationInfo;
|
|
|
import com.ruoyi.base.domain.vo.CodeSkuRelationshipVO;
|
|
|
import com.ruoyi.base.service.IBaseLocationInfoService;
|
|
|
import com.ruoyi.base.service.ICodeSkuRelationshipService;
|
|
|
+import com.ruoyi.base.utils.IdSequenceUtils;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
import com.ruoyi.common.core.domain.model.LoginUser;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.ruoyi.ams.order.mapper.WmsDocOrderHeaderMapper;
|
|
@@ -80,6 +80,10 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
private IFlowConfigHeaderService flowConfigHeaderService;
|
|
|
@Autowired
|
|
|
private ICodeSkuRelationshipService codeSkuRelationshipService;
|
|
|
+ @Autowired
|
|
|
+ private IActTransactionLogService actTransactionLogService;
|
|
|
+ @Autowired
|
|
|
+ private IdSequenceUtils idSequenceUtils;
|
|
|
|
|
|
/**
|
|
|
* 查询出库单头
|
|
@@ -330,6 +334,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
for (PickInfoForm p : pickInfoFormList) {
|
|
|
String locationTo = p.getLocationTo();
|
|
|
//TODO 任务完成后更新 查询对应的分配明细表
|
|
|
+ //TODO 改成按托盘号进行呼叫
|
|
|
ActAllocationDetails actAllocationDetails = actAllocationDetailsService.selectActAllocationDetailsByAllocationId(p.getAllocationId());
|
|
|
String location = actAllocationDetails.getLocationId().toString();
|
|
|
//qty = actAllocationDetails.getPickQty();
|
|
@@ -352,7 +357,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
//库存进行移动
|
|
|
invLotLocIdService.stockTransfer(actAllocationDetails.getLocationId(), Long.parseLong(locationTo));
|
|
|
//托盘进行绑定修改
|
|
|
- wmsBoxInfoMapper.updateLocationBind(actAllocationDetails.getLocationId(), Long.parseLong(locationTo), null);
|
|
|
+ wmsBoxInfoMapper.updateLocationBind(Long.parseLong(location), Long.parseLong(locationTo), null);
|
|
|
if (!exitsMap.containsKey(location)) {
|
|
|
exitsMap.put(location, location);
|
|
|
//生成任务退回
|
|
@@ -449,6 +454,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public AjaxResult arrangeStock(ArrangeStockForm arrangeStockForm) {
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
//查询托盘
|
|
|
WmsBoxInfo wmsBoxInfo = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(arrangeStockForm.getPalletNoTo());
|
|
|
//物料绑定关系
|
|
@@ -475,6 +481,30 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
wmsBoxInfoService.updateWmsBoxInfo(wmsBoxInfo);
|
|
|
//库存进行移动
|
|
|
invLotLocIdService.stockTransferPick(actAllocationDetails.getLocationId(), wmsBoxInfo.getLocationId(), actAllocationDetails.getLotnum(), new BigDecimal(arrangeStockForm.getQty()), arrangeStockForm.getBoxNo());
|
|
|
+
|
|
|
+ //记录事务日志
|
|
|
+ //记录日志
|
|
|
+ ActTransactionLog actTransactionLog = new ActTransactionLog();
|
|
|
+ actTransactionLog.setTransactionId(SnowflakeIdWorker.generateId().toString());
|
|
|
+ actTransactionLog.setTransactionType("PK");
|
|
|
+ actTransactionLog.setDocNo(arrangeStockForm.getOrderNo());
|
|
|
+ actTransactionLog.setDocType("SO");
|
|
|
+ actTransactionLog.setDocLineNo(actAllocationDetails.getLineNo());
|
|
|
+ actTransactionLog.setFmLocation(actAllocationDetails.getLocationId().toString());
|
|
|
+ actTransactionLog.setFmSku(actAllocationDetails.getMaterial());
|
|
|
+ actTransactionLog.setFmQty(new BigDecimal(arrangeStockForm.getQty()));
|
|
|
+ actTransactionLog.setFmLotnum(actAllocationDetails.getLotnum());
|
|
|
+ actTransactionLog.setToLocaltion(wmsBoxInfo.getLocationId().toString());
|
|
|
+ actTransactionLog.setToSku(actAllocationDetails.getMaterial());
|
|
|
+ actTransactionLog.setToQty(new BigDecimal(arrangeStockForm.getQty()));
|
|
|
+ actTransactionLog.setToLotnum(actAllocationDetails.getLotnum());
|
|
|
+ actTransactionLog.setUserdefine1(arrangeStockForm.getBoxNo());
|
|
|
+ actTransactionLog.setCreateDate(new Date());
|
|
|
+ actTransactionLog.setCreateBy(loginUser.getUsername());
|
|
|
+ actTransactionLog.setUpdateBy(loginUser.getUsername());
|
|
|
+ actTransactionLog.setUpdateTime(new Date());
|
|
|
+ actTransactionLogService.insertActTransactionLog(actTransactionLog);
|
|
|
+
|
|
|
}
|
|
|
return AjaxResult.success("操作成功");
|
|
|
//ActAllocationDetails actAllocationDetails = actAllocationDetailsService.selectActAllocationDetailsByAllocationId(arrangeStockForm.getAllocationId());
|
|
@@ -487,4 +517,68 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
agvCallDTO.setWarehouseId(Constant.WAREHOUSE_ID);
|
|
|
return businessService.agvCall(flowConfigHeader, agvCallDTO);*/
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public AjaxResult invTally(InvTallyForm invTallyForm) {
|
|
|
+ //生成出库单
|
|
|
+ //生成出库明细
|
|
|
+ //生成分配
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
+ List<InvLotLocIdLotattVO> invList = invTallyForm.getInvLotLocIdLotattVOS();
|
|
|
+ String orderNo = idSequenceUtils.generateId("ORDERNO");
|
|
|
+ WmsDocOrderHeader header = new WmsDocOrderHeader();
|
|
|
+ header.setOrderNo(orderNo);
|
|
|
+ header.setCustomerId(Constant.CUSTOMER_ID);
|
|
|
+ header.setOrderType("LH");
|
|
|
+ header.setOrderStatus("20");
|
|
|
+ header.setCreateBy(loginUser.getUsername());
|
|
|
+ header.setCreateTime(new Date());
|
|
|
+ Map<String, WmsDocOrderDetails> mapOrder = new HashMap<>();
|
|
|
+ for (InvLotLocIdLotattVO inv : invList) {
|
|
|
+ BigDecimal current = BigDecimal.valueOf(inv.getQty()).subtract(BigDecimal.valueOf(inv.getQtyallocated()));
|
|
|
+ WmsDocOrderDetails de;
|
|
|
+ if (mapOrder.get(inv.getSku()) == null) {
|
|
|
+ de = new WmsDocOrderDetails();
|
|
|
+ de.setOrderNo(orderNo);
|
|
|
+ de.setOrderLineNo(BigDecimal.valueOf(mapOrder.size()));
|
|
|
+ de.setLineStatus("20");
|
|
|
+ de.setSku(inv.getSku());
|
|
|
+ de.setQtyOrdered(BigDecimal.ZERO);
|
|
|
+ de.setQtyOrderedEach(BigDecimal.ZERO);
|
|
|
+ de.setQtyAllocated(BigDecimal.ZERO);
|
|
|
+ de.setQtyAllocatedEach(BigDecimal.ZERO);
|
|
|
+ de.setQtyPicked(BigDecimal.ZERO);
|
|
|
+ de.setQtyPickedEach(BigDecimal.ZERO);
|
|
|
+ de.setQtyShipped(BigDecimal.ZERO);
|
|
|
+ de.setQtyShippedEach(BigDecimal.ZERO);
|
|
|
+ de.setCustomerId(inv.getCustomerId());
|
|
|
+ de.setLotnum(inv.getLotnum());
|
|
|
+ mapOrder.put(inv.getSku(), de);
|
|
|
+ } else {
|
|
|
+ de = mapOrder.get(inv.getSku());
|
|
|
+ }
|
|
|
+ de.setQtyOrdered(de.getQtyOrdered().add(current));
|
|
|
+ de.setQtyOrderedEach(de.getQtyOrdered());
|
|
|
+ de.setQtyAllocated(de.getQtyAllocated().add(current));
|
|
|
+ de.setQtyAllocatedEach(de.getQtyAllocated());
|
|
|
+ de.setCreateBy(loginUser.getUsername());
|
|
|
+ de.setCreateTime(new Date());
|
|
|
+
|
|
|
+ //更新已分配
|
|
|
+ invLotLocIdMapper.updateAllocationBy(inv.getLotnum(),inv.getLocationId(),current);
|
|
|
+
|
|
|
+ //生成分配表
|
|
|
+ actAllocationDetailsService.addActAllocationDetails(inv.getLotnum(), inv.getLocationId().toString(), BigDecimal.valueOf(inv.getQty()), de);
|
|
|
+ }
|
|
|
+ for (WmsDocOrderDetails de : mapOrder.values()) {
|
|
|
+ wmsDocOrderHeaderService.insertWmsDocOrderDetails(de);
|
|
|
+ }
|
|
|
+ int result = wmsDocOrderHeaderService.insertWmsDocOrderHeader(header);
|
|
|
+ if (result > 0) {
|
|
|
+ return AjaxResult.success("操作成功");
|
|
|
+ } else {
|
|
|
+ return AjaxResult.error("操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|