Browse Source

发送提醒消息

master
zy_Java 5 years ago
parent
commit
8441d05e7e
  1. 2
      game/src/main/java/com/ccsens/game/netty/ChannelManager.java
  2. 4
      game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketDecoder.java
  3. 2
      game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketHandler.java
  4. 4
      game/src/main/java/com/ccsens/game/service/MessageService.java
  5. 2
      game/src/main/java/com/ccsens/game/service/ScreenService.java
  6. 7
      health/src/main/java/com/ccsens/health/api/WxTest.java
  7. 5
      mt/src/main/java/com/ccsens/mt/service/MessageServicer.java
  8. 41
      tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java
  9. 11
      tall/src/main/java/com/ccsens/tall/bean/po/ProRemind.java
  10. 70
      tall/src/main/java/com/ccsens/tall/bean/po/ProRemindExample.java
  11. 40
      tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java
  12. 18
      tall/src/main/java/com/ccsens/tall/persist/dao/ProRemindDao.java
  13. 5
      tall/src/main/java/com/ccsens/tall/rabbitMQ/MessageTest.java
  14. 113
      tall/src/main/java/com/ccsens/tall/scheduled/ScheduledService.java
  15. 2
      tall/src/main/java/com/ccsens/tall/service/ExcelService.java
  16. 8
      tall/src/main/java/com/ccsens/tall/service/IProjectMessageService.java
  17. 6
      tall/src/main/java/com/ccsens/tall/service/IRobotService.java
  18. 18
      tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java
  19. 10
      tall/src/main/java/com/ccsens/tall/service/MessageService.java
  20. 43
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  21. 46
      tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java
  22. 2
      tall/src/main/java/com/ccsens/tall/service/RingService.java
  23. 34
      tall/src/main/java/com/ccsens/tall/service/RobotService.java
  24. 125
      tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java
  25. 2
      tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java
  26. 5
      tall/src/main/java/com/ccsens/tall/web/DebugController.java
  27. 5
      tall/src/main/java/com/ccsens/tall/web/ExcelController.java
  28. 4
      tall/src/main/java/com/ccsens/tall/web/IndexController.java
  29. 4
      tall/src/main/java/com/ccsens/tall/web/ProjectController.java
  30. 27
      tall/src/main/java/com/ccsens/tall/web/TaskController.java
  31. 48
      tall/src/main/resources/mapper_dao/ProRemindDao.xml
  32. 29
      tall/src/main/resources/mapper_raw/ProRemindMapper.xml
  33. 2
      util/src/main/java/com/ccsens/util/CodeEnum.java
  34. 8
      util/src/main/java/com/ccsens/util/Md5Util.java
  35. 3
      util/src/main/java/com/ccsens/util/Sha1Util.java
  36. 5
      util/src/main/java/com/ccsens/util/SmsUtil.java
  37. 3
      util/src/main/java/com/ccsens/util/config/H5WebSocketInterceptor.java
  38. 4
      util/src/main/java/com/ccsens/util/cron/NatureToDate.java
  39. 4
      util/src/main/java/com/ccsens/util/enterprisewx/WXBizMsgCrypt.java
  40. 3
      util/src/main/java/com/ccsens/util/wx/WxGzhUtil.java
  41. 14
      util/src/main/java/com/ccsens/util/wx/WxRobotUtil.java
  42. 12
      util/src/test/java/com/ccsens/util/Base64Test.java
  43. 15
      util/src/test/java/com/ccsens/util/ZipTest.java

2
game/src/main/java/com/ccsens/game/netty/ChannelManager.java

@ -386,7 +386,7 @@ public class ChannelManager {
}
public static String getRecordIdByChannel(Channel channel) {
System.out.println(rawChannels.containsKey(channel) ? rawChannels.get(channel).getRecordId() : null);
log.info(rawChannels.containsKey(channel) ? rawChannels.get(channel).getRecordId() : null);
return rawChannels.containsKey(channel) ? rawChannels.get(channel).getRecordId() : null;
}
}

4
game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketDecoder.java

