package io.v.nutz.todoTask; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import io.v.nutz.sys.models.Sys_config; import io.v.nutz.sys.services.SysConfigService; import io.v.nutz.web.commons.utils.ShiroUtil; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Dao; import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; import org.nutz.lang.util.NutMap; import java.util.List; import java.util.Map; /** * @Author JyuHsin * @Date 2023/5/19 * @Description */ @IocBean @Slf4j public class TodoTaskInterfaceImpl implements TodoTaskInterface { /** * 只有系统配置明确开启时,才调用学校统一待办网关。 */ private boolean isTodoTaskEnabled() { Sys_config config = sysConfigService.fetch("TodoTaskEnabled"); return config != null && "true".equals(config.getConfigValue()); } @Inject private SysConfigService sysConfigService; @Inject private RedisService redisService; @Inject private Dao dao; @Override public String getAccessToken() { if (StrUtil.isBlank(redisService.get(TodoTaskConstants.TOKEN_KEY))) { HttpRequest httpRequest = HttpUtil.createGet(TodoTaskConstants.GET_TOKEN); httpRequest.addHeaders(Map.of("appId", TodoTaskConstants.APPID, "appSecret", TodoTaskConstants.APPSECRET)); String responseBody = httpRequest.execute().body(); NutMap nutMap = Json.fromJson(NutMap.class, responseBody); if ("0".equals(nutMap.getString("errcode"))) { String token = nutMap.getString("data"); redisService.setex(TodoTaskConstants.TOKEN_KEY, 2 * 60 * 60, token); return token; } else { throw new RuntimeException("获取待办事项token失败"); } } return redisService.get(TodoTaskConstants.TOKEN_KEY); } @Override public void pushTask(TodoTask todoTask) { if (!isTodoTaskEnabled()) { return; } log.info("【推送待办入参】:" + Json.toJson(todoTask)); String accessToken = getAccessToken(); HttpRequest httpRequest = HttpUtil.createPost(TodoTaskConstants.PUSH_TASK_URL); httpRequest.addHeaders(Map.of("appId", TodoTaskConstants.APPID, "accessToken", accessToken)); httpRequest.body(Json.toJson(todoTask)); String responseBody = httpRequest.execute().body(); NutMap nutMap = Json.fromJson(NutMap.class, responseBody); log.info("【推送待办结果】:" + Json.toJson(nutMap)); if (!"0".equals(nutMap.getString("errcode"))) { throw new RuntimeException("推送待办事项失败"); } else { dao.insert(todoTask); } } @Override public void updateTask(TodoTask todoTask) { if (!isTodoTaskEnabled()) { return; } log.info("【更新待办入参】:" + Json.toJson(todoTask)); String accessToken = getAccessToken(); HttpRequest httpRequest = HttpUtil.createPost(TodoTaskConstants.UPDATE_TASK_URL); httpRequest.addHeaders(Map.of("appId", TodoTaskConstants.APPID, "accessToken", accessToken)); httpRequest.body(Json.toJson(todoTask)); String responseBody = httpRequest.execute().body(); NutMap nutMap = Json.fromJson(NutMap.class, responseBody); log.info("【更新待办结果】:" + Json.toJson(nutMap)); if (!"0".equals(nutMap.getString("errcode"))) { throw new RuntimeException("更新待办事项失败"); } else { dao.updateIgnoreNull(todoTask); } } @Override public void deleteTask(TodoTask todoTask) { if (!isTodoTaskEnabled()) { return; } log.info("【删除待办入参】:" + Json.toJson(todoTask)); String accessToken = getAccessToken(); HttpRequest httpRequest = HttpUtil.createPost(TodoTaskConstants.DELETE_TASK_URL); httpRequest.addHeaders(Map.of("appId", TodoTaskConstants.APPID, "accessToken", accessToken)); httpRequest.body(Json.toJson(todoTask)); String responseBody = httpRequest.execute().body(); NutMap nutMap = Json.fromJson(NutMap.class, responseBody); log.info("【删除待办结果】:" + Json.toJson(nutMap)); if (!"0".equals(nutMap.getString("errcode"))) { throw new RuntimeException("删除待办事项失败"); } else { todoTask.setDelFlag(true); todoTask.setDelTime(DateUtil.now()); dao.updateIgnoreNull(todoTask); } } }