feat(asset): 添加仓库管理功能模块

- 创建仓库管理实体类 AmsWarehouse,包含仓库编码、名称、管理部门等字段
- 实现仓库管理的增删改查功能,包括新增、编辑、查看和删除页面
- 添加仓库编码唯一性校验,防止重复创建仓库
- 实现仓库与部门关联功能,支持选择管理部门
- 添加仓库引用检查机制,防止删除被引用的仓库
- 集成系统部门服务,确保管理部门的有效性验证
- 完善仓库管理的权限控制和数据导出功能
main
yangk 3 weeks ago
parent 6509cc3f45
commit 7de57b4994

@ -23,6 +23,28 @@
<artifactId>ruoyi-framework</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- JUnit 5 需要新版 Surefire否则 Maven 默认 2.12.4 会出现 Tests run: 0。 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.4</version>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,169 @@
package com.ruoyi.asset.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.constant.UserConstants;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.asset.domain.AmsWarehouse;
import com.ruoyi.asset.service.IAmsWarehouseService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.service.ISysDeptService;
/**
* Controller
*
* @author Yangk
* @date 2026-06-03
*/
@Controller
@RequestMapping("/asset/warehouse")
public class AmsWarehouseController extends BaseController
{
private String prefix = "asset/warehouse";
@Autowired
private IAmsWarehouseService amsWarehouseService;
@Autowired
private ISysDeptService sysDeptService;
@RequiresPermissions("asset:warehouse:view")
@GetMapping()
public String warehouse(ModelMap mmap)
{
mmap.put("deptList", selectNormalDeptList());
return prefix + "/warehouse";
}
/**
*
*/
@RequiresPermissions("asset:warehouse:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(AmsWarehouse amsWarehouse)
{
startPage();
List<AmsWarehouse> list = amsWarehouseService.selectAmsWarehouseList(amsWarehouse);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("asset:warehouse:export")
@Log(title = "仓库管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(AmsWarehouse amsWarehouse)
{
List<AmsWarehouse> list = amsWarehouseService.selectAmsWarehouseList(amsWarehouse);
ExcelUtil<AmsWarehouse> util = new ExcelUtil<AmsWarehouse>(AmsWarehouse.class);
return util.exportExcel(list, "仓库管理数据");
}
/**
*
*/
@RequiresPermissions("asset:warehouse:view")
@GetMapping("/view/{warehouseId}")
public String view(@PathVariable("warehouseId") Long warehouseId, ModelMap mmap)
{
AmsWarehouse amsWarehouse = amsWarehouseService.selectAmsWarehouseByWarehouseId(warehouseId);
mmap.put("amsWarehouse", amsWarehouse);
return prefix + "/view";
}
/**
*
*/
@RequiresPermissions("asset:warehouse:add")
@GetMapping("/add")
public String add(ModelMap mmap)
{
mmap.put("deptList", selectNormalDeptList());
return prefix + "/add";
}
/**
*
*/
@RequiresPermissions("asset:warehouse:add")
@Log(title = "仓库管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(AmsWarehouse amsWarehouse)
{
if (!amsWarehouseService.checkWarehouseCodeUnique(amsWarehouse))
{
return error("新增仓库'" + amsWarehouse.getWarehouseName() + "'失败,仓库编码已存在");
}
amsWarehouse.setCreateBy(getLoginName());
return toAjax(amsWarehouseService.insertAmsWarehouse(amsWarehouse));
}
/**
*
*/
@RequiresPermissions("asset:warehouse:edit")
@GetMapping("/edit/{warehouseId}")
public String edit(@PathVariable("warehouseId") Long warehouseId, ModelMap mmap)
{
AmsWarehouse amsWarehouse = amsWarehouseService.selectAmsWarehouseByWarehouseId(warehouseId);
mmap.put("amsWarehouse", amsWarehouse);
mmap.put("deptList", selectNormalDeptList());
return prefix + "/edit";
}
/**
*
*/
@RequiresPermissions("asset:warehouse:edit")
@Log(title = "仓库管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(AmsWarehouse amsWarehouse)
{
if (!amsWarehouseService.checkWarehouseCodeUnique(amsWarehouse))
{
return error("修改仓库'" + amsWarehouse.getWarehouseName() + "'失败,仓库编码已存在");
}
amsWarehouse.setUpdateBy(getLoginName());
return toAjax(amsWarehouseService.updateAmsWarehouse(amsWarehouse));
}
/**
*
*/
@RequiresPermissions("asset:warehouse:remove")
@Log(title = "仓库管理", businessType = BusinessType.DELETE)
@PostMapping( "/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(amsWarehouseService.deleteAmsWarehouseByWarehouseIds(ids));
}
/**
*
*/
private List<SysDept> selectNormalDeptList()
{
SysDept dept = new SysDept();
dept.setStatus(UserConstants.DEPT_NORMAL);
return sysDeptService.selectDeptList(dept);
}
}

@ -0,0 +1,175 @@
package com.ruoyi.asset.domain;
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;
/**
* ams_warehouse
*
* @author Yangk
* @date 2026-06-03
*/
public class AmsWarehouse extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 仓库ID */
private Long warehouseId;
/** 仓库编码 */
@Excel(name = "仓库编码")
private String warehouseCode;
/** 仓库名称 */
@Excel(name = "仓库名称")
private String warehouseName;
/** 管理部门ID表示仓库责任部门 */
private Long manageDeptId;
/** 管理部门 */
@Excel(name = "管理部门")
private String manageDeptName;
/** 仓库地址 */
@Excel(name = "仓库地址")
private String warehouseAddress;
/** 负责人 */
@Excel(name = "负责人")
private String managerName;
/** 联系电话 */
@Excel(name = "联系电话")
private String contactPhone;
/** 启用状态 */
@Excel(name = "启用状态")
private String enabled;
/** 逻辑删除标识 */
private String delFlag;
public void setWarehouseId(Long warehouseId)
{
this.warehouseId = warehouseId;
}
public Long getWarehouseId()
{
return warehouseId;
}
public void setWarehouseCode(String warehouseCode)
{
this.warehouseCode = warehouseCode;
}
public String getWarehouseCode()
{
return warehouseCode;
}
public void setWarehouseName(String warehouseName)
{
this.warehouseName = warehouseName;
}
public String getWarehouseName()
{
return warehouseName;
}
public void setManageDeptId(Long manageDeptId)
{
this.manageDeptId = manageDeptId;
}
public Long getManageDeptId()
{
return manageDeptId;
}
public void setManageDeptName(String manageDeptName)
{
this.manageDeptName = manageDeptName;
}
public String getManageDeptName()
{
return manageDeptName;
}
public void setWarehouseAddress(String warehouseAddress)
{
this.warehouseAddress = warehouseAddress;
}
public String getWarehouseAddress()
{
return warehouseAddress;
}
public void setManagerName(String managerName)
{
this.managerName = managerName;
}
public String getManagerName()
{
return managerName;
}
public void setContactPhone(String contactPhone)
{
this.contactPhone = contactPhone;
}
public String getContactPhone()
{
return contactPhone;
}
public void setEnabled(String enabled)
{
this.enabled = enabled;
}
public String getEnabled()
{
return enabled;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getDelFlag()
{
return delFlag;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("warehouseId", getWarehouseId())
.append("warehouseCode", getWarehouseCode())
.append("warehouseName", getWarehouseName())
.append("manageDeptId", getManageDeptId())
.append("manageDeptName", getManageDeptName())
.append("warehouseAddress", getWarehouseAddress())
.append("managerName", getManagerName())
.append("contactPhone", getContactPhone())
.append("enabled", getEnabled())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("delFlag", getDelFlag())
.toString();
}
}

@ -0,0 +1,77 @@
package com.ruoyi.asset.mapper;
import java.util.List;
import com.ruoyi.asset.domain.AmsWarehouse;
/**
* Mapper
*
* @author Yangk
* @date 2026-06-03
*/
public interface AmsWarehouseMapper
{
/**
*
*
* @param warehouseId
* @return
*/
public AmsWarehouse selectAmsWarehouseByWarehouseId(Long warehouseId);
/**
*
*
* @param amsWarehouse
* @return
*/
public List<AmsWarehouse> selectAmsWarehouseList(AmsWarehouse amsWarehouse);
/**
*
*
* @param warehouseCode
* @return
*/
public AmsWarehouse checkWarehouseCodeUnique(String warehouseCode);
/**
*
*
* @param warehouseId
* @return
*/
public int countWarehouseReferences(Long warehouseId);
/**
*
*
* @param amsWarehouse
* @return
*/
public int insertAmsWarehouse(AmsWarehouse amsWarehouse);
/**
*
*
* @param amsWarehouse
* @return
*/
public int updateAmsWarehouse(AmsWarehouse amsWarehouse);
/**
*
*
* @param warehouseId
* @return
*/
public int deleteAmsWarehouseByWarehouseId(Long warehouseId);
/**
*
*
* @param warehouseIds
* @return
*/
public int deleteAmsWarehouseByWarehouseIds(String[] warehouseIds);
}

@ -0,0 +1,69 @@
package com.ruoyi.asset.service;
import java.util.List;
import com.ruoyi.asset.domain.AmsWarehouse;
/**
* Service
*
* @author Yangk
* @date 2026-06-03
*/
public interface IAmsWarehouseService
{
/**
*
*
* @param warehouseId
* @return
*/
public AmsWarehouse selectAmsWarehouseByWarehouseId(Long warehouseId);
/**
*
*
* @param amsWarehouse
* @return
*/
public List<AmsWarehouse> selectAmsWarehouseList(AmsWarehouse amsWarehouse);
/**
*
*
* @param amsWarehouse
* @return
*/
public boolean checkWarehouseCodeUnique(AmsWarehouse amsWarehouse);
/**
*
*
* @param amsWarehouse
* @return
*/
public int insertAmsWarehouse(AmsWarehouse amsWarehouse);
/**
*
*
* @param amsWarehouse
* @return
*/
public int updateAmsWarehouse(AmsWarehouse amsWarehouse);
/**
*
*
* @param warehouseIds
* @return
*/
public int deleteAmsWarehouseByWarehouseIds(String warehouseIds);
/**
*
*
* @param warehouseId
* @return
*/
public int deleteAmsWarehouseByWarehouseId(Long warehouseId);
}

@ -0,0 +1,178 @@
package com.ruoyi.asset.service.impl;
import java.util.List;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.asset.mapper.AmsWarehouseMapper;
import com.ruoyi.asset.domain.AmsWarehouse;
import com.ruoyi.asset.service.IAmsWarehouseService;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.system.service.ISysDeptService;
/**
* Service
*
* @author Yangk
* @date 2026-06-03
*/
@Service
public class AmsWarehouseServiceImpl implements IAmsWarehouseService
{
private static final String ENABLED_YES = "Y";
private static final String DEL_FLAG_NORMAL = "0";
@Autowired
private AmsWarehouseMapper amsWarehouseMapper;
@Autowired
private ISysDeptService sysDeptService;
/**
*
*
* @param warehouseId
* @return
*/
@Override
public AmsWarehouse selectAmsWarehouseByWarehouseId(Long warehouseId)
{
return amsWarehouseMapper.selectAmsWarehouseByWarehouseId(warehouseId);
}
/**
*
*
* @param amsWarehouse
* @return
*/
@Override
public List<AmsWarehouse> selectAmsWarehouseList(AmsWarehouse amsWarehouse)
{
return amsWarehouseMapper.selectAmsWarehouseList(amsWarehouse);
}
/**
*
*
* @param amsWarehouse
* @return
*/
@Override
public boolean checkWarehouseCodeUnique(AmsWarehouse amsWarehouse)
{
if (StringUtils.isEmpty(amsWarehouse.getWarehouseCode()))
{
return UserConstants.UNIQUE;
}
Long warehouseId = StringUtils.isNull(amsWarehouse.getWarehouseId()) ? -1L : amsWarehouse.getWarehouseId();
AmsWarehouse info = amsWarehouseMapper.checkWarehouseCodeUnique(amsWarehouse.getWarehouseCode());
if (StringUtils.isNotNull(info) && info.getWarehouseId().longValue() != warehouseId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
*
*
* @param amsWarehouse
* @return
*/
@Override
public int insertAmsWarehouse(AmsWarehouse amsWarehouse)
{
if (StringUtils.isEmpty(amsWarehouse.getEnabled()))
{
amsWarehouse.setEnabled(ENABLED_YES);
}
fillManageDeptName(amsWarehouse);
amsWarehouse.setDelFlag(DEL_FLAG_NORMAL);
amsWarehouse.setCreateTime(DateUtils.getNowDate());
return amsWarehouseMapper.insertAmsWarehouse(amsWarehouse);
}
/**
*
*
* @param amsWarehouse
* @return
*/
@Override
public int updateAmsWarehouse(AmsWarehouse amsWarehouse)
{
fillManageDeptName(amsWarehouse);
amsWarehouse.setUpdateTime(DateUtils.getNowDate());
return amsWarehouseMapper.updateAmsWarehouse(amsWarehouse);
}
/**
*
*
* @param warehouseIds
* @return
*/
@Override
public int deleteAmsWarehouseByWarehouseIds(String warehouseIds)
{
String[] ids = Convert.toStrArray(warehouseIds);
for (String id : ids)
{
checkWarehouseReferenced(Long.valueOf(id));
}
return amsWarehouseMapper.deleteAmsWarehouseByWarehouseIds(ids);
}
/**
*
*
* @param warehouseId
* @return
*/
@Override
public int deleteAmsWarehouseByWarehouseId(Long warehouseId)
{
checkWarehouseReferenced(warehouseId);
return amsWarehouseMapper.deleteAmsWarehouseByWarehouseId(warehouseId);
}
/**
*
*/
private void checkWarehouseReferenced(Long warehouseId)
{
AmsWarehouse warehouse = selectAmsWarehouseByWarehouseId(warehouseId);
if (StringUtils.isNotNull(warehouse) && amsWarehouseMapper.countWarehouseReferences(warehouseId) > 0)
{
throw new ServiceException(String.format("仓库【%1$s】已被引用不允许删除", warehouse.getWarehouseName()));
}
}
/**
* ID
*/
private void fillManageDeptName(AmsWarehouse amsWarehouse)
{
if (StringUtils.isNull(amsWarehouse.getManageDeptId()))
{
amsWarehouse.setManageDeptName(null);
return;
}
SysDept query = new SysDept();
query.setDeptId(amsWarehouse.getManageDeptId());
query.setStatus(UserConstants.DEPT_NORMAL);
List<SysDept> deptList = sysDeptService.selectDeptList(query);
if (deptList == null || deptList.isEmpty())
{
throw new ServiceException("管理部门不存在或已停用");
}
amsWarehouse.setManageDeptName(deptList.get(0).getDeptName());
}
}

@ -0,0 +1,136 @@
<?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.ruoyi.asset.mapper.AmsWarehouseMapper">
<resultMap type="AmsWarehouse" id="AmsWarehouseResult">
<result property="warehouseId" column="warehouse_id" />
<result property="warehouseCode" column="warehouse_code" />
<result property="warehouseName" column="warehouse_name" />
<result property="manageDeptId" column="manage_dept_id" />
<result property="manageDeptName" column="manage_dept_name" />
<result property="warehouseAddress" column="warehouse_address" />
<result property="managerName" column="manager_name" />
<result property="contactPhone" column="contact_phone" />
<result property="enabled" column="enabled" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="delFlag" column="del_flag" />
</resultMap>
<sql id="selectAmsWarehouseVo">
select warehouse_id, warehouse_code, warehouse_name, manage_dept_id, manage_dept_name, warehouse_address, manager_name, contact_phone, enabled, create_by, create_time, update_by, update_time, remark, del_flag from ams_warehouse
</sql>
<select id="selectAmsWarehouseList" parameterType="AmsWarehouse" resultMap="AmsWarehouseResult">
<include refid="selectAmsWarehouseVo"/>
<where>
del_flag = '0'
<if test="warehouseCode != null and warehouseCode != ''"> and warehouse_code = #{warehouseCode}</if>
<if test="warehouseName != null and warehouseName != ''"> and warehouse_name like concat('%', #{warehouseName}, '%')</if>
<if test="manageDeptId != null"> and manage_dept_id = #{manageDeptId}</if>
<if test="warehouseAddress != null and warehouseAddress != ''"> and warehouse_address = #{warehouseAddress}</if>
<if test="managerName != null and managerName != ''"> and manager_name like concat('%', #{managerName}, '%')</if>
<if test="contactPhone != null and contactPhone != ''"> and contact_phone = #{contactPhone}</if>
<if test="enabled != null and enabled != ''"> and enabled = #{enabled}</if>
</where>
</select>
<select id="selectAmsWarehouseByWarehouseId" parameterType="Long" resultMap="AmsWarehouseResult">
<include refid="selectAmsWarehouseVo"/>
where warehouse_id = #{warehouseId} and del_flag = '0'
</select>
<select id="checkWarehouseCodeUnique" parameterType="String" resultMap="AmsWarehouseResult">
<include refid="selectAmsWarehouseVo"/>
where warehouse_code = #{warehouseCode} and del_flag = '0' limit 1
</select>
<select id="countWarehouseReferences" parameterType="Long" resultType="int">
select
(select count(1) from ams_asset where warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_asset_lifecycle_log where del_flag = '0' and (before_warehouse_id = #{warehouseId} or after_warehouse_id = #{warehouseId}))
+ (select count(1) from ams_asset_location where warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_borrow_order_item where del_flag = '0' and (before_warehouse_id = #{warehouseId} or return_warehouse_id = #{warehouseId}))
+ (select count(1) from ams_inbound_order where warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_inventory_task where warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_inventory_task_item where del_flag = '0' and (book_warehouse_id = #{warehouseId} or inventory_warehouse_id = #{warehouseId}))
+ (select count(1) from ams_receive_order_item where before_warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_return_order where receive_warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_return_order_item where after_warehouse_id = #{warehouseId} and del_flag = '0')
+ (select count(1) from ams_transfer_order_item where del_flag = '0' and (old_warehouse_id = #{warehouseId} or new_warehouse_id = #{warehouseId}))
</select>
<insert id="insertAmsWarehouse" parameterType="AmsWarehouse" useGeneratedKeys="true" keyProperty="warehouseId">
insert into ams_warehouse
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="warehouseCode != null and warehouseCode != ''">warehouse_code,</if>
<if test="warehouseName != null and warehouseName != ''">warehouse_name,</if>
<if test="manageDeptId != null">manage_dept_id,</if>
<if test="manageDeptName != null">manage_dept_name,</if>
<if test="warehouseAddress != null">warehouse_address,</if>
<if test="managerName != null">manager_name,</if>
<if test="contactPhone != null">contact_phone,</if>
<if test="enabled != null and enabled != ''">enabled,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="delFlag != null">del_flag,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="warehouseCode != null and warehouseCode != ''">#{warehouseCode},</if>
<if test="warehouseName != null and warehouseName != ''">#{warehouseName},</if>
<if test="manageDeptId != null">#{manageDeptId},</if>
<if test="manageDeptName != null">#{manageDeptName},</if>
<if test="warehouseAddress != null">#{warehouseAddress},</if>
<if test="managerName != null">#{managerName},</if>
<if test="contactPhone != null">#{contactPhone},</if>
<if test="enabled != null and enabled != ''">#{enabled},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="delFlag != null">#{delFlag},</if>
</trim>
</insert>
<update id="updateAmsWarehouse" parameterType="AmsWarehouse">
update ams_warehouse
<trim prefix="SET" suffixOverrides=",">
<if test="warehouseCode != null and warehouseCode != ''">warehouse_code = #{warehouseCode},</if>
<if test="warehouseName != null and warehouseName != ''">warehouse_name = #{warehouseName},</if>
manage_dept_id = #{manageDeptId},
manage_dept_name = #{manageDeptName},
<if test="warehouseAddress != null">warehouse_address = #{warehouseAddress},</if>
<if test="managerName != null">manager_name = #{managerName},</if>
<if test="contactPhone != null">contact_phone = #{contactPhone},</if>
<if test="enabled != null and enabled != ''">enabled = #{enabled},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
</trim>
where warehouse_id = #{warehouseId}
</update>
<update id="deleteAmsWarehouseByWarehouseId" parameterType="Long">
update ams_warehouse set del_flag = '1' where warehouse_id = #{warehouseId}
</update>
<update id="deleteAmsWarehouseByWarehouseIds" parameterType="String">
update ams_warehouse set del_flag = '1' where warehouse_id in
<foreach item="warehouseId" collection="array" open="(" separator="," close=")">
#{warehouseId}
</foreach>
</update>
</mapper>

@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增仓库管理')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-warehouse-add">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">仓库编码:</label>
<div class="col-sm-8">
<input name="warehouseCode" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">仓库名称:</label>
<div class="col-sm-8">
<input name="warehouseName" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">管理部门:</label>
<div class="col-sm-8">
<select name="manageDeptId" class="form-control">
<option value="">请选择</option>
<option th:each="dept : ${deptList}" th:text="${dept.deptName}" th:value="${dept.deptId}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">仓库地址:</label>
<div class="col-sm-8">
<input name="warehouseAddress" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">负责人:</label>
<div class="col-sm-8">
<input name="managerName" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">联系电话:</label>
<div class="col-sm-8">
<input name="contactPhone" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">启用状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('ams_enabled_status')}">
<input type="radio" th:id="${'enabled_' + dict.dictCode}" name="enabled" th:value="${dict.dictValue}" th:checked="${dict.default}" required>
<label th:for="${'enabled_' + dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">备注:</label>
<div class="col-sm-8">
<textarea name="remark" class="form-control"></textarea>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "asset/warehouse"
$("#form-warehouse-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-warehouse-add').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,96 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改仓库管理')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-warehouse-edit" th:object="${amsWarehouse}">
<input name="warehouseId" th:field="*{warehouseId}" type="hidden">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">仓库编码:</label>
<div class="col-sm-8">
<input name="warehouseCode" th:field="*{warehouseCode}" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">仓库名称:</label>
<div class="col-sm-8">
<input name="warehouseName" th:field="*{warehouseName}" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">管理部门:</label>
<div class="col-sm-8">
<select name="manageDeptId" th:field="*{manageDeptId}" class="form-control">
<option value="">请选择</option>
<option th:each="dept : ${deptList}" th:text="${dept.deptName}" th:value="${dept.deptId}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">仓库地址:</label>
<div class="col-sm-8">
<input name="warehouseAddress" th:field="*{warehouseAddress}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">负责人:</label>
<div class="col-sm-8">
<input name="managerName" th:field="*{managerName}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">联系电话:</label>
<div class="col-sm-8">
<input name="contactPhone" th:field="*{contactPhone}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">启用状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('ams_enabled_status')}">
<input type="radio" th:id="${'enabled_' + dict.dictCode}" name="enabled" th:value="${dict.dictValue}" th:field="*{enabled}" required>
<label th:for="${'enabled_' + dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">备注:</label>
<div class="col-sm-8">
<textarea name="remark" class="form-control">[[*{remark}]]</textarea>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "asset/warehouse";
$("#form-warehouse-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-warehouse-edit').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('仓库管理详细')" />
</head>
<body>
<div class="main-content">
<form class="form-horizontal" th:object="${amsWarehouse}">
<h4 class="form-header h4">基本信息</h4>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">仓库编码:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{warehouseCode}"></p>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">仓库名称:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{warehouseName}"></p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">管理部门:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{manageDeptName}"></p>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">仓库地址:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{warehouseAddress}"></p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">负责人:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{managerName}"></p>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">联系电话:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{contactPhone}"></p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">启用状态:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{@dict.getLabel('ams_enabled_status', enabled)}"></p>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label">备注:</label>
<div class="col-sm-8">
<p class="form-control-plaintext" th:text="*{remark}"></p>
</div>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
</body>
</html>

@ -0,0 +1,150 @@
<!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">
<div class="select-list">
<ul>
<li>
<label>仓库编码:</label>
<input type="text" name="warehouseCode"/>
</li>
<li>
<label>仓库名称:</label>
<input type="text" name="warehouseName"/>
</li>
<li>
<label>管理部门:</label>
<select name="manageDeptId">
<option value="">所有</option>
<option th:each="dept : ${deptList}" th:text="${dept.deptName}" th:value="${dept.deptId}"></option>
</select>
</li>
<li>
<label>仓库地址:</label>
<input type="text" name="warehouseAddress"/>
</li>
<li>
<label>负责人:</label>
<input type="text" name="managerName"/>
</li>
<li>
<label>联系电话:</label>
<input type="text" name="contactPhone"/>
</li>
<li>
<label>启用状态:</label>
<select name="enabled" th:with="type=${@dict.getType('ams_enabled_status')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</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">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="asset:warehouse:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="asset:warehouse:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="asset:warehouse:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="asset:warehouse:export">
<i class="fa fa-download"></i> 导出
</a>
</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 th:inline="javascript">
var editFlag = [[${@permission.hasPermi('asset:warehouse:edit')}]];
var removeFlag = [[${@permission.hasPermi('asset:warehouse:remove')}]];
var enabledDatas = [[${@dict.getType('ams_enabled_status')}]];
var prefix = ctx + "asset/warehouse";
$(function() {
var options = {
url: prefix + "/list",
viewUrl: prefix + "/view/{id}",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "仓库管理",
columns: [{
checkbox: true
},
{
field: 'warehouseId',
title: '仓库ID',
visible: false
},
{
field: 'warehouseCode',
title: '仓库编码'
},
{
field: 'warehouseName',
title: '仓库名称'
},
{
field: 'manageDeptName',
title: '管理部门'
},
{
field: 'warehouseAddress',
title: '仓库地址'
},
{
field: 'managerName',
title: '负责人'
},
{
field: 'contactPhone',
title: '联系电话'
},
{
field: 'enabled',
title: '启用状态',
formatter: function(value, row, index) {
return $.table.selectDictLabel(enabledDatas, value);
}
},
{
field: 'remark',
title: '备注'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="$.operate.view(\'' + row.warehouseId + '\')"><i class="fa fa-eye"></i>查看</a> ');
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.warehouseId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.warehouseId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>
Loading…
Cancel
Save