Przeglądaj źródła

Merge remote-tracking branch 'origin/dev' into dev

baolei 6 miesięcy temu
rodzic
commit
86f3ed118c
25 zmienionych plików z 1242 dodań i 76 usunięć
  1. 11 5
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/controller/ProdInventoryController.java
  2. 94 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/controller/ProdInventoryOrderController.java
  3. 30 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/domain/ProdInventoryOrderVo.java
  4. 3 1
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/domain/ProdInventoryVo.java
  5. 29 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/mapper/ProdInventoryOrderVoMapper.java
  6. 37 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/service/IProdInventoryOrderVoService.java
  7. 140 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/service/impl/ProdInventoryOrderVoServiceImpl.java
  8. 10 11
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/service/impl/ProdInventoryVoServiceImpl.java
  9. 5 1
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/merchant/controller/MerchantController.java
  10. 67 0
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdInventoryOrderVoMapper.xml
  11. 8 2
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdInventoryVoMapper.xml
  12. 157 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/mercProdInventory.html
  13. 0 1
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventory.html
  14. 205 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventoryOrder.html
  15. 205 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventoryOrderAdd.html
  16. 210 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventoryOrderEdit.html
  17. 3 8
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/merchant/merchant.html
  18. 0 1
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prodTag/editTag.html
  19. 4 4
      08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EInventoryBillReason.java
  20. 0 30
      08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EInventoryIoFlag.java
  21. 1 1
      08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/domain/ProdInventoryOrder.java
  22. 1 1
      08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/domain/ProdInventoryOrderDetail.java
  23. 7 0
      08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/service/impl/ProdInventoryOrderDetailServiceImpl.java
  24. 5 0
      08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/service/impl/ProdInventoryOrderServiceImpl.java
  25. 10 10
      08.src/Xingxi/xingxi-system/src/main/resources/mapper/business/ProdInventoryOrderMapper.xml

+ 11 - 5
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/controller/ProdInventoryController.java

