|
|
@@ -16,6 +16,7 @@
|
|
|
*/
|
|
|
package org.springblade.client.lock.controller;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
@@ -23,10 +24,14 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import javax.validation.Valid;
|
|
|
|
|
|
+import org.springblade.client.entity.LockConfig;
|
|
|
+import org.springblade.client.lock.service.ILockConfigService;
|
|
|
import org.springblade.client.lock.service.ILockService;
|
|
|
import org.springblade.core.mp.support.Condition;
|
|
|
import org.springblade.core.mp.support.Query;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.AesUtil;
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
@@ -34,6 +39,9 @@ import org.springblade.client.entity.Lock;
|
|
|
import org.springblade.client.vo.LockVO;
|
|
|
import org.springblade.core.boot.ctrl.BladeController;
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
/**
|
|
|
* 控制器
|
|
|
*
|
|
|
@@ -48,6 +56,8 @@ public class LockController extends BladeController {
|
|
|
|
|
|
private final ILockService lockService;
|
|
|
|
|
|
+ private final ILockConfigService lockConfigService;
|
|
|
+
|
|
|
/**
|
|
|
* 详情
|
|
|
*/
|
|
|
@@ -122,12 +132,134 @@ public class LockController extends BladeController {
|
|
|
return R.status(lockService.removeByIds(Func.toLongList(ids)));
|
|
|
}
|
|
|
|
|
|
+ //检查当前表单是否可以编辑
|
|
|
@GetMapping("checkLock")
|
|
|
- public R<Boolean> checkLock()
|
|
|
+ @ApiOperationSupport(order = 8)
|
|
|
+ @ApiOperation(value = "检查当前表单是否可以编辑", notes = "")
|
|
|
+ public R<?> checkLock(@ApiParam(value = "模块名称", required = true) @RequestParam String moduleName,
|
|
|
+ @ApiParam(value = "数据表名称", required = true) @RequestParam String tableName,
|
|
|
+ @ApiParam(value = "单据id", required = true) @RequestParam Long billId)
|
|
|
{
|
|
|
- //先查看当前租户是否配置锁
|
|
|
- return null;
|
|
|
- //
|
|
|
+ //先查看当前租户是在此模块否配置锁,如果没有锁或者没开启,直接返回true
|
|
|
+ LambdaQueryWrapper<LockConfig> lockConfigLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ lockConfigLambdaQueryWrapper
|
|
|
+ .eq(LockConfig::getModuleName,moduleName)
|
|
|
+ .eq(LockConfig::getTableName,tableName)
|
|
|
+ .eq(LockConfig::getTenantId, AuthUtil.getTenantId());
|
|
|
+ LockConfig lockConfig = lockConfigService.getOne(lockConfigLambdaQueryWrapper, false);
|
|
|
+ if(lockConfig==null || lockConfig.getIsEnable()!=1)
|
|
|
+ {
|
|
|
+ return R.success("目前订单可以编辑");
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果存在配置,则查看是否需要已经上锁,如果上锁,且上锁人不是自己,直接返回false。如果是自己直接返回true
|
|
|
+ LambdaQueryWrapper<Lock> lockLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ lockLambdaQueryWrapper
|
|
|
+ .eq(Lock::getBillId,billId)
|
|
|
+ .eq(Lock::getMoudleName,moduleName)
|
|
|
+ .eq(Lock::getTableName,tableName)
|
|
|
+ .eq(Lock::getTenantId,AuthUtil.getTenantId());
|
|
|
+ Lock lock = lockService.getOne(lockLambdaQueryWrapper, false);
|
|
|
+ //没有锁
|
|
|
+ if(lock==null)
|
|
|
+ {
|
|
|
+ return R.success("目前订单可以编辑");
|
|
|
+ }
|
|
|
+ //有锁 不是自己
|
|
|
+ else if(lock!=null && lock.getUserId()!=AuthUtil.getUserId())
|
|
|
+ {
|
|
|
+ SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+
|
|
|
+ return R.fail("账号:"+lock.getRealName()+"于"+simpleDateFormat.format(lock.getLockTime())+"正在编辑请稍后再试!");
|
|
|
+ }
|
|
|
+ //有锁 是自己
|
|
|
+ else if(lock!=null && lock.getUserId()==AuthUtil.getUserId())
|
|
|
+ {
|
|
|
+ return R.success("目前订单可以编辑");
|
|
|
+ }
|
|
|
+ //其他潜在情况,一律false
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return R.fail("目前订单暂时无法编辑");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //上锁
|
|
|
+ @PostMapping("onLock")
|
|
|
+ @ApiOperationSupport(order = 8)
|
|
|
+ @ApiOperation(value = "上锁", notes = "")
|
|
|
+ public R onLock(@ApiParam(value = "模块名称", required = true) @RequestParam String moduleName,
|
|
|
+ @ApiParam(value = "数据表名称", required = true) @RequestParam String tableName,
|
|
|
+ @ApiParam(value = "电脑序列号", required = true) @RequestParam String no,
|
|
|
+ @ApiParam(value = "单据id", required = true) @RequestParam Long billId)
|
|
|
+ {
|
|
|
+ //校验防止上锁多次
|
|
|
+ LambdaQueryWrapper<Lock> lockLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ lockLambdaQueryWrapper
|
|
|
+ .eq(Lock::getBillId,billId)
|
|
|
+ .eq(Lock::getMoudleName,moduleName)
|
|
|
+ .eq(Lock::getTableName,tableName)
|
|
|
+ .eq(Lock::getTenantId,AuthUtil.getTenantId());
|
|
|
+ int count = lockService.count(lockLambdaQueryWrapper);
|
|
|
+ //存在锁,不再新增锁
|
|
|
+ if(count>0)
|
|
|
+ {
|
|
|
+ Lock lock = lockService.getOne(lockLambdaQueryWrapper, false);
|
|
|
+ //存在自己的锁
|
|
|
+ if(lock.getUserId()==AuthUtil.getUserId())
|
|
|
+ {
|
|
|
+ return R.success("OK");
|
|
|
+ }
|
|
|
+ //存在别人的锁, 直接报错
|
|
|
+ else if(lock.getUserId()!=AuthUtil.getUserId())
|
|
|
+ {
|
|
|
+ return R.fail("上锁失败:存在其他用户的锁");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //不存在锁,新增锁
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Lock lock=new Lock();
|
|
|
+ lock.setUserId(AuthUtil.getUserId());
|
|
|
+ lock.setRealName(AuthUtil.getUserName());
|
|
|
+ lock.setLockTime(new Date());
|
|
|
+ lock.setMoudleName(moduleName);
|
|
|
+ lock.setTableName(tableName);
|
|
|
+ lock.setBillId(billId);
|
|
|
+ //生成16位 code
|
|
|
+ int code = (no + AuthUtil.getUserName()).hashCode();
|
|
|
+ lock.setLockNo(String.valueOf(code));
|
|
|
+ lockService.save(lock);
|
|
|
+ return R.success("OK");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //释放锁
|
|
|
+ @DeleteMapping("unLock")
|
|
|
+ @ApiOperationSupport(order = 8)
|
|
|
+ @ApiOperation(value = "释放锁", notes = "")
|
|
|
+ public R unLock(@ApiParam(value = "模块名称", required = true) @RequestParam String moduleName,
|
|
|
+ @ApiParam(value = "数据表名称", required = true) @RequestParam String tableName,
|
|
|
+ @ApiParam(value = "单据id", required = true) @RequestParam Long billId)
|
|
|
+ {
|
|
|
+ LambdaQueryWrapper<Lock> lockLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ lockLambdaQueryWrapper.eq(Lock::getMoudleName,moduleName);
|
|
|
+ lockLambdaQueryWrapper.eq(Lock::getTableName,tableName);
|
|
|
+ lockLambdaQueryWrapper.eq(Lock::getBillId,billId);
|
|
|
+ lockLambdaQueryWrapper.eq(Lock::getTenantId,AuthUtil.getTenantId());
|
|
|
+ Lock lock = lockService.getOne(lockLambdaQueryWrapper);
|
|
|
+ if(lock!=null)
|
|
|
+ {
|
|
|
+ lockService.removeById(lock.getId());
|
|
|
+ return R.success("释放锁成功");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return R.success("释放锁成功");
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|