Compare commits
No commits in common. "5839e71a4f2767ff36e8067f3cfd13e8e8c53dc6" and "fbc56c776adeac5292bc59ce961902588eda1496" have entirely different histories.
5839e71a4f
...
fbc56c776a
|
@ -23,7 +23,7 @@ import com.ruoyi.system.domain.SysCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 缓存监控
|
* 缓存监控
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -42,7 +42,6 @@ public class CacheController
|
||||||
caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
|
caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
|
||||||
caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
|
caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
|
||||||
caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
|
caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
|
||||||
caches.add(new SysCache(CacheConstants.STORAGE_LOCATION, "车间库位号占用状态"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreAuthorize("@ss.hasPermi('monitor:cache:list')")
|
@PreAuthorize("@ss.hasPermi('monitor:cache:list')")
|
||||||
|
|
|
@ -1,131 +0,0 @@
|
||||||
package com.ruoyi.web.controller.storageLocation;
|
|
||||||
|
|
||||||
import com.ruoyi.clMaterial.domain.CYlMaterial;
|
|
||||||
import com.ruoyi.common.annotation.DataSource;
|
|
||||||
import com.ruoyi.common.annotation.Log;
|
|
||||||
import com.ruoyi.common.constant.CacheConstants;
|
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
|
||||||
import com.ruoyi.common.core.redis.RedisCache;
|
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
|
||||||
import com.ruoyi.common.enums.DataSourceType;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.storageLocation.domain.StorageLocation;
|
|
||||||
import com.ruoyi.storageLocation.service.StorageLocationService;
|
|
||||||
import com.ruoyi.system.service.ISysConfigService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 库位管理Controller
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/storageLocation/storageLocation")
|
|
||||||
@DataSource(DataSourceType.STORAGE)
|
|
||||||
public class storageLocationController extends BaseController
|
|
||||||
{
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RedisCache redisCache;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private StorageLocationService storageLocationService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ISysConfigService configService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取库位信息
|
|
||||||
*/
|
|
||||||
@GetMapping("/list")
|
|
||||||
public AjaxResult list(StorageLocation storageLocation)
|
|
||||||
{
|
|
||||||
AjaxResult ajaxResult = new AjaxResult();
|
|
||||||
List<StorageLocation> listA = storageLocationService.selectStorageLocationAList(storageLocation);
|
|
||||||
List<StorageLocation> listB = storageLocationService.selectStorageLocationBList(storageLocation);
|
|
||||||
List<StorageLocation> listC = storageLocationService.selectStorageLocationCList(storageLocation);
|
|
||||||
|
|
||||||
ajaxResult.put("materialDetailA",listA);
|
|
||||||
ajaxResult.put("materialDetailB",listB);
|
|
||||||
ajaxResult.put("materialDetailC",listC);
|
|
||||||
return ajaxResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 录入库位信息
|
|
||||||
*/
|
|
||||||
@Log(title = "录入库位信息", businessType = BusinessType.INSERT)
|
|
||||||
@PostMapping
|
|
||||||
public AjaxResult add(@RequestBody StorageLocation storageLocation)
|
|
||||||
{
|
|
||||||
String user_name = getLoginUser().getUsername();//当前登陆者
|
|
||||||
String materialBh = storageLocation.getMaterialBh();
|
|
||||||
|
|
||||||
String kw_user_name = redisCache.getCacheObject(getCacheKey(materialBh));
|
|
||||||
if(StringUtils.isNull(kw_user_name)){
|
|
||||||
return error("已超过有效录入信息时间,请关闭重新录入!");
|
|
||||||
}else if(!user_name.equals(kw_user_name)){
|
|
||||||
return error("已超过有效录入信息时间,当前库位有人正在操作!");
|
|
||||||
}else{
|
|
||||||
redisCache.setCacheObject(getCacheKey(materialBh),user_name);
|
|
||||||
return toAjax(storageLocationService.addStorageLocation(storageLocation));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验库位是否已占用
|
|
||||||
*/
|
|
||||||
@Log(title = "校验库位是否已占用", businessType = BusinessType.OTHER)
|
|
||||||
@PostMapping("/checkStorageLocation")
|
|
||||||
public AjaxResult checkStorageLocation(@RequestBody StorageLocation storageLocation)
|
|
||||||
{
|
|
||||||
String storageExpire = configService.selectConfigByKey("storage.expire");
|
|
||||||
|
|
||||||
String user_name = getLoginUser().getUsername();//当前登陆者
|
|
||||||
String materialBh = storageLocation.getMaterialBh();
|
|
||||||
|
|
||||||
String kw_user_name = redisCache.getCacheObject(getCacheKey(materialBh));
|
|
||||||
if(StringUtils.isNotNull(kw_user_name)&&!user_name.equals(kw_user_name)){
|
|
||||||
return error("当前库位有人正在操作,请勿操作!");
|
|
||||||
}else{
|
|
||||||
redisCache.setCacheObject(getCacheKey(materialBh),user_name,Integer.valueOf(storageExpire), TimeUnit.SECONDS);
|
|
||||||
return success();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 弹窗取消按钮 清除库位缓存
|
|
||||||
*/
|
|
||||||
@Log(title = "校验库位是否已占用", businessType = BusinessType.OTHER)
|
|
||||||
@PostMapping("/cancelStorageLocation")
|
|
||||||
public AjaxResult cancelStorageLocation(@RequestBody StorageLocation storageLocation)
|
|
||||||
{
|
|
||||||
String storageExpire = configService.selectConfigByKey("storage.expire");
|
|
||||||
|
|
||||||
String user_name = getLoginUser().getUsername();//当前登陆者
|
|
||||||
String materialBh = storageLocation.getMaterialBh();
|
|
||||||
|
|
||||||
String kw_user_name = redisCache.getCacheObject(getCacheKey(materialBh));
|
|
||||||
if(StringUtils.isNotNull(kw_user_name)&&user_name.equals(kw_user_name)){
|
|
||||||
redisCache.deleteObject(getCacheKey(materialBh));
|
|
||||||
}
|
|
||||||
return success();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 库位缓存键名
|
|
||||||
*
|
|
||||||
* @param materialBh 库位号
|
|
||||||
* @return 缓存键key
|
|
||||||
*/
|
|
||||||
private String getCacheKey(String materialBh)
|
|
||||||
{
|
|
||||||
return CacheConstants.STORAGE_LOCATION + materialBh;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -36,15 +36,6 @@ spring:
|
||||||
url: jdbc:sqlserver://192.168.9.2:1433;DatabaseName=jn_erp
|
url: jdbc:sqlserver://192.168.9.2:1433;DatabaseName=jn_erp
|
||||||
username: sa
|
username: sa
|
||||||
password: it12345
|
password: it12345
|
||||||
# 车间库位管理数据库数据源
|
|
||||||
storage:
|
|
||||||
# 从数据源开关/默认关闭
|
|
||||||
enabled: true
|
|
||||||
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
|
||||||
# 正式数据库
|
|
||||||
url: jdbc:sqlserver://192.168.9.99:1433;DatabaseName=jn_storage
|
|
||||||
username: sa
|
|
||||||
password: Itcenter110-
|
|
||||||
# 初始连接数
|
# 初始连接数
|
||||||
initialSize: 10
|
initialSize: 10
|
||||||
# 最小连接池数量
|
# 最小连接池数量
|
||||||
|
|
|
@ -2,7 +2,7 @@ package com.ruoyi.common.constant;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 缓存的key 常量
|
* 缓存的key 常量
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
public class CacheConstants
|
public class CacheConstants
|
||||||
|
@ -41,9 +41,4 @@ public class CacheConstants
|
||||||
* 登录账户密码错误次数 redis key
|
* 登录账户密码错误次数 redis key
|
||||||
*/
|
*/
|
||||||
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
||||||
|
|
||||||
/**
|
|
||||||
* 一车间库位号占用状态 redis key
|
|
||||||
*/
|
|
||||||
public static final String STORAGE_LOCATION = "storage_location:";
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,6 @@ public enum DataSourceType
|
||||||
/**
|
/**
|
||||||
* 江南ERP数据库
|
* 江南ERP数据库
|
||||||
*/
|
*/
|
||||||
JNERP,
|
JNERP
|
||||||
|
|
||||||
/**
|
|
||||||
* 车间库位管理数据库
|
|
||||||
*/
|
|
||||||
STORAGE
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,15 +67,6 @@ public class DruidConfig
|
||||||
return druidProperties.dataSource(dataSource);
|
return druidProperties.dataSource(dataSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConfigurationProperties("spring.datasource.druid.storage")
|
|
||||||
@ConditionalOnProperty(prefix = "spring.datasource.druid.storage", name = "enabled", havingValue = "true")
|
|
||||||
public DataSource storageDataSource(DruidProperties druidProperties)
|
|
||||||
{
|
|
||||||
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
|
|
||||||
return druidProperties.dataSource(dataSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean(name = "dynamicDataSource")
|
@Bean(name = "dynamicDataSource")
|
||||||
@Primary
|
@Primary
|
||||||
public DynamicDataSource dataSource(DataSource masterDataSource)
|
public DynamicDataSource dataSource(DataSource masterDataSource)
|
||||||
|
@ -85,7 +76,6 @@ public class DruidConfig
|
||||||
setDataSource(targetDataSources, DataSourceType.REDBOOK.name(), "redbookDataSource");
|
setDataSource(targetDataSources, DataSourceType.REDBOOK.name(), "redbookDataSource");
|
||||||
setDataSource(targetDataSources, DataSourceType.QUOT.name(), "quotDataSource");
|
setDataSource(targetDataSources, DataSourceType.QUOT.name(), "quotDataSource");
|
||||||
setDataSource(targetDataSources, DataSourceType.JNERP.name(), "jnerpDataSource");
|
setDataSource(targetDataSources, DataSourceType.JNERP.name(), "jnerpDataSource");
|
||||||
setDataSource(targetDataSources, DataSourceType.STORAGE.name(), "storageDataSource");
|
|
||||||
return new DynamicDataSource(masterDataSource, targetDataSources);
|
return new DynamicDataSource(masterDataSource, targetDataSources);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
package com.ruoyi.storageLocation.domain;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 库位管理对象 StorageLocation
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2024-02-28
|
|
||||||
*/
|
|
||||||
public class StorageLocation extends BaseEntity
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
private String materialBh;
|
|
||||||
private String materialXingh;
|
|
||||||
private String materialGuig;
|
|
||||||
private String materialDiany;
|
|
||||||
private String materialMs;
|
|
||||||
private String materialState;
|
|
||||||
|
|
||||||
public String getMaterialBh() {
|
|
||||||
return materialBh;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaterialBh(String materialBh) {
|
|
||||||
this.materialBh = materialBh;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaterialXingh() {
|
|
||||||
return materialXingh;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaterialXingh(String materialXingh) {
|
|
||||||
this.materialXingh = materialXingh;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaterialGuig() {
|
|
||||||
return materialGuig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaterialGuig(String materialGuig) {
|
|
||||||
this.materialGuig = materialGuig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaterialDiany() {
|
|
||||||
return materialDiany;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaterialDiany(String materialDiany) {
|
|
||||||
this.materialDiany = materialDiany;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaterialMs() {
|
|
||||||
return materialMs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaterialMs(String materialMs) {
|
|
||||||
this.materialMs = materialMs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaterialState() {
|
|
||||||
return materialState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaterialState(String materialState) {
|
|
||||||
this.materialState = materialState;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package com.ruoyi.storageLocation.mapper;
|
|
||||||
|
|
||||||
import com.ruoyi.storageLocation.domain.StorageLocation;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 库位管理Mapper接口
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2024-02-28
|
|
||||||
*/
|
|
||||||
public interface StorageLocationMapper
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取库位信息
|
|
||||||
* @param storageLocation
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<StorageLocation> selectStorageLocationAList(StorageLocation storageLocation);
|
|
||||||
List<StorageLocation> selectStorageLocationBList(StorageLocation storageLocation);
|
|
||||||
List<StorageLocation> selectStorageLocationCList(StorageLocation storageLocation);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 录入库位信息
|
|
||||||
* @param storageLocation
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
int addStorageLocation(StorageLocation storageLocation);
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
package com.ruoyi.storageLocation.service;
|
|
||||||
|
|
||||||
import com.ruoyi.clMaterial.domain.CYlMaterial;
|
|
||||||
import com.ruoyi.storageLocation.domain.StorageLocation;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 库位管理Service接口
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2024-02-28
|
|
||||||
*/
|
|
||||||
public interface StorageLocationService
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取库位信息
|
|
||||||
* @param storageLocation
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<StorageLocation> selectStorageLocationAList(StorageLocation storageLocation);
|
|
||||||
List<StorageLocation> selectStorageLocationBList(StorageLocation storageLocation);
|
|
||||||
List<StorageLocation> selectStorageLocationCList(StorageLocation storageLocation);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 录入库位信息
|
|
||||||
* @param storageLocation
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
int addStorageLocation(StorageLocation storageLocation);
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
package com.ruoyi.storageLocation.service.impl;
|
|
||||||
|
|
||||||
import com.ruoyi.storageLocation.domain.StorageLocation;
|
|
||||||
import com.ruoyi.storageLocation.mapper.StorageLocationMapper;
|
|
||||||
import com.ruoyi.storageLocation.service.StorageLocationService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 库位管理Service业务层处理
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2024-02-28
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class StorageLocationServiceImpl implements StorageLocationService
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private StorageLocationMapper storageLocationMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取库位信息
|
|
||||||
* @param storageLocation
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public List<StorageLocation> selectStorageLocationAList(StorageLocation storageLocation) {
|
|
||||||
return storageLocationMapper.selectStorageLocationAList(storageLocation);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public List<StorageLocation> selectStorageLocationBList(StorageLocation storageLocation) {
|
|
||||||
return storageLocationMapper.selectStorageLocationBList(storageLocation);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public List<StorageLocation> selectStorageLocationCList(StorageLocation storageLocation) {
|
|
||||||
return storageLocationMapper.selectStorageLocationCList(storageLocation);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 录入库位信息
|
|
||||||
* @param storageLocation
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int addStorageLocation(StorageLocation storageLocation) {
|
|
||||||
return storageLocationMapper.addStorageLocation(storageLocation);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
<?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.storageLocation.mapper.StorageLocationMapper">
|
|
||||||
|
|
||||||
<resultMap type="StorageLocation" id="StorageLocationResult">
|
|
||||||
<result property="materialBh" column="materialBh" />
|
|
||||||
<result property="materialXingh" column="materialXingh" />
|
|
||||||
<result property="materialGuig" column="materialGuig" />
|
|
||||||
<result property="materialDiany" column="materialDiany" />
|
|
||||||
<result property="materialMs" column="materialMs" />
|
|
||||||
<result property="materialState" column="materialState" />
|
|
||||||
</resultMap>
|
|
||||||
|
|
||||||
<select id="selectStorageLocationAList" parameterType="StorageLocation" resultMap="StorageLocationResult">
|
|
||||||
select materialBh, materialXingh, materialGuig, materialDiany, materialMs, materialState
|
|
||||||
from storageLocation where materialBh like 'A%'
|
|
||||||
</select>
|
|
||||||
<select id="selectStorageLocationBList" parameterType="StorageLocation" resultMap="StorageLocationResult">
|
|
||||||
select materialBh, materialXingh, materialGuig, materialDiany, materialMs, materialState
|
|
||||||
from storageLocation where materialBh like 'B%'
|
|
||||||
</select>
|
|
||||||
<select id="selectStorageLocationCList" parameterType="StorageLocation" resultMap="StorageLocationResult">
|
|
||||||
select materialBh, materialXingh, materialGuig, materialDiany, materialMs, materialState
|
|
||||||
from storageLocation where materialBh like 'C%'
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<update id="addStorageLocation" parameterType="StorageLocation">
|
|
||||||
update storageLocation
|
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
|
||||||
<if test="materialXingh != null and materialXingh != ''">materialXingh = #{materialXingh},</if>
|
|
||||||
<if test="materialGuig != null and materialGuig != ''">materialGuig = #{materialGuig},</if>
|
|
||||||
<if test="materialDiany != null and materialDiany != ''">materialDiany = #{materialDiany},</if>
|
|
||||||
<if test="materialMs != null and materialMs != ''">materialMs = #{materialMs},</if>
|
|
||||||
materialState = '1'
|
|
||||||
</trim>
|
|
||||||
where materialBh = #{materialBh}
|
|
||||||
</update>
|
|
||||||
|
|
||||||
</mapper>
|
|
|
@ -1,37 +0,0 @@
|
||||||
import request from '@/utils/request'
|
|
||||||
|
|
||||||
// 获取库位信息
|
|
||||||
export function listStorageLocation(query) {
|
|
||||||
return request({
|
|
||||||
url: '/storageLocation/storageLocation/list',
|
|
||||||
method: 'get',
|
|
||||||
params: query
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 录入库位信息
|
|
||||||
export function addStorageLocation(data) {
|
|
||||||
return request({
|
|
||||||
url: '/storageLocation/storageLocation',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 校验库位是否已占用
|
|
||||||
export function checkStorageLocation(data) {
|
|
||||||
return request({
|
|
||||||
url: '/storageLocation/storageLocation/checkStorageLocation',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 弹窗取消按钮 清除库位缓存
|
|
||||||
export function cancelStorageLocation(data) {
|
|
||||||
return request({
|
|
||||||
url: '/storageLocation/storageLocation/cancelStorageLocation',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -1,37 +1,23 @@
|
||||||
<template>
|
<template>
|
||||||
<div style="margin-top: 5px;">
|
<div style="margin-top: 10px;margin-left: 5px; margin-right: 5px;">
|
||||||
<div style="margin-left: 5px; margin-right: 5px;">
|
<el-row>
|
||||||
<el-row :gutter="10" style="letter-spacing: 5px;">
|
|
||||||
<el-col :span="8">
|
|
||||||
<div class="grid-content bg-purpleA">黄色线芯A区(余{{countA}})</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<div class="grid-content bg-purpleB">绿色线芯B区(余{{countB}})</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<div class="grid-content bg-purpleC">红色线芯C区(余{{countC}})</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="10">
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-card class="box-card scrollable">
|
<el-card class="box-card" style="background-color: yellow;" :body-style="{backgroundColor: '#fff' }">
|
||||||
<el-descriptions border :column="2" size="small" :style="index==0?'': 'margin-top :15px'" v-for="(item,index) in materialDetailA" :key="item.materialBh">
|
<div slot="header" class="clearfix">
|
||||||
|
<span>黄色线芯A区</span>
|
||||||
|
</div>
|
||||||
|
<el-descriptions border :column="2" size="small" v-for="(item,index) in materialDetailA" :key="item.materialBh">
|
||||||
<el-descriptions-item>
|
<el-descriptions-item>
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
库位
|
库位
|
||||||
</template>
|
</template>
|
||||||
<span class="kw">{{item.materialBh}}</span>
|
<span style="font-size: 15px;color: black">{{item.materialBh}}</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item :contentStyle="{'text-align': 'center'}">
|
<el-descriptions-item>
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
状态
|
状态
|
||||||
</template>
|
</template>
|
||||||
<span v-if = "item.materialState=='0'">
|
<el-button size="mini" type="success" icon="el-icon-check" circle></el-button>
|
||||||
<el-tag size="mini" type="success" @click="openDialog(item)">空闲</el-tag>
|
|
||||||
</span>
|
|
||||||
<span v-if = "item.materialState=='1'">
|
|
||||||
<el-tag size="mini" type="danger">已用</el-tag>
|
|
||||||
</span>
|
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2">
|
<el-descriptions-item :span="2">
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
|
@ -61,24 +47,16 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-card class="box-card scrollable">
|
<el-card class="box-card" style="background-color: green;" :body-style="{backgroundColor: '#fff' }">
|
||||||
<el-descriptions border :column="2" size="small" :style="index==0?'': 'margin-top :12px'" v-for="(item,index) in materialDetailB" :key="item.materialBh">
|
<div slot="header" class="clearfix">
|
||||||
<el-descriptions-item>
|
<span>绿色线芯B区</span>
|
||||||
|
</div>
|
||||||
|
<el-descriptions border :column="2" size="small" v-for="(item,index) in materialDetailB" :key="item.materialBh">
|
||||||
|
<el-descriptions-item :span="2">
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
库位
|
库位
|
||||||
</template>
|
</template>
|
||||||
<span class="kw">{{item.materialBh}}</span>
|
<span style="font-size: 15px;color: black">{{item.materialBh}}</span>
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :contentStyle="{'text-align': 'center'}">
|
|
||||||
<template slot="label">
|
|
||||||
状态
|
|
||||||
</template>
|
|
||||||
<span v-if = "item.materialState=='0'">
|
|
||||||
<el-tag size="mini" type="success" @click="openDialog(item)">空闲</el-tag>
|
|
||||||
</span>
|
|
||||||
<span v-if = "item.materialState=='1'">
|
|
||||||
<el-tag size="mini" type="danger">已用</el-tag>
|
|
||||||
</span>
|
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2">
|
<el-descriptions-item :span="2">
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
|
@ -108,24 +86,16 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-card class="box-card scrollable">
|
<el-card class="box-card" style="background-color: red;" :body-style="{backgroundColor: '#fff' }">
|
||||||
<el-descriptions border :column="2" size="small" :style="index==0?'': 'margin-top :12px'" v-for="(item,index) in materialDetailC" :key="item.materialBh">
|
<div slot="header" class="clearfix">
|
||||||
<el-descriptions-item>
|
<span>红色线芯C区</span>
|
||||||
|
</div>
|
||||||
|
<el-descriptions border :column="2" size="small" v-for="(item,index) in materialDetailC" :key="item.materialBh">
|
||||||
|
<el-descriptions-item :span="2">
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
库位
|
库位
|
||||||
</template>
|
</template>
|
||||||
<span class="kw">{{item.materialBh}}</span>
|
<span style="font-size: 15px;color: black">{{item.materialBh}}</span>
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :contentStyle="{'text-align': 'center'}">
|
|
||||||
<template slot="label">
|
|
||||||
状态
|
|
||||||
</template>
|
|
||||||
<span v-if = "item.materialState=='0'">
|
|
||||||
<el-tag size="mini" type="success" @click="openDialog(item)">空闲</el-tag>
|
|
||||||
</span>
|
|
||||||
<span v-if = "item.materialState=='1'">
|
|
||||||
<el-tag size="mini" type="danger">已用</el-tag>
|
|
||||||
</span>
|
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2">
|
<el-descriptions-item :span="2">
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
|
@ -155,234 +125,48 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
<!-- 添加或修改材料管理对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="库位" prop="materialBh">
|
|
||||||
<el-input v-model="form.materialBh"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="型号" prop="materialXingh">
|
|
||||||
<el-input v-model="form.materialXingh" placeholder="请输入型号"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="规格" prop="materialGuig">
|
|
||||||
<el-input v-model="form.materialGuig" placeholder="请输入规格"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="电压等级" prop="materialDiany">
|
|
||||||
<el-input v-model="form.materialDiany" placeholder="请输入电压等级" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="米数" prop="materialMs">
|
|
||||||
<el-input v-model="form.materialMs" placeholder="请输入米数" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
<style>
|
|
||||||
/*库位号样式*/
|
|
||||||
.kw{
|
|
||||||
font-size: 15px;color: black;font-weight: bold
|
|
||||||
}
|
|
||||||
|
|
||||||
/*卡片内容滚动条设置*/
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
display: none; /* Chrome Safari */
|
|
||||||
}
|
|
||||||
.scrollable{
|
|
||||||
overflow: auto; /* 自动开启滚动条 */
|
|
||||||
max-height: 650px; /* 设置最大高度 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*最上方三大块样式*/
|
|
||||||
.grid-content {
|
|
||||||
border-radius: 4px;
|
|
||||||
min-height: 36px;
|
|
||||||
display: flex; /* 设置为 Flexbox */
|
|
||||||
justify-content: center; /* 水平居中 */
|
|
||||||
align-items: center; /* 垂直居中 */
|
|
||||||
}
|
|
||||||
.bg-purpleA {
|
|
||||||
background: #e6a700;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold
|
|
||||||
}
|
|
||||||
.bg-purpleB {
|
|
||||||
background: green;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold
|
|
||||||
}
|
|
||||||
.bg-purpleC {
|
|
||||||
background: red;
|
|
||||||
color: white;
|
|
||||||
font-weight: bold
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script>
|
<script>
|
||||||
import { listStorageLocation, addStorageLocation, checkStorageLocation,cancelStorageLocation } from "@/api/storageLocation/storageLocation";
|
export default {
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "locationSet",
|
name: "locationSet",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
queryParams: {
|
|
||||||
materialBh: null,
|
|
||||||
materialXingh: null,
|
|
||||||
materialGuig: null,
|
|
||||||
materialDiany: null,
|
|
||||||
materialMs: null
|
|
||||||
},
|
|
||||||
|
|
||||||
// 弹出层标题
|
|
||||||
title: "",
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
//库位信息数据
|
|
||||||
materialDetailA:[],
|
|
||||||
materialDetailB:[],
|
|
||||||
materialDetailC:[],
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
materialXingh: [
|
|
||||||
{ required: true, message: "型号不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
materialGuig: [
|
|
||||||
{ required: true, message: "规格不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
materialDiany: [
|
|
||||||
{ required: true, message: "电压等级不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
materialMs: [
|
|
||||||
{ required: true, message: "米数不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
},
|
|
||||||
//线芯摆放库位信息
|
//线芯摆放库位信息
|
||||||
/* materialDetailA: [{materialBh:'A-1', materialXingh: 'YJV', materialGuig: '1*10', materialDiany: '1kV', materialMs: '1.5', materialState:'0'},
|
materialDetailA: [{materialBh:'A-1', materialXingh: 'YJV', materialGuig: '1*10', materialDiany: '1kV', materialMs: '1.5'},
|
||||||
{materialBh:'A-2',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5', materialState:'0'},
|
{materialBh:'A-2',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5'},
|
||||||
{materialBh:'A-3',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'A-3',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'A-4',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'},
|
{materialBh:'A-4',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'A-5',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'A-5',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'A-6',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5', materialState:'0'},
|
{materialBh:'A-6',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5'},
|
||||||
{materialBh:'A-7',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'A-7',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'A-8',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'}],
|
{materialBh:'A-8',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'}],
|
||||||
|
|
||||||
materialDetailB: [{materialBh:'B-1',materialXingh: 'YJV', materialGuig: '1*10', materialDiany: '1kV', materialMs: '1.5', materialState:'1'},
|
materialDetailB: [{materialBh:'B-1',materialXingh: 'YJV', materialGuig: '1*10', materialDiany: '1kV', materialMs: '1.5'},
|
||||||
{materialBh:'B-2',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5', materialState:'0'},
|
{materialBh:'B-2',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5'},
|
||||||
{materialBh:'B-3',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'B-3',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'B-4',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'},
|
{materialBh:'B-4',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'B-5',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'B-5',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'B-6',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5', materialState:'0'},
|
{materialBh:'B-6',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5'},
|
||||||
{materialBh:'B-7',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'B-7',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'B-8',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'}],
|
{materialBh:'B-8',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'}],
|
||||||
|
|
||||||
materialDetailC: [{materialBh:'C-1',materialXingh: 'YJV', materialGuig: '1*10', materialDiany: '1kV', materialMs: '1.5', materialState:'0'},
|
materialDetailC: [{materialBh:'C-1',materialXingh: 'YJV', materialGuig: '1*10', materialDiany: '1kV', materialMs: '1.5'},
|
||||||
{materialBh:'C-2',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5', materialState:'1'},
|
{materialBh:'C-2',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5'},
|
||||||
{materialBh:'C-3',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'},
|
{materialBh:'C-3',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'C-4',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'},
|
{materialBh:'C-4',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'C-5',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'},
|
{materialBh:'C-5',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'C-6',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5', materialState:'1'},
|
{materialBh:'C-6',materialXingh: 'YJV2', materialGuig: '2*10', materialDiany: '2kV', materialMs: '2.5'},
|
||||||
{materialBh:'C-7',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'0'},
|
{materialBh:'C-7',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'},
|
||||||
{materialBh:'C-8',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5', materialState:'1'}],*/
|
{materialBh:'C-8',materialXingh: 'YJV3', materialGuig: '3*10', materialDiany: '3kV', materialMs: '3.5'}],
|
||||||
}
|
}
|
||||||
},
|
|
||||||
created() {
|
|
||||||
/*获取库位信息*/
|
|
||||||
this.getStorageLocation();
|
|
||||||
},
|
|
||||||
computed:{
|
|
||||||
countA(){
|
|
||||||
// 使用 find 方法找到第一个符合条件的对象
|
|
||||||
return this.materialDetailA.filter(task => task.materialState === '0').length;
|
|
||||||
},
|
|
||||||
countB(){
|
|
||||||
// 使用 find 方法找到第一个符合条件的对象
|
|
||||||
return this.materialDetailB.filter(task => task.materialState === '0').length;
|
|
||||||
},
|
|
||||||
countC(){
|
|
||||||
// 使用 find 方法找到第一个符合条件的对象
|
|
||||||
return this.materialDetailC.filter(task => task.materialState === '0').length;
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/*获取库位信息*/
|
|
||||||
getStorageLocation(){
|
|
||||||
listStorageLocation(this.queryParams).then(response => {
|
|
||||||
this.materialDetailA = response.materialDetailA;
|
|
||||||
this.materialDetailB = response.materialDetailB;
|
|
||||||
this.materialDetailC = response.materialDetailC;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/** 打开录入弹窗 */
|
|
||||||
openDialog(item) {
|
|
||||||
//校验库位是否已占用
|
|
||||||
this.form.materialBh = item.materialBh;
|
|
||||||
checkStorageLocation(this.form).then(response => {
|
|
||||||
this.reset();
|
|
||||||
this.open = true;
|
|
||||||
this.title = "录入信息";
|
|
||||||
this.form.materialBh = item.materialBh;
|
|
||||||
}).catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm() {
|
|
||||||
this.$refs["form"].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
addStorageLocation(this.form).then(response => {
|
|
||||||
this.$modal.msgSuccess("录入成功");
|
|
||||||
this.open = false;
|
|
||||||
this.getStorageLocation();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
cancelStorageLocation(this.form).then(response => {
|
|
||||||
this.open = false;
|
|
||||||
this.reset();
|
|
||||||
}).catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
materialBh: null,
|
|
||||||
materialXingh: null,
|
|
||||||
materialGuig: null,
|
|
||||||
materialDiany: null,
|
|
||||||
materialMs: null
|
|
||||||
};
|
|
||||||
this.resetForm("form");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
Loading…
Reference in New Issue