fanxp 1 year ago
parent
commit
6a65d89bb8

+ 2 - 0
src/main/java/com/xjrsoft/common/utils/WeChatUtil.java

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.organization.dto.WeChatDepartDto;
 import com.xjrsoft.module.organization.dto.WeChatUserDto;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -14,6 +15,7 @@ import java.util.HashMap;
 import java.util.List;
 
 @Component
+@Data
 public class WeChatUtil {
     @Value("${xjrsoft.enterpriseWeChat.corpid}")
     public String appKey;

+ 2 - 2
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -267,7 +267,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                         WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                         weChatSendMessageDto.setUserId(user.getOpenId());
                         weChatSendMessageDto.setTemplateId("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM");
-                        weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id=" + id);
+                        weChatSendMessageDto.setUrl("/pages/message/notice/detail?id=" + id);
                         weChatSendMessageDto.setMsgId(id.toString());
                         JSONObject data = new JSONObject();
 
@@ -299,7 +299,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                         WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                         weChatSendMessageDto.setUserId(newsRelationVo.getUserName());
                         weChatSendMessageDto.setTemplateId("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM");
-                        weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id=" + id);
+                        weChatSendMessageDto.setUrl("/pages/message/notice/detail?id=" + id);
                         weChatSendMessageDto.setMsgId(id.toString());
                         JSONObject data = new JSONObject();
 

+ 62 - 0
src/main/java/com/xjrsoft/module/oa/utils/SendMessageUtil.java

@@ -5,11 +5,14 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.mail.MailAccount;
 import cn.hutool.extra.mail.MailUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.MessageType;
 import com.xjrsoft.common.enums.YesOrNoEnum;
 import com.xjrsoft.common.sms.SmsSender;
+import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.common.utils.RedisUtil;
+import com.xjrsoft.common.utils.WeChatUtil;
 import com.xjrsoft.module.oa.entity.Message;
 import com.xjrsoft.module.oa.service.IMessageService;
 import com.xjrsoft.module.organization.entity.User;
@@ -59,6 +62,65 @@ public class SendMessageUtil {
         messageService.save(message);
     }
 
+    /**
+     * 发送工作流审批微信消息
+     */
+    public static void sendWorkflowApproveWx(NoticePolicyParam param, String name) {
+        IUserService userService = SpringUtil.getBean(IUserService.class);
+        RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class);
+
+        WeChatUtil weChatUtil = SpringUtil.getBean(WeChatUtil.class);
+
+        //获取用户相关信息
+        List<User> userList = redisUtil.get(GlobalConstant.USER_CACHE_KEY, new TypeReference<List<User>>() {
+        });
+        //如果缓存中不存在用户信息,就直接去数据库查询,并保存到缓存中去
+        if (userList.size() == 0) {
+            userList = userService.list();
+            redisUtil.set(GlobalConstant.USER_CACHE_KEY, userList);
+        }
+
+        if (param.getNoticeUserIds().size() > 0) {
+            for (Long userId : param.getNoticeUserIds()) {
+                User user = userList.stream().filter(u -> userId.equals(u.getId())).findFirst().orElse(new User());
+                String openId = user.getOpenId();
+
+                if (StrUtil.isEmpty(openId)) {
+                    break;
+                }
+
+                JSONObject data = new JSONObject();
+                // 任务名称
+                data.put("thing8", new JSONObject() {{
+                    put("value", param.getSchemaName());
+                }});
+                // 事项名称
+                data.put("thing2", new JSONObject() {{
+                    put("value", name);
+                }});
+                // 申请人
+                data.put("thing6", new JSONObject() {{
+                    put("value", param.getStartUserName());
+                }});
+                // 时间
+                data.put("time3", new JSONObject() {{
+                    put("value", LocalDateTimeUtil.format(LocalDateTime.now(), LocalDateTimeUtil.LOCAL_DATE_TIME_FORMAT));
+                }});
+
+                JSONObject object = new JSONObject();
+                object.put("touser", openId);
+                object.put("template_id", "sHsmz7LRj7HLd7GSTS3r2jCLvK-4Wp19iGzEvYK8n_I");
+                object.put("miniprogram", new JSONObject() {{
+                    put("appid", weChatUtil.getAppletAppKey());
+                    put("pagepath", StrUtil.format("/xjrsoft/pages/workflow/approval?taskId={}&processId={}&type=todo", param.getTaskId(), param.getProcessId()));
+                }});
+                object.put("client_msg_id", param.getTaskId());
+                object.put("data", data);
+                weChatUtil.sendTemplateMessage(object);
+            }
+        }
+    }
+
     /**
      * 添加工作流审批消息
      */

