From 984dd9cb4f6d93052c3f45b49b566b048430e157 Mon Sep 17 00:00:00 2001 From: 3y Date: Sun, 23 Jan 2022 22:41:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=A8=A1=E6=9D=BF=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/java3y/austin/enums/AuditStatus.java | 28 ++++++ .../java3y/austin/enums/MessageStatus.java | 31 +++++++ .../com/java3y/austin/enums/TemplateType.java | 4 +- .../java3y/austin/dao/MessageTemplateDao.java | 24 ++++- .../java3y/austin/domain/MessageTemplate.java | 5 +- .../controller/MessageTemplateController.java | 73 +++++++++++++--- .../service/MessageTemplateService.java | 63 ++++++++++++++ .../impl/MessageTemplateServiceImpl.java | 87 +++++++++++++++++++ .../com/java3y/austin/utils/ConvertMap.java | 67 ++++++++++++++ .../austin/vo/MessageTemplateParam.java | 30 +++++++ .../java3y/austin/vo/MessageTemplateVo.java | 9 +- 11 files changed, 402 insertions(+), 19 deletions(-) create mode 100644 austin-common/src/main/java/com/java3y/austin/enums/AuditStatus.java create mode 100644 austin-common/src/main/java/com/java3y/austin/enums/MessageStatus.java create mode 100644 austin-web/src/main/java/com/java3y/austin/service/MessageTemplateService.java create mode 100644 austin-web/src/main/java/com/java3y/austin/service/impl/MessageTemplateServiceImpl.java create mode 100644 austin-web/src/main/java/com/java3y/austin/utils/ConvertMap.java create mode 100644 austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateParam.java diff --git a/austin-common/src/main/java/com/java3y/austin/enums/AuditStatus.java b/austin-common/src/main/java/com/java3y/austin/enums/AuditStatus.java new file mode 100644 index 0000000..15b55e9 --- /dev/null +++ b/austin-common/src/main/java/com/java3y/austin/enums/AuditStatus.java @@ -0,0 +1,28 @@ +package com.java3y.austin.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +/** + * @author 3y + * @date 2022/1/22 + */ +@Getter +@ToString +@AllArgsConstructor +public enum AuditStatus { + + /** + * 10.待审核 20.审核成功 30.被拒绝' + */ + WAIT_AUDIT(10, "待审核"), + AUDIT_SUCCESS(20, "审核成功"), + AUDIT_REJECT(30, "被拒绝"); + + private Integer code; + private String description; + + +} diff --git a/austin-common/src/main/java/com/java3y/austin/enums/MessageStatus.java b/austin-common/src/main/java/com/java3y/austin/enums/MessageStatus.java new file mode 100644 index 0000000..29bcbfe --- /dev/null +++ b/austin-common/src/main/java/com/java3y/austin/enums/MessageStatus.java @@ -0,0 +1,31 @@ +package com.java3y.austin.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +/** + * @author 3y + * @date 2022/1/22 + */ +@Getter +@ToString +@AllArgsConstructor +public enum MessageStatus { + + /** + * 10.新建 20.停用 30.启用 40.等待发送 50.发送中 60.发送成功 70.发送失败 + */ + INIT(10, "初始化状态"), + STOP(20, "停用"), + RUN(30, "启用"), + PENDING(40, "等待发送"), + SENDING(50, "发送中"), + SEND_SUCCESS(60, "发送成功"), + SEND_FAIL(70, "发送失败"); + + private Integer code; + private String description; + + +} diff --git a/austin-common/src/main/java/com/java3y/austin/enums/TemplateType.java b/austin-common/src/main/java/com/java3y/austin/enums/TemplateType.java index 2e87754..b5a39eb 100644 --- a/austin-common/src/main/java/com/java3y/austin/enums/TemplateType.java +++ b/austin-common/src/main/java/com/java3y/austin/enums/TemplateType.java @@ -13,8 +13,8 @@ import lombok.ToString; @AllArgsConstructor public enum TemplateType { - OPERATION(10, "运营类的模板"), - TECHNOLOGY(20, "技术类的模板"), + CLOCKING(10, "定时类的模板(后台定时调用)"), + REALTIME(20, "实时类的模板(接口实时调用)"), ; private Integer code; diff --git a/austin-support/src/main/java/com/java3y/austin/dao/MessageTemplateDao.java b/austin-support/src/main/java/com/java3y/austin/dao/MessageTemplateDao.java index 3570f4b..297c442 100644 --- a/austin-support/src/main/java/com/java3y/austin/dao/MessageTemplateDao.java +++ b/austin-support/src/main/java/com/java3y/austin/dao/MessageTemplateDao.java @@ -1,12 +1,32 @@ package com.java3y.austin.dao; import com.java3y.austin.domain.MessageTemplate; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; /** * 消息模板Dao * @author 3y */ -public interface MessageTemplateDao extends CrudRepository { +public interface MessageTemplateDao extends JpaRepository { + + + /** + * 查询 列表(分页) + * @param deleted 0:未删除 1:删除 + * @param pageable 分页对象 + * @return + */ + List findAllByIsDeletedEquals(Integer deleted, Pageable pageable); + + + /** + * 统计未删除的条数 + * @param deleted + * @return + */ + Long countByIsDeletedEquals(Integer deleted); } diff --git a/austin-support/src/main/java/com/java3y/austin/domain/MessageTemplate.java b/austin-support/src/main/java/com/java3y/austin/domain/MessageTemplate.java index ef01078..beabaf2 100644 --- a/austin-support/src/main/java/com/java3y/austin/domain/MessageTemplate.java +++ b/austin-support/src/main/java/com/java3y/austin/domain/MessageTemplate.java @@ -5,23 +5,26 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import java.io.Serializable; @Data @Builder @NoArgsConstructor @AllArgsConstructor @Entity +@Accessors(chain = true) /** * * 消息模板DO * @author 3y */ -public class MessageTemplate { +public class MessageTemplate implements Serializable { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) diff --git a/austin-web/src/main/java/com/java3y/austin/controller/MessageTemplateController.java b/austin-web/src/main/java/com/java3y/austin/controller/MessageTemplateController.java index 40ee2d3..f68f5dd 100644 --- a/austin-web/src/main/java/com/java3y/austin/controller/MessageTemplateController.java +++ b/austin-web/src/main/java/com/java3y/austin/controller/MessageTemplateController.java @@ -1,27 +1,40 @@ package com.java3y.austin.controller; -import com.java3y.austin.dao.MessageTemplateDao; +import cn.hutool.core.util.StrUtil; import com.java3y.austin.domain.MessageTemplate; +import com.java3y.austin.service.MessageTemplateService; +import com.java3y.austin.utils.ConvertMap; import com.java3y.austin.vo.BasicResultVO; +import com.java3y.austin.vo.MessageTemplateParam; import com.java3y.austin.vo.MessageTemplateVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * 消息模板管理Controller + * * @author 3y */ @RestController @RequestMapping("/messageTemplate") @Api("发送消息") -@CrossOrigin(origins = "http://localhost:3000", allowCredentials = "true") +@CrossOrigin(origins = "http://localhost:3000", allowCredentials = "true", allowedHeaders = "*") public class MessageTemplateController { + + private static final List flatFieldName = Arrays.asList("msgContent"); + + @Autowired - private MessageTemplateDao messageTemplateDao; + private MessageTemplateService messageTemplateService; /** * 如果Id存在,则修改 @@ -30,19 +43,59 @@ public class MessageTemplateController { @PostMapping("/save") @ApiOperation("/插入数据") public BasicResultVO saveOrUpdate(@RequestBody MessageTemplate messageTemplate) { - MessageTemplate info = messageTemplateDao.save(messageTemplate); + MessageTemplate info = messageTemplateService.saveOrUpdate(messageTemplate); + return BasicResultVO.success(info); } /** * 列表数据 */ - @GetMapping("/query") - @ApiOperation("/查找数据") - public BasicResultVO queryList() { - Iterable all = messageTemplateDao.findAll(); - long count = messageTemplateDao.count(); - MessageTemplateVo messageTemplateVo = MessageTemplateVo.builder().count(count).rows(all).build(); + @GetMapping("/list") + @ApiOperation("/列表页") + public BasicResultVO queryList(MessageTemplateParam messageTemplateParam) { + List> result = ConvertMap.flatList(messageTemplateService.queryList(messageTemplateParam), flatFieldName); + + long count = messageTemplateService.count(); + MessageTemplateVo messageTemplateVo = MessageTemplateVo.builder().count(count).rows(result).build(); return BasicResultVO.success(messageTemplateVo); } + + /** + * 根据Id查找 + */ + @GetMapping("query/{id}") + @ApiOperation("/根据Id查找") + public BasicResultVO queryById(@PathVariable("id") Long id) { + Map result = ConvertMap.flatSingle(messageTemplateService.queryById(id), flatFieldName); + return BasicResultVO.success(result); + } + + /** + * 根据Id复制 + */ + @PostMapping("copy/{id}") + @ApiOperation("/根据Id复制") + public BasicResultVO copyById(@PathVariable("id") Long id) { + messageTemplateService.copy(id); + return BasicResultVO.success(); + } + + + /** + * 根据Id删除 + * id多个用逗号分隔开 + */ + @DeleteMapping("delete/{id}") + @ApiOperation("/根据Ids删除") + public BasicResultVO deleteByIds(@PathVariable("id") String id) { + + if (StrUtil.isNotBlank(id)) { + List idList = Arrays.stream(id.split(StrUtil.COMMA)).map(s -> Long.valueOf(s)).collect(Collectors.toList()); + messageTemplateService.deleteByIds(idList); + return BasicResultVO.success(); + } + return BasicResultVO.fail(); + + } } diff --git a/austin-web/src/main/java/com/java3y/austin/service/MessageTemplateService.java b/austin-web/src/main/java/com/java3y/austin/service/MessageTemplateService.java new file mode 100644 index 0000000..1b30588 --- /dev/null +++ b/austin-web/src/main/java/com/java3y/austin/service/MessageTemplateService.java @@ -0,0 +1,63 @@ +package com.java3y.austin.service; + +import com.java3y.austin.domain.MessageTemplate; +import com.java3y.austin.vo.MessageTemplateParam; + +import java.util.List; + +/** + * 消息模板管理 接口 + * + * @author 3y + */ +public interface MessageTemplateService { + + + /** + * 查询未删除的模板列表(分页) + * + * @param messageTemplateParam + * @return + */ + List queryList(MessageTemplateParam messageTemplateParam); + + /** + * 统计未删除的条数 + * + * @return + */ + Long count(); + + /** + * 单个 保存或者更新 + * 存在ID 更新 + * 不存在ID保存 + * + * @param messageTemplate + * @return + */ + MessageTemplate saveOrUpdate(MessageTemplate messageTemplate); + + + /** + * 软删除(deleted=1) + * + * @param ids + */ + void deleteByIds(List ids); + + /** + * 根据ID查询模板信息 + * + * @param id + * @return + */ + MessageTemplate queryById(Long id); + + /** + * 复制配置 + * + * @param id + */ + void copy(Long id); +} diff --git a/austin-web/src/main/java/com/java3y/austin/service/impl/MessageTemplateServiceImpl.java b/austin-web/src/main/java/com/java3y/austin/service/impl/MessageTemplateServiceImpl.java new file mode 100644 index 0000000..58d3cfa --- /dev/null +++ b/austin-web/src/main/java/com/java3y/austin/service/impl/MessageTemplateServiceImpl.java @@ -0,0 +1,87 @@ +package com.java3y.austin.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.java3y.austin.constant.AustinConstant; +import com.java3y.austin.dao.MessageTemplateDao; +import com.java3y.austin.domain.MessageTemplate; +import com.java3y.austin.enums.AuditStatus; +import com.java3y.austin.enums.MessageStatus; +import com.java3y.austin.service.MessageTemplateService; +import com.java3y.austin.vo.MessageTemplateParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 消息模板管理 Service + * + * @author 3y + * @date 2022/1/22 + */ +@Service +public class MessageTemplateServiceImpl implements MessageTemplateService { + @Autowired + private MessageTemplateDao messageTemplateDao; + + + @Override + public List queryList(MessageTemplateParam param) { + PageRequest pageRequest = PageRequest.of(param.getPage() - 1, param.getPerPage()); + return messageTemplateDao.findAllByIsDeletedEquals(AustinConstant.FALSE, pageRequest); + } + + @Override + public Long count() { + return messageTemplateDao.countByIsDeletedEquals(AustinConstant.FALSE); + } + + @Override + public MessageTemplate saveOrUpdate(MessageTemplate messageTemplate) { + if (messageTemplate.getId() == null) { + initStatus(messageTemplate); + } + return messageTemplateDao.save(messageTemplate); + } + + @Override + public void deleteByIds(List ids) { + Iterable messageTemplates = messageTemplateDao.findAllById(ids); + messageTemplates.forEach(messageTemplate -> messageTemplate.setIsDeleted(AustinConstant.TRUE)); + messageTemplateDao.saveAll(messageTemplates); + } + + @Override + public MessageTemplate queryById(Long id) { + return messageTemplateDao.findById(id).get(); + } + + @Override + public void copy(Long id) { + MessageTemplate messageTemplate = messageTemplateDao.findById(id).get(); + MessageTemplate clone = ObjectUtil.clone(messageTemplate); + clone.setId(null); + messageTemplateDao.save(clone); + } + + + /** + * 初始化状态信息 + * TODO 创建者 修改者 团队 + * + * @param messageTemplate + */ + private void initStatus(MessageTemplate messageTemplate) { + messageTemplate.setFlowId(StrUtil.EMPTY) + .setMsgStatus(MessageStatus.INIT.getCode()).setAuditStatus(AuditStatus.WAIT_AUDIT.getCode()) + .setCreator("Java3y").setUpdator("Java3y").setTeam("公众号Java3y").setAuditor("3y") + .setDeduplicationTime(AustinConstant.FALSE).setIsNightShield(AustinConstant.FALSE) + .setCreated(Math.toIntExact(DateUtil.currentSeconds())).setUpdated(Math.toIntExact(DateUtil.currentSeconds())) + .setIsDeleted(AustinConstant.FALSE); + } + + +} diff --git a/austin-web/src/main/java/com/java3y/austin/utils/ConvertMap.java b/austin-web/src/main/java/com/java3y/austin/utils/ConvertMap.java new file mode 100644 index 0000000..d66d86e --- /dev/null +++ b/austin-web/src/main/java/com/java3y/austin/utils/ConvertMap.java @@ -0,0 +1,67 @@ +package com.java3y.austin.utils; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ReflectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * for Amis!!! amis框架在【表单】回显的时候,不支持嵌套动态语法!! + * 编写工具类将 List/Object 铺平成 Map + * https://baidu.gitee.io/amis/zh-CN/components/form/index#%E8%A1%A8%E5%8D%95%E9%A1%B9%E6%95%B0%E6%8D%AE%E5%88%9D%E5%A7%8B%E5%8C%96 + * @author 3y + * @date 2022/1/23 + */ +public class ConvertMap { + + /** + * 将List对象转换成Map(无嵌套) + * + * @param param + * @param fieldName 需要 reduce 的属性名 + * @return + */ + public static List> flatList(List param, List fieldName) { + List> result = new ArrayList<>(); + for (T t : param) { + Map map = flatSingle(t, fieldName); + result.add(map); + } + return result; + + } + + /** + * 将单个对象转换成Map(无嵌套) + * + * @param obj + * @param fieldName 需要 reduce 的属性名 + * @return + */ + public static Map flatSingle(Object obj, List fieldName) { + Map result = MapUtil.newHashMap(32); + Field[] fields = ReflectUtil.getFields(obj.getClass()); + for (Field field : fields) { + if (fieldName.contains(field.getName())) { + JSONObject jsonObject; + Object value = ReflectUtil.getFieldValue(obj, field); + if (value instanceof String) { + jsonObject = JSON.parseObject((String) value); + } else { + jsonObject = JSONObject.parseObject(JSON.toJSONString(value)); + } + for (String key : jsonObject.keySet()) { + result.put(key, jsonObject.getString(key)); + } + } + result.put(field.getName(), ReflectUtil.getFieldValue(obj, field)); + } + return result; + + } +} diff --git a/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateParam.java b/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateParam.java new file mode 100644 index 0000000..d13c407 --- /dev/null +++ b/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateParam.java @@ -0,0 +1,30 @@ +package com.java3y.austin.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 消息模板管理 请求参数 + * @author 3y + * @date 2022/1/22 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MessageTemplateParam { + + /** + * 当前页码 + */ + private Integer page ; + + /** + * 当前页大小 + */ + private Integer perPage; + + +} diff --git a/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateVo.java b/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateVo.java index c56d003..d715818 100644 --- a/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateVo.java +++ b/austin-web/src/main/java/com/java3y/austin/vo/MessageTemplateVo.java @@ -1,11 +1,13 @@ package com.java3y.austin.vo; -import com.java3y.austin.domain.MessageTemplate; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.Map; + /** * 消息模板的Vo @@ -17,11 +19,10 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class MessageTemplateVo { - /** - * 消息模板李彪 + * 返回List列表 */ - private Iterable rows; + private List> rows; /** * 总条数