Browse Source

选矿bug

ChenYang 1 năm trước cách đây
mục cha
commit
428c85c9f2

+ 10 - 0
ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/ProcessLocationTest.java

@@ -240,4 +240,14 @@ public class ProcessLocationTest {
     }
 
 
+
+    @Test
+    public void updateInvLocId(){
+        InvLotLocId invLotLocId = new InvLotLocId();
+        invLotLocId.setLocationId("101167").setLotnum("LT2023051500000002").
+                setTraceid(null).setSku("C5H10OS2").setCustomerId("default");
+        invLotLocIdService.updateInvLotLocId(invLotLocId);
+    }
+
+
 }

+ 9 - 9
ruoyi-ui/src/views/wms/docOrder/index.vue

@@ -196,15 +196,15 @@
             v-hasPermi="['docOrder:docOrder:remove']"
           >删除
           </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            v-if="scope.row.orderStatus != '99' && scope.row.orderStatus != '00'"
-            @click="handleCancel(scope.row)"
-            v-hasPermi="['docOrder:docOrder:cancel']"
-          >取消
-          </el-button>
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-delete"-->
+<!--            v-if="scope.row.orderStatus != '99' && scope.row.orderStatus != '00'"-->
+<!--            @click="handleCancel(scope.row)"-->
+<!--            v-hasPermi="['docOrder:docOrder:cancel']"-->
+<!--          >取消-->
+<!--          </el-button>-->
         </template>
       </el-table-column>
     </el-table>

+ 29 - 158
warewms-ams/src/main/java/com/ruoyi/ams/inv/domain/InvLotLocId.java

@@ -1,6 +1,9 @@
 package com.ruoyi.ams.inv.domain;
 
 import java.math.BigDecimal;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
@@ -8,10 +11,11 @@ import com.ruoyi.common.core.domain.BaseEntity;
 
 /**
  * 库位库存信息对象 inv_lot_loc_id
- * 
  * @author andy
  * @date 2022-03-03
  */
+@Data
+@Accessors(chain = true)
 public class InvLotLocId extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -72,165 +76,32 @@ public class InvLotLocId extends BaseEntity
     @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
     private BigDecimal qtyonhold;
 
