枚举代替硬编码

master
lld 2026-02-16 01:52:55 +08:00
parent c4df5fd9a8
commit 83667e5248
2 changed files with 139 additions and 79 deletions

View File

@ -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;
}
}

View File

@ -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;
} }