aaa9cccb309ca265af83877a47a07fa17e207535.svn-base 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.chinacreator.process.service;
  2. import java.sql.SQLException;
  3. import java.text.ParseException;
  4. import java.util.ArrayList;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.List;
  8. import java.util.Map;
  9. import org.apache.commons.lang.StringUtils;
  10. import org.apache.commons.lang.math.NumberUtils;
  11. import org.apache.commons.lang.time.DateFormatUtils;
  12. import org.apache.commons.lang.time.DateUtils;
  13. import org.apache.log4j.Logger;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Component;
  16. import com.chinacreator.common.exception.BusinessException;
  17. import com.chinacreator.common.util.URLUtil;
  18. import com.chinacreator.process.bean.EcbLogBean;
  19. import com.chinacreator.process.bean.EcbProductInfo;
  20. import com.chinacreator.process.bean.EcbResponseBean;
  21. import com.chinacreator.process.dao.DictionaryDao;
  22. import com.chinacreator.process.dao.EcbProductDao;
  23. import com.chinacreator.process.dao.SPDao;
  24. import com.chinacreator.process.util.JsonUtil;
  25. @Component
  26. public class EcbService
  27. {
  28. private static Logger log = Logger.getLogger(EcbService.class);
  29. @Autowired
  30. private DictionaryDao dictionaryDao;
  31. @Autowired
  32. private SPDao spDao;
  33. @Autowired
  34. private EcbProductDao ecbProductDao;
  35. public String order(String userid,String cpid,String spid) throws Exception{
  36. String resultCode = "0";
  37. String errorInfo = "";
  38. int temp = 0;
  39. long begintime = System.currentTimeMillis();
  40. try{
  41. EcbResponseBean ecbResponseBean = queryPorduct(userid, cpid, spid,"0");
  42. EcbProductInfo info =ecbResponseBean.getUserProductInfo().getProductInfos().get(0);
  43. if(StringUtils.isEmpty(info.getDiscntStartDate()) || NumberUtils.toLong(info.getDiscntStartDate()) < NumberUtils.toLong(DateFormatUtils.format(new Date(), "yyyyMMddHHmmss"))){
  44. info.setDiscntStartDate(DateFormatUtils.format(new Date(), "yyyyMMddHHmmss"));
  45. }
  46. if(StringUtils.isEmpty(info.getDiscntEndDate()) || NumberUtils.toLong(info.getDiscntEndDate()) < NumberUtils.toLong("20170831235959")){
  47. info.setDiscntEndDate("20170831235959");
  48. }
  49. temp =1;
  50. ecb(info,"0",userid,cpid,spid);
  51. //ecbProductDao.saveProductInfo(getProductInfo(info));
  52. }catch(Exception e){
  53. log.error(userid+"订购失败",e);
  54. if(e instanceof BusinessException){
  55. resultCode = ((BusinessException) e).getCode();
  56. errorInfo = ((BusinessException) e).getMessage();
  57. }else{
  58. resultCode = "8000";
  59. errorInfo = "系统忙!";
  60. }
  61. if(spDao.getValue(spid) == 1){
  62. throw e;
  63. }
  64. }finally {
  65. saveLog(userid, resultCode, "0", errorInfo, cpid, spid, temp+"",(System.currentTimeMillis()-begintime)+"");
  66. }
  67. return resultCode;
  68. }
  69. public String cancelOrder(String userid,String cpid,String spid,String ordertime) throws Exception{
  70. String resultCode = "0";
  71. String errorInfo = "";
  72. int temp = 0;
  73. long begintime = System.currentTimeMillis();
  74. try{
  75. EcbResponseBean ecbResponseBean = queryPorduct(userid, cpid, spid,"1");
  76. EcbProductInfo info = ecbResponseBean.getUserProductInfo().getProductInfos().get(0);
  77. if( (StringUtils.isEmpty(info.getDiscntCode()) && StringUtils.isEmpty(info.getPackageCode()) && StringUtils.isEmpty(info.getProductId()))){
  78. EcbProductInfo ecbProductInfo = ecbProductDao.queryEcbProductByUser(userid);
  79. if(ecbProductInfo == null){
  80. throw new BusinessException("9032","ecb退订失败,本地无资费信息" );
  81. }
  82. }
  83. if(info.getDiscntOrderState() != null && info.getDiscntOrderState().equals("2")){
  84. throw new BusinessException("9031","ecb禁止用户退订" );
  85. }
  86. info.setDiscntStartDate(ordertime);
  87. info.setDiscntEndDate(getLastDay(ordertime));
  88. temp = 1;
  89. ecb(info,"1",userid,cpid,spid);
  90. }catch(Exception e){
  91. log.error(userid+"退订失败",e);
  92. if(e instanceof BusinessException){
  93. resultCode = ((BusinessException) e).getCode();
  94. errorInfo = ((BusinessException) e).getMessage();
  95. }else{
  96. resultCode = "8000";
  97. errorInfo = "系统忙!";
  98. }
  99. if(spDao.getValue(spid) == 1){
  100. throw e;
  101. }
  102. }finally {
  103. saveLog(userid, resultCode, "1", errorInfo, cpid, spid, temp+"",(System.currentTimeMillis()-begintime)+"");
  104. }
  105. return resultCode;
  106. }
  107. public void ecb(EcbProductInfo info,String type,String userid,String cpid,String spid) throws Exception{
  108. String resultstr = URLUtil.get(dictionaryDao.getValue("ecbOrderUrl")+"?userid="+userid+"&cpid="+cpid+"&spid="+spid+"&productId="+info.getProductId()
  109. +"&packageCode="+info.getPackageCode()+"&discntCode="+info.getDiscntCode()+"&type="+type+"&starttime="+info.getDiscntStartDate()
  110. +"&endtime="+info.getDiscntEndDate() , NumberUtils.toInt(dictionaryDao.getValue("ecbTimeout")));
  111. Map<?,?> resultMap = JsonUtil.jsonToMap(resultstr);
  112. if(!((String) resultMap.get("resultCode")).equals("0")){
  113. throw new BusinessException((String)resultMap.get("resultCode"), ((String)resultMap.get("errorInfo")));
  114. }
  115. }
  116. public EcbResponseBean queryPorduct(String userid,String cpid,String spid,String type) throws Exception{
  117. String result = URLUtil.get(dictionaryDao.getValue("ecbProductUrl")+"?userid="+userid+"&cpid="+cpid+"&spid="+spid, NumberUtils.toInt(dictionaryDao.getValue("ecbTimeout")));
  118. log.info("result===="+result);
  119. EcbResponseBean infos = (EcbResponseBean) JsonUtil.jsonToBean(result, EcbResponseBean.class);
  120. log.info("infos===="+JsonUtil.objectToJson(infos));
  121. if(!infos.getResultCode().equals("0") && !(type.equals("1") && infos.getCode().equals("8888"))){
  122. throw new BusinessException(infos.getResultCode(), infos.getErrorInfo());
  123. }
  124. if(infos.getUserProductInfo() ==null){
  125. throw new BusinessException("9036","无产品信息" );
  126. }
  127. if(infos.getUserProductInfo().getProductInfos() == null || infos.getUserProductInfo().getProductInfos().size()==0){
  128. throw new BusinessException("9034","资费信息信息不全" );
  129. }
  130. EcbProductInfo info = choseProduct(infos.getUserProductInfo().getProductInfos());
  131. log.info("info===="+JsonUtil.objectToJson(info));
  132. List<EcbProductInfo> list = new ArrayList<EcbProductInfo>();
  133. list.add(info);
  134. infos.getUserProductInfo().setProductInfos(list);
  135. if(info == null){
  136. throw new BusinessException("9035","未查询出用户资费信息" );
  137. }
  138. return infos;
  139. }
  140. public EcbProductInfo choseProduct(List<EcbProductInfo> infos){
  141. EcbProductInfo returnBean = null;
  142. for (EcbProductInfo ecbProductInfo : infos) {
  143. String discntstartime = ecbProductInfo.getDiscntStartDate();
  144. String discntendtime = ecbProductInfo.getDiscntEndDate();
  145. if(StringUtils.isEmpty(discntstartime) ||StringUtils.isEmpty(discntendtime) ){
  146. continue;
  147. }
  148. discntstartime = format(discntstartime);
  149. discntendtime = format(discntendtime);
  150. if(NumberUtils.toLong(discntstartime)<= NumberUtils.toLong(getStartdate()) && NumberUtils.toLong(discntendtime)>= NumberUtils.toLong(DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")) ){
  151. ecbProductInfo.setDiscntStartDate(discntstartime);
  152. ecbProductInfo.setDiscntEndDate(discntendtime);
  153. if(returnBean == null){
  154. returnBean = ecbProductInfo;
  155. }else{
  156. if(NumberUtils.toInt(returnBean.getDiscntFee()) > NumberUtils.toInt(ecbProductInfo.getDiscntFee())){
  157. returnBean = ecbProductInfo;
  158. }else if(NumberUtils.toInt(returnBean.getDiscntFee()) == NumberUtils.toInt(ecbProductInfo.getDiscntFee())){
  159. if(NumberUtils.toLong(discntendtime) > NumberUtils.toLong(returnBean.getDiscntEndDate())){
  160. returnBean = ecbProductInfo;
  161. }
  162. }
  163. }
  164. }
  165. }
  166. if(returnBean != null){
  167. if(StringUtils.isEmpty(returnBean.getDiscntValue()) || returnBean.getDiscntValue().equals("0")){
  168. returnBean.setSpid("10040");
  169. }else if(returnBean.getDiscntValue().equals("1")){
  170. returnBean.setSpid("10041");
  171. }
  172. }
  173. return returnBean;
  174. }
  175. public static String getStartdate(){
  176. return DateFormatUtils.format(DateUtils.addMinutes(new Date(), 5),"yyyyMMddHHmmss");
  177. }
  178. public static String format(String numstr){
  179. int size =14;
  180. int neednum = 0;
  181. if(numstr.length() < 14){
  182. neednum = size - numstr.length() ;
  183. StringBuffer strb = new StringBuffer();
  184. for (int i = 0; i <neednum; i++) {
  185. strb.append("0");
  186. }
  187. return numstr+strb;
  188. }
  189. return numstr;
  190. }
  191. public void saveLog(String userid,String resultCode,String type,String errorInfo,String cpid,String spid,String handle,String times){
  192. EcbLogBean info = new EcbLogBean();
  193. info.setTimes(times);
  194. info.setCpid(cpid);
  195. info.setSpid(spid);
  196. info.setUserid(userid);
  197. info.setResultCode(resultCode);
  198. info.setErrorInfo(errorInfo);
  199. info.setType(type);
  200. info.setHandle(handle);
  201. try {
  202. ecbProductDao.saveLogDao(info);
  203. } catch (SQLException e) {
  204. e.printStackTrace();
  205. }
  206. }
  207. public static String getLastDay(String timeStr) throws ParseException{
  208. Calendar calendar = Calendar.getInstance();
  209. if(!StringUtils.isEmpty(timeStr)){
  210. calendar.setTime(DateUtils.parseDate(timeStr, new String[]{"yyyyMMddHHmmss"}));
  211. }
  212. calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
  213. return DateFormatUtils.format(calendar, "yyyyMMdd")+"235959";
  214. }
  215. public static void main(String[] args) {
  216. String str = "{\"errorInfo\":\"成功\",\"resultCode\":\"0\",\"code\":\"0000\",\"userProductInfo\":{\"productInfos\":[{\"productId\":\"90155946\",\"productName\":\"腾讯天王卡\",\"packageCode\":\"51900772\",\"packageName\":\"普通产品畅视资费包\",\"discntCode\":\"8193753\",\"discntName\":\"标清畅视0元体验套餐\",\"discntFee\":\"0\",\"discntStartDate\":\"20170815233438\",\"discntEndDate\":\"20170831235959\",\"discntOrderState\":\"0\",\"discntValue\":\"\"}],\"userProductId\":\"90155946\",\"userProductName\":\"腾讯天王卡\"}}";
  217. EcbResponseBean infos = (EcbResponseBean) JsonUtil.jsonToBean(str, EcbResponseBean.class);
  218. }
  219. }