19 changed files with 27 additions and 450 deletions
@ -0,0 +1 @@
|
||||
mvn install:install-file -DgroupId=Vastbase -DartifactId=VastbaseG100_jdbc -Dversion=2023120616 -Dfile="VastbaseG100_jdbc_2.9p_2023120616.jar" -Dpackaging=jar |
||||
@ -1,72 +0,0 @@
|
||||
package com.biutag.entity.notice; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
@Data |
||||
@ApiModel("通知记录实体") |
||||
public class NoticeRecord implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@TableId(value="id", type= IdType.AUTO) |
||||
@ApiModelProperty("主键") |
||||
private Integer id; |
||||
|
||||
@ApiModelProperty("场景") |
||||
private Integer scene; |
||||
|
||||
@ApiModelProperty("用户") |
||||
private Integer userId; |
||||
|
||||
@ApiModelProperty("账号") |
||||
private String account; |
||||
|
||||
@ApiModelProperty("编码") |
||||
private String title; |
||||
|
||||
@ApiModelProperty("编码") |
||||
private String code; |
||||
|
||||
@ApiModelProperty("内容") |
||||
private String content; |
||||
|
||||
@ApiModelProperty("错误") |
||||
private String error; |
||||
|
||||
@ApiModelProperty("发送类型: [1=系统, 2=短信, 3=公众号, 4=小程序]") |
||||
private Integer sender; |
||||
|
||||
@ApiModelProperty("接收对象: [1=用户, 2=平台]") |
||||
private Integer receiver; |
||||
|
||||
@ApiModelProperty("通知状态: [0=等待, 1=成功, 2=失败]") |
||||
private Integer status; |
||||
|
||||
@ApiModelProperty("已读状态: [0=未读, 1=已读]") |
||||
private Integer isRead; |
||||
|
||||
@ApiModelProperty("是验证码: [0=否的, 1=是的]") |
||||
private Integer isCaptcha; |
||||
|
||||
@ApiModelProperty("是否删除: [0=否,1=是]") |
||||
private Integer isDelete; |
||||
|
||||
@ApiModelProperty("失效时间") |
||||
private Long expireTime; |
||||
|
||||
@ApiModelProperty("创建时间") |
||||
private Long createTime; |
||||
|
||||
@ApiModelProperty("更新时间") |
||||
private Long updateTime; |
||||
|
||||
@ApiModelProperty("删除时间") |
||||
private Long deleteTime; |
||||
|
||||
} |
||||
@ -1,60 +0,0 @@
|
||||
package com.biutag.entity.notice; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
@Data |
||||
@ApiModel("通知设置实体") |
||||
public class NoticeSetting implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@TableId(value="id", type= IdType.AUTO) |
||||
@ApiModelProperty("ID") |
||||
private Integer id; |
||||
|
||||
@ApiModelProperty("场景编号") |
||||
private Integer scene; |
||||
|
||||
@ApiModelProperty("场景名称") |
||||
private String name; |
||||
|
||||
@ApiModelProperty("场景描述") |
||||
private String remarks; |
||||
|
||||
@ApiModelProperty("接收人员: [1=用户, 2=平台]") |
||||
private Integer recipient; |
||||
|
||||
@ApiModelProperty("通知类型: [1=业务, 2=验证码]") |
||||
private Integer type; |
||||
|
||||
@ApiModelProperty("系统的通知设置") |
||||
private String systemNotice; |
||||
|
||||
@ApiModelProperty("短信的通知设置") |
||||
private String smsNotice; |
||||
|
||||
@ApiModelProperty("公众号通知设置") |
||||
private String oaNotice; |
||||
|
||||
@ApiModelProperty("小程序通知设置") |
||||
private String mnpNotice; |
||||
|
||||
@ApiModelProperty("是否删除: [0=否, 1=是]") |
||||
private Integer isDelete; |
||||
|
||||
@ApiModelProperty("创建时间") |
||||
private Long createTime; |
||||
|
||||
@ApiModelProperty("更新时间") |
||||
private Long updateTime; |
||||
|
||||
@ApiModelProperty("删除时间") |
||||
private Long deleteTime; |
||||
|
||||
} |
||||
@ -1,12 +0,0 @@
|
||||
package com.biutag.mapper.notice; |
||||
|
||||
import com.biutag.core.basics.IBaseMapper; |
||||
import com.biutag.entity.notice.NoticeRecord; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* 通知记录Mapper |
||||
*/ |
||||
@Mapper |
||||
public interface NoticeRecordMapper extends IBaseMapper<NoticeRecord> { |
||||
} |
||||
@ -1,12 +0,0 @@
|
||||
package com.biutag.mapper.notice; |
||||
|
||||
import com.biutag.core.basics.IBaseMapper; |
||||
import com.biutag.entity.notice.NoticeSetting; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* 通知设置Mapper |
||||
*/ |
||||
@Mapper |
||||
public interface NoticeSettingMapper extends IBaseMapper<NoticeSetting> { |
||||
} |
||||
@ -1,12 +0,0 @@
|
||||
package com.biutag.mapper.user; |
||||
|
||||
import com.biutag.core.basics.IBaseMapper; |
||||
import com.biutag.entity.user.UserAuth; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* 用户授权Mapper |
||||
*/ |
||||
@Mapper |
||||
public interface UserAuthMapper extends IBaseMapper<UserAuth> { |
||||
} |
||||
@ -1,48 +0,0 @@
|
||||
package com.biutag.lan.controller.setting; |
||||
|
||||
import com.biutag.lan.aop.Log; |
||||
import com.biutag.lan.service.ISettingNoticeService; |
||||
import com.biutag.lan.vo.setting.SettingNoticeDetailVo; |
||||
import com.biutag.lan.vo.setting.SettingNoticeListedVo; |
||||
import com.biutag.core.AjaxResult; |
||||
import com.biutag.validator.annotation.IDMust; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.springframework.validation.annotation.Validated; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import jakarta.annotation.Resource; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
@RestController |
||||
@RequestMapping("api/setting/notice") |
||||
@Api(tags = "配置消息通知") |
||||
public class SettingNoticeController { |
||||
|
||||
@Resource |
||||
ISettingNoticeService iSettingNoticeService; |
||||
|
||||
@GetMapping("/list") |
||||
@ApiOperation(value="通知设置列表") |
||||
public AjaxResult<List<SettingNoticeListedVo>> list(@RequestParam Integer recipient) { |
||||
List<SettingNoticeListedVo> list = iSettingNoticeService.list(recipient); |
||||
return AjaxResult.success(list); |
||||
} |
||||
|
||||
@GetMapping("/detail") |
||||
@ApiOperation(value="通知设置详情") |
||||
public AjaxResult<SettingNoticeDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) { |
||||
SettingNoticeDetailVo vo = iSettingNoticeService.detail(id); |
||||
return AjaxResult.success(vo); |
||||
} |
||||
|
||||
@Log(title = "通知设置编辑") |
||||
@PostMapping("/save") |
||||
@ApiOperation(value="通知设置编辑") |
||||
public AjaxResult<Void> save(@RequestBody Map<String, Object> params) { |
||||
iSettingNoticeService.save(params); |
||||
return AjaxResult.success(); |
||||
} |
||||
|
||||
} |
||||
@ -1,40 +0,0 @@
|
||||
package com.biutag.lan.service; |
||||
|
||||
import com.biutag.lan.vo.setting.SettingNoticeDetailVo; |
||||
import com.biutag.lan.vo.setting.SettingNoticeListedVo; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 通知设置服务接口类 |
||||
*/ |
||||
public interface ISettingNoticeService { |
||||
|
||||
/** |
||||
* 通知设置列表 |
||||
* |
||||
* @author |
||||
* @param recipient 1=用户, 2=平台 |
||||
* @return List<NoticeSettingListVo> |
||||
*/ |
||||
List<SettingNoticeListedVo> list(Integer recipient); |
||||
|
||||
/** |
||||
* 通知设置详情 |
||||
* |
||||
* @author |
||||
* @param id 主键 |
||||
* @return NoticeDetailVo |
||||
*/ |
||||
SettingNoticeDetailVo detail(Integer id); |
||||
|
||||
/** |
||||
* 通知设置保存 |
||||
* |
||||
* @author |
||||
* @param params 参数 |
||||
*/ |
||||
void save(Map<String, Object> params); |
||||
|
||||
} |
||||
@ -1,169 +0,0 @@
|
||||
package com.biutag.lan.service.impl; |
||||
|
||||
import com.alibaba.fastjson2.JSON; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.biutag.lan.service.ISettingNoticeService; |
||||
import com.biutag.lan.vo.setting.SettingNoticeDetailVo; |
||||
import com.biutag.lan.vo.setting.SettingNoticeListedVo; |
||||
import com.biutag.entity.notice.NoticeSetting; |
||||
import com.biutag.mapper.notice.NoticeSettingMapper; |
||||
import com.biutag.util.MapUtils; |
||||
import com.biutag.util.StringUtils; |
||||
import com.biutag.util.TimeUtils; |
||||
import org.springframework.beans.BeanUtils; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import jakarta.annotation.Resource; |
||||
import java.util.LinkedList; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 通知设置服务实现类 |
||||
*/ |
||||
@Service |
||||
public class SettingNoticeServiceImpl implements ISettingNoticeService { |
||||
|
||||
@Resource |
||||
NoticeSettingMapper noticeSettingMapper; |
||||
|
||||
/** |
||||
* 通知设置列表 |
||||
* |
||||
* @author |
||||
* @param recipient 1=用户, 2=平台 |
||||
* @return List<NoticeSettingListVo> |
||||
*/ |
||||
@Override |
||||
public List<SettingNoticeListedVo> list(Integer recipient) { |
||||
QueryWrapper<NoticeSetting> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("recipient", recipient); |
||||
queryWrapper.eq("is_delete", 0); |
||||
queryWrapper.orderByAsc("id"); |
||||
|
||||
List<NoticeSetting> noticeSettings = noticeSettingMapper.selectList(queryWrapper); |
||||
List<SettingNoticeListedVo> list = new LinkedList<>(); |
||||
for (NoticeSetting n : noticeSettings) { |
||||
SettingNoticeListedVo vo = new SettingNoticeListedVo(); |
||||
BeanUtils.copyProperties(n, vo); |
||||
|
||||
Map<String, String> systemMap = MapUtils.jsonToMap(n.getSystemNotice()); |
||||
Map<String, String> smsMap = MapUtils.jsonToMap(n.getSmsNotice()); |
||||
Map<String, String> oaMap = MapUtils.jsonToMap(n.getOaNotice()); |
||||
Map<String, String> mnpMap = MapUtils.jsonToMap(n.getMnpNotice()); |
||||
|
||||
vo.setType(n.getType()==1?"业务通知":"验证码"); |
||||
vo.setSystemStatus(Integer.parseInt(systemMap.getOrDefault("status", "0"))); |
||||
vo.setSmsStatus(Integer.parseInt(smsMap.getOrDefault("status", "0"))); |
||||
vo.setOaStatus(Integer.parseInt(oaMap.getOrDefault("status", "0"))); |
||||
vo.setMnpStatus(Integer.parseInt(mnpMap.getOrDefault("status", "0"))); |
||||
vo.setCreateTime(TimeUtils.timestampToDate(n.getCreateTime())); |
||||
vo.setUpdateTime(TimeUtils.timestampToDate(n.getUpdateTime())); |
||||
list.add(vo); |
||||
} |
||||
|
||||
return list; |
||||
} |
||||
|
||||
/** |
||||
* 通知设置详情 |
||||
* |
||||
* @author |
||||
* @param id 主键 |
||||
* @return NoticeSettingDetailVo |
||||
* |
||||
*/ |
||||
@Override |
||||
public SettingNoticeDetailVo detail(Integer id) { |
||||
NoticeSetting noticeSetting = noticeSettingMapper.selectOne(new QueryWrapper<NoticeSetting>() |
||||
.select(NoticeSetting.class, info -> |
||||
!info.getColumn().equals("is_delete") && |
||||
!info.getColumn().equals("delete_time") && |
||||
!info.getColumn().equals("create_time") && |
||||
!info.getColumn().equals("update_time") |
||||
) |
||||
.eq("id", id) |
||||
.eq("is_delete", 0) |
||||
.last("limit 1")); |
||||
|
||||
Map<String, Object> systemMap = MapUtils.jsonToMapAsObj(noticeSetting.getSystemNotice()); |
||||
Map<String, Object> oaMap = MapUtils.jsonToMapAsObj(noticeSetting.getOaNotice()); |
||||
Map<String, Object> mnpMap = MapUtils.jsonToMapAsObj(noticeSetting.getMnpNotice()); |
||||
Map<String, Object> smsMap = MapUtils.jsonToMapAsObj(noticeSetting.getSmsNotice()); |
||||
|
||||
smsMap.put("tips", JSON.parseArray(smsMap.get("tips").toString())); |
||||
|
||||
SettingNoticeDetailVo vo = new SettingNoticeDetailVo(); |
||||
BeanUtils.copyProperties(noticeSetting, vo); |
||||
vo.setType(noticeSetting.getType().equals(1)?"业务通知":"验证码"); |
||||
vo.setSystemNotice(systemMap); |
||||
vo.setOaNotice(oaMap); |
||||
vo.setMnpNotice(mnpMap); |
||||
vo.setSmsNotice(smsMap); |
||||
return vo; |
||||
} |
||||
|
||||
/** |
||||
* 通知设置保存 |
||||
* |
||||
* @author |
||||
* @param params 参数 |
||||
*/ |
||||
@Override |
||||
public void save(Map<String, Object> params) { |
||||
Integer id = Integer.parseInt(params.get("id").toString()); |
||||
NoticeSetting noticeSetting = noticeSettingMapper.selectOne(new QueryWrapper<NoticeSetting>() |
||||
.eq("id", id) |
||||
.eq("is_delete", 0) |
||||
.last("limit 1")); |
||||
|
||||
Map<String, String> systemParam = MapUtils.objectToMap(params.get("systemNotice")); |
||||
Map<String, String> systemMap = MapUtils.jsonToMap(noticeSetting.getSystemNotice()); |
||||
if (StringUtils.isNotEmpty(systemMap)) { |
||||
systemMap.put("title", systemParam.getOrDefault("title", "")); |
||||
systemMap.put("content", systemParam.getOrDefault("content", "")); |
||||
systemMap.put("tips", systemParam.getOrDefault("tips", "")); |
||||
systemMap.put("status", systemParam.getOrDefault("status", "0")); |
||||
} |
||||
|
||||
Map<String, String> smsParam = MapUtils.objectToMap(params.get("smsNotice")); |
||||
Map<String, String> smsMap = MapUtils.jsonToMap(noticeSetting.getSmsNotice()); |
||||
if (StringUtils.isNotEmpty(smsMap)) { |
||||
smsMap.put("templateId", smsParam.getOrDefault("templateId", "")); |
||||
smsMap.put("content", smsParam.getOrDefault("content", "")); |
||||
smsMap.put("tips", smsParam.getOrDefault("tips", "")); |
||||
smsMap.put("status", smsParam.getOrDefault("status", "0")); |
||||
} |
||||
|
||||
Map<String, String> oaParam = MapUtils.objectToMap(params.get("oaNotice")); |
||||
Map<String, String> oaMap = MapUtils.jsonToMap(noticeSetting.getOaNotice()); |
||||
if (StringUtils.isNotEmpty(oaMap)) { |
||||
oaMap.put("name", oaParam.getOrDefault("name", "")); |
||||
oaMap.put("first", oaParam.getOrDefault("first", "")); |
||||
oaMap.put("remark", oaParam.getOrDefault("remark", "")); |
||||
oaMap.put("templateId", oaParam.getOrDefault("templateId", "")); |
||||
oaMap.put("templateSn", oaParam.getOrDefault("templateSn", "")); |
||||
oaMap.put("tpl", oaParam.getOrDefault("tpl", "")); |
||||
oaMap.put("tips", oaParam.getOrDefault("tips", "")); |
||||
oaMap.put("status", oaParam.getOrDefault("status", "0")); |
||||
} |
||||
|
||||
Map<String, String> mnpParam = MapUtils.objectToMap(params.get("mnpNotice")); |
||||
Map<String, String> mnpMap = MapUtils.jsonToMap(noticeSetting.getMnpNotice()); |
||||
if (StringUtils.isNotEmpty(mnpParam)) { |
||||
mnpMap.put("templateId", mnpParam.get("templateId")); |
||||
mnpMap.put("templateSn", mnpParam.get("templateSn")); |
||||
mnpMap.put("tpl", mnpParam.get("tpl")); |
||||
mnpMap.put("tips", mnpParam.get("tips")); |
||||
mnpMap.put("status", mnpParam.getOrDefault("status", "0")); |
||||
} |
||||
|
||||
noticeSetting.setSystemNotice(JSON.toJSONString(systemMap)); |
||||
noticeSetting.setSmsNotice(JSON.toJSONString(smsMap)); |
||||
noticeSetting.setOaNotice(JSON.toJSONString(oaMap)); |
||||
noticeSetting.setMnpNotice(JSON.toJSONString(mnpMap)); |
||||
noticeSetting.setUpdateTime(System.currentTimeMillis() / 1000); |
||||
noticeSettingMapper.updateById(noticeSetting); |
||||
} |
||||
|
||||
} |
||||
@ -1 +1 @@
|
||||
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 YK |
||||
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NrN |
||||
Loading…
Reference in new issue