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.
 
 
 

167 lines
7.6 KiB

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);
}
}