diff --git a/SQL/xbin_pay.sql b/SQL/xbin_pay.sql new file mode 100644 index 0000000000000000000000000000000000000000..b43a26dd75a938900496536d294eb7f515cfa75e --- /dev/null +++ b/SQL/xbin_pay.sql @@ -0,0 +1,23 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +DROP TABLE IF EXISTS `tb_pay_info`; +CREATE TABLE `tb_pay_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) DEFAULT NULL COMMENT '用户id', + `payer_id` VARCHAR(50) DEFAULT '' COMMENT '付款人账号', + `order_id` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '订单id', + `pay_platform` int(10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信', + `pay_type` int(10) DEFAULT NULL COMMENT '支付类型:1-主扫,2-APP支付,', + `platform_number` varchar(120) DEFAULT NULL COMMENT '支付流水号', + `platform_status` varchar(32) DEFAULT NULL COMMENT '支付状态', + `qr_code` varchar(120) DEFAULT NULL COMMENT '支付二维码', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `order_id` (`order_id`), + KEY `create_time` (`create_time`), + KEY `user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=201800001; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/demo-consumer/pom.xml b/demo-consumer/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..9e6f963cde048e0746f8ede066b5104af5eb123e --- /dev/null +++ b/demo-consumer/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + + com.tengda.test + demo-consumer + 0.0.1-SNAPSHOT + jar + + demo-consumer + Demo project for Spring Boot + + + cn.binux + xbin-store + 1.0-SNAPSHOT + ../pom.xml + + + + UTF-8 + UTF-8 + 1.8 + + + + + cn.binux + xbin-store-common + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-autoconfigure + + + cn.binux + xbin-store-service-pay-api + 1.0-SNAPSHOT + + + cn.binux + xbin-store-service-redis-api + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-test + test + + + org.springframework + spring-test + 4.3.13.RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/demo-consumer/src/main/java/com.tengda.test/DemoConsumerApplication.java b/demo-consumer/src/main/java/com.tengda.test/DemoConsumerApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..63b92efec6dc46d72ca0d504acd3299d09fd3165 --- /dev/null +++ b/demo-consumer/src/main/java/com.tengda.test/DemoConsumerApplication.java @@ -0,0 +1,12 @@ +package com.tengda.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoConsumerApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoConsumerApplication.class, args); + } +} diff --git a/demo-consumer/src/main/java/com.tengda.test/consumer/RedisConsumer.java b/demo-consumer/src/main/java/com.tengda.test/consumer/RedisConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..78a219f9ae3ce85e5f557bf0360baf271974d41d --- /dev/null +++ b/demo-consumer/src/main/java/com.tengda.test/consumer/RedisConsumer.java @@ -0,0 +1,35 @@ +package com.tengda.test.consumer; + + +import cn.binux.pay.service.PayService; +import cn.binux.redis.service.JedisClient; +import com.alibaba.dubbo.config.annotation.Reference; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; +import cn.binux.constant.Const; +@RestController +public class RedisConsumer { + + @Reference(version = Const.XBIN_STORE_REDIS_VERSION) + private JedisClient jedisClient; + + @Reference(version = Const.XBIN_STORE_PAY_VERSION) + private PayService payService; + + @GetMapping("/get/{key}") + public String get(@PathVariable("key") String key){ + String result=jedisClient.get(key); + if(StringUtils.isEmpty(result)) + return "empty"; + else + return result; +// return "aa"; + } + + @GetMapping("payservice/test") + public String PayServiceTest(){ + return payService.doPay(null).getMsg(); + } +} diff --git a/demo-consumer/src/main/resources/application.yml b/demo-consumer/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..fe3cb7ced5f69dc3ee8e01776e5fa84e564293cf --- /dev/null +++ b/demo-consumer/src/main/resources/application.yml @@ -0,0 +1,29 @@ +#DUBBO +dubbox: + application: + name: tengda-demo-provider + organization: btd + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: com.tengda.test.consumer + monitor: + enabled: false + address: 192.168.237.128:7070 + username: root + password: root + +server: + port: 8107 + + +# swagger2 +swagger2.package: com.tengda.test.consumer + +# Redis +redisKey: + prefix: + # 用户登录信息前缀 + user_session: 'USER_SESSION:' \ No newline at end of file diff --git a/demo-provider/pom.xml b/demo-provider/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb3bcf1b86d8bb84da555c90396bdfc719727c56 --- /dev/null +++ b/demo-provider/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + com.tengda + demo-provider + 0.0.1-SNAPSHOT + jar + + demo-provider + Demo project for Spring Boot + + + UTF-8 + UTF-8 + 1.8 + + + + cn.binux + xbin-store + 1.0-SNAPSHOT + ../pom.xml + + + + + org.springframework.boot + spring-boot-starter-web + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + cn.binux + spring-boot-starter-dubbox + 0.0.1-SNAPSHOT + true + + + com.alibaba + dubbo + 2.8.4 + + + cn.binux + xbin-store-common + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-autoconfigure + + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.tengda.demoprovider.DemoProviderApplication + + + + + + + diff --git a/demo-provider/src/main/java/com/tengda/demoprovider/DemoProviderApplication.java b/demo-provider/src/main/java/com/tengda/demoprovider/DemoProviderApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..41d9448382f2e2fd465bedcb467ddc689dd765a1 --- /dev/null +++ b/demo-provider/src/main/java/com/tengda/demoprovider/DemoProviderApplication.java @@ -0,0 +1,14 @@ +package com.tengda.demoprovider; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Configuration; + +@Configuration +@SpringBootApplication +public class DemoProviderApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoProviderApplication.class, args); + } +} diff --git a/demo-provider/src/main/java/com/tengda/demoprovider/service/DemoService.java b/demo-provider/src/main/java/com/tengda/demoprovider/service/DemoService.java new file mode 100644 index 0000000000000000000000000000000000000000..526d4b264b19ebaf2da86b7c354ecaabca02c7e2 --- /dev/null +++ b/demo-provider/src/main/java/com/tengda/demoprovider/service/DemoService.java @@ -0,0 +1,5 @@ +package com.tengda.demoprovider.service; + +public interface DemoService { + String showAuthor(); +} diff --git a/demo-provider/src/main/java/com/tengda/demoprovider/service/DemoServiceImpl.java b/demo-provider/src/main/java/com/tengda/demoprovider/service/DemoServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..3e10ce1efe1abf953886bc72e3e62141e3ce66b9 --- /dev/null +++ b/demo-provider/src/main/java/com/tengda/demoprovider/service/DemoServiceImpl.java @@ -0,0 +1,11 @@ +package com.tengda.demoprovider.service; + +import com.alibaba.dubbo.config.annotation.Service; + +@Service(version = "1.0") +public class DemoServiceImpl implements DemoService { + @Override + public String showAuthor() { + return "BeiTengda"; + } +} diff --git a/demo-provider/src/main/resources/application.yml b/demo-provider/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..1c895ebdebd7d377fbbe7775e65c556bda6f89d4 --- /dev/null +++ b/demo-provider/src/main/resources/application.yml @@ -0,0 +1,23 @@ +#DUBBOX +dubbox: + application: + name: tengda-demo-provider + organization: btd + owner: btd + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: com.tengda.demoprovider.service + protocol: + name: dubbo + port: 20880 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 +# serialization: kryo +# optimizer: cn.binux.serial.SerializationOptimizerImpl +server: + port: 8779 diff --git a/demo-provider/src/test/java/com/tengda/demoprovider/DemoProviderApplicationTests.java b/demo-provider/src/test/java/com/tengda/demoprovider/DemoProviderApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..3183d243683dc4ee7d1d31fb0635c07c50f9993b --- /dev/null +++ b/demo-provider/src/test/java/com/tengda/demoprovider/DemoProviderApplicationTests.java @@ -0,0 +1,16 @@ +package com.tengda.demoprovider; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class DemoProviderApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/demo-web/.gitignore b/demo-web/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..2af7cefb0a3f1e7df2fc27b8421f0e16b460e680 --- /dev/null +++ b/demo-web/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/demo-web/pom.xml b/demo-web/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..bfa21c11e053e93f2abd6ecf16d13ed556a386eb --- /dev/null +++ b/demo-web/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + + com.tenga + demo-web + 0.0.1-SNAPSHOT + jar + + demo-web + Demo project for Spring Boot + + + cn.binux + xbin-store + 1.0-SNAPSHOT + + + + UTF-8 + UTF-8 + 1.8 + + + + + cn.binux + xbin-store-common + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-web + + + com.piggsoft + beetl-spring-boot-starter + 0.0.3 + + + org.springframework.boot + spring-boot-starter-test + test + + + com.alipay + sdk-java + 20171026141113 + + + cn.binux + xbin-store-common-pojo + 1.0-SNAPSHOT + + + com.ibeetl + beetl + 2.7.24 + + + org.springframework.boot + spring-boot-starter-websocket + + + org.webjars + webjars-locator + + + org.webjars + sockjs-client + 1.0.2 + + + org.webjars + stomp-websocket + 2.3.3 + + + org.webjars + bootstrap + 3.3.7 + + + org.webjars + jquery + 3.1.0 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/demo-web/src/main/java/com/tenga/demo/DemoWebApplication.java b/demo-web/src/main/java/com/tenga/demo/DemoWebApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..38656977ac8a6029389694012972b5dc98ce0dc7 --- /dev/null +++ b/demo-web/src/main/java/com/tenga/demo/DemoWebApplication.java @@ -0,0 +1,14 @@ +package com.tenga.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Configuration; + +@Configuration +@SpringBootApplication +public class DemoWebApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoWebApplication.class, args); + } +} diff --git a/demo-web/src/main/java/com/tenga/demo/controller/AlipayController.java b/demo-web/src/main/java/com/tenga/demo/controller/AlipayController.java new file mode 100644 index 0000000000000000000000000000000000000000..9039a8c7af09b5d36508758161173ad28bfbda85 --- /dev/null +++ b/demo-web/src/main/java/com/tenga/demo/controller/AlipayController.java @@ -0,0 +1,113 @@ +package com.tenga.demo.controller; + +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.request.AlipayTradePrecreateRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; +import com.alipay.api.response.AlipayTradePrecreateResponse; +import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class AlipayController { + + @Value("${alipay.gateway}") + private String ALIPAY_GATEWAY; + + @Value("${alipay.charset:utf8}") + private String ALIPAY_CHARSET; + + @Value("${alipay.appid}") + private String ALIPAY_APPID; + + @Value("${alipay.public_key}") + private String ALIPAY_PUBLICKEY; + + @Value("${alipay.private_key}") + private String ALIPAY_PRIVATEKEY; + + @RequestMapping("/alipay") + public ResponseEntity doPagePay(Model model, String WIDout_trade_no, String WIDsubject, String WIDtotal_fee, + String WIDbody) { + System.err.println(WIDout_trade_no); + System.err.println(WIDsubject); + System.err.println(WIDtotal_fee); + // 商户订单号,商户网站订单系统中唯一订单号,必填 + String out_trade_no = WIDout_trade_no; + // 订单名称,必填 + String subject = WIDsubject; + // 付款金额,必填 + String total_fee = WIDtotal_fee; + // 商品描述,可空 + String body = WIDbody; + JSONObject root=new JSONObject(); + //实例化客户端 + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, ALIPAY_APPID,ALIPAY_PRIVATEKEY, "json", ALIPAY_CHARSET,ALIPAY_PUBLICKEY, "RSA2"); + //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify + AlipayTradePagePayRequest request=new AlipayTradePagePayRequest(); + request.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); + request.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址 + //SDK已经封装掉了公共参数,这里只需要传入业务参数 + root.put("out_trade_no","12wrwetrwet34"); + root.put("subject","达子"); + root.put("total_amount","0.01"); + root.put("body","商品1"); + request.setBizContent(root.toJSONString()); + String sHtmlText = null; + try { + sHtmlText = alipayClient.pageExecute(request).getBody(); + } catch (AlipayApiException e) { + e.printStackTrace(); + } + model.addAttribute("sHtmlText", sHtmlText); + System.err.println(sHtmlText); + return new ResponseEntity(model, HttpStatus.OK); + + } + + @RequestMapping("/test") + @ResponseBody + public String doPay() { + JSONObject root=new JSONObject(); + + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, ALIPAY_APPID,ALIPAY_PRIVATEKEY, "json", ALIPAY_CHARSET,ALIPAY_PUBLICKEY, "RSA2"); + //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify + AlipayTradePrecreateRequest request=new AlipayTradePrecreateRequest(); + //SDK已经封装掉了公共参数,这里只需要传入业务参数 + request.setNotifyUrl("af"); + root.put("out_trade_no","a"); + root.put("scene","bar_code"); + root.put("subject","达子"); + root.put("total_amount","0.1"); + root.put("discountable_amount","0.00"); + root.put("undiscountable_amount","0.1"); + root.put("body","商品1"); + request.setBizContent(root.toJSONString()); + AlipayTradePrecreateResponse response; + try { + response = alipayClient.execute(request); + //调用成功,则处理业务逻辑 + if(response.isSuccess()){ + System.out.println("支付宝返回码:"+response.getCode()); + return response.getBody(); + } + else{ + return "a"; + } + } catch (AlipayApiException e) { + return "b"; + } + } + +} diff --git a/demo-web/src/main/java/com/tenga/demo/controller/DemoController.java b/demo-web/src/main/java/com/tenga/demo/controller/DemoController.java new file mode 100644 index 0000000000000000000000000000000000000000..1a381a1bcf0a76e9372efdae53a1dd336cb73f45 --- /dev/null +++ b/demo-web/src/main/java/com/tenga/demo/controller/DemoController.java @@ -0,0 +1,15 @@ +package com.tenga.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/") +public class DemoController { + + @RequestMapping("/") + public String main(){ + return "demo"; + } + +} diff --git a/demo-web/src/main/resources/application-dev.yml b/demo-web/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..5947210c10b90a63a644b72acb907ad5a3cd8e3c --- /dev/null +++ b/demo-web/src/main/resources/application-dev.yml @@ -0,0 +1,19 @@ +server: + port: 8301 +beetl: + templates-path: templates/ + config: + html-tag-flag: true +#配置模板的后缀,自动读取spring.mvc.view.suffix +spring: + mvc: + view: + suffix: .html + +alipay: + gateway: https://openapi.alipaydev.com/gateway.do + appid: 2016082100306733 + private_key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDgojsJIM6UwGuXc6kxgwnQy/7zq3h0FmTvkIBuX5SGHV5MY0I68BVgCA/W9PNSRY1cnXWrjpWREzkZljbM44VNNwLNOe15Uvr9SSu5SHuLlK5qnq2264TbQUtRuCCUpxHimK00Dj9cRnrfWFc2ElKzcwdYEeVR893yWxxTr2SYLv3PQ39AbN+1P4p6vE4uUfD1fBcJyprh1bAVWSQWk6awcuf1z7lkuYvuQ2eE0b+YO5eO5fO8Exp+fjDAQ0gXjP/2gYNqRD92ZdsAgQ8oU1V+ngqy+4KnvWLqj2FaUh1iyXOJ6sqIWE03DX/ogIIaabVkWZ8/aFZV5uhiM9TeF8ifAgMBAAECggEAMLkfgvhZtowSCjStIy8gBujocOPlaZCd7hRytv4GUhy2omz5JZ2DlWPKQ763tEWfxtHkfwSbTm9T+EfLtR84f6oJ8oe5CZLFHAEt+a9OFNV4C2pFlaJ6G7CK7Lu6XWPrjjG9h8f7WEF1T1JzAChzRbcShbjD+8Wgg3vdpg0qDZPjn22tplpaFpsMcAD8FMj3/Noy2poJsnKTbA3qPwZfoX3eivOe8/ELtFNM7bQVlFssNbSWM0PRqUeDRb1dpRlY8r3Rlgh+JSH0o+GYJYLaBs2oGYFdhKulZ0tl7YisskDrp2B2odjqjcbnCpCmXhXC2PEx+T+2R5df4jfFwbJ6+QKBgQD5brIFRGbFVQqcialmPqPaXFxKobAP3tthnII4PlnGNkfSoUFQcWg9pkdB5dgI7MYSCazc2/z536JWDceevEJtwdgeZZSNgMfZl8QwkIFXZk6eJAsq0DhNevZ8hPKi15vSy22bfIgllQ4B1CUlWi2CRJMX83mFjR6wXIoOt/ooUwKBgQDmjGEMapBeios14yUqbh8QUPCxG78x+9K+J0Uhv0EWM2/3ufsYzLS9m2c5if6bYML3/R0Rno0B0rjVpmxmn9WQme5q8ivmqTPdGwrGzRLHn55gvc7q8J8kQi6HIhTBLUR3FWYmYM5vzQy26HAqAYQX6ur7A/Ae5wsvsPRQd/slBQKBgEyaWWPSuPk7f9HJWVQEQtAJ83IcK/UDzT4yEa/yPiHog7BFQ8jPu2LLkTDExM8g4Eej3wnJKe0XaESjYL34NTJ+CMB1E+VNOpMxz9fWWVKdIeHhUeipH9FzxQVC0z19l+ZqAVRyL2HTYAThwTKyei16n+4IITcJuvYQxXl1uQbvAoGBANl54G4y876K2Cjb/QoaWOkuQO4Aq4m975z6NEdSP1Zu7Rb09Dz/lRsqxePMHUV6sE/4Dvy44HCw0zSOycDA01eVLQbrLKhoQgk3YiIH/sgZ9O9y/QY4Nxaf634DkypqxiPDJtnbBcEG3xCHEI8/YNii/EgO/epYrf+t37kshNb1AoGAEgyZe4ahm045V/xW/RJstLjJ0KiTFM0B0Jho3w7iJ89T+01zcufOjbztFw3HnFWOLJXdMvqwV1Mdmu+53Ao+0o02qrDXvnYz0Vb9YKVYIhTH9rETmQ0gWsPcpd30zjcSsGj4RF0GIUZBqJt/eQaevKfxJmPN/5WjJGRMPNt7srk= + public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqPktIvWqAN+6Oxj9wHVuaH50tzy/TjhdRguuxad0MEzVxquV+SZgl/tmQGzM52ZQMkK556wX1mC2aJbSoma84Z51MegC3Kq15jssK9SQWfevqhyW9QENbnfTI1HlV3sRa/R4I2S2uWielGfbqMOZC9KXH6uGT3VMMoElbWv0+IGoHirtV4nvSIbNXhcbsU2vKMOJjYhKtBHjn9HzqOBGiXoP1HXOjtfQdcLcNoYirXQRdWWSkFJqFdd2h3JfXZCsOD9Kp5J1KV+R51Ug4OZ6g9Y1fyJ8Unesq6VrtI68ZzR/TmSu5GRv26XqopPQHGwjYIuO/dQOSsXmBC/WheHxgwIDAQAB + charset: utf8 + notify_url: http://9qprmv.natappfree.cc/notify \ No newline at end of file diff --git a/demo-web/src/main/resources/application.yml b/demo-web/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..caf4dfcd647483863672818bd860d4ec4767e8de --- /dev/null +++ b/demo-web/src/main/resources/application.yml @@ -0,0 +1,3 @@ +spring: + profiles: + active: dev \ No newline at end of file diff --git a/demo-web/src/main/resources/static/js/jquery-1.6.4.js b/demo-web/src/main/resources/static/js/jquery-1.6.4.js new file mode 100644 index 0000000000000000000000000000000000000000..dadf8699961db756716afc96b5e7d77a94155153 --- /dev/null +++ b/demo-web/src/main/resources/static/js/jquery-1.6.4.js @@ -0,0 +1,4 @@ +/* jdf- jquery-1.6.4.js Date:2014-03-20 17:05:52 */ +!function(a,b){function k(a,c,d){if(d===b&&1===a.nodeType){var e="data-"+c.replace(j,"-$1").toLowerCase();if(d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}function l(a){for(var b in a)if("toJSON"!==b)return!1;return!0}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);!i||"queue"!==d&&f.data(a,g,b,!0)||"mark"!==d&&f.data(a,h,b,!0)||setTimeout(function(){f.data(a,g,b,!0)||f.data(a,h,b,!0)||(f.removeData(a,e,!0),i.resolve())},0)}function C(){return!1}function D(){return!0}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function L(a){var b,c,d,e,g,h,i,j,k,m,n,o,p=[],q=[],r=f._data(this,"events");if(a.liveFired!==this&&r&&r.live&&!a.target.disabled&&(!a.button||"click"!==a.type)){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ij;j++)for(m=e[j],i=0;ij&&(e=p[j],!(c&&e.level>c))&&(a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments),o!==!1&&!a.isPropagationStopped()||(c=e.level,o===!1&&(b=!1),!a.isImmediatePropagationStopped()));j++);return b}}function M(a,b){return(a&&"*"!==a?a+".":"")+b.replace(y,"`").replace(z,"&")}function U(a){return!a||!a.parentNode||11===a.parentNode.nodeType}function V(a,b,c){if(b=b||0,f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a){return a===b===c});if("string"==typeof b){var d=f.grep(a,function(a){return 1===a.nodeType});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a){return f.inArray(a,b)>=0===c})}function fb(a){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function gb(a,b){if(1===b.nodeType&&f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;if(e=e[c]=f.extend({},d),g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;j>i;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function hb(a,b){var c;1===b.nodeType&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),"object"===c?b.outerHTML=a.outerHTML:"input"!==c||"checkbox"!==a.type&&"radio"!==a.type?"option"===c?b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando))}function ib(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function jb(a){("checkbox"===a.type||"radio"===a.type)&&(a.defaultChecked=a.checked)}function kb(a){f.nodeName(a,"input")?jb(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),jb)}function lb(a,b){b.src?f.ajax({"url":b.src,"async":!1,"dataType":"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(db,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function yb(a,b,c){var d="width"===b?a.offsetWidth:a.offsetHeight,e="width"===b?tb:ub;return d>0?("border"!==c&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),"margin"===c?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0}),d+"px"):(d=vb(a,b,b),(0>d||null==d)&&(d=a.style[b]||0),d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,"padding"!==c&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),"margin"===c&&(d+=parseFloat(f.css(a,c+this))||0)}),d+"px")}function Vb(a){return function(b,c){if("string"!=typeof b&&(c=b,b="*"),f.isFunction(c))for(var h,i,j,d=b.toLowerCase().split(Lb),e=0,g=d.length;g>e;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}function Wb(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;for(var l,h=a[f],i=0,j=h?h.length:0,k=a===Pb;j>i&&(k||!l);i++)l=h[i](c,d,e),"string"==typeof l&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=Wb(a,c,d,e,l,g)));return!k&&l||g["*"]||(l=Wb(a,c,d,e,"*",g)),l}function Xb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function Yb(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||Ab.test(a)?d(a,e):Yb(a+"["+("object"==typeof e||f.isArray(e)?b:"")+"]",e,c,d)});else if(c||null==b||"object"!=typeof b)d(a,b);else for(var e in b)Yb(a+"["+e+"]",b[e],c,d)}function Zb(a,c,d){var h,i,j,k,e=a.contents,f=a.dataTypes,g=a.responseFields;for(i in g)i in d&&(c[g[i]]=d[i]);for(;"*"===f[0];)f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}return j?(j!==f[0]&&f.unshift(j),d[j]):void 0}function $b(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var g,h,j,l,m,n,o,p,d=a.dataTypes,e={},i=d.length,k=d[0];for(g=1;i>g;g++){if(1===g)for(h in a.converters)"string"==typeof h&&(e[h.toLowerCase()]=a.converters[h]);if(l=k,k=d[g],"*"===k)k=l;else if("*"!==l&&l!==k){if(m=l+" "+k,n=e[m]||e["* "+k],!n){p=b;for(o in e)if(j=o.split(" "),(j[0]===l||"*"===j[0])&&(p=e[j[1]+" "+k])){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}n||p||f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ec(){try{return new a.XMLHttpRequest}catch(b){}}function fc(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function oc(){return setTimeout(pc,0),nc=f.now()}function pc(){nc=b}function qc(a,b){var c={};return f.each(mc.concat.apply([],mc.slice(0,b)),function(){c[this]=a}),c}function rc(a){if(!gc[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove(),("none"===e||""===e)&&(hc||(hc=c.createElement("iframe"),hc.frameBorder=hc.width=hc.height=0),b.appendChild(hc),ic&&hc.createElement||(ic=(hc.contentWindow||hc.contentDocument).document,ic.write(("CSS1Compat"===c.compatMode?"":"")+""),ic.close()),d=ic.createElement(a),ic.body.appendChild(d),e=f.css(d,"display"),b.removeChild(hc)),gc[a]=e}return gc[a]}function uc(a){return f.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){return void setTimeout(K,1)}e.ready()}}var h,A,B,C,e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/gi,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};return e.fn=e.prototype={"constructor":e,"init":function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if("body"===a&&!d&&c.body)return this.context=c,this[0]=c.body,this.selector=a,this.length=1,this;if("string"==typeof a){if(g="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:i.exec(a),!g||!g[1]&&d)return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a);if(g[1])return d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes),e.merge(this,a);if(h=c.getElementById(g[2]),h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}return this.context=c,this.selector=a,this}return e.isFunction(a)?f.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),e.makeArray(a,this))},"selector":"","jquery":"1.6.4","length":0,"size":function(){return this.length},"toArray":function(){return G.call(this,0)},"get":function(a){return null==a?this.toArray():0>a?this[this.length+a]:this[a]},"pushStack":function(a,b,c){var d=this.constructor();return e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,"find"===b?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},"each":function(a,b){return e.each(this,a,b)},"ready":function(a){return e.bindReady(),B.done(a),this},"eq":function(a){return-1===a?this.slice(a):this.slice(a,+a+1)},"first":function(){return this.eq(0)},"last":function(){return this.eq(-1)},"slice":function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},"map":function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},"end":function(){return this.prevObject||this.constructor(null)},"push":F,"sort":[].sort,"splice":[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;for("boolean"==typeof i&&(l=i,i=arguments[1]||{},j=2),"object"==typeof i||e.isFunction(i)||(i={}),k===j&&(i=this,--j);k>j;j++)if(null!=(a=arguments[j]))for(c in a)d=i[c],f=a[c],i!==f&&(l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f));return i},e.extend({"noConflict":function(b){return a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f),e},"isReady":!1,"readyWait":1,"holdReady":function(a){a?e.readyWait++:e.ready(!0)},"ready":function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);if(e.isReady=!0,a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},"bindReady":function(){if(!B){if(B=e._Deferred(),"complete"===c.readyState)return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=null==a.frameElement}catch(d){}c.documentElement.doScroll&&b&&K()}}},"isFunction":function(a){return"function"===e.type(a)},"isArray":Array.isArray||function(a){return"array"===e.type(a)},"isWindow":function(a){return a&&"object"==typeof a&&"setInterval"in a},"isNaN":function(a){return null==a||!m.test(a)||isNaN(a)},"type":function(a){return null==a?String(a):J[D.call(a)]||"object"},"isPlainObject":function(a){if(!a||"object"!==e.type(a)||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},"isEmptyObject":function(a){for(var b in a)return!1;return!0},"error":function(a){throw a},"parseJSON":function(b){return"string"==typeof b&&b?(b=e.trim(b),a.JSON&&a.JSON.parse?a.JSON.parse(b):o.test(b.replace(p,"@").replace(q,"]").replace(r,""))?new Function("return "+b)():void e.error("Invalid JSON: "+b)):null},"parseXML":function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}return d&&d.documentElement&&!d.getElementsByTagName("parsererror").length||e.error("Invalid XML: "+c),d},"noop":function(){},"globalEval":function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},"camelCase":function(a){return a.replace(x,"ms-").replace(w,y)},"nodeName":function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},"each":function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d)if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;h>g&&c.apply(a[g++],d)!==!1;);else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;h>g&&c.call(a[g],g,a[g++])!==!1;);return a},"trim":H?function(a){return null==a?"":H.call(a)}:function(a){return null==a?"":a.toString().replace(k,"").replace(l,"")},"makeArray":function(a,b){var c=b||[];if(null!=a){var d=e.type(a);null==a.length||"string"===d||"function"===d||"regexp"===d||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},"inArray":function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;d>c;c++)if(b[c]===a)return c;return-1},"merge":function(a,c){var d=a.length,e=0;if("number"==typeof c.length)for(var f=c.length;f>e;e++)a[d++]=c[e];else for(;c[e]!==b;)a[d++]=c[e++];return a.length=d,a},"grep":function(a,b,c){var e,d=[];c=!!c;for(var f=0,g=a.length;g>f;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},"map":function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&"number"==typeof j&&(j>0&&a[0]&&a[j-1]||0===j||e.isArray(a));if(k)for(;j>i;i++)f=c(a[i],i,d),null!=f&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),null!=f&&(h[h.length]=f);return h.concat.apply([],h)},"guid":1,"proxy":function(a,c){if("string"==typeof c){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};return g.guid=a.guid=a.guid||g.guid||e.guid++,g},"access":function(a,c,d,f,g,h){var i=a.length;if("object"==typeof c){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;i>k;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},"now":function(){return(new Date).getTime()},"uaMatch":function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{"browser":b[1]||"","version":b[2]||"0"}},"sub":function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(c,d){return d&&d instanceof e&&!(d instanceof a)&&(d=a(d)),e.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},"browser":{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test("\xa0")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){"complete"===c.readyState&&(c.detachEvent("onreadystatechange",C),e.ready())}),e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({"_Deferred":function(){var b,c,d,a=[],e={"done":function(){if(!d){var g,h,i,j,k,c=arguments;for(b&&(k=b,b=0),g=0,h=c.length;h>g;g++)i=c[g],j=f.type(i),"array"===j?e.done.apply(e,i):"function"===j&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},"resolveWith":function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{for(;a[0];)a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},"resolve":function(){return e.resolveWith(this,arguments),this},"isResolved":function(){return!(!c&&!b)},"cancel":function(){return d=1,a=[],this}};return e},"Deferred":function(a){var d,b=f._Deferred(),c=f._Deferred();return f.extend(b,{"then":function(a,c){return b.done(a).fail(c),this},"always":function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},"fail":c.done,"rejectWith":c.resolveWith,"reject":c.resolve,"isRejected":c.isResolved,"pipe":function(a,c){return f.Deferred(function(d){f.each({"done":[a,"resolve"],"fail":[c,"reject"]},function(a,c){var h,e=c[0],g=c[1];b[a](f.isFunction(e)?function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}:d[g])})}).promise()},"promise":function(a){if(null==a){if(d)return d;d=a={}}for(var c=g.length;c--;)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b),b},"when":function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=1>=d&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;d>c;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var d,e,g,h,i,j,k,l,m,n,o,p,q,s,t,u,a=c.createElement("div"),b=c.documentElement;if(a.setAttribute("className","t"),a.innerHTML="
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0],!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={"leadingWhitespace":3===a.firstChild.nodeType,"tbody":!a.getElementsByTagName("tbody").length,"htmlSerialize":!!a.getElementsByTagName("link").length,"style":/top/.test(e.getAttribute("style")),"hrefNormalized":"/a"===e.getAttribute("href"),"opacity":/^0.55$/.test(e.style.opacity),"cssFloat":!!e.style.cssFloat,"checkOn":"on"===i.value,"optSelected":h.selected,"getSetAttribute":"t"!==a.className,"submitBubbles":!0,"changeBubbles":!0,"focusinBubbles":!1,"deleteExpando":!0,"noCloneEvent":!0,"inlineBlockNeedsLayout":!1,"shrinkWrapBlocks":!1,"reliableMarginRight":!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue="t"===i.value,i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={"visibility":"hidden","width":0,"height":0,"border":0,"margin":0,"background":"none"},m&&f.extend(p,{"position":"absolute","left":"-1000px","top":"-1000px"});for(t in p)o.style[t]=p[t];if(o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=2===a.offsetWidth,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=2===a.offsetWidth,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=2!==a.offsetWidth),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=0===q[0].offsetHeight,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&0===q[0].offsetHeight,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=0===(parseInt((c.defaultView.getComputedStyle(j,null)||{"marginRight":0}).marginRight,10)||0)),o.innerHTML="",n.removeChild(o),a.attachEvent)for(t in{"submit":1,"change":1,"focusin":1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u="function"==typeof a[s]),k[t+"Bubbles"]=u;return o=l=g=h=m=j=a=i=null,k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({"cache":{},"uuid":0,"expando":"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),"noData":{"embed":!0,"object":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000","applet":!0},"hasData":function(a){return a=a.nodeType?f.cache[a[f.expando]]:a[f.expando],!!a&&!l(a)},"data":function(a,c,d,e){if(f.acceptData(a)){var g,h,i=f.expando,j="string"==typeof c,k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if(!(!m||e&&m&&l[m]&&!l[m][i])||!j||d!==b)return m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop)),("object"==typeof c||"function"==typeof c)&&(e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c)),g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d),"events"!==c||g[c]?(j?(h=g[c],null==h&&(h=g[f.camelCase(c)])):h=g,h):g[i]&&g[i].events}},"removeData":function(a,b,c){if(f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(h[i]&&!(b&&(d=c?h[i][e]:h[i],d&&(d[b]||(b=f.camelCase(b)),delete d[b],!l(d)))||c&&(delete h[i][e],!l(h[i])))){var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}}},"_data":function(a,b,c){return f.data(a,b,c,!0)},"acceptData":function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return!(b===!0||a.getAttribute("classid")!==b)}return!0}}),f.fn.extend({"data":function(a,c){var d=null;if("undefined"==typeof a){if(this.length&&(d=f.data(this[0]),1===this[0].nodeType))for(var g,e=this[0].attributes,h=0,i=e.length;i>h;h++)g=e[h].name,0===g.indexOf("data-")&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]));return d}if("object"==typeof a)return this.each(function(){f.data(this,a)});var j=a.split(".");return j[1]=j[1]?"."+j[1]:"",c===b?(d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d)),d===b&&j[1]?this.data(j[0]):d):this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},"removeData":function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({"_mark":function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},"_unmark":function(a,c,d){if(a!==!0&&(d=c,c=a,a=!1),c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},"queue":function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);return d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d)),e||[]}},"dequeue":function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift();"inprogress"===d&&(d=c.shift()),d&&("fx"===b&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({"queue":function(a,c){return"string"!=typeof a&&(c=a,a="fx"),c===b?f.queue(this[0],a):this.each(function(){var b=f.queue(this,a,c);"fx"===a&&"inprogress"!==b[0]&&f.dequeue(this,a)})},"dequeue":function(a){return this.each(function(){f.dequeue(this,a)})},"delay":function(a,b){return a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},"clearQueue":function(a){return this.queue(a||"fx",[])},"promise":function(a,c){function m(){--h||d.resolveWith(e,[e])}"string"!=typeof a&&(c=a,a=b),a=a||"fx";for(var l,d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark";g--;)(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))&&(h++,l.done(m));return m(),d.promise()}});var u,v,n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i;f.fn.extend({"attr":function(a,b){return f.access(this,a,b,!0,f.attr)},"removeAttr":function(a){return this.each(function(){f.removeAttr(this,a)})},"prop":function(a,b){return f.access(this,a,b,!0,f.prop)},"removeProp":function(a){return a=f.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},"addClass":function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&"string"==typeof a)for(b=a.split(o),c=0,d=this.length;d>c;c++)if(e=this[c],1===e.nodeType)if(e.className||1!==b.length){for(g=" "+e.className+" ",h=0,i=b.length;i>h;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}else e.className=a;return this},"removeClass":function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&"string"==typeof a||a===b)for(c=(a||"").split(o),d=0,e=this.length;e>d;d++)if(g=this[d],1===g.nodeType&&g.className)if(a){for(h=(" "+g.className+" ").replace(n," "),i=0,j=c.length;j>i;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className="";return this},"toggleClass":function(a,b){var c=typeof a,d="boolean"==typeof b;return this.each(f.isFunction(a)?function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c)for(var e,g=0,h=f(this),i=b,j=a.split(o);e=j[g++];)i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e);else("undefined"===c||"boolean"===c)&&(this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||"")})},"hasClass":function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},"val":function(a){var c,d,e=this[0];if(!arguments.length)return e?(c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type],c&&"get"in c&&(d=c.get(e,"value"))!==b?d:(d=e.value,"string"==typeof d?d.replace(p,""):null==d?"":d)):b;var g=f.isFunction(a);return this.each(function(d){var h,e=f(this);1===this.nodeType&&(h=g?a.call(this,d,e.val()):a,null==h?h="":"number"==typeof h?h+="":f.isArray(h)&&(h=f.map(h,function(a){return null==a?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type],c&&"set"in c&&c.set(this,h,"value")!==b||(this.value=h))})}}),f.extend({"valHooks":{"option":{"get":function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},"select":{"get":function(a){var b,c=a.selectedIndex,d=[],e=a.options,g="select-one"===a.type;if(0>c)return null;for(var h=g?c:0,i=g?c+1:e.length;i>h;h++){var j=e[h];if(!(!j.selected||(f.support.optDisabled?j.disabled:null!==j.getAttribute("disabled"))||j.parentNode.disabled&&f.nodeName(j.parentNode,"optgroup"))){if(b=f(j).val(),g)return b;d.push(b)}}return g&&!d.length&&e.length?f(e[c]).val():d},"set":function(a,b){var c=f.makeArray(b);return f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},"attrFn":{"val":!0,"css":!0,"html":!0,"text":!0,"data":!0,"width":!0,"height":!0,"offset":!0},"attrFix":{"tabindex":"tabIndex"},"attr":function(a,c,d,e){var g=a.nodeType;if(!a||3===g||8===g||2===g)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=1!==g||!f.isXMLDoc(a);return j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u))),d!==b?null===d?(f.removeAttr(a,c),b):i&&"set"in i&&j&&(h=i.set(a,d,c))!==b?h:(a.setAttribute(c,""+d),d):i&&"get"in i&&j&&null!==(h=i.get(a,c))?h:(h=a.getAttribute(c),null===h?b:h)},"removeAttr":function(a,b){var c;1===a.nodeType&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},"attrHooks":{"type":{"set":function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&"radio"===b&&f.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},"value":{"get":function(a,b){return u&&f.nodeName(a,"button")?u.get(a,b):b in a?a.value:null},"set":function(a,b,c){return u&&f.nodeName(a,"button")?u.set(a,b,c):void(a.value=b)}}},"propFix":{"tabindex":"tabIndex","readonly":"readOnly","for":"htmlFor","class":"className","maxlength":"maxLength","cellspacing":"cellSpacing","cellpadding":"cellPadding","rowspan":"rowSpan","colspan":"colSpan","usemap":"useMap","frameborder":"frameBorder","contenteditable":"contentEditable"},"prop":function(a,c,d){var e=a.nodeType;if(!a||3===e||8===e||2===e)return b;var g,h,i=1!==e||!f.isXMLDoc(a);return i&&(c=f.propFix[c]||c,h=f.propHooks[c]),d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&null!==(g=h.get(a,c))?g:a[c]},"propHooks":{"tabIndex":{"get":function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={"get":function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},"set":function(a,b,c){var d;return b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},f.support.getSetAttribute||(u=f.valHooks.button={"get":function(a,c){var d;return d=a.getAttributeNode(c),d&&""!==d.nodeValue?d.nodeValue:b},"set":function(a,b,d){var e=a.getAttributeNode(d);return e||(e=c.createAttribute(d),a.setAttributeNode(e)),e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{"set":function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{"get":function(a){var d=a.getAttribute(c,2);return null===d?b:d}})}),f.support.style||(f.attrHooks.style={"get":function(a){return a.style.cssText.toLowerCase()||b},"set":function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{"get":function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={"get":function(a){return null===a.getAttribute("value")?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{"set":function(a,b){return f.isArray(b)?a.checked=f.inArray(f(a).val(),b)>=0:void 0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={"add":function(a,c,d,e){if(3!==a.nodeType&&8!==a.nodeType){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(i){var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return"undefined"==typeof f||a&&f.event.triggered===a.type?b:f.event.handle.apply(k.elem,arguments)}),k.elem=a,c=c.split(" ");for(var l,n,m=0;l=c[m++];){h=g?f.extend({},g):{"handler":d,"data":e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};o||(o=j[l]=[],p.setup&&p.setup.call(a,e,n,k)!==!1||(a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k))),p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}}},"global":{},"remove":function(a,c,d,e){if(3!==a.nodeType&&8!==a.nodeType){d===!1&&(d=C);var g,h,j,l,m,n,o,p,q,r,k=0,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(s&&t)if(c&&c.type&&(d=c.handler,c=c.type),!c||"string"==typeof c&&"."===c.charAt(0)){c=c||"";for(h in t)f.event.remove(a,h+c)}else{for(c=c.split(" ");h=c[k++];)if(r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h])if(d){for(o=f.event.special[h]||{},j=e||0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort()),e&&!f.event.customEvent[h]||f.event.global[h]){if(c="object"==typeof c?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"),(g||!e)&&(c.preventDefault(),c.stopPropagation()),!e)return void f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});if(3!==e.nodeType&&8!==e.nodeType){c.result=b,c.target=e,d=null!=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if(!(o._default&&o._default.call(e.ownerDocument,c)!==!1||"click"===h&&f.nodeName(e,"a")||!f.acceptData(e))){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}}},"handle":function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;i>h;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);if(k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation())),c.isImmediatePropagationStopped())break}}return c.result},"props":"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),"fix":function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var g,e=this.props.length;e;)g=this.props[--e],a[g]=d[g];if(a.target||(a.target=a.srcElement||c),3===a.target.nodeType&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement),null==a.pageX&&null!=a.clientX){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}return null!=a.which||null==a.charCode&&null==a.keyCode||(a.which=null!=a.charCode?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),a.which||a.button===b||(a.which=1&a.button?1:2&a.button?3:4&a.button?2:0),a},"guid":1e8,"proxy":f.proxy,"special":{"ready":{"setup":f.bindReady,"teardown":f.noop},"live":{"add":function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{"handler":L,"guid":a.handler.guid}))},"remove":function(a){f.event.remove(this,M(a.origType,a.selector),a)}},"beforeunload":{"setup":function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},"teardown":function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){return this.preventDefault?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),void(this[f.expando]=!0)):new f.Event(a,b)},f.Event.prototype={"preventDefault":function(){this.isDefaultPrevented=D;var a=this.originalEvent;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},"stopPropagation":function(){this.isPropagationStopped=D;var a=this.originalEvent;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},"stopImmediatePropagation":function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},"isDefaultPrevented":C,"isPropagationStopped":C,"isImmediatePropagationStopped":C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};if(f.each({"mouseenter":"mouseover","mouseleave":"mouseout"},function(a,b){f.event.special[a]={"setup":function(c){f.event.add(this,b,c&&c.selector?F:E,a)},"teardown":function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={"setup":function(){return f.nodeName(this,"form")?!1:(f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";"submit"!==c&&"image"!==c||!f(b).closest("form").length||J("submit",this,arguments)}),void f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";"text"!==c&&"password"!==c||!f(b).closest("form").length||13!==a.keyCode||J("submit",this,arguments)}))},"teardown":function(){f.event.remove(this,".specialSubmit")}}),!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;return"radio"===b||"checkbox"===b?c=a.checked:"select-multiple"===b?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex),c},I=function(a){var d,e,c=a.target;x.test(c.nodeName)&&!c.readOnly&&(d=f._data(c,"_change_data"),e=H(c),("focusout"!==a.type||"radio"!==c.type)&&f._data(c,"_change_data",e),d!==b&&e!==d&&(null!=d||e)&&(a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)))};f.event.special.change={"filters":{"focusout":I,"beforedeactivate":I,"click":function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";("radio"===c||"checkbox"===c||f.nodeName(b,"select"))&&I.call(this,a)},"keydown":function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(13===a.keyCode&&!f.nodeName(b,"textarea")||32===a.keyCode&&("checkbox"===c||"radio"===c)||"select-multiple"===c)&&I.call(this,a)},"beforeactivate":function(a){var b=a.target;f._data(b,"_change_data",H(b))}},"setup":function(){if("file"===this.type)return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},"teardown":function(){return f.event.remove(this,".specialChange"),x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({"focus":"focusin","blur":"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={"setup":function(){0===d++&&c.addEventListener(a,e,!0)},"teardown":function(){0===--d&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if("object"==typeof a){for(var h in a)this[c](h,d,a[h],e);return this}if((2===arguments.length||d===!1)&&(e=d,d=b),"one"===c?(g=function(a){return f(this).unbind(a,g),e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e,"unload"===a&&"one"!==c)this.one(a,d,e);else for(var i=0,j=this.length;j>i;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({"unbind":function(a,b){if("object"!=typeof a||a.preventDefault)for(var d=0,e=this.length;e>d;d++)f.event.remove(this[d],a,b);else for(var c in a)this.unbind(c,a[c]);return this},"delegate":function(a,b,c,d){return this.live(b,c,d,a)},"undelegate":function(a,b,c){return 0===arguments.length?this.unbind("live"):this.die(b,null,c,a)},"trigger":function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},"triggerHandler":function(a,b){return this[0]?f.event.trigger(a,b,this[0],!0):void 0},"toggle":function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;return f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};for(e.guid=c;dp;p++)f.event.add(n[p],"live."+M(h,m),{"data":d,"selector":m,"handler":e,"origType":h,"origHandler":e,"preType":l});else n.unbind("live."+M(h,m),e);else a.push("mouseenter"+k,"mouseleave"+k);return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){return null==c&&(c=a,a=null),arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function t(a,b,c,d,e,f){for(var g=0,h=d.length;h>g;g++){var i=d[g];if(i){var j=!1;for(i=i[a];i;){if(i.sizcache===c){j=d[i.sizset];break}if(1!==i.nodeType||f||(i.sizcache=c,i.sizset=g),i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}function u(a,b,c,d,e,f){for(var g=0,h=d.length;h>g;g++){var i=d[g];if(i){var j=!1;for(i=i[a];i;){if(i.sizcache===c){j=d[i.sizset];break}if(1===i.nodeType)if(f||(i.sizcache=c,i.sizset=g),"string"!=typeof b){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){return h=!1,0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(1!==d.nodeType&&9!==d.nodeType)return[];if(!b||"string"!=typeof b)return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do if(a.exec(""),i=a.exec(y),i&&(y=i[3],x.push(i[1]),i[2])){o=i[3];break}while(i);if(x.length>1&&m.exec(b))if(2===x.length&&l.relative[x[0]])j=v(x[0]+x[1],d);else for(j=l.relative[x[0]]?[d]:k(x.shift(),d);x.length;)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j);else if(!g&&x.length>1&&9===d.nodeType&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]),d)for(q=g?{"expr":x.pop(),"set":p(g)}:k.find(x.pop(),1!==x.length||"~"!==x[0]&&"+"!==x[0]||!d.parentNode?d:d.parentNode,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;x.length;)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",null==s&&(s=d),l.relative[r](n,s,w);else n=x=[];if(n||(n=j),n||k.error(r||b),"[object Array]"===e.call(n))if(u)if(d&&1===d.nodeType)for(t=0;null!=n[t];t++)n[t]&&(n[t]===!0||1===n[t].nodeType&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;null!=n[t];t++)n[t]&&1===n[t].nodeType&&f.push(j[t]);else f.push.apply(f,n);else p(n,f);return o&&(k(o,h,f,g),k.uniqueSort(f)),f};k.uniqueSort=function(a){if(r&&(g=h,a.sort(r),g))for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;f>e;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];if(g.splice(1,1),"\\"!==j.substr(j.length-1)&&(g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c),null!=d)){a=a.replace(l.match[h],"");break}}}return d||(d="undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName("*"):[]),{"set":d,"expr":a}},k.filter=function(a,c,d,e){for(var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);a&&c.length;){for(var n in l.filter)if(null!=(f=l.leftMatch[n].exec(a))&&f[2]){var o,p,q=l.filter[n],r=f[1];if(g=!1,f.splice(1,1),"\\"===r.substr(r.length-1))continue;if(j===i&&(i=[]),l.preFilter[n])if(f=l.preFilter[n](f,j,d,i,e,m)){if(f===!0)continue}else g=o=!0;if(f)for(var s=0;null!=(p=j[s]);s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&null!=o?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){if(d||(j=i),a=a.replace(l.match[n],""),!g)return[];break}}if(a===h){if(null!=g)break;k.error(a)}h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={"order":["ID","NAME","TAG"],"match":{"ID":/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,"CLASS":/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,"NAME":/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,"ATTR":/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,"TAG":/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,"CHILD":/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,"POS":/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,"PSEUDO":/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},"leftMatch":{},"attrMap":{"class":"className","for":"htmlFor"},"attrHandle":{"href":function(a){return a.getAttribute("href")},"type":function(a){return a.getAttribute("type")}},"relative":{"+":function(a,b){var c="string"==typeof b,d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var h,f=0,g=a.length;g>f;f++)if(h=a[f]){for(;(h=h.previousSibling)&&1!==h.nodeType;);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d="string"==typeof b,e=0,f=a.length;if(d&&!j.test(b)){for(b=b.toLowerCase();f>e;e++)if(c=a[e]){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}else{for(;f>e;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;"string"!=typeof b||j.test(b)||(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;"string"!=typeof b||j.test(b)||(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},"find":{"ID":function(a,b,c){if("undefined"!=typeof b.getElementById&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},"NAME":function(a,b){if("undefined"!=typeof b.getElementsByName){for(var c=[],d=b.getElementsByName(a[1]),e=0,f=d.length;f>e;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return 0===c.length?null:c}},"TAG":function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a[1]):void 0}},"preFilter":{"CLASS":function(a,b,c,d,e,f){if(a=" "+a[1].replace(i,"")+" ",f)return a;for(var h,g=0;null!=(h=b[g]);g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},"ID":function(a){return a[1].replace(i,"")},"TAG":function(a){return a[1].replace(i,"").toLowerCase()},"CHILD":function(a){if("nth"===a[1]){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec("even"===a[2]&&"2n"||"odd"===a[2]&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);return a[0]=d++,a},"ATTR":function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");return!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),"~="===a[2]&&(a[4]=" "+a[4]+" "),a},"PSEUDO":function(b,c,d,e,f){if("not"===b[1]){if(!((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))){var g=k.filter(b[3],c,d,!0^f);return d||e.push.apply(e,g),!1}b[3]=k(b[3],null,null,c)}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},"POS":function(a){return a.unshift(!0),a}},"filters":{"enabled":function(a){return a.disabled===!1&&"hidden"!==a.type},"disabled":function(a){return a.disabled===!0},"checked":function(a){return a.checked===!0},"selected":function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},"parent":function(a){return!!a.firstChild},"empty":function(a){return!a.firstChild},"has":function(a,b,c){return!!k(c[3],a).length},"header":function(a){return/h\d/i.test(a.nodeName)},"text":function(a){var b=a.getAttribute("type"),c=a.type;return"input"===a.nodeName.toLowerCase()&&"text"===c&&(b===c||null===b)},"radio":function(a){return"input"===a.nodeName.toLowerCase()&&"radio"===a.type},"checkbox":function(a){return"input"===a.nodeName.toLowerCase()&&"checkbox"===a.type},"file":function(a){return"input"===a.nodeName.toLowerCase()&&"file"===a.type},"password":function(a){return"input"===a.nodeName.toLowerCase()&&"password"===a.type},"submit":function(a){var b=a.nodeName.toLowerCase();return("input"===b||"button"===b)&&"submit"===a.type},"image":function(a){return"input"===a.nodeName.toLowerCase()&&"image"===a.type},"reset":function(a){var b=a.nodeName.toLowerCase();return("input"===b||"button"===b)&&"reset"===a.type},"button":function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},"input":function(a){return/input|select|textarea|button/i.test(a.nodeName)},"focus":function(a){return a===a.ownerDocument.activeElement}},"setFilters":{"first":function(a,b){return 0===b},"last":function(a,b,c,d){return b===d.length-1},"even":function(a,b){return b%2===0},"odd":function(a,b){return b%2===1},"lt":function(a,b,c){return bc[3]-0},"nth":function(a,b,c){return c[3]-0===b},"eq":function(a,b,c){return c[3]-0===b}},"filter":{"PSEUDO":function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if("contains"===e)return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if("not"===e){for(var g=b[3],h=0,i=g.length;i>h;h++)if(g[h]===a)return!1;return!0}k.error(e)},"CHILD":function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":for(;d=d.previousSibling;)if(1===d.nodeType)return!1;if("first"===c)return!0;d=a;case"last":for(;d=d.nextSibling;)if(1===d.nodeType)return!1;return!0;case"nth":var e=b[2],f=b[3];if(1===e&&0===f)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)1===d.nodeType&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return 0===e?0===j:j%e===0&&j/e>=0}},"ID":function(a,b){return 1===a.nodeType&&a.getAttribute("id")===b},"TAG":function(a,b){return"*"===b&&1===a.nodeType||a.nodeName.toLowerCase()===b},"CLASS":function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},"ATTR":function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):null!=a[c]?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return null==d?"!="===f:"="===f?e===g:"*="===f?e.indexOf(g)>=0:"~="===f?(" "+e+" ").indexOf(g)>=0:g?"!="===f?e!==g:"^="===f?0===e.indexOf(g):"$="===f?e.substr(e.length-g.length)===g:"|="===f?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},"POS":function(a,b,c,d){var e=b[2],f=l.setFilters[e];return f?f(a,c,b,d):void 0}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){return a=Array.prototype.slice.call(a,0),b?(b.push.apply(b,a),b):a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if("[object Array]"===e.call(a))Array.prototype.push.apply(d,a);else if("number"==typeof a.length)for(var f=a.length;f>c;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){return a===b?(g=!0,0):a.compareDocumentPosition&&b.compareDocumentPosition?4&a.compareDocumentPosition(b)?-1:1:a.compareDocumentPosition?-1:1}:(r=function(a,b){if(a===b)return g=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;for(;j;)e.unshift(j),j=j.parentNode;for(j=i;j;)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;c>k&&d>k;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;for(var d=a.nextSibling;d;){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){for(var c,b="",d=0;a[d];d++)c=a[d],3===c.nodeType||4===c.nodeType?b+=c.nodeValue:8!==c.nodeType&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if("undefined"!=typeof c.getElementById&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||"undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return 1===a.nodeType&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if("*"===a[1]){for(var d=[],e=0;c[e];e++)1===c[e].nodeType&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&"undefined"!=typeof a.firstChild.getAttribute&&"#"!==a.firstChild.getAttribute("href")&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&!function(){var a=k,b=c.createElement("div"),d="__sizzle__";if(b.innerHTML="

",!b.querySelectorAll||0!==b.querySelectorAll(".TEST").length){k=function(b,e,f,g){if(e=e||c,!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(1===e.nodeType||9===e.nodeType)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(9===e.nodeType){if("body"===b&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(1===e.nodeType&&"object"!==e.nodeName.toLowerCase()){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){if(c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']"),!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&11!==a.document.nodeType)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
",a.getElementsByClassName&&0!==a.getElementsByClassName("e").length&&(a.lastChild.className="e",1!==a.getElementsByClassName("e").length&&(l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){return"undefined"==typeof b.getElementsByClassName||c?void 0:b.getElementsByClassName(a[1])},a=null))}(),k.contains=c.documentElement.contains?function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?function(a,b){return!!(16&a.compareDocumentPosition(b))}:function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?"HTML"!==b.nodeName:!1};var v=function(a,b){for(var c,d=[],e="",f=b.nodeType?[b]:b;c=l.match.PSEUDO.exec(a);)e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;h>g;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={"children":!0,"contents":!0,"next":!0,"prev":!0};f.fn.extend({"find":function(a){var c,d,b=this;if("string"!=typeof a)return f(a).filter(function(){for(c=0,d=b.length;d>c;c++)if(f.contains(b[c],this))return!0});var g,h,i,e=this.pushStack("","find",a);for(c=0,d=this.length;d>c;c++)if(g=e.length,f.find(a,this[c],e),c>0)for(h=g;hi;i++)if(e[i]===e[h]){e.splice(h--,1);break}return e},"has":function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;c>a;a++)if(f.contains(this,b[a]))return!0})},"not":function(a){return this.pushStack(V(this,a,!1),"not",a)},"filter":function(a){return this.pushStack(V(this,a,!0),"filter",a)},"is":function(a){return!!a&&("string"==typeof a?f.filter(a,this).length>0:this.filter(a).length>0)},"closest":function(a,b){var d,e,c=[],g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;e>d;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);for(;g&&g.ownerDocument&&g!==b;){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({"selector":i,"elem":g,"level":k});g=g.parentNode,k++}}return c}var l=S.test(a)||"string"!=typeof a?f(a,b||this.context):0;for(d=0,e=this.length;e>d;d++)for(g=this[d];g;){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}if(g=g.parentNode,!g||!g.ownerDocument||g===b||11===g.nodeType)break}return c=c.length>1?f.unique(c):c,this.pushStack(c,"closest",a)},"index":function(a){return a?"string"==typeof a?f.inArray(this[0],f(a)):f.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},"add":function(a,b){var c="string"==typeof a?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},"andSelf":function(){return this.add(this.prevObject)}}),f.each({"parent":function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},"parents":function(a){return f.dir(a,"parentNode")},"parentsUntil":function(a,b,c){return f.dir(a,"parentNode",c)},"next":function(a){return f.nth(a,2,"nextSibling")},"prev":function(a){return f.nth(a,2,"previousSibling")},"nextAll":function(a){return f.dir(a,"nextSibling")},"prevAll":function(a){return f.dir(a,"previousSibling")},"nextUntil":function(a,b,c){return f.dir(a,"nextSibling",c)},"prevUntil":function(a,b,c){return f.dir(a,"previousSibling",c)},"siblings":function(a){return f.sibling(a.parentNode.firstChild,a)},"children":function(a){return f.sibling(a.firstChild)},"contents":function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);return N.test(a)||(d=c),d&&"string"==typeof d&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse()),this.pushStack(e,a,g.join(","))}}),f.extend({"filter":function(a,b,c){return c&&(a=":not("+a+")"),1===b.length?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},"dir":function(a,c,d){for(var e=[],g=a[c];g&&9!==g.nodeType&&(d===b||1!==g.nodeType||!f(g).is(d));)1===g.nodeType&&e.push(g),g=g[c];return e},"nth":function(a,b,c){b=b||1;for(var e=0;a&&(1!==a.nodeType||++e!==b);a=a[c]);return a},"sibling":function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Z=/<([\w:]+)/,$=/",""],"legend":[1,"
","
"],"thead":[1,"","
"],"tr":[2,"","
"],"td":[3,"","
"],"col":[2,"","
"],"area":[1,"",""],"_default":[0,"",""]};eb.optgroup=eb.option,eb.tbody=eb.tfoot=eb.colgroup=eb.caption=eb.thead,eb.th=eb.td,f.support.htmlSerialize||(eb._default=[1,"div
","
"]),f.fn.extend({"text":function(a){return f.isFunction(a)?this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))}):"object"!=typeof a&&a!==b?this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a)):f.text(this)},"wrapAll":function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},"wrapInner":function(a){return this.each(f.isFunction(a)?function(b){f(this).wrapInner(a.call(this,b))}:function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},"wrap":function(a){return this.each(function(){f(this).wrapAll(a)})},"unwrap":function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},"append":function(){return this.domManip(arguments,!0,function(a){1===this.nodeType&&this.appendChild(a)})},"prepend":function(){return this.domManip(arguments,!0,function(a){1===this.nodeType&&this.insertBefore(a,this.firstChild)})},"before":function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);return a.push.apply(a,this.toArray()),this.pushStack(a,"before",arguments)}},"after":function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);return a.push.apply(a,f(arguments[0]).toArray()),a}},"remove":function(a,b){for(var d,c=0;null!=(d=this[c]);c++)(!a||f.filter(a,[d]).length)&&(b||1!==d.nodeType||(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d));return this},"empty":function(){for(var b,a=0;null!=(b=this[a]);a++)for(1===b.nodeType&&f.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},"clone":function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return f.clone(this,a,b)})},"html":function(a){if(a===b)return this[0]&&1===this[0].nodeType?this[0].innerHTML.replace(W,""):null;if("string"!=typeof a||ab.test(a)||!f.support.leadingWhitespace&&X.test(a)||eb[(Z.exec(a)||["",""])[1].toLowerCase()])f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;d>c;c++)1===this[c].nodeType&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}return this},"replaceWith":function(a){return this[0]&&this[0].parentNode?f.isFunction(a)?this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))}):("string"!=typeof a&&(a=f(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})):this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},"detach":function(a){return this.remove(a,!0)},"domManip":function(a,c,d){var e,g,h,i,j=a[0],k=[]; + if(!f.support.checkClone&&3===arguments.length&&"string"==typeof j&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){if(i=j&&j.parentNode,e=f.support.parentNode&&i&&11===i.nodeType&&i.childNodes.length===this.length?{"fragment":i}:f.buildFragment(a,this,k),h=e.fragment,g=1===h.childNodes.length?h=h.firstChild:h.firstChild){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;m>l;l++)d.call(c?fb(this[l],g):this[l],e.cacheable||m>1&&n>l?f.clone(h,!0,!0):h)}k.length&&f.each(k,lb)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;return b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),1===a.length&&"string"==typeof a[0]&&a[0].length<512&&i===c&&"<"===a[0].charAt(0)&&!ab.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&1!==h&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1),{"fragment":e,"cacheable":g}},f.fragments={},f.each({"appendTo":"append","prependTo":"prepend","insertBefore":"before","insertAfter":"after","replaceAll":"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=1===this.length&&this[0].parentNode;if(g&&11===g.nodeType&&1===g.childNodes.length&&1===e.length)return e[b](this[0]),this;for(var h=0,i=e.length;i>h;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({"clone":function(a,b,c){var e,g,h,d=a.cloneNode(!0);if(!(f.support.noCloneEvent&&f.support.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||f.isXMLDoc(a)))for(hb(a,d),e=ib(a),g=ib(d),h=0;e[h];++h)g[h]&&hb(e[h],g[h]);if(b&&(gb(a,d),c))for(e=ib(a),g=ib(d),h=0;e[h];++h)gb(e[h],g[h]);return e=g=null,d},"clean":function(a,b,d,e){var g;b=b||c,"undefined"==typeof b.createElement&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var i,k,h=[],j=0;null!=(k=a[j]);j++)if("number"==typeof k&&(k+=""),k){if("string"==typeof k)if(_.test(k)){k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=eb[l]||eb._default,n=m[0],o=b.createElement("div");for(o.innerHTML=m[1]+k+m[2];n--;)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q="table"!==l||p?""!==m[1]||p?[]:o.childNodes:o.firstChild&&o.firstChild.childNodes;for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}else k=b.createTextNode(k);var r;if(!f.support.appendChecked)if(k[0]&&"number"==typeof(r=k.length))for(i=0;r>i;i++)kb(k[i]);else kb(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d)for(g=function(a){return!a.type||cb.test(a.type)},j=0;h[j];j++)if(!e||!f.nodeName(h[j],"script")||h[j].type&&"text/javascript"!==h[j].type.toLowerCase()){if(1===h[j].nodeType){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}else e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);return h},"cleanData":function(a){for(var b,c,j,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando,i=0;null!=(j=a[i]);i++)if((!j.nodeName||!f.noData[j.nodeName.toLowerCase()])&&(c=j[f.expando])){if(b=d[c]&&d[c][e],b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}});var vb,wb,xb,mb=/alpha\([^)]*\)/i,nb=/opacity=([^)]*)/,ob=/([A-Z]|^ms)/g,pb=/^-?\d+(?:px)?$/i,qb=/^-?\d/,rb=/^([\-+])=([\-+.\de]+)/,sb={"position":"absolute","visibility":"hidden","display":"block"},tb=["Left","Right"],ub=["Top","Bottom"];f.fn.css=function(a,c){return 2===arguments.length&&c===b?this:f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({"cssHooks":{"opacity":{"get":function(a,b){if(b){var c=vb(a,"opacity","opacity");return""===c?"1":c}return a.style.opacity}}},"cssNumber":{"fillOpacity":!0,"fontWeight":!0,"lineHeight":!0,"opacity":!0,"orphans":!0,"widows":!0,"zIndex":!0,"zoom":!0},"cssProps":{"float":f.support.cssFloat?"cssFloat":"styleFloat"},"style":function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];if(c=f.cssProps[i]||i,d===b)return k&&"get"in k&&(g=k.get(a,!1,e))!==b?g:j[c];if(h=typeof d,"string"===h&&(g=rb.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number"),!(null==d||"number"===h&&isNaN(d)||("number"!==h||f.cssNumber[i]||(d+="px"),k&&"set"in k&&(d=k.set(a,d))===b)))try{j[c]=d}catch(l){}}},"css":function(a,c,d){var e,g;return c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,"cssFloat"===c&&(c="float"),g&&"get"in g&&(e=g.get(a,!0,d))!==b?e:vb?vb(a,c):void 0},"swap":function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={"get":function(a,c,d){var e;return c?0!==a.offsetWidth?yb(a,b,d):(f.swap(a,sb,function(){e=yb(a,b,d)}),e):void 0},"set":function(a,b){return pb.test(b)?(b=parseFloat(b),b>=0?b+"px":void 0):b}}}),f.support.opacity||(f.cssHooks.opacity={"get":function(a,b){return nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},"set":function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+100*b+")",g=d&&d.filter||c.filter||"";c.zoom=1,b>=1&&""===f.trim(g.replace(mb,""))&&(c.removeAttribute("filter"),d&&!d.filter)||(c.filter=mb.test(g)?g.replace(mb,e):g+" "+e)}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={"get":function(a,b){var c;return f.swap(a,{"display":"inline-block"},function(){c=b?vb(a,"margin-right","marginRight"):a.style.marginRight}),c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(wb=function(a,c){var d,e,g;return c=c.replace(ob,"-$1").toLowerCase(),(e=a.ownerDocument.defaultView)?((g=e.getComputedStyle(a,null))&&(d=g.getPropertyValue(c),""!==d||f.contains(a.ownerDocument.documentElement,a)||(d=f.style(a,c))),d):b}),c.documentElement.currentStyle&&(xb=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;return!pb.test(d)&&qb.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left="fontSize"===b?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e)),""===d?"auto":d}),vb=wb||xb,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return 0===b&&0===c||!f.support.reliableHiddenOffsets&&"none"===(a.style.display||f.css(a,"display"))},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var Rb,Sb,zb=/%20/g,Ab=/\[\]$/,Bb=/\r?\n/g,Cb=/#.*$/,Db=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Eb=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,Fb=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib=/\?/,Jb=/)<[^<]*)*<\/script>/gi,Kb=/^(?:select|textarea)/i,Lb=/\s+/,Mb=/([?&])_=[^&]*/,Nb=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,Ob=f.fn.load,Pb={},Qb={},Tb=["*/"]+["*"];try{Rb=e.href}catch(Ub){Rb=c.createElement("a"),Rb.href="",Rb=Rb.href}Sb=Nb.exec(Rb.toLowerCase())||[],f.fn.extend({"load":function(a,c,d){if("string"!=typeof a&&Ob)return Ob.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):"object"==typeof c&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;return f.ajax({"url":a,"type":h,"dataType":"html","data":c,"complete":function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(Jb,"")).find(g):c)),d&&i.each(d,[c,b,a])}}),this},"serialize":function(){return f.param(this.serializeArray())},"serializeArray":function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||Kb.test(this.nodeName)||Eb.test(this.type))}).map(function(a,b){var c=f(this).val();return null==c?null:f.isArray(c)?f.map(c,function(a){return{"name":b.name,"value":a.replace(Bb,"\r\n")}}):{"name":b.name,"value":c.replace(Bb,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){return f.isFunction(d)&&(g=g||e,e=d,d=b),f.ajax({"type":c,"url":a,"data":d,"success":e,"dataType":g})}}),f.extend({"getScript":function(a,c){return f.get(a,b,c,"script")},"getJSON":function(a,b,c){return f.get(a,b,c,"json")},"ajaxSetup":function(a,b){return b?Xb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),Xb(a,b),a},"ajaxSettings":{"url":Rb,"isLocal":Fb.test(Sb[1]),"global":!0,"type":"GET","contentType":"application/x-www-form-urlencoded","processData":!0,"async":!0,"accepts":{"xml":"application/xml, text/xml","html":"text/html","text":"text/plain","json":"application/json, text/javascript","*":Tb},"contents":{"xml":/xml/,"html":/html/,"json":/json/},"responseFields":{"xml":"responseXML","text":"responseText"},"converters":{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},"flatOptions":{"context":!0,"url":!0}},"ajaxPrefilter":Vb(Pb),"ajaxTransport":Vb(Qb),"ajax":function(a,c){function w(a,c,l,m){if(2!==s){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,y,z,w=c,x=l?Zb(d,v,l):b;if(a>=200&&300>a||304===a)if(d.ifModified&&((y=v.getResponseHeader("Last-Modified"))&&(f.lastModified[k]=y),(z=v.getResponseHeader("Etag"))&&(f.etag[k]=z)),304===a)w="notmodified",o=!0;else try{r=$b(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}else u=w,(!w||a)&&(w="error",0>a&&(a=0));v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}"object"==typeof a&&(c=a,a=b),c=c||{};var k,n,o,p,q,r,t,u,d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},l={},m={},s=0,v={"readyState":0,"setRequestHeader":function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},"getAllResponseHeaders":function(){return 2===s?n:null},"getResponseHeader":function(a){var c;if(2===s){if(!o)for(o={};c=Db.exec(n);)o[c[1].toLowerCase()]=c[2];c=o[a.toLowerCase()]}return c===b?null:c},"overrideMimeType":function(a){return s||(d.mimeType=a),this},"abort":function(a){return a=a||"abort",p&&p.abort(a),w(0,a),this}};if(h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(2>s)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(Cb,"").replace(Hb,Sb[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(Lb),null==d.crossDomain&&(r=Nb.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==Sb[1]&&r[2]==Sb[2]&&(r[3]||("http:"===r[1]?80:443))==(Sb[3]||("http:"===Sb[1]?80:443)))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=f.param(d.data,d.traditional)),Wb(Pb,d,c,v),2===s)return!1;if(t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!Gb.test(d.type),t&&0===f.active++&&f.event.trigger("ajaxStart"),!d.hasContent&&(d.data&&(d.url+=(Ib.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url,d.cache===!1)){var x=f.now(),y=d.url.replace(Mb,"$1_="+x);d.url=y+(y===d.url?(Ib.test(d.url)?"&":"?")+"_="+x:"")}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Tb+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||2===s))return v.abort(),!1;for(u in{"success":1,"error":1,"complete":1})v[u](d[u]);if(p=Wb(Qb,d,c,v)){v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){2>s?w(-1,z):f.error(z)}}else w(-1,"No Transport");return v},"param":function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(c===b&&(c=f.ajaxSettings.traditional),f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)Yb(g,a[g],c,e);return d.join("&").replace(zb,"+")}}),f.extend({"active":0,"lastModified":{},"etag":{}});var ac=(f.now(),/(\=)\?(&|$)|\?\?/i);f.ajaxSetup({"jsonp":"callback","jsonpCallback":function(){return"jQuery"+Math.floor(1e7*Math.random())}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e="application/x-www-form-urlencoded"===b.contentType&&"string"==typeof b.data;if("jsonp"===b.dataTypes[0]||b.jsonp!==!1&&(ac.test(b.url)||e&&ac.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";return b.jsonp!==!1&&(j=j.replace(ac,l),b.url===j&&(e&&(k=k.replace(ac,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){return g||f.error(h+" was not called"),g[0]},b.dataTypes[0]="json","script"}}),f.ajaxSetup({"accepts":{"script":"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},"contents":{"script":/javascript|ecmascript/},"converters":{"text script":function(a){return f.globalEval(a),a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{"send":function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){(c||!d.readyState||/loaded|complete/.test(d.readyState))&&(d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success"))},e.insertBefore(d,e.firstChild)},"abort":function(){d&&d.onload(0,1)}}}});var dc,bc=a.ActiveXObject?function(){for(var a in dc)dc[a](0,1)}:!1,cc=0;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ec()||fc()}:ec,function(a){f.extend(f.support,{"ajax":!!a,"cors":!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{"send":function(e,g){var i,j,h=c.xhr();if(c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async),c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),c.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||4===h.readyState))if(d=b,i&&(h.onreadystatechange=f.noop,bc&&delete dc[i]),e)4!==h.readyState&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}j||!c.isLocal||c.crossDomain?1223===j&&(j=204):j=m.text?200:404}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},c.async&&4!==h.readyState?(i=++cc,bc&&(dc||(dc={},f(a).unload(bc)),dc[i]=d),h.onreadystatechange=d):d()},"abort":function(){d&&d(0,1)}}}});var hc,ic,lc,nc,gc={},jc=/^(?:toggle|show|hide)$/,kc=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,mc=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];f.fn.extend({"show":function(a,b,c){var d,e;if(a||0===a)return this.animate(qc("show",3),a,b,c);for(var g=0,h=this.length;h>g;g++)d=this[g],d.style&&(e=d.style.display,f._data(d,"olddisplay")||"none"!==e||(e=d.style.display=""),""===e&&"none"===f.css(d,"display")&&f._data(d,"olddisplay",rc(d.nodeName)));for(g=0;h>g;g++)d=this[g],d.style&&(e=d.style.display,(""===e||"none"===e)&&(d.style.display=f._data(d,"olddisplay")||""));return this},"hide":function(a,b,c){if(a||0===a)return this.animate(qc("hide",3),a,b,c);for(var d=0,e=this.length;e>d;d++)if(this[d].style){var g=f.css(this[d],"display");"none"===g||f._data(this[d],"olddisplay")||f._data(this[d],"olddisplay",g)}for(d=0;e>d;d++)this[d].style&&(this[d].style.display="none");return this},"_toggle":f.fn.toggle,"toggle":function(a,b,c){var d="boolean"==typeof a;return f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):null==a||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(qc("toggle",3),a,b,c),this},"fadeTo":function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({"opacity":b},a,c,d)},"animate":function(a,b,c,d){var e=f.speed(b,c,d);return f.isEmptyObject(a)?this.each(e.complete,[!1]):(a=f.extend({},a),this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var g,h,i,j,k,l,m,n,o,b=f.extend({},e),c=1===this.nodeType,d=c&&f(this).is(":hidden");b.animatedProperties={};for(i in a){if(g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing","hide"===h&&d||"show"===h&&!d)return b.complete.call(this);!c||"height"!==g&&"width"!==g||(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],"inline"===f.css(this,"display")&&"none"===f.css(this,"float")&&(f.support.inlineBlockNeedsLayout?(j=rc(this.nodeName),"inline"===j?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}null!=b.overflow&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],jc.test(h)?k["toggle"===h?d?"show":"hide":h]():(l=kc.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),"px"!==o&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=("-="===l[1]?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0}))},"stop":function(a,b){return a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;for(b||f._unmark(!0,this);c--;)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue(),this}}),f.each({"slideDown":qc("show",1),"slideUp":qc("hide",1),"slideToggle":qc("toggle",1),"fadeIn":{"opacity":"show"},"fadeOut":{"opacity":"hide"},"fadeToggle":{"opacity":"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({"speed":function(a,b,c){var d=a&&"object"==typeof a?f.extend({},a):{"complete":c||!c&&b||f.isFunction(a)&&a,"duration":a,"easing":c&&b||b&&!f.isFunction(b)&&b};return d.duration=f.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)},d},"easing":{"linear":function(a,b,c,d){return c+d*a},"swing":function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},"timers":[],"fx":function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={"update":function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},"cur":function(){if(null!=this.elem[this.prop]&&(!this.elem.style||null==this.elem.style[this.prop]))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?b&&"auto"!==b?b:0:a},"custom":function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=nc||oc(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!lc&&(lc=setInterval(e.tick,e.interval))},"show":function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom("width"===this.prop||"height"===this.prop?1:0,this.cur()),f(this.elem).show()},"hide":function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},"step":function(a){var g,h,b=nc||oc(),c=!0,d=this.elem,e=this.options;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){if(null==e.overflow||f.support.shrinkWrapBlocks||f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide(),e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}return 1/0==e.duration?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update(),!0}},f.extend(f.fx,{"tick":function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{"position":"absolute","top":0,"left":0,"margin":0,"border":0,"width":"1px","height":"1px","visibility":"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=5!==e.offsetTop,this.doesAddBorderForTableAndCells=5===h.offsetTop,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=20===e.offsetTop||15===e.offsetTop,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=-5===e.offsetTop,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},"bodyOffset":function(a){var b=a.offsetTop,c=a.offsetLeft;return f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0),{"top":b,"left":c}},"setOffset":function(a,b,c){var d=f.css(a,"position");"static"===d&&(a.style.position="relative");var m,n,e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=("absolute"===d||"fixed"===d)&&f.inArray("auto",[h,i])>-1,k={},l={};j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),null!=b.top&&(k.top=b.top-g.top+m),null!=b.left&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({"position":function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=tc.test(b[0].nodeName)?{"top":0,"left":0}:b.offset();return c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0,{"top":c.top-d.top,"left":c.left-d.left}},"offsetParent":function(){return this.map(function(){for(var a=this.offsetParent||c.body;a&&!tc.test(a.nodeName)&&"static"===f.css(a,"position");)a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;return c===b?(e=this[0])?(g=uc(e),g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]):null:this.each(function(){g=uc(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return null==a?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return"CSS1Compat"===e.document.compatMode&&g||h&&h["client"+c]||g}if(9===e.nodeType)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,"string"==typeof a?a:a+"px")}}),a.jQuery=a.$=f}(window); diff --git a/demo-web/src/main/resources/templates/demo.html b/demo-web/src/main/resources/templates/demo.html new file mode 100644 index 0000000000000000000000000000000000000000..a7a7caa9b105ae91add08683f14cc6c62359df4c --- /dev/null +++ b/demo-web/src/main/resources/templates/demo.html @@ -0,0 +1,85 @@ + + + + + + demo页面 + + + + + +
+
+
支付宝即时到账交易接口快速通道
+
+
+
商户订单号:
+
+
+
注意:商户订单号(out_trade_no).必填(建议是英文字母和数字,不能含有特殊字符)
+
+ +
+
商品名称:
+
+
+
注意:产品名称(subject),必填(建议中文,英文,数字,不能含有特殊字符)
+
+
+
付款金额:
+
+
+
注意:付款金额(total_fee),必填(格式如:1.00,请精确到分)
+
+
+
商品描述:
+
+
+
注意:商品描述(body),选填(建议中文,英文,数字,不能含有特殊字符)
+
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/demo-web/src/test/java/com/tenga/demo/DemoWebApplicationTests.java b/demo-web/src/test/java/com/tenga/demo/DemoWebApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..30f1297e843978721278c20e7345c328f6ee8c1c --- /dev/null +++ b/demo-web/src/test/java/com/tenga/demo/DemoWebApplicationTests.java @@ -0,0 +1,16 @@ +package com.tenga.demo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class DemoWebApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/lib/alipay-sdk-java20171026141113-source.jar b/lib/alipay-sdk-java20171026141113-source.jar new file mode 100644 index 0000000000000000000000000000000000000000..91c6c59807795b67b9ef1e52f2c92232bcc6083f Binary files /dev/null and b/lib/alipay-sdk-java20171026141113-source.jar differ diff --git a/lib/alipay-sdk-java20171026141113.jar b/lib/alipay-sdk-java20171026141113.jar new file mode 100644 index 0000000000000000000000000000000000000000..f63e8d542095a2bcc089c78d7256b1a9fcb0c837 Binary files /dev/null and b/lib/alipay-sdk-java20171026141113.jar differ diff --git a/pom.xml b/pom.xml index 33fbdbd471206a2610ce5bedc900456905d8e616..22eb8f799899cf37b462b6cb8efb24641ce12819 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,10 @@ xbin-store-service-order-api xbin-store-service-order xbin-store-web-order + + + + @@ -476,11 +480,11 @@ ${lombok.version} provided - - - - - + + com.ctrip.framework.apollo + apollo-client + ${apollo.version} + diff --git a/xbin-store-common-mapper/pom.xml b/xbin-store-common-mapper/pom.xml index 27b3e37f848475a3a4d89d2df3371af887e1b913..4d58f689a348a78926a2bb467459746ae0b7c668 100644 --- a/xbin-store-common-mapper/pom.xml +++ b/xbin-store-common-mapper/pom.xml @@ -41,6 +41,10 @@ 1.1.0 + + + + cn.binux spring-boot-starter-druid diff --git a/xbin-store-common-mapper/src/main/java/cn/binux/mapper/TbPayInfoMapper.java b/xbin-store-common-mapper/src/main/java/cn/binux/mapper/TbPayInfoMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..60868be6a30652260306f7e9ba9e3d89a3b7ddeb --- /dev/null +++ b/xbin-store-common-mapper/src/main/java/cn/binux/mapper/TbPayInfoMapper.java @@ -0,0 +1,20 @@ +package cn.binux.mapper; + +import cn.binux.pojo.TbPayInfo; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface TbPayInfoMapper { + //插入支付流水 + public int insertPayinfo(TbPayInfo payInfo) throws Exception; + //删除支付流水 + public int deleteByPrimaryKey(int id); +// List selectByExample(TbOrderExample example); + TbPayInfo selectByPrimaryKey(int id); + + List selectByUser(TbPayInfo payInfo); +// public List selectByUserId(String userId); +// public TbPayInfo selectBy + +} diff --git a/xbin-store-common-mapper/src/main/java/cn/binux/mapper/TbPayInfoMapper.xml b/xbin-store-common-mapper/src/main/java/cn/binux/mapper/TbPayInfoMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..4b254243c3fca8525a9684be808bbeec42f07168 --- /dev/null +++ b/xbin-store-common-mapper/src/main/java/cn/binux/mapper/TbPayInfoMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + id, user_id, payer_id, order_id, pay_platform, pay_type, platform_number, + platform_status, qr_code, create_time, update_time + + + INSERT INTO tb_pay_info(user_id,payer_id,order_id, pay_platform,pay_type, + platform_number,platform_status,create_time,update_time) + VALUES(#{user_id}, #{payer_id}, #{order_id}, #{pay_platform}, #{pay_type}, + #{platform_number},#{platform_status},#{create_time},#{update_time}) + + + DELETE from tb_pay_info + WHERE id=#{id}; + + + + + \ No newline at end of file diff --git a/xbin-store-common-pojo/src/main/java/cn/binux/pojo/TbPayInfo.java b/xbin-store-common-pojo/src/main/java/cn/binux/pojo/TbPayInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..1a19f05bbb8dd2b26a1503fa28ae1e22743e502c --- /dev/null +++ b/xbin-store-common-pojo/src/main/java/cn/binux/pojo/TbPayInfo.java @@ -0,0 +1,20 @@ +package cn.binux.pojo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class TbPayInfo { + private String id; + private String user_id; + private String payer_id; + private String order_id; + private String qr_code; + private String platform_number; + private String platform_status; + private Integer pay_platform; + private Integer pay_type; + private Date create_time; + private Date update_time; +} diff --git a/xbin-store-common/pom.xml b/xbin-store-common/pom.xml index afeb4c595ff2265d6bef92e27ab2e1805e68ed61..3b6fecada9ee6e1251519e0eaf85fb19c669ae0a 100644 --- a/xbin-store-common/pom.xml +++ b/xbin-store-common/pom.xml @@ -63,11 +63,11 @@ junit junit - - - org.slf4j - slf4j-log4j12 - + + + + + @@ -83,6 +83,10 @@ cn.binux spring-boot-starter-dubbox + + com.alibaba + dubbo + org.apache.tomcat.embed tomcat-embed-core @@ -220,10 +224,28 @@ commons-lang 2.6 + + org.springframework + spring-beans + 4.3.13.RELEASE + + + + redis.clients + jedis + + + mysql + mysql-connector-java + + + org.apache.commons + commons-pool2 + diff --git a/xbin-store-common/src/main/java/cn/binux/constant/Const.java b/xbin-store-common/src/main/java/cn/binux/constant/Const.java index a7a1a5b665a085d83289b1488313e36ebbc68f2c..683a37b9ece3fceeb3988c9823c35b134a27bc63 100644 --- a/xbin-store-common/src/main/java/cn/binux/constant/Const.java +++ b/xbin-store-common/src/main/java/cn/binux/constant/Const.java @@ -95,5 +95,5 @@ public final class Const { public static final String XBIN_STORE_ORDER_VERSION = "1.0.0"; public static final String XBIN_STORE_CART_VERSION = "1.0.0"; public static final String XBIN_STORE_ITEM_VERSION = "1.0.0"; - + public static final String XBIN_STORE_PAY_VERSION ="1.0.0"; } diff --git a/xbin-store-service-admin/pom.xml b/xbin-store-service-admin/pom.xml index ef2fcc25c95c08e0f20f760a656f1554be3bf6c7..4238909cc42af419c8d565c2ae1c3fc55cdaca65 100644 --- a/xbin-store-service-admin/pom.xml +++ b/xbin-store-service-admin/pom.xml @@ -70,7 +70,10 @@ - + + com.alibaba + druid + diff --git a/xbin-store-service-admin/src/main/java/cn/binux/XbinStoreServiceAdminApplication.java b/xbin-store-service-admin/src/main/java/cn/binux/XbinStoreServiceAdminApplication.java index f9a3fe4f9873556c52382099f2cc3f6d8298b0f0..8c97fabceb5da7cb637dd1c1f26eab4709e921fd 100644 --- a/xbin-store-service-admin/src/main/java/cn/binux/XbinStoreServiceAdminApplication.java +++ b/xbin-store-service-admin/src/main/java/cn/binux/XbinStoreServiceAdminApplication.java @@ -1,16 +1,17 @@ package cn.binux; import com.alibaba.dubbo.container.Main; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableTransactionManagement @MapperScan(basePackages = "cn.binux.mapper") public class XbinStoreServiceAdminApplication { diff --git a/xbin-store-service-admin/src/main/resources/application-dev.yml b/xbin-store-service-admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..6e2f20274dde7243e125dbce1b0e8e745cbc0a3b --- /dev/null +++ b/xbin-store-service-admin/src/main/resources/application-dev.yml @@ -0,0 +1,82 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-admin + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.admin + protocol: + name: dubbo + port: 20880 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 1800 + prefix: + # 首页广告 + index_ad: 'INDEX_AD' +server: + port: 8510 + +storage: + type: fastdfs + fastdfs: + tracker_server: 192.168.125.129:22122 + \ No newline at end of file diff --git a/xbin-store-service-admin/src/main/resources/application.yml b/xbin-store-service-admin/src/main/resources/application.yml index 1ae6747c121078b49bad437c8bc951a012a403ec..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-admin/src/main/resources/application.yml +++ b/xbin-store-service-admin/src/main/resources/application.yml @@ -1,82 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-admin - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.admin - protocol: - name: dubbo - port: 20880 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -# Redis -redisKey: - # 缓存时间 默认半小时 - expire_time: 1800 - prefix: - # 首页广告 - index_ad: 'INDEX_AD' -server: - port: 8510 - -storage: - type: fastdfs - fastdfs: - tracker_server: 192.168.125.129:22122 - \ No newline at end of file +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-cart/pom.xml b/xbin-store-service-cart/pom.xml index 0df2827b5ec742434499971000f979371ac26e16..97f118bbdcfb8b79b3030185423b43b61774b6a1 100644 --- a/xbin-store-service-cart/pom.xml +++ b/xbin-store-service-cart/pom.xml @@ -69,33 +69,36 @@ - + + com.alibaba + druid + - - - - - - - + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + + - - - - - - - - - - - - - - + + com.spotify + docker-maven-plugin + + ${project.artifactId} + ${project.basedir}/docker + + + / + ${project.build.directory} + ${project.build.finalName}.jar + + + @@ -127,7 +130,7 @@ - + diff --git a/xbin-store-service-cart/src/main/java/cn/binux/XbinStoreServiceCartApplication.java b/xbin-store-service-cart/src/main/java/cn/binux/XbinStoreServiceCartApplication.java index 2b84d489cd7e654d28b75de54360dcd54bc2a20b..a851c6368b8124691e6f8fb1da2d84ed476ee221 100644 --- a/xbin-store-service-cart/src/main/java/cn/binux/XbinStoreServiceCartApplication.java +++ b/xbin-store-service-cart/src/main/java/cn/binux/XbinStoreServiceCartApplication.java @@ -1,15 +1,16 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableTransactionManagement @MapperScan(basePackages = "cn.binux.mapper") public class XbinStoreServiceCartApplication { diff --git a/xbin-store-service-cart/src/main/resources/application-dev.yml b/xbin-store-service-cart/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..5477674e4c416e206566c0c2d7bc3feee86d5155 --- /dev/null +++ b/xbin-store-service-cart/src/main/resources/application-dev.yml @@ -0,0 +1,98 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-cart + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.cart + protocol: + name: dubbo + port: 20887 + host: 127.0.0.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 1800 + prefix: +# 购物车 + cart_info_profix: 'CART_INFO:' +# 商品 + item_info_profix: 'ITEM_INFO:' + item_info_base_suffix: ':BASE' + item_info_desc_suffix: ':DESC' + # Redis 缓存时间 默认3天 + redis_cart_expire_time: 259200 + + +login: + # 验证名 + validation: + #登录名 + ispinengaged: isPinEngaged + #邮箱 + isemailengaged: isEmailEngaged + #手机 + ismobileengaged: isMobileEngaged + # 推荐登录名后缀随机数取值范围 + random_number: 50000 + # 登录成功页面 + success_url: http://localhost:8104/success + +server: + port: 8517 diff --git a/xbin-store-service-cart/src/main/resources/application.yml b/xbin-store-service-cart/src/main/resources/application.yml index 32fc9a097efac2d41bf4eb384368d2eed05fabb7..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-cart/src/main/resources/application.yml +++ b/xbin-store-service-cart/src/main/resources/application.yml @@ -1,98 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-cart - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.cart - protocol: - name: dubbo - port: 20887 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -# Redis -redisKey: - # 缓存时间 默认半小时 - expire_time: 1800 - prefix: -# 购物车 - cart_info_profix: 'CART_INFO:' -# 商品 - item_info_profix: 'ITEM_INFO:' - item_info_base_suffix: ':BASE' - item_info_desc_suffix: ':DESC' - # Redis 缓存时间 默认3天 - redis_cart_expire_time: 259200 - - -login: - # 验证名 - validation: - #登录名 - ispinengaged: isPinEngaged - #邮箱 - isemailengaged: isEmailEngaged - #手机 - ismobileengaged: isMobileEngaged - # 推荐登录名后缀随机数取值范围 - random_number: 50000 - # 登录成功页面 - success_url: http://localhost:8104/success - -server: - port: 8517 +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-item/pom.xml b/xbin-store-service-item/pom.xml index b8907ed6e9ca7035c86d94bf6ce2ab2903ac7444..ea7173efe1cc75353ca4a7a826ba8e4d769608c9 100644 --- a/xbin-store-service-item/pom.xml +++ b/xbin-store-service-item/pom.xml @@ -78,6 +78,10 @@ org.freemarker freemarker + + com.alibaba + druid + diff --git a/xbin-store-service-item/src/main/java/cn/binux/XbinStoreServiceItemApplication.java b/xbin-store-service-item/src/main/java/cn/binux/XbinStoreServiceItemApplication.java index 874329bd158296b2eb76716160f6625dc8a5f95a..33c589334f8b053a416a29097451d6d92bd81dd7 100644 --- a/xbin-store-service-item/src/main/java/cn/binux/XbinStoreServiceItemApplication.java +++ b/xbin-store-service-item/src/main/java/cn/binux/XbinStoreServiceItemApplication.java @@ -1,15 +1,16 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableTransactionManagement @MapperScan(basePackages = "cn.binux.mapper") public class XbinStoreServiceItemApplication { diff --git a/xbin-store-service-item/src/main/resources/application-dev.yml b/xbin-store-service-item/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..dbda36bdf63dad6ce8232d6d4976fc4e363fc133 --- /dev/null +++ b/xbin-store-service-item/src/main/resources/application-dev.yml @@ -0,0 +1,83 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-item + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.item + protocol: + name: dubbo + port: 20884 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 1800 + prefix: + item_info_profix: 'ITEM_INFO:' + suffix: + item_info_base_suffix: ':BASE' + item_info_desc_suffix: ':DESC' + + +# 静态页面生成目录 +static_html_path: /Volumes/HGST/IdeaProjects/xbin-store/xbin-store-service-item/item/ + +server: + port: 8514 diff --git a/xbin-store-service-item/src/main/resources/application.yml b/xbin-store-service-item/src/main/resources/application.yml index abd444d5b8aa315a2e7d16334916449d998aa6c7..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-item/src/main/resources/application.yml +++ b/xbin-store-service-item/src/main/resources/application.yml @@ -1,83 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-item - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.item - protocol: - name: dubbo - port: 20884 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -# Redis -redisKey: - # 缓存时间 默认半小时 - expire_time: 1800 - prefix: - item_info_profix: 'ITEM_INFO:' - suffix: - item_info_base_suffix: ':BASE' - item_info_desc_suffix: ':DESC' - - -# 静态页面生成目录 -static_html_path: /Volumes/HGST/IdeaProjects/xbin-store/xbin-store-service-item/item/ - -server: - port: 8514 +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-notify/pom.xml b/xbin-store-service-notify/pom.xml index 92b724de820ef9a9d2934c6a3a0a20e1ab151118..42830ab6922fe44f53b7169fa3d1363c0c900494 100644 --- a/xbin-store-service-notify/pom.xml +++ b/xbin-store-service-notify/pom.xml @@ -57,8 +57,20 @@ xbin-store-service-redis-api 1.0-SNAPSHOT - - + + org.springframework.boot + spring-boot + + + org.springframework.boot + spring-boot-autoconfigure + + + cn.binux + xbin-store-common-mapper + 1.0-SNAPSHOT + + diff --git a/xbin-store-service-notify/src/main/java/cn/binux/XbinStoreServiceNotifyApplication.java b/xbin-store-service-notify/src/main/java/cn/binux/XbinStoreServiceNotifyApplication.java index 95b7f4fe8278f5546491d6d6076692a909da5151..7d9d1860e4524b047b30b6c8c71e64409fb86141 100644 --- a/xbin-store-service-notify/src/main/java/cn/binux/XbinStoreServiceNotifyApplication.java +++ b/xbin-store-service-notify/src/main/java/cn/binux/XbinStoreServiceNotifyApplication.java @@ -1,13 +1,14 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class XbinStoreServiceNotifyApplication { public static void main(String[] args) { diff --git a/xbin-store-service-notify/src/main/resources/application-dev.yml b/xbin-store-service-notify/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..a40cbbf1d6f747830c8bfc521e12f16cef3b13ab --- /dev/null +++ b/xbin-store-service-notify/src/main/resources/application-dev.yml @@ -0,0 +1,46 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-notify + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.notify + protocol: + name: dubbo + port: 20886 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 3600 + prefix: + # 号码登录次数前缀 + mobile_login_time: + key: 'MOBILE_LOGIN_TIME:' + expire_time: 3600 + # 号码code前缀 + mobile_login_code: + key: 'MOBILE_LOGIN_CODE:' + expire_time: 120 + +# Redis 一段时间允许发送几条短信 +mobile_number_ceiling: 3 + +server: + port: 8516 diff --git a/xbin-store-service-notify/src/main/resources/application.yml b/xbin-store-service-notify/src/main/resources/application.yml index 310391395fe3213ea1b583db277c05ef6d3fc82c..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-notify/src/main/resources/application.yml +++ b/xbin-store-service-notify/src/main/resources/application.yml @@ -1,46 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-notify - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.notify - protocol: - name: dubbo - port: 20886 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -# Redis -redisKey: - # 缓存时间 默认半小时 - expire_time: 3600 - prefix: - # 号码登录次数前缀 - mobile_login_time: - key: 'MOBILE_LOGIN_TIME:' - expire_time: 3600 - # 号码code前缀 - mobile_login_code: - key: 'MOBILE_LOGIN_CODE:' - expire_time: 120 - -# Redis 一段时间允许发送几条短信 -mobile_number_ceiling: 3 - -server: - port: 8516 +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-order-api/src/main/java/cn/binux/order/service/OrderService.java b/xbin-store-service-order-api/src/main/java/cn/binux/order/service/OrderService.java index 3ffb15a3023a329b8cfa1c6a6457f3ce34a99bec..7ff2711a1ab09f7b81af37355d57363460b06368 100644 --- a/xbin-store-service-order-api/src/main/java/cn/binux/order/service/OrderService.java +++ b/xbin-store-service-order-api/src/main/java/cn/binux/order/service/OrderService.java @@ -3,9 +3,12 @@ package cn.binux.order.service; import cn.binux.pojo.XbinResult; +import java.util.Map; + /** * @author xubin. * @create 2017-02-28 下午9:04 + * @ */ public interface OrderService { @@ -21,4 +24,8 @@ public interface OrderService { * @return */ XbinResult generateOrder(String userCookieValue, String cartCookieValue, Integer addrId, Integer noAnnoyance, Integer paymentType, String orderId, String shippingName); + XbinResult pay(String userCookieValue,String orderId,int type); +// XbinResult Callback(Map params); +// XbinResult queryOrderPayStatus(Integer userId,Long orderNo); +// XbinResult cancel(Integer userId,Long orderNo); } diff --git a/xbin-store-service-order/pom.xml b/xbin-store-service-order/pom.xml index 40edf07f486febef79f2d407109b8714bc3005ec..ef1d6afc700a9ec8dcf283fded6cc3dbfe284443 100644 --- a/xbin-store-service-order/pom.xml +++ b/xbin-store-service-order/pom.xml @@ -49,7 +49,7 @@ org.apache.activemq - activemq-all + activemq-pool cn.binux @@ -66,6 +66,11 @@ xbin-store-service-sso-api 1.0-SNAPSHOT + + cn.binux + xbin-store-service-pay-api + 1.0-SNAPSHOT + cn.binux xbin-store-common-mapper @@ -82,6 +87,14 @@ org.freemarker freemarker + + com.alibaba + druid + + + cn.binux + spring-boot-starter-druid + diff --git a/xbin-store-service-order/src/main/java/cn/binux/XbinStoreServiceOrderApplication.java b/xbin-store-service-order/src/main/java/cn/binux/XbinStoreServiceOrderApplication.java index 2eaaccff56f1ab8a807aba1088624ddfbc704a00..8243e02678069522c2b20efcb95cf8f6c54525cd 100644 --- a/xbin-store-service-order/src/main/java/cn/binux/XbinStoreServiceOrderApplication.java +++ b/xbin-store-service-order/src/main/java/cn/binux/XbinStoreServiceOrderApplication.java @@ -1,15 +1,16 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableTransactionManagement @MapperScan(basePackages = "cn.binux.mapper") public class XbinStoreServiceOrderApplication { diff --git a/xbin-store-service-order/src/main/java/cn/binux/order/service/impl/OrderServiceImpl.java b/xbin-store-service-order/src/main/java/cn/binux/order/service/impl/OrderServiceImpl.java index 3d8a3eea0364a8594fe03398d79507955d62b2b4..ff4e3a0b53d85bbc815c4cc1887ee59d4c2f5d80 100644 --- a/xbin-store-service-order/src/main/java/cn/binux/order/service/impl/OrderServiceImpl.java +++ b/xbin-store-service-order/src/main/java/cn/binux/order/service/impl/OrderServiceImpl.java @@ -4,6 +4,7 @@ import cn.binux.constant.Const; import cn.binux.mapper.TbOrderItemMapper; import cn.binux.mapper.TbOrderMapper; import cn.binux.order.service.OrderService; +import cn.binux.pay.service.PayService; import cn.binux.pojo.*; import cn.binux.redis.service.JedisClient; import cn.binux.sso.service.UserService; @@ -18,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -40,6 +42,9 @@ public class OrderServiceImpl implements OrderService { @Reference(version = Const.XBIN_STORE_REDIS_VERSION) private JedisClient jedisClient; + @Reference(version = Const.XBIN_STORE_PAY_VERSION,check = false) + private PayService payService; + @Autowired private TbOrderItemMapper orderItemMapper; @@ -60,15 +65,12 @@ public class OrderServiceImpl implements OrderService { private String CART_INFO_PROFIX; @Override - public XbinResult generateOrder(String userCookieValue, String cartCookieValue, Integer addrId, Integer noAnnoyance, Integer paymentType, String orderId, String shippingName) { - - - XbinResult result = userService.token(userCookieValue, ""); + public XbinResult generateOrder(String userCookieValue, String cartCookieValue, Integer addrId, Integer noAnnoyance, Integer paymentType, String orderId, String shippingName){ + XbinResult result = userService.token(userCookieValue, ""); if (result.getData() == null) { logger.error("用户没有登录!"); return XbinResult.build(400, "系统错误!"); } - String data = (String) result.getData(); TbUser user = FastJsonConvert.convertJSONToObject(data, TbUser.class); @@ -81,7 +83,6 @@ public class OrderServiceImpl implements OrderService { String key3 = CART_INFO_PROFIX + cartCookieValue; orderId = paymentType.toString() + orderId + userId; - final TbOrder order = new TbOrder(); //设置订单id order.setOrderId(orderId); @@ -149,6 +150,7 @@ public class OrderServiceImpl implements OrderService { orderItem.setTotalFee(cartInfo.getSum()); orderItem.setWeights(cartInfo.getWeight() + ""); // 记录日志 + System.out.println(orderItem.toString()); orderItemMapper.insert(orderItem); logger.info("保存订单项,订单:" + orderItem.toString()); @@ -199,4 +201,11 @@ public class OrderServiceImpl implements OrderService { return null; } + + @Override + public XbinResult pay(String userCookieValue, String orderId,int type) { + TbOrder tbOrder=orderMapper.selectByPrimaryKey(orderId); + XbinResult result=payService.doPay(tbOrder); + return result; + } } diff --git a/xbin-store-service-order/src/main/resources/application-dev.yml b/xbin-store-service-order/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..0017bf5a206d5be4c1fe1a0ad1dbbec496446911 --- /dev/null +++ b/xbin-store-service-order/src/main/resources/application-dev.yml @@ -0,0 +1,78 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-order + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181?backup=192.168.237.128:22181 + annotation: + package: cn.binux.order + protocol: + name: dubbo + port: 20888 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Redis +redisKey: + # 缓存时间 一天 + expire_time: 86400 + prefix: + cart_info_profix: 'CART_INFO:' + cart_order_info_profix: 'CART_ORDER_INFO:' + cart_order_index_profix: 'CART_ORDER_INDEX:' +server: + port: 8518 + diff --git a/xbin-store-service-order/src/main/resources/application.yml b/xbin-store-service-order/src/main/resources/application.yml index 7103dd3aaf592215601c23561da879b8cd76161d..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-order/src/main/resources/application.yml +++ b/xbin-store-service-order/src/main/resources/application.yml @@ -1,78 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-order - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.order - protocol: - name: dubbo - port: 20888 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -# Redis -redisKey: - # 缓存时间 一天 - expire_time: 86400 - prefix: - cart_info_profix: 'CART_INFO:' - cart_order_info_profix: 'CART_ORDER_INFO:' - cart_order_index_profix: 'CART_ORDER_INDEX:' -server: - port: 8518 - +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-pay-api/pom.xml b/xbin-store-service-pay-api/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3201d719cfa5e73312744a1a354542e72e4eda9 --- /dev/null +++ b/xbin-store-service-pay-api/pom.xml @@ -0,0 +1,25 @@ + + + + xbin-store + cn.binux + 1.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + jar + 1.0-SNAPSHOT + + xbin-store-service-pay-api + + + + cn.binux + xbin-store-common + 1.0-SNAPSHOT + + + diff --git a/xbin-store-service-pay-api/src/main/java/cn/binux/pay/service/PayService.java b/xbin-store-service-pay-api/src/main/java/cn/binux/pay/service/PayService.java new file mode 100644 index 0000000000000000000000000000000000000000..1cb801adfc3694aaf52a2093fcf33dc13dad2382 --- /dev/null +++ b/xbin-store-service-pay-api/src/main/java/cn/binux/pay/service/PayService.java @@ -0,0 +1,28 @@ +package cn.binux.pay.service; + +import cn.binux.pojo.TbOrder; +import cn.binux.pojo.XbinResult; + +//import javax.ws.rs.*; + +/** + * 用户登录相关服务 + * + * @author xubin. + * @create 2017-02-08 下午2:47 + */ +public interface PayService { + /** + * 请求格式 POST + * 用户登录 + * + * @param user Tbuser POJO Json + * @return { + * status: 200 //200 成功 400 登录失败 500 系统异常 + * msg: "OK" //错误 用户名或密码错误,请检查后重试. + * data: "fe5cb546aeb3ce1bf37abcb08a40493e" //登录成功,返回token + * } + */ + XbinResult doPay(TbOrder order); + XbinResult doPagePay(TbOrder order); +} diff --git a/xbin-store-service-pay/pom.xml b/xbin-store-service-pay/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..981bfd30e56693c73c3a8c0a5998691d236af657 --- /dev/null +++ b/xbin-store-service-pay/pom.xml @@ -0,0 +1,110 @@ + + + 4.0.0 + + cn.binux + xbin-store-service-pay + 0.0.1-SNAPSHOT + jar + + xbin-store-service-pay + xbin-store pay + + + xbin-store + cn.binux + 1.0-SNAPSHOT + ../pom.xml + + + + UTF-8 + UTF-8 + 1.8 + + + + + cn.binux + spring-boot-starter-dubbox + 0.0.1-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-test + test + + + + cn.binux + xbin-store-service-pay-api + 1.0-SNAPSHOT + + + cn.binux + xbin-store-service-redis-api + 1.0-SNAPSHOT + + + cn.binux + xbin-store-common-mapper + 1.0-SNAPSHOT + + + cn.binux + xbin-store-service-redis-api + 1.0-SNAPSHOT + + + cn.binux + xbin-store-service-item-api + 1.0-SNAPSHOT + + + com.alibaba + dubbo + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-autoconfigure + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + + cn.binux + spring-boot-starter-druid + + + com.alibaba + druid + + + + com.alipay + sdk-java + 20171026141113 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + + + + + + + diff --git a/xbin-store-service-pay/src/main/java/cn/binux/XbinStoreServicePayApplication.java b/xbin-store-service-pay/src/main/java/cn/binux/XbinStoreServicePayApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..b0b0525f7fa0fa7ab996ea73304708cd1d5b024d --- /dev/null +++ b/xbin-store-service-pay/src/main/java/cn/binux/XbinStoreServicePayApplication.java @@ -0,0 +1,16 @@ +package cn.binux; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.Configuration; + +@Configuration +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class XbinStoreServicePayApplication { + + public static void main(String[] args) { + SpringApplication.run(XbinStoreServicePayApplication.class, args); + + } +} diff --git a/xbin-store-service-pay/src/main/java/cn/binux/pay/service/impl/AliPayServiceImpl.java b/xbin-store-service-pay/src/main/java/cn/binux/pay/service/impl/AliPayServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..20685bfb7cb94d3acae03511fdacf9bd89a1c198 --- /dev/null +++ b/xbin-store-service-pay/src/main/java/cn/binux/pay/service/impl/AliPayServiceImpl.java @@ -0,0 +1,158 @@ +package cn.binux.pay.service.impl; + +import cn.binux.constant.Const; +import cn.binux.item.service.ItemService; +import cn.binux.pay.service.PayService; +import cn.binux.pojo.TbOrder; +import cn.binux.pojo.TbPayInfo; +import cn.binux.pojo.XbinResult; +import com.alibaba.dubbo.config.annotation.Reference; +import com.alibaba.dubbo.config.annotation.Service; +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.request.AlipayTradePrecreateRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; +import com.alipay.api.response.AlipayTradePrecreateResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; + +import java.util.Date; + +/** + * 用户登录相关服务 Service 实现 + * + * @author xubin. + * @create 2017-04-07 + */ + +@Service(version = Const.XBIN_STORE_PAY_VERSION) +public class AliPayServiceImpl implements PayService { + + private static final Logger logger = LoggerFactory.getLogger(AliPayServiceImpl.class); + public static final String KEY = "success"; + public static final int ERROR = 1; + public static final int SUCCESS = 0; + + @Reference(version = Const.XBIN_STORE_ITEM_VERSION,check = false) + ItemService itemService; + + @Value("${alipay.gateway}") + private String ALIPAY_GATEWAY; + + @Value("${alipay.charset:utf8}") + private String ALIPAY_CHARSET; + + @Value("${alipay.appid}") + private String ALIPAY_APPID; + + @Value("${alipay.public_key}") + private String ALIPAY_PUBLICKEY; + + @Value("${alipay.private_key}") + private String ALIPAY_PRIVATEKEY; + + @Value("${alipay.notify_url}") + private String ALIPAY_NOTIFY_URL; + + @Override + public XbinResult doPay(TbOrder order) { + JSONObject root=new JSONObject(); + //支付流水记录 + final TbPayInfo tbPayInfo=new TbPayInfo(); + //实例化客户端 + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, ALIPAY_APPID,ALIPAY_PRIVATEKEY, "json", ALIPAY_CHARSET,ALIPAY_PUBLICKEY, "RSA2"); + //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify + AlipayTradePrecreateRequest request=new AlipayTradePrecreateRequest(); + //SDK已经封装掉了公共参数,这里只需要传入业务参数 + request.setNotifyUrl(ALIPAY_NOTIFY_URL); + root.put("out_trade_no",order.getOrderId()); + root.put("scene","bar_code"); + root.put("subject","达子"); + root.put("total_amount",order.getPayment()); + root.put("discountable_amount","0.00"); + root.put("undiscountable_amount",order.getPayment()); + root.put("body","商品1"); + request.setBizContent(root.toJSONString()); + AlipayTradePrecreateResponse response; + try { + response = alipayClient.execute(request); + //调用成功,则处理业务逻辑 + if(response.isSuccess()){ + System.out.println("支付宝返回码:"+response.getCode()); + //设置订单id + tbPayInfo.setOrder_id(order.getOrderId()); + //设置用户id + tbPayInfo.setUser_id(order.getUserId().toString()); + //设置支付系统流水号 + tbPayInfo.setPlatform_number(response.getQrCode()); + //设置支付二维码 + tbPayInfo.setQr_code(response.getQrCode()); + //设置订单创建时间 + tbPayInfo.setCreate_time(new Date()); + tbPayInfo.setUpdate_time(new Date()); + return XbinResult.ok(tbPayInfo); + } + else{ + logger.error("支付宝接口调用失败!"); + return XbinResult.build(400,"支付宝接口调用失败"); + } + } catch (AlipayApiException e) { + logger.error("支付宝支付异常返回:"+e.getMessage()); + e.printStackTrace(); + return XbinResult.build(400,"支付宝支付异常"); + } + } + + @Override + public XbinResult doPagePay(TbOrder order){ + JSONObject root=new JSONObject(); + //支付流水记录 + final TbPayInfo tbPayInfo=new TbPayInfo(); + //实例化客户端 + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, ALIPAY_APPID,ALIPAY_PRIVATEKEY, "json", ALIPAY_CHARSET,ALIPAY_PUBLICKEY, "RSA2"); + //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify + AlipayTradePagePayRequest request=new AlipayTradePagePayRequest(); + request.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); + request.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址 + //SDK已经封装掉了公共参数,这里只需要传入业务参数 + root.put("out_trade_no",order.getOrderId()); + root.put("scene","bar_code"); + root.put("subject","达子"); + root.put("total_amount","0.01"); + root.put("discountable_amount","0.00"); + root.put("undiscountable_amount","0.01"); + root.put("body","商品1"); + request.setBizContent(root.toJSONString()); + AlipayTradePagePayResponse response; + try { + response=alipayClient.pageExecute(request); +// 调用成功,则处理业务逻辑 + if(response.isSuccess()){ + System.out.println(response.getBody()+ response.getMsg()); + System.out.println("支付宝返回码:"+response.getCode()); + //设置订单id + tbPayInfo.setOrder_id(order.getOrderId()); + //设置用户id + tbPayInfo.setUser_id(order.getUserId().toString()); + //设置支付系统流水号 + + //设置订单创建时间 + tbPayInfo.setCreate_time(new Date()); + tbPayInfo.setUpdate_time(new Date()); + return XbinResult.ok(tbPayInfo); + } + else{ + logger.error("支付宝接口调用失败!"); + return XbinResult.build(400,"支付宝接口调用失败"); + } + } catch (AlipayApiException e) { + logger.error("支付宝支付异常返回:"+e.getMessage()); + e.printStackTrace(); + return XbinResult.build(400,"支付宝支付异常"); + } + } +} diff --git a/xbin-store-service-pay/src/main/resources/META-INF/app.properties b/xbin-store-service-pay/src/main/resources/META-INF/app.properties new file mode 100644 index 0000000000000000000000000000000000000000..7ea58b97f8d48b938c615f6c6603992b9eb15c91 --- /dev/null +++ b/xbin-store-service-pay/src/main/resources/META-INF/app.properties @@ -0,0 +1 @@ +app.id=xbin-store-service-pay \ No newline at end of file diff --git a/xbin-store-service-pay/src/main/resources/application-dev.yml b/xbin-store-service-pay/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..7c722b2fc65c99251d6a909165ce2d6d753d6842 --- /dev/null +++ b/xbin-store-service-pay/src/main/resources/application-dev.yml @@ -0,0 +1,88 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-pay + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.pay + protocol: + name: dubbo + port: 20889 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 1800 + prefix: + # 用户登录信息前缀 + user_session: 'USER_SESSION:' + # 验证码Redis前缀 + verifycode: 'VERIFYCODE:' + # 号码code + mobile_login_code: 'MOBILE_LOGIN_CODE:' +server: + port: 8524 + +alipay: + gateway: https://openapi.alipaydev.com/gateway.do + appid: 2016082100306733 + private_key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDgojsJIM6UwGuXc6kxgwnQy/7zq3h0FmTvkIBuX5SGHV5MY0I68BVgCA/W9PNSRY1cnXWrjpWREzkZljbM44VNNwLNOe15Uvr9SSu5SHuLlK5qnq2264TbQUtRuCCUpxHimK00Dj9cRnrfWFc2ElKzcwdYEeVR893yWxxTr2SYLv3PQ39AbN+1P4p6vE4uUfD1fBcJyprh1bAVWSQWk6awcuf1z7lkuYvuQ2eE0b+YO5eO5fO8Exp+fjDAQ0gXjP/2gYNqRD92ZdsAgQ8oU1V+ngqy+4KnvWLqj2FaUh1iyXOJ6sqIWE03DX/ogIIaabVkWZ8/aFZV5uhiM9TeF8ifAgMBAAECggEAMLkfgvhZtowSCjStIy8gBujocOPlaZCd7hRytv4GUhy2omz5JZ2DlWPKQ763tEWfxtHkfwSbTm9T+EfLtR84f6oJ8oe5CZLFHAEt+a9OFNV4C2pFlaJ6G7CK7Lu6XWPrjjG9h8f7WEF1T1JzAChzRbcShbjD+8Wgg3vdpg0qDZPjn22tplpaFpsMcAD8FMj3/Noy2poJsnKTbA3qPwZfoX3eivOe8/ELtFNM7bQVlFssNbSWM0PRqUeDRb1dpRlY8r3Rlgh+JSH0o+GYJYLaBs2oGYFdhKulZ0tl7YisskDrp2B2odjqjcbnCpCmXhXC2PEx+T+2R5df4jfFwbJ6+QKBgQD5brIFRGbFVQqcialmPqPaXFxKobAP3tthnII4PlnGNkfSoUFQcWg9pkdB5dgI7MYSCazc2/z536JWDceevEJtwdgeZZSNgMfZl8QwkIFXZk6eJAsq0DhNevZ8hPKi15vSy22bfIgllQ4B1CUlWi2CRJMX83mFjR6wXIoOt/ooUwKBgQDmjGEMapBeios14yUqbh8QUPCxG78x+9K+J0Uhv0EWM2/3ufsYzLS9m2c5if6bYML3/R0Rno0B0rjVpmxmn9WQme5q8ivmqTPdGwrGzRLHn55gvc7q8J8kQi6HIhTBLUR3FWYmYM5vzQy26HAqAYQX6ur7A/Ae5wsvsPRQd/slBQKBgEyaWWPSuPk7f9HJWVQEQtAJ83IcK/UDzT4yEa/yPiHog7BFQ8jPu2LLkTDExM8g4Eej3wnJKe0XaESjYL34NTJ+CMB1E+VNOpMxz9fWWVKdIeHhUeipH9FzxQVC0z19l+ZqAVRyL2HTYAThwTKyei16n+4IITcJuvYQxXl1uQbvAoGBANl54G4y876K2Cjb/QoaWOkuQO4Aq4m975z6NEdSP1Zu7Rb09Dz/lRsqxePMHUV6sE/4Dvy44HCw0zSOycDA01eVLQbrLKhoQgk3YiIH/sgZ9O9y/QY4Nxaf634DkypqxiPDJtnbBcEG3xCHEI8/YNii/EgO/epYrf+t37kshNb1AoGAEgyZe4ahm045V/xW/RJstLjJ0KiTFM0B0Jho3w7iJ89T+01zcufOjbztFw3HnFWOLJXdMvqwV1Mdmu+53Ao+0o02qrDXvnYz0Vb9YKVYIhTH9rETmQ0gWsPcpd30zjcSsGj4RF0GIUZBqJt/eQaevKfxJmPN/5WjJGRMPNt7srk= + public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqPktIvWqAN+6Oxj9wHVuaH50tzy/TjhdRguuxad0MEzVxquV+SZgl/tmQGzM52ZQMkK556wX1mC2aJbSoma84Z51MegC3Kq15jssK9SQWfevqhyW9QENbnfTI1HlV3sRa/R4I2S2uWielGfbqMOZC9KXH6uGT3VMMoElbWv0+IGoHirtV4nvSIbNXhcbsU2vKMOJjYhKtBHjn9HzqOBGiXoP1HXOjtfQdcLcNoYirXQRdWWSkFJqFdd2h3JfXZCsOD9Kp5J1KV+R51Ug4OZ6g9Y1fyJ8Unesq6VrtI68ZzR/TmSu5GRv26XqopPQHGwjYIuO/dQOSsXmBC/WheHxgwIDAQAB + charset: utf8 + notify_url: http://9qprmv.natappfree.cc/notify \ No newline at end of file diff --git a/xbin-store-service-pay/src/main/resources/application.yml b/xbin-store-service-pay/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..caf4dfcd647483863672818bd860d4ec4767e8de --- /dev/null +++ b/xbin-store-service-pay/src/main/resources/application.yml @@ -0,0 +1,3 @@ +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-pay/src/main/resources/banner.txt b/xbin-store-service-pay/src/main/resources/banner.txt new file mode 100644 index 0000000000000000000000000000000000000000..d823e08b5584918dbe4af3ca167fa97f4f539214 --- /dev/null +++ b/xbin-store-service-pay/src/main/resources/banner.txt @@ -0,0 +1,7 @@ +${AnsiColor.BRIGHT_CYAN} + ___. .__ __ +___ __\_ |__ |__| ____ _______/ |_ ___________ ____ +\ \/ /| __ \| |/ \ ______ / ___/\ __\/ _ \_ __ \_/ __ \ + > < | \_\ \ | | \ /_____/ \___ \ | | ( <_> ) | \/\ ___/ +/__/\_ \|___ /__|___| / /____ > |__| \____/|__| \___ > + \/ \/ \/ \/ Version 1.0.0 By Binux \/ diff --git a/xbin-store-service-pay/src/main/resources/log4j.properties b/xbin-store-service-pay/src/main/resources/log4j.properties new file mode 100644 index 0000000000000000000000000000000000000000..7820203c5c48cab9ec45e375b1e4c6fae782f93d --- /dev/null +++ b/xbin-store-service-pay/src/main/resources/log4j.properties @@ -0,0 +1,14 @@ +log4j.rootLogger=DEBUG, console, file + +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n + +log4j.appender.file=org.apache.log4j.DailyRollingFileAppender +log4j.appender.file.File=logs/xbin-store-service-sso.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.A3.MaxFileSize=1024KB +log4j.appender.A3.MaxBackupIndex=10 +log4j.appender.file.layout.ConversionPattern=%d %p [%c] - %m%n + +log4j.logger.org.springframework=WARN diff --git a/xbin-store-service-portal/pom.xml b/xbin-store-service-portal/pom.xml index 97dcd90f5f2ac6e7fc6ab93e63c3c21e0c680fc2..a6d29491b52034b2cbb92132d34890e03addcf92 100644 --- a/xbin-store-service-portal/pom.xml +++ b/xbin-store-service-portal/pom.xml @@ -69,7 +69,10 @@ - + + com.alibaba + druid + diff --git a/xbin-store-service-portal/src/main/java/cn/binux/XbinStoreServicePortalApplication.java b/xbin-store-service-portal/src/main/java/cn/binux/XbinStoreServicePortalApplication.java index 7d9f4787c4421bfc32c9d0ce74ba8769826e2ea7..9c11b684e063bf6a75b85b9dc37d692dacc62278 100644 --- a/xbin-store-service-portal/src/main/java/cn/binux/XbinStoreServicePortalApplication.java +++ b/xbin-store-service-portal/src/main/java/cn/binux/XbinStoreServicePortalApplication.java @@ -1,15 +1,16 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableTransactionManagement @MapperScan(basePackages = "cn.binux.mapper") public class XbinStoreServicePortalApplication { diff --git a/xbin-store-service-portal/src/main/resources/application-dev.yml b/xbin-store-service-portal/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..03a2dda04a7f588b02a3060a80a163c12c57bb6a --- /dev/null +++ b/xbin-store-service-portal/src/main/resources/application-dev.yml @@ -0,0 +1,78 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-protal + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.portal + protocol: + name: dubbo + port: 20883 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 1800 + prefix: + # 首页大广告 + index_ad: INDEX_AD + +server: + port: 8513 diff --git a/xbin-store-service-portal/src/main/resources/application.yml b/xbin-store-service-portal/src/main/resources/application.yml index 0c539022f9d5b565cddf26ccf6580bba997d139c..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-portal/src/main/resources/application.yml +++ b/xbin-store-service-portal/src/main/resources/application.yml @@ -1,80 +1,3 @@ - - -#DUBBOX -dubbox: - application: - name: xbin-store-service-protal - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.portal - protocol: - name: dubbo - port: 20883 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - - -# Redis -redisKey: - # 缓存时间 默认半小时 - expire_time: 1800 - prefix: - # 首页大广告 - index_ad: INDEX_AD - -server: - port: 8513 +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-redis/pom.xml b/xbin-store-service-redis/pom.xml index 167a3c27d356d9a9a0d2ec5017d9e57ecdca058c..fbe96513bd8f75a6dab6b71777ebf79fea9645a8 100644 --- a/xbin-store-service-redis/pom.xml +++ b/xbin-store-service-redis/pom.xml @@ -58,7 +58,23 @@ xbin-store-service-redis-api 1.0-SNAPSHOT - + + org.springframework.boot + spring-boot-autoconfigure + + + cn.binux + xbin-store-common-mapper + 1.0-SNAPSHOT + + + com.google.guava + guava + 20.0 + + + + diff --git a/xbin-store-service-redis/src/main/java/cn/binux/XbinStoreServiceRedisApplication.java b/xbin-store-service-redis/src/main/java/cn/binux/XbinStoreServiceRedisApplication.java index 75adb0388b9c05c0616489311437d8f445aa90d6..46c561545cdaffb75de356785494b138271bb731 100644 --- a/xbin-store-service-redis/src/main/java/cn/binux/XbinStoreServiceRedisApplication.java +++ b/xbin-store-service-redis/src/main/java/cn/binux/XbinStoreServiceRedisApplication.java @@ -1,14 +1,15 @@ package cn.binux; import com.alibaba.dubbo.container.Main; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class XbinStoreServiceRedisApplication { public static void main(String[] args) { diff --git a/xbin-store-service-redis/src/main/resources/application-dev.yml b/xbin-store-service-redis/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..d5bbb44b354e5b22ed3aa4424008bfb583ad32b5 --- /dev/null +++ b/xbin-store-service-redis/src/main/resources/application-dev.yml @@ -0,0 +1,34 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-redis + organization: dubbox + owner: binux + registry: + id: henna + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.redis + protocol: + name: dubbo + port: 20881 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: true + address: 192.168.237.128:7070 + username: root + password: root + +# REDIS (RedisProperties) +redis: + cluster: false + single-host: 192.168.237.128 + single-port: 6379 + password: da diff --git a/xbin-store-service-redis/src/main/resources/application.yml b/xbin-store-service-redis/src/main/resources/application.yml index 79309af09a179677d55c6de5bb646cab1ae804b1..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-redis/src/main/resources/application.yml +++ b/xbin-store-service-redis/src/main/resources/application.yml @@ -1,33 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-redis - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.redis - protocol: - name: dubbo - port: 20881 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -# REDIS (RedisProperties) -redis: - cluster: false - single-host: 192.168.125.133 - single-port: 6379 - password: +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-search-api/pom.xml b/xbin-store-service-search-api/pom.xml index 31c9ef2891c9d7111c9de846a36168144ada3c96..ee2bca16785e807c5d6b028b9b4f8b83b76f8bb8 100644 --- a/xbin-store-service-search-api/pom.xml +++ b/xbin-store-service-search-api/pom.xml @@ -18,6 +18,11 @@ xbin-store-common 1.0-SNAPSHOT + + cn.binux + xbin-store-common-pojo + 1.0-SNAPSHOT + jar diff --git a/xbin-store-service-search/pom.xml b/xbin-store-service-search/pom.xml index 65628c001f84f4eb133654e3c39fb4dd746d3ed4..164ac8daf9c8af563217c8fa9b0b31c783843cc2 100644 --- a/xbin-store-service-search/pom.xml +++ b/xbin-store-service-search/pom.xml @@ -78,6 +78,11 @@ org.apache.activemq activemq-all + + + com.alibaba + druid + diff --git a/xbin-store-service-search/src/main/java/cn/binux/XbinStoreServiceSearchApplication.java b/xbin-store-service-search/src/main/java/cn/binux/XbinStoreServiceSearchApplication.java index f15aa1daec9e73d737a38db6db8913fb5b5cb95c..8093d525d8b133a0a7bec59454ac07b7d458c80d 100644 --- a/xbin-store-service-search/src/main/java/cn/binux/XbinStoreServiceSearchApplication.java +++ b/xbin-store-service-search/src/main/java/cn/binux/XbinStoreServiceSearchApplication.java @@ -1,19 +1,22 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; + +import com.alibaba.dubbo.container.Main; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @MapperScan(basePackages = "cn.binux.search.mapper") public class XbinStoreServiceSearchApplication { public static void main(String[] args) { SpringApplication.run(XbinStoreServiceSearchApplication.class, args); - + Main.main(args); } } diff --git a/xbin-store-service-search/src/main/resources/application-dev.yml b/xbin-store-service-search/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..5b2577233277b8b48c085297cb1a3797bca45ae8 --- /dev/null +++ b/xbin-store-service-search/src/main/resources/application-dev.yml @@ -0,0 +1,80 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-search + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.search + protocol: + name: dubbo + port: 20882 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:cn.binux.mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# SOLR +spring: + data: + solr: + host: http://192.168.125.131:8080/solr/collection1 +# zkHost: + repositories: + enabled: false + +server: + port: 8512 + + + diff --git a/xbin-store-service-search/src/main/resources/application.yml b/xbin-store-service-search/src/main/resources/application.yml index 88823ac1c7c0ceae55ada04418e2de2d432fc8b9..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-search/src/main/resources/application.yml +++ b/xbin-store-service-search/src/main/resources/application.yml @@ -1,80 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-search - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.search - protocol: - name: dubbo - port: 20882 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:cn.binux.mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -# SOLR spring: - data: - solr: - host: http://192.168.125.131:8080/solr/collection1 -# zkHost: - repositories: - enabled: false - -server: - port: 8512 - - - + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-service-sso/pom.xml b/xbin-store-service-sso/pom.xml index 37d52611134c843270ebc1280c3e9e0b5f7dde16..674a0431dd7b0db33c2eec695a662d3fad8a3cb9 100644 --- a/xbin-store-service-sso/pom.xml +++ b/xbin-store-service-sso/pom.xml @@ -74,7 +74,14 @@ xbin-store-service-redis-api 1.0-SNAPSHOT - + + cn.binux + spring-boot-starter-druid + + + com.alibaba + druid + diff --git a/xbin-store-service-sso/src/main/java/cn/binux/XbinStoreServiceSSOApplication.java b/xbin-store-service-sso/src/main/java/cn/binux/XbinStoreServiceSSOApplication.java index 42503c88eea2e21d8e28468bb7a37ba55c52c194..430de6bcece1a144bbbb54e29033cb2e7e3a1650 100644 --- a/xbin-store-service-sso/src/main/java/cn/binux/XbinStoreServiceSSOApplication.java +++ b/xbin-store-service-sso/src/main/java/cn/binux/XbinStoreServiceSSOApplication.java @@ -1,15 +1,16 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableApolloConfig -@SpringBootApplication +//@EnableApolloConfig +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableTransactionManagement @MapperScan(basePackages = "cn.binux.mapper") public class XbinStoreServiceSSOApplication { diff --git a/xbin-store-service-sso/src/main/resources/application-dev.yml b/xbin-store-service-sso/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..0046bb708862d46531bbb150b3ae599ee84a9806 --- /dev/null +++ b/xbin-store-service-sso/src/main/resources/application-dev.yml @@ -0,0 +1,94 @@ +#DUBBOX +dubbox: + application: + name: xbin-store-service-sso + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.sso + protocol: + name: dubbo + port: 20885 + host: 192.168.237.1 + timeout: 30000 + threadpool: fixed + threads: 500 + accepts: 1000 + serialization: kryo + optimizer: cn.binux.serial.SerializationOptimizerImpl + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +druid: + url: jdbc:mysql://192.168.237.128:3306/xbin_store?characterEncoding=utf-8 + driver-class: com.mysql.jdbc.Driver + username: da + password: 1993822 + initial-size: 1 + min-idle: 1 + max-active: 20 + test-on-borrow: true + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-While-Idle: true + test-on-return: false + pool-prepared-statements: false + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall,log4j,config + connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=false + monitor: + enabled: false + druid-stat-view: /druid/* + druid-web-stat-filter: /* + allow: 219.230.50.107,127.0.0.1 + deny: 192.168.1.73 + login-username: admin + login-password: 123456 + exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + reset-enable: false +mybatis: + type-aliases-package: cn.binux.pojo + mapper-locations: classpath:mapper/*.xml + + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Redis +redisKey: + # 缓存时间 默认半小时 + expire_time: 1800 + prefix: + # 用户登录信息前缀 + user_session: 'USER_SESSION:' + # 验证码Redis前缀 + verifycode: 'VERIFYCODE:' + # 号码code + mobile_login_code: 'MOBILE_LOGIN_CODE:' + +login: + # 验证名 + validation: + #登录名 + ispinengaged: isPinEngaged + #邮箱 + isemailengaged: isEmailEngaged + #手机 + ismobileengaged: isMobileEngaged + # 推荐登录名后缀随机数取值范围 + random_number: 50000 + # 登录成功页面 + success_url: http://localhost:8104/success +server: + port: 8515 diff --git a/xbin-store-service-sso/src/main/resources/application.yml b/xbin-store-service-sso/src/main/resources/application.yml index fec44f574239a5e665bc52ef5dd6bbe1ae09e708..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-service-sso/src/main/resources/application.yml +++ b/xbin-store-service-sso/src/main/resources/application.yml @@ -1,94 +1,3 @@ -#DUBBOX -dubbox: - application: - name: xbin-store-service-sso - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.sso - protocol: - name: dubbo - port: 20885 - host: 192.168.125.1 - timeout: 30000 - threadpool: fixed - threads: 500 - accepts: 1000 - serialization: kryo - optimizer: cn.binux.serial.SerializationOptimizerImpl - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -druid: - url: jdbc:mysql://localhost:3306/xbin_store?characterEncoding=utf-8 - driver-class: com.mysql.jdbc.Driver - username: root - password: OZo+t9QET+ctzd5Esn9q0GJP5hXtWWIKEsX8c4/w6z4C4AnxrwpvySNgBS89XdazOavjXXZp0oeZtQ3P9lLGEA== - initial-size: 1 - min-idle: 1 - max-active: 20 - test-on-borrow: true - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - validation-query: SELECT 1 FROM DUAL - test-While-Idle: true - test-on-return: false - pool-prepared-statements: false - max-pool-prepared-statement-per-connection-size: 20 - filters: stat,wall,log4j,config - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true - monitor: - enabled: false - druid-stat-view: /druid/* - druid-web-stat-filter: /* - allow: 219.230.50.107,127.0.0.1 - deny: 192.168.1.73 - login-username: admin - login-password: 123456 - exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' - reset-enable: false -mybatis: - type-aliases-package: cn.binux.pojo - mapper-locations: classpath:mapper/*.xml - - -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -# Redis -redisKey: - # 缓存时间 默认半小时 - expire_time: 1800 - prefix: - # 用户登录信息前缀 - user_session: 'USER_SESSION:' - # 验证码Redis前缀 - verifycode: 'VERIFYCODE:' - # 号码code - mobile_login_code: 'MOBILE_LOGIN_CODE:' - -login: - # 验证名 - validation: - #登录名 - ispinengaged: isPinEngaged - #邮箱 - isemailengaged: isEmailEngaged - #手机 - ismobileengaged: isMobileEngaged - # 推荐登录名后缀随机数取值范围 - random_number: 50000 - # 登录成功页面 - success_url: http://localhost:8104/success -server: - port: 8515 +spring: + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-web-admin/src/main/java/cn/binux/XbinStoreWebAdminApplication.java b/xbin-store-web-admin/src/main/java/cn/binux/XbinStoreWebAdminApplication.java index a074d4f661a1bb35a6433ecbdcac40a7deb585b3..afad93679f3b04e14ce0ea4779b059b1628d9623 100644 --- a/xbin-store-web-admin/src/main/java/cn/binux/XbinStoreWebAdminApplication.java +++ b/xbin-store-web-admin/src/main/java/cn/binux/XbinStoreWebAdminApplication.java @@ -1,13 +1,13 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig +//@EnableApolloConfig @SpringBootApplication //@EnableWebMvc public class XbinStoreWebAdminApplication { diff --git a/xbin-store-web-admin/src/main/resources/application.yml b/xbin-store-web-admin/src/main/resources/application.yml index 3cf722e23fbf701b2e18085092bdb5c12534494d..451a4584d957f7438260bae5e8129dc03dfc8f3c 100644 --- a/xbin-store-web-admin/src/main/resources/application.yml +++ b/xbin-store-web-admin/src/main/resources/application.yml @@ -6,7 +6,7 @@ dubbox: owner: binux registry: protocol: zookeeper - address: 192.168.125.128:2181 + address: 192.168.237.128:2181 annotation: package: cn.binux.admin.controller monitor: diff --git a/xbin-store-web-cart/pom.xml b/xbin-store-web-cart/pom.xml index f5f246f612c60fbfb71dc0212964f9adcc8a1884..b5d94f9147eebce3651641ca5d1bfb709dbbdf8f 100644 --- a/xbin-store-web-cart/pom.xml +++ b/xbin-store-web-cart/pom.xml @@ -84,11 +84,11 @@ spring-boot-starter-test test - - org.springframework.boot - spring-boot-devtools - true - + + + + + diff --git a/xbin-store-web-cart/src/main/java/cn/binux/XbinStoreWebCartApplication.java b/xbin-store-web-cart/src/main/java/cn/binux/XbinStoreWebCartApplication.java index 1fa7c0dc5c8618f633f354e21847e74b5a06c1c9..01e89f22ae6493ba7178fb652165ab7ff550d34b 100644 --- a/xbin-store-web-cart/src/main/java/cn/binux/XbinStoreWebCartApplication.java +++ b/xbin-store-web-cart/src/main/java/cn/binux/XbinStoreWebCartApplication.java @@ -1,12 +1,12 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig +//@EnableApolloConfig @SpringBootApplication public class XbinStoreWebCartApplication { diff --git a/xbin-store-web-cart/src/main/java/cn/binux/cart/controller/CartController.java b/xbin-store-web-cart/src/main/java/cn/binux/cart/controller/CartController.java index 0886a19a6482fa13b713621ac20f019c7a85aaad..a24a03970a81bd51ece5c32fcedb1f364128fd7b 100644 --- a/xbin-store-web-cart/src/main/java/cn/binux/cart/controller/CartController.java +++ b/xbin-store-web-cart/src/main/java/cn/binux/cart/controller/CartController.java @@ -9,6 +9,9 @@ import cn.binux.redis.service.JedisClient; import cn.binux.utils.CookieUtils; import cn.binux.utils.FastJsonConvert; import com.alibaba.dubbo.config.annotation.Reference; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,14 +39,15 @@ public class CartController { private static final Logger logger = LoggerFactory.getLogger(CartController.class); - @Reference(version = Const.XBIN_STORE_CART_VERSION) + @Reference(version = Const.XBIN_STORE_CART_VERSION,check = false) private CartService cartService; - @Reference(version = Const.XBIN_STORE_REDIS_VERSION) + @Reference(version = Const.XBIN_STORE_REDIS_VERSION,check = false) private JedisClient jedisClient; @Value("${redisKey.prefix.user_session}") private String USER_SESSION; + @ApiOperation(value ="查看购物车",notes = "查看购物车") @RequestMapping("/cart") public String showCart( HttpServletRequest request, HttpServletResponse response,Model model) { @@ -73,18 +77,17 @@ public class CartController { cartInfos= cartService.getCartInfoListByCookiesId(cookieUUID); } - if (cartInfos.size() == 0) { + if (cartInfos==null || cartInfos.size() == 0) { model.addAttribute("cartInfos", null); return "cart"; } - int totalPrice = 0; + int totalPrice = 1; for (int i = 0; i < cartInfos.size(); i++) { CartInfo cartInfo = cartInfos.get(i); totalPrice += cartInfo.getSum(); } - model.addAttribute("cartInfos", cartInfos); model.addAttribute("totalPrice", totalPrice); @@ -114,6 +117,11 @@ public class CartController { } + @ApiOperation(value = "添加购物车") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pid", value = "商品id", required = true, paramType = "body", dataType = "String"), + @ApiImplicitParam(name = "pcount", value = "商品数量", required = true, paramType = "body", dataType = "Long"), + }) @RequestMapping("/add") public String addCart(Long pid, Integer pcount, HttpServletRequest request, HttpServletResponse response, Model model) { String cookieUUID = CookieUtils.getCookieValue(request, Const.CART_KEY); @@ -130,8 +138,9 @@ public class CartController { return "success"; } else { + System.err.println(" "+pid+" "+pcount+" "+cookieUUID); XbinResult result = cartService.addCart(pid, pcount, cookieUUID); - + System.err.println(result.getData().toString()); model.addAttribute("cartInfo", (CartInfo)result.getData()); return "success"; @@ -152,6 +161,7 @@ public class CartController { * @param model * @return */ + @ApiOperation(value = "添加或删除购物车中商品") @RequestMapping("/decreOrIncre") @ResponseBody public XbinResult decreOrIncre(Long pid, Integer pcount,Integer type,Integer index, HttpServletRequest request, HttpServletResponse response, Model model) { diff --git a/xbin-store-web-cart/src/main/resources/application-dev.yml b/xbin-store-web-cart/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..e18293c529defe785570d5463ceaf9aa82ea4bbc --- /dev/null +++ b/xbin-store-web-cart/src/main/resources/application-dev.yml @@ -0,0 +1,40 @@ +#DUBBO +dubbox: + application: + name: xbin-store-web-cart + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.cart.controller + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +#配置模板想到classpath路径,后面须加上"/" +beetl: + templates-path: templates/ + config: + html-tag-flag: true +#配置模板的后缀,自动读取spring.mvc.view.suffix +spring: + mvc: + view: + suffix: .html + +server: + port: 8107 + + +# swagger2 +swagger2.package: cn.binux.cart.controller + +# Redis +redisKey: + prefix: + # 用户登录信息前缀 + user_session: 'USER_SESSION:' \ No newline at end of file diff --git a/xbin-store-web-cart/src/main/resources/application.yml b/xbin-store-web-cart/src/main/resources/application.yml index c88c1c67b1597875b67154089bd1e3aeb216f50e..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-web-cart/src/main/resources/application.yml +++ b/xbin-store-web-cart/src/main/resources/application.yml @@ -1,40 +1,3 @@ -#DUBBO -dubbox: - application: - name: xbin-store-web-cart - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.cart.controller - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -#配置模板想到classpath路径,后面须加上"/" -beetl: - templates-path: templates/ - config: - html-tag-flag: true -#配置模板的后缀,自动读取spring.mvc.view.suffix spring: - mvc: - view: - suffix: .html - -server: - port: 8107 - - -# swagger2 -swagger2.package: cn.binux.cart.controller - -# Redis -redisKey: - prefix: - # 用户登录信息前缀 - user_session: 'USER_SESSION:' \ No newline at end of file + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-web-cart/src/main/resources/templates/cart.html b/xbin-store-web-cart/src/main/resources/templates/cart.html index 0393567771d1eecd31f9bacf42e23b6e0c8d1b6a..a533d0c67d5b7da888fe7fdb68f0e49b8e73108f 100644 --- a/xbin-store-web-cart/src/main/resources/templates/cart.html +++ b/xbin-store-web-cart/src/main/resources/templates/cart.html @@ -399,7 +399,7 @@ 购物车内暂时没有商品
  • - + 去购物>
  • diff --git a/xbin-store-web-item/src/main/java/cn/binux/XbinStoreWebItemApplication.java b/xbin-store-web-item/src/main/java/cn/binux/XbinStoreWebItemApplication.java index 01f55ce22d7bc2b99056d74772d25cc66a09ff2e..24161612458a10800c71328667f3f444df2d7caf 100644 --- a/xbin-store-web-item/src/main/java/cn/binux/XbinStoreWebItemApplication.java +++ b/xbin-store-web-item/src/main/java/cn/binux/XbinStoreWebItemApplication.java @@ -1,12 +1,12 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig +//@EnableApolloConfig @SpringBootApplication public class XbinStoreWebItemApplication { diff --git a/xbin-store-web-item/src/main/resources/application-dev.yml b/xbin-store-web-item/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..0779966db811ded8c0f5e3c1f74970eb70552333 --- /dev/null +++ b/xbin-store-web-item/src/main/resources/application-dev.yml @@ -0,0 +1,35 @@ +#DUBBO +dubbox: + application: + name: xbin-store-web-item + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.item.controller + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +#配置模板想到classpath路径,后面须加上"/" +beetl: + templates-path: templates/ + config: + html-tag-flag: true +#配置模板的后缀,自动读取spring.mvc.view.suffix +spring: + mvc: + view: + suffix: .html + +server: + port: 8103 + + +# swagger2 +swagger2.package: cn.binux.item.controller + diff --git a/xbin-store-web-item/src/main/resources/application.yml b/xbin-store-web-item/src/main/resources/application.yml index 7b160d1d0efb273977cd8fdcdf3aaf6ca22f5b13..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-web-item/src/main/resources/application.yml +++ b/xbin-store-web-item/src/main/resources/application.yml @@ -1,35 +1,3 @@ -#DUBBO -dubbox: - application: - name: xbin-store-web-item - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.item.controller - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -#配置模板想到classpath路径,后面须加上"/" -beetl: - templates-path: templates/ - config: - html-tag-flag: true -#配置模板的后缀,自动读取spring.mvc.view.suffix spring: - mvc: - view: - suffix: .html - -server: - port: 8103 - - -# swagger2 -swagger2.package: cn.binux.item.controller - + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-web-order/src/main/java/cn/binux/XbinStoreWebOrderApplication.java b/xbin-store-web-order/src/main/java/cn/binux/XbinStoreWebOrderApplication.java index 300e70dacbfe1954b805aa622f7b279eec583a73..0f661ff95e43cf5f7b462697e0beda641af57ba1 100644 --- a/xbin-store-web-order/src/main/java/cn/binux/XbinStoreWebOrderApplication.java +++ b/xbin-store-web-order/src/main/java/cn/binux/XbinStoreWebOrderApplication.java @@ -1,12 +1,12 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig +//@EnableApolloConfig @SpringBootApplication public class XbinStoreWebOrderApplication { diff --git a/xbin-store-web-order/src/main/java/cn/binux/order/controller/OrderController.java b/xbin-store-web-order/src/main/java/cn/binux/order/controller/OrderController.java index 410e808ed28050122469477a89f1c5e9bb49755f..d7a5e11517277b7212cdfb95beedc63d928014d5 100644 --- a/xbin-store-web-order/src/main/java/cn/binux/order/controller/OrderController.java +++ b/xbin-store-web-order/src/main/java/cn/binux/order/controller/OrderController.java @@ -4,6 +4,7 @@ import cn.binux.cart.service.CartService; import cn.binux.constant.Const; import cn.binux.order.service.OrderService; import cn.binux.pojo.CartInfo; +import cn.binux.pojo.TbPayInfo; import cn.binux.pojo.XbinResult; import cn.binux.redis.service.JedisClient; import cn.binux.utils.CookieUtils; @@ -42,13 +43,13 @@ public class OrderController { @Value("${redisKey.prefix.cart_order_index_profix}") private String CART_ORDER_INDEX_PROFIX; - @Reference(version = Const.XBIN_STORE_CART_VERSION) + @Reference(version = Const.XBIN_STORE_CART_VERSION,check = false) private CartService cartService; - @Reference(version = Const.XBIN_STORE_REDIS_VERSION) + @Reference(version = Const.XBIN_STORE_REDIS_VERSION,check = false) private JedisClient jedisClient; - @Reference(version = Const.XBIN_STORE_ORDER_VERSION) + @Reference(version = Const.XBIN_STORE_ORDER_VERSION,check=false) private OrderService orderService; @@ -121,14 +122,20 @@ public class OrderController { * 错误 跳转 错误页面 */ @RequestMapping("/order/getPay") - public String getPay(Integer addrId, Integer noAnnoyance, Integer paymentType,String orderId, String shippingName, HttpServletResponse response, HttpServletRequest request) { + public String getPay(Integer addrId, Integer noAnnoyance,Integer paymentType,String orderId, String shippingName, Model model,HttpServletResponse response, HttpServletRequest request) { String cartCookieValue = CookieUtils.getCookieValue(request, Const.CART_KEY); String userCookieValue = CookieUtils.getCookieValue(request, Const.TOKEN_LOGIN); - XbinResult result = orderService.generateOrder(userCookieValue,cartCookieValue,addrId, noAnnoyance, paymentType,orderId, shippingName); + XbinResult result = orderService.generateOrder(userCookieValue,cartCookieValue,addrId,noAnnoyance,paymentType,orderId, shippingName); + XbinResult xbinResult=orderService.pay(userCookieValue,orderId,paymentType); + String data = (String) result.getData(); + if (xbinResult.isOK()){ + TbPayInfo payInfo = FastJsonConvert.convertJSONToObject(data, TbPayInfo.class); + model.addAttribute("qrcode",payInfo.getQr_code()); + } return "success"; } } diff --git a/xbin-store-web-order/src/main/resources/application-dev.yml b/xbin-store-web-order/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..8b29d2c7ca5a0e18d5530e784e0de1a7368568c3 --- /dev/null +++ b/xbin-store-web-order/src/main/resources/application-dev.yml @@ -0,0 +1,47 @@ +#DUBBO +dubbox: + application: + name: xbin-store-web-order + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.order.controller,cn.binux.order.interceptor + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +#配置模板想到classpath路径,后面须加上"/" +beetl: + templates-path: templates/ + config: + html-tag-flag: true +#配置模板的后缀,自动读取spring.mvc.view.suffix +spring: + mvc: + view: + suffix: .html + +server: + port: 8108 + +# swagger2 +swagger2.package: cn.binux.order.controller + +# Redis +redisKey: + # 订单项缓存时间 默认20分钟 + expire_time: 1200 + prefix: + # Redis购物车商品信息前缀 + cart_order_info_profix: 'CART_ORDER_INFO:' + # Redis购物车索引信息前缀 + cart_order_index_profix: 'CART_ORDER_INDEX:' + + +#SSO 系统登录页面 +sso_login_page: 'http://localhost:8104/login.html' diff --git a/xbin-store-web-order/src/main/resources/application.yml b/xbin-store-web-order/src/main/resources/application.yml index d587a34fd8bb54c46201ad0d94f67e4e716516b1..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-web-order/src/main/resources/application.yml +++ b/xbin-store-web-order/src/main/resources/application.yml @@ -1,47 +1,3 @@ -#DUBBO -dubbox: - application: - name: xbin-store-web-order - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.order.controller,cn.binux.order.interceptor - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -#配置模板想到classpath路径,后面须加上"/" -beetl: - templates-path: templates/ - config: - html-tag-flag: true -#配置模板的后缀,自动读取spring.mvc.view.suffix spring: - mvc: - view: - suffix: .html - -server: - port: 8108 - -# swagger2 -swagger2.package: cn.binux.order.controller - -# Redis -redisKey: - # 订单项缓存时间 默认20分钟 - expire_time: 1200 - prefix: - # Redis购物车商品信息前缀 - cart_order_info_profix: 'CART_ORDER_INFO:' - # Redis购物车索引信息前缀 - cart_order_index_profix: 'CART_ORDER_INDEX:' - - -#SSO 系统登录页面 -sso_login_page: 'http://localhost:8104/login.html' + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-web-order/src/main/resources/templates/success.html b/xbin-store-web-order/src/main/resources/templates/success.html index 0c74f1f2db58d62beb204990b191fd6e72736a9a..d6ef0131f2caf37fd1d6072b2d39000f3ba326ad 100644 --- a/xbin-store-web-order/src/main/resources/templates/success.html +++ b/xbin-store-web-order/src/main/resources/templates/success.html @@ -6,6 +6,9 @@ + + + @@ -231,8 +234,20 @@ #wx-share-tip .tip-arrow em.layer2 { border-color: #fff transparent transparent } + - +
      @@ -420,13 +435,6 @@
    -
    - -
    - -
    - -
    +
    支付宝付款码:${qrcode}
    @@ -692,9 +701,9 @@ src="//misc.360buyimg.com/jdf/1.0.0/unit/??base/1.0.0/base.js,basePatch/1.0.0/basePatch.js"> - - - + + + @@ -758,7 +767,7 @@ } catch (e) { } - + - + + - + MEDIAV end
    diff --git a/xbin-store-web-portal/src/main/java/cn/binux/XbinStoreWebPortalApplication.java b/xbin-store-web-portal/src/main/java/cn/binux/XbinStoreWebPortalApplication.java index f993c4392d36705feb52c11f0fa8d78f4b14c817..1af4e635c5051761d2ed92e16cac8661cad75009 100644 --- a/xbin-store-web-portal/src/main/java/cn/binux/XbinStoreWebPortalApplication.java +++ b/xbin-store-web-portal/src/main/java/cn/binux/XbinStoreWebPortalApplication.java @@ -1,12 +1,12 @@ package cn.binux; -import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; +//import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; @Configuration -@EnableApolloConfig +//@EnableApolloConfig @SpringBootApplication public class XbinStoreWebPortalApplication { diff --git a/xbin-store-web-portal/src/main/java/cn/binux/portal/controller/IndexController.java b/xbin-store-web-portal/src/main/java/cn/binux/portal/controller/IndexController.java index b006c24bc67a5dc03fd87a0332b8220e7ac3c173..912e831fcd31aa02bd7bcad085735954e02171fd 100644 --- a/xbin-store-web-portal/src/main/java/cn/binux/portal/controller/IndexController.java +++ b/xbin-store-web-portal/src/main/java/cn/binux/portal/controller/IndexController.java @@ -1,14 +1,22 @@ package cn.binux.portal.controller; import cn.binux.constant.Const; +import cn.binux.pojo.TbUser; import cn.binux.portal.service.PortalContentService; +import cn.binux.redis.service.JedisClient; +import cn.binux.utils.CookieUtils; +import cn.binux.utils.FastJsonConvert; import com.alibaba.dubbo.config.annotation.Reference; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * Created by cynicism on 17/1/27. */ @@ -18,19 +26,39 @@ public class IndexController { @Reference(version = Const.XBIN_STORE_PORTAL_VERSION) private PortalContentService portalContentService; + @Reference(version = Const.XBIN_STORE_REDIS_VERSION) + private JedisClient jedisClient; + @Value("${big_ad_index}") private long Big_AD_INDEX; + @Value("${redisKey.prefix.user_session}") + private String USER_SESSION; - @RequestMapping("/index") - public String index(Model model) { - + @RequestMapping(value = {"/","/index"}) + public String index(HttpServletRequest request, HttpServletResponse response,Model model) { + String cookieUUID = CookieUtils.getCookieValue(request, Const.CART_KEY); + String tokenLogin = CookieUtils.getCookieValue(request, Const.TOKEN_LOGIN); + TbUser user = null; + String userJson = null; + if (StringUtils.isNoneEmpty(tokenLogin)) { + try { + userJson = jedisClient.get(USER_SESSION + tokenLogin); + } catch (Exception e) { +// logger.error("Redis 错误", e); + } + if (StringUtils.isNoneEmpty(userJson)) { + user = FastJsonConvert.convertJSONToObject(userJson, TbUser.class); + } + model.addAttribute("user", user); + } else { + model.addAttribute("user", user); + } return "index"; } @RequestMapping("/index2") public String index2() { - return "index"; } @RequestMapping("/sideBar/popupLogin") diff --git a/xbin-store-web-portal/src/main/resources/application-dev.yml b/xbin-store-web-portal/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..8b0cbad7b633a5f703af28908399acb68b1b72bd --- /dev/null +++ b/xbin-store-web-portal/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +#DUBBO +dubbox: + application: + name: xbin-store-web-portal + organization: dubbox + owner: binux + registry: + protocol: zookeeper + address: zookeeper://192.168.237.128:2181 + annotation: + package: cn.binux.portal.controller + monitor: + enabled: false + address: 192.168.125.1:6060 + username: admin + password: admin + +#配置模板想到classpath路径,后面须加上"/" +beetl: + templates-path: templates/ + config: + html-tag-flag: true +#配置模板的后缀,自动读取spring.mvc.view.suffix +spring: + mvc: + view: + suffix: .html + +server: + port: 8101 + + +# swagger2 +swagger2.package: cn.binux.portal.controller + +# 广告Cid +big_ad_index: 1 + +# Redis +redisKey: + prefix: + # 用户登录信息前缀 + user_session: 'USER_SESSION:' diff --git a/xbin-store-web-portal/src/main/resources/application.yml b/xbin-store-web-portal/src/main/resources/application.yml index 7dbea9d94119fc98113f16651808fedc432b3f71..caf4dfcd647483863672818bd860d4ec4767e8de 100644 --- a/xbin-store-web-portal/src/main/resources/application.yml +++ b/xbin-store-web-portal/src/main/resources/application.yml @@ -1,39 +1,3 @@ -#DUBBO -dubbox: - application: - name: xbin-store-web-portal - organization: dubbox - owner: binux - registry: - protocol: zookeeper - address: 192.168.125.128:2181 - annotation: - package: cn.binux.portal.controller - monitor: - enabled: false - address: 192.168.125.1:6060 - username: admin - password: admin - -#配置模板想到classpath路径,后面须加上"/" -beetl: - templates-path: templates/ - config: - html-tag-flag: true -#配置模板的后缀,自动读取spring.mvc.view.suffix spring: - mvc: - view: - suffix: .html - -server: - port: 8101 - - -# swagger2 -swagger2.package: cn.binux.portal.controller - -# 广告Cid -big_ad_index: 1 - - + profiles: + active: dev \ No newline at end of file diff --git a/xbin-store-web-portal/src/main/resources/templates/index.html b/xbin-store-web-portal/src/main/resources/templates/index.html index 825acbce97d3b6f53408b0e945886d2961bf69a1..5be495bf713cefd53caf14a00fbb03665cdd1309 100644 --- a/xbin-store-web-portal/src/main/resources/templates/index.html +++ b/xbin-store-web-portal/src/main/resources/templates/index.html @@ -91,9 +91,65 @@
    +