diff --git a/.prettierrc b/.prettierrc index 3dc08174..99146096 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "printWidth": 150, + "printWidth": 250, "singleQuote": false, "tabWidth": 4, "semi": false, diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java new file mode 100644 index 00000000..c0df1fbd --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java @@ -0,0 +1,127 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_task; +import com.budwk.app.sys.services.SysTaskService; +import com.budwk.app.task.services.TaskPlatformService; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.models.BirthdayWishesPlan; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.service.BirthdayWishesService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +@IocBean +@At("/platform/birthdayWishes/plan") +@Ok("json:full") +@Api(tags = "生日祝福") +public class BirthdayWishesPlanController { + + @Inject + private Dao dao; + @Inject + private BirthdayWishesService birthdayWishesService; + @Inject + private SysTaskService sysTaskService; + @Inject + private TaskPlatformService taskPlatformService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/birthdayWishes/plan/index.html") + @SaCheckPermission("birthdayWishes") + public void index() { + } + + @At + @Ok("json:full") + @SaCheckPermission("birthdayWishes") + public Result pageData(PageForm pageForm) { + Cnd cnd = Cnd.NEW(); + Pagination pagination = birthdayWishesService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("添加计划") + @SaCheckPermission("birthdayWishes") + public Result insert(BirthdayWishesPlan wishesPlan) { + dao.insert(wishesPlan); + + // 插入定时任务 + Sys_task sysTask = new Sys_task(); + sysTask.setId(wishesPlan.getId()); + sysTask.setName(wishesPlan.getName()); + sysTask.setJobClass("com.budwk.app.zhgh.dayofficework.birthdayWishes.task.BirthdayWishesTask"); + sysTask.setCron(wishesPlan.getCron()); + sysTask.setData(Json.toJson(wishesPlan)); + sysTask.setDisabled(!wishesPlan.getEnabled()); +// sysTaskService.fastInsert(sysTask); + sysTaskService.insert("sys_task", Chain.from(sysTask)); + + // 添加定时任务 + if (wishesPlan.getEnabled()) { + if (!taskPlatformService.isExist(sysTask.getId(), sysTask.getId())) { + taskPlatformService.add(sysTask.getId(), sysTask.getId(), sysTask.getJobClass(), sysTask.getCron(), sysTask.getNote(), sysTask.getData()); + } + } + + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("更新计划") + @SaCheckPermission("birthdayWishes") + public Result update(BirthdayWishesPlan wishesPlan) { + dao.update(wishesPlan); + + Sys_task sysTask = sysTaskService.fetch(wishesPlan.getId()); + sysTask.setName(wishesPlan.getName()); + sysTask.setCron(wishesPlan.getCron()); + sysTask.setData(Json.toJson(wishesPlan)); + sysTask.setDisabled(!wishesPlan.getEnabled()); + sysTaskService.update(sysTask); + + if (wishesPlan.getEnabled()) { + if (taskPlatformService.isExist(sysTask.getId(), sysTask.getId())) { + taskPlatformService.delete(sysTask.getId(), sysTask.getId()); + } + taskPlatformService.add(sysTask.getId(), sysTask.getId(), sysTask.getJobClass(), sysTask.getCron(), sysTask.getNote(), sysTask.getData()); + } else { + if (taskPlatformService.isExist(sysTask.getId(), sysTask.getId())) { + taskPlatformService.delete(sysTask.getId(), sysTask.getId()); + } + } + + + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("删除计划") + @SaCheckPermission("birthdayWishes") + public Result delete(@Param("id") String id) { + dao.delete(BirthdayWishesPlan.class, id); + dao.clear(Sys_task.class, Cnd.where(Sys_task::getId, "=", id)); + if (taskPlatformService.isExist(id, id)) { + taskPlatformService.delete(id, id); + } + return Result.success(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java new file mode 100644 index 00000000..09444e78 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java @@ -0,0 +1,41 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@EqualsAndHashCode(callSuper = true) +@Data +@Table("birthday_wishes_plan") +@Comment("生日祝福计划") +public class BirthdayWishesPlan extends BaseModel { + + @Name + @Comment("ID") + @PrevInsert(uu32 = true) + private String id; + + @Comment("计划名称") + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + private String name; + + @Comment("定时任务") + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + private String cron; + + @Comment("模板") + @Column + @ColDefine(type = ColType.VARCHAR, width = 200) + private String template; + + @Comment("是否启用") + @Column + @ColDefine(type = ColType.BOOLEAN) + @Default("1") + private Boolean enabled; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java new file mode 100644 index 00000000..e5bf3daa --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.models.BirthdayWishesPlan; + +public interface BirthdayWishesService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java new file mode 100644 index 00000000..3d9b9d16 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java @@ -0,0 +1,14 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.models.BirthdayWishesPlan; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.service.BirthdayWishesService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@IocBean(args = {"refer:dao"}) +public class BirthdayWishesServiceImpl extends BaseServiceImpl implements BirthdayWishesService { + public BirthdayWishesServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java new file mode 100644 index 00000000..cb6d2612 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java @@ -0,0 +1,61 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.task; + +import cn.hutool.core.date.DateUtil; +import com.budwk.app.sys.models.Sys_msg; +import com.budwk.app.sys.services.SysMsgService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.util.List; + +@IocBean +@Slf4j +public class BirthdayWishesTask implements Job { + + @Inject + protected SysMsgService sysMsgService; + @Inject + protected Dao dao; + + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + log.info("=================================执行计划任务:{}", context.getJobDetail().getKey().getName()); + JobDataMap dataMap = context.getJobDetail().getJobDataMap(); + log.info("=================================参数:{}", Json.toJson(dataMap)); + + String planName = dataMap.getString("name"); + + String today = DateUtil.today(); + + Sys_msg msg = new Sys_msg(); + msg.setTitle(planName + today); + msg.setType("user"); + msg.setSendType("show"); + msg.setSendAt(DateUtil.current()); + msg.setNote(dataMap.getString("template")); + + // 查询今天生日的会员用户 + Sql sql = Sqls.create("SELECT loginname FROM sys_user WHERE member = 1 AND MONTH(birthday) = MONTH(CURRENT_DATE) AND DAY(birthday) = DAY(CURRENT_DATE)"); + sql.setCallback(Sqls.callback.strList()); + dao.execute(sql); + List users = sql.getList(String.class); + // 转为数组 + String[] userArray = users.toArray(String[]::new); + log.info("=================================查询今天生日会员用户:{}", users); + + if(userArray.length > 0){ + log.info("=================================发送消息:{}", msg); + sysMsgService.saveMsg(msg, userArray, true); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminManageController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminManageController.java index 5fa4cae1..1aa0fd26 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminManageController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminManageController.java @@ -1,6 +1,8 @@ package com.budwk.app.zhgh.staffbenefit.huimin.controller; import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; @@ -27,21 +29,24 @@ public class HuiminManageController { private HuiminService huiminService; @At("") - @SaCheckLogin - @Ok("beetl:/platform/zhgh/dayofficework/huimin/manage/index.html") + @SaCheckPermission("huimin.manage") + @Ok("beetl:/platform/zhgh/staffbenefit/huimin/manage/index.html") public void index() { } @At - @SaCheckLogin + @SaCheckPermission("huimin.manage") public Result pageData(PageForm pageForm) { Cnd cnd = Cnd.NEW(); + if(StrUtil.isNotBlank(pageForm.getSearchKeyword())){ + cnd.where().andLike(Huimin::getTitle, pageForm.getSearchKeyword()); + } Pagination pagination = huiminService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); return Result.success(pagination); } @At - @SaCheckLogin + @SaCheckPermission("huimin.manage") @ApiOperation("新增惠民服务") public Result insert(@Param("data") Huimin huimin) { huiminService.insert(huimin); @@ -57,7 +62,7 @@ public class HuiminManageController { } @At - @SaCheckLogin + @SaCheckPermission("huimin.manage") @ApiOperation("删除惠民服务") public Result delete(String id) { huiminService.delete(id); diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminMineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminMineController.java index 10adb3e3..ddc25025 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminMineController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/controller/HuiminMineController.java @@ -1,9 +1,12 @@ package com.budwk.app.zhgh.staffbenefit.huimin.controller; -import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.staffbenefit.huimin.models.Huimin; import com.budwk.app.zhgh.staffbenefit.huimin.service.HuiminService; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; @@ -24,22 +27,25 @@ public class HuiminMineController { private HuiminService huiminService; @At("") - @SaCheckLogin + @SaCheckPermission("huimin.mine") @Ok("beetl:/platform/zhgh/staffbenefit/huimin/mine/index.html") public void index() { } @At("/h5") - @SaCheckLogin + @SaCheckPermission("h5.huimin.mine") @Ok("beetl:/platform/zhghh5/staffbenefit/huimin/mine/index.html") - public void h5Index(){ + public void h5Index() { } @At - @SaCheckLogin - public Result pageData(PageForm pageForm){ + @SaCheckPermission(value = {"huimin.mine", "h5.huimin.mine"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm) { Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.where().andLike(Huimin::getTitle, pageForm.getSearchKeyword()); + } Pagination pagination = huiminService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); return Result.success(pagination); } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/models/Huimin.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/models/Huimin.java index 00a86cbc..1725fe7d 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/models/Huimin.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/huimin/models/Huimin.java @@ -39,4 +39,14 @@ public class Huimin extends BaseModel { @Default("1") private Boolean enable; + @Comment("外部链接") + @ColDefine(type = ColType.VARCHAR, width = 255) + @Column + private String link; + + @Column + @ColDefine(type = ColType.INT) + @Comment("分组id") + private Integer groupId; + } diff --git a/src/main/resources/static/components/plugins/h5/TableList.vue b/src/main/resources/static/components/plugins/h5/TableList.vue index b07e5ca6..5f78139d 100644 --- a/src/main/resources/static/components/plugins/h5/TableList.vue +++ b/src/main/resources/static/components/plugins/h5/TableList.vue @@ -6,7 +6,7 @@
diff --git a/src/main/resources/static/components/plugins/permissionGroup/index.vue b/src/main/resources/static/components/plugins/permissionGroup/index.vue new file mode 100644 index 00000000..f8ae9366 --- /dev/null +++ b/src/main/resources/static/components/plugins/permissionGroup/index.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/main/resources/views/layouts/v4/baseLayout.html b/src/main/resources/views/layouts/v4/baseLayout.html index 7362177b..3ee57a14 100644 --- a/src/main/resources/views/layouts/v4/baseLayout.html +++ b/src/main/resources/views/layouts/v4/baseLayout.html @@ -354,6 +354,7 @@ ) Vue.component("snaker-chart", httpVueLoader("/components/plugins/snaker/snakerChart.vue?v=" + new Date().getTime())) Vue.component("snaker-start", httpVueLoader("/components/plugins/snaker/snakerStart.vue?v=" + new Date().getTime())) + Vue.component("permission-group", httpVueLoader("/components/plugins/permissionGroup/index.vue?v=" + new Date().getTime())) +
@@ -10,19 +65,57 @@ layout("/layouts/platform_h5.html"){ :show-action="false" :reverse-color="false" input-align="left" - placeholder="请输入姓名/工号搜索" + placeholder="请输入关键字搜索" @search="doSearch" > + + + + +
+ +
+ +
+ + +
+ +
+
+ + + + + +
+
创建时间:{{ formatTime(currentItem.createdAt) }}
+
更新时间:{{ formatTime(currentItem.updatedAt) }}
+
+
+
+