+ 1 - 0
src/main/java/com/xjrsoft/module/organization/service/IWeChatService.java

@@ -7,5 +7,6 @@ public interface IWeChatService {
 
 
     void sendTemplateMessage(WeChatSendMessageDto dto);
+
     boolean updateInfo();
 }

+ 3 - 1
src/main/java/com/xjrsoft/module/system/controller/MenuController.java

@@ -90,7 +90,6 @@ public class MenuController {
     @ApiOperation(value = "查询角色菜单服务")
     public RT<List<MenuServeVo>> roleMenuServe(RoleMenuServeListDto dto) {
         List<MenuServeVo> list = menuService.getRoleMenuServe(dto);
-
         return RT.ok(list);
     }
 
@@ -105,6 +104,9 @@ public class MenuController {
     @GetMapping("/all-tree")
     @ApiOperation(value = "获取所有菜单(树结构)")
     public R allMenuTree(@Valid MenuTreeDto dto) {
+        if (StrUtil.isEmpty(dto.getSystemType())) {
+            dto.setSystemType(SystemTypeEnum.SYSTEMPC.getCode());
+        }
         List<MenuTreeVo> list = menuService.selectJoinList(MenuTreeVo.class,
                 MPJWrappers.<Menu>lambdaJoin()
                         .like(StrUtil.isNotEmpty(dto.getTitle()), Menu::getTitle, dto.getTitle())

+ 0 - 1
src/main/java/com/xjrsoft/module/system/dto/MenuTreeDto.java

@@ -16,7 +16,6 @@ import javax.validation.constraints.NotNull;
 public class MenuTreeDto {
 
     @Length(max = 20,message = "系统类型!")
-    @NotNull(message = "系统类型code不能为空")
     private String systemType;
 
     @Length(max = 20,message = "菜单名不能大于20个字符!")

+ 1 - 0
src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java

@@ -119,6 +119,7 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
                     MPJWrappers.<Menu>lambdaJoin()
                             .innerJoin(XjrMenuQuick.class, XjrMenuQuick::getMenuId, Menu::getId)
                             .in(XjrMenuQuick::getRoleId, roleIds)
+                            .eq(ObjectUtil.isNotEmpty(dto.getSystemType()), Menu::getSystemType, dto.getSystemType())
                             .selectAs(XjrMenuQuick::getSystemId, Menu::getSystemId)
                             .select(Menu::getId)
                             .select(Menu.class, x -> VoToColumnUtil.fieldsToColumns(Menu.class).contains(x.getProperty())));

+ 3 - 1
src/main/java/com/xjrsoft/module/workflow/utils/WorkFlowUtil.java

@@ -1133,7 +1133,9 @@ public class WorkFlowUtil {
             }
             //如果包含企业微信
             if (param.getNoticePolicyConfigs().contains(WorkflowNoticePolicyType.WECHAT.getCode())) {
-                //TODO 发送企业微信
+                CompletableFuture.runAsync(() -> {
+                    SendMessageUtil.sendWorkflowApproveWx(param, name);
+                });
             }
             //如果包含钉钉
             if (param.getNoticePolicyConfigs().contains(WorkflowNoticePolicyType.DING.getCode())) {

+ 2 - 2
src/main/resources/mapper/student/BaseStudentAssessmentInspectionMapper.xml

@@ -21,7 +21,7 @@
         left join xjr_user t5 on t.assessment_user_id=t5.id
         left join xjr_dictionary_detail t6 on t6.code=t.score_type
         where  t.delete_mark=0 and t1.delete_mark=0  and t2.delete_mark=0  and t3.delete_mark=0 and t.status=1
-        <if test="dto.projectIds != null and dto.projectIds.size()>0">
+        <if test="dto.projectIds != null and dto.projectIds.size() > 0">
             and t.base_student_assessment_project_id in
             <foreach item="projectId" index="index" collection="dto.projectIds" open="(" close=")" separator=",">
                 #{projectId}
@@ -75,7 +75,7 @@
         <foreach item="classId" index="index" collection="dto.classIds" open="(" close=")" separator=",">
             #{classId}
         </foreach>
-        <if test="dto.projectIds != null and dto.projectIds.size()>0">
+        <if test="dto.projectIds != null and dto.projectIds.size() > 0">
             and t1.base_student_assessment_project_id in
             <foreach item="projectId" index="index" collection="dto.projectIds" open="(" close=")" separator=",">
                 #{projectId}

+ 53 - 0
src/main/resources/sqlScript/20231120_sql.sql

@@ -0,0 +1,53 @@
+
+--------------------------------------------------------------------奖学金管理--------------------------------------------------------------------
+-- ----------------------------
+-- 奖学金类别
+-- ----------------------------
+DROP TABLE IF EXISTS base_student_scholarship_category;
+CREATE TABLE base_student_scholarship_category
+(
+    id BIGINT NOT NULL COMMENT '主键编号',
+    `create_user_id` BIGINT NULL DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id` BIGINT NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark` INT NOT NULL COMMENT '删除标记',
+    `enabled_mark` INT NOT NULL COMMENT '有效标志',
+    `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
+    `name` VARCHAR(200) NOT NULL COMMENT '名称',
+    `scholarship_source` int NOT NULL DEFAULT 0 COMMENT '奖学金来源(xjr_dictionary_item[scholarship_source])',
+    `base_semester_id` bigint NULL DEFAULT NULL COMMENT '学期ID(base_semester)',
+    `total_score` double NOT NULL DEFAULT 0 COMMENT '总金额',
+    `scholarship_level` int NOT NULL DEFAULT 0 COMMENT '奖学金等级 0=无等级',
+    `remark` VARCHAR(1000) COMMENT '备注',
+    PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '奖学金类别';
+
+-- ----------------------------
+-- 奖学金级别
+-- ----------------------------
+DROP TABLE IF EXISTS base_student_scholarship_level;
+CREATE TABLE base_student_scholarship_level
+(
+    id BIGINT NOT NULL COMMENT '主键编号',
+    `create_user_id` BIGINT NULL DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id` BIGINT NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark` INT NOT NULL COMMENT '删除标记',
+    `enabled_mark` INT NOT NULL COMMENT '有效标志',
+    `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
+    `base_student_scholarship_category_id` bigint NULL DEFAULT NULL COMMENT '奖学金类别ID(base_student_scholarship_category)',
+    `level` int NOT NULL DEFAULT 0 COMMENT '奖学金等级 0=无等级',
+    `score` double NOT NULL DEFAULT 0 COMMENT '金额',
+    PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '奖学金级别';
+--------------------------------------------------------------------奖学金管理--------------------------------------------------------------------
+
+
+
+
+
+
+
+

+ 13 - 0
src/test/java/com/xjrsoft/xjrsoftboot/StrTest.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.xjrsoftboot;
+
+import cn.hutool.core.util.StrUtil;
+import org.junit.jupiter.api.Test;
+
+public class StrTest {
+    @Test
+    public void formatTest() {
+        String f = "《{}》等待{}审批。";
+
+        System.out.println(StrUtil.format(f, "sdfsdf","bbbbbb"));
+    }
+}

File diff suppressed because it is too large
+ 0 - 48
src/test/java/com/xjrsoft/xjrsoftboot/mysql.sql


Some files were not shown because too many files changed in this diff