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