/* * @(#) BossExternalAction.java 1.0.0 Aug 12, 2015 6:07:48 PM */ package com.ycsoft.web.action.external; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import com.ycsoft.business.service.impl.OttExternalService; import com.ycsoft.commons.abstracts.AbstractAction; import com.ycsoft.commons.exception.ErrorCode; import com.ycsoft.commons.exception.ServicesException; /** * 该接口定义了外部调用的HTTP + JSON接口,主要有个人移动端的一些业务接口 * * @author Killer */ @SuppressWarnings("serial") @Controller public class BossExternalAction extends AbstractAction{ private static final String JSON = "json"; private static Log logger=LogFactory.getLog(BossExternalAction.class); private ResultBody resultBody; /*! 用户相关属性 */ private String user_id; private String version; private String user_ip; private String user_passwd; private String user_name; private String user_rank; private String telephone; private String email; private String user; /*! 产品相关属性 */ private String product_ids; private String product_id; private String product_fee_id; private Integer amount; private String film_name; private String boss_data; private String ott_data; private String update_product; private String update_product_fee_id; private float price; private String currency_type; private OttExternalService ottExternalService; // private OrderService orderService; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 用户相关接口定义 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * 获取用户帐户信息接口 * @param user_id 用户ID * @param version OTT业务版本号 * @param user_ip 来源IP */ public String getAccountInfo(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.getAccountInfo(user_id); } }, null); return JSON; } /** * 修改用户帐户信息接口 * @param user_id 用户ID * @param version OTT业务版本号 * @param user_passwd 用户密码 * @param user_name 用户名称 * @param user_rank 用户等级 * @param telephone 手机号码 */ public String modifyAccountInfo(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { ottExternalService.modifyAccountInfo(user_id, user_passwd, user_rank, user_name, telephone); return new Object(); } }, null); return JSON; } /** * 用户注册接口,通过手机注册用户,BOSS后台将进行客户开户和基本包订购,生成用户 * @param user_id 用户ID * @param version OTT业务版本号 * @param user_passwd 用户密码 * @param user_name 用户名称 * @param user_rank 用户等级 * @param telephone 手机号码 * @param email 邮箱 */ public String registerAccount(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.RegisterAccount(user_id, user_passwd, user_name, user_rank, telephone, email); } }, null); return JSON; } /** * 用户验证接口 * @param user 可输入用户ID或昵称(user_id, user_name) */ public String userValidate(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.queryUserValidate(user); } }, null); return JSON; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 产品相关的接口 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * 根据用户ID获取用户的已订购列表 * @param user_id 用户ID * @param version OTT业务版本号 * @param user_ip 来源IP */ public String getOrderedProductList(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.getOrderedProductList(user_id); } }, null); return JSON; } /** * 根据用户ID获取用户的可订购产品列表;产品ID列表不为空时, * 返回包含该产品列表的组合产品列表 * * @param user_id 用户ID * @param version OTT业务版本号 * @param user_ip 来源IP * @param product_ids 产品ID列表, 可以为空,多产品以逗号分隔 */ public String getProductList(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.getProductList(user_id, product_ids); } }, null); return JSON; } /** * 用户购买产品,购买指定产品包下的指定资费。 * @param user_id 用户ID * @param version OTT业务版本号 * @param product_id 产品ID * @param product_fee_id 产品资费ID * @param amount 订购数量(仅对周期性产品有效) * @param film_name 影片名称,可以为空,针对单片有效 * @param boss_data BOSS扩展参数,从可订购产品列表中获取,订购产品透传BOSS * @param ott_data OTT扩展参数,同步产品授权时回传CMS */ public String buyProduct(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { ottExternalService.saveOttMobileBuyProduct(user_id, product_id, product_fee_id, amount, film_name, boss_data, ott_data); return new Object(); } }, null); return JSON; } /** * 根据用户ID获取用户购买产品记录 * @param user_id 用户ID * @param version OTT业务版本号 * @param user_ip 来源IP */ public String getBuyProductHistory(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.getBuyProductHistory(user_id); } }, null); return JSON; } /** * 根据用户ID获取用户的可升级产品列表;产品ID列表不为空时, * 返回包含该产品列表的组合产品列表 * * @param user_id 用户ID * @param version OTT业务版本号 * @param user_ip 来源IP * @param product_ids 产品ID列表, 可以为空,多产品以逗号分隔 */ public String getProductListByUpdate(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { return ottExternalService.getProductListByUpdate(user_id,product_ids); } }, null); return JSON; } /** * 把指定产品包升级到另外一个产品包,实现产品包的换购 * * @param user_id 用户ID * @param version OTT业务版本号 * @param user_ip 来源IP * @param product_id 升级之前的产品ID * @param update_product_id 升级之后的产品ID * @param price 升级所需价格 * @param currency_type RMB:人民币, USD:美元 */ public String updateProduct(){ this.doActionInCallbackForCommonResult(new Callback(){ @Override public Object doCallback() throws Exception { ottExternalService.updateProduct(user_id,product_id,update_product,update_product_fee_id); return new Object(); } }, null); return JSON; } /** * * @param taskCallback 业务回调函数 * @param errMsg 如果发生错误,可以通过该接口返回一些错误的msg数据体 * @return */ private ResultBody doActionInCallbackForCommonResult(Callback taskCallback, ErrorMsgDataExtractor errMsg){ ResultBody body = null; try{ Object msg = taskCallback.doCallback(); if(msg == null){ msg = new Object(); } body = ResultBody.createWithMsg(msg); }catch(Exception e){ Object msg = new Object(); if(errMsg != null){ msg = errMsg.extract(); } // 处理异常 ServicesException tex = null; if(e instanceof ServicesException){ tex = (ServicesException)e; if(logger.isDebugEnabled()){ logger.debug(e.getMessage(),e); } }else{ logger.error(e.getMessage(), e); tex = ServicesException.createUnknowException(e.getMessage(), e); } body = ResultBody.createWithExceptionAndMsg(tex, msg); } // 设置到当前上下文中 this.setResultBody(body); return body; } private interface Callback{ Object doCallback()throws Exception; } private interface ErrorMsgDataExtractor{ Object extract(); } public ResultBody getResultBody() { return resultBody; } public void setResultBody(ResultBody resultBody) { this.resultBody = resultBody; } public void setUser_id(String user_id) { this.user_id = user_id; } public void setVersion(String version) { this.version = version; } public void setUser_ip(String user_ip) { this.user_ip = user_ip; } public void setUser_passwd(String user_passwd) { this.user_passwd = user_passwd; } public void setUser_name(String user_name) { this.user_name = user_name; } public void setUser_rank(String user_rank) { this.user_rank = user_rank; } public void setTelephone(String telephone) { this.telephone = telephone; } public void setEmail(String email) { this.email = email; } public void setUser(String user) { this.user = user; } public void setProduct_ids(String product_ids) { this.product_ids = product_ids; } public void setProduct_id(String product_id) { this.product_id = product_id; } public void setProduct_fee_id(String product_fee_id) { this.product_fee_id = product_fee_id; } public void setAmount(Integer amount) { this.amount = amount; } public void setFilm_name(String film_name) { this.film_name = film_name; } public void setBoss_data(String boss_data) { this.boss_data = boss_data; } public void setOtt_data(String ott_data) { this.ott_data = ott_data; } public void setUpdate_product(String update_product) { this.update_product = update_product; } public void setPrice(float price) { this.price = price; } public void setCurrency_type(String currency_type) { this.currency_type = currency_type; } public OttExternalService getOttExternalService() { return ottExternalService; } public void setOttExternalService(OttExternalService ottExternalService) { this.ottExternalService = ottExternalService; } public String getUpdate_product_fee_id() { return update_product_fee_id; } public void setUpdate_product_fee_id(String update_product_fee_id) { this.update_product_fee_id = update_product_fee_id; } }