From d760e5f09d8d469b6b171e0582c661774c1ee9d2 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Fri, 8 Aug 2025 09:14:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(inventory):=20=E6=96=B0=E5=A2=9E=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加产品库存新增、编辑、删除功能 - 实现入库单新增、编辑功能 - 增加仓库信息管理功能 - 添加库存数据导入导出功能 - 优化供应商管理界面,增加默认仓库选择 --- .../src/main/resources/application.yml | 2 +- .../editor/i18n/translation_signavio_de.js | 4 +- .../templates/inventory/info/add.html | 81 +++ .../templates/inventory/info/edit.html | 82 +++ .../templates/inventory/info/info.html | 128 +++++ .../templates/inventory/info/innerLog.html | 88 +++ .../templates/inventory/inner/add.html | 507 ++++++++++++++++++ .../templates/inventory/inner/edit.html | 136 +++++ .../templates/inventory/inner/inner.html | 135 +++++ .../templates/layout/product-list.html | 19 +- .../templates/system/vendor/add.html | 12 + .../templates/system/vendor/edit.html | 12 + .../templates/system/vendor/vendor.html | 5 + .../templates/warehouse/info/add.html | 101 ++++ .../templates/warehouse/info/edit.html | 102 ++++ .../templates/warehouse/info/info.html | 161 ++++++ .../controller/InventoryInfoController.java | 143 +++++ .../OmsInventoryInnerController.java | 162 ++++++ .../OmsWarehouseInfoController.java | 128 +++++ .../sip/controller/ProductInfoController.java | 13 + .../sip/controller/ProjectInfoController.java | 4 +- .../sip/controller/VendorInfoController.java | 28 +- .../com/ruoyi/sip/domain/InventoryInfo.java | 77 +++ .../ruoyi/sip/domain/OmsInventoryInner.java | 63 +++ .../ruoyi/sip/domain/OmsWarehouseInfo.java | 82 +++ .../java/com/ruoyi/sip/domain/VendorInfo.java | 5 + .../ruoyi/sip/dto/inventory/GroupInfo.java | 35 ++ .../dto/warehouse/WarehouseInnerExcelDto.java | 37 ++ .../ruoyi/sip/mapper/InventoryInfoMapper.java | 66 +++ .../sip/mapper/OmsInventoryInnerMapper.java | 63 +++ .../sip/mapper/OmsWarehouseInfoMapper.java | 63 +++ .../sip/service/IInventoryInfoService.java | 76 +++ .../service/IOmsInventoryInnerService.java | 66 +++ .../sip/service/IOmsWarehouseInfoService.java | 68 +++ .../ruoyi/sip/service/IVendorInfoService.java | 3 + .../impl/InventoryInfoServiceImpl.java | 158 ++++++ .../impl/OmsInventoryInnerServiceImpl.java | 155 ++++++ .../impl/OmsWarehouseInfoServiceImpl.java | 126 +++++ .../service/impl/VendorInfoServiceImpl.java | 15 + .../com/ruoyi/sip/utils/TemplateMailUtil.java | 6 +- .../mapper/inventory/InventoryInfoMapper.xml | 142 +++++ .../inventory/OmsInventoryInnerMapper.xml | 105 ++++ .../mapper/system/ProductInfoMapper.xml | 2 +- .../mapper/system/VendorInfoMapper.xml | 34 +- .../warehouse/OmsWarehouseInfoMapper.xml | 122 +++++ 45 files changed, 3594 insertions(+), 28 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/info/add.html create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/info/edit.html create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/info/info.html create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/inner/add.html create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/inner/edit.html create mode 100644 ruoyi-admin/src/main/resources/templates/inventory/inner/inner.html create mode 100644 ruoyi-admin/src/main/resources/templates/warehouse/info/add.html create mode 100644 ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html create mode 100644 ruoyi-admin/src/main/resources/templates/warehouse/info/info.html create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsInventoryInnerController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsWarehouseInfoController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryInfo.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsInventoryInner.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsWarehouseInfo.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/dto/inventory/GroupInfo.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/dto/warehouse/WarehouseInnerExcelDto.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/InventoryInfoMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsInventoryInnerMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsWarehouseInfoMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IInventoryInfoService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsInventoryInnerService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsWarehouseInfoService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryInfoServiceImpl.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsInventoryInnerServiceImpl.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsWarehouseInfoServiceImpl.java create mode 100644 ruoyi-sip/src/main/resources/mapper/inventory/InventoryInfoMapper.xml create mode 100644 ruoyi-sip/src/main/resources/mapper/inventory/OmsInventoryInnerMapper.xml create mode 100644 ruoyi-sip/src/main/resources/mapper/warehouse/OmsWarehouseInfoMapper.xml diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index cf99ae7e..37451aba 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -110,7 +110,7 @@ shiro: # 设置Cookie的过期时间,天为单位 maxAge: 30 # 设置密钥,务必保持唯一性(生成方式,直接拷贝到main运行即可)Base64.encodeToString(CipherUtils.generateNewKey(128, "AES").getEncoded()) (默认启动生成随机秘钥,随机秘钥会导致之前客户端RememberMe Cookie无效,如设置固定秘钥RememberMe Cookie则有效) - cipherKey: + cipherKey: p8D/J77AfqR1i4tQYorziA== session: # Session超时时间,-1代表永不过期(默认30分钟) expireTime: 120 diff --git a/ruoyi-admin/src/main/resources/static/designer/editor-app/editor/i18n/translation_signavio_de.js b/ruoyi-admin/src/main/resources/static/designer/editor-app/editor/i18n/translation_signavio_de.js index 192834ff..6f8600da 100644 --- a/ruoyi-admin/src/main/resources/static/designer/editor-app/editor/i18n/translation_signavio_de.js +++ b/ruoyi-admin/src/main/resources/static/designer/editor-app/editor/i18n/translation_signavio_de.js @@ -27,8 +27,8 @@ * DEALINGS IN THE SOFTWARE. * **/ - -Ext.PagingToolbar.prototype.firstText = "Erste Seite"; + +Ext.PagingToolbar.prototype.firstText = "Erste Seite"; Ext.PagingToolbar.prototype.prevText = "Vorherige Seite"; Ext.PagingToolbar.prototype.nextText = "Nächste Seite"; Ext.PagingToolbar.prototype.lastText = "Letzte Seite"; diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/add.html b/ruoyi-admin/src/main/resources/templates/inventory/info/add.html new file mode 100644 index 00000000..7b958ec4 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/add.html @@ -0,0 +1,81 @@ + + + + + + +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/edit.html b/ruoyi-admin/src/main/resources/templates/inventory/info/edit.html new file mode 100644 index 00000000..6ffc7850 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/edit.html @@ -0,0 +1,82 @@ + + + + + + +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/info.html b/ruoyi-admin/src/main/resources/templates/inventory/info/info.html new file mode 100644 index 00000000..cca872b5 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/info.html @@ -0,0 +1,128 @@ + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html b/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html new file mode 100644 index 00000000..dfe7ff9d --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html @@ -0,0 +1,88 @@ + + + + + + +
+ +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html b/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html new file mode 100644 index 00000000..4fe1902c --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html @@ -0,0 +1,507 @@ + + + + + + + +
+
+
+

入库信息

+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ + +
+
+
+
+
+ +
+ +
+
+
+
+

产品信息

+
+ + + +
+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/inventory/inner/edit.html b/ruoyi-admin/src/main/resources/templates/inventory/inner/edit.html new file mode 100644 index 00000000..4a07e90f --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/inner/edit.html @@ -0,0 +1,136 @@ + + + + + + +
+
+ +
+

入库信息

+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+

产品信息

