用友致远协同办公系统-开发手册
* 消息的唯一标示 * @param srcPhone
* 短信的发送方手机号码 * @param destPhone
* 短信的接收方手机号码 * @param content * 短信内容 * @return true 发送成功
*/ public boolean sendMessage(int messageId, String srcPhone, String destPhone, String content); /** * 发送短消息
*
* @param messageId
* 消息的唯一标示 * @param srcPhone
* 短信的发送方手机号码 * @param destPhone
* 短信的接收方手机号码 * @param content * 短信内容 * @return true 发送成功
*/ public boolean sendMessage(int messageId, String srcPhone, Collection
*/
public boolean isSupportQueueSend(); /**
* 是否支持收短信
* @return */
public boolean isSupportRecive(); /**
* 从手机端返回到A8系统*
* @return */
public List
4.2.2.1 注册到系统
发送短信是以A8系统插件方式加载到系统的,插件配置文件SeeyonA8/webapps/seeyon/WEB-INF/classes/conf/plugin/sms.xml,在这个文件中找到
用友致远协同办公系统-开发手册
smsAdapterManager.xml,spring Bean在这里配置 如: bean id=\ class=\gImpl\ 短信网关需要的配置参数统一在sms.properties里配置
如: #M 短信王 的用户名 mobile.kingname = #M 短信王 的密码 mobile.kingpassword = 系统启动日志: MobileMessageManagerImpl:852 - 启动手机短信收发线程[短信王短信, ?] 代表短信接口启动成功 4.2.2.2 原理说明
MobileMessageManager
这个接口实现加载短信接口,普通短信发送还是wap方式发送
Map
applicationContext.getBeansOfType(AdapterMobileMessageManger.class);
for (Iterator iter = aMsgM.values().iterator(); }
AdapterMobileMessageManger am = iter.next(); if(am.isAvailability()){ }
adapterMobileMessageManger = am; break;
iter.hasNext();) {
只在启用了移动应用的前提下加载wap短信网关
Map
if(!aWapMsgM.isEmpty()){
if(SystemEnvironment.hasPlugin(ProductInfo.PluginNoMapper.mobileWap.name())){ } else{
log.warn(\没有移动应用插件,将不启用Wappush\for (Iterator iter = }
AdapterMobileWapPushManager am = iter.next(); if(am.isAvailability()){ }
adapterMobileWapPushManager = am; break;
applicationContext.getBeansOfType(AdapterMobileWapPushManager.class);
aWapMsgM.values().iterator(); iter.hasNext();) {
用友致远协同办公系统-开发手册 } } 从代码中可以看出短信插件只会加载一个短信接口 if(booleanWappush && isCanUseWapPush(sender.getOrgAccountId(), mo.getMessageType())){//走 } else{//如果不支持,则走短信通道 } sendState = adapterMobileMessageManger.sendMessage(mo.getMessageId(), sendState = adapterMobileWapPushManager.sendMessage(mo.getMessageId(), WapPush 通道 sender.getTelNumber(), dstPhone, content, url + String.valueOf(messageId)); sender.getTelNumber(), dstPhone, content); 4.2.3 代码示例 以短信王为例:
public class AdapterMobileMessageManagerShortMessageKingImpl implements AdapterMobileMessageManger {
//标识名称
public String getName() { }
//单个短信发送
return \短信王短信\;
public boolean sendMessage(int messageId, String srcPhone,
String destPhone, String content) {
//短信的内容不超过 60个字,小灵通号不超过 40个字。 Sender sender = new Sender(kingName,kingPassword); String result = sender.massSend(destPhone, content, \, \);
String success = getParameters(result).get(\); if(Strings.isBlank(success)){ }
String[] str = success.split(\);
boolean successSend = false; for(int i=0;i if(str[i].equals(destPhone)){ } successSend = true; return false; 用友致远协同办公系统-开发手册 } } return successSend; //接收短信 public List Sender sender = new Sender(kingName,kingPassword); String str = sender.readSms(); String string = null; String srcphonenum = null; String srcPhone = null; String content = null; if(str.indexOf(\)!=str.indexOf(\)){ } if(str.indexOf(\)!=str.indexOf(\)){ } List return list; MobileReciver reciver = new MobileReciver(); reciver.setContent(content); reciver.setSrcPhone(srcPhone); list.add(reciver); srcphonenum = str.substring(str.indexOf(\),str.indexOf(\)); if(srcphonenum!=null){ } srcPhone = srcphonenum.substring(srcphonenum.indexOf(\)+1); string = str.substring(str.indexOf(\), str.indexOf(\)); content = string.substring(string.indexOf(\)+1); 5. 组织模型同步 完成A8组织模型同步到外部系统(目标系统),分为初始化同步和实时同步两个场景。 5.1 初始化同步 如果A8已经存在组织模型,首先需要将A8的组织模型历史数据同步到目标系统。 5.1.1 导出 使用A8的组织模型数据管理接口,将A8组织模型按单位导出为XML,详见《平台API参考手册》的组织模型数据管理章节的exportData服务。 OrganizationDataServiceStub stub = new OrganizationDataServiceStub(); OrganizationDataServiceStub.ExportData req = new OrganizationDataServiceStub.ExportData(); 用友致远协同办公系统-开发手册 req.setToken(ServiceUtil.getToken()); req.setAccountName(\单位1\); OrganizationDataServiceStub.ExportDataResponse resp = stub .exportData(req); String xml = resp.get_return(); 5.1.2 导入 在目标系统建立一个新的单位,编写代码,解析A8组织模型XML,建立部门、岗位、职务级别和人员。 5.2 实时同步 使用A8组织模型事件接口,实时将A8组织模型的变更同步到目标系统。 5.2.1 实现A8组织模型事件监听接口 实现A8的OrganizationEventListener接口(接口定义在SeeyonA8\\webapps\\seeyon\\WEB-INF\\lib下的 v3x-common.jar中)。 package com.seeyon.v3x.organization.event; /** * 组织机构事件工厂。 * * @author wangwy * */ public interface OrganizationEventListener { /** * 新建职位级别事件。 * * @param level // 传入参数使用Object,方便以后扩展 /** * 新建单位事件。 * * @param dept * 新建的单位对象(V3xOrgAccount)。 */ void addAccount(Object account) throws OrganizationEventException; /** * 新建部门事件。 * * @param dept * 新建的部门对象(V3xOrgDepartment)。 */ void addDepartment(Object dept) throws OrganizationEventException;