-    public void setLotnum(String lotnum) 
-    {
-        this.lotnum = lotnum;
-    }
-
-    public String getLotnum() 
-    {
-        return lotnum;
-    }
-    public void setLocationId(String locationId) 
-    {
-        this.locationId = locationId;
-    }
-
-    public String getLocationId() 
-    {
-        return locationId;
-    }
-    public void setTraceid(String traceid) 
-    {
-        this.traceid = traceid;
-    }
-
-    public String getTraceid() 
-    {
-        return traceid;
-    }
-    public void setCustomerId(String customerId) 
-    {
-        this.customerId = customerId;
-    }
-
-    public String getCustomerId() 
-    {
-        return customerId;
-    }
-    public void setSku(String sku) 
-    {
-        this.sku = sku;
-    }
-
-    public String getSku() 
-    {
-        return sku;
-    }
-    public void setQty(BigDecimal qty) 
-    {
-        this.qty = qty;
-    }
-
-    public BigDecimal getQty() 
-    {
-        return qty;
-    }
-    public void setQtyEach(BigDecimal qtyEach) 
-    {
-        this.qtyEach = qtyEach;
-    }
-
-    public BigDecimal getQtyEach() 
-    {
-        return qtyEach;
-    }
-    public void setQtyallocated(BigDecimal qtyallocated) 
-    {
-        this.qtyallocated = qtyallocated;
-    }
-
-    public BigDecimal getQtyallocated() 
-    {
-        return qtyallocated;
-    }
-    public void setQtyallocatedEach(BigDecimal qtyallocatedEach) 
-    {
-        this.qtyallocatedEach = qtyallocatedEach;
-    }
-
-    public BigDecimal getQtyallocatedEach() 
-    {
-        return qtyallocatedEach;
-    }
-    public void setQtypa(BigDecimal qtypa) 
-    {
-        this.qtypa = qtypa;
-    }
-
-    public BigDecimal getQtypa() 
-    {
-        return qtypa;
-    }
-    public void setQtyrpin(BigDecimal qtyrpin) 
-    {
-        this.qtyrpin = qtyrpin;
-    }
-
-    public BigDecimal getQtyrpin() 
-    {
-        return qtyrpin;
-    }
-    public void setQtyrpout(BigDecimal qtyrpout) 
-    {
-        this.qtyrpout = qtyrpout;
-    }
-
-    public BigDecimal getQtyrpout() 
-    {
-        return qtyrpout;
-    }
-    public void setQtymvin(BigDecimal qtymvin) 
-    {
-        this.qtymvin = qtymvin;
-    }
-
-    public BigDecimal getQtymvin() 
-    {
-        return qtymvin;
-    }
-    public void setQtymvout(BigDecimal qtymvout) 
-    {
-        this.qtymvout = qtymvout;
-    }
-
-    public BigDecimal getQtymvout() 
-    {
-        return qtymvout;
-    }
-    public void setQtyonhold(BigDecimal qtyonhold) 
-    {
-        this.qtyonhold = qtyonhold;
-    }
-
-    public BigDecimal getQtyonhold() 
-    {
-        return qtyonhold;
-    }
-
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("lotnum", getLotnum())
-            .append("locationId", getLocationId())
-            .append("traceid", getTraceid())
-            .append("customerId", getCustomerId())
-            .append("sku", getSku())
-            .append("qty", getQty())
-            .append("qtyEach", getQtyEach())
-            .append("qtyallocated", getQtyallocated())
-            .append("qtyallocatedEach", getQtyallocatedEach())
-            .append("qtypa", getQtypa())
-            .append("qtyrpin", getQtyrpin())
-            .append("qtyrpout", getQtyrpout())
-            .append("qtymvin", getQtymvin())
-            .append("qtymvout", getQtymvout())
-            .append("qtyonhold", getQtyonhold())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
+                .append("lotnum", getLotnum())
+                .append("locationId", getLocationId())
+                .append("traceid", getTraceid())
+                .append("customerId", getCustomerId())
+                .append("sku", getSku())
+                .append("qty", getQty())
+                .append("qtyEach", getQtyEach())
+                .append("qtyallocated", getQtyallocated())
+                .append("qtyallocatedEach", getQtyallocatedEach())
+                .append("qtypa", getQtypa())
+                .append("qtyrpin", getQtyrpin())
+                .append("qtyrpout", getQtyrpout())
+                .append("qtymvin", getQtymvin())
+                .append("qtymvout", getQtymvout())
+                .append("qtyonhold", getQtyonhold())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .append("remark", getRemark())
+                .toString();
     }
 }
