You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
7.6 KiB
168 lines
7.6 KiB
2 years ago
|
package com.fr.plugin.yt;
|
||
|
|
||
|
import com.fanruan.api.log.LogKit;
|
||
|
import com.fr.base.Base64;
|
||
|
import com.fr.base.FRContext;
|
||
|
import com.fr.base.ServerConfig;
|
||
|
import com.fr.decision.authority.data.User;
|
||
|
import com.fr.decision.system.bean.message.MessageUrlType;
|
||
|
import com.fr.decision.webservice.v10.user.UserService;
|
||
|
import com.fr.general.IOUtils;
|
||
|
import com.fr.json.JSONObject;
|
||
|
import com.fr.plugin.beans.YTOutputBean;
|
||
|
import com.fr.plugin.dao.MyEntityDao;
|
||
|
import com.fr.plugin.dao.MyUserDao;
|
||
|
import com.fr.plugin.entitys.YTUserEntity;
|
||
|
import com.fr.plugin.entitys.YtOutputMyEntity;
|
||
|
import com.fr.plugin.utils.YiTuanMaManager;
|
||
|
import com.fr.plugin.utils.YiTuanMaUtils;
|
||
|
import com.fr.schedule.base.constant.ScheduleConstants;
|
||
|
import com.fr.schedule.feature.output.OutputActionHandler;
|
||
|
import com.fr.stable.CodeUtils;
|
||
|
import com.fr.stable.StringUtils;
|
||
|
import com.fr.stable.db.action.DBAction;
|
||
|
import com.fr.stable.db.dao.DAOContext;
|
||
|
import com.fr.stable.query.QueryFactory;
|
||
|
import com.fr.stable.query.condition.QueryCondition;
|
||
|
import com.fr.stable.query.restriction.RestrictionFactory;
|
||
|
|
||
|
import java.io.InputStream;
|
||
|
import java.util.*;
|
||
|
|
||
|
public class MyOutputActionHandler extends OutputActionHandler<YTOutputBean> {
|
||
|
//应用消息,群,个人
|
||
|
@Override
|
||
|
public void doAction(YTOutputBean myOutputBean, Map<String, Object> map) throws Exception {
|
||
|
Object username = map.get("username");
|
||
|
String[] names = new String[0];
|
||
|
if (username != null) {
|
||
|
String s = username.toString();
|
||
|
if (StringUtils.isNotBlank(s)) {
|
||
|
names = new String[]{
|
||
|
s
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
if (names.length == 0) {
|
||
|
names = (String[]) map.get(ScheduleConstants.USERNAMES);
|
||
|
}
|
||
|
List<String> userNames = Arrays.asList(names);
|
||
|
List<String> userIds = userName2ytUserId(userNames);
|
||
|
int todo = myOutputBean.getSendType();
|
||
|
String title = myOutputBean.getSubject();
|
||
|
String content = myOutputBean.getContent();
|
||
|
JSONObject param = JSONObject.create();
|
||
|
//(取值 2:单文本,5:文本链接,6:图文链接)
|
||
|
String url = createScheduleEntryUrl(myOutputBean, map);
|
||
|
YiTuanMaManager manager = YiTuanMaManager.getInstance();
|
||
|
String mediaId = myOutputBean.getMediaId();
|
||
|
String fromUserId = myOutputBean.getFromUserId();
|
||
|
|
||
|
String imageUrl = "";
|
||
|
if (StringUtils.isNotBlank(mediaId)) {
|
||
|
imageUrl = manager.getUrl() + "/url/ytImage?attachId=" + mediaId;
|
||
|
}
|
||
|
String groupId = manager.getGroupId();
|
||
|
if (todo == 1) {//应用消息
|
||
|
YiTuanMaUtils.sendMsgToUserFromApp(myOutputBean.getClientId(), userIds, title, content, url, imageUrl);
|
||
|
} else if (todo == 2) {//聊天群消息
|
||
|
YiTuanMaUtils.sendMsgToGroup(myOutputBean.getClientId(),groupId, fromUserId, title, content, url, imageUrl);
|
||
|
} else if (todo == 3) {//公共号
|
||
|
YiTuanMaUtils.sendMsgToUserFromPublicNum(groupId, userIds, title, content, url);
|
||
|
} else if (todo == 4) {//个人
|
||
|
YiTuanMaUtils.sendMSGtoUser(myOutputBean.getClientId(),fromUserId, userIds, title, content, url, imageUrl);
|
||
|
}
|
||
|
LogKit.info("推送日志:" + map);
|
||
|
}
|
||
|
|
||
|
private List<String> userName2ytUserId(List<String> userNames) {
|
||
|
try {
|
||
|
List<String> userPhones = new ArrayList<>(userNames.size());
|
||
|
for (String userName : userNames) {
|
||
|
User user = UserService.getInstance().getUserByUserName(userName);
|
||
|
if (user != null) {
|
||
|
String mobile = user.getMobile();
|
||
|
if (StringUtils.isNotBlank(mobile)) {
|
||
|
userPhones.add(mobile);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
List<YTUserEntity> entities = MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<List<YTUserEntity>>() {
|
||
|
public List<YTUserEntity> run(DAOContext content) throws Exception {
|
||
|
HashSet<String> phones = new HashSet<>(userPhones);
|
||
|
QueryCondition queryCondition = QueryFactory.create().addRestriction(RestrictionFactory.in("phone", phones));
|
||
|
return content.getDAO(MyUserDao.class).find(queryCondition);
|
||
|
}
|
||
|
});
|
||
|
if (entities != null) {
|
||
|
List<String> userIds = new ArrayList<>();
|
||
|
for (YTUserEntity entity : entities) {
|
||
|
String id = entity.getId();
|
||
|
userIds.add(id);
|
||
|
}
|
||
|
return userIds;
|
||
|
}
|
||
|
} catch (Exception e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
return new ArrayList<>();
|
||
|
}
|
||
|
|
||
|
public static String createScheduleEntryUrl(YTOutputBean myBean, Map<String, Object> params) throws Exception {
|
||
|
String callBack = "";
|
||
|
String servletName = ServerConfig.getInstance().getServletName();
|
||
|
String baseUrl = YiTuanMaManager.getInstance().getUrl();
|
||
|
String url;
|
||
|
if (myBean.getLinkOpenType() == MessageUrlType.INNER.toInt()) {
|
||
|
String taskName = CodeUtils.cjkEncode(CodeUtils.encodeURIComponent((String) params.get("taskName")));
|
||
|
String savePath = CodeUtils.cjkEncode(CodeUtils.encodeURIComponent((String) params.get("saveDirectory")));
|
||
|
savePath = savePath.replaceAll("\\+", "%20");
|
||
|
String showtype = (String) params.get("showType");
|
||
|
int taskType = (Integer) params.get("taskType");
|
||
|
String username = (String) params.get("username");
|
||
|
callBack = baseUrl + "/url/mobile/schedule/result?taskName=" + taskName + "&username=" + username + "&path=" + savePath + "&showType=" + showtype + "&taskType=" + taskType + "&terminal=H5";
|
||
|
//2022-06-30 更新回调方式为UUID
|
||
|
url = baseUrl + "/url/ytlogin?callBack=" + myBean.getId();
|
||
|
updateOutUrl(myBean.getId(),callBack);
|
||
|
} else {
|
||
|
url = myBean.getCustomizeLink() ;
|
||
|
}
|
||
|
return url;
|
||
|
}
|
||
|
|
||
|
public static void updateOutUrl(String id,String url){
|
||
|
try {
|
||
|
MyDecisionDBAccess.getAccessor().runDMLAction(new DBAction<Object>() {
|
||
|
@Override
|
||
|
public Object run(DAOContext daoContext) throws Exception {
|
||
|
MyEntityDao dao = daoContext.getDAO(MyEntityDao.class);
|
||
|
YtOutputMyEntity myEntity = dao.findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("id", id)));
|
||
|
myEntity.setGoUrl(url);
|
||
|
dao.update(myEntity);
|
||
|
return null;
|
||
|
}
|
||
|
});
|
||
|
} catch (Exception e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
public static String toBase64(InputStream paramInputStream) {
|
||
|
byte[] arrayOfByte = IOUtils.inputStream2Bytes(paramInputStream);
|
||
|
return Base64.encode(arrayOfByte);
|
||
|
}
|
||
|
|
||
|
private String getResultUrl(Map<String, Object> params) {
|
||
|
ServerConfig.getInstance().getReportServletMapping();
|
||
|
String url = ServerConfig.getInstance().getServletName() + "/schedule/result?taskName=%s&username=%s&path=%s&showType=%s&taskType=%s";
|
||
|
String taskName = CodeUtils.encodeURIComponent((String) params.get("taskName"));
|
||
|
String saveDirectory = CodeUtils.encodeURIComponent((String) params.get("saveDirectory"));
|
||
|
saveDirectory = saveDirectory.replaceAll("\\+", "%20");
|
||
|
String showType = (String) params.get("showType");
|
||
|
int taskType = (Integer) params.get("taskType");
|
||
|
String username = (String) params.get("username");
|
||
|
return String.format(url, taskName, username, saveDirectory, showType, taskType);
|
||
|
}
|
||
|
}
|