@ -6,6 +6,7 @@ import com.ccsens.util.WebConstant;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -15,6 +16,7 @@ import java.util.List;
/**
* @author wei
*/
@Slf4j
public class WebSocketDecoder extends MessageToMessageDecoder<TextWebSocketFrame> {
private static Logger logger = LoggerFactory.getLogger(WebSocketDecoder.class);
@ -37,7 +39,7 @@ protected void decode(ChannelHandlerContext channelHandlerContext, TextWebSocket
String text = msg.text();
BaseMessageDto baseMessage = JacksonUtil.jsonToBean(text,BaseMessageDto.class);
WebConstant.Message_Type type = WebConstant.Message_Type.phaseOf(baseMessage.getType());
System.out.println(text);
log.info(text);
switch (type){
case Heart: {
out.add(JacksonUtil.jsonToBean(text, HeartMessageDto.class));

2
game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketHandler.java

@ -91,7 +91,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<BaseMessageDto
log.info("接受到消息的时间+++++++++++++++++++++++{}:{},{}",baseMessage.getType(), new Date(), System.currentTimeMillis());
MessageConstant.GameClientMessageType gameClientMessageType = MessageConstant.GameClientMessageType.valueOf(baseMessage.getType());
System.out.println(baseMessage);
log.info(String.valueOf(baseMessage));
try {
switch (gameClientMessageType) {
case Heart: {

4
game/src/main/java/com/ccsens/game/service/MessageService.java

@ -36,7 +36,7 @@ public class MessageService implements IMessageService {
@Override
public void sendGameMessageWithGetUrl(ChromeMessageDto message) throws Exception {
System.out.println(JacksonUtil.beanToJson(message));
log.info(JacksonUtil.beanToJson(message));
// rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME,
// JacksonUtil.beanToJson(message));
@ -58,7 +58,7 @@ public class MessageService implements IMessageService {
@Override
public void doAuthMessageWithAuth(ChannelHandlerContext ctx, AuthMessageDto message) {
System.out.println(message);
log.info(String.valueOf(message));
//ws连接认证
String userId = message.getData().getUserId();
if (userId == null) {

2
game/src/main/java/com/ccsens/game/service/ScreenService.java

@ -859,7 +859,7 @@ public class ScreenService implements IScreenService {
});
long endTime = gameRecord.getEndTime() - System.currentTimeMillis();
System.out.println("游戏结束");
log.info("游戏结束");
sendMsg.sendMsg(executor, endTime > 0 ? endTime : 0, () -> {
try {
//查询游戏用户,通知游戏结束

7
health/src/main/java/com/ccsens/health/api/WxTest.java

@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import com.ccsens.util.JacksonUtil;
import com.ccsens.util.enterprisewx.AesException;
import com.ccsens.util.enterprisewx.WXBizMsgCrypt;
import lombok.extern.slf4j.Slf4j;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@ -14,7 +15,7 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
import java.net.URLDecoder;
@Slf4j
public class WxTest {
public static void main(String[] args) throws Exception {
String sToken = "4CxIpRDBWHMiePP3x6muNe4hRj";
@ -31,9 +32,9 @@ public class WxTest {
String sVerifyNonce = "1";
String sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,
sVerifyNonce, sVerifyEchoStr);
System.out.println("verifyurl echostr: " + sEchoStr);
log.info("verifyurl echostr: " + sEchoStr);
String s = JacksonUtil.xmlToJson(sEchoStr);
System.out.println("s:"+s);
log.info("s:"+s);
}

5
mt/src/main/java/com/ccsens/mt/service/MessageServicer.java

@ -6,10 +6,11 @@ import com.ccsens.util.JacksonUtil;
import com.ccsens.util.bean.message.common.InMessage;
import com.ccsens.util.bean.message.common.MessageConstant;
import com.ccsens.util.config.RabbitMQConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class MessageServicer implements IMessageService{
@Autowired
@ -17,7 +18,7 @@ public class MessageServicer implements IMessageService{
@Override
public void sendSyncMessageWithShow(SyncMessageWithShowDto message) throws Exception {
System.out.println(JacksonUtil.beanToJson(message));
log.info(JacksonUtil.beanToJson(message));
// rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME,
// JacksonUtil.beanToJson(message));
InMessage inMessage = new InMessage();

41
tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java

@ -41,6 +41,8 @@ public class TaskDto {
private String taskDeliver;
@ApiModelProperty("插件")
private List<Long> pluginList;
@ApiModelProperty("任务提醒消息")
private TaskRemind taskRemind;
}
@ApiModel
@ -140,6 +142,8 @@ public class TaskDto {
private int delay;
@ApiModelProperty("延迟切换时间")
private Long delayTime;
@ApiModelProperty("任务提醒信息")
private List<UpdateTaskRemind> taskRemindList;
}
@ApiModel
@ -247,5 +251,42 @@ public class TaskDto {
}
}
}
@Data
@ApiModel("删除任务提醒")
public static class DeleteTaskRemind{
@ApiModelProperty("提醒记录的id")
private Long remindId;
}
@Data
@ApiModel("设置任务提醒")
public static class UpdateTaskRemind{
@NotNull
@ApiModelProperty("任务日期id(subTimeId)")
private Long remindId;
@ApiModelProperty("提醒时机 0不提醒 1开始前,2开始时,3开始后,4结束前,5结束时,6结束后,7自定义时间")
private Byte remindTiming;
@ApiModelProperty("时长 提醒时机是“开始时”或“结束时”可以为空")
private Long duration = 0L;
@ApiModelProperty("时间单位 0分钟 1小时 2天")
private Byte unit;
public Long getDuration(){
if(ObjectUtil.isNull(unit)) {
throw new BaseException("时间单位不能为空");
}
if(remindTiming == 7){
return duration;
}
switch (unit) {
case 0:
return duration * 60 * 1000L;
case 1:
return duration * 60 * 60 * 1000L;
case 2:
return duration * 24 * 60 * 60 * 1000L;
default:
return duration;
}
}
}
}

11
tall/src/main/java/com/ccsens/tall/bean/po/ProRemind.java

@ -22,6 +22,8 @@ public class ProRemind implements Serializable {
private Byte recStatus;
private String duration;
private static final long serialVersionUID = 1L;
public Long getId() {
@ -96,6 +98,14 @@ public class ProRemind implements Serializable {
this.recStatus = recStatus;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration == null ? null : duration.trim();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@ -111,6 +121,7 @@ public class ProRemind implements Serializable {
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);
sb.append(", recStatus=").append(recStatus);
sb.append(", duration=").append(duration);
sb.append("]");
return sb.toString();
}

70
tall/src/main/java/com/ccsens/tall/bean/po/ProRemindExample.java

@ -644,6 +644,76 @@ public class ProRemindExample {
addCriterion("rec_status not between", value1, value2, "recStatus");
return (Criteria) this;
}
public Criteria andDurationIsNull() {
addCriterion("duration is null");
return (Criteria) this;
}
public Criteria andDurationIsNotNull() {
addCriterion("duration is not null");
return (Criteria) this;
}
public Criteria andDurationEqualTo(String value) {
addCriterion("duration =", value, "duration");
return (Criteria) this;
}
public Criteria andDurationNotEqualTo(String value) {
addCriterion("duration <>", value, "duration");
return (Criteria) this;
}
public Criteria andDurationGreaterThan(String value) {
addCriterion("duration >", value, "duration");
return (Criteria) this;
}
public Criteria andDurationGreaterThanOrEqualTo(String value) {
addCriterion("duration >=", value, "duration");
return (Criteria) this;
}
public Criteria andDurationLessThan(String value) {
addCriterion("duration <", value, "duration");
return (Criteria) this;
}
public Criteria andDurationLessThanOrEqualTo(String value) {
addCriterion("duration <=", value, "duration");
return (Criteria) this;
}
public Criteria andDurationLike(String value) {
addCriterion("duration like", value, "duration");
return (Criteria) this;
}
public Criteria andDurationNotLike(String value) {
addCriterion("duration not like", value, "duration");
return (Criteria) this;
}
public Criteria andDurationIn(List<String> values) {
addCriterion("duration in", values, "duration");
return (Criteria) this;
}
public Criteria andDurationNotIn(List<String> values) {
addCriterion("duration not in", values, "duration");
return (Criteria) this;
}
public Criteria andDurationBetween(String value1, String value2) {
addCriterion("duration between", value1, value2, "duration");
return (Criteria) this;
}
public Criteria andDurationNotBetween(String value1, String value2) {
addCriterion("duration not between", value1, value2, "duration");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {

40
tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java

@ -1,6 +1,7 @@
package com.ccsens.tall.bean.vo;
import cn.hutool.core.util.ObjectUtil;
import com.ccsens.util.exception.BaseException;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiModel;
@ -9,6 +10,8 @@ import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.io.ByteArrayInputStream;
import java.math.BigDecimal;
import java.util.List;
@ -143,6 +146,8 @@ public class TaskVo {
private Byte routineLocation;
@ApiModelProperty("入参")
private String importParam;
@ApiModelProperty("提醒的信息")
private List<RemindInfo> remindInfoList;
public Long getDuration(){
if(ObjectUtil.isNotNull(beginTime) && ObjectUtil.isNotNull(endTime)) {
return endTime - beginTime;
@ -352,4 +357,39 @@ public class TaskVo {
private Integer mine;
}
@Data
public static class RemindTask{
//任务详情id
private Long taskDetailId;
//任务id(任务日期id)
private Long subTaskId;
//任务名
private String taskName;
//任务名
private String taskBeginTime;
//任务名
private String taskEndTime;
//提醒信息的id
private Long remindId;
//需要被提醒的时间
private String absoluteTime;
//提醒的时机
private Byte timing;
//任务负责人id(需要被提醒)
private Long executorRole;
//项目id
private Long projectId;
//项目名
private String projectName;
}
@ApiModel
@Data
public static class RemindInfo{
@ApiModelProperty("提醒记录的id")
private Long remindId;
@ApiModelProperty("提醒的时机")
private Integer remindTiming;
@ApiModelProperty("时间")
private String time;
}
}

18
tall/src/main/java/com/ccsens/tall/persist/dao/ProRemindDao.java

@ -1,11 +1,29 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.ProRemind;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.mapper.ProRemindMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author
*/
@Repository
public interface ProRemindDao extends ProRemindMapper {
/**
* 获取当前需要提醒的任务
* @param now
* @return
*/
List<TaskVo.RemindTask> queryRemindByNow(@Param("now") long now);
/**
* 获取任务的提醒消息
* @param taskId
* @return
*/
List<TaskVo.RemindInfo> queryRemindByTask(@Param("taskId") Long taskId);
}

5
tall/src/main/java/com/ccsens/tall/rabbitMQ/MessageTest.java

@ -6,9 +6,10 @@ import com.ccsens.util.bean.message.common.MessageConstant;
import com.ccsens.util.bean.message.common.ServerMessage;
import com.ccsens.util.config.RabbitMQConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@Slf4j
public class MessageTest {
@Autowired
private AmqpTemplate rabbitTemplate;
@ -18,7 +19,7 @@ public class MessageTest {
serverMessage.setType("Ping");
InMessage inMessage = InMessage.newToServerMessage(MessageConstant.DomainType.Server,serverMessage);
String j = JacksonUtil.beanToJson(inMessage);
System.out.println(j);
log.info(j);
//FixMe 发送到消息队列
rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME,j);
}

113
tall/src/main/java/com/ccsens/tall/scheduled/ScheduledService.java

@ -0,0 +1,113 @@
package com.ccsens.tall.scheduled;
import cn.hutool.core.collection.CollectionUtil;
import com.ccsens.tall.bean.po.ProRemind;
import com.ccsens.tall.bean.po.SysProjectRobot;
import com.ccsens.tall.bean.po.SysProjectRobotExample;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.ProRemindDao;
import com.ccsens.tall.service.IProjectMessageService;
import com.ccsens.tall.service.IRobotService;
import com.ccsens.tall.util.TallConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* @author
*/
@Slf4j
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@Component
@EnableScheduling
public class ScheduledService {
@Resource
private ProRemindDao proRemindDao;
@Resource
private IRobotService robotService;
@Resource
private IProjectMessageService projectMessageService;
public static final String BEFORE_START = "您在项目's'中的任务's'将在s开始";
public static final String START = "您在项目's'中的任务's'开始了";
public static final String AFTER_START = "您在项目's'中的任务's'已经在's'开始了";
public static final String BEFORE_END = "您在项目's'中的任务's'将在's'结束";
public static final String END = "您在项目's'中的任务's'结束了";
public static final String AFTER_END = "您在项目's'中的任务's'已经在's'结束了";
public static final String USER_DEFINED = "来自项目's'中的任务's'的提醒";
@Scheduled(cron = "*/60 * * * * ?")
public void runfirst(){
long now = System.currentTimeMillis();
// long now = 1594611047000L;
List<TaskVo.RemindTask> taskRemindList = proRemindDao.queryRemindByNow(now);
if(CollectionUtil.isNotEmpty(taskRemindList)){
log.info(taskRemindList.toString());
taskRemindList.forEach(taskRemind -> {
//修改提醒信息的状态(设为进行中)
ProRemind proRemind = new ProRemind();
proRemind.setId(taskRemind.getRemindId());
proRemind.setFinishStatus((byte) 2);
proRemindDao.updateByPrimaryKeySelective(proRemind);
String content = "";
switch (taskRemind.getTiming()){
case 1:
content = BEFORE_START.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
content = content.replaceFirst("s",taskRemind.getTaskBeginTime());
break;
case 2:
content = START.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
break;
case 3:
content = AFTER_START.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
content = content.replaceFirst("s",taskRemind.getTaskBeginTime());
break;
case 4:
content = BEFORE_END.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
content = content.replaceFirst("s",taskRemind.getTaskEndTime());
break;
case 5:
content = END.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
break;
case 6:
content = AFTER_END.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
content = content.replaceFirst("s",taskRemind.getTaskEndTime());
break;
case 7:
content = USER_DEFINED.replaceFirst("s",taskRemind.getProjectName());
content = content.replaceFirst("s",taskRemind.getTaskName());
break;
default:
break;
}
try {
//机器人发送
robotService.sendRemindByRobot(taskRemind,content);
//公众号
projectMessageService.sendRemindByWx(taskRemind,content);
//修改提醒信息的状态
proRemind.setFinishStatus((byte) 4);
proRemindDao.updateByPrimaryKeySelective(proRemind);
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
}

2
tall/src/main/java/com/ccsens/tall/service/ExcelService.java

@ -189,7 +189,7 @@ public class ExcelService implements IExcelService {
//是否是模板,新加的不是模板 0
sysProject.setTemplate((byte) 0);
projectService.saveProject(sysProject);
System.out.println(sysProject);
log.info(String.valueOf(sysProject));
//TODO 添加项目的展示配置 暂时全是默认
ProShow proShow = new ProShow();
proShow.setId(snowflake.nextId());

8
tall/src/main/java/com/ccsens/tall/service/IProjectMessageService.java

@ -3,6 +3,7 @@ package com.ccsens.tall.service;
import com.ccsens.tall.bean.dto.ProjectMessageDto;
import com.ccsens.tall.bean.vo.MessageVo;
import com.ccsens.tall.bean.vo.ProjectMessageVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.annotation.OperateType;
import com.ccsens.util.wx.WxTemplateMessage;
@ -62,4 +63,11 @@ public interface IProjectMessageService {
* @return
*/
PageInfo<ProjectMessageVo.ProjectMsg> queryProjectMsg(ProjectMessageDto.ProjectMsg param, Long userId);
/**
* 任务提醒
* @param taskRemind 提醒相关消息
* @param content 提醒的内容
*/
void sendRemindByWx(TaskVo.RemindTask taskRemind, String content) throws Exception;
}

6
tall/src/main/java/com/ccsens/tall/service/IRobotService.java

@ -76,4 +76,10 @@ public interface IRobotService {
* @return
*/
String getRobotTemplate(int code);
/**
* 通过机器人发送提醒消息
* @param taskRemind 需要发送的任务信息
*/
void sendRemindByRobot(TaskVo.RemindTask taskRemind,String content) throws Exception;
}

18
tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java

@ -29,5 +29,21 @@ public interface ITaskSubTimeService {
* @param userId 当前用户的id
* @param taskRemind 任务id 提醒的时机和时间
*/
void saveRemind(Long userId, TaskDto.TaskRemind taskRemind) throws Exception;
List<TaskVo.RemindInfo> saveRemind(Long userId, TaskDto.TaskRemind taskRemind) throws Exception;
/**
* 删除任务的提醒
* @param currentUserId userId
* @param deleteTaskRemind 任务提醒记录的id
* @return 返回这个任务下的所有提醒
*/
List<TaskVo.RemindInfo> deleteRemind(Long currentUserId, TaskDto.DeleteTaskRemind deleteTaskRemind);
/**
* 修改提醒的信息
* @param currentUserId userId
* @param updateTaskRemind 需要修改的信息
* @return 返回值这个任务的所有提醒
*/
List<TaskVo.RemindInfo> updateRemind(Long currentUserId, TaskDto.UpdateTaskRemind updateTaskRemind);
}

10
tall/src/main/java/com/ccsens/tall/service/MessageService.java

@ -62,7 +62,7 @@ public class MessageService implements IMessageService{
SyncMessageWithStartDto message = new SyncMessageWithStartDto(projectId, sender, receivers, roleId, taskId, null, time, duration,player);
//FixMe 发送到消息队列
System.out.println("+++++++++++++"+JacksonUtil.beanToJson(message));
log.info("+++++++++++++"+JacksonUtil.beanToJson(message));
// rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME,
// JacksonUtil.beanToJson(message));
@ -76,14 +76,14 @@ public class MessageService implements IMessageService{
@Override
public void sendDeliverMessageWithUpload(InMessage inMessage) throws Exception {
System.out.println(JacksonUtil.beanToJson(inMessage));
log.info(JacksonUtil.beanToJson(inMessage));
//FixMe 发送到消息队列
rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME,JacksonUtil.beanToJson(inMessage));
}
@Override
public void sendDeliverMessageWithChecker(InMessage inMessage) throws Exception {
System.out.println(JacksonUtil.beanToJson(inMessage));
log.info(JacksonUtil.beanToJson(inMessage));
//FixMe 发送到消息队列
rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME,
JacksonUtil.beanToJson(inMessage));
@ -91,7 +91,7 @@ public class MessageService implements IMessageService{
@Override
public void sendDeliverMessageWithDelete(InMessage inMessage) throws Exception {
System.out.println(JacksonUtil.beanToJson(inMessage));
log.info(JacksonUtil.beanToJson(inMessage));
//FixMe 发送到消息队列
rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME ,
JacksonUtil.beanToJson(inMessage));
@ -99,7 +99,7 @@ public class MessageService implements IMessageService{
@Override
public void sendStartTaskMessage(SyncMessageWithStartDto syncMessage) throws Exception {
System.out.println(JacksonUtil.beanToJson(syncMessage));
log.info(JacksonUtil.beanToJson(syncMessage));
//FixMe 发送到消息队列
// rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME ,
// JacksonUtil.beanToJson(syncMessage));

43
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -21,7 +21,6 @@ import com.ccsens.util.WebConstant;
import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import lombok.Builder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -53,6 +52,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
@Resource
private TaskSubTimeDao taskSubTimeDao;
@Resource
private ITaskSubTimeService taskSubTimeService;
@Resource
private TaskMemberDao taskMemberDao;
@Resource
private ProSubTimeMemberDao proSubTimeMemberDao;
@ -72,6 +73,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
private ProPluginConfigMapper proPluginConfigMapper;
@Resource
private IRobotService robotService;
@Resource
private ProRemindDao proRemindDao;
@Override
public void saveTaskDetail(ProTaskDetail taskDetail) {
@ -102,7 +105,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
// obj = getTaskInfoByMvp(projectId, page, pageSize);
// } else
if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) {
obj = getTaskInfoByProjectIdAndPM(currentUserId, projectId, roleId, startTime, endTime, process, page, pageSize);
obj = getTaskInfoByProjectIdAndPM(currentUserId, projectId, roleId, startTime, endTime, process, page, pageSize,priority);
} else if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.Member.value)) {
obj = getTaskInfoByProjectIdAndRoleId(currentUserId, projectId, roleId, startTime, endTime, process, page, pageSize,priority);
}
@ -135,7 +138,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
* 查看任务 项目经理
*/
private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndPM(Long currentUserId, Long projectId,Long roleId, Long startTime, Long endTime,
Integer process, Integer page, Integer pageSize) throws Exception {
Integer process, Integer page, Integer pageSize,Integer priority) throws Exception {
TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo();
List<TaskVo.GlobalTask> globalTaskList = new ArrayList<>();
@ -201,6 +204,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
//二级任务配置
task.setProTaskConfig(getProTaskShow(task.getDetailId()));
//提醒信息
normalTask.setRemindInfoList(proRemindDao.queryRemindByTask(normalTask.getId()));
}
TaskUtil.Task task = TaskUtil.splitTask(secondNormalTaskList, startTime, endTime, process);
if (CollectionUtil.isNotEmpty(task.getGlobalTask())) {
@ -240,7 +245,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
List<TaskVo.GlobalTask> globalTaskList = new ArrayList<>();
List<TaskVo.NormalTask> normalTaskList = new ArrayList<>();
TaskVo.GlobalTask globalTask = null;
TaskVo.GlobalTask globalTask;
//获取“全体成员”角色
ProRole allMember = proRoleService.getAllMember(projectId);
Long allMemberId = null;
@ -276,6 +281,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
//任务配置
normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId()));
//提醒信息
normalTask.setRemindInfoList(proRemindDao.queryRemindByTask(normalTask.getId()));
}
TaskUtil.Task task = TaskUtil.splitTask(secondTaskVoList, startTime, endTime, process);
@ -503,7 +510,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
taskDeliverByMvp.setDelivers(taskDeliverService.selectDeliverOrInputByTask(task.getId(), 0));
}else {
Long now = System.currentTimeMillis();
System.out.println(task.getName());
log.info(task.getName());
TaskVo.TaskIdAndSubTimeIdByParentIdAndTime taskAndSubTime = taskDetailDao.selectSubTimeByTaskParentIdAndTime(task.getId(), now);
if(ObjectUtil.isNotNull(taskAndSubTime)){
taskDeliverByMvp.setDelivers(taskDeliverService.selectDeliverOrInputByTask(taskAndSubTime.getTaskId(), 0));
@ -556,14 +563,15 @@ public class ProTaskDetailService implements IProTaskDetailService {
//添加项目信息和插件信息
normalTaskAddPlugin(currentUserId, subTime.getTaskDetailId(), taskDetail);
List<TaskVo.NormalTask> groupTaskList = new ArrayList<>();
//提醒信息
taskDetail.setRemindInfoList(proRemindDao.queryRemindByTask(taskDetail.getId()));
//获取此任务的子任务
ProTaskDetailExample detailExample = new ProTaskDetailExample();
detailExample.createCriteria().andParentIdEqualTo(taskDetail.getDetailId());
List<ProTaskDetail> detailList = taskDetailDao.selectByExample(detailExample);
if(CollectionUtil.isNotEmpty(detailList)){
for(ProTaskDetail detail : detailList){
TaskVo.NormalTask groupTask = null;
TaskVo.NormalTask groupTask;
Long subTimeId = taskDeliverService.isTaskOrSubTime(detail.getId());
if(ObjectUtil.isNotNull(subTimeId)){
groupTask = taskDetailDao.selectTaskByTaskId(subTimeId, detail.getId(),detail.getExecutorRole());
@ -862,13 +870,14 @@ public class ProTaskDetailService implements IProTaskDetailService {
//关键词模糊搜索
if (StrUtil.isNotEmpty(key)) {
if (CollectionUtil.isNotEmpty(normalTaskList)) {
Iterator<TaskVo.NormalTask> it = normalTaskList.iterator();
while (it.hasNext()) {
TaskVo.NormalTask normalTask = it.next();
if (!normalTask.getName().contains(key)) {
it.remove();
}
}
normalTaskList.removeIf(normalTask -> !normalTask.getName().contains(key));
// Iterator<TaskVo.NormalTask> it = normalTaskList.iterator();
// while (it.hasNext()) {
// TaskVo.NormalTask normalTask = it.next();
// if (!normalTask.getName().contains(key)) {
// it.remove();
// }
// }
}
}
//业务分页
@ -1127,6 +1136,12 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
//修改数据
taskDetailDao.updateByPrimaryKeySelective(taskDetail);
//修改提醒信息
if(CollectionUtil.isNotEmpty(updateTaskInfo.getTaskRemindList())){
updateTaskInfo.getTaskRemindList().forEach(updateTaskRemind -> {
taskSubTimeService.updateRemind(currentUserId,updateTaskRemind);
});
}
//返回的任务详细信息
Long subTimeId = taskDeliverService.isTaskOrSubTime(taskDetail.getId());
normalTask = getTaskInfoByTaskId(currentUserId,project.getId(),subTimeId);

46
tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java

@ -1,6 +1,7 @@
package com.ccsens.tall.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
@ -12,6 +13,7 @@ import com.ccsens.tall.bean.po.SysOperation;
import com.ccsens.tall.bean.po.SysOperationMessage;
import com.ccsens.tall.bean.vo.MessageVo;
import com.ccsens.tall.bean.vo.ProjectMessageVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.bean.vo.UserVo;
import com.ccsens.tall.persist.dao.ProMemberDao;
import com.ccsens.tall.persist.dao.SysAuthDao;
@ -67,6 +69,8 @@ public class ProjectMessageService implements IProjectMessageService {
private SysMessageSendDao sysMessageSendDao;
@Resource
private SysAuthDao sysAuthDao;
@Resource
private IUserService userService;
@Resource
private AmqpTemplate rabbitTemplate;
@ -365,4 +369,46 @@ public class ProjectMessageService implements IProjectMessageService {
List<ProjectMessageVo.ProjectMsg> list = sysOperationDao.queryProjectMsg(param);
return new PageInfo<>(list);
}
@Override
public void sendRemindByWx(TaskVo.RemindTask taskRemind, String content) throws Exception {
//查询角色下的所有人员的userId
List<Long> userIds = userService.selectUserIdByRoleId(taskRemind.getExecutorRole());
//查询关注公众号的用户
List<UserVo.Oauth2WX> oauths = sysAuthDao.queryOauth2WX(userIds);
List<String> openids = new ArrayList<>();
oauths.forEach(oauth2WX -> {
openids.add(oauth2WX.getOpenid());
});
openids.forEach(openid -> {
String url = String.format(WechatUtil.PROJECT_URL, taskRemind.getProjectId());
WxTemplateMessage.MiniProgram miniProgram = new WxTemplateMessage.MiniProgram(WechatUtil.appid,url);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings("任务提醒"));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskRemind.getTaskName()));
data.setKeyword2(new WxTemplateMessage.TemplateSettings("提醒"));
WxTemplateMessage wxTemplateMessage = new WxTemplateMessage();
wxTemplateMessage.setTouser(openid);
wxTemplateMessage.setMiniprogram(miniProgram);
wxTemplateMessage.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId);
wxTemplateMessage.setData(data);
wxTemplateMessage.getData().setRemark(new WxTemplateMessage.TemplateSettings(content));
String result = RestTemplateUtil.postBody(WebConstant.Wx.TEMPLATE_SEND, wxTemplateMessage);
log.info("发送模板返回结果:{}", result);
JsonResponse response = null;
try {
response = JacksonUtil.xmlToBean(result, JsonResponse.class);
} catch (IOException e) {
e.printStackTrace();
}
if (response.getCode().intValue() != CodeEnum.SUCCESS.getCode().intValue()) {
//TODO 报警
log.error("公众号通知失败{}", result);
}
});
}
}

2
tall/src/main/java/com/ccsens/tall/service/RingService.java

@ -102,7 +102,7 @@ public class RingService implements IRingService {
//发送消息
RingMessageWithSendDto ringMessageWithSendDto = new RingMessageWithSendDto(
ringMsg.getId(), ringSendDto.getProjectId(), ringMsg.getValue(), time);
System.out.println(JSONObject.toJSONString(ringMessageWithSendDto.getData()));
log.info(JSONObject.toJSONString(ringMessageWithSendDto.getData()));
InMessage inMessage = new InMessage();
inMessage.setToDomain(MessageConstant.DomainType.User);
inMessage.setTos(userIdSet);

34
tall/src/main/java/com/ccsens/tall/service/RobotService.java

@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@ -81,7 +82,6 @@ public class RobotService implements IRobotService{
} catch (Exception e) {
e.printStackTrace();
}
break;
case 1://钉钉
break;
@ -387,4 +387,36 @@ public class RobotService implements IRobotService{
// 添加wx消息通知
RobotUtil.setWxTemplate(WxTemplateUtil.getAddComment(project.getId(), userName));
}
@Override
public void sendRemindByRobot(TaskVo.RemindTask taskRemind,String content) throws Exception {
String[] rolePhone = getMemberPhonesByRoleId(taskRemind.getExecutorRole());
//获取机器人信息
SysProjectRobotExample sysProjectRobotExample = new SysProjectRobotExample();
sysProjectRobotExample.createCriteria().andProjectIdEqualTo(taskRemind.getProjectId());
List<SysProjectRobot> sysProjectRobotList = sysProjectRobotDao.selectByExample(sysProjectRobotExample);
if(CollectionUtil.isNotEmpty(sysProjectRobotList)){
sysProjectRobotList.forEach(sysProjectRobot -> {
//获取机器人信息
SysRobot sysRobot = sysRobotDao.selectByPrimaryKey(sysProjectRobot.getRobotId());
//4.发送消息
if(ObjectUtil.isNotNull(sysRobot)){
switch (sysRobot.getClientType()){
case 0://微信
try {
WxRobotUtil.sendRobotInfo(sysRobot.getWebHook(), content,"text",null, Arrays.asList(rolePhone));
} catch (Exception e) {
e.printStackTrace();
}
break;
case 1://钉钉
break;
default:
}
}
// }
});
}
}
}

125
tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java

@ -20,10 +20,12 @@ import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sun.corba.se.spi.ior.ObjectKey;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.unit.DataUnit;
import javax.annotation.Resource;
import java.util.*;
@ -421,11 +423,18 @@ public class TaskSubTimeService implements ITaskSubTimeService {
if (ObjectUtil.isNull(subTimeId) && CollectionUtil.isNotEmpty(proTaskSubTimeList)) {
subTimeId = proTaskSubTimeList.get(0).getId();
}
//添加任务提醒
List<TaskVo.RemindInfo> remindInfoList = new ArrayList<>();
if(ObjectUtil.isNotNull(addTask.getTaskRemind())){
remindInfoList = saveRemind(currentUserId,addTask.getTaskRemind());
}
//返回
TaskVo.NormalTask taskDetail = taskDetailDao.selectTaskByTaskId(subTimeId, detail.getId(), detail.getExecutorRole());
if (ObjectUtil.isNotNull(taskDetail)) {
taskDetailService.managePlugin(currentUserId, detail.getExecutorRole(), taskDetail);
taskDetail.setRemindInfoList(remindInfoList);
}
//通过智能助手发送通知
robotService.addTaskRobotSend(currentUserId, project, addTask.getTaskName(), addTask.getExecutorId());
@ -473,7 +482,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
if (ObjectUtil.isNull(type)) {
for (Map.Entry<Integer, String> entry : typeMap.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
log.info("key= " + entry.getKey() + " and value= " + entry.getValue());
TaskVo.KanBan kanBan = new TaskVo.KanBan();
kanBan.setCode(entry.getKey());
kanBan.setTypeName(entry.getValue());
@ -531,7 +540,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Override
public void saveRemind(Long userId,TaskDto.TaskRemind taskRemind) throws Exception {
public List<TaskVo.RemindInfo> saveRemind(Long userId,TaskDto.TaskRemind taskRemind) throws Exception {
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(taskRemind.getTaskId());
if(ObjectUtil.isNull(proTaskSubTime)){
throw new BaseException(CodeEnum.NOT_TASK);
@ -540,13 +549,13 @@ public class TaskSubTimeService implements ITaskSubTimeService {
if(ObjectUtil.isNull(proTaskDetail)){
throw new BaseException(CodeEnum.NOT_TASK);
}
//判断用户是否是任务的负责人
ProRole role = proRoleDao.selectByPrimaryKey(proTaskDetail.getExecutorRole());
Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId());
if (!role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase) && !isBelongRole) {
log.info("此用户不是该任务的负责人:{}", role);
throw new BaseException(CodeEnum.IS_NOT_EXECUTOR);
}
// //判断用户是否是任务的负责人
// ProRole role = proRoleDao.selectByPrimaryKey(proTaskDetail.getExecutorRole());
// Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId());
// if (!role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase) && !isBelongRole) {
// log.info("此用户不是该任务的负责人:{}", role);
// throw new BaseException(CodeEnum.IS_NOT_EXECUTOR);
// }
Long absoluteTime = 0L;
//计算提醒的绝对时间
switch (taskRemind.getRemindTiming()) {
@ -573,6 +582,19 @@ public class TaskSubTimeService implements ITaskSubTimeService {
break;
default:
}
//获取时长
String unit = "";
if(taskRemind.getRemindTiming() == 2 || taskRemind.getRemindTiming() == 5 || taskRemind.getRemindTiming() == 7){
unit = DateUtil.format(new Date(absoluteTime),"MM月dd日HH时mm分");
}else {
if(taskRemind.getUnit() == 0){
unit = taskRemind.getDuration()/60/1000 + "分钟";
}else if(taskRemind.getUnit() == 1){
unit = taskRemind.getDuration()/60/60/1000 + "小时";
}else if(taskRemind.getUnit() == 2){
unit = taskRemind.getDuration()/24/60/60/1000 + "天";
}
}
//添加提醒信息
ProRemind remind = new ProRemind();
remind.setId(snowflake.nextId());
@ -580,6 +602,91 @@ public class TaskSubTimeService implements ITaskSubTimeService {
remind.setRemindTiming(taskRemind.getRemindTiming());
remind.setRemindAbsoluteTime(absoluteTime);
remind.setFinishStatus((byte) 0);
remind.setDuration(unit);
proRemindDao.insertSelective(remind);
//返回这个任务的所有提醒信息
return proRemindDao.queryRemindByTask(taskRemind.getTaskId());
}
@Override
public List<TaskVo.RemindInfo> deleteRemind(Long currentUserId, TaskDto.DeleteTaskRemind deleteTaskRemind) {
ProRemind proRemind = proRemindDao.selectByPrimaryKey(deleteTaskRemind.getRemindId());
if(ObjectUtil.isNull(proRemind)){
throw new BaseException(CodeEnum.PARAM_ERROR);
}
proRemind.setRecStatus((byte) 2);
proRemindDao.updateByPrimaryKeySelective(proRemind);
return proRemindDao.queryRemindByTask(proRemind.getSubTaskId());
}
@Override
public List<TaskVo.RemindInfo> updateRemind(Long currentUserId, TaskDto.UpdateTaskRemind updateTaskRemind) {
//查找提醒
ProRemind proRemind = proRemindDao.selectByPrimaryKey(updateTaskRemind.getRemindId());
if(ObjectUtil.isNull(proRemind)){
throw new BaseException(CodeEnum.PARAM_ERROR);
}
//查找任务
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(proRemind.getSubTaskId());
if(ObjectUtil.isNull(proTaskSubTime)){
throw new BaseException(CodeEnum.NOT_TASK);
}
//修改提醒的时机
Long absoluteTime = 0L;
if(updateTaskRemind.getRemindTiming() != null){
proRemind.setRemindTiming(updateTaskRemind.getRemindTiming());
switch (proRemind.getRemindTiming()) {
case TallConstant.TaskRemindTiming.REMIND_TASK_START:
absoluteTime = proTaskSubTime.getBeginTime();
break;
case TallConstant.TaskRemindTiming.REMIND_TASK_END:
absoluteTime = proTaskSubTime.getEndTime();
break;
case TallConstant.TaskRemindTiming.REMIND_TASK_USER_DEFINED:
absoluteTime = updateTaskRemind.getDuration();
break;
default:
}
}
//修改时间和单位
if(updateTaskRemind.getDuration() != null){
if(updateTaskRemind.getUnit() == null){
throw new BaseException(CodeEnum.NOT_UNIT);
}
switch (proRemind.getRemindTiming()) {
case TallConstant.TaskRemindTiming.REMIND_TASK_BEFORE_START:
absoluteTime = proTaskSubTime.getBeginTime() - updateTaskRemind.getDuration();
break;
case TallConstant.TaskRemindTiming.REMIND_TASK_AFTER_START:
absoluteTime = proTaskSubTime.getBeginTime() + updateTaskRemind.getDuration();
break;
case TallConstant.TaskRemindTiming.REMIND_TASK_BEFORE_END:
absoluteTime = proTaskSubTime.getEndTime() - updateTaskRemind.getDuration();
break;
case TallConstant.TaskRemindTiming.REMIND_TASK_AFTER_END:
absoluteTime = proTaskSubTime.getEndTime() + updateTaskRemind.getDuration();
break;
default:
}
//获取时长
String unit = "";
if(proRemind.getRemindTiming() == 2 || proRemind.getRemindTiming() == 5 || proRemind.getRemindTiming() == 7){
unit = DateUtil.format(new Date(absoluteTime),"MM月dd日HH时mm分");
}else {
if(updateTaskRemind.getUnit() == 0){
unit = updateTaskRemind.getDuration()/60/1000 + "分钟";
}else if(updateTaskRemind.getUnit() == 1){
unit = updateTaskRemind.getDuration()/60/60/1000 + "小时";
}else if(updateTaskRemind.getUnit() == 2){
unit = updateTaskRemind.getDuration()/24/60/60/1000 + "天";
}
}
proRemind.setDuration(unit);
}
if(absoluteTime != 0){
proRemind.setRemindAbsoluteTime(absoluteTime);
}
proRemindDao.updateByPrimaryKeySelective(proRemind);
return proRemindDao.queryRemindByTask(proRemind.getSubTaskId());
}
}

2
tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java

@ -158,7 +158,7 @@ public class WxTemplateUtil {
*/
public static WxTemplateMessage getAddComment(Long projectId, String userName) {
WxTemplateMessage message = getWxTemplateMessage(projectId);
message.setTemplate_id(WxGzhUtil.Template.COMMENT.templateId);
message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings(userName + "进行了点评"));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName));

5
tall/src/main/java/com/ccsens/tall/web/DebugController.java

@ -12,6 +12,7 @@ import com.ccsens.util.config.RabbitMQConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.PlatformTransactionManager;
@ -24,7 +25,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashSet;
import java.util.Set;
@Slf4j
@Api(tags = "DEBUG" , description = "DebugController | ")
@RestController
@RequestMapping("/debug")
@ -78,7 +79,7 @@ public class DebugController {
InMessage inMessage = InMessage.newToUserMessage("1175954520199532544",s,null,messageRule,l);
String j = JacksonUtil.beanToJson(inMessage);
System.out.println(j);
log.info(j);
//FixMe 发送到消息队列
rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME,j);

5
tall/src/main/java/com/ccsens/tall/web/ExcelController.java

@ -12,6 +12,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -20,7 +21,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
@Slf4j
@Api(tags = "Excel" , description = "")
@RestController
@RequestMapping("/projects")
@ -44,7 +45,7 @@ public class ExcelController {
String allowedExts = "xls,xlsx";
String dir = WebConstant.UPLOAD_PROJECT_WBS + File.separator;
String path = UploadFileUtil_Servlet3.uploadFile(file, allowedExts, dir);
System.out.println(dir+""+path);
log.info(dir+""+path);
//获取文件路径,文件名,和文件大小
String filePath = WebConstant.UPLOAD_PATH_PROJECT + File.separator + path;
String name = UploadFileUtil_Servlet3.getFileNameByPart(file);

4
tall/src/main/java/com/ccsens/tall/web/IndexController.java

@ -2,6 +2,7 @@ package com.ccsens.tall.web;
import com.ccsens.cloudutil.bean.QueryParam;
import com.ccsens.tall.config.BusinessProps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
* @author: wuHuiJuan
* @create: 2019/11/26 15:06
*/
@Slf4j
@RestController
public class IndexController {
@ -25,7 +27,7 @@ public class IndexController {
@RequestMapping({"","/","/index"})
public String index(){
System.out.println("=============================: " + businessProps.getPacketRate());
log.info("=============================: " + businessProps.getPacketRate());
return "hello world";
}

4
tall/src/main/java/com/ccsens/tall/web/ProjectController.java

@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -25,6 +26,7 @@ import java.util.List;
/**
* @author
*/
@Slf4j
@Api(tags = "项目相关API")
@RestController
@RequestMapping("/projects")
@ -65,7 +67,7 @@ public class ProjectController {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
String authHeader = request.getHeader(WebConstant.HEADER_KEY_TOKEN);
String token = authHeader.substring(WebConstant.HEADER_KEY_TOKEN_PREFIX.length());
System.out.println(token);
log.info(token);
List<ProjectVo.ProjectInfo> projectInfoList = projectService.getProjectInfo(currentUserId,date,orderType,order,token);
return JsonResponse.newInstance().ok(projectInfoList);
}

27
tall/src/main/java/com/ccsens/tall/web/TaskController.java

@ -173,13 +173,34 @@ public class TaskController {
@ApiImplicitParams({
})
@RequestMapping(value = "/remind", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse saveRemind(HttpServletRequest request,
public JsonResponse<TaskVo.RemindInfo> saveRemind(HttpServletRequest request,
@ApiParam @Validated @RequestBody TaskDto.TaskRemind taskRemind) throws Exception {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
subTimeService.saveRemind(currentUserId,taskRemind);
return JsonResponse.newInstance().ok();
List<TaskVo.RemindInfo> remindInfo = subTimeService.saveRemind(currentUserId,taskRemind);
return JsonResponse.newInstance().ok(remindInfo);
}
@ApiOperation(value = "删除任务上的提醒", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/remind/delete", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<TaskVo.RemindInfo> deleteRemind(HttpServletRequest request,
@ApiParam @Validated @RequestBody TaskDto.DeleteTaskRemind deleteTaskRemind) throws Exception {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
List<TaskVo.RemindInfo> remindInfo = subTimeService.deleteRemind(currentUserId,deleteTaskRemind);
return JsonResponse.newInstance().ok(remindInfo);
}
@ApiOperation(value = "修改任务上的提醒", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/remind/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<TaskVo.RemindInfo> updateRemind(HttpServletRequest request,
@ApiParam @Validated @RequestBody TaskDto.UpdateTaskRemind updateTaskRemind) throws Exception {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
List<TaskVo.RemindInfo> remindInfo = subTimeService.updateRemind(currentUserId,updateTaskRemind);
return JsonResponse.newInstance().ok(remindInfo);
}
//==============================================================
@OperateType(value = 3)

48
tall/src/main/resources/mapper_dao/ProRemindDao.xml

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.tall.persist.dao.ProRemindDao">
<select id="queryRemindByNow" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.TaskVo$RemindTask">
SELECT
s.id as subTaskId,
d.id as taskDetailId,
d.`name` as taskName,
r.id as remindId,
FROM_UNIXTIME(r.remind_absolute_time/1000,'%m月%d日%h时%i分') as absoluteTime,
FROM_UNIXTIME(if(s.real_begin_time = 0,s.begin_time/1000,s.real_begin_time/1000), '%m月%d日%h时%i分') as taskBeginTime,
FROM_UNIXTIME(if(s.real_end_time = 0,s.end_time/1000,s.real_end_time/1000), '%m月%d日%h时%i分') as taskEndTime,
d.executor_role as executorRole,
d.project_id as projectId,
r.remind_timing as timing,
sp.`name` as projectName
FROM
t_pro_remind r LEFT JOIN t_pro_task_sub_time s on r.sub_task_id = s.id
LEFT JOIN t_pro_task_detail d on d.id = s.task_detail_id
LEFT JOIN t_sys_project sp on d.project_id = sp.id
WHERE
r.rec_status = 0
AND
d.rec_status = 0
AND
r.finish_status in (0,3)
and
r.remind_absolute_time &gt;= #{now}
and
r.remind_absolute_time &lt; #{now} + 60000
</select>
<select id="queryRemindByTask" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.TaskVo$RemindInfo">
select
id as remindId,
remind_timing as remindTiming,
duration as `time`
from
t_pro_remind
where
sub_task_id = #{taskId}
and
rec_status = 0
</select>
</mapper>

29
tall/src/main/resources/mapper_raw/ProRemindMapper.xml

@ -11,6 +11,7 @@
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="rec_status" jdbcType="TINYINT" property="recStatus" />
<result column="duration" jdbcType="VARCHAR" property="duration" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@ -72,7 +73,7 @@
</sql>
<sql id="Base_Column_List">
id, sub_task_id, remind_timing, remind_absolute_time, finish_status, remind_times,
created_at, updated_at, rec_status
created_at, updated_at, rec_status, duration
</sql>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.ProRemindExample" resultMap="BaseResultMap">
select
@ -107,12 +108,12 @@
<insert id="insert" parameterType="com.ccsens.tall.bean.po.ProRemind">
insert into t_pro_remind (id, sub_task_id, remind_timing,
remind_absolute_time, finish_status, remind_times,
created_at, updated_at, rec_status
)
created_at, updated_at, rec_status,
duration)
values (#{id,jdbcType=BIGINT}, #{subTaskId,jdbcType=BIGINT}, #{remindTiming,jdbcType=TINYINT},
#{remindAbsoluteTime,jdbcType=BIGINT}, #{finishStatus,jdbcType=TINYINT}, #{remindTimes,jdbcType=INTEGER},
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}
)
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT},
#{duration,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.ccsens.tall.bean.po.ProRemind">
insert into t_pro_remind
@ -144,6 +145,9 @@
<if test="recStatus != null">
rec_status,
</if>
<if test="duration != null">
duration,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -173,6 +177,9 @@
<if test="recStatus != null">
#{recStatus,jdbcType=TINYINT},
</if>
<if test="duration != null">
#{duration,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.ccsens.tall.bean.po.ProRemindExample" resultType="java.lang.Long">
@ -211,6 +218,9 @@
<if test="record.recStatus != null">
rec_status = #{record.recStatus,jdbcType=TINYINT},
</if>
<if test="record.duration != null">
duration = #{record.duration,jdbcType=VARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
@ -226,7 +236,8 @@
remind_times = #{record.remindTimes,jdbcType=INTEGER},
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
rec_status = #{record.recStatus,jdbcType=TINYINT}
rec_status = #{record.recStatus,jdbcType=TINYINT},
duration = #{record.duration,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -258,6 +269,9 @@
<if test="recStatus != null">
rec_status = #{recStatus,jdbcType=TINYINT},
</if>
<if test="duration != null">
duration = #{duration,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
@ -270,7 +284,8 @@
remind_times = #{remindTimes,jdbcType=INTEGER},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
rec_status = #{recStatus,jdbcType=TINYINT}
rec_status = #{recStatus,jdbcType=TINYINT},
duration = #{duration,jdbcType=VARCHAR}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

2
util/src/main/java/com/ccsens/util/CodeEnum.java

@ -126,6 +126,8 @@ public enum CodeEnum {
FILE_NOT_FOUND(106,"未找到对应的文件,请检查后操作",true),
SIGNATURE_FAIL(107,"签名验证失败",true),
NOT_UNIT(107,"时间单位不能为空",true),

8
util/src/main/java/com/ccsens/util/Md5Util.java

@ -1,12 +1,14 @@
package com.ccsens.util;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
@Slf4j
public class Md5Util {
//
// //获取文件MD5
@ -44,14 +46,14 @@ public class Md5Util {
}
str = md5;
} catch (Exception e) {
System.out.println(e);
log.info(String.valueOf(e));
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
System.out.println(e);
log.info(String.valueOf(e));
}
}
return str;

3
util/src/main/java/com/ccsens/util/Sha1Util.java

@ -1,10 +1,13 @@
package com.ccsens.util;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
public class Sha1Util {
public static String getFileSha1(File file) {
String str = null;

5
util/src/main/java/com/ccsens/util/SmsUtil.java

@ -5,10 +5,11 @@ import cn.hutool.json.JSONException;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Slf4j
@Component
public class SmsUtil {
private static final int appid = 1400188778; // 1400开头
@ -25,7 +26,7 @@ public class SmsUtil {
SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumbers[0],
templateId, params, smsSign, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信
System.out.println(result);
log.info(String.valueOf(result));
} catch (HTTPException e) {
// HTTP响应码错误
e.printStackTrace();

3
util/src/main/java/com/ccsens/util/config/H5WebSocketInterceptor.java

@ -1,6 +1,7 @@
package com.ccsens.util.config;
import com.ccsens.util.WebConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
@ -9,7 +10,7 @@ import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
import java.util.Map;
@Slf4j
public class H5WebSocketInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest serverHttpRequest,

4
util/src/main/java/com/ccsens/util/cron/NatureToDate.java

@ -4,6 +4,7 @@ package com.ccsens.util.cron;
import com.ccsens.util.DateUtil;
import com.ccsens.util.StringUtil;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
@ -14,6 +15,7 @@ import java.util.*;
* @author: wu huijuan
* @create: 2019/11/14 11:55
*/
@Slf4j
public class NatureToDate {
public static void main(String[] args) throws Exception {
@ -42,7 +44,7 @@ public class NatureToDate {
// System.out.println("第八天:" + generateDates("第八天", start, end));
// System.out.println("每月15号下午5点:" + generateDates("每月15号下午5点", start, end));
System.out.println("周一-周五 8点-9点: " + generateDates("周一-周五 8点-9点", start, end));
log.info("周一-周五 8点-9点: " + generateDates("周一-周五 8点-9点", start, end));
}

4
util/src/main/java/com/ccsens/util/enterprisewx/WXBizMsgCrypt.java

@ -21,6 +21,7 @@ import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
/**
@ -38,6 +39,7 @@ import org.apache.commons.codec.binary.Base64;
* <li>如果安装了JDK将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件</li>
* </ol>
*/
@Slf4j
public class WXBizMsgCrypt {
static Charset CHARSET = Charset.forName("utf-8");
Base64 base64 = new Base64();
@ -281,7 +283,7 @@ public class WXBizMsgCrypt {
if (!signature.equals(msgSignature)) {
throw new AesException(AesException.ValidateSignatureError);
}
System.out.println("验签通过");
log.info("验签通过");
String result = decrypt(echoStr);
return result;
}

3
util/src/main/java/com/ccsens/util/wx/WxGzhUtil.java

@ -102,7 +102,7 @@ public class WxGzhUtil {
TASK_ADD("Tj0n5-aLvrrAksbGH5A1h-Dx44Z3c9u6cu7WZK5StEQ","工作分配通知", "{{first.DATA}}工作内容:{{keyword1.DATA}}创建时间:{{keyword2.DATA}}{{remark.DATA}}"),
TASK_DELETE("0qi0qqFyNQL0UChGlXLx92EtsBDhTLMINnt0akK1pyM","工作取消通知", "{{first.DATA}}工作内容:{{keyword1.DATA}}工作时间:{{keyword2.DATA}}详情:{{keyword3.DATA}}{{remark.DATA}}"),
TASK_PROGRESS("NeBLAEbPRFV4O5gkFeHTgPmwcpIUaMY_XkmhjLZ9v_4","工作进度通知", "{{first.DATA}}工作内容:{{keyword1.DATA}}当前状态:{{keyword2.DATA}}{{remark.DATA}}"),
COMMENT("NeBLAEbPRFV4O5gkFeHTgPmwcpIUaMY_XkmhjLZ9v_4","工作进度通知", "{{first.DATA}}工作内容:{{keyword1.DATA}}当前状态:{{keyword2.DATA}}{{remark.DATA}}"),
// COMMENT("NeBLAEbPRFV4O5gkFeHTgPmwcpIUaMY_XkmhjLZ9v_4","工作进度通知", "{{first.DATA}}工作内容:{{keyword1.DATA}}当前状态:{{keyword2.DATA}}{{remark.DATA}}"),
;
public String templateId;
public String title;
@ -113,7 +113,6 @@ public class WxGzhUtil {
this.title = title;
this.content = content;
}
}
public static final class Field{

14
util/src/main/java/com/ccsens/util/wx/WxRobotUtil.java

@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.ccsens.util.JacksonUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;
import java.io.*;
@ -12,7 +13,7 @@ import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class WxRobotUtil {
@Data
public static class WxRobotVo{
@ -74,6 +75,15 @@ public class WxRobotUtil {
}
}
/**
* 微信机器人
* @param webHook 机器人地址
* @param content 消息的内容
* @param msgType 消息格式
* @param mentionedList 通过id@群内人员
* @param mentionedMobileList 通过手机号@群内人员
* @throws Exception
*/
public static void sendRobotInfo(String webHook,String content,String msgType,List<String> mentionedList,List<String> mentionedMobileList)throws Exception {
WxRobotVo wxRobotVo = new WxRobotVo();
wxRobotVo.setMsgtype(msgType);
@ -94,7 +104,7 @@ public class WxRobotUtil {
}
String body = JacksonUtil.beanToJson(wxRobotVo);
System.out.println(body);
log.info(body);
sendPost(webHook,body);
}
public static void main(String[] args) throws Exception {

12
util/src/test/java/com/ccsens/util/Base64Test.java

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ccsens.util.wx.WxXcxUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
@ -13,16 +14,14 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @description:
* @author: wuHuiJuan
* @create: 2019/12/17 17:26
*/
@Slf4j
public class Base64Test {
@Test
@ -36,14 +35,13 @@ public class Base64Test {
FileOutputStream out = new FileOutputStream(file);
out.write(decode);
out.close();
System.out.println(System.currentTimeMillis());
log.info(String.valueOf(System.currentTimeMillis()));
}
@Test
public void test02() throws Exception {
File file = new File("d:"+File.separator+"1.png");
System.out.println(file.length());
}

15
util/src/test/java/com/ccsens/util/ZipTest.java

@ -2,6 +2,7 @@ package com.ccsens.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.ZipUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import javax.script.ScriptEngine;
@ -14,19 +15,20 @@ import java.io.UnsupportedEncodingException;
* @author: wuHuiJuan
* @create: 2019/12/10 15:44
*/
@Slf4j
public class ZipTest {
@Test
public void gzip() throws UnsupportedEncodingException {
String content = "QueryDto(param=DoctorDto.Submit(positionId=1204239831257976832, titleId=1204239838740615168, name=李院长, sex=0, age=38), userId=1202064120040525824, token=null)--";
System.out.println("content长度" + content.length());
log.info("content长度" + content.length());
byte[] gzip = ZipUtil.gzip(content, "UTF-8");
String encode = Base64.encode(gzip);
System.out.println("encode长度:" + encode.length());
log.info("encode长度:" + encode.length());
String zipContent = new String(gzip);
System.out.println(zipContent);
log.info(zipContent);
byte[] bytes = ZipUtil.unGzip(Base64.decode(encode));
System.out.println("ungzip:" + new String(bytes, "UTF-8") );
System.out.println("length:" + new String(bytes, "UTF-8").length());
log.info("ungzip:" + new String(bytes, "UTF-8") );
log.info("length:" + new String(bytes, "UTF-8").length());
}
@Test
@ -35,8 +37,7 @@ public class ZipTest {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval(expr);
System.out.println(result.getClass());
System.out.println(result);
log.info((String) result);
}

Loading…
Cancel
Save