枚举代替硬编码
parent
c4df5fd9a8
commit
83667e5248
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.agri.common.enums;
|
||||||
|
|
||||||
|
public enum AgriEnum {
|
||||||
|
|
||||||
|
|
||||||
|
SCAN(0, "扫码"),
|
||||||
|
INVITE(1, "邀请"),
|
||||||
|
OWNER(3, "大棚所有者"),
|
||||||
|
MANUAL(0, "手动模式"),
|
||||||
|
ALARM_CLOSE(0, "告警关闭"),
|
||||||
|
NO_DELETE(0, "未删除"),
|
||||||
|
ENABLED(1, "已生效"),
|
||||||
|
PENDING_ACCEPTANCE(2, "待接受邀请"),
|
||||||
|
WARN(0, "警告"),
|
||||||
|
SUCCESS(1, "成功");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String desc;
|
||||||
|
AgriEnum(Integer code, String desc)
|
||||||
|
{
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDesc() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package com.agri.system.service.impl;
|
package com.agri.system.service.impl;
|
||||||
|
|
||||||
import com.agri.common.core.domain.entity.SysUser;
|
import com.agri.common.core.domain.entity.SysUser;
|
||||||
|
import com.agri.common.enums.AgriEnum;
|
||||||
import com.agri.common.utils.DateUtils;
|
import com.agri.common.utils.DateUtils;
|
||||||
import com.agri.common.utils.SecurityUtils;
|
import com.agri.common.utils.SecurityUtils;
|
||||||
|
import com.agri.common.utils.wechat.WxUtil;
|
||||||
import com.agri.system.domain.SysAgriInfo;
|
import com.agri.system.domain.SysAgriInfo;
|
||||||
import com.agri.system.domain.SysUserAgri;
|
import com.agri.system.domain.SysUserAgri;
|
||||||
import com.agri.system.domain.vo.AgriInfoView;
|
import com.agri.system.domain.vo.AgriInfoView;
|
||||||
|
|
@ -131,102 +133,128 @@ public class SysAgriInfoServiceImpl extends ServiceImpl<SysAgriInfoMapper, SysAg
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String,Object> addAgriFromMobile(SysAgriInfo sysAgriInfo) {
|
public Map<String,Object> addAgriFromMobile(SysAgriInfo sysAgriInfo) {
|
||||||
|
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
resultMap.put("code", 1);
|
resultMap.put("code", AgriEnum.SUCCESS.getCode());
|
||||||
resultMap.put("msg", "添加大棚成功");
|
resultMap.put("msg", "添加大棚成功");
|
||||||
Integer sourceCode = sysAgriInfo.getSourceCode();
|
Integer sourceCode = sysAgriInfo.getSourceCode();
|
||||||
// 邀请是前端传值,扫码是自己获取
|
// 1. 区分扫码/邀请的userId来源
|
||||||
Long userId;
|
Long userId;
|
||||||
if (sourceCode.equals(0)) {
|
if (sourceCode.equals(AgriEnum.WARN.getCode())) {
|
||||||
|
// 扫码:userId取当前登录用户
|
||||||
userId = SecurityUtils.getUserId();
|
userId = SecurityUtils.getUserId();
|
||||||
} else {
|
} else {
|
||||||
|
// 邀请:userId取前端传入的值
|
||||||
userId = sysAgriInfo.getUserId();
|
userId = sysAgriInfo.getUserId();
|
||||||
}
|
}
|
||||||
sysAgriInfo.setUserId(userId);
|
sysAgriInfo.setUserId(userId);
|
||||||
SysAgriInfo agriInfo = super.lambdaQuery()
|
try {
|
||||||
.eq(SysAgriInfo::getImei, sysAgriInfo.getImei())
|
|
||||||
.one();
|
|
||||||
// 默认手动模式
|
|
||||||
sysAgriInfo.setWorkMode(0);
|
|
||||||
// 默认关闭告警开关
|
|
||||||
sysAgriInfo.setAlarmStatus(0);
|
|
||||||
sysAgriInfo.setIsDeleted(0);
|
|
||||||
SysUserAgri sysUserAgri = new SysUserAgri();
|
|
||||||
sysUserAgri.setAgriId(sysAgriInfo.getImei());
|
|
||||||
sysUserAgri.setUserId(userId);
|
|
||||||
sysUserAgri.setInviteBy(SecurityUtils.getUserId());
|
|
||||||
sysUserAgri.setInviteTime(new Date());
|
|
||||||
sysUserAgri.setRemark("用户所有者绑定");
|
|
||||||
|
|
||||||
// 大棚未添加。没有大棚信息就是没有
|
// 2. 查询大棚是否已存在
|
||||||
if (ObjectUtils.isEmpty(agriInfo)) {
|
SysAgriInfo agriInfo = super.lambdaQuery()
|
||||||
int insert = baseMapper.insert(sysAgriInfo);
|
.eq(SysAgriInfo::getImei, sysAgriInfo.getImei())
|
||||||
if (insert > 0 && !SecurityUtils.isAdmin()) {
|
.one();
|
||||||
sysUserAgri.setRole(3);
|
|
||||||
sysUserAgri.setStatus(1);
|
// 3. 大棚默认参数设置
|
||||||
sysUserAgri.setAcceptTime(new Date());
|
sysAgriInfo.setWorkMode(AgriEnum.MANUAL.getCode());// 默认手动模式
|
||||||
userAgriService.save(sysUserAgri);
|
sysAgriInfo.setAlarmStatus(AgriEnum.ALARM_CLOSE.getCode());// 默认关闭告警开关
|
||||||
|
sysAgriInfo.setIsDeleted(AgriEnum.NO_DELETE.getCode());
|
||||||
|
|
||||||
|
// 4. 构建用户-大棚绑定基础对象
|
||||||
|
SysUserAgri sysUserAgri = new SysUserAgri();
|
||||||
|
sysUserAgri.setAgriId(sysAgriInfo.getImei());
|
||||||
|
sysUserAgri.setUserId(userId);
|
||||||
|
sysUserAgri.setInviteBy(SecurityUtils.getUserId());
|
||||||
|
sysUserAgri.setInviteTime(new Date());
|
||||||
|
sysUserAgri.setRemark("用户所有者绑定");
|
||||||
|
|
||||||
|
// 方法开头先判断管理员(如需放行新增操作,可在新增逻辑内处理)
|
||||||
|
if (SecurityUtils.isAdmin()) {
|
||||||
|
// 管理员仅执行大棚新增,不绑定用户
|
||||||
|
if (ObjectUtils.isEmpty(agriInfo)) {
|
||||||
|
baseMapper.insert(sysAgriInfo);
|
||||||
|
}
|
||||||
|
resultMap.put("msg", "添加大棚成功");
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// 管理员无需添加直接返回
|
// 5. 大棚未添加:新增大棚 + 绑定用户(仅非管理员)
|
||||||
if (SecurityUtils.isAdmin()) {
|
if (ObjectUtils.isEmpty(agriInfo)) {
|
||||||
resultMap.put("msg", "添加大棚成功");
|
int insert = baseMapper.insert(sysAgriInfo);
|
||||||
return resultMap;
|
if (insert > 0) {
|
||||||
}
|
// 扫码/首次绑定场景:后端设置固定值(非邀请场景)
|
||||||
/// 1. 大棚已添加
|
sysUserAgri.setRole(AgriEnum.OWNER.getCode());
|
||||||
/// 1).当前大棚已添加但未绑定用户
|
sysUserAgri.setStatus(AgriEnum.ENABLED.getCode());
|
||||||
List<SysUserAgri> userAgriList = userAgriService.lambdaQuery()
|
sysUserAgri.setAcceptTime(new Date());
|
||||||
.eq(SysUserAgri::getAgriId, sysAgriInfo.getImei())
|
userAgriService.save(sysUserAgri);
|
||||||
.list();
|
return resultMap;
|
||||||
if (CollectionUtils.isEmpty(userAgriList)) {
|
}
|
||||||
sysUserAgri.setRole(3);
|
}
|
||||||
sysUserAgri.setStatus(1);
|
// 6. 管理员逻辑:仅新增大棚,不绑定用户 ----->前移
|
||||||
sysUserAgri.setAcceptTime(new Date());
|
|
||||||
|
// 7. 大棚已存在:处理绑定逻辑
|
||||||
|
List<SysUserAgri> userAgriList = userAgriService.lambdaQuery()
|
||||||
|
.eq(SysUserAgri::getAgriId, sysAgriInfo.getImei())
|
||||||
|
.list();
|
||||||
|
|
||||||
|
// 7.1 大棚已存在但未绑定任何用户:扫码绑定(后端设固定值)
|
||||||
|
if (CollectionUtils.isEmpty(userAgriList)) {
|
||||||
|
sysUserAgri.setRole(AgriEnum.OWNER.getCode());
|
||||||
|
sysUserAgri.setStatus(AgriEnum.ENABLED.getCode());
|
||||||
|
sysUserAgri.setAcceptTime(new Date());
|
||||||
|
userAgriService.save(sysUserAgri);
|
||||||
|
resultMap.put("msg", "关联用户成功!");
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 7.2 校验当前用户是否已绑定该大棚
|
||||||
|
Optional<SysUserAgri> optional = userAgriList.stream()
|
||||||
|
.filter(userAgri -> userAgri.getUserId().equals(userId)).findFirst();
|
||||||
|
|
||||||
|
// 7.3 扫码场景:大棚已绑定其他用户 → 直接提示返回
|
||||||
|
if (AgriEnum.SCAN.getCode().equals(sourceCode)
|
||||||
|
&& (!optional.isPresent() || !optional.get().getRole().equals(3))) {
|
||||||
|
resultMap.put("code", AgriEnum.WARN.getCode());
|
||||||
|
resultMap.put("msg","当前大棚已被关联,请联系大棚所有者!");
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 7.4 重复绑定/重复邀请 → 提示返回
|
||||||
|
if (optional.isPresent()) {
|
||||||
|
resultMap.put("code", AgriEnum.WARN.getCode());
|
||||||
|
resultMap.put("msg","已关联当前大棚,请勿重复绑定!");
|
||||||
|
if (sourceCode.equals(AgriEnum.INVITE.getCode())) {
|
||||||
|
resultMap.put("msg","该用户已被邀请,请勿重复关联!");
|
||||||
|
}
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
// ---------扫码场景到此为止,强制返回,避免进入邀请逻辑--------
|
||||||
|
if (AgriEnum.INVITE.getCode().equals(sourceCode)) {
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
// 8. 邀请场景(仅sourceCode=1能走到这里)
|
||||||
|
// 8.1 校验绑定数量上限
|
||||||
|
if (userAgriList.size()>=agriManagerNum) {
|
||||||
|
resultMap.put("code", AgriEnum.WARN.getCode());
|
||||||
|
resultMap.put("msg","当前大棚关联超过限制,请联系大棚所有者!");
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8.2 邀请场景:从前端入参获取role、status、acceptTime(核心规则)
|
||||||
|
sysUserAgri.setStatus(AgriEnum.PENDING_ACCEPTANCE.getCode());
|
||||||
|
sysUserAgri.setRemark("用户邀请");
|
||||||
userAgriService.save(sysUserAgri);
|
userAgriService.save(sysUserAgri);
|
||||||
resultMap.put("msg", "关联用户成功!");
|
// todo 向对应人发送通知
|
||||||
return resultMap;
|
if (AgriEnum.WARN.getCode().equals(sourceCode)) {
|
||||||
}
|
resultMap.put("msg", "邀请已发送,请等待确认");
|
||||||
// 大棚已经扫码 过来只有所有者和非所有者
|
|
||||||
/// 2).当前大棚已绑定当前用户且又扫了次码
|
|
||||||
Optional<SysUserAgri> optional = userAgriList.stream()
|
|
||||||
.filter(userAgri -> userAgri.getUserId().equals(userId)).findFirst();
|
|
||||||
// 扫码,没关联上大棚,大棚有关联用户,但是没当前用户 提示大棚已被关联
|
|
||||||
if (Integer.valueOf(0).equals(sourceCode)
|
|
||||||
&& (!optional.isPresent() || !optional.get().getRole().equals(3))) {
|
|
||||||
resultMap.put("code", 0);
|
|
||||||
resultMap.put("msg","当前大棚已被关联,请联系大棚所有者!");
|
|
||||||
return resultMap;
|
|
||||||
}
|
|
||||||
// 扫码或邀请,是关联着者,就应该提示不应重复绑定;
|
|
||||||
if (optional.isPresent()) {
|
|
||||||
resultMap.put("code", 0);
|
|
||||||
resultMap.put("msg","已关联当前大棚,请勿重复绑定!");
|
|
||||||
if (sourceCode.equals(1)) {
|
|
||||||
resultMap.put("msg","该用户已被邀请,请勿重复关联!");
|
|
||||||
}
|
}
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
} catch (Exception e) {
|
||||||
// ---------扫码场景到此为止,强制返回,避免进入邀请逻辑-------- 扫码有用户。但是没绑定
|
log.error("绑定大棚用户失败,agriId={}, msg={}", e);
|
||||||
if (Integer.valueOf(0).equals(sourceCode)) {
|
resultMap.put("code", AgriEnum.WARN.getCode());
|
||||||
|
resultMap.put("msg", "系统异常,绑定失败");
|
||||||
|
WxUtil.pushText("【移动端添加大棚失败】来源:"+(sourceCode==0?"扫码":"邀请")+"\nuserId: 【"+userId+"】\ncause: "+e);
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
/// 3).绑定用户超过数量
|
|
||||||
if (userAgriList.size()>=agriManagerNum) {
|
|
||||||
resultMap.put("code", 0);
|
|
||||||
resultMap.put("msg","当前大棚关联超过限制,请联系大棚所有者!");
|
|
||||||
return resultMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// 4).有所有者,当前用户非所有者 此处只可能为邀请时逻辑
|
|
||||||
sysUserAgri.setStatus(2);
|
|
||||||
sysUserAgri.setRemark("用户邀请");
|
|
||||||
userAgriService.save(sysUserAgri);
|
|
||||||
if (Integer.valueOf(1).equals(sourceCode)) {
|
|
||||||
resultMap.put("msg", "邀请已发送,请等待确认");
|
|
||||||
}
|
|
||||||
return resultMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue