Commit 3cb90a9d by HlQ

[feat]

1.指标新增静默期功能
2.新增用户订阅集团功能
[bug] 项目关联合同文件 bug 修复
1 parent c90ad753
......@@ -29,8 +29,10 @@ public class MyBatisPlusConfig implements MetaObjectHandler {
var vo = (UserVO) StpUtil.getTokenSession().get("curLoginUser");
this.fillHasGetter(metaObject, "creator", vo.getUserid());
this.fillHasGetter(metaObject, "createBy", vo.getUserid());
this.fillHasGetter(metaObject, "createUser", vo.getUserid());
this.fillHasGetter(metaObject, "updater", vo.getUserid());
this.fillHasGetter(metaObject, "updateBy", vo.getUserid());
this.fillHasGetter(metaObject, "updateUser", vo.getUserid());
} catch (Exception ignored) {
}
}
......
......@@ -177,14 +177,14 @@ public class StoreController {
@GetMapping("/store/rContractFile")
@SaCheckPermission(value = "store:contractFile", orRole = "admin")
public List<FileInfo> contractFile(@RequestParam List<Long> storeIdList) {
return storeService.contractFile(storeIdList);
public List<FileInfo> contractFile(@RequestParam Long storeId) {
return storeService.contractFile(storeId);
}
@GetMapping("/store/rContractFileDetail")
@SaCheckPermission(value = "store:contractFileDetail", orRole = "admin")
public List<Map<String, Number>> contractFileDetail(@RequestParam List<Long> storeIdList) {
return storeService.contractFileDetail(storeIdList);
public Map<String, Number> contractFileDetail(@RequestParam Long storeId) {
return storeService.contractFileDetail(storeId);
}
@GetMapping("/store/logNotify")
......
......@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import vion.model.monitor.RAccountEvent;
import vion.model.monitor.RUserAccount;
import vion.service.monitor.IMAccountService;
import java.util.List;
......@@ -20,15 +21,33 @@ public class MAccountController {
private final IMAccountService accountService;
@GetMapping("/event/{uid}")
@SaCheckPermission(value = "account:event:query", orRole = "admin")
@SaCheckPermission(value = "maccount:event:query", orRole = "admin")
public List<RAccountEvent> getEventById(@PathVariable String uid) {
return accountService.getEventById(uid);
}
@PostMapping("/event/{agentUid}/{uid}")
@SaCheckPermission(value = "account:event:editAndSave", orRole = "admin")
@SaCheckPermission(value = "maccount:event:editAndSave", orRole = "admin")
public String saveEvent(@PathVariable String agentUid, @PathVariable String uid, @RequestBody RAccountEvent event) {
return accountService.saveEvent(agentUid, uid, event);
}
@GetMapping("/subList/{userId}")
@SaCheckPermission(value = "maccount:subList", orRole = "admin")
public List<RUserAccount> subList(@PathVariable Long userId) {
return accountService.subList(userId);
}
@PostMapping("/sub")
@SaCheckPermission(value = "maccount:sub", orRole = "admin")
public String sub(@RequestBody RUserAccount userAccount) {
return accountService.sub(userAccount);
}
@PostMapping("/unsub")
@SaCheckPermission(value = "maccount:unsub", orRole = "admin")
public String unsub(@RequestBody RUserAccount userAccount) {
return accountService.unsub(userAccount);
}
}
......@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*;
import vion.dto.monitor.MallDTO;
import vion.model.monitor.MAccount;
import vion.model.monitor.RMallRemark;
import vion.model.monitor.RMallSilent;
import vion.service.monitor.IMallService;
import vion.service.monitor.IRMallRemarkService;
import vion.vo.monitor.MallVO;
......@@ -101,7 +102,7 @@ public class MallController {
@PostMapping("/remark/{id}")
@SaCheckPermission(value = "mall:remark:edit", orRole = "admin")
public String editRemark(@PathVariable Long id, @RequestBody RMallRemark dto) {
public String updateRemark(@PathVariable Long id, @RequestBody RMallRemark dto) {
dto.setId(id);
return mallRemarkService.updateById(dto) ? "修改成功" : "修改失败";
}
......@@ -111,6 +112,32 @@ public class MallController {
public String removeRemark(@PathVariable Long id) {
return mallRemarkService.removeById(id) ? "删除成功" : "删除失败";
}
// endregion
// region 指标静默期配置
@GetMapping("/silent/{mallUid}")
@SaCheckPermission(value = "mall:silent:list", orRole = "admin")
public List<RMallSilent> listSilent(@PathVariable String mallUid) {
return mallService.listSilent(mallUid);
}
@PostMapping("/silent/{agentUid}/{mallUid}")
@SaCheckPermission(value = "mall:silent:save", orRole = "admin")
public String saveSilent(@PathVariable String agentUid, @PathVariable String mallUid, @RequestBody RMallSilent dto) {
return mallService.saveSilent(agentUid, mallUid, dto);
}
@PostMapping("/silent/{id}")
@SaCheckPermission(value = "mall:silent:edit", orRole = "admin")
public String updateSilent(@PathVariable Long id, @RequestBody RMallSilent dto) {
dto.setId(id);
return mallService.updateSilent(dto);
}
@DeleteMapping("/silent/{id}")
@SaCheckPermission(value = "mall:silent:remove", orRole = "admin")
public String removeSilent(@PathVariable Long id) {
return mallService.removeSilent(id);
}
// endregion
}
......@@ -28,6 +28,7 @@ public class MallDTO extends BaseDTO {
* 所属集团uid
*/
private String accountUid;
private List<String> accountUidList;
private String accountName;
/**
......
package vion.mapper.monitor;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import vion.model.monitor.RMallSilent;
/**
* @author vion
* @date 2025/1/4
*/
public interface RMallSilentMapper extends BaseMapper<RMallSilent> {
}
\ No newline at end of file
package vion.mapper.monitor;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import vion.model.monitor.RUserAccount;
/**
* @author vion
* @date 2025/1/3
*/
public interface RUserAccountMapper extends BaseMapper<RUserAccount> {
}
\ No newline at end of file
......@@ -61,7 +61,7 @@ public class EventRecord extends BaseDTO {
private String threshold;
/**
* 事件状态 0:异常 1:正常 -1:未知
* 事件状态 0:异常 1:正常 -1:未知 2:忽略
*/
@TableField(value = "\"status\"")
private Short status;
......
package vion.model.monitor;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import vion.config.mp.JsonbTypeHandler;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 指标静默期配置表
*/
@Getter
@Setter
@TableName(value = "mr_mall_silent", autoResultMap = true)
public class RMallSilent {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(value = "agent_uid")
private String agentUid;
@TableField(value = "account_uid")
private String accountUid;
@TableField(value = "mall_uid")
private String mallUid;
/**
* 关联指标uid
*/
@TableField(value = "event_uid")
private String eventUid;
/**
* 关联指标类型
*/
@TableField(value = "event_type")
private String eventType;
/**
* 特殊配置json
*/
@TableField(value = "data_json", typeHandler = JsonbTypeHandler.class)
private Object dataJson;
/**
* 静默开始日期
*/
@TableField(value = "start_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate startDate;
/**
* 静默结束日期
*/
@TableField(value = "end_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate endDate;
/**
* 备注
*/
@TableField(value = "remark")
private String remark;
@TableField(value = "create_by", fill = FieldFill.INSERT)
private String createBy;
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
private String updateBy;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
\ No newline at end of file
package vion.model.monitor;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* 用户订阅集团表
*/
@Getter
@Setter
@TableName(value = "mr_user_account")
public class RUserAccount {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户id
*/
@TableField(value = "user_id")
private Long userId;
/**
* 集团id
*/
@TableField(value = "account_id")
private String accountId;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -29,9 +29,9 @@ public interface IStoreService extends MPJBaseService<Store> {
List<Map<String, Number>> fileDetail(List<Long> storeIdList);
List<FileInfo> contractFile(List<Long> storeIdList);
List<FileInfo> contractFile(Long storeId);
List<Map<String, Number>> contractFileDetail(List<Long> storeIdList);
Map<String, Number> contractFileDetail(Long storeId);
Boolean logNotify(Long id, String[] userIdStr);
......
......@@ -438,8 +438,8 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
}
@Override
public List<FileInfo> contractFile(List<Long> storeIdList) {
var contractStoreList = contractStoreService.lambdaQuery().in(RContractStore::getStoreId, storeIdList).list();
public List<FileInfo> contractFile(Long storeId) {
var contractStoreList = contractStoreService.lambdaQuery().eq(RContractStore::getStoreId, storeId).list();
var contractIdList = contractStoreList.stream().map(RContractStore::getContractId).toList();
return fileService.lambdaQuery()
.in(FileInfo::getSourceId, CollUtil.defaultIfEmpty(contractIdList, List.of(-1L)))
......@@ -449,31 +449,27 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
}
@Override
public List<Map<String, Number>> contractFileDetail(List<Long> storeIdList) {
var contractStoreList = contractStoreService.lambdaQuery().in(RContractStore::getStoreId, storeIdList).list();
public Map<String, Number> contractFileDetail(Long storeId) {
var contractStoreList = contractStoreService.lambdaQuery().eq(RContractStore::getStoreId, storeId).list();
var contractIdList = contractStoreList.stream().map(RContractStore::getContractId).toList();
var fileList = fileService.lambdaQuery()
.in(FileInfo::getSourceId, CollUtil.defaultIfEmpty(contractIdList, List.of(-1L)))
.in(FileInfo::getStoreId, -1L)
.in(FileInfo::getSourceType, 7, 8, 9, 10, 11, 12, 13, 14, 33, 34)
.list();
var storeId2FileMap = fileList.stream().collect(Collectors.groupingBy(FileInfo::getStoreId, Collectors.groupingBy(FileInfo::getSourceType)));
return storeIdList.stream().map(storeId -> {
var fileMap = storeId2FileMap.getOrDefault(storeId, Map.of());
var type2CntMap = fileList.stream().collect(Collectors.groupingBy(FileInfo::getSourceType, Collectors.counting()));
Map<String, Number> map = new HashMap<>();
map.put("storeId", storeId);
map.put("7", fileMap.getOrDefault(7, List.of()).size());
map.put("8", fileMap.getOrDefault(8, List.of()).size());
map.put("9", fileMap.getOrDefault(9, List.of()).size());
map.put("10", fileMap.getOrDefault(10, List.of()).size());
map.put("11", fileMap.getOrDefault(11, List.of()).size());
map.put("12", fileMap.getOrDefault(12, List.of()).size());
map.put("13", fileMap.getOrDefault(13, List.of()).size());
map.put("14", fileMap.getOrDefault(14, List.of()).size());
map.put("33", fileMap.getOrDefault(33, List.of()).size());
map.put("34", fileMap.getOrDefault(34, List.of()).size());
map.put("7", type2CntMap.getOrDefault(7, 0L));
map.put("8", type2CntMap.getOrDefault(8, 0L));
map.put("9", type2CntMap.getOrDefault(9, 0L));
map.put("10", type2CntMap.getOrDefault(10, 0L));
map.put("11", type2CntMap.getOrDefault(11, 0L));
map.put("12", type2CntMap.getOrDefault(12, 0L));
map.put("13", type2CntMap.getOrDefault(13, 0L));
map.put("14", type2CntMap.getOrDefault(14, 0L));
map.put("33", type2CntMap.getOrDefault(33, 0L));
map.put("34", type2CntMap.getOrDefault(34, 0L));
return map;
}).toList();
}
@Override
......
......@@ -6,8 +6,10 @@ import org.springframework.stereotype.Service;
import vion.mapper.monitor.MAccountMapper;
import vion.model.monitor.MAccount;
import vion.model.monitor.RAccountEvent;
import vion.model.monitor.RUserAccount;
import vion.service.monitor.IMAccountService;
import vion.service.monitor.IRAccountEventService;
import vion.service.monitor.IRUserAccountService;
import java.util.List;
......@@ -20,6 +22,7 @@ import java.util.List;
public class MAccountServiceImpl extends MPJBaseServiceImpl<MAccountMapper, MAccount> implements IMAccountService {
private final IRAccountEventService accountEventService;
private final IRUserAccountService userAccountService;
@Override
public List<RAccountEvent> getEventById(String uid) {
......@@ -30,7 +33,23 @@ public class MAccountServiceImpl extends MPJBaseServiceImpl<MAccountMapper, MAcc
public String saveEvent(String agentUid, String uid, RAccountEvent event) {
event.setAgentUid(agentUid);
event.setAccountUid(uid);
accountEventService.save(event);
return "";
return accountEventService.save(event) ? "成功" : "失败";
}
@Override
public List<RUserAccount> subList(Long userId) {
return userAccountService.lambdaQuery().eq(RUserAccount::getUserId, userId).list();
}
@Override
public String sub(RUserAccount userAccount) {
return userAccountService.save(userAccount) ? "订阅成功" : "订阅失败";
}
@Override
public String unsub(RUserAccount userAccount) {
return userAccountService.lambdaUpdate()
.eq(RUserAccount::getAccountId, userAccount.getAccountId())
.eq(RUserAccount::getUserId, userAccount.getUserId()).remove() ? "取消订阅成功" : "取消订阅失败";
}
}
......@@ -45,6 +45,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
private final IEventRecordService eventRecordService;
private final IRAgentEventService agentEventService;
private final IRMallRemarkService mallRemarkService;
private final IRMallSilentService mallSilentService;
private final AgentMapper agentMapper;
private final MqttClientTemplate client;
private final Converter converter;
......@@ -99,6 +100,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
.leftJoin(MAccount.class, MAccount::getUid, Mall::getAccountUid)
.leftJoin(Agent.class, Agent::getUid, Mall::getAgentUid)
.eq(Mall::getAttention, 1)
.in(CollUtil.isNotEmpty(dto.getAccountUidList()), Mall::getAccountUid, dto.getAccountUidList())
.orderByDesc(Mall::getAccountUid, Mall::getName);
var mallVOPage = this.selectJoinListPage(Page.of(dto.getPageNum(), dto.getPageSize()), MallVO.class, wrapper);
if (CollUtil.isNotEmpty(mallVOPage.getRecords())) {
......@@ -137,6 +139,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
.leftJoin(Agent.class, Agent::getUid, RAgentEvent::getAgentUid)
.in(RAgentEvent::getEventUid, dto.getEventUidList())
.eq(Agent::getType, dto.getAgentType())
.in(CollUtil.isNotEmpty(dto.getAccountUidList()), RAgentEvent::getAccountUid, dto.getAccountUidList())
.orderByDesc(RAgentEvent::getAccountUid, RAgentEvent::getMallUid);
var agentEventList = agentEventService.selectJoinList(RAgentEvent.class, agentEventWrapper);
if (CollUtil.isEmpty(agentEventList)) {
......@@ -194,6 +197,7 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
.ge(EventRecord::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.eq(EventRecord::getAgentType, dto.getAgentType())
.in(CollUtil.isNotEmpty(dto.getEventUidList()), EventRecord::getEventUid, dto.getEventUidList())
.in(CollUtil.isNotEmpty(dto.getAccountUidList()), EventRecord::getAccountUid, dto.getAccountUidList())
.orderByAsc(EventRecord::getMallUid))
.eq(EventRecord::getStatus, 0);
var eventRecordList = eventRecordService.selectJoinList(EventRecord.class, eventRecWrapper);
......@@ -276,4 +280,26 @@ public class MallServiceImpl extends MPJBaseServiceImpl<MallMapper, Mall> implem
agentEventService.lambdaUpdate().eq(RAgentEvent::getMallUid, attentionMall.getUid()).remove();
return "取消成功";
}
@Override
public List<RMallSilent> listSilent(String mallUid) {
return mallSilentService.lambdaQuery().eq(RMallSilent::getMallUid, mallUid).list();
}
@Override
public String saveSilent(String agentUid, String mallUid, RMallSilent dto) {
dto.setAgentUid(agentUid);
dto.setMallUid(mallUid);
return mallSilentService.save(dto) ? "新增成功" : "新增失败";
}
@Override
public String updateSilent(RMallSilent dto) {
return mallSilentService.updateById(dto) ? "修改成功" : "修改失败";
}
@Override
public String removeSilent(Long id) {
return mallSilentService.removeById(id) ? "删除成功" : "删除失败";
}
}
package vion.service.impl.monitor;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import vion.mapper.monitor.RMallSilentMapper;
import vion.model.monitor.RMallSilent;
import vion.service.monitor.IRMallSilentService;
/**
* @author vion
* @date 2025/1/4
*/
@Service
public class RMallSilentServiceImpl extends ServiceImpl<RMallSilentMapper, RMallSilent> implements IRMallSilentService {
}
package vion.service.impl.monitor;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import vion.mapper.monitor.RUserAccountMapper;
import vion.model.monitor.RUserAccount;
import vion.service.monitor.IRUserAccountService;
/**
* @author vion
* @date 2025/1/3
*/
@Service
public class RUserAccountServiceImpl extends ServiceImpl<RUserAccountMapper, RUserAccount> implements IRUserAccountService {
}
......@@ -3,6 +3,7 @@ package vion.service.monitor;
import com.github.yulichang.base.MPJBaseService;
import vion.model.monitor.MAccount;
import vion.model.monitor.RAccountEvent;
import vion.model.monitor.RUserAccount;
import java.util.List;
......@@ -16,4 +17,10 @@ public interface IMAccountService extends MPJBaseService<MAccount> {
String saveEvent(String agentUid, String uid, RAccountEvent event);
List<RUserAccount> subList(Long userId);
String sub(RUserAccount userAccount);
String unsub(RUserAccount userAccount);
}
......@@ -5,6 +5,7 @@ import com.github.yulichang.base.MPJBaseService;
import vion.dto.monitor.MallDTO;
import vion.model.monitor.MAccount;
import vion.model.monitor.Mall;
import vion.model.monitor.RMallSilent;
import vion.vo.monitor.MallVO;
import java.util.List;
......@@ -33,4 +34,11 @@ public interface IMallService extends MPJBaseService<Mall> {
String cancelAttention(Long id);
List<RMallSilent> listSilent(String mallUid);
String saveSilent(String agentUid, String mallUid, RMallSilent dto);
String updateSilent(RMallSilent dto);
String removeSilent(Long id);
}
package vion.service.monitor;
import com.baomidou.mybatisplus.extension.service.IService;
import vion.model.monitor.RMallSilent;
/**
* @author vion
* @date 2025/1/4
*/
public interface IRMallSilentService extends IService<RMallSilent>{
}
package vion.service.monitor;
import com.baomidou.mybatisplus.extension.service.IService;
import vion.model.monitor.RUserAccount;
/**
* @author vion
* @date 2025/1/3
*/
public interface IRUserAccountService extends IService<RUserAccount>{
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!