+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/inventory/inner/inner.html b/ruoyi-admin/src/main/resources/templates/inventory/inner/inner.html new file mode 100644 index 00000000..30752239 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/inventory/inner/inner.html @@ -0,0 +1,135 @@ + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + + - + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ +
+ + 添加 + + + + + + + + + 导出 + +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/layout/product-list.html b/ruoyi-admin/src/main/resources/templates/layout/product-list.html index 85558ff3..c2208a51 100644 --- a/ruoyi-admin/src/main/resources/templates/layout/product-list.html +++ b/ruoyi-admin/src/main/resources/templates/layout/product-list.html @@ -104,6 +104,7 @@ + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html b/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html new file mode 100644 index 00000000..9f926f44 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html @@ -0,0 +1,102 @@ + + + + + + +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/info/info.html b/ruoyi-admin/src/main/resources/templates/warehouse/info/info.html new file mode 100644 index 00000000..71937642 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/warehouse/info/info.html @@ -0,0 +1,161 @@ + + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java new file mode 100644 index 00000000..ae6e220f --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java @@ -0,0 +1,143 @@ +package com.ruoyi.sip.controller; + +import java.util.List; + +import com.ruoyi.sip.dto.inventory.GroupInfo; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.service.IInventoryInfoService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 产品库存Controller + * + * @author ch + * @date 2025-08-07 + */ +@Controller +@RequestMapping("/inventory/info") +public class InventoryInfoController extends BaseController +{ + private String prefix = "inventory/info"; + + @Autowired + private IInventoryInfoService inventoryInfoService; + + @RequiresPermissions("inventory:info:view") + @GetMapping() + public String info() + { + return prefix + "/info"; + } + + /** + * 查询产品库存列表 + */ +// @RequiresPermissions("inventory:info:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(InventoryInfo inventoryInfo) + { + startPage(); + List list = inventoryInfoService.selectInventoryInfoList(inventoryInfo); + return getDataTable(list); + } + @PostMapping("/group/list") + @ResponseBody + public TableDataInfo groupList(GroupInfo info) + { + startPage(); + List list = inventoryInfoService.listGroup(info); + return getDataTable(list); + } + + /** + * 导出产品库存列表 + */ + @RequiresPermissions("inventory:info:export") + @Log(title = "产品库存", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(InventoryInfo inventoryInfo) + { + List list = inventoryInfoService.selectInventoryInfoList(inventoryInfo); + ExcelUtil util = new ExcelUtil(InventoryInfo.class); + return util.exportExcel(list, "产品库存数据"); + } + + /** + * 新增产品库存 + */ + @RequiresPermissions("inventory:info:add") + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存产品库存 + */ + @RequiresPermissions("inventory:info:add") + @Log(title = "产品库存", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(InventoryInfo inventoryInfo) + { + return toAjax(inventoryInfoService.insertInventoryInfo(inventoryInfo)); + } + + /** + * 修改产品库存 + */ + @RequiresPermissions("inventory:info:edit") + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) + { + InventoryInfo inventoryInfo = inventoryInfoService.selectInventoryInfoById(id); + mmap.put("inventoryInfo", inventoryInfo); + return prefix + "/edit"; + } + + /** + * 修改保存产品库存 + */ + @RequiresPermissions("inventory:info:edit") + @Log(title = "产品库存", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(InventoryInfo inventoryInfo) + { + return toAjax(inventoryInfoService.updateInventoryInfo(inventoryInfo)); + } + @GetMapping("/innerLog/{productCode}") + public String view(@PathVariable("productCode") String productCode, ModelMap mmap) { + + mmap.put("productCode", productCode); + return prefix + "/innerLog"; + } + /** + * 删除产品库存 + */ + @RequiresPermissions("inventory:info:remove") + @Log(title = "产品库存", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(inventoryInfoService.deleteInventoryInfoByIds(ids)); + } +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsInventoryInnerController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsInventoryInnerController.java new file mode 100644 index 00000000..ffe6c6dc --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsInventoryInnerController.java @@ -0,0 +1,162 @@ +package com.ruoyi.sip.controller; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; + +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.domain.OmsWarehouseInfo; +import com.ruoyi.sip.dto.warehouse.WarehouseInnerExcelDto; +import com.ruoyi.sip.service.IInventoryInfoService; +import com.ruoyi.sip.service.IOmsWarehouseInfoService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.sip.domain.OmsInventoryInner; +import com.ruoyi.sip.service.IOmsInventoryInnerService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 入库单信息Controller + * + * @author ruoyi + * @date 2025-08-06 + */ +@Controller +@RequestMapping("/inventory/inner") +public class OmsInventoryInnerController extends BaseController { + private String prefix = "inventory/inner"; + + @Autowired + private IOmsInventoryInnerService omsInventoryInnerService; + + @Autowired + private IInventoryInfoService inventoryInfoService; + @Autowired + private IOmsWarehouseInfoService warehouseInfoService; + + @RequiresPermissions("inventory:inner:view") + @GetMapping() + public String inner() { + return prefix + "/inner"; + } + + /** + * 查询入库单信息列表 + */ + @RequiresPermissions("inventory:inner:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(OmsInventoryInner omsInventoryInner) { + startPage(); + List list = omsInventoryInnerService.selectOmsInventoryInnerList(omsInventoryInner); + return getDataTable(list); + } + + /** + * 导出入库单信息列表 + */ + @RequiresPermissions("inventory:inner:export") + @Log(title = "入库单信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(OmsInventoryInner omsInventoryInner) { + List list = omsInventoryInnerService.selectOmsInventoryInnerList(omsInventoryInner); + ExcelUtil util = new ExcelUtil(OmsInventoryInner.class); + return util.exportExcel(list, "入库单信息数据"); + } + + /** + * 新增入库单信息 + */ + @RequiresPermissions("inventory:inner:add") + @GetMapping("/add") + public String add(ModelMap modelMap) { + OmsWarehouseInfo queryWarehouseParam = new OmsWarehouseInfo(); + queryWarehouseParam.setWarehouseStatus(OmsWarehouseInfo.WarehouseStatusEnum.NORMAL.getValue()); + modelMap.put("warehouseList", warehouseInfoService.selectOmsWarehouseInfoList(queryWarehouseParam)); + + return prefix + "/add"; + } + + /** + * 新增保存入库单信息 + */ + @RequiresPermissions("inventory:inner:add") + @Log(title = "入库单信息", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(@RequestBody OmsInventoryInner omsInventoryInner) { + return toAjax(omsInventoryInnerService.insertOmsInventoryInner(omsInventoryInner)); + } + + /** + * 修改入库单信息 + */ + @RequiresPermissions("inventory:inner:edit") + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) { + OmsInventoryInner omsInventoryInner = omsInventoryInnerService.selectOmsInventoryInnerById(id); + mmap.put("omsInventoryInner", omsInventoryInner); + return prefix + "/edit"; + } + /** + * 修改入库单信息 + */ + @RequiresPermissions("inventory:inner:view") + @GetMapping("/view/{id}") + public String view(@PathVariable("id") Long id, ModelMap mmap) { + OmsInventoryInner omsInventoryInner = omsInventoryInnerService.selectOmsInventoryInnerById(id); + mmap.put("omsInventoryInner", omsInventoryInner); + mmap.put("view",true); + return prefix + "/edit"; + } + + + + /** + * 修改保存入库单信息 + */ + @RequiresPermissions("inventory:inner:edit") + @Log(title = "入库单信息", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(OmsInventoryInner omsInventoryInner) { + return toAjax(omsInventoryInnerService.updateOmsInventoryInner(omsInventoryInner)); + } + + /** + * 删除入库单信息 + */ + @RequiresPermissions("inventory:inner:remove") + @Log(title = "入库单信息", businessType = BusinessType.DELETE) + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove(String ids) { + return toAjax(omsInventoryInnerService.deleteOmsInventoryInnerByIds(ids)); + } + + @PostMapping("/export/template") + @ResponseBody + public AjaxResult exportTemplate(){ + ExcelUtil util = new ExcelUtil(WarehouseInnerExcelDto.class); + return util.exportExcel(Collections.emptyList(), "入库数据"); + } + @PostMapping("/importData") + @ResponseBody + public TableDataInfo importData(MultipartFile file) throws IOException { + ExcelUtil util = new ExcelUtil(WarehouseInnerExcelDto.class); + List excelList = util.importExcel(file.getInputStream()); + List inventoryInfos = inventoryInfoService.fillBaseInfo(excelList); + return getDataTable(inventoryInfos); + } + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsWarehouseInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsWarehouseInfoController.java new file mode 100644 index 00000000..441685de --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsWarehouseInfoController.java @@ -0,0 +1,128 @@ +package com.ruoyi.sip.controller; + +import java.util.List; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.sip.domain.OmsWarehouseInfo; +import com.ruoyi.sip.service.IOmsWarehouseInfoService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 仓库基础信息Controller + * + * @author ruoyi + * @date 2025-08-05 + */ +@Controller +@RequestMapping("/warehouse/info") +public class OmsWarehouseInfoController extends BaseController +{ + private String prefix = "warehouse/info"; + + @Autowired + private IOmsWarehouseInfoService omsWarehouseInfoService; + + @RequiresPermissions("warehouse:info:view") + @GetMapping() + public String info() + { + return prefix + "/info"; + } + + /** + * 查询仓库基础信息列表 + */ + @RequiresPermissions("warehouse:info:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(OmsWarehouseInfo omsWarehouseInfo) + { + startPage(); + List list = omsWarehouseInfoService.selectOmsWarehouseInfoList(omsWarehouseInfo); + return getDataTable(list); + } + + /** + * 导出仓库基础信息列表 + */ + @RequiresPermissions("warehouse:info:export") + @Log(title = "仓库基础信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(OmsWarehouseInfo omsWarehouseInfo) + { + List list = omsWarehouseInfoService.selectOmsWarehouseInfoList(omsWarehouseInfo); + ExcelUtil util = new ExcelUtil(OmsWarehouseInfo.class); + return util.exportExcel(list, "仓库基础信息数据"); + } + + /** + * 新增仓库基础信息 + */ + @RequiresPermissions("warehouse:info:add") + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存仓库基础信息 + */ + @RequiresPermissions("warehouse:info:add") + @Log(title = "仓库基础信息", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(OmsWarehouseInfo omsWarehouseInfo) + { + return toAjax(omsWarehouseInfoService.insertOmsWarehouseInfo(omsWarehouseInfo)); + } + + /** + * 修改仓库基础信息 + */ + @RequiresPermissions("warehouse:info:edit") + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) + { + OmsWarehouseInfo omsWarehouseInfo = omsWarehouseInfoService.selectOmsWarehouseInfoById(id); + mmap.put("omsWarehouseInfo", omsWarehouseInfo); + return prefix + "/edit"; + } + + /** + * 修改保存仓库基础信息 + */ + @RequiresPermissions("warehouse:info:edit") + @Log(title = "仓库基础信息", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(OmsWarehouseInfo omsWarehouseInfo) + { + return toAjax(omsWarehouseInfoService.updateOmsWarehouseInfo(omsWarehouseInfo)); + } + + /** + * 删除仓库基础信息 + */ + @RequiresPermissions("warehouse:info:remove") + @Log(title = "仓库基础信息", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(omsWarehouseInfoService.deleteOmsWarehouseInfoByIds(ids)); + } +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProductInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProductInfoController.java index a54eb0b6..32fb3729 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProductInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProductInfoController.java @@ -1,7 +1,9 @@ package com.ruoyi.sip.controller; +import java.util.Collections; import java.util.List; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.sip.domain.MaintenanceRecordsDto; import com.ruoyi.sip.domain.VendorInfo; import com.ruoyi.sip.service.IVendorInfoService; @@ -59,6 +61,17 @@ public class ProductInfoController extends BaseController List list = productInfoService.selectProductInfoList(productInfo); return getDataTable(list); } + @GetMapping("/query/{productCode}") + @ResponseBody + public AjaxResult queryByCode(@PathVariable("productCode") String productCode) + { + + List list = productInfoService.selectProductInfoByCodeList(Collections.singletonList(productCode)); + if (CollUtil.isEmpty(list)){ + return AjaxResult.error("未找到该产品"); + } + return AjaxResult.success(list.get(0)); + } /** * 导出产品管理列表 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java index 3ff97b18..9ebc569f 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java @@ -135,7 +135,7 @@ public class ProjectInfoController extends BaseController List orderInfoList = orderInfoService.selectProjectOrderInfoByProjectId(Collections.singletonList(id)); ProjectOrderInfo orderInfo = CollUtil.isNotEmpty(orderInfoList) ? orderInfoList.get(0) : null; mmap.put("orderInfo", orderInfo); - mmap.put("canUpdate", true); + mmap.put("canUpdate", orderInfo == null || orderInfo.getOrderStatus().equals(ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode())); return prefix + "/edit"; } @GetMapping("/view/{id}") @@ -151,7 +151,7 @@ public class ProjectInfoController extends BaseController } @GetMapping("/query/{id}") @ResponseBody - public AjaxResult edit(@PathVariable("id") Long id) + public AjaxResult query(@PathVariable("id") Long id) { ProjectInfo projectInfo = projectInfoService.selectProjectInfoById(id); return AjaxResult.success(projectInfo); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java index e8bc16fa..0a998964 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java @@ -4,15 +4,21 @@ import java.io.File; import java.nio.file.Paths; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.sip.domain.OmsWarehouseInfo; import com.ruoyi.sip.domain.VendorInfo; +import com.ruoyi.sip.service.IOmsWarehouseInfoService; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -46,6 +52,8 @@ public class VendorInfoController extends BaseController @Autowired private IVendorInfoService vendorInfoService; + @Autowired + private IOmsWarehouseInfoService warehouseInfoService; @RequiresPermissions("system:vendor:view") @GetMapping() @@ -106,8 +114,11 @@ public class VendorInfoController extends BaseController */ @RequiresPermissions("system:vendor:add") @GetMapping("/add") - public String add() + public String add(ModelMap mmap) { + OmsWarehouseInfo queryWarehouseParam = new OmsWarehouseInfo(); + queryWarehouseParam.setWarehouseStatus(OmsWarehouseInfo.WarehouseStatusEnum.NORMAL.getValue()); + mmap.put("warehouseList", warehouseInfoService.selectOmsWarehouseInfoList(queryWarehouseParam)); return prefix + "/add"; } @@ -132,6 +143,9 @@ public class VendorInfoController extends BaseController { VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorId(vendorId); mmap.put("vendorInfo", vendorInfo); + OmsWarehouseInfo queryWarehouseParam = new OmsWarehouseInfo(); + queryWarehouseParam.setWarehouseStatus(OmsWarehouseInfo.WarehouseStatusEnum.NORMAL.getValue()); + mmap.put("warehouseList", warehouseInfoService.selectOmsWarehouseInfoList(queryWarehouseParam)); mmap.put("update", true); return prefix + "/edit"; } @@ -144,6 +158,9 @@ public class VendorInfoController extends BaseController { VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorId(vendorId); mmap.put("vendorInfo", vendorInfo); + OmsWarehouseInfo queryWarehouseParam = new OmsWarehouseInfo(); + queryWarehouseParam.setWarehouseStatus(OmsWarehouseInfo.WarehouseStatusEnum.NORMAL.getValue()); + mmap.put("warehouseList", warehouseInfoService.selectOmsWarehouseInfoList(queryWarehouseParam)); mmap.put("update", false); return prefix + "/edit"; } @@ -160,6 +177,15 @@ public class VendorInfoController extends BaseController return toAjax(vendorInfoService.updateVendorInfo(vendorInfo)); } + @GetMapping("/current") + @ResponseBody + public AjaxResult current() { + List vendorInfo = vendorInfoService.current(); + if (CollUtil.isEmpty(vendorInfo)) { + return AjaxResult.success(); + } + return success(vendorInfo.get(0)); + } /** * 删除制造商信息 */ diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryInfo.java new file mode 100644 index 00000000..489c2094 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryInfo.java @@ -0,0 +1,77 @@ +package com.ruoyi.sip.domain; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.Getter; +import lombok.ToString; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 产品库存对象 oms_inventory_info + * + * @author ch + * @date 2025-08-07 + */ +@Data +@ToString +public class InventoryInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** */ + private Long id; + + /** 产品编码 */ + @Excel(name = "产品编码") + private String productCode; + private String model; + private String productDesc; + + /** 产品序列号 */ + @Excel(name = "产品序列号") + private String productSn; + + /** 库存状态(0 入库 1出库) */ + @Excel(name = "库存状态(0 入库 1出库)") + private String inventoryStatus; + + /** 入库单号 */ + @Excel(name = "入库单号") + private String innerCode; + + /** 出库单号 */ + @Excel(name = "出库单号") + private String outerCode; + + /** 所属仓库 */ + @Excel(name = "所属仓库") + private Long warehouseId; + private String warehouseName; + + /** 入库价 */ + @Excel(name = "入库价") + private BigDecimal innerPrice; + + /** 出库价 */ + @Excel(name = "出库价") + private BigDecimal outerPrice; + + @Getter + public enum InventoryStatusEnum { + INNER("0","入库"), + OUTER("1","出库"); + private final String code; + private final String desc; + + InventoryStatusEnum(String code,String desc) { + this.code = code; + this.desc = desc; + } + + + } +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsInventoryInner.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsInventoryInner.java new file mode 100644 index 00000000..6944168b --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsInventoryInner.java @@ -0,0 +1,63 @@ +package com.ruoyi.sip.domain; + +import lombok.Data; +import lombok.ToString; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; +import java.util.List; + +/** + * 入库单信息对象 oms_inventory_inner + * + * @author ruoyi + * @date 2025-08-06 + */ +@Data +@ToString +public class OmsInventoryInner extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * + */ + private Long id; + + /** + * 入库单号 + */ + @Excel(name = "入库单号") + private String innerCode; + + /** + * 产品编码 + */ + @Excel(name = "产品编码") + private String productCode; + + /** + * 数量 + */ + @Excel(name = "数量") + private Long quantity; + @Excel(name = "制造商") + private String vendorName; + private String vendorCode; + + /** + * 仓库 + */ + + private Long warehouseId; + @Excel(name = "入库仓") + private String warehouseName; + @Excel(name = "经办人") + private String createByName; + @Excel(name = "入库时间",dateFormat="yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private List inventoryInfoList; +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsWarehouseInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsWarehouseInfo.java new file mode 100644 index 00000000..2d24dee8 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsWarehouseInfo.java @@ -0,0 +1,82 @@ +package com.ruoyi.sip.domain; + +import lombok.Data; +import lombok.Getter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 仓库基础信息对象 oms_warehouse_info + * + * @author ruoyi + * @date 2025-08-05 + */ +@Data +public class OmsWarehouseInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** */ + private Long id; + + /** 仓库名称 */ + @Excel(name = "仓库名称") + private String warehouseName; + + /** 仓库编码 */ + @Excel(name = "仓库编码") + private String warehouseCode; + + /** 仓库类型 */ + @Excel(name = "仓库类型") + private String warehouseType; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String warehouseStatus; + + /** 仓库详细地址 */ + @Excel(name = "仓库详细地址") + private String address; + + /** 仓库管理员名称 */ + @Excel(name = "仓库管理员名称") + private String managerName; + + /** 仓库管理员电话 */ + @Excel(name = "仓库管理员电话") + private String managerPhone; + + /** 仓库管理员邮件 */ + @Excel(name = "仓库管理员邮件") + private String managerEmail; + + @Getter + public enum WarehouseStatusEnum { + NORMAL("0", "正常"), + DISABLE("1", "停用"); + private final String value; + private final String desc; + WarehouseStatusEnum(String value, String code) { + this.value = value; + this.desc = code; + } + + } + @Getter + public enum WarehouseTypeEnum { + PHYSICAL("0", "实体仓"), + VIRTUAL("1", "虚拟仓"), + ; + private final String value; + private final String code; + WarehouseTypeEnum(String value, String code) { + this.value = value; + this.code = code; + } + + } + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java index b1e9cb50..635a4222 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java @@ -5,6 +5,8 @@ import lombok.Getter; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import java.util.List; + /** * 制造商信息对象 varchar_info * @@ -26,6 +28,7 @@ public class VendorInfo extends BaseEntity /** 制造商名称 */ @Excel(name = "制造商名称") private String vendorName; + private List vendorNameList; /** 生产地址 */ @Excel(name = "生产地址") @@ -47,6 +50,8 @@ public class VendorInfo extends BaseEntity @Excel(name = "合作状态") private String vendorStatus; private String vendorStatusName; + private String warehouseName; + private String warehouseId; @Getter public enum VendorStatusEnum { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/inventory/GroupInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/inventory/GroupInfo.java new file mode 100644 index 00000000..4a25c018 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/inventory/GroupInfo.java @@ -0,0 +1,35 @@ +package com.ruoyi.sip.dto.inventory; + + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : GroupInfo + * @Description : + * @DATE : Created in 17:32 2025/8/7 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/08/07 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +public class GroupInfo { + @Excel(name = "产品编码") + private String productCode; + @Excel(name = "产品型号") + private String model; + @Excel(name = "产品名称") + private String productName; + @Excel(name = "实时库存") + private Long availableCount; + @Excel(name = "累计发货") + private Long reservedCount; + @Excel(name = "制造商") + private String vendorName; + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/warehouse/WarehouseInnerExcelDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/warehouse/WarehouseInnerExcelDto.java new file mode 100644 index 00000000..974f44d0 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/warehouse/WarehouseInnerExcelDto.java @@ -0,0 +1,37 @@ +package com.ruoyi.sip.dto.warehouse; + + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.ToString; + +import java.math.BigDecimal; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : WarehouseInnerExcelDto + * @Description : + * @DATE : Created in 9:34 2025/8/7 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/08/07 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +@ToString +public class WarehouseInnerExcelDto { + @Excel(name = "序号") + private String index; + @Excel(name = "SN码") + private String productSn; + @Excel(name="产品编码") + private String productCode; + @Excel(name="入库价(含税)") + private BigDecimal innerPrice; + @Excel(name="入库仓") + private String warehouseName; + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/InventoryInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/InventoryInfoMapper.java new file mode 100644 index 00000000..c5a17f44 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/InventoryInfoMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.dto.inventory.GroupInfo; + +/** + * 产品库存Mapper接口 + * + * @author ch + * @date 2025-08-07 + */ +public interface InventoryInfoMapper +{ + /** + * 查询产品库存 + * + * @param id 产品库存主键 + * @return 产品库存 + */ + public InventoryInfo selectInventoryInfoById(Long id); + + /** + * 查询产品库存列表 + * + * @param inventoryInfo 产品库存 + * @return 产品库存集合 + */ + public List selectInventoryInfoList(InventoryInfo inventoryInfo); + + /** + * 新增产品库存 + * + * @param inventoryInfo 产品库存 + * @return 结果 + */ + public int insertInventoryInfo(InventoryInfo inventoryInfo); + + /** + * 修改产品库存 + * + * @param inventoryInfo 产品库存 + * @return 结果 + */ + public int updateInventoryInfo(InventoryInfo inventoryInfo); + + /** + * 删除产品库存 + * + * @param id 产品库存主键 + * @return 结果 + */ + public int deleteInventoryInfoById(Long id); + + /** + * 批量删除产品库存 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteInventoryInfoByIds(String[] ids); + + void saveBatch(List inventoryInfoList); + + List listGroup(GroupInfo inventoryInfo); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsInventoryInnerMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsInventoryInnerMapper.java new file mode 100644 index 00000000..92f96832 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsInventoryInnerMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.OmsInventoryInner; + +/** + * 入库单信息Mapper接口 + * + * @author ruoyi + * @date 2025-08-06 + */ +public interface OmsInventoryInnerMapper +{ + /** + * 查询入库单信息 + * + * @param id 入库单信息主键 + * @return 入库单信息 + */ + public OmsInventoryInner selectOmsInventoryInnerById(Long id); + + /** + * 查询入库单信息列表 + * + * @param omsInventoryInner 入库单信息 + * @return 入库单信息集合 + */ + public List selectOmsInventoryInnerList(OmsInventoryInner omsInventoryInner); + + /** + * 新增入库单信息 + * + * @param omsInventoryInner 入库单信息 + * @return 结果 + */ + public int insertOmsInventoryInner(OmsInventoryInner omsInventoryInner); + + /** + * 修改入库单信息 + * + * @param omsInventoryInner 入库单信息 + * @return 结果 + */ + public int updateOmsInventoryInner(OmsInventoryInner omsInventoryInner); + + /** + * 删除入库单信息 + * + * @param id 入库单信息主键 + * @return 结果 + */ + public int deleteOmsInventoryInnerById(Long id); + + /** + * 批量删除入库单信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOmsInventoryInnerByIds(String[] ids); + + int selectMaxOrderCode(String code); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsWarehouseInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsWarehouseInfoMapper.java new file mode 100644 index 00000000..0008da32 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsWarehouseInfoMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.OmsWarehouseInfo; + +/** + * 仓库基础信息Mapper接口 + * + * @author ruoyi + * @date 2025-08-05 + */ +public interface OmsWarehouseInfoMapper +{ + /** + * 查询仓库基础信息 + * + * @param id 仓库基础信息主键 + * @return 仓库基础信息 + */ + public OmsWarehouseInfo selectOmsWarehouseInfoById(Long id); + + /** + * 查询仓库基础信息列表 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 仓库基础信息集合 + */ + public List selectOmsWarehouseInfoList(OmsWarehouseInfo omsWarehouseInfo); + + /** + * 新增仓库基础信息 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 结果 + */ + public int insertOmsWarehouseInfo(OmsWarehouseInfo omsWarehouseInfo); + + /** + * 修改仓库基础信息 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 结果 + */ + public int updateOmsWarehouseInfo(OmsWarehouseInfo omsWarehouseInfo); + + /** + * 删除仓库基础信息 + * + * @param id 仓库基础信息主键 + * @return 结果 + */ + public int deleteOmsWarehouseInfoById(Long id); + + /** + * 批量删除仓库基础信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOmsWarehouseInfoByIds(String[] ids); + + List listByNameList(List warehouseNameList); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IInventoryInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IInventoryInfoService.java new file mode 100644 index 00000000..50d5202d --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IInventoryInfoService.java @@ -0,0 +1,76 @@ +package com.ruoyi.sip.service; + +import java.util.List; +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.dto.inventory.GroupInfo; +import com.ruoyi.sip.dto.warehouse.WarehouseInnerExcelDto; + +/** + * 产品库存Service接口 + * + * @author ch + * @date 2025-08-07 + */ +public interface IInventoryInfoService +{ + /** + * 查询产品库存 + * + * @param id 产品库存主键 + * @return 产品库存 + */ + public InventoryInfo selectInventoryInfoById(Long id); + + /** + * 查询产品库存列表 + * + * @param inventoryInfo 产品库存 + * @return 产品库存集合 + */ + public List selectInventoryInfoList(InventoryInfo inventoryInfo); + + /** + * 新增产品库存 + * + * @param inventoryInfo 产品库存 + * @return 结果 + */ + public int insertInventoryInfo(InventoryInfo inventoryInfo); + + /** + * 修改产品库存 + * + * @param inventoryInfo 产品库存 + * @return 结果 + */ + public int updateInventoryInfo(InventoryInfo inventoryInfo); + + /** + * 批量删除产品库存 + * + * @param ids 需要删除的产品库存主键集合 + * @return 结果 + */ + public int deleteInventoryInfoByIds(String ids); + + /** + * 删除产品库存信息 + * + * @param id 产品库存主键 + * @return 结果 + */ + public int deleteInventoryInfoById(Long id); + + /** + * excel导入数据补充基础信息 + * @param excelList + * @return java.util.List + * @author ch + * @date 2025/08/07 09:57 + */ + List fillBaseInfo(List excelList); + + void saveBatch(List inventoryInfoList); + + List listGroup(GroupInfo inventoryInfo); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsInventoryInnerService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsInventoryInnerService.java new file mode 100644 index 00000000..f41660b0 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsInventoryInnerService.java @@ -0,0 +1,66 @@ +package com.ruoyi.sip.service; + +import java.util.List; + +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.domain.OmsInventoryInner; +import com.ruoyi.sip.dto.warehouse.WarehouseInnerExcelDto; + +/** + * 入库单信息Service接口 + * + * @author ruoyi + * @date 2025-08-06 + */ +public interface IOmsInventoryInnerService +{ + /** + * 查询入库单信息 + * + * @param id 入库单信息主键 + * @return 入库单信息 + */ + public OmsInventoryInner selectOmsInventoryInnerById(Long id); + + /** + * 查询入库单信息列表 + * + * @param omsInventoryInner 入库单信息 + * @return 入库单信息集合 + */ + public List selectOmsInventoryInnerList(OmsInventoryInner omsInventoryInner); + + /** + * 新增入库单信息 + * + * @param omsInventoryInner 入库单信息 + * @return 结果 + */ + public int insertOmsInventoryInner(OmsInventoryInner omsInventoryInner); + + /** + * 修改入库单信息 + * + * @param omsInventoryInner 入库单信息 + * @return 结果 + */ + public int updateOmsInventoryInner(OmsInventoryInner omsInventoryInner); + + /** + * 批量删除入库单信息 + * + * @param ids 需要删除的入库单信息主键集合 + * @return 结果 + */ + public int deleteOmsInventoryInnerByIds(String ids); + + /** + * 删除入库单信息信息 + * + * @param id 入库单信息主键 + * @return 结果 + */ + public int deleteOmsInventoryInnerById(Long id); + + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsWarehouseInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsWarehouseInfoService.java new file mode 100644 index 00000000..2d6bff52 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsWarehouseInfoService.java @@ -0,0 +1,68 @@ +package com.ruoyi.sip.service; + +import java.util.List; +import com.ruoyi.sip.domain.OmsWarehouseInfo; + +/** + * 仓库基础信息Service接口 + * + * @author ruoyi + * @date 2025-08-05 + */ +public interface IOmsWarehouseInfoService +{ + /** + * 查询仓库基础信息 + * + * @param id 仓库基础信息主键 + * @return 仓库基础信息 + */ + public OmsWarehouseInfo selectOmsWarehouseInfoById(Long id); + + /** + * 查询仓库基础信息列表 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 仓库基础信息集合 + */ + public List selectOmsWarehouseInfoList(OmsWarehouseInfo omsWarehouseInfo); + + /** + * 新增仓库基础信息 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 结果 + */ + public int insertOmsWarehouseInfo(OmsWarehouseInfo omsWarehouseInfo); + + /** + * 修改仓库基础信息 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 结果 + */ + public int updateOmsWarehouseInfo(OmsWarehouseInfo omsWarehouseInfo); + + /** + * 批量删除仓库基础信息 + * + * @param ids 需要删除的仓库基础信息主键集合 + * @return 结果 + */ + public int deleteOmsWarehouseInfoByIds(String ids); + + /** + * 删除仓库基础信息信息 + * + * @param id 仓库基础信息主键 + * @return 结果 + */ + public int deleteOmsWarehouseInfoById(Long id); + + /** + * 根据仓库名称列表查询仓库信息 + * @param warehouseNameList + * @return + */ + List listByNameList(List warehouseNameList); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IVendorInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IVendorInfoService.java index 1f5f25be..c0256823 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IVendorInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IVendorInfoService.java @@ -60,4 +60,7 @@ public interface IVendorInfoService * @return 结果 */ public int deleteVendorInfoByVendorId(Long vendorId); + + List current(); + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryInfoServiceImpl.java new file mode 100644 index 00000000..2f224146 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryInfoServiceImpl.java @@ -0,0 +1,158 @@ +package com.ruoyi.sip.service.impl; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.OmsWarehouseInfo; +import com.ruoyi.sip.domain.ProductInfo; +import com.ruoyi.sip.dto.inventory.GroupInfo; +import com.ruoyi.sip.dto.warehouse.WarehouseInnerExcelDto; +import com.ruoyi.sip.service.IOmsWarehouseInfoService; +import com.ruoyi.sip.service.IProductInfoService; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.sip.mapper.InventoryInfoMapper; +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.service.IInventoryInfoService; +import com.ruoyi.common.core.text.Convert; + +/** + * 产品库存Service业务层处理 + * + * @author ch + * @date 2025-08-07 + */ +@Service +public class InventoryInfoServiceImpl implements IInventoryInfoService { + @Autowired + private InventoryInfoMapper inventoryInfoMapper; + + @Autowired + private IProductInfoService productInfoService; + @Autowired + private IOmsWarehouseInfoService warehouseInfoService; + + /** + * 查询产品库存 + * + * @param id 产品库存主键 + * @return 产品库存 + */ + @Override + public InventoryInfo selectInventoryInfoById(Long id) { + return inventoryInfoMapper.selectInventoryInfoById(id); + } + + /** + * 查询产品库存列表 + * + * @param inventoryInfo 产品库存 + * @return 产品库存 + */ + @Override + public List selectInventoryInfoList(InventoryInfo inventoryInfo) { + return inventoryInfoMapper.selectInventoryInfoList(inventoryInfo); + } + + /** + * 新增产品库存 + * + * @param inventoryInfo 产品库存 + * @return 结果 + */ + @Override + public int insertInventoryInfo(InventoryInfo inventoryInfo) { + inventoryInfo.setCreateTime(DateUtils.getNowDate()); + return inventoryInfoMapper.insertInventoryInfo(inventoryInfo); + } + + /** + * 修改产品库存 + * + * @param inventoryInfo 产品库存 + * @return 结果 + */ + @Override + public int updateInventoryInfo(InventoryInfo inventoryInfo) { + inventoryInfo.setUpdateTime(DateUtils.getNowDate()); + return inventoryInfoMapper.updateInventoryInfo(inventoryInfo); + } + + /** + * 批量删除产品库存 + * + * @param ids 需要删除的产品库存主键 + * @return 结果 + */ + @Override + public int deleteInventoryInfoByIds(String ids) { + return inventoryInfoMapper.deleteInventoryInfoByIds(Convert.toStrArray(ids)); + } + + /** + * 删除产品库存信息 + * + * @param id 产品库存主键 + * @return 结果 + */ + @Override + public int deleteInventoryInfoById(Long id) { + return inventoryInfoMapper.deleteInventoryInfoById(id); + } + + @Override + public List fillBaseInfo(List excelList) { + if (CollUtil.isEmpty(excelList)) { + return Collections.emptyList(); + } + + List productCodeList = excelList.stream().map(WarehouseInnerExcelDto::getProductCode) + .filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList()); + List productInfos = productInfoService.selectProductInfoByCodeList(productCodeList); + Map productInfoMap = productInfos.stream() + .collect(Collectors.toMap(ProductInfo::getProductCode, Function.identity(), (v1, v2) -> v1)); + List warehouseNameList = excelList.stream().map(WarehouseInnerExcelDto::getWarehouseName) + .filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList()); + List omsWarehouseInfos = warehouseInfoService.listByNameList(warehouseNameList); + Map warehouseInfoMap = omsWarehouseInfos.stream() + .collect(Collectors.toMap(OmsWarehouseInfo::getWarehouseName, Function.identity(), (v1, v2) -> v1)); + + return excelList.stream().map(excel -> { + InventoryInfo inventoryInfo = new InventoryInfo(); + inventoryInfo.setInventoryStatus(InventoryInfo.InventoryStatusEnum.INNER.getCode()); + inventoryInfo.setProductCode(excel.getProductCode()); + inventoryInfo.setProductSn(excel.getProductSn()); + inventoryInfo.setInnerPrice(excel.getInnerPrice()); + if (warehouseInfoMap.containsKey(excel.getWarehouseName())){ + OmsWarehouseInfo omsWarehouseInfo = warehouseInfoMap.get(excel.getWarehouseName()); + inventoryInfo.setWarehouseId(omsWarehouseInfo.getId()); + inventoryInfo.setWarehouseName(omsWarehouseInfo.getWarehouseName()); + } + + if (productInfoMap.containsKey(excel.getProductCode())){ + ProductInfo productInfo = productInfoMap.get(excel.getProductCode()); + inventoryInfo.setModel(productInfo.getModel()); + inventoryInfo.setProductDesc(productInfo.getDescription()); + inventoryInfo.setProductCode(productInfo.getProductCode()); + } + return inventoryInfo; + }).collect(Collectors.toList()); + } + + @Override + public void saveBatch(List inventoryInfoList) { + inventoryInfoMapper.saveBatch(inventoryInfoList); + } + + @Override + public List listGroup(GroupInfo inventoryInfo) { + return inventoryInfoMapper.listGroup(inventoryInfo); + } +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsInventoryInnerServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsInventoryInnerServiceImpl.java new file mode 100644 index 00000000..d453f9ce --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsInventoryInnerServiceImpl.java @@ -0,0 +1,155 @@ +package com.ruoyi.sip.service.impl; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.domain.VendorInfo; +import com.ruoyi.sip.dto.warehouse.WarehouseInnerExcelDto; +import com.ruoyi.sip.mapper.InventoryInfoMapper; +import com.ruoyi.sip.service.IInventoryInfoService; +import com.ruoyi.sip.service.IVendorInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.sip.mapper.OmsInventoryInnerMapper; +import com.ruoyi.sip.domain.OmsInventoryInner; +import com.ruoyi.sip.service.IOmsInventoryInnerService; +import com.ruoyi.common.core.text.Convert; + +/** + * 入库单信息Service业务层处理 + * + * @author ruoyi + * @date 2025-08-06 + */ +@Service +public class OmsInventoryInnerServiceImpl implements IOmsInventoryInnerService { + @Autowired + private OmsInventoryInnerMapper omsInventoryInnerMapper; + + @Autowired + private IInventoryInfoService inventoryInfoService; + @Autowired + private IVendorInfoService vendorInfoService; + + /** + * 查询入库单信息 + * + * @param id 入库单信息主键 + * @return 入库单信息 + */ + @Override + public OmsInventoryInner selectOmsInventoryInnerById(Long id) { + return omsInventoryInnerMapper.selectOmsInventoryInnerById(id); + } + + /** + * 查询入库单信息列表 + * + * @param omsInventoryInner 入库单信息 + * @return 入库单信息 + */ + @Override + public List selectOmsInventoryInnerList(OmsInventoryInner omsInventoryInner) { + if (!ShiroUtils.getSysUser().isAdmin()){ + List current = vendorInfoService.current(); + if (CollUtil.isEmpty(current)){ + return Collections.emptyList(); + } + omsInventoryInner.setVendorCode(current.get(0).getVendorCode()); + } + return omsInventoryInnerMapper.selectOmsInventoryInnerList(omsInventoryInner); + } + + /** + * 新增入库单信息 + * + * @param omsInventoryInner 入库单信息 + * @return 结果 + */ + @Override + public int insertOmsInventoryInner(OmsInventoryInner omsInventoryInner) { + //生成出库单 + omsInventoryInner.setInnerCode(generateInnerCode()); + Date nowDate = DateUtils.getNowDate(); + omsInventoryInner.setCreateTime(nowDate); + String currentUserId = ShiroUtils.getUserId().toString(); + omsInventoryInner.setCreateBy(currentUserId); + List inventoryInfoList = omsInventoryInner.getInventoryInfoList(); + if (CollUtil.isEmpty(inventoryInfoList)) { + return 0; + } + omsInventoryInner.setQuantity((long) inventoryInfoList.size()); + List productCodeList = inventoryInfoList.stream().map(InventoryInfo::getProductCode).distinct().filter(StringUtils::isNotEmpty).collect(Collectors.toList()); + if (productCodeList.size() != 1) { + throw new ServiceException("添加产品信息中产品编码不允许多个"); + } + omsInventoryInner.setProductCode(productCodeList.get(0)); + List warehouseIdList = inventoryInfoList.stream().map(InventoryInfo::getWarehouseId).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + if (warehouseIdList.size() != 1) { + throw new ServiceException("添加产品信息中仓库不允许多个"); + } + omsInventoryInner.setWarehouseId(warehouseIdList.get(0)); + inventoryInfoList.forEach(item->{ + item.setInnerCode(omsInventoryInner.getInnerCode()); + item.setCreateBy(currentUserId); + item.setCreateTime(nowDate); + }); + inventoryInfoService.saveBatch(inventoryInfoList); + return omsInventoryInnerMapper.insertOmsInventoryInner(omsInventoryInner); + } + + private String generateInnerCode() { + StringBuilder code = new StringBuilder(); + code.append("R-"); + code.append(DateUtils.dateTime()); + int count = omsInventoryInnerMapper.selectMaxOrderCode(code.toString()); + code.append(String.format("%03d", count + 1)); + return code.toString(); + } + + /** + * 修改入库单信息 + * + * @param omsInventoryInner 入库单信息 + * @return 结果 + */ + @Override + public int updateOmsInventoryInner(OmsInventoryInner omsInventoryInner) { + omsInventoryInner.setUpdateTime(DateUtils.getNowDate()); + return omsInventoryInnerMapper.updateOmsInventoryInner(omsInventoryInner); + } + + /** + * 批量删除入库单信息 + * + * @param ids 需要删除的入库单信息主键 + * @return 结果 + */ + @Override + public int deleteOmsInventoryInnerByIds(String ids) { + return omsInventoryInnerMapper.deleteOmsInventoryInnerByIds(Convert.toStrArray(ids)); + } + + /** + * 删除入库单信息信息 + * + * @param id 入库单信息主键 + * @return 结果 + */ + @Override + public int deleteOmsInventoryInnerById(Long id) { + return omsInventoryInnerMapper.deleteOmsInventoryInnerById(id); + } + + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsWarehouseInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsWarehouseInfoServiceImpl.java new file mode 100644 index 00000000..eee45a59 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsWarehouseInfoServiceImpl.java @@ -0,0 +1,126 @@ +package com.ruoyi.sip.service.impl; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.sip.mapper.OmsWarehouseInfoMapper; +import com.ruoyi.sip.domain.OmsWarehouseInfo; +import com.ruoyi.sip.service.IOmsWarehouseInfoService; +import com.ruoyi.common.core.text.Convert; + +/** + * 仓库基础信息Service业务层处理 + * + * @author ruoyi + * @date 2025-08-05 + */ +@Service +public class OmsWarehouseInfoServiceImpl implements IOmsWarehouseInfoService { + @Autowired + private OmsWarehouseInfoMapper omsWarehouseInfoMapper; + + /** + * 查询仓库基础信息 + * + * @param id 仓库基础信息主键 + * @return 仓库基础信息 + */ + @Override + public OmsWarehouseInfo selectOmsWarehouseInfoById(Long id) { + return omsWarehouseInfoMapper.selectOmsWarehouseInfoById(id); + } + + /** + * 查询仓库基础信息列表 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 仓库基础信息 + */ + @Override + public List selectOmsWarehouseInfoList(OmsWarehouseInfo omsWarehouseInfo) { + return omsWarehouseInfoMapper.selectOmsWarehouseInfoList(omsWarehouseInfo); + } + + /** + * 新增仓库基础信息 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 结果 + */ + @Override + public int insertOmsWarehouseInfo(OmsWarehouseInfo omsWarehouseInfo) { + checkUnqCode(omsWarehouseInfo); + omsWarehouseInfo.setCreateTime(DateUtils.getNowDate()); + omsWarehouseInfo.setCreateBy(ShiroUtils.getUserId().toString()); + return omsWarehouseInfoMapper.insertOmsWarehouseInfo(omsWarehouseInfo); + } + + private void checkUnqCode(OmsWarehouseInfo omsWarehouseInfo) { + OmsWarehouseInfo queryDto = new OmsWarehouseInfo(); + queryDto.setWarehouseCode(omsWarehouseInfo.getWarehouseCode()); + List omsWarehouseInfos = omsWarehouseInfoMapper.selectOmsWarehouseInfoList(queryDto); + //code查询记录为空直接保存 + if (CollUtil.isEmpty(omsWarehouseInfos)) { + return; + } + //是否新增 + if (omsWarehouseInfo.getId() == null) { + throw new RuntimeException("仓库编码重复,保存失败"); + } + //编辑需剔除当前数据 + long count = omsWarehouseInfos.stream().filter(item -> !item.getId().equals(omsWarehouseInfo.getId())).count(); + if (count > 0) { + throw new RuntimeException("仓库编码重复,保存失败"); + } + } + + /** + * 修改仓库基础信息 + * + * @param omsWarehouseInfo 仓库基础信息 + * @return 结果 + */ + @Override + public int updateOmsWarehouseInfo(OmsWarehouseInfo omsWarehouseInfo) { + checkUnqCode(omsWarehouseInfo); + omsWarehouseInfo.setUpdateTime(DateUtils.getNowDate()); + omsWarehouseInfo.setUpdateBy(ShiroUtils.getUserId().toString()); + return omsWarehouseInfoMapper.updateOmsWarehouseInfo(omsWarehouseInfo); + } + + /** + * 批量删除仓库基础信息 + * + * @param ids 需要删除的仓库基础信息主键 + * @return 结果 + */ + @Override + public int deleteOmsWarehouseInfoByIds(String ids) { + return omsWarehouseInfoMapper.deleteOmsWarehouseInfoByIds(Convert.toStrArray(ids)); + } + + /** + * 删除仓库基础信息信息 + * + * @param id 仓库基础信息主键 + * @return 结果 + */ + @Override + public int deleteOmsWarehouseInfoById(Long id) { + return omsWarehouseInfoMapper.deleteOmsWarehouseInfoById(id); + } + + @Override + public List listByNameList(List warehouseNameList) { + if (CollUtil.isEmpty(warehouseNameList)){ + return Collections.emptyList(); + } + return omsWarehouseInfoMapper.listByNameList(warehouseNameList); + } +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/VendorInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/VendorInfoServiceImpl.java index 1d26e1d0..9224495e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/VendorInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/VendorInfoServiceImpl.java @@ -1,8 +1,12 @@ package com.ruoyi.sip.service.impl; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; @@ -110,4 +114,15 @@ public class VendorInfoServiceImpl implements IVendorInfoService { public int deleteVendorInfoByVendorId(Long vendorId) { return vendorInfoMapper.deleteVendorInfoByVendorId(vendorId); } + + @Override + public List current() { + SysUser user = ShiroUtils.getSysUser(); + if (user == null) { + throw new ServiceException("用户不存在"); + } + VendorInfo queryParam = new VendorInfo(); + queryParam.setVendorNameList(user.getRoles().stream().map(SysRole::getRoleName).collect(Collectors.toList())); + return vendorInfoMapper.selectVendorInfoList(queryParam); + } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java index 9f675367..d358c934 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java @@ -41,8 +41,8 @@ public class TemplateMailUtil { * @Date 2025/07/29 09:55 */ public static void sendTemplateMail(List toEmail, String title, MailTemplate path, Dict dict) { - String enbaled = SpringUtils.getProperty("unis.mail.enabled", "false"); - if (Boolean.getBoolean(enbaled)) { + String enabled = SpringUtils.getProperty("unis.mail.enabled", "false"); + if (Boolean.getBoolean(enabled)) { log.warn("邮件发送开关未开启"); return; } @@ -72,7 +72,7 @@ public class TemplateMailUtil { /** * 发货单 */ - ORDER_DELIVERY("mailOrderDeliveryTemplate.html","发货单"), + ORDER_DELIVERY("mailOrderDeliveryTemplate.html","供应商通知发货单"), ; diff --git a/ruoyi-sip/src/main/resources/mapper/inventory/InventoryInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/inventory/InventoryInfoMapper.xml new file mode 100644 index 00000000..6ae6ce49 --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/inventory/InventoryInfoMapper.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + select t1.id, t1.product_code, t1.product_sn, t1.inventory_status, t1.inner_code, t1.outer_code, t1.warehouse_id, t1.inner_price, + t1.outer_price, t1.create_by, t1.create_time, t1.update_by, t1.update_time , + t2.warehouse_name,t3.description as 'product_desc',t3.model + from oms_inventory_info t1 + left join oms_warehouse_info t2 on t1.warehouse_id = t2.id + left join product_info t3 on t1.product_code = t3.product_code + + + + + + + + + insert into oms_inventory_info + + product_code, + product_sn, + inventory_status, + inner_code, + outer_code, + warehouse_id, + inner_price, + outer_price, + create_by, + create_time, + update_by, + update_time, + + + #{productCode}, + #{productSn}, + #{inventoryStatus}, + #{innerCode}, + #{outerCode}, + #{warehouseId}, + #{innerPrice}, + #{outerPrice}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + insert into oms_inventory_info (product_code, product_sn, inventory_status, inner_code, outer_code, warehouse_id, inner_price, outer_price, create_by, create_time, update_by, update_time) values + + (#{item.productCode}, #{item.productSn}, #{item.inventoryStatus}, #{item.innerCode}, #{item.outerCode}, #{item.warehouseId}, #{item.innerPrice}, #{item.outerPrice}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}) + + ON DUPLICATE KEY UPDATE + inventory_status = VALUES(inventory_status), + outer_code = VALUES(outer_code), + outer_price = VALUES(outer_price), + update_by = VALUES(create_by), + update_time = now() + + + + update oms_inventory_info + + product_code = #{productCode}, + product_sn = #{productSn}, + inventory_status = #{inventoryStatus}, + inner_code = #{innerCode}, + outer_code = #{outerCode}, + warehouse_id = #{warehouseId}, + inner_price = #{innerPrice}, + outer_price = #{outerPrice}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from oms_inventory_info where id = #{id} + + + + delete from oms_inventory_info where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/inventory/OmsInventoryInnerMapper.xml b/ruoyi-sip/src/main/resources/mapper/inventory/OmsInventoryInnerMapper.xml new file mode 100644 index 00000000..d7ee3187 --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/inventory/OmsInventoryInnerMapper.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + select t1.id, t1.inner_code, t1.product_code, t1.quantity, t1.warehouse_id, t1.create_by, t1.update_by, t1.create_time, t1.update_time ,t1.vendor_code, + t2.warehouse_name, t3.user_name as create_by_name, + t4.vendor_name + from oms_inventory_inner t1 + left join oms_warehouse_info t2 on t1.warehouse_id = t2.id + left join oms_vendor_info t4 on t1.vendor_code = t4.vendor_code + left join sys_user t3 on t1.create_by = t3.user_id + + + + + + + + + insert into oms_inventory_inner + + inner_code, + product_code, + quantity, + warehouse_id, + vendor_code, + create_by, + update_by, + create_time, + update_time, + + + #{innerCode}, + #{productCode}, + #{quantity}, + #{warehouseId}, + #{vendorCode}, + #{createBy}, + #{updateBy}, + #{createTime}, + #{updateTime}, + + + + + update oms_inventory_inner + + inner_code = #{innerCode}, + product_code = #{productCode}, + vendor_code=#{vendorCode}, + quantity = #{quantity}, + warehouse_id = #{warehouseId}, + create_by = #{createBy}, + update_by = #{updateBy}, + create_time = #{createTime}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from oms_inventory_inner where id = #{id} + + + + delete from oms_inventory_inner where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml index ff894f0e..bb8b6ac0 100644 --- a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml @@ -23,7 +23,7 @@ select t1.id, t1.product_code, t1.product_name, t1.model, t1.description, t1.remark, t1.created_at, t1.updated_at, t1.deleted_at,t1.value,t1.type,t1.hz_code,t1.catalogue_price,t1.guidance_discount,t1.vendor_code ,t2.vendor_name - from product_info t1 left join vendor_info t2 on t1.vendor_code = t2.vendor_code + from product_info t1 left join oms_vendor_info t2 on t1.vendor_code = t2.vendor_code - and vendor_code like concat('%', #{vendorCode}, '%') - and vendor_name like concat('%', #{vendorName}, '%') - and vendor_address like concat('%', #{vendorAddress}, '%') - and vendor_user = #{vendorUser} - and vendor_status = #{vendorStatus} + and t1.vendor_code like concat('%', #{vendorCode}, '%') + and t1.vendor_name like concat('%', #{vendorName}, '%') + and t1.vendor_address like concat('%', #{vendorAddress}, '%') + and t1.vendor_user = #{vendorUser} + and t1.vendor_status = #{vendorStatus} + and t1.vendor_name in + + #{item} + + - insert into vendor_info + insert into oms_vendor_info vendor_id, vendor_code, @@ -49,6 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" vendor_user, vendor_email, vendor_phone, + warehouse_id, vendor_status, create_by, update_by, @@ -63,6 +73,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{vendorUser}, #{vendorEmail}, #{vendorPhone}, + #{warehouseId}, #{vendorStatus}, #{createBy}, #{updateBy}, @@ -72,7 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - update vendor_info + update oms_vendor_info vendor_code = #{vendorCode}, vendor_name = #{vendorName}, @@ -81,6 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" vendor_email = #{vendorEmail}, vendor_phone = #{vendorPhone}, vendor_status = #{vendorStatus}, + warehouse_id = #{warehouseId}, create_by = #{createBy}, update_by = #{updateBy}, create_time = #{createTime}, @@ -90,11 +102,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from vendor_info where vendor_id = #{vendorId} + delete from oms_vendor_info where vendor_id = #{vendorId} - delete from vendor_info where vendor_id in + delete from oms_vendor_info where vendor_id in #{vendorId} diff --git a/ruoyi-sip/src/main/resources/mapper/warehouse/OmsWarehouseInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/warehouse/OmsWarehouseInfoMapper.xml new file mode 100644 index 00000000..438ab0dc --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/warehouse/OmsWarehouseInfoMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, warehouse_name, warehouse_code, warehouse_type, warehouse_status, address, manager_name, manager_phone, manager_email, remark, create_by, create_time, update_by, update_time from oms_warehouse_info + + + + + + + + + insert into oms_warehouse_info + + id, + warehouse_name, + warehouse_code, + warehouse_type, + warehouse_status, + address, + manager_name, + manager_phone, + manager_email, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{id}, + #{warehouseName}, + #{warehouseCode}, + #{warehouseType}, + #{warehouseStatus}, + #{address}, + #{managerName}, + #{managerPhone}, + #{managerEmail}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update oms_warehouse_info + + warehouse_name = #{warehouseName}, + warehouse_code = #{warehouseCode}, + warehouse_type = #{warehouseType}, + warehouse_status = #{warehouseStatus}, + address = #{address}, + manager_name = #{managerName}, + manager_phone = #{managerPhone}, + manager_email = #{managerEmail}, + remark = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from oms_warehouse_info where id = #{id} + + + + delete from oms_warehouse_info where id in + + #{id} + + + + \ No newline at end of file