k пре 2 година
родитељ
комит
2827fc58fa

+ 25 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/InvLotLocIdController.java

@@ -4,10 +4,13 @@ import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdAdjForm;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdForm;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -31,6 +34,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
  * @author andy
  * @date 2022-03-14
  */
+@Validated
 @RestController
 @RequestMapping("/ams/invLotLocId")
 public class InvLotLocIdController extends BaseController {
@@ -48,6 +52,27 @@ public class InvLotLocIdController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 库存调整
+     */
+    @PreAuthorize("@ss.hasPermi('ams:invLotLocId:adj')")
+    @Log(title = "库位库存调整", businessType = BusinessType.UPDATE)
+    @PostMapping("/adj")
+    public AjaxResult adj(@Validated @RequestBody InvLotLocIdAdjForm invLotLocIdAdjForm) {
+        invLotLocIdAdjForm.setUpdateBy(getUsername());
+        return invLotLocIdService.adj(invLotLocIdAdjForm);
+    }
+
+    /**
+     * 库存移动
+     */
+    @PreAuthorize("@ss.hasPermi('ams:invLotLocId:move')")
+    @Log(title = "库位库存移动", businessType = BusinessType.UPDATE)
+    @PostMapping("/move")
+    public AjaxResult move(@RequestBody InvLotLocIdForm invLotLocIdForm) {
+        return invLotLocIdService.move(invLotLocIdForm);
+    }
+
     /**
      * 导出库位库存信息列表
      */

+ 11 - 15
ruoyi-ui/src/views/ams/inv/invLotLocId/adjDialog.vue

@@ -7,21 +7,15 @@
       <el-form-item label="货主" prop="customerId">
         <el-input v-model="form.customerId" placeholder="请输入货主"/>
       </el-form-item>
-      <el-form-item label="产品代码" prop="sku">
-        <el-input v-model="form.sku" placeholder="请输入产品代码"/>
-      </el-form-item>
-      <el-form-item label="生产批号" prop="lotatt04">
-        <el-input v-model="form.lotatt04" placeholder="请输入产品批号"/>
-      </el-form-item>
       <el-form-item label="库存件数" prop="qty">
         <el-input v-model="form.qty" placeholder="请输入库存件数"/>
       </el-form-item>
+      <el-form-item label="产品代码" prop="sku">
+        <el-input v-model="form.sku" placeholder="请输入产品代码"/>
+      </el-form-item>
       <el-form-item label="调整件数" prop="qtyTo">
         <el-input v-model="form.qtyTo" placeholder="请输入调整件数"/>
       </el-form-item>
-      <el-form-item label="序列号" prop="lotatt05">
-        <el-input v-model="form.lotatt05" placeholder="请输入序列号"/>
-      </el-form-item>
       <el-form-item label="原因描述" prop="reason">
         <el-input v-model="form.reason" placeholder="请输入原因描述"/>
       </el-form-item>
@@ -45,11 +39,10 @@ export default {
       title: "库存调整",
       tableSelection: [],
       form: {
+        lotnum: "",
         locationNo: "",
         customerId: "",
         sku: "",
-        lotatt04: "",
-        lotatt05: "",
         qty: "",
         qtyTo: "",
         reason: ""
@@ -68,7 +61,6 @@ export default {
   methods: {
     show(tableSelection) {
       this.tableSelection = tableSelection;
-      console.log(tableSelection[0])
       this.form = this.tableSelection[0];
       this.adjDialogVisible = true;
     },
@@ -77,9 +69,13 @@ export default {
         if (valid) {
           this.$modal.loading();
           adjInvLotLocId(this.form).then(response => {
-            this.$modal.msgSuccess("修改成功");
-            this.adjDialogVisible = false;
-            this.$emit('getList');
+            if (response.code == 200) {
+              this.$modal.msgSuccess(response.msg);
+              this.adjDialogVisible = false;
+              this.$emit('getList');
+            } else {
+              this.$modal.msgError(response.msg);
+            }
           }).catch(error => {
           }).finally(() => {
             this.$modal.closeLoading();

+ 48 - 0
warewms-ams/src/main/java/com/ruoyi/ams/inv/domain/form/InvLotLocIdAdjForm.java

@@ -0,0 +1,48 @@
+package com.ruoyi.ams.inv.domain.form;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author JWK
+ * @version 1.0
+ * @date 2022/11/9 10:58
+ */
+@Data
+public class InvLotLocIdAdjForm extends BaseEntity {
+
+    @NotBlank(message = "库位编码不能为空!")
+    private String locationNo;
+    @NotBlank(message = "货主不能为空!")
+    private String customerId;
+    @NotBlank(message = "产品代码不能为空!")
+    private String sku;
+    @NotBlank(message = "库存件数不能为空!")
+    private String qty;
+    @NotBlank(message = "调整件数不能为空!")
+    private String qtyTo;
+    @NotBlank(message = "原因描述不能为空!")
+    private String reason;
+    @NotBlank(message = "批次号不能为空!")
+    private String lotnum;
+    private String lotatt01;
+    private String lotatt02;
+    private String lotatt03;
+    private String lotatt04;
+    private String lotatt05;
+    private String lotatt06;
+    private String lotatt07;
+    private String lotatt08;
+    private String lotatt09;
+    private String lotatt10;
+    private String lotatt11;
+    private String lotatt12;
+    private String lotatt13;
+    private String lotatt14;
+    private String lotatt15;
+    private String lotatt16;
+    private String lotatt17;
+    private String lotatt18;
+}

+ 32 - 0
warewms-ams/src/main/java/com/ruoyi/ams/inv/domain/form/InvLotLocIdForm.java

@@ -0,0 +1,32 @@
+package com.ruoyi.ams.inv.domain.form;
+
+import com.ruoyi.ams.inv.domain.InvLotLocId;
+import lombok.Data;
+
+/**
+ * @author JWK
+ * @version 1.0
+ * @date 2022/11/9 10:58
+ */
+@Data
+public class InvLotLocIdForm extends InvLotLocId {
+
+    private String lotatt01;
+    private String lotatt02;
+    private String lotatt03;
+    private String lotatt04;
+    private String lotatt05;
+    private String lotatt06;
+    private String lotatt07;
+    private String lotatt08;
+    private String lotatt09;
+    private String lotatt10;
+    private String lotatt11;
+    private String lotatt12;
+    private String lotatt13;
+    private String lotatt14;
+    private String lotatt15;
+    private String lotatt16;
+    private String lotatt17;
+    private String lotatt18;
+}

+ 10 - 1
warewms-ams/src/main/java/com/ruoyi/ams/inv/domain/vo/InvLotLocIdLotattVO.java

@@ -10,6 +10,7 @@ import com.ruoyi.ams.inv.domain.InvLotLocId;
 public class InvLotLocIdLotattVO {
     private Long locationId;
     private String lotnum;
+    private String customerId;
     private String sku;
     private String skuName;
     private String locationNo;
@@ -186,6 +187,14 @@ public class InvLotLocIdLotattVO {
         this.lotnum = lotnum;
     }
 
+    public String getCustomerId() {
+        return customerId;
+    }
+
+    public void setCustomerId(String customerId) {
+        this.customerId = customerId;
+    }
+
     public String getSku() {
         return sku;
     }
@@ -233,4 +242,4 @@ public class InvLotLocIdLotattVO {
     public void setSkuName(String skuName) {
         this.skuName = skuName;
     }
-}
+}

+ 44 - 24
warewms-ams/src/main/java/com/ruoyi/ams/inv/mapper/InvLotLocIdMapper.java

@@ -12,62 +12,74 @@ import org.apache.ibatis.annotations.Param;
 
 /**
  * 库位库存信息Mapper接口
- * 
+ *
  * @author andy
  * @date 2022-03-03
  */
-public interface InvLotLocIdMapper 
-{
+public interface InvLotLocIdMapper {
     /**
      * 查询库位库存信息
-     * 
+     *
      * @param lotnum 库位库存信息主键
      * @return 库位库存信息
      */
-     InvLotLocId selectInvLotLocIdByLotnum(String lotnum);
+    InvLotLocId selectInvLotLocIdByLotnum(String lotnum);
+
+    /**
+     * 查询库存(根据主键)
+     *
+     * @param lotnum
+     * @param sku
+     * @param location
+     * @param customerId
+     * @return
+     */
+    InvLotLocId queryById(@Param("lotnum") String lotnum, @Param("sku") String sku, @Param("location") String location, @Param("customerId") String customerId);
+
 
     /**
      * 查询库位库存信息列表
-     * 
+     *
      * @param invLotLocId 库位库存信息
      * @return 库位库存信息集合
      */
-     List<InvLotLocId> selectInvLotLocIdList(InvLotLocId invLotLocId);
+    List<InvLotLocId> selectInvLotLocIdList(InvLotLocId invLotLocId);
 
     /**
      * 新增库位库存信息
-     * 
+     *
      * @param invLotLocId 库位库存信息
      * @return 结果
      */
-     int insertInvLotLocId(InvLotLocId invLotLocId);
+    int insertInvLotLocId(InvLotLocId invLotLocId);
 
     /**
      * 修改库位库存信息
-     * 
+     *
      * @param invLotLocId 库位库存信息
      * @return 结果
      */
-     int updateInvLotLocId(InvLotLocId invLotLocId);
+    int updateInvLotLocId(InvLotLocId invLotLocId);
 
     /**
      * 删除库位库存信息
-     * 
+     *
      * @param lotnum 库位库存信息主键
      * @return 结果
      */
-     int deleteInvLotLocIdByLotnum(String lotnum);
+    int deleteInvLotLocIdByLotnum(String lotnum);
 
     /**
      * 批量删除库位库存信息
-     * 
+     *
      * @param lotnums 需要删除的数据主键集合
      * @return 结果
      */
-     int deleteInvLotLocIdByLotnums(String[] lotnums);
+    int deleteInvLotLocIdByLotnums(String[] lotnums);
 
     /**
      * 查询库位库存
+     *
      * @param zoneId
      * @param sku
      * @param skuType
@@ -76,29 +88,30 @@ public interface InvLotLocIdMapper
      * @param lotattDTO
      * @return
      */
-     List<BaseLocationLotattVO> selectInvLocationList(@Param("zoneId") Long zoneId,@Param("sku") String sku,@Param("skuType") String skuType,@Param("weight") Double weight,@Param("supplier") String supplier,@Param("lotattDTO") LotattDTO lotattDTO);
+    List<BaseLocationLotattVO> selectInvLocationList(@Param("zoneId") Long zoneId, @Param("sku") String sku, @Param("skuType") String skuType, @Param("weight") Double weight, @Param("supplier") String supplier, @Param("lotattDTO") LotattDTO lotattDTO);
 
     /**
      * 根据sku和批次属性获取
+     *
      * @param sku
      * @param skuType
      * @return
      */
-     List<BaseLocationLotattVO> selectInvZoneBySkuLotatt(@Param("sku") String sku,@Param("skuType") String skuType,@Param("lotattDTO") LotattDTO lotattDTO);
+    List<BaseLocationLotattVO> selectInvZoneBySkuLotatt(@Param("sku") String sku, @Param("skuType") String skuType, @Param("lotattDTO") LotattDTO lotattDTO);
 
     /**
      * 查询物料批次信息列表
+     *
      * @param invLocIdSearchFrom
      * @return
      */
-     List<InvLotLocIdLotattVO> selectInvLocIdLotattList(InvLocIdSearchFrom invLocIdSearchFrom);
+    List<InvLotLocIdLotattVO> selectInvLocIdLotattList(InvLocIdSearchFrom invLocIdSearchFrom);
 
     /**
-     *
      * @param locationId
      * @return
      */
-     List<InvLotLocIdLotattVO> selectInvLocIdLotattByLocationId(Long locationId);
+    List<InvLotLocIdLotattVO> selectInvLocIdLotattByLocationId(Long locationId);
 
     /**
      * 删除库位库存信息
@@ -110,14 +123,16 @@ public interface InvLotLocIdMapper
 
     /**
      * 更新起始库位库存至目标库位
+     *
      * @param locationFrom
      * @param locationTo
      * @return
      */
-    int updateInvLotLocIdLocationId(@Param("locationFrom") Long locationFrom,@Param("locationTo") Long locationTo);
+    int updateInvLotLocIdLocationId(@Param("locationFrom") Long locationFrom, @Param("locationTo") Long locationTo);
 
     /**
      * 清除库位库存信息
+     *
      * @param locationId
      * @return
      */
@@ -125,6 +140,7 @@ public interface InvLotLocIdMapper
 
     /**
      * 根据物料查询库位库存信息
+     *
      * @param sku
      * @param lotattDTO
      * @return
@@ -133,6 +149,7 @@ public interface InvLotLocIdMapper
 
     /**
      * 根据物料库位查询库存
+     *
      * @param sku
      * @param locationId
      * @param lotattDTO
@@ -142,25 +159,28 @@ public interface InvLotLocIdMapper
 
     /**
      * 查询库存
+     *
      * @param lotnum
      * @param sku
      * @param location
      * @param customerId
      * @return
      */
-    List<InvLotLocId> queryInvOrderBy(@Param("lotnum") String lotnum,@Param("sku")String sku,@Param("location")String location,@Param("customerId")String customerId);
+    List<InvLotLocId> queryInvOrderBy(@Param("lotnum") String lotnum, @Param("sku") String sku, @Param("location") String location, @Param("customerId") String customerId);
 
     /**
      * 根据托盘查询库存
+     *
      * @param invLotAtt
      * @param boxNo
      * @return
      */
-    List<InvLotLocId> queryInvByInvLotatt(@Param("lotattDTO") InvLotAtt invLotAtt,@Param("boxNo") String boxNo);
+    List<InvLotLocId> queryInvByInvLotatt(@Param("lotattDTO") InvLotAtt invLotAtt, @Param("boxNo") String boxNo);
 
     /**
      * 查询
+     *
      * @return
      */
-    List<InvLotLocId> queryInvByFull(@Param("orderNo") String orderNo,@Param("sku") String sku);
+    List<InvLotLocId> queryInvByFull(@Param("orderNo") String orderNo, @Param("sku") String sku);
 }

+ 21 - 1
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/IInvLotLocIdService.java

@@ -6,9 +6,12 @@ import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdAdjForm;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdForm;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
+import com.ruoyi.common.core.domain.AjaxResult;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -50,6 +53,20 @@ public interface IInvLotLocIdService {
      */
     InvLotLocId selectInvLotLocIdByModel(InvLotLocId invLotLocId);
 
+    /**
+     * 库存调整
+     *
+     * @return
+     */
+    AjaxResult adj(InvLotLocIdAdjForm invLotLocIdAdjForm);
+
+    /**
+     * 库存移动
+     *
+     * @return
+     */
+    AjaxResult move(InvLotLocIdForm invLotLocIdForm);
+
     /**
      * 新增库位库存信息
      *
@@ -126,7 +143,9 @@ public interface IInvLotLocIdService {
      */
     List<InvLotLocId> queryInvOrderBy(String lotnum, String sku, String location, String customerId);
 
-    /**根据托盘号查询库存
+    /**
+     * 根据托盘号查询库存
+     *
      * @param invLotAtt
      * @return
      */
@@ -134,6 +153,7 @@ public interface IInvLotLocIdService {
 
     /**
      * 查询已备货的满托库存
+     *
      * @param orderNo
      * @param sku
      * @return

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

@@ -1,33 +1,30 @@
 package com.ruoyi.ams.inv.service.impl;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
-import com.ruoyi.ams.config.domain.dto.InWarehouseDTO;
+import com.ruoyi.ams.common.Constant;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
+import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdAdjForm;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdForm;
 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.IInvLotLocIdService;
 import com.ruoyi.base.domain.BaseLocationInfo;
-import com.ruoyi.base.domain.BaseSku;
-import com.ruoyi.base.domain.SysIdsequence;
-import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
-import com.ruoyi.base.mapper.BaseLocationZoneMapper;
-import com.ruoyi.base.mapper.BaseSkuMapper;
 import com.ruoyi.base.service.IBaseLocationInfoService;
-import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.base.service.SysIdsequenceService;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.DateUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
-import com.ruoyi.ams.inv.domain.InvLotLocId;
-import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 库位库存信息Service业务层处理
  *
@@ -89,6 +86,61 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         }
     }
 
+    /**
+     * 库存调整
+     *
+     * @param invLotLocIdAdjForm
+     * @return
+     */
+    @Transactional
+    @Override
+    public AjaxResult adj(InvLotLocIdAdjForm invLotLocIdAdjForm) {
+        String lotnum = invLotLocIdAdjForm.getLotnum();
+        String locationNo = invLotLocIdAdjForm.getLocationNo();
+        String locationId = "";
+        String customerId = invLotLocIdAdjForm.getCustomerId();
+        String sku = invLotLocIdAdjForm.getSku();
+        String reason = invLotLocIdAdjForm.getReason(); // 原因描述
+
+        BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationNo
+                , Constant.WAREHOUSE_ID);
+        locationId = baseLocationInfo.getId().toString();
+
+        // 查询库存
+        InvLotLocId invLotLocId = invLotLocIdMapper.queryById(lotnum, sku, locationId, customerId);
+        if (invLotLocId == null) {
+            return AjaxResult.error("库存不存在!");
+        }
+
+        // 修改库存
+        String qtyTo = invLotLocIdAdjForm.getQtyTo(); // 调整件数
+        InvLotLocId invLotLocIdUpdate = new InvLotLocId();
+        invLotLocIdUpdate.setLotnum(lotnum);
+        invLotLocIdUpdate.setLocationId(locationId);
+        invLotLocIdUpdate.setCustomerId(customerId);
+        invLotLocIdUpdate.setSku(sku);
+        invLotLocIdUpdate.setQty(new BigDecimal(qtyTo));
+        invLotLocIdUpdate.setUpdateBy(invLotLocIdAdjForm.getUpdateBy());
+        if (updateInvLotLocId(invLotLocIdUpdate) <= 0) {
+            return AjaxResult.error("修改库存失败!");
+        }
+
+        // todo 事务
+
+        return AjaxResult.success();
+    }
+
+    /**
+     * 库存移动
+     *
+     * @param invLotLocIdForm
+     * @return
+     */
+    @Override
+    public AjaxResult move(InvLotLocIdForm invLotLocIdForm) {
+        return null;
+    }
+
     /**
      * 新增库位库存信息
      *

+ 18 - 6
warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.ams.inv.mapper.InvLotLocIdMapper">
-    
+
     <resultMap type="InvLotLocId" id="InvLotLocIdResult">
         <result property="lotnum"    column="lotnum"    />
         <result property="locationId"    column="location_id"    />
@@ -31,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="lotnum"    column="lotnum"    />
         <result property="locationNo"    column="location_no"    />
         <result property="locationId"    column="location_id"    />
+        <result property="customerId"    column="customer_id"    />
         <result property="sku"    column="sku"    />
         <result property="skuName"    column="sku_name"    />
         <result property="qty"    column="qty"    />
@@ -119,16 +120,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectInvLotLocIdList" parameterType="InvLotLocId" resultMap="InvLotLocIdResult">
         <include refid="selectInvLotLocIdVo"/>
-        <where>  
+        <where>
             <if test="traceid != null  and traceid != ''"> and traceid = #{traceid}</if>
         </where>
     </select>
-    
+
     <select id="selectInvLotLocIdByLotnum" parameterType="String" resultMap="InvLotLocIdResult">
         <include refid="selectInvLotLocIdVo"/>
         where lotnum = #{lotnum}
     </select>
-        
+
+    <select id="queryById" parameterType="InvLotLocId" resultMap="InvLotLocIdResult">
+        <include refid="selectInvLotLocIdVo"/>
+        where lotnum = #{lotnum}
+        and location_id = #{location}
+        and customer_id = #{customerId}
+        and sku = #{sku}
+    </select>
+
     <insert id="insertInvLotLocId" parameterType="InvLotLocId">
         insert into inv_lot_loc_id
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -201,6 +210,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null">remark = #{remark},</if>
         </trim>
         where lotnum = #{lotnum}
+        and location_id = #{locationId}
+        and customer_id = #{customerId}
+        and sku = #{sku}
     </update>
 
     <delete id="deleteInvLotLocIdByLotnum" parameterType="String">
@@ -208,7 +220,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteInvLotLocIdByLotnums" parameterType="String">
-        delete from inv_lot_loc_id where lotnum in 
+        delete from inv_lot_loc_id where lotnum in
         <foreach item="lotnum" collection="array" open="(" separator="," close=")">
             #{lotnum}
         </foreach>
@@ -424,4 +436,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join inv_lot_att att on inv.lotnum = att.lotnum
         where att.lotatt14 = #{orderNo} and inv.sku = #{sku}
     </select>
-</mapper>
+</mapper>