a39ff869f30c51abdd070489ae928360a3ec3a2a.svn-base 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954
  1. package com.chinacreator.process.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.chinacreator.common.exception.BusinessException;
  4. import com.chinacreator.common.util.URLUtil;
  5. import com.chinacreator.process.bean.*;
  6. import com.chinacreator.process.dao.*;
  7. import com.chinacreator.process.exception.VideoException;
  8. import com.chinacreator.video.queue.MessageService;
  9. import com.chinacreator.video.queue.bean.MessagePipe;
  10. import net.sf.json.JSONSerializer;
  11. import oracle.sql.DATE;
  12. import org.apache.commons.lang.StringUtils;
  13. import org.apache.commons.lang.math.NumberUtils;
  14. import org.apache.commons.lang.time.DateFormatUtils;
  15. import org.apache.commons.lang.time.DateUtils;
  16. import org.apache.log4j.Logger;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.sql.SQLException;
  20. import java.text.SimpleDateFormat;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. @Service
  26. public class JiYueService {
  27. private static Logger logger = Logger.getLogger("JiYueOrder");
  28. @Autowired
  29. private SdkOrderDao sdkOrderDao;
  30. @Autowired
  31. private NetOrderDao netOrderDao;
  32. @Autowired
  33. private CallerAreacodeDao callerAreacodeDao;
  34. @Autowired
  35. private SysDao sysDao;
  36. @Autowired
  37. private JiYueOrderDao jiYueOrderDao;
  38. @Autowired
  39. private MessageService messageService;
  40. @Autowired
  41. private ChangshiDao changshiDao;
  42. @Autowired
  43. private CsOrderControlDao csOrderControlDao;
  44. @Autowired
  45. private EcbProductDao ecbProductDao;
  46. @Autowired
  47. private WxcsDao wxcsDao;
  48. @Autowired
  49. private EcbDiscntDao ecbDiscntDao;
  50. @Autowired
  51. private ChangshiBlackDao changshiBlackDao;
  52. @Autowired
  53. private DictionaryDao dictionaryDao;
  54. @Autowired
  55. private BusiOperlimitConfDao busiOperlimitConfDao;
  56. @Autowired
  57. private NextMonthEffectService nextMonthEffectService;
  58. public int doLocalData(HashMap<String, String> data) {
  59. int result = 0;
  60. try {
  61. //北京号码段订购限制
  62. String numberlimit = dictionaryDao.getValue("Numberlimit");
  63. if(numberlimit != null && numberlimit.indexOf(data.get("ID").substring(0, 7)) != -1){
  64. jiYueOrderDao.updataQueryList(data.get("ID"), "9010","用户为黑名单用户");
  65. throw new BusinessException("9010", "用户为黑名单用户", new String[0]);
  66. }
  67. HashMap cpSp = jiYueOrderDao.getCpSp(data.get("PRODUCTID"));
  68. OrderConfigBean orderConfigBean = new OrderConfigBean();
  69. if (cpSp!=null&&cpSp.size()>0){
  70. data.put("CPID",cpSp.get("CPID").toString());
  71. data.put("SPID",cpSp.get("SPID").toString());
  72. orderConfigBean.setCpid(cpSp.get("CPID").toString());
  73. orderConfigBean.setSpid(cpSp.get("SPID").toString());
  74. orderConfigBean.setType(cpSp.get("AUTHSTATUS").toString());
  75. }else {
  76. jiYueOrderDao.updataQueryList(data.get("ID"), "9012","PRODUCTID未匹配到spid");
  77. throw new BusinessException("9012", "PRODUCTID未匹配到spid", new String[0]);
  78. }
  79. //验证业务操作限制(是否能订购,是否能退订)
  80. if(this.valiOperLimit(data.get("ID"), data.get("SPID"), data.get("TYPE"))){
  81. jiYueOrderDao.updataQueryList(data.get("ID"), "9016", "业务办理限制,不处理");
  82. throw new BusinessException("9016", data.get("ID")+"业务办理限制,不处理", new String[0]);
  83. }
  84. if ("1006".equals(orderConfigBean.getSpid()) && 0 == jiYueOrderDao.isOrder(orderConfigBean.getCpid(), "1009", data.get("USERMOB"))) {
  85. jiYueOrderDao.updataQueryList(data.get("ID"), "9001","订购失败,芒果TV16元产品互斥,订购了合约产品");
  86. throw new BusinessException("9001", "订购失败,芒果TV16元产品互斥,订购了合约产品", new String[0]);
  87. }
  88. getProvinceInfo(data);
  89. if ("0".equals(data.get("TYPE"))) {
  90. String provinceOrder = sdkOrderDao.getProvinceOrder(orderConfigBean.getSpid());
  91. if (StringUtils.isNotEmpty(provinceOrder)){
  92. String mobileInfo = getMobileInfo(data.get("USERMOB"));
  93. if (!provinceOrder.contains(mobileInfo)){
  94. throw new VideoException("1", "订购失败,该"+mobileInfo+"地区不能订购此产品");
  95. }
  96. }
  97. System.out.println(orderConfigBean.getType().equals("0")||orderConfigBean.getType().equals("1"));
  98. if (orderConfigBean.getType().equals("0")||orderConfigBean.getType().equals("1")) {
  99. if (orderConfigBean.getCpid().equals("tencent")
  100. && (orderConfigBean.getSpid().equals("101") || orderConfigBean.getSpid().equals("84"))) {
  101. result = inserttencentMq(data, orderConfigBean, "0");
  102. } else {
  103. result = compareOrderForNet(data);
  104. if(result == 0){//成功发短信
  105. logger.info("开始推短信mq");
  106. insertSmsMq1(data.get("USERMOB"), "jypt", orderConfigBean, "0",data);
  107. logger.info("推短信mq");
  108. }
  109. }
  110. } else {
  111. // result = compareOrderForSdk(data);
  112. }
  113. } else {
  114. if (orderConfigBean.getType().equals("0")||orderConfigBean.getType().equals("2")) {
  115. if (orderConfigBean.getCpid().equals("tencent")
  116. && (orderConfigBean.getSpid().equals("101") || orderConfigBean.getSpid().equals("84"))) {
  117. result =inserttencentMq(data, orderConfigBean, "1");
  118. } else{
  119. result = compareCancelForNet(data);
  120. if(result == 0){//成功发短信
  121. insertSmsMq1(data.get("USERMOB"), "bss", orderConfigBean, "1",data);
  122. }
  123. }
  124. } else {
  125. // result = compareCancelForSdk(data);
  126. }
  127. }
  128. if (result == 0) {
  129. logger.info("开始生成活动关系");
  130. insertMqOffline(data, orderConfigBean);
  131. logger.info("推送到mq生成活动关系");
  132. if (orderConfigBean.getCpid().equals("changshi") && orderConfigBean.getSpid().equals("1150")
  133. && data.get("TYPE").equals("0")) {
  134. WxcsBean wxcsBean = wxcsDao.getConfig(orderConfigBean.getCpid(), orderConfigBean.getSpid());
  135. if (wxcsBean.getVipstatus().equals("0")
  136. && NumberUtils.toLong(DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")) < NumberUtils
  137. .toLong(wxcsBean.getVipendtime())
  138. && NumberUtils.toLong(DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")) > NumberUtils
  139. .toLong(wxcsBean.getVipstarttime())) {
  140. insertSmsMq(data.get("USERMOB"), "ecb", orderConfigBean);
  141. }
  142. }
  143. }
  144. logger.info("结束");
  145. }catch (Exception e){
  146. result = 8000;
  147. e.printStackTrace();
  148. logger.error("同步订购关系出现异常,"+e.getMessage());
  149. }finally {
  150. logger.info("结束订购退订流程,返回");
  151. }
  152. return result;
  153. }
  154. public OrderConfigBean getOrderConfigBean(String spid) throws SQLException {
  155. return this.jiYueOrderDao.findBySpid(spid);
  156. }
  157. /**
  158. * 验证业务操作限制(是否能订购,是否能退订)
  159. * @param id
  160. * @param spid
  161. * @param type 操作标识:0订购、 1退订
  162. * @return
  163. * @throws Exception
  164. */
  165. private boolean valiOperLimit(String id, String spid,String type) throws Exception {
  166. //数据来源
  167. String datasrc = "JYPT";
  168. List<HashMap> dataList = busiOperlimitConfDao.getValue(spid);
  169. boolean haslimit = false;
  170. if(dataList != null && dataList.size()>0){
  171. for(HashMap tm : dataList){
  172. if(type.equals(tm.get("OPERTYPE")) && datasrc.equals(tm.get("DATASRC"))){
  173. haslimit = true;
  174. break;
  175. }
  176. }
  177. }
  178. return haslimit;
  179. }
  180. public void getProvinceInfo(HashMap<String, String> data) {
  181. AreaInfo areaInfo = this.callerAreacodeDao.findByCallerhead(data.get("USERMOB").substring(0, 7));
  182. if (areaInfo == null) {
  183. data.put("PROVINCE","");
  184. data.put("AREA","");
  185. } else {
  186. data.put("PROVINCE",areaInfo.getProvince());
  187. data.put("AREA",areaInfo.getArea());
  188. }
  189. }
  190. /**
  191. * 查询号码信息
  192. * @param userid
  193. * @return
  194. * @throws Exception
  195. */
  196. public String getMobileInfo(String userid){
  197. String provice= null;
  198. try {
  199. provice= sdkOrderDao.getHmdInfo(userid.substring(0,7));
  200. } catch (Exception e) {
  201. e.printStackTrace();
  202. }
  203. return provice;
  204. }
  205. public int inserttencentMq(HashMap<String, String> data, OrderConfigBean orderConfigBean,String type) throws SQLException {
  206. try {
  207. Map<String, String> map = new HashMap<String, String>();
  208. String url = dictionaryDao.getValue("mqReciveUrl");
  209. map.put("userid", data.get("USERMOB"));
  210. map.put("cpid", orderConfigBean.getCpid());
  211. map.put("spid", orderConfigBean.getSpid());
  212. map.put("province", data.get("PROVINCE"));
  213. map.put("area", data.get("AREA"));
  214. map.put("channel", "jypt");
  215. if (type.equals("0")) {
  216. map.put("ordertime", data.get("ORDERTIME"));
  217. } else {
  218. map.put("canceltime", data.get("CANCELTIME"));
  219. }
  220. map.put("endtime", data.get("ENDTIME"));
  221. if(orderConfigBean.getSpid().equals("101")){
  222. map.put("ordertype", "2");
  223. }else{
  224. map.put("ordertype", "0");
  225. }
  226. map.put("orderstatus", type);
  227. map.put("type", "vacmq");
  228. URLUtil.post(url, JSONSerializer.toJSON(map).toString(),1000);
  229. } catch (Exception e) {
  230. e.printStackTrace();
  231. }
  232. jiYueOrderDao.updataQueryList(data.get("ID"), "0","腾讯20元按次或包月产品");
  233. /****
  234. * 腾讯20元,集约平台渠道覆盖
  235. */
  236. try {
  237. NetOrderBean newOrderBean = getNetOrderInfo(data);
  238. NetOrderBean oldOrderBean = this.netOrderDao.findOrder(newOrderBean.getCpid(), newOrderBean.getSpid(), newOrderBean.getUserid());
  239. if(oldOrderBean != null){
  240. if("0".equals(type)){
  241. /*****************************************************集约平台订购,进行订购渠道更新*************************************************************/
  242. if ("0".equals(oldOrderBean.getStatus())) {
  243. if("jypt".equals(newOrderBean.getOrderchannel())){
  244. try {
  245. //订购渠道优先级更新
  246. this.netOrderDao.orderUpdate(newOrderBean);
  247. saveNetLog(newOrderBean, "9098", "[集约平台订购渠道覆盖]已订购,订购渠道更新为jypt", data.get("TYPE"));
  248. } catch (Exception e) {
  249. e.printStackTrace();
  250. }
  251. }
  252. }else{
  253. if("jypt".equals(newOrderBean.getOrderchannel())){
  254. try {
  255. if(newOrderBean.getOrdertime().getTime() < oldOrderBean.getCanceltime().getTime()){
  256. //订购渠道优先级更新
  257. this.netOrderDao.orderUpdate(newOrderBean);
  258. saveNetLog(newOrderBean, "9096", "[集约平台订购渠道覆盖]已退订,且集约平台订购时间小于退订时间,订购渠道更新为jypt", data.get("TYPE"));
  259. }
  260. } catch (Exception e) {
  261. e.printStackTrace();
  262. }
  263. }
  264. }
  265. /*****************************************************集约平台订购,进行订购渠道更新*************************************************************/
  266. }else{
  267. /*****************************************************集约平台退订,进行退订渠道更新*************************************************************/
  268. if (!"0".equals(oldOrderBean.getStatus())) {
  269. if("jypt".equals(newOrderBean.getCancelchannel()) ){
  270. try {
  271. //退订渠道优先级更新
  272. this.netOrderDao.cancelUpdate(newOrderBean);
  273. saveNetLog(newOrderBean, "9099", "[集约平台订购渠道覆盖]已退订,退订渠道更新为jypt", data.get("TYPE"));
  274. } catch (Exception e) {
  275. e.printStackTrace();
  276. }
  277. }
  278. }else{
  279. if("jypt".equals(newOrderBean.getCancelchannel()) ){
  280. try {
  281. if(newOrderBean.getCanceltime().getTime() < oldOrderBean.getOrdertime().getTime()
  282. && oldOrderBean.getCancelchannel()!=null && !"".equals(oldOrderBean.getCancelchannel().trim())){
  283. //退订渠道优先级更新
  284. this.netOrderDao.cancelUpdate(newOrderBean);
  285. saveNetLog(newOrderBean, "9097", "[集约平台退订渠道覆盖]已订购,且集约平台退订时间小于订购时间,退订渠道更新为jypt", data.get("TYPE"));
  286. }
  287. } catch (Exception e) {
  288. e.printStackTrace();
  289. }
  290. }
  291. }
  292. /*****************************************************集约平台退订,进行退订渠道更新*************************************************************/
  293. }
  294. }
  295. } catch (Exception e) {
  296. e.printStackTrace();
  297. }
  298. return 3;
  299. }
  300. public NetOrderBean getNetOrderInfo(HashMap<String,String> data) throws Exception {
  301. OrderConfigBean orderConfigBean = getOrderConfigBean(data.get("SPID"));
  302. NetOrderBean netOrderBean = new NetOrderBean();
  303. netOrderBean.setUserid(data.get("USERMOB"));
  304. netOrderBean.setCpid(orderConfigBean.getCpid());
  305. netOrderBean.setBatchid(DateFormatUtils.format(new Date(), "yyyyMMdd"));
  306. netOrderBean.setSpid(orderConfigBean.getSpid());
  307. netOrderBean.setProvince(data.get("PROVINCE"));
  308. netOrderBean.setArea(data.get("AREA"));
  309. if (data.get("TYPE").equals("0")) {
  310. if (StringUtils.isEmpty(data.get("ORDERTIME"))){
  311. throw new BusinessException("9012", "参数错误", new String[0]);
  312. }
  313. netOrderBean.setOrdertime(DateUtils.parseDate(data.get("ORDERTIME"), new String[] { "yyyyMMddHHmmss" }));
  314. netOrderBean.setOrderchannel("jypt");
  315. netOrderBean.setStatus("0");
  316. netOrderBean.setOrderstatus(3);
  317. } else {
  318. if (StringUtils.isEmpty(data.get("CANCELTIME"))) {
  319. throw new BusinessException("9012", "参数错误", new String[0]);
  320. }
  321. netOrderBean.setCanceltime(DateUtils.parseDate(data.get("CANCELTIME"), new String[] { "yyyyMMddHHmmss" }));
  322. netOrderBean.setCancelchannel("jypt");
  323. netOrderBean.setStatus("1");
  324. netOrderBean.setOrderstatus(5);
  325. }
  326. /**
  327. * 计费点相同的产品SPID替换
  328. */
  329. nextMonthEffectService.replaceSameVacSpid(netOrderBean);
  330. /**
  331. * 次月生效产品SPID替换
  332. */
  333. nextMonthEffectService.replaceSpid(netOrderBean);
  334. //验证业务操作限制(是否能订购,是否能退订)
  335. if(this.valiOperLimit(data.get("ID"), netOrderBean.getSpid(), data.get("TYPE"))){
  336. throw new BusinessException("9016", "业务办理限制,不处理", new String[0]);
  337. }
  338. return netOrderBean;
  339. }
  340. public void saveNetLog(NetOrderBean orderInfo, String errorcode, String errorinfo, String ordertype)
  341. throws SQLException {
  342. OrderLog orderLog = new OrderLog();
  343. orderLog.setApptype(orderInfo.getApptype());
  344. orderLog.setChannel(ordertype.equals("0") ? orderInfo.getOrderchannel() : orderInfo.getCancelchannel());
  345. orderLog.setOrderstatus(orderInfo.getOrderstatus());
  346. orderLog.setStatus(Integer.valueOf(orderInfo.getStatus()).intValue());
  347. orderLog.setCpid(orderInfo.getCpid());
  348. orderLog.setIsexperience(orderInfo.getIsexperience());
  349. orderLog.setOrdertype(orderInfo.getOrdertype());
  350. orderLog.setProvince(orderInfo.getProvince());
  351. orderLog.setArea(orderInfo.getArea());
  352. orderLog.setSpid(orderInfo.getSpid());
  353. orderLog.setUserid(orderInfo.getUserid());
  354. orderLog.setErrorcode(errorcode);
  355. orderLog.setErrorinfo(errorinfo);
  356. this.netOrderDao.addOrderLog(orderLog);
  357. }
  358. public int compareOrderForNet(HashMap<String, String> data) throws Exception {
  359. int result = 0;
  360. NetOrderBean orderBean = null;
  361. NetOrderBean oldOrderBean = null;
  362. try {
  363. orderBean = getNetOrderInfo(data);
  364. if( changshiBlackDao.isBlackUser(orderBean.getUserid(),orderBean.getCpid())){
  365. throw new BusinessException("9080", "黑名单用户不处理订购", new String[0]);
  366. }
  367. boolean hasnme = false; //是否次月生效
  368. if(nextMonthEffectService.hasNextMonthBusi(orderBean.getSpid())){
  369. data.put("CPID",orderBean.getCpid());
  370. data.put("SPID",orderBean.getSpid());
  371. hasnme = true;
  372. nextMonthEffectService.process(orderBean);
  373. //设置同步状态值,用于判断是否生成活动关系
  374. data.put("SYNCSTATUS",orderBean.getSyncstatus());
  375. }else{
  376. oldOrderBean = this.netOrderDao.findOrder(orderBean.getCpid(), orderBean.getSpid(), orderBean.getUserid());
  377. System.out.println("oldOrderBean"+oldOrderBean != null);
  378. if (oldOrderBean != null) {
  379. //沃视频爱奇艺定向流量年包产品限制为当月不能重复订购
  380. if("99134246".equals(orderBean.getSpid()) && valiMonth(orderBean.getOrdertime(),oldOrderBean.getOrdertime())){
  381. throw new BusinessException("9088", "订购失败,反向通知的订购时间小于或等于订购关系表的订购时间", new String[0]);
  382. }
  383. /*****************************************************集约平台订购,进行订购渠道更新*************************************************************/
  384. if ("0".equals(oldOrderBean.getStatus())) {
  385. if("jypt".equals(orderBean.getOrderchannel())){
  386. try {
  387. //订购渠道优先级更新
  388. this.netOrderDao.orderUpdate(orderBean);
  389. } catch (Exception e) {
  390. e.printStackTrace();
  391. }
  392. throw new BusinessException("9098", "[集约平台订购渠道覆盖]已订购,订购渠道更新为jypt", new String[0]);
  393. }
  394. throw new BusinessException("9010", "已订购,请不要重复订购", new String[0]);
  395. }else if("1".equals(oldOrderBean.getStatus()) && oldOrderBean.getSpid().equals("99134246")){
  396. orderBean.setEndtime(jiYueOrderDao.getLastYearDay(oldOrderBean.getEndtime()));
  397. }else if("2".equals(oldOrderBean.getStatus()) && oldOrderBean.getSpid().equals("99134246")){
  398. orderBean.setEndtime(jiYueOrderDao.getLastYearDayFirst(orderBean.getOrdertime()));
  399. }else{
  400. if("jypt".equals(orderBean.getOrderchannel())){
  401. try {
  402. if(orderBean.getOrdertime().getTime() < oldOrderBean.getCanceltime().getTime()){
  403. //订购渠道优先级更新
  404. this.netOrderDao.orderUpdate(orderBean);
  405. saveNetLog(orderBean, "9096", "[集约平台订购渠道覆盖]已退订,且集约平台订购时间小于退订时间,订购渠道更新为jypt", data.get("TYPE"));
  406. }
  407. } catch (Exception e) {
  408. e.printStackTrace();
  409. }
  410. }
  411. }
  412. /*****************************************************集约平台订购,进行订购渠道更新*************************************************************/
  413. if (orderBean.getCpid().equals("changshi") && ("1150".equals(orderBean.getSpid()) || "1040".equals(orderBean.getSpid()))){
  414. if (orderBean.getSpid().equals("1040")) {
  415. throw new BusinessException("9017", "标清订购不处理", new String[0]);
  416. }
  417. String discntValue = orderBean.getSpid().equals("1150") ? "1" : "0";
  418. EcbProductInfo ecbProductInfo = ecbProductDao.queryEcb(data.get("ID"));
  419. List<DiscntInfo> list = changshiDao.queryDiscntInfo(orderBean.getUserid(), discntValue);
  420. for (DiscntInfo discntInfo : list) {
  421. if (discntInfo.getType().equals("0")
  422. && !discntInfo.getDiscntid().equals(ecbProductInfo.getDiscntCode())) {
  423. throw new BusinessException("9011", "不同资费有未退的订购请求,不处理", new String[0]);
  424. }
  425. }
  426. if (orderBean.getSpid().equals("1150")) {
  427. if (!csOrderControlDao.discntCodeControl(ecbProductInfo.getDiscntCode(), orderBean.getCpid(),
  428. orderBean.getSpid())) {
  429. throw new BusinessException("9903", "不在资费白名单内", new String[0]);
  430. }
  431. if (csOrderControlDao.discntFeeControl(ecbProductInfo.getDiscntCode(), orderBean.getCpid(),
  432. orderBean.getSpid())) {
  433. result = 1;
  434. }
  435. //20220104xu.zhou,只有1150的才走ecbDiscntDao.order,防止其他cpid为changshi的数据落不了订购关系
  436. ecbDiscntDao.order(ecbProductInfo, orderBean);
  437. }
  438. //ecbDiscntDao.order(ecbProductInfo, orderBean);
  439. } else if (NumberUtils.toLong(data.get("ORDERTIME")) < NumberUtils
  440. .toLong(oldOrderBean.getCanceltimestr())) {
  441. throw new BusinessException("9023", "订购时间晚于本地退订时间不处理", new String[0]);
  442. }
  443. this.netOrderDao.order(orderBean);
  444. } else {
  445. if("99134246".equals(orderBean.getSpid())){
  446. orderBean.setEndtime(jiYueOrderDao.getLastYearDayFirst(orderBean.getOrdertime()));
  447. }
  448. if (orderBean.getCpid().equals("changshi") && orderBean.getSpid().equals("1150")) {
  449. EcbProductInfo ecbProductInfo = ecbProductDao.queryEcb(data.get("ID"));
  450. if (!csOrderControlDao.discntCodeControl(ecbProductInfo.getDiscntCode(), orderBean.getCpid(),
  451. orderBean.getSpid())) {
  452. throw new BusinessException("9903", "不在资费白名单内", new String[0]);
  453. }
  454. if (csOrderControlDao.discntFeeControl(ecbProductInfo.getDiscntCode(), orderBean.getCpid(),
  455. orderBean.getSpid())) {
  456. result = 1;
  457. }
  458. ecbDiscntDao.order(ecbProductInfo, orderBean);
  459. } else if (orderBean.getCpid().equals("changshi") && orderBean.getSpid().equals("1040")) {
  460. throw new BusinessException("9017", "标清订购不处理", new String[0]);
  461. // EcbProductInfo ecbProductInfo =
  462. // ecbProductDao.queryEcb(bean.getId());
  463. // ecbDiscntDao.order(ecbProductInfo, orderBean);
  464. }
  465. System.out.println("集约平台订购"+JSON.toJSONString(orderBean));
  466. this.netOrderDao.order(orderBean);
  467. }
  468. }
  469. //不是能力平台次月生效产品,或者是能力平台产品且是正式订购关系表退订操作
  470. if(!hasnme || (hasnme && "5".equals(orderBean.getSyncstatus()))){
  471. saveNetLog(orderBean, "0", "", data.get("TYPE"));
  472. }
  473. if(hasnme){
  474. System.out.println("次月生效数据订购完成");
  475. jiYueOrderDao.updataQueryList(data.get("ID"),"0","次月生效数据订购完成");
  476. }else{
  477. System.out.println("0");
  478. jiYueOrderDao.updataQueryList(data.get("ID"),"0","ok");
  479. }
  480. } catch (Exception e) {
  481. result = 1;
  482. result = this.catchOper(e, data, oldOrderBean);
  483. }
  484. return result;
  485. }
  486. /**
  487. * 验证订购月份是否与已订购月份相同
  488. * @param newOrdertime
  489. * @param oldOrdertime
  490. * @return 相同返回true,反之返回false
  491. */
  492. private boolean valiMonth(Date newOrdertime, Date oldOrdertime){
  493. boolean res = false;
  494. String newmonth = DateFormatUtils.format(newOrdertime, "yyyyMM");
  495. String oldmonth = DateFormatUtils.format(oldOrdertime, "yyyyMM");
  496. if(newmonth.equals(oldmonth)){
  497. res = true;
  498. }
  499. if(!res && Integer.parseInt(newmonth) < Integer.parseInt(oldmonth)){
  500. res = true;
  501. }
  502. return res;
  503. }
  504. /**
  505. * 异常处理
  506. * @param e
  507. * @param orderBean
  508. * @return
  509. */
  510. private int catchOper(Exception e, HashMap<String, String> data, NetOrderBean orderBean){
  511. int result = 1;
  512. if ((e instanceof BusinessException)) {
  513. try {
  514. //this.channelOrderDao.updatestatus(bean.getId(), ((BusinessException) e).getCode());
  515. String resultInfo = ((BusinessException) e).getMessage();
  516. String resultcode = ((BusinessException) e).getCode();
  517. if(!StringUtils.isEmpty(resultInfo) && resultInfo.length()>500){
  518. resultInfo = resultInfo.substring(0, 500);
  519. }
  520. logger.info("resultInfo="+resultInfo+", resultcode="+resultcode);
  521. jiYueOrderDao.updataQueryList(data.get("ID"),resultcode,resultInfo);
  522. } catch (Exception e2) {
  523. e.printStackTrace();
  524. logger.error(data.get("ID")+"JiYueService更新数据出现异常"+e.getMessage());
  525. }
  526. try {
  527. saveNetLog(orderBean, ((BusinessException) e).getCode(), e.getMessage(), data.get("TYPE"));
  528. } catch (Exception e2) {
  529. e.printStackTrace();
  530. logger.error(data.get("ID")+"JiYueService写日志出现异常"+e.getMessage());
  531. }
  532. result = Integer.valueOf(((BusinessException) e).getCode()).intValue();
  533. } else {
  534. e.printStackTrace();
  535. try {
  536. //this.channelOrderDao.updatestatus(bean.getId(), "8000");
  537. String resultInfo = e.getMessage();
  538. String resultcode = "8000";
  539. if(!StringUtils.isEmpty(resultInfo) && resultInfo.length()>500){
  540. resultInfo = resultInfo.substring(0, 500);
  541. }
  542. jiYueOrderDao.updataQueryList(data.get("ID"),resultcode,resultInfo);
  543. } catch (Exception e2) {
  544. e.printStackTrace();
  545. logger.error(data.get("ID")+"JiYueService更新数据出现异常"+e.getMessage());
  546. }
  547. try {
  548. saveNetLog(orderBean, "8000", "系统忙!", data.get("TYPE"));
  549. } catch (Exception e2) {
  550. e.printStackTrace();
  551. logger.error(data.get("ID")+"JiYueService写日志出现异常"+e.getMessage());
  552. }
  553. }
  554. return result;
  555. }
  556. public void insertSmsMq1(String userid, String channel, OrderConfigBean orderConfigBean, String type,HashMap<String, String> data) {
  557. try {
  558. //1150的另外处理,保持不动
  559. if ((!orderConfigBean.getCpid().equals("changshi") && !orderConfigBean.getSpid().equals("1150")) || "1218".equals(orderConfigBean.getSpid()) ){
  560. Map<String, String> map = new HashMap<String, String>();
  561. String url = dictionaryDao.getValue("mqReciveUrl");
  562. String spid = orderConfigBean.getSpid();
  563. map.put("userid", userid);
  564. map.put("cpid", orderConfigBean.getCpid());
  565. map.put("spid", orderConfigBean.getSpid());
  566. map.put("result", "0");
  567. map.put("channel", "");
  568. map.put("times", "");
  569. map.put("orderType", "");
  570. map.put("type", "cssms");
  571. if("fhcp".equals(orderConfigBean.getCpid())&&"99134246".equals(orderConfigBean.getSpid())){
  572. map.put("param1", timehandel(jiYueOrderDao.getFhcpEndtime(userid,orderConfigBean.getCpid(),orderConfigBean.getSpid())));
  573. }
  574. //20220507修改,针对云南省订购成功短信保持原来的订购成功短信。其他省份订购成功短信短信下发全部是改为:
  575. //快手12G流量月包省分 spid= 297
  576. //畅视多视频共享15G流量月包省分 spid= 1218 活动,192908845733和192908129979 渠道 订购成功短信调整为新模板
  577. String busiType = "";
  578. boolean flag = false;
  579. //1.先判断省份
  580. String province = getMobileInfo(userid);
  581. //2.获取活动配置
  582. HashMap activitymap = jiYueOrderDao.getCouponConfig(spid);
  583. if(activitymap!=null && !"云南".equals(province) && ("297".equals(spid) || "1218".equals(spid) || "299".equals(spid))){
  584. String activitystarttime = activitymap.get("STARTTIME").toString();
  585. String activityendtime = activitymap.get("ENDTIME").toString();
  586. //订购时间小于活动开始时间,或者订购时间大于活动结束时间
  587. String ordertime = data.get("ORDERTIME");
  588. if(Long.parseLong(ordertime) < Long.parseLong(activitystarttime)
  589. || Long.parseLong(ordertime) > Long.parseLong(activityendtime)){
  590. System.out.println("订购时间未在【517电信】活动期内,不下发活动短信");
  591. }else{
  592. //发送短信
  593. busiType = "ftp_tran_succ4";
  594. System.out.println("下发【517】活动券码短信");
  595. flag = true;
  596. }
  597. }
  598. if(!flag) {
  599. //业务类型,默认是办理成功
  600. busiType = "ftp_tran_succ";
  601. }
  602. if("1".equals(type)){//退订
  603. busiType = "ftp_cancel_succ"; //退订成功
  604. }
  605. map.put("busiType", busiType);
  606. map.put("style","0000");
  607. URLUtil.post(url, JSONSerializer.toJSON(map).toString(),
  608. // URLUtil.post("http://10.199.99.144:8090/mq-service/recive.do", JSONSerializer.toJSON(map).toString(),
  609. 1000);
  610. //20211214 修改 新春活动 1214~0228 活动期间内的1017,979,1005产品发送短信
  611. //20220412 下线,更改配置化,指定产品可发送短信
  612. if(!"1".equals(type)) {//订购下发
  613. // Boolean hasSendCouponSms = channelOrderDao.hasSendCouponSms(userid,orderConfigBean.getSpid());
  614. List<String> sendsmsProduct = jiYueOrderDao.querySendSmsProduct();
  615. if(sendsmsProduct!=null && sendsmsProduct.contains(orderConfigBean.getSpid())){
  616. System.out.println("下发订购后的定制短信");
  617. // if(hasSendCouponSms) {
  618. map.put("busiType", "ftp_tran_succ3");
  619. URLUtil.post(url, JSONSerializer.toJSON(map).toString(), 1000);
  620. }
  621. }
  622. }
  623. } catch (Exception e) {
  624. e.printStackTrace();
  625. }
  626. }
  627. public String timehandel(Date time){
  628. SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
  629. return sdf.format(time);
  630. }
  631. public int compareOrderForSdk(HashMap<String, String> data) throws Exception {
  632. int result = 0;
  633. SDKOrderInfo orderInfo = null;
  634. SdkOrderBean oldOrderBean = null;
  635. try {
  636. orderInfo = getSdkOrderInfo(data);
  637. oldOrderBean = this.sdkOrderDao.queryOrderList(orderInfo.getUserid(), orderInfo.getCpid(),
  638. orderInfo.getProductId());
  639. if (oldOrderBean != null) {
  640. String status = oldOrderBean.getStatus();
  641. if (status.equals("0")) {
  642. throw new BusinessException("9010", "已订购,请不要重复订购", new String[0]);
  643. }
  644. if (NumberUtils.toLong(data.get("ORDERTIME")) < NumberUtils.toLong(oldOrderBean.getCanceltime())) {
  645. throw new BusinessException("9023", "订购时间晚于本地退订时间不处理", new String[0]);
  646. }
  647. orderInfo.setId(oldOrderBean.getId());
  648. this.sdkOrderDao.order(orderInfo, true);
  649. } else {
  650. orderInfo.setId(this.sysDao.getID());
  651. this.sdkOrderDao.order(orderInfo, false);
  652. }
  653. saveSdkLog(orderInfo, "0", "");
  654. jiYueOrderDao.updataQueryList(data.get("ID"),"0");
  655. } catch (Exception e) {
  656. result = 1;
  657. e.printStackTrace();
  658. if ((e instanceof BusinessException)) {
  659. jiYueOrderDao.updataQueryList(data.get("ID"),((BusinessException) e).getCode());
  660. saveSdkLog(orderInfo, ((BusinessException) e).getCode(), e.getMessage());
  661. } else {
  662. jiYueOrderDao.updataQueryList(data.get("ID"),"8000","系统忙!");
  663. saveSdkLog(orderInfo, "8000", "系统忙!");
  664. }
  665. }
  666. return result;
  667. }
  668. public SDKOrderInfo getSdkOrderInfo(HashMap<String, String> data) throws Exception {
  669. OrderConfigBean orderConfigBean = getOrderConfigBean(data.get("SPID"));
  670. SDKOrderInfo orderInfo = new SDKOrderInfo();
  671. orderInfo.setUserid(data.get("USERMOB"));
  672. orderInfo.setCpid(orderConfigBean.getCpid());
  673. orderInfo.setProductId(orderConfigBean.getSpid());
  674. orderInfo.setAppid("40000001");
  675. orderInfo.setSectionId(orderConfigBean.getSpid());
  676. orderInfo.setProvince(data.get("PROVINCE"));
  677. orderInfo.setArea(data.get("AREA"));
  678. orderInfo.setIsExperience(0);
  679. orderInfo.setType(1);
  680. orderInfo.setAppType("");
  681. if (data.get("TYPE").equals("0")) {
  682. if (StringUtils.isEmpty(data.get("ORDERTIME"))) {
  683. throw new BusinessException("9012", "参数错误", new String[0]);
  684. }
  685. orderInfo.setOrderTime(DateUtils.parseDate(data.get("ORDERTIME"), new String[] { "yyyyMMddHHmmss" }));
  686. orderInfo.setOrdertimestr(data.get("ORDERTIME"));
  687. orderInfo.setOrderChannel("jypt");
  688. orderInfo.setStatus("0");
  689. orderInfo.setOrderStatus(3);
  690. } else {
  691. if (StringUtils.isEmpty(data.get("CANCELTIME"))) {
  692. throw new BusinessException("9012", "参数错误", new String[0]);
  693. }
  694. orderInfo.setCancelTime(DateUtils.parseDate(data.get("CANCELTIME"), new String[] { "yyyyMMddHHmmss" }));
  695. orderInfo.setCanceltimestr(data.get("CANCELTIME"));
  696. orderInfo.setCancelChannel("jypt");
  697. orderInfo.setStatus("1");
  698. orderInfo.setOrderStatus(5);
  699. }
  700. return orderInfo;
  701. }
  702. public void saveSdkLog(SDKOrderInfo orderInfo, String errorcode, String errorinfo) {
  703. this.sdkOrderDao.insertOrderLog(orderInfo, errorcode, errorinfo, "");
  704. }
  705. /**
  706. * 退订
  707. * @return
  708. * @throws Exception
  709. */
  710. public int compareCancelForNet(HashMap<String, String> data) throws Exception {
  711. int result = 0;
  712. NetOrderBean orderBean = null;
  713. NetOrderBean oldOrderBean = null;
  714. try {
  715. orderBean = getNetOrderInfo(data);
  716. if("99134246".equals(orderBean.getSpid())){
  717. throw new BusinessException("9098", "此产品不支持退订!", new String[0]);
  718. }
  719. if(changshiBlackDao.isBlackUser(orderBean.getUserid(),orderBean.getCpid())){
  720. throw new BusinessException("9081", "黑名单用户不处理退订", new String[0]);
  721. }
  722. boolean hasnme = false; //是否次月生效
  723. //能力平台次月生效产品处理流程
  724. if(nextMonthEffectService.hasNextMonthBusi(orderBean.getSpid())){
  725. data.put("CPID",orderBean.getCpid());
  726. data.put("SPID",orderBean.getSpid());
  727. hasnme = true;
  728. nextMonthEffectService.process(orderBean);
  729. //设置同步状态值,用于判断是否生成活动关系
  730. data.put("SYNCSTATUS",orderBean.getSyncstatus());
  731. }else{
  732. oldOrderBean = this.netOrderDao.findOrder(orderBean.getCpid(), orderBean.getSpid(), orderBean.getUserid());
  733. if (oldOrderBean != null) {
  734. /*****************************************************集约平台退订,进行退订渠道更新*************************************************************/
  735. if (!"0".equals(oldOrderBean.getStatus())) {
  736. if("jypt".equals(orderBean.getCancelchannel()) ){
  737. try {
  738. //退订渠道优先级更新
  739. this.netOrderDao.cancelUpdate(orderBean);
  740. } catch (Exception e) {
  741. e.printStackTrace();
  742. }
  743. throw new BusinessException("9099", "[集约平台退订渠道覆盖]已退订,退订渠道更新为jypt", new String[0]);
  744. }
  745. throw new BusinessException("9006", "已退订,请不要重复退订", new String[0]);
  746. }else{
  747. if("jypt".equals(orderBean.getCancelchannel()) ){
  748. try {
  749. if(orderBean.getCanceltime().getTime() < oldOrderBean.getOrdertime().getTime()
  750. && oldOrderBean.getCancelchannel()!=null && !"".equals(oldOrderBean.getCancelchannel().trim())){
  751. //退订渠道优先级更新
  752. this.netOrderDao.cancelUpdate(orderBean);
  753. saveNetLog(orderBean, "9097", "[集约平台退订渠道覆盖]已订购,且集约平台退订时间小于订购时间,退订渠道更新为jypt", data.get("TYPE"));
  754. }
  755. } catch (Exception e) {
  756. e.printStackTrace();
  757. }
  758. }
  759. }
  760. /*****************************************************集约平台退订,进行退订渠道更新*************************************************************/
  761. //只有1150和1040走ECB订购
  762. if (orderBean.getCpid().equals("changshi") && ("1150".equals(orderBean.getSpid()) || "1040".equals(orderBean.getSpid()))){
  763. // && !"99144185".equals(orderBean.getSpid())
  764. // && !"99144186".equals(orderBean.getSpid())
  765. // && !"99144187".equals(orderBean.getSpid())) {
  766. String discntValue = orderBean.getSpid().equals("1150") ? "1" : "0";
  767. EcbProductInfo ecbProductInfo = ecbProductDao.queryEcb(data.get("ID"));
  768. List<DiscntInfo> list = changshiDao.queryDiscntInfo(orderBean.getUserid(), discntValue);
  769. for (DiscntInfo discntInfo : list) {
  770. if (discntInfo.getType().equals("0")
  771. && !discntInfo.getDiscntid().equals(ecbProductInfo.getDiscntCode())) {
  772. throw new BusinessException("9011", "不同资费有未退得订购请求,不处理", new String[0]);
  773. }
  774. }
  775. ecbDiscntDao.cancel(ecbProductInfo, orderBean);
  776. } else if (NumberUtils.toLong(data.get("CANCELTIME")) < NumberUtils
  777. .toLong(oldOrderBean.getOrdertimestr())) {
  778. throw new BusinessException("9025", "退订时间晚于本地订购时间不处理", new String[0]);
  779. }
  780. this.netOrderDao.cancelOrder(orderBean);
  781. } else {
  782. throw new BusinessException("9026", "本地无订购", new String[0]);
  783. }
  784. }
  785. //不是能力平台次月生效产品,或者是能力平台产品且是正式订购关系表退订操作
  786. if(!hasnme || (hasnme && "5".equals(orderBean.getSyncstatus()))){
  787. saveNetLog(orderBean, "0", "", data.get("TYPE"));
  788. }
  789. if(hasnme){
  790. jiYueOrderDao.updataQueryList(data.get("ID"),"0","次月生效数据退订完成");
  791. }else{
  792. jiYueOrderDao.updataQueryList(data.get("ID"),"0","ok");
  793. }
  794. } catch (Exception e) {
  795. result = 1;
  796. catchOper(e,data,orderBean);
  797. }
  798. return result;
  799. }
  800. public int compareCancelForSdk(HashMap<String, String> data) throws SQLException {
  801. int result = 0;
  802. SDKOrderInfo orderInfo = null;
  803. SdkOrderBean oldOrderBean = null;
  804. try {
  805. orderInfo = getSdkOrderInfo(data);
  806. oldOrderBean = this.sdkOrderDao.queryOrderList(orderInfo.getUserid(), orderInfo.getCpid(),
  807. orderInfo.getProductId());
  808. if (oldOrderBean != null) {
  809. orderInfo.setId(oldOrderBean.getId());
  810. String status = oldOrderBean.getStatus();
  811. if (!status.equals("0")) {
  812. throw new BusinessException("9006", "已退订,请不要重复退订", new String[0]);
  813. }
  814. if (NumberUtils.toLong(data.get("CANCELTIME")) < NumberUtils.toLong(oldOrderBean.getOrdertime())) {
  815. throw new BusinessException("9025", "退订时间晚于本地订购时间不处理", new String[0]);
  816. }
  817. this.sdkOrderDao.cancelOrder(orderInfo);
  818. } else {
  819. throw new BusinessException("9026", "退订失败,本地无订购", new String[0]);
  820. }
  821. saveSdkLog(orderInfo, "0", "");
  822. jiYueOrderDao.updataQueryList(data.get("ID"),"0");
  823. } catch (Exception e) {
  824. result = 1;
  825. e.printStackTrace();
  826. if ((e instanceof BusinessException)) {
  827. jiYueOrderDao.updataQueryList(data.get("ID"),((BusinessException) e).getCode());
  828. saveSdkLog(orderInfo, ((BusinessException) e).getCode(), e.getMessage());
  829. } else {
  830. jiYueOrderDao.updataQueryList(data.get("ID"),"8000","系统忙!");
  831. saveSdkLog(orderInfo, "8000", "系统忙!");
  832. }
  833. }
  834. return result;
  835. }
  836. /**
  837. * 生成领取会员的活动关系
  838. * @param configBean
  839. */
  840. public void insertMqOffline(HashMap<String, String> data, OrderConfigBean configBean) {
  841. try{
  842. //20220507增加能力平次月生效处理逻辑
  843. //不是能力平台次月生效产品,或者是能力平台产品且是正式订购关系表退订操作
  844. if(nextMonthEffectService.hasNextMonthBusi(data.get("SPID"))){
  845. if("5".equals(data.get("SYNCSTATUS"))){
  846. logger.info("能力平台正式表退订操作,推送到mq生成活动关系");
  847. }else{
  848. logger.info("能力平台非正式表退订操作,不推送到mq");
  849. return;
  850. }
  851. }
  852. MessagePipe mpipe = new MessagePipe();
  853. mpipe.setHeader("orderoffline");
  854. mpipe.addBody("userid", data.get("USERMOB"));
  855. mpipe.addBody("province", data.get("PROVINCE"));
  856. mpipe.addBody("area", data.get("AREA"));
  857. if (data.get("TYPE").equals("0")) {
  858. mpipe.addBody("orderType", "0");
  859. mpipe.addBody("updateTime", data.get("ORDERTIME"));
  860. } else {
  861. mpipe.addBody("orderType", "1");
  862. mpipe.addBody("updateTime", data.get("CANCELTIME"));
  863. }
  864. mpipe.addBody("cpid", configBean.getCpid());
  865. mpipe.addBody("spid", configBean.getSpid());
  866. mpipe.addBody("channel", "jypt");
  867. mpipe.addBody("activated", "2");
  868. this.messageService.sendMessage(mpipe);
  869. }catch(Exception e){
  870. e.printStackTrace();
  871. logger.error("推送队列出现异常,"+e.getMessage());
  872. }
  873. }
  874. public void insertSmsMq(String userid, String channel, OrderConfigBean orderConfigBean) {
  875. MessagePipe mpipe = new MessagePipe();
  876. mpipe.setHeader("cssms");
  877. mpipe.addBody("userid", userid);
  878. mpipe.addBody("channel", channel);
  879. mpipe.addBody("cpid", orderConfigBean.getCpid());
  880. mpipe.addBody("spid", orderConfigBean.getSpid());
  881. mpipe.addBody("style", "5");
  882. mpipe.addBody("result", "");
  883. mpipe.addBody("times", "");
  884. mpipe.addBody("orderType", "0");
  885. this.messageService.sendMessage(mpipe);
  886. }
  887. }