@@ -30,19 +30,25 @@ public class ProdInventoryController extends BaseController {
     private IProdInventoryVoService prodInventoryVoService;
 
     @RequiresPermissions("business:product:inventory:view")
-    @GetMapping("/{mercId}")
+    @GetMapping("/inventory")
+    public String prodInventory() {
+        return prefix + "/prodInventory";
+    }
+
+    @RequiresPermissions("business:product:inventory:view")
+    @GetMapping("/mercInventory/{mercId}")
     public String inventory(@PathVariable("mercId") Long mercId, ModelMap mmap) {
         mmap.put("mercId", mercId);
-        return prefix + "/prodInventory";
+        return prefix + "/mercProdInventory";
     }
 
     /**
      * 查询商品库存列表
      */
     @RequiresPermissions("business:prodInventory:list")
-    @PostMapping("/list")
+    @PostMapping("/mercInventory/list")
     @ResponseBody
-    public TableDataInfo list(ProdInventoryVo prodInventoryVo) {
+    public TableDataInfo mercInventoryList(ProdInventoryVo prodInventoryVo) {
         startPage();
         List<ProdInventoryVo> list = prodInventoryVoService.selectProdInventoryVoList(prodInventoryVo);
         return getDataTable(list);
@@ -53,7 +59,7 @@ public class ProdInventoryController extends BaseController {
      */
     @RequiresPermissions("business:prodInventory:add")
     @Log(title = "商品库存", businessType = BusinessType.INSERT)
-    @PostMapping("/add")
+    @PostMapping("/mercInventory/add")
     @ResponseBody
     public AjaxResult addSave(ProdInventoryVo prodInventoryVo) {
         return toAjax(prodInventoryVoService.insertProdInventoryVo(prodInventoryVo));

+ 94 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/controller/ProdInventoryOrderController.java

@@ -0,0 +1,94 @@
+package com.xingxi.web.controller.business.ProdInventory.controller;
+
+import com.xingxi.business.ProdInventory.domain.ProdInventoryOrder;
+import com.xingxi.business.ProdInventory.service.IProdInventoryOrderService;
+import com.xingxi.common.annotation.Log;
+import com.xingxi.common.core.controller.BaseController;
+import com.xingxi.common.core.domain.AjaxResult;
+import com.xingxi.common.core.page.TableDataInfo;
+import com.xingxi.common.enums.BusinessType;
+import com.xingxi.web.controller.business.ProdInventory.domain.ProdInventoryOrderVo;
+import com.xingxi.web.controller.business.ProdInventory.service.IProdInventoryOrderVoService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 商品出入库单Controller
+ *
+ * @author ruoyi
+ * @date 2025-03-09
+ */
+@Controller
+@RequestMapping("/business/prodInventory")
+public class ProdInventoryOrderController extends BaseController {
+    private String prefix = "business/prodInventory";
+
+    @Resource
+    private IProdInventoryOrderService prodInventoryOrderService;
+    @Resource
+    private IProdInventoryOrderVoService prodInventoryOrderVoService;
+
+    @RequiresPermissions("business:product:inventory:view")
+    @GetMapping("/inventoryOrder")
+    public String prodInventoryOrder() {
+        return prefix + "/prodInventoryOrder";
+    }
+
+    /**
+     * 查询商品出入库单列表
+     */
+    @RequiresPermissions("business:prodInventory:list")
+    @PostMapping("/inventoryOrder/list")
+    @ResponseBody
+    public TableDataInfo inventoryOrderList(ProdInventoryOrderVo prodInventoryOrderVo) {
+        startPage();
+        List<ProdInventoryOrderVo> list = prodInventoryOrderVoService.selectProdInventoryOrderVoList(prodInventoryOrderVo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增商品出入库单
+     */
+    @GetMapping("/inventoryOrder/add")
+    public String add() {
+        return prefix + "/prodInventoryOrderAdd";
+    }
+
+    /**
+     * 新增保存商品出入库单
+     */
+    @RequiresPermissions("business:prodInventory:add")
+    @Log(title = "商品入出库单", businessType = BusinessType.INSERT)
+    @PostMapping("/inventoryOrder/add")
+    @ResponseBody
+    public AjaxResult addSave(ProdInventoryOrder prodInventoryOrder) {
+        return toAjax(prodInventoryOrderService.insertProdInventoryOrder(prodInventoryOrder));
+    }
+
+    /**
+     * 修改商户
+     */
+    @RequiresPermissions("business:prodInventory:edit")
+    @GetMapping("/inventoryOrder/edit/{inventoryOrderId}")
+    public String edit(@PathVariable("inventoryOrderId") Long inventoryOrderId, ModelMap mMap) {
+        ProdInventoryOrderVo prodInventoryOrderVo = prodInventoryOrderVoService.selectProdInventoryOrderVoById(inventoryOrderId);
+        mMap.put("prodInventoryOrder", prodInventoryOrderVo);
+        return prefix + "/prodInventoryOrderEdit";
+    }
+
+    /**
+     * 修改保存商户
+     */
+    @RequiresPermissions("business:prodInventory:edit")
+    @Log(title = "商品入出库单", businessType = BusinessType.UPDATE)
+    @PostMapping("/inventoryOrder/edit")
+    @ResponseBody
+    public AjaxResult editSave(@RequestBody ProdInventoryOrderVo prodInventoryOrderVo) {
+        return toAjax(prodInventoryOrderVoService.updateProdInventoryOrderVo(prodInventoryOrderVo));
+    }
+}

+ 30 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/domain/ProdInventoryOrderVo.java

@@ -0,0 +1,30 @@
+package com.xingxi.web.controller.business.ProdInventory.domain;
+
+import com.xingxi.business.ProdInventory.domain.ProdInventoryOrder;
+import com.xingxi.business.ProdInventory.domain.ProdInventoryOrderDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * 商品库存表 t_prod_inventory
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString
+public class ProdInventoryOrderVo extends ProdInventoryOrder {
+    private static final long serialVersionUID = 1L;
+    // 店铺名称
+    private String stockInName;
+    // 店铺名称
+    private String stockOutName;
+    // 入出库商品数量
+    private Integer prodCount;
+    // 入出库商品数量
+    private List<ProdInventoryOrderDetail> inventoryOrderDetails;
+}

+ 3 - 1
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/domain/ProdInventoryVo.java

@@ -23,5 +23,7 @@ public class ProdInventoryVo extends ProdInventory {
     // 商品属性名称
     private String attrName;
     // 添加商品库存数量
-    private Long addInvQty;
+    private Integer addInvQty;
+    // 出入库标记
+    private String ioFlag;
 }

+ 29 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/mapper/ProdInventoryOrderVoMapper.java

@@ -0,0 +1,29 @@
+package com.xingxi.web.controller.business.ProdInventory.mapper;
+
+import com.xingxi.web.controller.business.ProdInventory.domain.ProdInventoryOrderVo;
+
+import java.util.List;
+
+/**
+ * 商品出入库单Vo Mapper接口
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+public interface ProdInventoryOrderVoMapper {
+    /**
+     * 查询商品出入库单Vo
+     *
+     * @param inventoryOrderId 商品出入库单ID
+     * @return 商品出入库单Vo
+     */
+    ProdInventoryOrderVo selectProdInventoryOrderVoById(Long inventoryOrderId);
+
+    /**
+     * 查询商品出入库单Vo
+     *
+     * @param prodInventoryOrderVo 商品出入库单
+     * @return 商品出入库单Vo 集合
+     */
+    List<ProdInventoryOrderVo> selectProdInventoryOrderVoList(ProdInventoryOrderVo prodInventoryOrderVo);
+}

+ 37 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/service/IProdInventoryOrderVoService.java

@@ -0,0 +1,37 @@
+package com.xingxi.web.controller.business.ProdInventory.service;
+
+import com.xingxi.web.controller.business.ProdInventory.domain.ProdInventoryOrderVo;
+
+import java.util.List;
+
+/**
+ * 商品出入库单Vo Service接口
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+public interface IProdInventoryOrderVoService {
+    /**
+     * 商品出入库单Vo
+     *
+     * @param inventoryOrderId 商品出入库单ID
+     * @return 商品出入库单Vo
+     */
+    ProdInventoryOrderVo selectProdInventoryOrderVoById(Long inventoryOrderId);
+
+    /**
+     * 商品出入库单Vo列表
+     *
+     * @param prodInventoryOrderVo 商品出入库单Vo
+     * @return 商品出入库单Vo集合
+     */
+    List<ProdInventoryOrderVo> selectProdInventoryOrderVoList(ProdInventoryOrderVo prodInventoryOrderVo);
+
+    /**
+     * 更新商品出入库单Vo
+     *
+     * @param prodInventoryOrderVo 商品出入库单Vo
+     * @return 更新结果
+     */
+    int updateProdInventoryOrderVo(ProdInventoryOrderVo prodInventoryOrderVo);
+}

+ 140 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/service/impl/ProdInventoryOrderVoServiceImpl.java

@@ -0,0 +1,140 @@
+package com.xingxi.web.controller.business.ProdInventory.service.impl;
+
+import com.xingxi.business.ProdInventory.domain.ProdInventory;
+import com.xingxi.business.ProdInventory.domain.ProdInventoryBill;
+import com.xingxi.business.ProdInventory.domain.ProdInventoryOrderDetail;
+import com.xingxi.business.ProdInventory.mapper.ProdInventoryBillMapper;
+import com.xingxi.business.ProdInventory.mapper.ProdInventoryMapper;
+import com.xingxi.business.ProdInventory.mapper.ProdInventoryOrderDetailMapper;
+import com.xingxi.business.ProdInventory.mapper.ProdInventoryOrderMapper;
+import com.xingxi.common.enums.EDelFlag;
+import com.xingxi.common.enums.EInventoryBillType;
+import com.xingxi.common.utils.DateUtils;
+import com.xingxi.common.utils.ShiroUtils;
+import com.xingxi.common.utils.bean.BeanUtils;
+import com.xingxi.web.controller.business.ProdInventory.domain.ProdInventoryOrderVo;
+import com.xingxi.web.controller.business.ProdInventory.domain.ProdInventoryVo;
+import com.xingxi.web.controller.business.ProdInventory.mapper.ProdInventoryOrderVoMapper;
+import com.xingxi.web.controller.business.ProdInventory.mapper.ProdInventoryVoMapper;
+import com.xingxi.web.controller.business.ProdInventory.service.IProdInventoryOrderVoService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 商品出入库单Vo Service业务层处理
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+@Service
+public class ProdInventoryOrderVoServiceImpl implements IProdInventoryOrderVoService {
+    @Resource
+    private ProdInventoryMapper prodInventoryMapper;
+    @Resource
+    private ProdInventoryVoMapper prodInventoryVoMapper;
+    @Resource
+    private ProdInventoryBillMapper prodInventoryBillMapper;
+    @Resource
+    private ProdInventoryOrderMapper prodInventoryOrderMapper;
+    @Resource
+    private ProdInventoryOrderVoMapper prodInventoryOrderVoMapper;
+    @Resource
+    private ProdInventoryOrderDetailMapper prodInventoryOrderDetailMapper;
+
+
+    /**
+     * 商品出入库单Vo
+     *
+     * @param inventoryOrderId 商品出入库单ID
+     * @return 商品出入库单Vo
+     */
+    @Override
+    public ProdInventoryOrderVo selectProdInventoryOrderVoById(Long inventoryOrderId) {
+        return prodInventoryOrderVoMapper.selectProdInventoryOrderVoById(inventoryOrderId);
+    }
+
+    /**
+     * 查询商品出入库单Vo列表
+     *
+     * @param prodInventoryOrderVo 商品出入库单Vo
+     * @return 商品出入库单Vo集合
+     */
+    @Override
+    public List<ProdInventoryOrderVo> selectProdInventoryOrderVoList(ProdInventoryOrderVo prodInventoryOrderVo) {
+        return prodInventoryOrderVoMapper.selectProdInventoryOrderVoList(prodInventoryOrderVo);
+    }
+
+    /**
+     * 更新商品出入库单Vo
+     *
+     * @param prodInventoryOrderVo 商品出入库单Vo
+     * @return 更新结果
+     */
+    @Override
+    public int updateProdInventoryOrderVo(ProdInventoryOrderVo prodInventoryOrderVo) {
+        int effectRows = 0;
+        Date nowDate = DateUtils.getNowDate();
+        Long mercId;
+
+        ProdInventoryOrderVo checkResult = prodInventoryOrderVoMapper.selectProdInventoryOrderVoById(prodInventoryOrderVo.getInventoryOrderId());
+        if (EInventoryBillType.STOCKIN.getVal().equals(prodInventoryOrderVo.getIoFlag())) {
+            mercId = checkResult.getInId();
+        } else {
+            mercId = checkResult.getOutId();
+        }
+
+        for (ProdInventoryOrderDetail prodInventoryOrderDetail : prodInventoryOrderVo.getInventoryOrderDetails()) {
+            ProdInventory cond = new ProdInventory();
+            cond.setProdId(prodInventoryOrderDetail.getProdId());
+            cond.setProdAttrId(prodInventoryOrderDetail.getProdAttrId());
+            cond.setProdAttrId(mercId);
+            List<ProdInventory> listProdInventory = prodInventoryMapper.selectProdInventoryList(cond);
+            Integer addInvQty = prodInventoryOrderDetail.getQuantity();
+            ProdInventoryVo prodInventoryVo = new ProdInventoryVo();
+
+            // 更新商品库存表
+            if (listProdInventory.size() > 0) {
+                BeanUtils.copyBeanProp(prodInventoryVo, listProdInventory.get(0));
+                prodInventoryVo.setIoFlag(EInventoryBillType.STOCKIN.getVal());
+                prodInventoryVo.setAddInvQty(addInvQty);
+                prodInventoryVo.setUpdateUser(ShiroUtils.getLoginName());
+                prodInventoryVo.setUpdateTime(nowDate);
+                effectRows = prodInventoryVoMapper.updateProdInventoryVo(prodInventoryVo);
+            } else {
+                ProdInventory prodInventory = new ProdInventory();
+                prodInventory.setProdId(prodInventoryOrderDetail.getProdId());
+                prodInventory.setProdAttrId(prodInventoryOrderDetail.getProdAttrId());
+                prodInventory.setMercId(mercId);
+                prodInventory.setQuantity(addInvQty);
+                prodInventory.setAvailQty(addInvQty);
+                prodInventory.setDelFlag(EDelFlag.NO.getVal());
+                prodInventory.setCreateUser(ShiroUtils.getLoginName());
+                prodInventory.setCreateTime(nowDate);
+                effectRows = prodInventoryMapper.insertProdInventory(prodInventory);
+                prodInventoryVo = prodInventoryVoMapper.selectProdInventoryVoByProdInventoryId(prodInventoryVo.getProdInventoryId());
+            }
+
+            // 更新商品出入库明细单
+            prodInventoryOrderDetail.setInventoryOrderId(prodInventoryOrderVo.getInventoryOrderId());
+            prodInventoryOrderDetail.setDelFlag(EDelFlag.NO.getVal());
+            prodInventoryOrderDetail.setCreateUser(ShiroUtils.getLoginName());
+            prodInventoryOrderDetail.setCreateTime(nowDate);
+            effectRows += prodInventoryOrderDetailMapper.insertProdInventoryOrderDetail(prodInventoryOrderDetail);
+
+            // 更新商品出入库流水
+            ProdInventoryBill prodInventoryBill = new ProdInventoryBill();
+            prodInventoryBill.setBillTime(nowDate);
+            prodInventoryBill.setBillType(prodInventoryOrderVo.getIoFlag());
+            prodInventoryBill.setInventoryId(prodInventoryVo.getProdInventoryId());
+            prodInventoryBill.setQuantity(addInvQty);
+            prodInventoryBill.setDelFlag(EDelFlag.NO.getVal());
+            prodInventoryBill.setCreateUser(ShiroUtils.getLoginName());
+            prodInventoryBill.setCreateTime(nowDate);
+            effectRows += prodInventoryBillMapper.insertProdInventoryBill(prodInventoryBill);
+        }
+        return effectRows;
+    }
+}

+ 10 - 11
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/ProdInventory/service/impl/ProdInventoryVoServiceImpl.java

@@ -8,11 +8,9 @@ import com.xingxi.business.ProdInventory.mapper.ProdInventoryBillMapper;
 import com.xingxi.business.ProdInventory.mapper.ProdInventoryMapper;
 import com.xingxi.business.ProdInventory.mapper.ProdInventoryOrderDetailMapper;
 import com.xingxi.business.ProdInventory.mapper.ProdInventoryOrderMapper;
-import com.xingxi.business.ProdInventory.service.impl.ProdInventoryServiceImpl;
 import com.xingxi.common.enums.EDelFlag;
 import com.xingxi.common.enums.EInventoryBillType;
-import com.xingxi.common.enums.EInventoryIoFlag;
-import com.xingxi.common.enums.EInventoryIoType;
+import com.xingxi.common.enums.EInventoryBillReason;
 import com.xingxi.common.utils.DateUtils;
 import com.xingxi.common.utils.ShiroUtils;
 import com.xingxi.common.utils.bean.BeanUtils;
@@ -32,7 +30,7 @@ import java.util.List;
  * @date 2025-03-06
  */
 @Service
-public class ProdInventoryVoServiceImpl extends ProdInventoryServiceImpl implements IProdInventoryVoService {
+public class ProdInventoryVoServiceImpl implements IProdInventoryVoService {
     @Resource
     private ProdInventoryMapper prodInventoryMapper;
     @Resource
@@ -75,11 +73,12 @@ public class ProdInventoryVoServiceImpl extends ProdInventoryServiceImpl impleme
     @Override
     public int insertProdInventoryVo(ProdInventoryVo prodInventoryVo) {
         int effectRows;
-        Long addInvQty = prodInventoryVo.getAddInvQty();
+        Integer addInvQty = prodInventoryVo.getAddInvQty();
         Date nowDate = DateUtils.getNowDate();
         // 更新商品库存表
         if (prodInventoryVo.getProdInventoryId() != null) {
             prodInventoryVo = prodInventoryVoMapper.selectProdInventoryVoByProdInventoryId(prodInventoryVo.getProdInventoryId());
+            prodInventoryVo.setIoFlag(EInventoryBillType.STOCKIN.getVal());
             prodInventoryVo.setAddInvQty(addInvQty);
             prodInventoryVo.setUpdateUser(ShiroUtils.getLoginName());
             prodInventoryVo.setUpdateTime(nowDate);
@@ -87,8 +86,8 @@ public class ProdInventoryVoServiceImpl extends ProdInventoryServiceImpl impleme
         } else {
             ProdInventory prodInventory = new ProdInventory();
             BeanUtils.copyBeanProp(prodInventory, prodInventoryVo);
-            prodInventory.setQuantity(addInvQty.intValue());
-            prodInventory.setAvailQty(addInvQty.intValue());
+            prodInventory.setQuantity(addInvQty);
+            prodInventory.setAvailQty(addInvQty);
             prodInventory.setDelFlag(EDelFlag.NO.getVal());
             prodInventory.setCreateUser(ShiroUtils.getLoginName());
             prodInventory.setCreateTime(nowDate);
@@ -97,8 +96,8 @@ public class ProdInventoryVoServiceImpl extends ProdInventoryServiceImpl impleme
         }
         // 更新商品出入库单
         ProdInventoryOrder prodInventoryOrder = new ProdInventoryOrder();
-        prodInventoryOrder.setIoFlag(EInventoryIoFlag.IN.getVal());
-        prodInventoryOrder.setIotype(EInventoryIoType.IN_PURCHASE.getVal());
+        prodInventoryOrder.setIoFlag(EInventoryBillType.STOCKIN.getVal());
+        prodInventoryOrder.setIoType(EInventoryBillReason.IN_PURCHASE.getVal());
         prodInventoryOrder.setInId(prodInventoryVo.getMercId());
         prodInventoryOrder.setDelFlag(EDelFlag.NO.getVal());
         prodInventoryOrder.setCreateUser(ShiroUtils.getLoginName());
@@ -116,12 +115,12 @@ public class ProdInventoryVoServiceImpl extends ProdInventoryServiceImpl impleme
         prodInventoryOrderDetail.setCreateUser(ShiroUtils.getLoginName());
         prodInventoryOrderDetail.setCreateTime(nowDate);
         effectRows += prodInventoryOrderDetailMapper.insertProdInventoryOrderDetail(prodInventoryOrderDetail);
-        // 更新商品出入库
+        // 更新商品出入库流水
         ProdInventoryBill prodInventoryBill = new ProdInventoryBill();
         prodInventoryBill.setBillTime(nowDate);
         prodInventoryBill.setBillType(EInventoryBillType.STOCKIN.getVal());
         prodInventoryBill.setInventoryId(prodInventoryVo.getProdInventoryId());
-        prodInventoryBill.setQuantity(addInvQty.intValue());
+        prodInventoryBill.setQuantity(addInvQty);
         prodInventoryBill.setDelFlag(EDelFlag.NO.getVal());
         prodInventoryBill.setCreateUser(ShiroUtils.getLoginName());
         prodInventoryBill.setCreateTime(nowDate);

+ 5 - 1
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/merchant/controller/MerchantController.java

@@ -118,7 +118,11 @@ public class MerchantController extends BaseController {
         cond.setDelFlag(EDelFlag.NO.getVal());
         checkResult = merchantService.selectMerchantList(cond);
         if (checkResult.size() > 0) {
-            throw new BusinessException("商户名已存在!");
+            for (Merchant checkMerchant : checkResult) {
+                if (!checkMerchant.getMercId().equals(merchant.getMercId()) && merchant.getMercName().equals(checkMerchant.getMercName())) {
+                    throw new BusinessException("商户名已存在!");
+                }
+            }
         }
         return toAjax(merchantService.updateMerchant(merchant));
     }

+ 67 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdInventoryOrderVoMapper.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xingxi.web.controller.business.ProdInventory.mapper.ProdInventoryOrderVoMapper">
+    <resultMap type="ProdInventoryOrderVo" id="ProdInventoryOrderVoResult">
+        <result property="inventoryOrderId" column="inventoryOrderId"   />
+        <result property="ioFlag"           column="ioFlag"             />
+        <result property="ioType"           column="ioType"             />
+        <result property="inId"             column="inId"               />
+        <result property="outId"            column="outId"              />
+        <result property="remark"           column="remark"             />
+        <result property="delFlag"          column="delFlag"            />
+        <result property="createUser"       column="createUser"         />
+        <result property="createTime"       column="createTime"         />
+        <result property="updateUser"       column="updateUser"         />
+        <result property="updateTime"       column="updateTime"         />
+        <result property="stockInName"      column="stockInName"        />
+        <result property="stockOutName"     column="stockOutName"       />
+        <result property="prodCount"        column="prodCount"          />
+    </resultMap>
+
+    <sql id="selectProdInventoryOrderVo">
+        select t_prod_inventory_order.inventoryOrderId
+             , t_prod_inventory_order.ioFlag
+             , t_prod_inventory_order.ioType
+             , t_prod_inventory_order.inId
+             , t_prod_inventory_order.outId
+             , t_prod_inventory_order.remark
+             , t_prod_inventory_order.delFlag
+             , t_prod_inventory_order.createUser
+             , t_prod_inventory_order.createTime
+             , t_prod_inventory_order.updateUser
+             , t_prod_inventory_order.updateTime
+             , stock_in.mercName as stockInName
+             , stock_out.mercName as stockOutName
+             , prodCount
+        from t_prod_inventory_order
+        left join m_merchant stock_in on stock_in.mercId = t_prod_inventory_order.inId
+        left join m_merchant stock_out on stock_out.mercId = t_prod_inventory_order.outId
+        left join (
+            select t_prod_inventory_order.inventoryOrderId
+                 , count(t_prod_inventory_order_detail.inventoryOrderDetailId) prodCount
+            from t_prod_inventory_order
+            left join t_prod_inventory_order_detail on t_prod_inventory_order_detail.inventoryOrderId = t_prod_inventory_order.inventoryOrderId
+            group by inventoryOrderId
+        ) detail on detail.inventoryOrderId = t_prod_inventory_order.inventoryOrderId
+    </sql>
+
+    <select id="selectProdInventoryOrderVoById" parameterType="Long" resultMap="ProdInventoryOrderVoResult">
+        <include refid="selectProdInventoryOrderVo"/>
+        where t_prod_inventory_order.inventoryOrderId = #{inventoryOrderId}
+    </select>
+
+    <select id="selectProdInventoryOrderVoList" parameterType="ProdInventoryOrderVo" resultMap="ProdInventoryOrderVoResult">
+        <include refid="selectProdInventoryOrderVo"/>
+        <where>
+            <if test="ioFlag != null  and ioFlag != ''"> and t_prod_inventory_order.ioFlag = #{ioFlag}</if>
+            <if test="ioType != null  and ioType != ''"> and t_prod_inventory_order.ioType = #{ioType}</if>
+            <if test="inId != null "> and t_prod_inventory_order.inId = #{inId}</if>
+            <if test="outId != null "> and t_prod_inventory_order.outId = #{outId}</if>
+            <if test="delFlag != null  and delFlag != ''"> and t_prod_inventory_order.delFlag = #{delFlag}</if>
+            <if test="createUser != null  and createUser != ''"> and t_prod_inventory_order.createUser = #{createUser}</if>
+            <if test="createTime != null "> and t_prod_inventory_order.createTime = #{createTime}</if>
+            <if test="updateUser != null  and updateUser != ''"> and t_prod_inventory_order.updateUser = #{updateUser}</if>
+            <if test="updateTime != null "> and t_prod_inventory_order.updateTime = #{updateTime}</if>
+        </where>
+    </select>
+</mapper>

+ 8 - 2
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdInventoryVoMapper.xml

@@ -69,8 +69,14 @@
             <if test="prodId != null">prodId = #{prodId},</if>
             <if test="prodAttrId != null">prodAttrId = #{prodAttrId},</if>
             <if test="mercId != null">mercId = #{mercId},</if>
-            <if test="addInvQty != null">quantity = quantity + #{addInvQty},</if>
-            <if test="addInvQty != null">availQty = availQty + #{addInvQty},</if>
+            <if test="ioFlag == 'stockin'">
+                <if test="addInvQty != null">quantity = quantity + #{addInvQty},</if>
+                <if test="addInvQty != null">availQty = availQty + #{addInvQty},</if>
+            </if>
+            <if test="ioFlag == 'stockout'">
+                <if test="addInvQty != null">quantity = quantity - #{addInvQty},</if>
+                <if test="addInvQty != null">availQty = availQty - #{addInvQty},</if>
+            </if>
             <if test="updateUser != null">updateUser = #{updateUser},</if>
             <if test="updateTime != null">updateTime = #{updateTime},</if>
         </trim>

+ 157 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/mercProdInventory.html

@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('商品库存列表')" />
+</head>
+<body class="gray-bg">
+     <div class="container-div">
+        <div class="row">
+            <div class="col-sm-12 search-collapse">
+                <form id="formId">
+                    <input id="mercId" name="mercId" type="hidden" th:value="${mercId}">
+                    <div class="select-list">
+                        <ul>
+                            <li>
+                                <label>商品名称:</label>
+                                <input type="text" name="prodName"/>
+                            </li>
+                            <li>
+                                <label>属性名称:</label>
+                                <input type="text" name="attrName"/>
+                            </li>
+                            <li>
+                                <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </form>
+            </div>
+
+            <div class="btn-group-sm" id="toolbar" role="group">
+            </div>
+            <div class="col-sm-12 select-table table-striped">
+                <table id="bootstrap-table"></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+     <!-- 增加库存区域 -->
+     <script id="addInventoryDiv" type="text/template">
+         <div class="col-xs-offset-1">
+             <form id="formAddInventory">
+                 <div class="select-list col-sm-12" style="margin-top: 10px; display: inline-block;">
+                     <div style="float: left; width: 100px; line-height: 30px">
+                         <label>库存数量:</label>
+                     </div>
+                     <div style="float: left; width: 200px;">
+                         <input type="text" class="form-control" id="quantity" readonly/>
+                     </div>
+                     <div style="float: left; width: 100px; line-height: 30px; margin-left: 20px;">
+                         <label>可售数量:</label>
+                     </div>
+                     <div style="float: left; width: 200px">
+                         <input type="text" class="form-control" id="availQty" readonly/>
+                     </div>
+                 </div>
+                 <div class="col-sm-12 select-list" style="margin-top: 10px; display: inline-block;">
+                     <div style="float: left; width: 100px; line-height: 30px">
+                        <label>增加库存数量:</label>
+                     </div>
+                     <div style="float: left; width: 200px">
+                         <input type="text" class="form-control" id="addInvQty" name="quantity"/>
+                     </div>
+                 </div>
+             </form>
+         </div>
+     </script>
+    <script th:inline="javascript">
+        var editFlag = [[${@permission.hasPermi('business:prodInventory:edit')}]];
+        var prefix = ctx + "business/prodInventory";
+
+        $(function() {
+            var options = {
+                url: prefix + "/mercInventory/list",
+                createUrl: prefix + "/mercInventory/add",
+                removeUrl: prefix + "/remove",
+                modalName: "商品库存",
+                columns: [
+                {
+                    field: 'prodName',
+                    title: '商品名称'
+                },
+                {
+                    field: 'attrName',
+                    title: '属性名称'
+                },
+                {
+                    field: 'quantity',
+                    title: '库存数量'
+                },
+                {
+                    field: 'availQty',
+                    title: '可售数量'
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="addInventory(' + row.prodInventoryId + ',' + row.prodId + ',' + row.prodAttrId + ',' + row.quantity + ',' + row.availQty + ')"><i class="fa fa-edit"></i>配置库存</a>');
+                        return actions.join('');
+                    }
+                }]
+            };
+            $.table.init(options);
+        });
+
+        function addInventory(prodInventoryId, prodId, prodAttrId, quantity, availQty) {
+            var content = $('#addInventoryDiv').html();
+            layer.open({
+                type: 1,
+                fix: false,
+                maxmin: false,
+                shade: 0.3,
+                area: ['800px', '480px'],
+                title: '添加标签',
+                // 弹层外区域关闭
+                shadeClose: true,
+                success: function(layero, index) {
+                    layero.find('#quantity').val(quantity);
+                    layero.find('#availQty').val(availQty);
+                },
+                content: content,
+                btn: ['<i class="fa fa-check"></i> 确定', '<i class="fa fa-remove"></i> 关闭'],
+                btn1: function() {
+                    var addInvQty = $("#addInvQty").val();
+                    var url = prefix + "/mercInventory/add";
+                    var data = {
+                        "prodInventoryId": prodInventoryId,
+                        "mercId": $("#mercId").val(),
+                        "prodId": prodId,
+                        "prodAttrId": prodAttrId,
+                        "addInvQty": addInvQty,
+                    };
+                    $.post(url, data, function(result) {
+                        if (result.code === web_status.SUCCESS) {
+                            $.modal.closeAll();
+                            $.modal.enable();
+                            $.modal.alertSuccess("添加成功。");
+                            refreshTab();
+                        } else if (result.code === web_status.WARNING) {
+                            $.modal.closeAll();
+                            $.modal.enable();
+                            $.modal.alertWarning(result.msg)
+                        } else {
+                            $.modal.closeAll();
+                            $.modal.enable();
+                            $.modal.alertError(result.msg);
+                        }
+                    });
+                    layer.closeAll();
+                }
+            });
+        }
+    </script>
+</body>
+</html>

+ 0 - 1
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventory.html

@@ -8,7 +8,6 @@
         <div class="row">
             <div class="col-sm-12 search-collapse">
                 <form id="formId">
-                    <input id="mercId" name="mercId" type="hidden" th:value="${mercId}">
                     <div class="select-list">
                         <ul>
                             <li>

+ 205 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventoryOrder.html

@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('商品出入库单')" />
+</head>
+<body class="gray-bg">
+     <div class="container-div">
+        <div class="row">
+            <div class="col-sm-12 search-collapse">
+                <form id="formInventoryOrder">
+                    <div class="select-list">
+                        <ul>
+                            <li>
+                                <label>出入库:</label>
+                                <input type="text" name="ioFlag" th:placeholder="出入库标记"/>
+                            </li>
+                            <li>
+                                <label>原因:</label>
+                                <input type="text" name="ioType" th:placeholder="出入库原因"/>
+                            </li>
+                            <li>
+                                <label>入库商户:</label>
+                                <input type="text" class="merchantSelect" id="inMercName" th:placeholder="入库商户ID"/>
+                                <input type="hidden" id="inMercId" name="inId"/>
+                            </li>
+                            <li>
+                                <label>出库商户:</label>
+                                <input type="text" class="merchantSelect" id="outMercName" th:placeholder="出库商户ID"/>
+                                <input type="hidden" id="outMercId" name="inId"/>
+                            </li>
+                            <li>
+                                <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search('formInventoryOrder', 'prodInventoryOrder-table')"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('formInventoryOrder', 'prodInventoryOrder-table')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </form>
+            </div>
+
+            <div class="btn-group-sm" id="toolbar" role="group">
+                <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="master:merchant:add">
+                    <i class="fa fa-plus"></i> 添加
+                </a>
+            </div>
+            <div class="col-sm-12 select-table table-striped">
+                <table id="prodInventoryOrder-table"></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <!-- 商户选择请求区域 -->
+    <script id="selectMerchantDiv" type="text/template">
+        <div>
+            <div class="col-sm-12 search-collapse">
+                <form id="formSelectMerchant">
+                    <div class="select-list" style="margin-left: 20px;">
+                        <ul>
+                            <li>
+                                <label>商户名称:</label>
+                            </li>
+                            <li>
+                                <input type="text" class="form-control" name="mercName"/>
+                            </li>
+                            <li>
+                                <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search('formSelectMerchant', 'merchant-table')"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('formSelectMerchant', 'merchant-table')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </form>
+            </div>
+            <div class="col-sm-11 select-table table-striped">
+                <table id="merchant-table"></table>
+            </div>
+            <form id="formSelectMerchantProd">
+                <input type="hidden" id="showMerchantProdList" />
+            </form>
+            <div class="col-sm-11 select-table table-striped" id="merchant-prod-div" style="display: none;">
+                <table id="merchant-prod-table"></table>
+            </div>
+        </div>
+    </script>
+    <script th:inline="javascript">
+        var editFlag = [[${@permission.hasPermi('business:prodInventory:edit')}]];
+        var prefix = ctx + "business/prodInventory";
+        var shelfFlags = [[${@dict.getType('shelf_flag')}]];
+        var billTypeFlags = [[${@dict.getType('inventory_bill_type')}]];
+        var billReasonFlags = [[${@dict.getType('inventory_bill_reason')}]];
+
+        $(function() {
+            var options = {
+                id: "prodInventoryOrder-table",
+                formId: "formInventoryOrder",
+                url: prefix + "/inventoryOrder/list",
+                createUrl: prefix + "/inventoryOrder/add",
+                updateUrl: prefix + "/inventoryOrder/edit/{id}",
+                modalName: "商品库存",
+                columns: [
+                {
+                    field: 'ioFlag',
+                    title: '出入库标记',
+                    formatter: function (value, row, index) {
+                        return $.table.selectDictLabel(billTypeFlags, value);
+                    }
+                },
+                {
+                    field: 'ioType',
+                    title: '出入库原因',
+                    formatter: function (value, row, index) {
+                        return $.table.selectDictLabel(billReasonFlags, value);
+                    }
+                },
+                {
+                    field: 'stockInName',
+                    title: '入库商户'
+                },
+                {
+                    field: 'stockOutName',
+                    title: '出库商户'
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        if (row.prodCount === 0) {
+                            actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(' + row.inventoryOrderId + ')"><i class="fa fa-edit"></i>编辑</a>');
+                        }
+                        return actions.join('');
+                    }
+                }]
+            };
+            $.table.init(options);
+        });
+
+        $(".merchantSelect").click(function() {
+            var controlNameObjId = $(this).attr("id");
+            var controlIdObjId = controlNameObjId.replace("Name", "Id");
+            var content = $('#selectMerchantDiv').html();
+            layer.open({
+                type: 1,
+                fix: false,
+                maxmin: false,
+                shade: 0.3,
+                area: ['800px', '690px'],
+                title: '选择商户',
+                // 弹层外区域关闭
+                shadeClose: true,
+                success: function(layero, index) {
+                    var merchantOptions = {
+                        id: "merchant-table",
+                        formId: "formSelectMerchant",
+                        url: ctx + "master/merchant/list",
+                        modalName: "选择商户",
+                        showSearch: false,
+                        showColumns: false,
+                        showRefresh: false,
+                        showExport: false,
+                        showToggle: false,
+                        singleSelect: true,
+                        clickToSelect: true,
+                        pageSize: 10,
+                        pageList: [10,20,50],
+                        columns: [
+                            {
+                                checkbox: true,
+                            },
+                            {
+                                field: 'mercName',
+                                title: '商户名称'
+                            },
+                            {
+                                field: 'contact',
+                                title: '联系人'
+                            },
+                            {
+                                field: 'mail',
+                                title: '联系信箱'
+                            },
+                            {
+                                field: 'mobile',
+                                title: '手机号'
+                            }
+                        ]
+                    };
+                    $.table.init(merchantOptions);
+                },
+                content: content,
+                btn: ['<i class="fa fa-check"></i> 确定', '<i class="fa fa-remove"></i> 关闭'],
+                btn1: function() {
+                    var selectedMercId;
+                    var selectedMercName;
+                    $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
+                        selectedMercId = $.common.getItemField(row, "mercId");
+                        selectedMercName =  $.common.getItemField(row, "mercName");
+                    });
+                    $("#" + controlNameObjId).val(selectedMercName);
+                    $("#" + controlIdObjId).val(selectedMercId);
+                    layer.closeAll();
+                }
+            });
+        })
+    </script>
+</body>
+</html>

+ 205 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventoryOrderAdd.html

@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('新增商品入出库单')" />
+    <th:block th:include="include :: select2-css" />
+    <th:block th:include="include :: bootstrap-select-css" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-inventory-order-add">
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出入库标记:</label>
+                    <div class="col-sm-8">
+                        <select id="ioFlag" name="ioFlag" class="form-control m-b" th:with="type=${@dict.getType('inventory_bill_type')}" data-placeholder="出入库标记">
+                            <option value="">-</option>
+                            <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出入库原因:</label>
+                    <div class="col-sm-8">
+                        <select id="ioType" name="ioType" class="form-control m-b" th:with="type=${@dict.getType('inventory_bill_reason')}" data-placeholder="出入库原因">
+                            <option value="">-</option>
+                            <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">入库商户:</label>
+                    <div class="col-sm-8">
+                        <input type="text" class="merchantSelect form-control" id="inMercName" name="inMercName" th:placeholder="入库商户"/>
+                        <input type="hidden" id="inMercId" name="inId"/>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出库商户:</label>
+                    <div class="col-sm-8">
+                        <input type="text" class="merchantSelect form-control" id="outMercName" name="outMercName" th:placeholder="出库商户"/>
+                        <input type="hidden" id="outMercId" name="outId"/>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">备注:</label>
+                    <div class="col-sm-8">
+                        <textarea id="remark" name="remark" class="form-control col-sm-3" maxlength="500" style="height: 100px;" th:placeholder="备注"></textarea>
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <!-- 商户选择请求区域 -->
+    <script id="selectMerchantDiv" type="text/template">
+        <div>
+            <div class="col-sm-12 search-collapse">
+                <form id="formSelectMerchant">
+                    <div class="select-list" style="margin-left: 20px;">
+                        <ul>
+                            <li>
+                                <label>商户名称:</label>
+                            </li>
+                            <li>
+                                <input type="text" class="form-control" name="mercName"/>
+                            </li>
+                            <li>
+                                <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search('formSelectMerchant', 'merchant-table')"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('formSelectMerchant', 'merchant-table')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </form>
+            </div>
+            <div class="col-sm-11 select-table table-striped">
+                <table id="merchant-table"></table>
+            </div>
+            <form id="formSelectMerchantProd">
+                <input type="hidden" id="showMerchantProdList" />
+            </form>
+        </div>
+    </script>
+    <th:block th:include="include :: footer" />
+    <th:block th:include="include :: select2-js" />
+    <th:block th:include="include :: bootstrap-select-js" />
+    <script th:inline="javascript">
+        var prefix = ctx + "business/prodInventory";
+
+        $(".merchantSelect").click(function() {
+            var controlNameObjId = $(this).attr("id");
+            var controlIdObjId = controlNameObjId.replace("Name", "Id");
+            var content = $('#selectMerchantDiv').html();
+            layer.open({
+                type: 1,
+                fix: false,
+                maxmin: false,
+                shade: 0.3,
+                area: ['800px', '690px'],
+                title: '选择商户',
+                // 弹层外区域关闭
+                shadeClose: true,
+                success: function(layero, index) {
+                    var merchantOptions = {
+                        id: "merchant-table",
+                        formId: "formSelectMerchant",
+                        url: ctx + "master/merchant/list",
+                        modalName: "选择商户",
+                        showSearch: false,
+                        showColumns: false,
+                        showRefresh: false,
+                        showExport: false,
+                        showToggle: false,
+                        singleSelect: true,
+                        clickToSelect: true,
+                        pageSize: 10,
+                        pageList: [10,20,50],
+                        columns: [
+                            {
+                                checkbox: true,
+                            },
+                            {
+                                field: 'mercName',
+                                title: '商户名称'
+                            },
+                            {
+                                field: 'contact',
+                                title: '联系人'
+                            },
+                            {
+                                field: 'mail',
+                                title: '联系信箱'
+                            },
+                            {
+                                field: 'mobile',
+                                title: '手机号'
+                            }
+                        ]
+                    };
+                    $.table.init(merchantOptions);
+                },
+                content: content,
+                btn: ['<i class="fa fa-check"></i> 确定', '<i class="fa fa-remove"></i> 关闭'],
+                btn1: function() {
+                    var selectedMercId;
+                    var selectedMercName;
+                    $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
+                        selectedMercId = $.common.getItemField(row, "mercId");
+                        selectedMercName =  $.common.getItemField(row, "mercName");
+                    });
+                    $("#" + controlNameObjId).val(selectedMercName);
+                    $("#" + controlIdObjId).val(selectedMercId);
+                    layer.closeAll();
+                }
+            });
+        })
+
+        $("#form-inventory-order-add").validate({
+            rules: {
+                ioFlag: {
+                    required: true
+                },
+                ioType: {
+                    required: true
+                }
+            },
+            messages: {
+                ioFlag: {
+                    required: icon + "请选择出入库标记"
+                },
+                ioType: {
+                    required: icon + "请选择出入库原因"
+                }
+            },
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                if ($("#ioFlag").val() === "stockin" && $("#inMercName").val() === "") {
+                    $.modal.alertError("选择入库时,请选择入库商户!");
+                } else if ($("#ioFlag").val() === "stockout" && $("#outMercName").val() === "") {
+                    $.modal.alertError("选择出库时,请选择出库商户!");
+                } else if ($("#ioFlag").val() === "stockin" && $("#ioType").val().indexOf("IN") < 0) {
+                    $.modal.alertError("入出库标记为入库时,请选择正确的入出库原因!");
+                } else if ($("#ioFlag").val() === "stockout" && $("#ioType").val().indexOf("OUT") < 0) {
+                    $.modal.alertError("入出库标记为出库时,请选择正确的入出库原因!");
+                } else if ($("#outMercName").val() === "" && $("#inMercName").val() === "") {
+                    $.modal.alertError("请至少选择一个入库或出库商户!");
+                } else if ($("#outMercName").val() !== "" && $("#inMercName").val() !== "") {
+                    $.modal.alertError("只能同时选择一个入库或出库商户!");
+                } else {
+                    $.operate.save(prefix + "/inventoryOrder/add", $('#form-inventory-order-add').serialize());
+                }
+            }
+        }
+    </script>
+</body>
+</html>

+ 210 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/prodInventory/prodInventoryOrderEdit.html

@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('新增商品入出库单')" />
+    <th:block th:include="include :: select2-css" />
+    <th:block th:include="include :: bootstrap-select-css" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-inventory-order-edit" th:object="${prodInventoryOrder}">
+            <input type="hidden" id="inventoryOrderId" name="inventoryOrderId" th:value="*{inventoryOrderId}"/>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出入库标记:</label>
+                    <div class="col-sm-8" th:with="type=${@dict.getType('inventory_bill_type')}">
+                        <input type="text" class="form-control" th:each="dict:${type}" th:if="${prodInventoryOrder.ioFlag == dict.dictValue}" th:value="${dict.dictLabel}" readonly>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出入库原因:</label>
+                    <div class="col-sm-8" th:with="type=${@dict.getType('inventory_bill_reason')}">
+                        <input type="text" class="form-control" th:each="dict:${type}" th:if="${prodInventoryOrder.ioType == dict.dictValue}" th:value="${dict.dictLabel}" readonly>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">入库商户:</label>
+                    <div class="col-sm-8">
+                        <input type="text" class="form-control" id="inMercName" name="inMercName" th:field="*{stockInName}" readonly/>
+                        <input type="hidden" id="inMercId" name="inId" th:value="*{inId}"/>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出库商户:</label>
+                    <div class="col-sm-8">
+                        <input type="text" class="form-control" id="outMercName" name="outMercName" th:field="*{stockOutName}" readonly/>
+                        <input type="hidden" id="outMercId" name="outId" th:value="*{outId}"/>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">备注:</label>
+                    <div class="col-sm-8">
+                        <textarea id="remark" name="remark" class="form-control col-sm-3" maxlength="500" style="height: 100px;" readonly></textarea>
+                    </div>
+                </div>
+            </div>
+        </form>
+        <div class="col-sm-12">
+            <a class="btn btn-success" onclick="selectRows()">
+                <i class="fa fa-plus"></i>调整库存
+            </a>
+        </div>
+        <div class="col-sm-12 select-table table-striped">
+            <table id="prod-list-table"></table>
+            <table id="prod-inv-list-table"></table>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <th:block th:include="include :: select2-js" />
+    <th:block th:include="include :: bootstrap-select-js" />
+    <script th:inline="javascript">
+        var prefix = ctx + "business/prodInventory";
+
+        $(function() {
+            var options = {
+                id: "prod-list-table",
+                formId: "form-inventory-order-edit",
+                url: prefix + "/mercInventory/list",
+                createUrl: prefix + "/mercInventory/add",
+                removeUrl: prefix + "/remove",
+                modalName: "商品库存",
+                showSearch: false,
+                showRefresh: false,
+                showColumns: false,
+                showToggle: false,
+                clickToSelect: true,
+                queryParams: myQueryParams,
+                pageSize: 5,
+                pageList: [5],
+                columns: [
+                    {
+                        checkbox: true
+                    },
+                    {
+                        field: 'prodName',
+                        title: '商品名称'
+                    },
+                    {
+                        field: 'attrName',
+                        title: '属性名称'
+                    },
+                    {
+                        field: 'quantity',
+                        title: '库存数量'
+                    },
+                    {
+                        field: 'availQty',
+                        title: '可售数量'
+                    }
+                ]
+            };
+            $.table.init(options);
+        });
+
+        function submitHandler() {
+            var rows = $('#prod-inv-list-table').bootstrapTable('getData');
+            var inventoryOrderDetails = []
+            if ($("#prod-list-table").bootstrapTable('getSelections').length === 0) {
+                $.modal.alertError("没有选择配置库存的商品!");
+            } else if (rows.length === 0) {
+                $.modal.alertError("请选择需要增加库存的商品!");
+            } else {
+                var hasData = false;
+                $.each(rows, function(index, row) {
+                    var addInvQty = $("input[name='addInvQty']").eq(index).val();
+                    if (addInvQty + "" !== "0") {
+                        hasData = true;
+                    }
+                    let inventoryOrderDetail = {
+                        "prodId": row.prodId,
+                        "prodName": row.prodName,
+                        "prodAttrId": row.prodAttrId,
+                        "prodAttrName": row.attrName,
+                        "quantity": addInvQty
+                    }
+                    inventoryOrderDetails.push(inventoryOrderDetail);
+                });
+                if (!hasData) {
+                    $.modal.alertError("请检查增加库存的数据!");
+                } else {
+                    var data = {
+                        "inventoryOrderId": $("#inventoryOrderId").val(),
+                        "inventoryOrderDetails": inventoryOrderDetails
+                    }
+                    $.ajax({
+                        url: prefix + "/inventoryOrder/edit",
+                        contentType: 'application/json',
+                        data: JSON.stringify(data),
+                        type: "post",
+                        processData: false,
+                        success: function(result) {
+                            $.operate.successCallback(result);
+                        }
+                    });
+                }
+            }
+        }
+
+        function myQueryParams(params) {
+            var search = $.table.queryParams(params);
+            search.mercId = $("#inMercId").val();
+            return search;
+        }
+
+        function selectRows() {
+            var rows = $('#prod-list-table').bootstrapTable('getSelections');
+            var invDatas = [];
+            $.each(rows, function(index, row) {
+                var invData = {
+                    "prodId": row.prodId,
+                    "prodAttrId": row.prodAttrId,
+                    "prodName": row.prodName,
+                    "attrName": row.attrName,
+                    "addInvQty": 0
+                }
+                invDatas.push(invData);
+            });
+            $.table.destroy("prod-inv-list-table");
+            var optionsInvTable = {
+                id: "prod-inv-list-table",
+                modalName: "商品库存",
+                showSearch: false,
+                showRefresh: false,
+                showColumns: false,
+                showToggle: false,
+                pagination: false,
+                clickToSelect: true,
+                data: invDatas,
+                columns: [
+                    {
+                        field: 'prodName',
+                        title: '商品名称'
+                    },
+                    {
+                        field: 'attrName',
+                        title: '属性名称'
+                    },
+                    {
+                        field: 'addInvQty',
+                        title: '增加库存',
+                        width: 100,
+                        formatter: function(value, row) {
+                            var html = "<input class='form-control' type='text' name='addInvQty' value='" + value +"'>"
+                            return html;
+                        }
+                    },
+                ]
+            };
+            $.table.init(optionsInvTable);
+        }
+    </script>
+</body>
+</html>

+ 3 - 8
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/merchant/merchant.html

@@ -86,8 +86,8 @@
         var setPayInfoFlag = [[${@permission.hasPermi('master:merchant:prod:setPayInfo')}]];
         var setInvFlag = [[${@permission.hasPermi('master:merchant:prod:setInv')}]];
         var removeFlag = [[${@permission.hasPermi('master:merchant:prod:remove')}]];
-        var mercStatuses = [[${@dict.getType('merchant_status')}]];
-        var mercTypes = [[${@dict.getType('merchant_type')}]];
+        var mercStatuses = [[${@dict.getType('merc_status')}]];
+        var mercTypes = [[${@dict.getType('merc_type')}]];
 
         var prefix = ctx + "master/merchant";
 
@@ -101,11 +101,6 @@
                 modalName: "商户",
                 columns: [
                 {
-                    field: 'mercId',
-                    title: '主键',
-                    visible: false
-                },
-                {
                     field: 'mercName',
                     title: '商户名称'
                 },
@@ -187,7 +182,7 @@
                     if (result.code === 500) {
                         $.modal.alertError(result.msg);
                     } else if (result.code === 0) {
-                        $.modal.openTab("商品库存",ctx + "business/prodInventory/" + mercId);
+                        $.modal.openTab("商品库存",ctx + "business/prodInventory/mercInventory/" + mercId);
                     }
                 }
             });