+
+
+

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -722,7 +722,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
      */
     @Override
     public Boolean clearTraceIdByLocationId(String locationId){
-        return operateTraceIdByLocationId(locationId, StringUtils.EMPTY);
+        return operateTraceIdByLocationId(locationId, null);
     }
 
     /**

+ 1 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -693,6 +693,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                             for (InvLotLocId inv : invList) {
                                 inv.setQtyallocated(inv.getQtyallocated().subtract(currentQty));
                                 inv.setQtyallocatedEach(inv.getQtyallocated());
+                                inv.setTraceid(null);
                                 int result = invLotLocIdService.updateInvLotLocId(inv);
                                 if (result <= 0) {
                                     throw new ServiceException("更新库存信息失败");

+ 5 - 4
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/AgvCallProxyService.java

@@ -12,6 +12,7 @@ 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.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
@@ -56,10 +57,6 @@ public class AgvCallProxyService {
     WmsDocAsnSubService wmsDocAsnSubService;
     @Autowired
     private IBaseSkuService iBaseSkuService;
-    @Autowired
-    private ISysConfigService sysConfigService;
-
-
     @Autowired
     private IdSequenceUtils idSequenceUtils;
     @Autowired
@@ -82,6 +79,8 @@ public class AgvCallProxyService {
     private InvLotLocIdSubService invLotLocIdSubService;
     @Autowired
     private IWcsTaskService iWcsTaskService;
+    @Autowired
+    private IInvLotLocIdService invLotLocIdService;
 
     /**
      * 主方法:桶装入库
@@ -243,6 +242,8 @@ public class AgvCallProxyService {
         //1.生成一个wcs任务
         String locationInfoId = String.valueOf(baseLocationInfo.getId());
         wcsTaskSubService.addWcsOutTask(taskNo, locationInfoId, bucketCacheLocationId, orderNo);
+        //修改出库出库存的traceId
+        invLotLocIdService.operateTraceIdByLocationId(bucketCacheLocationId, taskNo);
         //4.组装wcs任务请求参数并同步当前的wcs任务
         OutTaskForm outTaskForm = assemblyOutTaskForm(taskNo, orderNo, baseSku.getSkuType(), materialType, quantity, baseLocationInfo);
         return wmsToWcsApiService.wmsOutTask(outTaskForm);

+ 16 - 12
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsTaskSubService.java

@@ -174,19 +174,20 @@ public class WcsTaskSubService {
         return addWcsTask(taskNo, locationFrom, locationTo, orderNo, palletNo, wcsNo, state, remark);
     }
 
-    public AjaxResult addWcsOutTask(String locationFrom, String locationTo
-            , String orderNo, String palletNo, String wcsNo) {
-        return addWcsOutTask(IdWorker.getIdStr(), locationFrom, locationTo, orderNo, palletNo, wcsNo, 10L, "立体库出库任务");
-    }
-
     public AjaxResult addWcsOutTask(String taskNo, String locationFrom, String locationTo
             , String orderNo, String wcsNo, Long state, String remark) {
         return addWcsOutTask(taskNo, locationFrom, locationTo, orderNo, StringUtils.EMPTY, wcsNo, state, remark);
     }
 
+
     public AjaxResult addWcsOutTask(String taskNo, String locationFrom, String locationTo
-            , String orderNo, Long state, String remark) {
-        return addWcsOutTask(taskNo, locationFrom, locationTo, orderNo, StringUtils.EMPTY, StringUtils.EMPTY, state, remark);
+            , String orderNo, String palletNo, String remark) {
+        return addWcsOutTask(taskNo, locationFrom, locationTo, orderNo, palletNo, StringUtils.EMPTY, 10L, remark);
+    }
+
+    public AjaxResult addWcsOutTask(String taskNo, String locationFrom, String locationTo
+            , String orderNo, Long status, String remark) {
+        return addWcsOutTask(taskNo, locationFrom, locationTo, orderNo, StringUtils.EMPTY, StringUtils.EMPTY, status, remark);
     }
 
     public AjaxResult addWcsOutTask(String taskNo, String locationFrom, String locationTo
@@ -262,6 +263,10 @@ public class WcsTaskSubService {
                     iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
                             , Long.parseLong(wcsTask.getLocationTo())
                             , Constant.WAREHOUSE_ID, updateBy);
+                    //保底策略,生成新的库存之前,就删掉原先的再进行移动fromLoc->toLoc操作
+                    if (wcsTask.getExt1().startsWith("ASN")){
+                        invLotLocIdService.deleteInvLotLocList(Long.parseLong(wcsTask.getLocationTo()));
+                    }
                     // 将起始点库存移动到终点库位
                     iWcsTaskService.moveStartingPointToDestination(wcsTask);
                     //入库完成后反馈
@@ -386,18 +391,17 @@ public class WcsTaskSubService {
     public AjaxResult completeTheCallbackOut(WcsTask wcsTask) {
         boolean con = true;
         boolean con1 = true;
-        String palletNo = wcsTask.getExt2();
         String orderNo = wcsTask.getExt1();
         List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
         BigDecimal qtyOrderedEach = list.get(0).getQtyOrderedEach();
         BigDecimal allocatedEach = list.get(0).getQtyAllocated();
         String sku = list.get(0).getSku();
         BigDecimal canQty = qtyOrderedEach.subtract(allocatedEach);
-        InvLotAtt invLotAtt = new InvLotAtt();
-        invLotAtt.setLotatt07(palletNo);
-        List<InvLotLocId> invLotLocIds = invLotLocIdService.queryInvByInvLotatt(invLotAtt);
 
-        for (InvLotLocId invLotLocId : invLotLocIds) {
+        Long locationId = StringUtils.isNotBlank(wcsTask.getLocationFrom()) ? Long.parseLong(wcsTask.getLocationFrom()) : -1L;
+        List<InvLotLocId> invLotLocList = invLotLocIdService.getInvLotLocList(locationId);
+
+        for (InvLotLocId invLotLocId : invLotLocList) {
             BigDecimal qty = invLotLocId.getQty();
             if (qty.compareTo(canQty) >= 0) {
                 list.get(0).setQtyAllocatedEach(qtyOrderedEach);

+ 10 - 13
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsToWmsApiService.java

@@ -3,12 +3,13 @@ package com.ruoyi.ams.xuankuang.service;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.comparator.CompareUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnHeaderMapper;
 import com.ruoyi.ams.asn.service.IWmsDocAsnDetailsService;
-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.service.IWcsTaskService;
 import com.ruoyi.ams.xuankuang.domain.dto.LocationCoordDTO;
@@ -24,7 +25,6 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.hard.xuankang.StirringTankClient;
 import com.ruoyi.hard.xuankang.UnpackingMachineSubClient;
-import com.ruoyi.system.service.ISysConfigService;
 import io.jsonwebtoken.lang.Assert;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -71,8 +71,6 @@ public class WcsToWmsApiService {
     @Autowired
     private UnpackingMachineSubClient unpackingMachineSubClient;
     @Autowired
-    private WmsToWcsApiService wmsToWcsApiService;
-    @Autowired
     private IWcsTaskService wcsTaskService;
     @Autowired
     private IWmsDocAsnDetailsService wmsDocAsnDetailsService;
@@ -81,9 +79,7 @@ public class WcsToWmsApiService {
     @Autowired
     private AgvCallProxyService agvCallProxyService;
     @Autowired
-    private ISysConfigService sysConfigService;
-    @Autowired
-    private IInvLotAttService invLotAttService;
+    private IInvLotLocIdService invLotLocIdService;
 
     /**
      * 组盘上报
@@ -275,17 +271,18 @@ public class WcsToWmsApiService {
         if (taskType == 2) {
 
             BaseLocationLotattDTO baseLocationLotatt = allocateLocationInfo();
-
             Assert.isTrue(ObjectUtil.isNotNull(baseLocationLotatt), "仓库中无库存");
-
-            //TODO 这一块有可疑的地方 baseLocationLotatt
-            String pallentNo = ObjectUtil.isNotNull(baseLocationLotatt.getLotattVO())
+            String palletNo = ObjectUtil.isNotNull(baseLocationLotatt.getLotattVO())
                     ? baseLocationLotatt.getLotattVO().getLotatt07() : StringUtils.EMPTY;
 
             // 生成四向车出库任务
-            AjaxResult ajaxResult = wcsTaskSubService.addWcsOutTask(baseLocationLotatt.getLocationNo(), Constant.LOC_SORTATION_CACHE.toString(), "", pallentNo, wcsNo);
+            String taskNo = IdWorker.getIdStr();
+
+            wcsTaskSubService.addWcsOutTask(taskNo, baseLocationLotatt.getLocationNo(), Constant.LOC_SORTATION_CACHE.toString(), "", palletNo, wcsNo);
+            Assert.isTrue( ObjectUtil.isNotNull(baseLocationLotatt.getId()), "仓库中无库存");
+            invLotLocIdService.operateTraceIdByLocationId(String.valueOf(baseLocationLotatt.getId()), taskNo);
             LocationCoordDTO locationCoordinateVo1 = new LocationCoordDTO();
-            locationCoordinateVo1.setTaskNo(ajaxResult.get("data").toString());
+            locationCoordinateVo1.setTaskNo(taskNo);
             locationCoordinateVo1.setLocationId(baseLocationLotatt.getLocationNo());
             locationCoordinateVo1.setFloor(Integer.valueOf(baseLocationLotatt.getShiftNo()));
             locationCoordinateVo1.setCol(Integer.valueOf(baseLocationLotatt.getRowNo()));

+ 21 - 13
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocOrderSubService.java

@@ -2,10 +2,10 @@ package com.ruoyi.ams.xuankuang.service;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
-import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
@@ -67,6 +67,8 @@ public class WmsDocOrderSubService {
     private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
     @Autowired
     private WmsToWcsApiService wmsToWcsApiService;
+    @Autowired
+    private IInvLotLocIdService invLotLocIdService;
 
 
     @Transactional
@@ -99,30 +101,36 @@ public class WmsDocOrderSubService {
         int allocateQuantities = 0;
         //出库单对应袋数
         int orderNum = list.get(0).getQtyOrderedEach().intValue();
-        for (BaseLocationLotattDTO baseLocationLotattVO1 : baseLocationLotattVOS1) {
+        for (BaseLocationLotattDTO baseLocationLotatt : baseLocationLotattVOS1) {
 
 
             BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, list.get(0).getSku());
-            String pallentNo = baseLocationLotattVO1.getLotattVO().getLotatt07();
-            String locationFrom = baseLocationLotattVO1.getLocationNo();
+            String palletNo = baseLocationLotatt.getLotattVO().getLotatt07();
+            String locationFrom = baseLocationLotatt.getLocationNo();
             String wcsNo = "wcs" + wcsTaskSubService.generateTaskNo();//生成唯一标识wcsno
-            Float qty = baseLocationLotattVO1.getQty();
+            if(ObjectUtil.isNull(baseLocationLotatt) || ObjectUtil.isNull(baseLocationLotatt.getId())) continue;
+            String locationId = String.valueOf(baseLocationLotatt.getId());
+
+            Float qty = baseLocationLotatt.getQty();
             //Wcs x y z
-            String Y = baseLocationLotattVO1.getRowNo();
-            String Z = baseLocationLotattVO1.getShiftNo();
-            String X = baseLocationLotattVO1.getRowIndex();
-            String sku = baseLocationLotattVO1.getSku();
-            AjaxResult ajaxResult = new AjaxResult();
+            String Y = baseLocationLotatt.getRowNo();
+            String Z = baseLocationLotatt.getShiftNo();
+            String X = baseLocationLotatt.getRowIndex();
+            String sku = baseLocationLotatt.getSku();
+            String taskNo = IdWorker.getIdStr();
             if (sku.equals("C4H9O2PSSNH4")) {
                 // 生成四向车出库任务
-                ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.DRUM_CONNECTORS.toString(), orderNo, pallentNo, wcsNo);
+                wcsTaskSubService.addWcsOutTask(taskNo, locationFrom, Constant.DRUM_CONNECTORS.toString(), orderNo, palletNo, wcsNo);
+                //修改出库出库存的traceId
+                invLotLocIdService.operateTraceIdByLocationId(locationId, taskNo);
             } else {
                 // 生成四向车出库任务
-                ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.LOC_SORTATION_CACHE.toString(), orderNo, pallentNo, wcsNo);
+                wcsTaskSubService.addWcsOutTask(taskNo, locationFrom, Constant.LOC_SORTATION_CACHE.toString(), orderNo, palletNo, wcsNo);
+                //修改出库出库存的traceId
+                invLotLocIdService.operateTraceIdByLocationId(locationId, taskNo);
             }
             //调用出库任务下发接口
             OutTaskForm outTaskForm = new OutTaskForm();
-            String taskNo = ajaxResult.get("data").toString();
             outTaskForm.setTaskNo(taskNo);
             outTaskForm.setRow(Integer.parseInt(X));
             outTaskForm.setCol(Integer.parseInt(Y));

+ 1 - 0
warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml

@@ -226,6 +226,7 @@
         <trim prefix="SET" suffixOverrides=",">
             <if test="locationId != null">location_id = #{locationId},</if>
             <if test="traceid != null">traceid = #{traceid},</if>
+            <if test="traceid == null">traceid = null,</if>
             <if test="customerId != null">customer_id = #{customerId},</if>
             <if test="sku != null">sku = #{sku},</if>
             <if test="qty != null">qty = #{qty},</if>