From fd2d43e8b444960556504a0c2a5cfdb5d845748b Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 20 Aug 2021 00:07:44 +0800 Subject: [PATCH] =?UTF-8?q?'=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bweb/config/RedisConfig.java | 109 ++++ .../controller/HighMerchantController.java | 6 +- .../com/bweb/controller/LoginController.java | 1 - .../src/main/resources/dev/application.yml | 14 +- .../src/main/resources/pre/application.yml | 56 ++ .../src/main/resources/pre/config.properties | 4 + hai-bweb/src/main/resources/pre/logback.xml | 72 +++ .../src/main/resources/prod/application.yml | 12 + .../java/com/cweb/config/RedisConfig.java | 110 ++++ .../HighMerchantStoreController.java | 19 +- .../OutRechargeOrderController.java | 104 ++-- .../cweb/controller/pay/OrderController.java | 2 +- .../src/main/resources/dev/application.yml | 14 +- .../src/main/resources/pre/application.yml | 56 ++ .../src/main/resources/pre/config.properties | 19 + hai-cweb/src/main/resources/pre/logback.xml | 72 +++ .../main/resources/prod-9401/application.yml | 74 +++ .../resources/prod-9401/config.properties | 19 + .../src/main/resources/prod-9401/logback.xml | 72 +++ .../src/main/resources/prod/application.yml | 13 + hai-service/pom.xml | 4 + .../com/hai/common/security/UserCenter.java | 74 ++- .../java/com/hai/common/utils/RedisUtil.java | 533 ++++++++++++++++++ .../java/com/hai/dao/HighOrderMapperExt.java | 39 +- .../java/com/hai/enum_type/RedisHash.java | 35 ++ .../com/hai/service/HighOrderService.java | 3 + .../service/impl/HighOrderServiceImpl.java | 5 + .../resources/pre/commonConfig.properties | 22 + .../prod-9401/commonConfig.properties | 22 + .../resources/prod/commonConfig.properties | 5 + 30 files changed, 1496 insertions(+), 94 deletions(-) create mode 100644 hai-bweb/src/main/java/com/bweb/config/RedisConfig.java create mode 100644 hai-bweb/src/main/resources/pre/application.yml create mode 100644 hai-bweb/src/main/resources/pre/config.properties create mode 100644 hai-bweb/src/main/resources/pre/logback.xml create mode 100644 hai-cweb/src/main/java/com/cweb/config/RedisConfig.java create mode 100644 hai-cweb/src/main/resources/pre/application.yml create mode 100644 hai-cweb/src/main/resources/pre/config.properties create mode 100644 hai-cweb/src/main/resources/pre/logback.xml create mode 100644 hai-cweb/src/main/resources/prod-9401/application.yml create mode 100644 hai-cweb/src/main/resources/prod-9401/config.properties create mode 100644 hai-cweb/src/main/resources/prod-9401/logback.xml create mode 100644 hai-service/src/main/java/com/hai/common/utils/RedisUtil.java create mode 100644 hai-service/src/main/java/com/hai/enum_type/RedisHash.java create mode 100644 hai-service/src/main/resources/pre/commonConfig.properties create mode 100644 hai-service/src/main/resources/prod-9401/commonConfig.properties diff --git a/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java b/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java new file mode 100644 index 00000000..0c5f530e --- /dev/null +++ b/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java @@ -0,0 +1,109 @@ +package com.bweb.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + + +@Configuration +@EnableCaching //开启注解 +public class RedisConfig extends CachingConfigurerSupport { + + /** + * retemplate相关配置 + * @param factory + * @return + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + + RedisTemplate template = new RedisTemplate<>(); + // 配置连接工厂 + template.setConnectionFactory(factory); + + //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) + Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class); + + ObjectMapper om = new ObjectMapper(); + // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSeial.setObjectMapper(om); + + // 值采用json序列化 + template.setValueSerializer(jacksonSeial); + //使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + + // 设置hash key 和value序列化模式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(jacksonSeial); + template.afterPropertiesSet(); + + return template; + } + + /** + * 对hash类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public HashOperations hashOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForHash(); + } + + /** + * 对redis字符串类型数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ValueOperations valueOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForValue(); + } + + /** + * 对链表类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ListOperations listOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForList(); + } + + /** + * 对无序集合类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public SetOperations setOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForSet(); + } + + /** + * 对有序集合类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForZSet(); + } +} \ No newline at end of file diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighMerchantController.java b/hai-bweb/src/main/java/com/bweb/controller/HighMerchantController.java index 13316cdb..e1acb71f 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighMerchantController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighMerchantController.java @@ -63,7 +63,7 @@ public class HighMerchantController { @ApiOperation(value = "增加商户") public ResponseData insertMerchant(@RequestBody HighMerchantModel highMerchant, HttpServletRequest request) { try { - SessionObject sessionObject = UserCenter.getSessionObject(request); + SessionObject sessionObject = userCenter.getSessionObject(request); UserInfoModel userInfoModel = (UserInfoModel) sessionObject.getObject(); if (userInfoModel.getBsCompany() == null) { log.error("HighMerchantController -> updateMerchant() error!","该主角色没有权限"); @@ -114,7 +114,7 @@ public class HighMerchantController { @ApiOperation(value = "修改商户") public ResponseData updateMerchant(@RequestBody HighMerchantModel highMerchant, HttpServletRequest request) { try { - SessionObject sessionObject = UserCenter.getSessionObject(request); + SessionObject sessionObject = userCenter.getSessionObject(request); UserInfoModel userInfoModel = (UserInfoModel) sessionObject.getObject(); if (userInfoModel.getBsCompany() == null) { log.error("HighMerchantController -> updateMerchant() error!","该主角色没有权限"); @@ -233,7 +233,7 @@ public class HighMerchantController { @RequestParam(name = "pageSize", required = true) Integer pageSize, HttpServletRequest request) { try { - SessionObject sessionObject = UserCenter.getSessionObject(request); + SessionObject sessionObject = userCenter.getSessionObject(request); UserInfoModel userInfoModel = (UserInfoModel) sessionObject.getObject(); if (userInfoModel.getBsCompany() == null) { log.error("HighMerchantController -> getMerchantList() error!","权限不足"); diff --git a/hai-bweb/src/main/java/com/bweb/controller/LoginController.java b/hai-bweb/src/main/java/com/bweb/controller/LoginController.java index 909bae22..9bf4ac2d 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/LoginController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/LoginController.java @@ -121,7 +121,6 @@ public class LoginController { log.error("login error!","公司状态错误"); throw ErrorHelp.genException(SysCode.System, ErrorCode.BS_COMPANY_UNAVAILABLE, ""); } - if(secUser.getOrganizationId() != null){ //用户部门信息 BsOrganization bsOrganization = bsOrganizationService.findById(secUser.getOrganizationId()); diff --git a/hai-bweb/src/main/resources/dev/application.yml b/hai-bweb/src/main/resources/dev/application.yml index 3412b88f..f799126d 100644 --- a/hai-bweb/src/main/resources/dev/application.yml +++ b/hai-bweb/src/main/resources/dev/application.yml @@ -9,7 +9,7 @@ debug: false #datasource数据源设置 spring: datasource: - url: jdbc:mysql://139.159.177.244:3306/hsg_pre?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://139.159.177.244:3306/hfkj?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: HF123456. type: com.alibaba.druid.pool.DruidDataSource @@ -27,6 +27,18 @@ spring: testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 + redis: + database: 0 + host: 139.159.177.244 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 #配置日期返回至前台为时间戳 jackson: serialization: diff --git a/hai-bweb/src/main/resources/pre/application.yml b/hai-bweb/src/main/resources/pre/application.yml new file mode 100644 index 00000000..f446e073 --- /dev/null +++ b/hai-bweb/src/main/resources/pre/application.yml @@ -0,0 +1,56 @@ +server: + port: 9302 + servlet: + context-path: /brest + +#配置是否为debug模式,debug模式下,不开启权限校验 +debug: false + +#datasource数据源设置 +spring: + datasource: + url: jdbc:mysql://139.159.177.244:3306/hsg_pre?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false + username: root + password: HF123456. + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.jdbc.Driver + filters: stat + maxActive: 10 + initialSize: 5 + maxWait: 60000 + minIdle: 5 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + redis: + database: 0 + host: 139.159.177.244 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 + #配置日期返回至前台为时间戳 + jackson: + serialization: + write-dates-as-timestamps: true +mybatis: + mapperLocations: + - classpath*:sqlmap*/*.xml + type-aliases-package: + org.springboot.sample.entity + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql diff --git a/hai-bweb/src/main/resources/pre/config.properties b/hai-bweb/src/main/resources/pre/config.properties new file mode 100644 index 00000000..9874dd8e --- /dev/null +++ b/hai-bweb/src/main/resources/pre/config.properties @@ -0,0 +1,4 @@ +fileUrl=/home/project/hsg/filesystem +cmsPath=/home/project/hsg/filesystem/cmsPath +agentQrCode=/home/project/hsg/filesystem/agentQrCode +agentQrCodeWxUrl=https://hsgcs.dctpay.com/wx/?action=gogogo&id= diff --git a/hai-bweb/src/main/resources/pre/logback.xml b/hai-bweb/src/main/resources/pre/logback.xml new file mode 100644 index 00000000..a7602e3d --- /dev/null +++ b/hai-bweb/src/main/resources/pre/logback.xml @@ -0,0 +1,72 @@ + + + + + %d %p (%file:%line\)- %m%n + UTF-8 + + + + log/base.log + + log/base.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + log/dao.log + + log/dao.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + log/error.log + + log/error.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + + + + + + + + + + + + diff --git a/hai-bweb/src/main/resources/prod/application.yml b/hai-bweb/src/main/resources/prod/application.yml index 40d95978..a4c30e6c 100644 --- a/hai-bweb/src/main/resources/prod/application.yml +++ b/hai-bweb/src/main/resources/prod/application.yml @@ -27,6 +27,18 @@ spring: testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 + redis: + database: 0 + host: 127.0.0.1 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 #thymelea模板配置 thymeleaf: prefix: classpath:/templates/ diff --git a/hai-cweb/src/main/java/com/cweb/config/RedisConfig.java b/hai-cweb/src/main/java/com/cweb/config/RedisConfig.java new file mode 100644 index 00000000..c6db7fc4 --- /dev/null +++ b/hai-cweb/src/main/java/com/cweb/config/RedisConfig.java @@ -0,0 +1,110 @@ +package com.cweb.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + + +@Configuration +@EnableCaching //开启注解 +public class RedisConfig extends CachingConfigurerSupport { + + /** + * retemplate相关配置 + * @param factory + * @return + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + + RedisTemplate template = new RedisTemplate<>(); + // 配置连接工厂 + template.setConnectionFactory(factory); + + //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) + Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class); + + ObjectMapper om = new ObjectMapper(); + // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSeial.setObjectMapper(om); + + // 值采用json序列化 + template.setValueSerializer(jacksonSeial); + //使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + + // 设置hash key 和value序列化模式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(jacksonSeial); + template.afterPropertiesSet(); + + return template; + } + + /** + * 对hash类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public HashOperations hashOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForHash(); + } + + /** + * 对redis字符串类型数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ValueOperations valueOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForValue(); + } + + /** + * 对链表类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ListOperations listOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForList(); + } + + /** + * 对无序集合类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public SetOperations setOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForSet(); + } + + /** + * 对有序集合类型的数据操作 + * + * @param redisTemplate + * @return + */ + @Bean + public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForZSet(); + } + +} \ No newline at end of file diff --git a/hai-cweb/src/main/java/com/cweb/controller/HighMerchantStoreController.java b/hai-cweb/src/main/java/com/cweb/controller/HighMerchantStoreController.java index e3384968..ff253b36 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/HighMerchantStoreController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/HighMerchantStoreController.java @@ -8,6 +8,7 @@ import com.hai.common.exception.SysCode; import com.hai.common.security.SessionObject; import com.hai.common.security.UserCenter; import com.hai.common.utils.MemberValidateUtil; +import com.hai.common.utils.PageUtil; import com.hai.common.utils.ResponseMsgUtil; import com.hai.entity.*; import com.hai.model.*; @@ -82,7 +83,9 @@ public class HighMerchantStoreController { @ApiOperation(value = "根据卡卷查询门店列表") public ResponseData getStoreListByCoupon(@RequestParam(name = "couponId", required = true) Long couponId, @RequestParam(name = "longitude", required = true) String longitude, - @RequestParam(name = "latitude", required = true) String latitude) { + @RequestParam(name = "latitude", required = true) String latitude, + @RequestParam(name = "pageNum", required = true) Integer pageNum, + @RequestParam(name = "pageSize", required = true) Integer pageSize) { try { HighCoupon coupon = highCouponService.getCouponById(couponId); @@ -101,7 +104,7 @@ public class HighMerchantStoreController { store.setExt1(merchant.getMerchantLogo()); } } - return ResponseMsgUtil.success(storeList); + return ResponseMsgUtil.success(PageUtil.initPageInfoObj(pageNum, storeList.size(), pageSize, new PageInfo<>(storeList))); } catch (Exception e) { log.error("HighMerchantStoreController -> getStoreListByCoupon() error!",e); @@ -113,11 +116,11 @@ public class HighMerchantStoreController { @ResponseBody @ApiOperation(value = "根据商户查询门店列表") public ResponseData getStoreListByMerchant(@RequestParam(name = "merchantId", required = true) Long merchantId, - @RequestParam(name = "longitude", required = true) String longitude, - @RequestParam(name = "latitude", required = true) String latitude) { + @RequestParam(name = "longitude", required = true) String longitude, + @RequestParam(name = "latitude", required = true) String latitude, + @RequestParam(name = "pageNum", required = true) Integer pageNum, + @RequestParam(name = "pageSize", required = true) Integer pageSize) { try { - - Map map = new HashMap<>(); map.put("merchantId", merchantId); map.put("longitude", longitude); @@ -130,10 +133,10 @@ public class HighMerchantStoreController { store.setExt1(merchant.getMerchantLogo()); } } - return ResponseMsgUtil.success(storeList); + return ResponseMsgUtil.success(PageUtil.initPageInfoObj(pageNum, storeList.size(), pageSize, new PageInfo<>(storeList))); } catch (Exception e) { - log.error("HighMerchantStoreController -> getStoreListByCoupon() error!",e); + log.error("HighMerchantStoreController -> getStoreListByMerchant() error!",e); return ResponseMsgUtil.exception(e); } } diff --git a/hai-cweb/src/main/java/com/cweb/controller/OutRechargeOrderController.java b/hai-cweb/src/main/java/com/cweb/controller/OutRechargeOrderController.java index e3880f5d..448b3fa1 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/OutRechargeOrderController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/OutRechargeOrderController.java @@ -22,10 +22,7 @@ import com.hai.model.HighUserModel; import com.hai.model.OrderRefundModel; import com.hai.model.ResponseData; import com.hai.model.ResultProfitSharing; -import com.hai.service.CommonService; -import com.hai.service.OutRechargeOrderService; -import com.hai.service.SecConfigService; -import com.hai.service.TelApiService; +import com.hai.service.*; import com.hai.service.pay.impl.GoodsOrderServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -61,6 +58,9 @@ public class OutRechargeOrderController { @Resource private OutRechargeOrderService outRechargeOrderService; + @Resource + private HighOrderService highOrderService; + @Resource private TelApiService telApiService; @@ -70,6 +70,9 @@ public class OutRechargeOrderController { @Resource private GoodsOrderServiceImpl goodsOrderService; + @Resource + private HighProfitSharingRecordService highProfitSharingRecordService; + @Resource private CommonService commonService; @@ -349,52 +352,55 @@ public class OutRechargeOrderController { @RequestMapping(value = "/wxProfitsharing", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分账") - public ResponseData wxProfitsharing(String transaction_id,String out_order_no, BigDecimal amount) { + public ResponseData wxProfitsharing() { try { - Map param = new LinkedHashMap<>(); - param.put("appid", "wx637bd6f7314daa46"); - param.put("mch_id", "1289663601"); - //param.put("sub_mch_id" , "1289663601"); - param.put("sub_mch_id" , "1609882817"); // 个体户黎杨珍 - param.put("transaction_id" , "4200001148202106176001512773"); - param.put("out_order_no" , String.valueOf(new Date().getTime())); - param.put("nonce_str" , WxUtils.makeNonStr()); - BigDecimal rake = new BigDecimal("0.01"); - - // 计算微信收取的手续费 支付金额 * 0.002 - // 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 - BigDecimal wxHandlingFee = amount.multiply(new BigDecimal("0.002")).setScale(2,BigDecimal.ROUND_HALF_DOWN); - BigDecimal price = amount.subtract(wxHandlingFee); - - // 计算分账金额 手续费后的价格 * 0.01 - // 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 - BigDecimal profitSharingAmount = price.multiply(rake).setScale(2,BigDecimal.ROUND_DOWN); - - List> receiversList = new ArrayList<>(); - Map receiversMap = new LinkedHashMap<>(); - receiversMap.put("type", "MERCHANT_ID"); - // receiversMap.put("account", "1604968055");// 个体户方涛 - receiversMap.put("account", "1603942866"); // 重庆慧听石化有限责任公司 - receiversMap.put("amount", profitSharingAmount.multiply(new BigDecimal("100")).intValue()); - receiversMap.put("description", "分给商户【重庆慧听石化有限责任公司】"); - receiversList.add(receiversMap); - param.put("receivers" , JSONObject.toJSONString(receiversList)); - String signStr = WxUtils.generateSignature(param, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256); - param.put("sign" , signStr); - String resultXmL = this.doRefundRequest2(param.get("mch_id"),"https://api.mch.weixin.qq.com/secapi/pay/profitsharing", WxUtils.mapToXml(param)); - // 请求分账返回的结果 - ResultProfitSharing resultProfitSharing = XmlUtil.getObjectFromXML(resultXmL, ResultProfitSharing.class); - return ResponseMsgUtil.success(resultProfitSharing); - /* HighProfitSharingRecord sharingRecord = new HighProfitSharingRecord(); - sharingRecord.setOutOrderNo(resultProfitSharing.getOut_order_no()); - sharingRecord.setTransactionId(resultProfitSharing.getTransaction_id()); - sharingRecord.setOrderId(resultProfitSharing.getOrder_id()); - sharingRecord.setStatus(resultProfitSharing.getResult_code()); - sharingRecord.setPrice(amount); - sharingRecord.setCreateTime(new Date()); - sharingRecord.setContent(resultXmL); - highProfitSharingRecordService.insert(sharingRecord);*/ + List orderList = highOrderService.getTest(); + for (HighOrder highOrder : orderList) { + HighOrder order = highOrderService.getOrderById(highOrder.getId()); + BigDecimal rake = new BigDecimal("0.01"); + // 计算微信收取的手续费 支付金额 * 0.002 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 + BigDecimal wxHandlingFee = order.getPayPrice().multiply(new BigDecimal("0.002")).setScale(2,BigDecimal.ROUND_HALF_DOWN); + BigDecimal price = order.getPayPrice().subtract(wxHandlingFee); + + Map param = new LinkedHashMap<>(); + param.put("appid", "wx637bd6f7314daa46"); + param.put("mch_id", "1289663601"); + param.put("sub_mch_id" , "1609882817"); // 个体户黎杨珍 + param.put("transaction_id" , highOrder.getPaySerialNo()); + param.put("out_order_no" , order.getOrderNo()); + param.put("nonce_str" , WxUtils.makeNonStr()); + + // 计算分账金额 手续费后的价格 * 0.01 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 + BigDecimal porofitSharingAmount = price.multiply(rake).setScale(2,BigDecimal.ROUND_DOWN); + + List> receiversList = new ArrayList<>(); + Map receiversMap = new LinkedHashMap<>(); + receiversMap.put("type", "MERCHANT_ID"); + receiversMap.put("account", "1603942866"); + receiversMap.put("amount", porofitSharingAmount.multiply(new BigDecimal("100")).intValue()); + receiversMap.put("description", "分给商户【惠昕石化】"); + receiversList.add(receiversMap); + param.put("receivers" , JSONObject.toJSONString(receiversList)); + String signStr = WxUtils.generateSignature(param, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256); + param.put("sign" , signStr); + String resultXmL = this.doRefundRequest(param.get("mch_id"),null, WxUtils.mapToXml(param)); + + // 请求分账返回的结果 + ResultProfitSharing resultProfitSharing = XmlUtil.getObjectFromXML(resultXmL, ResultProfitSharing.class); + + HighProfitSharingRecord sharingRecord = new HighProfitSharingRecord(); + sharingRecord.setOutOrderNo(resultProfitSharing.getOut_order_no()); + sharingRecord.setTransactionId(resultProfitSharing.getTransaction_id()); + sharingRecord.setOrderId(resultProfitSharing.getOrder_id()); + sharingRecord.setStatus(resultProfitSharing.getResult_code()); + sharingRecord.setPrice(porofitSharingAmount); + sharingRecord.setCreateTime(new Date()); + sharingRecord.setContent(resultXmL); + highProfitSharingRecordService.insert(sharingRecord); + } + + return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { log.error("CmsContentController --> getCorporateAdvertising() error!", e); @@ -456,7 +462,7 @@ public class OutRechargeOrderController { //小程序退款需要调用双向证书的认证 CloseableHttpClient httpClient = goodsOrderService.readCertificate(mchId); try { - HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/refund"); // 设置响应头信息 + HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/profitsharing"); // 设置响应头信息 httpost.addHeader("Connection", "keep-alive"); httpost.addHeader("Accept", "*/*"); httpost.addHeader("Content-Type", "text/xml"); diff --git a/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java b/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java index 9199c72e..86f12d6c 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java @@ -326,7 +326,7 @@ public class OrderController { weChatPayReqInfo.setNotify_url(SysConst.getSysConfig().getNotifyUrl()); //通知url weChatPayReqInfo.setTrade_type("JSAPI"); //交易类型 weChatPayReqInfo.setAttach(map.get("orderScene").toString()); - weChatPayReqInfo.setProfit_sharing("Y"); + weChatPayReqInfo.setProfit_sharing("N"); //附加数据,区分订单类型 Map payMap = new HashMap<>(); diff --git a/hai-cweb/src/main/resources/dev/application.yml b/hai-cweb/src/main/resources/dev/application.yml index dcf08e5d..e2b5f630 100644 --- a/hai-cweb/src/main/resources/dev/application.yml +++ b/hai-cweb/src/main/resources/dev/application.yml @@ -9,7 +9,7 @@ debug: false #datasource数据源设置 spring: datasource: - url: jdbc:mysql://139.159.177.244:3306/hsg_pre?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://139.159.177.244:3306/hfkj?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: HF123456. type: com.alibaba.druid.pool.DruidDataSource @@ -27,6 +27,18 @@ spring: testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 + redis: + database: 0 + host: 139.159.177.244 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 #配置日期返回至前台为时间戳 jackson: serialization: diff --git a/hai-cweb/src/main/resources/pre/application.yml b/hai-cweb/src/main/resources/pre/application.yml new file mode 100644 index 00000000..2145d8a7 --- /dev/null +++ b/hai-cweb/src/main/resources/pre/application.yml @@ -0,0 +1,56 @@ +server: + port: 9301 + servlet: + context-path: /crest + +#配置是否为debug模式,debug模式下,不开启权限校验 +debug: false + +#datasource数据源设置 +spring: + datasource: + url: jdbc:mysql://122.9.135.148:3306/hsg?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false + username: root + password: HF123456. + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.jdbc.Driver + filters: stat + maxActive: 10 + initialSize: 5 + maxWait: 60000 + minIdle: 5 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + redis: + database: 0 + host: 139.159.177.244 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 + #配置日期返回至前台为时间戳 + jackson: + serialization: + write-dates-as-timestamps: true +mybatis: + mapperLocations: + - classpath*:sqlmap*/*.xml + type-aliases-package: + org.springboot.sample.entity + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql diff --git a/hai-cweb/src/main/resources/pre/config.properties b/hai-cweb/src/main/resources/pre/config.properties new file mode 100644 index 00000000..6316dbef --- /dev/null +++ b/hai-cweb/src/main/resources/pre/config.properties @@ -0,0 +1,19 @@ +# \u03A2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +wxAppId=wx8d49e2f83025229d +wxAppSecret=d8d6dcaef77d3b659258a01b5ddba5df + +wxH5AppId=wxa075e8509802f826 +wxH5AppSecret=0e606fc1378d35e359fcf3f15570b2c5 + +wxApiKey=Skufk5oi85wDFGl888i6wsRSTkdd5df5 +wxMchAppId=wx637bd6f7314daa46 +wxMchId=1289663601 +wxSubAppId=wx8d49e2f83025229d +wxSubMchId=1609882817 +wxUnifiedOrderUrl=https://api.mch.weixin.qq.com/pay/unifiedorder + +notifyUrl=https://hsgcs.dctpay.com/crest/wechatpay/notify + +fileUrl=/home/project/hsg/filesystem +cmsPath=/home/project/hsg/filesystem/cmsPath +couponCodePath=/home/project/hsg/filesystem/couponCode diff --git a/hai-cweb/src/main/resources/pre/logback.xml b/hai-cweb/src/main/resources/pre/logback.xml new file mode 100644 index 00000000..a7602e3d --- /dev/null +++ b/hai-cweb/src/main/resources/pre/logback.xml @@ -0,0 +1,72 @@ + + + + + %d %p (%file:%line\)- %m%n + UTF-8 + + + + log/base.log + + log/base.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + log/dao.log + + log/dao.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + log/error.log + + log/error.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + + + + + + + + + + + + diff --git a/hai-cweb/src/main/resources/prod-9401/application.yml b/hai-cweb/src/main/resources/prod-9401/application.yml new file mode 100644 index 00000000..da59540e --- /dev/null +++ b/hai-cweb/src/main/resources/prod-9401/application.yml @@ -0,0 +1,74 @@ +server: + port: 9401 + servlet: + context-path: /crest + +#配置是否为debug模式,debug模式下,不开启权限校验 +debug: false + +#datasource数据源设置 +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/hsg?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: HF123456. + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.jdbc.Driver + filters: stat + maxActive: 10 + initialSize: 5 + maxWait: 60000 + minIdle: 5 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + redis: + database: 0 + host: 127.0.0.1 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 + #thymelea模板配置 + thymeleaf: + prefix: classpath:/templates/ + suffix: .html + mode: HTML5 + encoding: UTF-8 + #热部署文件,页面不产生缓存,及时更新 + cache: false + #配置日期返回至前台为时间戳 + jackson: + serialization: + write-dates-as-timestamps: true + + + thymeleaf: + cache: false + prefix: classpath:/templates/ + suffix: .html + encoding: UTF-8 + content-type: text/html + mode: HTML5 + +mybatis: + mapperLocations: + - classpath*:sqlmap*/*.xml + type-aliases-package: + org.springboot.sample.entity + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql diff --git a/hai-cweb/src/main/resources/prod-9401/config.properties b/hai-cweb/src/main/resources/prod-9401/config.properties new file mode 100644 index 00000000..71f142a9 --- /dev/null +++ b/hai-cweb/src/main/resources/prod-9401/config.properties @@ -0,0 +1,19 @@ +# ΢������ +wxAppId=wx8d49e2f83025229d +wxAppSecret=d8d6dcaef77d3b659258a01b5ddba5df + +wxH5AppId=wxa075e8509802f826 +wxH5AppSecret=0e606fc1378d35e359fcf3f15570b2c5 + +wxApiKey=Skufk5oi85wDFGl888i6wsRSTkdd5df5 +wxMchAppId=wx637bd6f7314daa46 +wxMchId=1289663601 +wxSubAppId=wx8d49e2f83025229d +wxSubMchId=1609882817 +wxUnifiedOrderUrl=https://api.mch.weixin.qq.com/pay/unifiedorder + +notifyUrl=https://hsg.dctpay.com/crest/wechatpay/notify + +fileUrl=/home/project/hsg/filesystem +cmsPath=/home/project/hsg/filesystem/cmsPath +couponCodePath=/home/project/hsg/filesystem/couponCode diff --git a/hai-cweb/src/main/resources/prod-9401/logback.xml b/hai-cweb/src/main/resources/prod-9401/logback.xml new file mode 100644 index 00000000..516350df --- /dev/null +++ b/hai-cweb/src/main/resources/prod-9401/logback.xml @@ -0,0 +1,72 @@ + + + + + %d %p (%file:%line\)- %m%n + UTF-8 + + + + log/base.log + + log/base.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + log/dao.log + + log/dao.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + log/error.log + + log/error.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + + + + + + + + + + + + diff --git a/hai-cweb/src/main/resources/prod/application.yml b/hai-cweb/src/main/resources/prod/application.yml index 1d6e07f5..084041b4 100644 --- a/hai-cweb/src/main/resources/prod/application.yml +++ b/hai-cweb/src/main/resources/prod/application.yml @@ -27,6 +27,19 @@ spring: testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 + + redis: + database: 0 + host: 127.0.0.1 + port: 36379 + password: HF123456.Redis + timeout: 1000 + jedis: + pool: + max-active: 20 + max-wait: -1 + max-idle: 10 + min-idle: 0 #thymelea模板配置 thymeleaf: prefix: classpath:/templates/ diff --git a/hai-service/pom.xml b/hai-service/pom.xml index 70a6412b..4360200b 100644 --- a/hai-service/pom.xml +++ b/hai-service/pom.xml @@ -43,6 +43,10 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-data-redis + diff --git a/hai-service/src/main/java/com/hai/common/security/UserCenter.java b/hai-service/src/main/java/com/hai/common/security/UserCenter.java index 0916cc3c..5f5647fe 100644 --- a/hai-service/src/main/java/com/hai/common/security/UserCenter.java +++ b/hai-service/src/main/java/com/hai/common/security/UserCenter.java @@ -4,9 +4,11 @@ import com.fasterxml.jackson.core.JsonParseException; import com.hai.common.exception.ErrorCode; import com.hai.common.exception.ErrorHelp; import com.hai.common.exception.SysCode; +import com.hai.common.utils.RedisUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.http.Cookie; @@ -17,9 +19,12 @@ import javax.servlet.http.HttpServletResponse; public class UserCenter { private static Logger log = LoggerFactory.getLogger(UserCenter.class); - - private static final String COOKIE_FIELD = "_ida"; - private static final int EXPIRE = 86400 * 7;//过期时间为24小时 * 7天 + + @Autowired + private RedisUtil redisUtil; + + private final String COOKIE_FIELD = "_ida"; + private final int EXPIRE = 3600;//cookie过期时间为1小时,3600秒 /** * 判断用户是否登录,并且不能单个用户同时登录 @@ -27,7 +32,7 @@ public class UserCenter { * @return boolean * @throws Exception */ - public static boolean isLogin(HttpServletRequest request){ + public boolean isLogin(HttpServletRequest request){ String token = request.getHeader("Authorization"); if(StringUtils.isBlank(token)){ Cookie cookie = CookieUtil.getCookieByName(request, COOKIE_FIELD); @@ -39,11 +44,10 @@ public class UserCenter { return false; } try { -// String value = AESEncodeUtil.aesDecrypt(token); if (!StringUtils.isEmpty(token)) { - SessionObject cacheStr = LoginCache.getData(token); + SessionObject cacheStr = (SessionObject)redisUtil.get(token); if (cacheStr != null) { - LoginCache.setData(token, cacheStr, EXPIRE);//刷新缓存 + redisUtil.expire(token,EXPIRE); return true; } } @@ -64,17 +68,15 @@ public class UserCenter { * @return: boolean * @throws */ - public static boolean isTokenLogin(String token){ + public boolean isTokenLogin(String token){ try { -// String value = AESEncodeUtil.aesDecrypt(token); -// log.error("------------------------------" + value); + log.error("------------------------------" + token); if(!StringUtils.isEmpty(token)){ - SessionObject cacheStr = LoginCache.getData(token); - if(cacheStr != null){ - log.error("======================" + cacheStr); - LoginCache.setData(token, cacheStr, EXPIRE);//刷新缓存 - return true; - } + SessionObject cacheStr = (SessionObject)redisUtil.get(token); + if (cacheStr != null) { + redisUtil.expire(token,EXPIRE); + return true; + } } return false; } catch (Exception e) { @@ -83,36 +85,38 @@ public class UserCenter { } } - public static String read(HttpServletRequest request) throws Exception{ + public String read(HttpServletRequest request){ Cookie cookie = CookieUtil.getCookieByName(request, COOKIE_FIELD); if(cookie == null){ return null; } - return cookie.getValue(); + return cookie.getValue(); } - public static SessionObject getSessionObject(HttpServletRequest request) throws Exception { + public SessionObject getSessionObject(HttpServletRequest request) throws Exception{ String token = request.getHeader("Authorization"); if (StringUtils.isBlank(token)) { if (StringUtils.isNotBlank(read(request))) { token = read(request); } } - if (LoginCache.getData(token) == null) { + if (redisUtil.get(token) == null) { throw ErrorHelp.genException(SysCode.System, ErrorCode.USE_VISIT_ILLEGAL, ""); } - return LoginCache.getData(token); + return (SessionObject) redisUtil.get(token); } + /** * @param request * @param response * @param response - * @param seObj + * @param user * @throws Exception */ - public static void save(HttpServletRequest request, HttpServletResponse response, SessionObject seObj) throws Exception{ - CookieUtil.saveCookie(request, response, COOKIE_FIELD, seObj.getUniqueCode(), EXPIRE); - LoginCache.setData(seObj.getUniqueCode(), seObj, EXPIRE); + public void save(HttpServletRequest request, HttpServletResponse response, SessionObject seObj) throws Exception{ + String aesStr = AESEncodeUtil.aesEncrypt(seObj.getUniqueCode()); + CookieUtil.saveCookie(request, response, COOKIE_FIELD, aesStr, EXPIRE); + redisUtil.set(seObj.getUniqueCode(), seObj, EXPIRE); } /** @@ -122,7 +126,7 @@ public class UserCenter { * @param response * @throws Exception */ - public static void refreshCookie(HttpServletRequest request, HttpServletResponse response) throws Exception{ + public void refreshCookie(HttpServletRequest request, HttpServletResponse response) throws Exception{ CookieUtil.refreshCookie(request, response, COOKIE_FIELD, EXPIRE); } @@ -131,10 +135,22 @@ public class UserCenter { * @param response * @throws Exception */ - public static void remove(HttpServletRequest request, HttpServletResponse response) throws Exception{ + public void remove(HttpServletRequest request, HttpServletResponse response) { String token = request.getHeader("Authorization"); - LoginCache.clear(AESEncodeUtil.aesDecrypt(token)); - CookieUtil.delCookie(response, COOKIE_FIELD); + if(StringUtils.isNotBlank(token)){ + //通过token方式登录 + redisUtil.del(token); + CookieUtil.delCookie(response, COOKIE_FIELD); + }else{ + String jo = read(request); + if(StringUtils.isNotBlank(jo)){ + redisUtil.del(jo); + CookieUtil.delCookie(response, COOKIE_FIELD); + } + } + + + } } diff --git a/hai-service/src/main/java/com/hai/common/utils/RedisUtil.java b/hai-service/src/main/java/com/hai/common/utils/RedisUtil.java new file mode 100644 index 00000000..86dfc9a0 --- /dev/null +++ b/hai-service/src/main/java/com/hai/common/utils/RedisUtil.java @@ -0,0 +1,533 @@ +package com.hai.common.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + + public RedisUtil(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 指定缓存失效时间 + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key,long time){ + try { + if(time>0){ + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key){ + return redisTemplate.getExpire(key,TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key){ + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String ... key){ + if(key!=null&&key.length>0){ + if(key.length==1){ + redisTemplate.delete(key[0]); + }else{ + redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + //============================String============================= + /** + * 普通缓存获取 + * @param key 键 + * @return 值 + */ + public Object get(String key){ + return key==null?null:redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key,Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 普通缓存放入并设置时间 + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key,Object value,long time){ + try { + if(time>0){ + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + }else{ + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * @param key 键 + * @param delta 要增加几(大于0) + * @return + */ + public long incr(String key, long delta){ + if(delta<0){ + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * @param key 键 + * @param delta 要减少几(小于0) + * @return + */ + public long decr(String key, long delta){ + if(delta<0){ + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + //================================Map================================= + /** + * HashGet + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key,String item){ + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key){ + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map){ + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time){ + try { + redisTemplate.opsForHash().putAll(key, map); + if(time>0){ + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key,String item,Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key,String item,Object value,long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if(time>0){ + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item){ + redisTemplate.opsForHash().delete(key,item); + } + + /** + * 判断hash表中是否有该项的值 + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item){ + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item,double by){ + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item,double by){ + return redisTemplate.opsForHash().increment(key, item,-by); + } + + //============================set============================= + /** + * 根据key获取Set中的所有值 + * @param key 键 + * @return + */ + public Set sGet(String key){ + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key,Object value){ + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object...values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key,long time,Object...values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if(time>0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * @param key 键 + * @return + */ + public long sGetSetSize(String key){ + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object ...values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + //===============================list================================= + + /** + * 获取list缓存的内容 + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end){ + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * @param key 键 + * @return + */ + public long lGetListSize(String key){ + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key,long index){ + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index,Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key,long count,Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } +} diff --git a/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java b/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java index 01bf2640..3b23e503 100644 --- a/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java +++ b/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java @@ -491,8 +491,45 @@ public interface HighOrderMapperExt { @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR) }) List selectAlreadyPaidCinemaOrder(); - + + @Select("select a.id,a.order_no,TRIM(BOTH '\"' FROM b.transaction_id) pay_serial_no from \n" + + "(select id,order_no from high_order where order_status = 5 and create_time >= '2021-06-21 00:00:00') a\n" + + "LEFT JOIN (select JSON_EXTRACT(body_info,'$.out_trade_no') out_trade_no,JSON_EXTRACT(body_info,'$.transaction_id') transaction_id from high_pay_record where create_time >= '2021-06-21 00:00:00' and res_type = 2 GROUP BY JSON_EXTRACT(body_info,'$.out_trade_no')) b on a.order_no = b.out_trade_no where b.out_trade_no is not null") + @Results({ + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="order_no", property="orderNo", jdbcType=JdbcType.VARCHAR), + @Result(column="mem_discount_id", property="memDiscountId", jdbcType=JdbcType.BIGINT), + @Result(column="mem_discount_name", property="memDiscountName", jdbcType=JdbcType.VARCHAR), + @Result(column="mem_id", property="memId", jdbcType=JdbcType.BIGINT), + @Result(column="mem_name", property="memName", jdbcType=JdbcType.VARCHAR), + @Result(column="mem_phone", property="memPhone", jdbcType=JdbcType.VARCHAR), + @Result(column="pay_model", property="payModel", jdbcType=JdbcType.INTEGER), + @Result(column="pay_type", property="payType", jdbcType=JdbcType.INTEGER), + @Result(column="pay_gold", property="payGold", jdbcType=JdbcType.INTEGER), + @Result(column="pay_price", property="payPrice", jdbcType=JdbcType.DECIMAL), + @Result(column="pay_real_price", property="payRealPrice", jdbcType=JdbcType.DECIMAL), + @Result(column="pay_serial_no", property="paySerialNo", jdbcType=JdbcType.VARCHAR), + @Result(column="deduction_price", property="deductionPrice", jdbcType=JdbcType.DECIMAL), + @Result(column="order_status", property="orderStatus", jdbcType=JdbcType.INTEGER), + @Result(column="total_price", property="totalPrice", jdbcType=JdbcType.DECIMAL), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="pay_time", property="payTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="cancel_time", property="cancelTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="cancel_remarks", property="cancelRemarks", jdbcType=JdbcType.VARCHAR), + @Result(column="finish_time", property="finishTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="remarks", property="remarks", jdbcType=JdbcType.VARCHAR), + @Result(column="refund_time", property="refundTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="refund_price", property="refundPrice", jdbcType=JdbcType.DECIMAL), + @Result(column="refund_content", property="refundContent", jdbcType=JdbcType.VARCHAR), + @Result(column="refusal_refund_content", property="refusalRefundContent", jdbcType=JdbcType.VARCHAR), + @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), + @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR), + @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR) + }) + List selectTest(); + @Select({"select a.id orderId,b.id childOrderId from high_order a,high_child_order b where a.id = b.order_id and b.goods_type = 3 and a.order_status = 2 and TIMESTAMPDIFF(MINUTE,a.pay_time,SYSDATE()) > 60*24 GROUP BY b.id"}) List> selectFinishGasOrder(); + } diff --git a/hai-service/src/main/java/com/hai/enum_type/RedisHash.java b/hai-service/src/main/java/com/hai/enum_type/RedisHash.java new file mode 100644 index 00000000..93eeab92 --- /dev/null +++ b/hai-service/src/main/java/com/hai/enum_type/RedisHash.java @@ -0,0 +1,35 @@ +package com.hai.enum_type; + +/** + * redis Hash分类 + */ +public enum RedisHash { + + WX_USER("WX_USER", "微信用户"), + ; + + private String type; + + private String name; + + RedisHash(String type,String name) { + this.type = type; + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/hai-service/src/main/java/com/hai/service/HighOrderService.java b/hai-service/src/main/java/com/hai/service/HighOrderService.java index 0c0b199b..23a404ef 100644 --- a/hai-service/src/main/java/com/hai/service/HighOrderService.java +++ b/hai-service/src/main/java/com/hai/service/HighOrderService.java @@ -210,6 +210,9 @@ public interface HighOrderService { */ List getAlreadyPaidCinemaOrder(); + + List getTest(); + /** * 查询团油超过支付时间24小时订单 * @return diff --git a/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java index 26434bf9..01737395 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java @@ -663,6 +663,11 @@ public class HighOrderServiceImpl implements HighOrderService { return highOrderMapperExt.selectAlreadyPaidCinemaOrder(); } + @Override + public List getTest() { + return highOrderMapperExt.selectTest(); + } + @Override public List> getFinishGasOrder() { diff --git a/hai-service/src/main/resources/pre/commonConfig.properties b/hai-service/src/main/resources/pre/commonConfig.properties new file mode 100644 index 00000000..66282e2f --- /dev/null +++ b/hai-service/src/main/resources/pre/commonConfig.properties @@ -0,0 +1,22 @@ +tuanYouUrl=https://test02-motorcade-hcs.czb365.com +tuanYouAppKey=208241666939552 +tuanYouAppSecret=adecc3cff077834cb8632c8ab3bec0e6 +tuanYouDieselAccount=9b115eao4400 +tuanYouGasolineAccount=9b115e5g4400 + +qinzhuUrl=https://live-test.qianzhu8.com +qinzhuHtmlUrl=https://m-test.qianzhu8.com +qinzhuPlatformId=10376 +qinzhuSecret=ktxb49sh2jfhgn8g +qianzhuOrderNotify=https://hsg.dctpay.com/crest/qianzhu/orderNotify + +huiliantongUrl=https://gzapitest.deepermobile.com.cn:441 +huiliantongAppNo=guizhouhltcs +huiliantongAppkey=g%2BNnjR54YSUWM2iKg%2Fd82A9x9hg2kYV7 +huiliantongAppsecret=FA28E95ACABFA4B2B8E25857437B07F1 + +wx_cert=/home/project/wx_cert/ + +TelApiKey=2d01f6b520254b1a80f6b167832cea18 +TelApiSecret=d11ee9b41e014a039f030e53ae6f5295 +TelMemberId=d13091df65d64aafbf0f35d2093157b7 \ No newline at end of file diff --git a/hai-service/src/main/resources/prod-9401/commonConfig.properties b/hai-service/src/main/resources/prod-9401/commonConfig.properties new file mode 100644 index 00000000..e786a840 --- /dev/null +++ b/hai-service/src/main/resources/prod-9401/commonConfig.properties @@ -0,0 +1,22 @@ +tuanYouUrl=https://hcs.czb365.com +tuanYouAppKey=210091174083104 +tuanYouAppSecret=f9811df6791d309bf48f4a8db9edaa45 +tuanYouDieselAccount=9hp52qgg4400 +tuanYouGasolineAccount=9hp52qf04400 + +qinzhuUrl=https://live.qianzhu8.com +qinzhuHtmlUrl=https://qz.dctpay.com +qinzhuPlatformId=10458 +qinzhuSecret=nnl3gg4ss0pka11t +qianzhuOrderNotify=https://hsg.dctpay.com/crest/qianzhu/orderNotify + +huiliantongUrl=https://gzapitest.deepermobile.com.cn:441 +huiliantongAppNo=guizhouhltcs +huiliantongAppkey=g%2BNnjR54YSUWM2iKg%2Fd82A9x9hg2kYV7 +huiliantongAppsecret=FA28E95ACABFA4B2B8E25857437B07F1 + +wx_cert=/home/project/wx_cert/ + +TelApiKey=2d01f6b520254b1a80f6b167832cea18 +TelApiSecret=d11ee9b41e014a039f030e53ae6f5295 +TelMemberId=d13091df65d64aafbf0f35d2093157b7 diff --git a/hai-service/src/main/resources/prod/commonConfig.properties b/hai-service/src/main/resources/prod/commonConfig.properties index 82c85677..e786a840 100644 --- a/hai-service/src/main/resources/prod/commonConfig.properties +++ b/hai-service/src/main/resources/prod/commonConfig.properties @@ -10,6 +10,11 @@ qinzhuPlatformId=10458 qinzhuSecret=nnl3gg4ss0pka11t qianzhuOrderNotify=https://hsg.dctpay.com/crest/qianzhu/orderNotify +huiliantongUrl=https://gzapitest.deepermobile.com.cn:441 +huiliantongAppNo=guizhouhltcs +huiliantongAppkey=g%2BNnjR54YSUWM2iKg%2Fd82A9x9hg2kYV7 +huiliantongAppsecret=FA28E95ACABFA4B2B8E25857437B07F1 + wx_cert=/home/project/wx_cert/ TelApiKey=2d01f6b520254b1a80f6b167832cea18