+ 0 - 1
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prodTag/editTag.html

@@ -14,7 +14,6 @@
         <div class="row" id="ibox-container">
         </div>
     </div>
-    <!-- 设置快递单类型区域 -->
     <script id="addNewTagDiv" type="text/template">
         <div class="col-sm-12 select-table table-striped">
             <table id="newTag-table"></table>

+ 4 - 4
08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EInventoryIoType.java → 08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EInventoryBillReason.java

@@ -11,7 +11,7 @@ import lombok.Getter;
  */
 @AllArgsConstructor
 @Getter
-public enum EInventoryIoType {
+public enum EInventoryBillReason {
     IN_PURCHASE("IN_PURCHASE", "采购入库"),
     IN_RETURN("IN_RETURN", "退货入库"),
     IN_CHANGE("IN_CHANGE", "换货入库"),
@@ -24,12 +24,12 @@ public enum EInventoryIoType {
     private String desc;
 
     /** 解析 */
-    public static EInventoryIoType parseByVal(String val) {
-        for(EInventoryIoType value : EInventoryIoType.values()) {
+    public static EInventoryBillReason parseByVal(String val) {
+        for(EInventoryBillReason value : EInventoryBillReason.values()) {
             if(value.getVal().equalsIgnoreCase(val)) {
                 return value;
             }
         }
-        return EInventoryIoType.OTHER;
+        return EInventoryBillReason.OTHER;
     }
 }

+ 0 - 30
08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EInventoryIoFlag.java

@@ -1,30 +0,0 @@
-package com.xingxi.common.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @program: gululuq
- * @description: 入出库标志
- * @author: 金
- * @create: 2025-03-16
- */
-@AllArgsConstructor
-@Getter
-public enum EInventoryIoFlag {
-    IN("1", "入库"),
-    OUT("0", "出库");
-
-    private String val;
-    private String desc;
-
-    // 解析
-    public static EInventoryIoFlag parseByVal(String val) {
-        for (EInventoryIoFlag type : EInventoryIoFlag.values()) {
-            if (type.getVal().equalsIgnoreCase(val)) {
-                return type;
-            }
-        }
-        return EInventoryIoFlag.IN;
-    }
-}

+ 1 - 1
08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/domain/ProdInventoryOrder.java

@@ -27,7 +27,7 @@ public class ProdInventoryOrder extends BaseEntity {
 
     // 出入库原因
     @Excel(name = "出入库原因")
-    private String iotype;
+    private String ioType;
 
     // 入库商户ID
     @Excel(name = "入库商户ID")

+ 1 - 1
08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/domain/ProdInventoryOrderDetail.java

@@ -43,7 +43,7 @@ public class ProdInventoryOrderDetail extends BaseEntity {
 
     // 数量
     @Excel(name = "数量")
-    private Long quantity;
+    private Integer quantity;
 
     // 删除标志
     @Excel(name = "删除标志")

+ 7 - 0
08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/service/impl/ProdInventoryOrderDetailServiceImpl.java

@@ -1,10 +1,12 @@
 package com.xingxi.business.ProdInventory.service.impl;
 
 import com.xingxi.common.core.text.Convert;
+import com.xingxi.common.enums.EDelFlag;
 import com.xingxi.common.utils.DateUtils;
 import com.xingxi.business.ProdInventory.domain.ProdInventoryOrderDetail;
 import com.xingxi.business.ProdInventory.mapper.ProdInventoryOrderDetailMapper;
 import com.xingxi.business.ProdInventory.service.IProdInventoryOrderDetailService;
+import com.xingxi.common.utils.ShiroUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -63,6 +65,11 @@ public class ProdInventoryOrderDetailServiceImpl implements IProdInventoryOrderD
      */
     @Override
     public int batchInsertProdInventoryOrderDetail(List<ProdInventoryOrderDetail> prodInventoryOrderDetailList) {
+        for (ProdInventoryOrderDetail prodInventoryOrderDetail : prodInventoryOrderDetailList) {
+            prodInventoryOrderDetail.setDelFlag(EDelFlag.NO.getVal());
+            prodInventoryOrderDetail.setCreateUser(ShiroUtils.getLoginName());
+            prodInventoryOrderDetail.setCreateTime(DateUtils.getNowDate());
+        }
         return prodInventoryOrderDetailMapper.batchInsertProdInventoryOrderDetail(prodInventoryOrderDetailList);
     }
 

+ 5 - 0
08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/business/ProdInventory/service/impl/ProdInventoryOrderServiceImpl.java

@@ -1,10 +1,12 @@
 package com.xingxi.business.ProdInventory.service.impl;
 
 import com.xingxi.common.core.text.Convert;
+import com.xingxi.common.enums.EDelFlag;
 import com.xingxi.common.utils.DateUtils;
 import com.xingxi.business.ProdInventory.domain.ProdInventoryOrder;
 import com.xingxi.business.ProdInventory.mapper.ProdInventoryOrderMapper;
 import com.xingxi.business.ProdInventory.service.IProdInventoryOrderService;
+import com.xingxi.common.utils.ShiroUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -51,6 +53,8 @@ public class ProdInventoryOrderServiceImpl implements IProdInventoryOrderService
      */
     @Override
     public int insertProdInventoryOrder(ProdInventoryOrder prodInventoryOrder) {
+        prodInventoryOrder.setDelFlag(EDelFlag.NO.getVal());
+        prodInventoryOrder.setCreateUser(ShiroUtils.getLoginName());
         prodInventoryOrder.setCreateTime(DateUtils.getNowDate());
         return prodInventoryOrderMapper.insertProdInventoryOrder(prodInventoryOrder);
     }
@@ -74,6 +78,7 @@ public class ProdInventoryOrderServiceImpl implements IProdInventoryOrderService
      */
     @Override
     public int updateProdInventoryOrder(ProdInventoryOrder prodInventoryOrder) {
+        prodInventoryOrder.setUpdateUser(ShiroUtils.getLoginName());
         prodInventoryOrder.setUpdateTime(DateUtils.getNowDate());
         return prodInventoryOrderMapper.updateProdInventoryOrder(prodInventoryOrder);
     }

+ 10 - 10
08.src/Xingxi/xingxi-system/src/main/resources/mapper/business/ProdInventoryOrderMapper.xml

@@ -4,7 +4,7 @@
     <resultMap type="ProdInventoryOrder" id="ProdInventoryOrderResult">
         <result property="inventoryOrderId"    column="inventoryOrderId"    />
         <result property="ioFlag"    column="ioFlag"    />
-        <result property="iotype"    column="iotype"    />
+        <result property="ioType"    column="ioType"    />
         <result property="inId"    column="inId"    />
         <result property="outId"    column="outId"    />
         <result property="remark"    column="remark"    />
@@ -16,14 +16,14 @@
     </resultMap>
 
     <sql id="selectProdInventoryOrder">
-        select inventoryOrderId, ioFlag, iotype, inId, outId, remark, delFlag, createUser, createTime, updateUser, updateTime from t_prod_inventory_order
+        select inventoryOrderId, ioFlag, ioType, inId, outId, remark, delFlag, createUser, createTime, updateUser, updateTime from t_prod_inventory_order
     </sql>
 
     <sql id="selectProdInventoryOrderExt">
         select
             ${tableAlias}.inventoryOrderId,
             ${tableAlias}.ioFlag,
-            ${tableAlias}.iotype,
+            ${tableAlias}.ioType,
             ${tableAlias}.inId,
             ${tableAlias}.outId,
             ${tableAlias}.remark,
@@ -39,7 +39,7 @@
         <include refid="selectProdInventoryOrder"/>
         <where>  
             <if test="ioFlag != null  and ioFlag != ''"> and ioFlag = #{ioFlag}</if>
-            <if test="iotype != null  and iotype != ''"> and iotype = #{iotype}</if>
+            <if test="ioType != null  and ioType != ''"> and ioType = #{ioType}</if>
             <if test="inId != null "> and inId = #{inId}</if>
             <if test="outId != null "> and outId = #{outId}</if>
             <if test="delFlag != null  and delFlag != ''"> and delFlag = #{delFlag}</if>
@@ -59,7 +59,7 @@
         insert into t_prod_inventory_order
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="ioFlag != null">ioFlag,</if>
-            <if test="iotype != null">iotype,</if>
+            <if test="ioType != null">ioType,</if>
             <if test="inId != null">inId,</if>
             <if test="outId != null">outId,</if>
             <if test="remark != null">remark,</if>
@@ -71,7 +71,7 @@
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="ioFlag != null">#{ioFlag},</if>
-            <if test="iotype != null">#{iotype},</if>
+            <if test="ioType != null">#{ioType},</if>
             <if test="inId != null">#{inId},</if>
             <if test="outId != null">#{outId},</if>
             <if test="remark != null">#{remark},</if>
@@ -84,9 +84,9 @@
     </insert>
 
     <insert id="batchInsertProdInventoryOrder">
-        insert into t_prod_inventory_order( ioFlag, iotype, inId, outId, remark, delFlag, createUser, createTime, updateUser, updateTime) values
+        insert into t_prod_inventory_order( ioFlag, ioType, inId, outId, remark, delFlag, createUser, createTime, updateUser, updateTime) values
         <foreach item="item" index="index" collection="list" separator=",">
-            ( #{item.ioFlag}, #{item.iotype}, #{item.inId}, #{item.outId}, #{item.remark}, #{item.delFlag}, #{item.createUser}, #{item.createTime}, #{item.updateUser}, #{item.updateTime})
+            ( #{item.ioFlag}, #{item.ioType}, #{item.inId}, #{item.outId}, #{item.remark}, #{item.delFlag}, #{item.createUser}, #{item.createTime}, #{item.updateUser}, #{item.updateTime})
         </foreach>
     </insert>
 
@@ -94,7 +94,7 @@
         update t_prod_inventory_order
         <trim prefix="SET" suffixOverrides=",">
             <if test="ioFlag != null">ioFlag = #{ioFlag},</if>
-            <if test="iotype != null">iotype = #{iotype},</if>
+            <if test="ioType != null">ioType = #{ioType},</if>
             <if test="inId != null">inId = #{inId},</if>
             <if test="outId != null">outId = #{outId},</if>
             <if test="remark != null">remark = #{remark},</if>
@@ -138,7 +138,7 @@
         set delFlag = '1'
         <where>
             <if test="ioFlag != null  and ioFlag != ''"> and ioFlag = #{ioFlag}</if>
-            <if test="iotype != null  and iotype != ''"> and iotype = #{iotype}</if>
+            <if test="ioType != null  and ioType != ''"> and ioType = #{ioType}</if>
             <if test="inId != null "> and inId = #{inId}</if>
             <if test="outId != null "> and outId = #{outId}</if>
             <if test="delFlag != null  and delFlag != ''"> and delFlag = #{delFlag}</if>