记得上下班打卡 | git大法好,push需谨慎

Commit 89388ab8 authored by 胡佳晨's avatar 胡佳晨

Merge branch 'master' into dev_surplus_redis

parents 6e2b2596 a9ff5bb6
......@@ -23,6 +23,15 @@ public interface IAdamUserService {
*/
AdamUserInfoVo register(String mobile);
/**
* 手机号注册
*
* @param mobile
* @param isComplete 是否标记为已完善状态[0-未完善|1-已完善]
* @return AdamUserInfoVo
*/
AdamUserInfoVo register(String mobile, int isComplete);
/**
* 第三方账号注册
*
......
......@@ -7,6 +7,7 @@ import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.kylin.service.impl.KylinOrderRefundsServiceImpl;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
......@@ -91,7 +92,9 @@ public class KylinOrderRefundAdminController extends BaseController {
@ResponseBody
public AjaxResult refundApply(RefundApplyParam refundApplyParam) {
try {
ResponseDto res = kylinOrderRefundsServiceImpl.refundApply(refundApplyParam);
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
ResponseDto res = kylinOrderRefundsServiceImpl.refundApply(refundApplyParam, authId, authName);
if (res.isSuccess()) {
return success();
} else {
......@@ -109,7 +112,9 @@ public class KylinOrderRefundAdminController extends BaseController {
public AjaxResult refundCancel(RefundApplyParam refundApplyParam) {
try {
refundApplyParam.setType("cancel");
ResponseDto res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
ResponseDto res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
if (res.isSuccess()) {
return success();
} else {
......@@ -127,7 +132,9 @@ public class KylinOrderRefundAdminController extends BaseController {
public AjaxResult refundReapply(RefundApplyParam refundApplyParam) {
try {
refundApplyParam.setType("reapply");
ResponseDto res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
ResponseDto res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
if (res.isSuccess()) {
return success();
} else {
......@@ -147,13 +154,15 @@ public class KylinOrderRefundAdminController extends BaseController {
try {
ResponseDto res = null;
Integer status = refundApplyParam.getStatus();
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
if (status == KylinTableStatusConst.ORDER_REFUND_STATUS_APPROVED) { // 通过
refundApplyParam.setType("approved");
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
}
if (status == KylinTableStatusConst.ORDER_REFUND_STATUS_REJECT) { // 驳回
refundApplyParam.setType("reject");
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
}
if (res.isSuccess()) {
return success();
......@@ -174,13 +183,15 @@ public class KylinOrderRefundAdminController extends BaseController {
try {
ResponseDto res = null;
Integer status = refundApplyParam.getStatus();
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
if (status == KylinTableStatusConst.ORDER_REFUND_STATUS_UNFILLED) { // 通过
refundApplyParam.setType("unfilled");
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
}
if (status == KylinTableStatusConst.ORDER_REFUND_STATUS_REFUSE) { // 驳回
refundApplyParam.setType("refuse");
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
}
if (res.isSuccess()) {
return success();
......
......@@ -89,7 +89,7 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
@Autowired
private MongoConverter mongoConverter;
public ResponseDto refundApply(RefundApplyParam refundApplyParam) {
public ResponseDto refundApply(RefundApplyParam refundApplyParam, String authId, String authName) {
String orderTicketsId = refundApplyParam.getOrderTicketsId();
List<String> ticketEntityIds = refundApplyParam.getTicketEntityIds();
List<BigDecimal> entitiesPrice = refundApplyParam.getEntitiesPrice();
......@@ -201,6 +201,7 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
refundApplyParam, orderInfo, orderTicketsId,
RefundPriceExpress,
ticketEntityIds, realRefundPriceList
, authId, authName
);
HashMap<String, Object> map = new HashMap<>();
......@@ -226,7 +227,7 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
);
}*/
public ResponseDto refundCheckStatus(RefundApplyParam refundApplyParam) {
public ResponseDto refundCheckStatus(RefundApplyParam refundApplyParam, String authId, String authName) {
String type = refundApplyParam.getType();
List<String> orderRefundsIdList = refundApplyParam.getIds();
if (orderRefundsIdList.size() <= 0) {
......@@ -279,23 +280,21 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
res = kylinRefundsStatusServiceImpl.orderTicketRefundCancel(refundList, true);
break;
case "reapply":
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, "", "");
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, "", "", authId, authName);
break;
case "approved":
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, reject, "");
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, reject, "", authId, authName);
break;
case "reject":
boolean cancelRes = kylinRefundsStatusServiceImpl.orderTicketRefundCancel(refundList, false);
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, reject, "");
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, reject, "", authId, authName);
break;
case "unfilled":
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
kylinRefundsStatusServiceImpl.orderTicketRefundUnfilled(refundList, refuse, authId, authName);
res = true;
break;
case "refuse":
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, "", refuse);
res = kylinRefundsStatusServiceImpl.orderRefundChangeStatus(refundList, type, "", refuse, authId, authName);
break;
}
if (res) {
......
......@@ -654,27 +654,31 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
//找到所有ticketId
List<TicketTimesTicketCreatePartnerVo> timesVoList = vo.getTicketTimes();
for (TicketTimesTicketCreatePartnerVo timesVo : timesVoList) {
List<String> orderTicketRedisIdList = new ArrayList<>();
List<String> userRedisIdList = new ArrayList<>();
List<String> orderTicketIdList = new ArrayList<>();
List<OrderIdsDao> orderIdsDaoList = kylinOrderTicketsMapper.getOrderUserIdByTimesId(timesVo.getTicketTimesId());
for (OrderIdsDao item : orderIdsDaoList) {
orderTicketRedisIdList.add(KylinRedisConst.ORDER + item.getOrderTicketsId());
userRedisIdList.add(KylinRedisConst.ORDER_LIST + item.getUserId());
orderTicketIdList.add(item.getOrderTicketsId());
}
HashMap<String, Object> mapMongo = new HashMap<>();
mapMongo.put("useStart", timesVo.getUseStart());
long time1 = System.currentTimeMillis();
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("orderTicketsId").in(orderTicketIdList)).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(mapMongo))
);
log.debug("修改场次相关 mongo time -> " + (System.currentTimeMillis() - time1) + " ms ");
for (KylinTicketPartnerVo ticketVo : timesVo.getTicket()){
List<String> orderTicketRedisIdList = new ArrayList<>();
List<String> userRedisIdList = new ArrayList<>();
List<String> orderTicketIdList = new ArrayList<>();
log.info("修改场次相关 mysql ticketId -> " + ticketVo.getTicketsId());
List<OrderIdsDao> orderIdsDaoList = kylinOrderTicketsMapper.getOrderUserIdByTimesId(ticketVo.getTicketsId());
log.info("修改场次相关 mysql data -> " + orderIdsDaoList.size());
for (OrderIdsDao item : orderIdsDaoList) {
orderTicketRedisIdList.add(KylinRedisConst.ORDER + item.getOrderTicketsId());
userRedisIdList.add(KylinRedisConst.ORDER_LIST + item.getUserId());
orderTicketIdList.add(item.getOrderTicketsId());
}
HashMap<String, Object> mapMongo = new HashMap<>();
mapMongo.put("useStart", ticketVo.getUseStart());
long time1 = System.currentTimeMillis();
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("orderTicketsId").in(orderTicketIdList)).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(mapMongo))
);
log.debug("修改场次相关 mongo time -> " + (System.currentTimeMillis() - time1) + " ms ");
time1 = System.currentTimeMillis();
dataUtils.delOrderIdUserIdRedis(orderTicketRedisIdList, userRedisIdList);
log.debug("修改场次相关 redis time -> " + (System.currentTimeMillis() - time1) + " ms ");
time1 = System.currentTimeMillis();
dataUtils.delOrderIdUserIdRedis(orderTicketRedisIdList, userRedisIdList);
log.debug("修改场次相关 redis time -> " + (System.currentTimeMillis() - time1) + " ms ");
}
}
}
}
......@@ -50,7 +50,7 @@ public class KylinRefundExecuteServiceImpl {
private KylinOrderRefundsServiceImpl kylinOrderRefundsServiceImpl;
@Async
public void refundBatchApply(String targetId, String refundBatchId, String reason) {
public void refundBatchApply(String targetId, String refundBatchId, String reason, String authId, String authName) {
RefundApplyParam refundApplyParam = new RefundApplyParam();
int count;
int limitNum = 10;
......@@ -74,15 +74,19 @@ public class KylinRefundExecuteServiceImpl {
refundApplyParam.setRefundPriceExpress(order.getPriceExpress());
}
try {
ResponseDto res = kylinOrderRefundsServiceImpl.refundApply(refundApplyParam);
ResponseDto res = kylinOrderRefundsServiceImpl.refundApply(refundApplyParam, authId, authName);
} catch (Exception e) {
}
}
count = orderList.size();
KylinOrderTickets lastInfo = orderList.get(count - 1);
mid = lastInfo.getMid();
if (count > 0) {
KylinOrderTickets lastInfo = orderList.get(count - 1);
if (lastInfo != null) {
mid = lastInfo.getMid();
}
}
} while (count >= limitNum);
KylinOrderRefundBatches updateBatchData = new KylinOrderRefundBatches();
......@@ -95,7 +99,7 @@ public class KylinRefundExecuteServiceImpl {
}
@Async
public void refundBatchStatus(RefundBatchApplyParam refundBatchApplyParam, String type) {
public void refundBatchStatus(RefundBatchApplyParam refundBatchApplyParam, String type, String authId, String authName) {
String refundBatchId = refundBatchApplyParam.getRefundBatchId();
Integer status = refundBatchApplyParam.getRefundStatus();
// 处理查询订单状态
......@@ -150,7 +154,7 @@ public class KylinRefundExecuteServiceImpl {
refundApplyParam.setReject(refundBatchApplyParam.getReject());
}
try {
ResponseDto res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam);
ResponseDto res = kylinOrderRefundsServiceImpl.refundCheckStatus(refundApplyParam, authId, authName);
} catch (Exception e) {
}
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
......@@ -111,7 +112,9 @@ public class KylinRefundPerformancesAdminServiceImpl {
int resNum = kylinOrderRefundBatchesMapper.insert(createData);
if (resNum > 0) {
// 开始执行批量提交审核 分批处理退款申请
kylinRefundExecuteServiceImpl.refundBatchApply(targetId, refundBatchId, refundBatchApplyParam.getReason());
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
kylinRefundExecuteServiceImpl.refundBatchApply(targetId, refundBatchId, refundBatchApplyParam.getReason(), authId, authName);
return ResponseDto.success();
} else {
return ResponseDto.failure("操作失败");
......@@ -176,7 +179,9 @@ public class KylinRefundPerformancesAdminServiceImpl {
if (null != orderUpdateStatus) {
refundBatchApplyParam.setRefundStatus(orderUpdateStatus);
}
kylinRefundExecuteServiceImpl.refundBatchStatus(refundBatchApplyParam, type);
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
kylinRefundExecuteServiceImpl.refundBatchStatus(refundBatchApplyParam, type, authId, authName);
} catch (Exception e) {
return ResponseDto.failure("操作失败");
}
......
......@@ -95,13 +95,12 @@ public class KylinRefundsStatusServiceImpl {
RefundApplyParam refundApplyParam, KylinOrderTickets orderInfo, String orderTicketsId,
BigDecimal RefundPriceExpress,
List<String> ticketEntityIds, List<BigDecimal> entitiesPrice
, String authId, String authName
) {
if (CollectionUtil.isEmpty(ticketEntityIds)) {
return false;
}
// 基础数据
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
String reason = refundApplyParam.getReason();
String orderRefundBatchesId = refundApplyParam.getOrderRefundBatchesId();
// 本次退款票总金额
......@@ -334,9 +333,7 @@ public class KylinRefundsStatusServiceImpl {
return true;
}
public boolean orderRefundChangeStatus(List<KylinOrderRefunds> refundList, String type, String reject, String refuse) {
String authId = ShiroUtils.getUserId().toString();
String authName = ShiroUtils.getLoginName();
public boolean orderRefundChangeStatus(List<KylinOrderRefunds> refundList, String type, String reject, String refuse, String authId, String authName) {
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
switch (type) {
case "reapply":
......@@ -426,7 +423,8 @@ public class KylinRefundsStatusServiceImpl {
params.add("paymentType", oderInfo.getPaymentType());
params.add("price", String.valueOf(refundPrice));
params.add("priceTotal", String.valueOf(oderInfo.getPriceTotal()));
params.add("reason", refund.getReason());
// params.add("reason", refund.getReason());
params.add("reason", "按需退款");
/*String sign = StringUtils.Ksort(params);
sign = sign.concat("&key=").concat("R7tXY9smPQPG9Ku5yI0u6sfnlckmk04V");
......
......@@ -35,6 +35,14 @@ public class RandomUtil {
return getRandom().nextInt(max - min) + min;
}
/**
* 从[min,max)中随机一个整数
*/
public static int getRandomIntTime(int min, int max) {
Random random = new Random(System.currentTimeMillis()-(new Random().nextInt()));
return random.nextInt(max - min) + min;
}
/**
* 获取随机boolean型
*
......
......@@ -50,6 +50,7 @@ liquidnet:
pay: http://devdragon.zhengzai.tv/dragon/pay/dragonPay
check: http://devdragon.zhengzai.tv/dragon/pay/checkOrder
callback: http://devadam.zhengzai.tv/adam/member/order/callback
url: http://devadam.zhengzai.tv
kylin:
url-pay:
pay: http://devdragon.zhengzai.tv/dragon/pay/dragonPay
......@@ -66,6 +67,8 @@ liquidnet:
notifyUrl: https://devdragon.zhengzai.tv/dragon
platform:
url: http://devplatform.zhengzai.tv
sweet:
url: http://devsweet.zhengzai.tv
executor-main:
xxl:
admin:
......@@ -101,6 +104,9 @@ liquidnet:
secret: a1307fab0a5f2380086a7c636f7339ea
token: tftipg1427706847
aeskey: LwVpmpuOcl7Mi3mtfQgBol11MsmMCATIqbPgHrEpDzx
modernsky:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
applet:
zhengzai:
appid: wx4732efeaa2b08086
......
......@@ -13,9 +13,9 @@ liquidnet:
refresh-ttl: 525600
blacklist_grace_period: 5
mysql:
urlHostAndPort: zhengzai-test.rwlb.rds.aliyuncs.com:3306
username: zhengzai
password: $hAh4SGcDQ
urlHostAndPort: 39.106.122.201:3308
username: root
password: Zhengzai@rd2U#
rabbitmq:
host: 101.201.127.58
port: 5672
......@@ -50,7 +50,7 @@ liquidnet:
pay: http://testdragon.zhengzai.tv/dragon/pay/dragonPay
check: http://testdragon.zhengzai.tv/dragon/pay/checkOrder
callback: http://testadam.zhengzai.tv/adam/member/order/callback
url: http://devadam.zhengzai.tv/adam
url: http://testadam.zhengzai.tv
kylin:
url-pay:
pay: http://testdragon.zhengzai.tv/dragon/pay/dragonPay
......@@ -67,6 +67,8 @@ liquidnet:
notifyUrl: https://testdragon.zhengzai.tv/dragon
platform:
url: http://testplatform.zhengzai.tv
sweet:
url: http://testsweet.zhengzai.tv
executor-main:
xxl:
admin:
......@@ -102,6 +104,9 @@ liquidnet:
secret: a1307fab0a5f2380086a7c636f7339ea
token: tftipg1427706847
aeskey: LwVpmpuOcl7Mi3mtfQgBol11MsmMCATIqbPgHrEpDzx
modernsky:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
applet:
zhengzai:
appid: wx4732efeaa2b08086
......
......@@ -23,3 +23,4 @@ liquidnet:
logpath: /data/logs/job
url:
platform: ${liquidnet.service.platform.url}
sweet: ${liquidnet.service.sweet.url}
......@@ -23,3 +23,4 @@ liquidnet:
logpath: /data/logs/job
url:
platform: ${liquidnet.service.platform.url}
sweet: ${liquidnet.service.sweet.url}
......@@ -27,10 +27,5 @@ liquidnet:
endpoint: http://oss-cn-hangzhou.aliyuncs.com
accessKeyId: LTAI4FxrURzMvvu9reFgwY5o
accessKeySecret: Ym5tfAxOf2zX20MgjikLI3Wz3tlwVV
zhengzai-wechat:
appid: wx3498304dda39c5a1
secret: a1307fab0a5f2380086a7c636f7339ea
modernsky-wechat:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
#以下为spring各环境个性配置
......@@ -27,11 +27,5 @@ liquidnet:
endpoint: http://oss-cn-hangzhou.aliyuncs.com
accessKeyId: LTAI4FxrURzMvvu9reFgwY5o
accessKeySecret: Ym5tfAxOf2zX20MgjikLI3Wz3tlwVV
zhengzai-wechat:
appid: wx3498304dda39c5a1
secret: a1307fab0a5f2380086a7c636f7339ea
modernsky-wechat:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
#以下为spring各环境个性配置
......@@ -35,6 +35,6 @@ public interface KylinOrderTicketsMapper extends BaseMapper<KylinOrderTickets> {
List<KylinOrderTickets> getCanPlaceOrderList(@Param("performanceId") String performanceId, @Param("mid") int mid, @Param("limitNum") int limitNum);
List<OrderIdsDao> getOrderUserIdByTimesId(@Param("timeId") String timeId);
List<OrderIdsDao> getOrderUserIdByTimesId(@Param("ticketId") String ticketId);
}
......@@ -344,6 +344,6 @@
<select id="getOrderUserIdByTimesId" resultType="com.liquidnet.service.kylin.dao.OrderIdsDao">
select order_tickets_id,user_id from kylin_order_tickets as kot left join kylin_order_ticket_relations as kotr on kotr.order_id = kot.order_tickets_id
where time_id =#{timeId}
where ticket_id =#{ticketId}
</select>
</mapper>
package com.liquidnet.service.feign.sweet.task;
import com.liquidnet.service.base.ResponseDto;
import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
@Component
@FeignClient(name = "liquidnet-service-sweet",
contextId = "FeignSweetTaskClient", path = "",
url = "${liquidnet.service.sweet.url}",
// url = "",
fallback = FallbackFactory.Default.class)
public interface FeignSweetTaskClient {
@PostMapping("sweet/sweetData/drawLuck/add")
ResponseDto<Boolean> drawLuckAdd();
}
......@@ -2,26 +2,25 @@ package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.dto.vo.AdamRscPolymer01Vo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamUserService;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.UserPathDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.List;
@ApiSupport(order = 10080)
......@@ -33,8 +32,31 @@ import java.util.List;
public class AdamRscController {
@Autowired
AdamRdmService adamRdmService;
@Autowired
IAdamUserService adamUserService;
@ApiOperationSupport(order = 10)
@ApiOperation(value = "@API:手机号注册", notes = "用于小程序活动用户注册,不登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
})
@PostMapping(value = {"reg/mobile"})
public void registerByMobile(@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
@RequestParam String mobile) {
AdamUserInfoVo userInfoVo;
String uid = adamRdmService.getUidByMobile(mobile);
if (StringUtils.isEmpty(uid)) {
userInfoVo = adamUserService.register(mobile, 1);
log.info(UserPathDto.setData("注册", mobile, userInfoVo));
} else {
// userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
log.info(UserPathDto.setData("已注册", mobile, uid));
}
// return ResponseDto.success(userInfoVo);
}
@ApiOperationSupport(order = 20)
@ApiOperation(value = "@API:入场人列表", notes = "查取用户指定入场人列表")
@GetMapping("inquire/enters")
public ResponseDto<List<AdamEntersVo>> querysForDepth(@NotBlank(message = "入场人ID不能为空(多个ID以,分隔)") @RequestParam String entersIds,
......@@ -43,7 +65,7 @@ public class AdamRscController {
return CollectionUtils.isEmpty(vos) ? ResponseDto.failure(ErrorMapping.get("10105")) : ResponseDto.success(vos);
}
@ApiOperationSupport(order = 20)
@ApiOperationSupport(order = 30)
@ApiOperation(value = "@API:票务下单所需信息查询", notes = "包括是否会员、收货地址及入场人信息")
@GetMapping("inquire/of_buy_ticket")
public ResponseDto<AdamRscPolymer01Vo> queryForBuyTicket(@RequestParam(required = false) String addressId,
......
......@@ -79,12 +79,14 @@ public class AdamAddressesServiceImpl implements IAdamAddressesService {
List<AdamAddressesVo> vos = adamRdmService.getAddressesVoByUid(uid);
if (vos.size() > 1) {// 取消原默认
AdamAddressesVo defaultVo = queryDefault(vos, uid, false);
defaultVo.setIsDefault(false);
defaultVo.setUpdatedAt(now);
if (null != defaultVo) {
defaultVo.setIsDefault(false);
defaultVo.setUpdatedAt(now);
toMqObjs.add(new Object[]{false, now, defaultVo.getAddressesId()});
toMqObjs.add(new Object[]{false, now, defaultVo.getAddressesId()});
this.collectionProcess(vos, defaultVo.getAddressesId(), defaultVo);
this.collectionProcess(vos, defaultVo.getAddressesId(), defaultVo);
}
}
{// 设置新默认
AdamAddressesVo defaultVoAfter = adamRdmService.getAddressesVoByUidAddressesId(vos, addressesId);
......
......@@ -96,12 +96,14 @@ public class AdamEntersServiceImpl implements IAdamEntersService {
List<AdamEntersVo> vos = adamRdmService.getEntersVoByUid(uid);
if (vos.size() > 1) {// 取消原默认
AdamEntersVo defaultVo = queryDefault(vos, uid, false);
defaultVo.setIsDefault(false);
defaultVo.setUpdatedAt(now);
if (null != defaultVo) {
defaultVo.setIsDefault(false);
defaultVo.setUpdatedAt(now);
toMqObjs.add(new Object[]{false, now, defaultVo.getEntersId()});
toMqObjs.add(new Object[]{false, now, defaultVo.getEntersId()});
vos = this.collectionProcess(vos, defaultVo.getEntersId(), defaultVo);
this.collectionProcess(vos, defaultVo.getEntersId(), defaultVo);
}
}
{// 设置新默认
AdamEntersVo defaultVoAfter = adamRdmService.getEntersVoByUidEntersId(vos, entersId);
......@@ -110,7 +112,7 @@ public class AdamEntersServiceImpl implements IAdamEntersService {
toMqObjs.add(new Object[]{true, now, entersId});
vos = this.collectionProcess(vos, defaultVoAfter.getEntersId(), defaultVoAfter);
this.collectionProcess(vos, defaultVoAfter.getEntersId(), defaultVoAfter);
}
if (!CollectionUtils.isEmpty(toMqObjs)) {
long s = System.currentTimeMillis();
......
......@@ -61,6 +61,11 @@ public class AdamUserServiceImpl implements IAdamUserService {
@Override
// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public AdamUserInfoVo register(String mobile) {
return this.register(mobile, 0);
}
@Override
public AdamUserInfoVo register(String mobile, int isComplete) {
LocalDateTime now = LocalDateTime.now();
AdamUserInfoVo userInfoVo = AdamUserInfoVo.getNew();
......@@ -71,7 +76,7 @@ public class AdamUserServiceImpl implements IAdamUserService {
userInfoVo.setAvatar(AdamConst.DEF_URL_AVATAR);
userInfoVo.setBackground(AdamConst.DEF_URL_BACKGROUND);
userInfoVo.setCreateAt(now);
userInfoVo.setIsComplete(0);
userInfoVo.setIsComplete(isComplete);
userInfoVo.setQrCode("lN".concat(userInfoVo.getUid()).concat(RandomStringUtils.randomAlphanumeric(5).toUpperCase()));
long s = System.currentTimeMillis();
......@@ -83,13 +88,12 @@ public class AdamUserServiceImpl implements IAdamUserService {
LinkedList<Object[]> initUserObjs = CollectionUtil.linkedListObjectArr(),
initUserInfoObjs = CollectionUtil.linkedListObjectArr();
s = System.currentTimeMillis();
toMqSqls.add(SqlMapping.get("adam_user.add"));
initUserObjs.add(new Object[]{userInfoVo.getUid(), userInfoVo.getMobile(), userInfoVo.getState(), 0, now});
toMqSqls.add(SqlMapping.get("adam_user_info.add"));
initUserInfoObjs.add(new Object[]{userInfoVo.getUid(), userInfoVo.getNickname(), null, userInfoVo.getQrCode()});
log.debug("#SQL.GET耗时:{}ms", System.currentTimeMillis() - s);
s = System.currentTimeMillis();
queueUtils.sendMsgByRedis(MQConst.AdamQueue.SQL_UREGISTER.getKey(),
SqlMapping.gets(toMqSqls, initUserObjs, initUserInfoObjs)
);
......
package com.liquidnet.service.executor.main.handler;
import com.liquidnet.service.feign.sweet.task.FeignSweetTaskClient;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* XxlJob开发示例(Bean模式)
* <p>
* 开发步骤:
* 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"
* 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
* 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
*/
@Component
public class SweetTaskHandler {
private static final Logger log = LoggerFactory.getLogger(SweetTaskHandler.class);
@Autowired
private FeignSweetTaskClient feignSweetTaskClient;
@XxlJob(value = "sev-sweet:drawLuckAdd")
public ReturnT<String> drawLuckAdd() {
try {
boolean result = feignSweetTaskClient.drawLuckAdd().getData();
log.info("drawLuckAdd:结果:"+result);
return ReturnT.SUCCESS;
} catch (Exception e) {
return ReturnT.FAIL;
}
}
}
......@@ -20,9 +20,14 @@
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
<artifactId>liquidnet-common-service-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
......
......@@ -8,6 +8,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -26,6 +27,7 @@ import java.util.List;
@Api(tags = "前端-banner")
@RestController
@RequestMapping("banners")
@Slf4j
public class KylinBannersController {
@Autowired
......@@ -45,6 +47,7 @@ public class KylinBannersController {
List<KylinBanners> result = bannersServiceImpl.blist(position, provinceName);
return ResponseDto.success(result);
} catch (Exception e) {
log.error("banner列表Error", e);
return ResponseDto.success(new ArrayList<>());
}
}
......
package com.liquidnet.service.kylin.controller;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
......@@ -11,9 +13,12 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.juli.logging.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -28,6 +33,7 @@ import java.util.List;
@Api(tags = "前端-演出")
@RestController
@RequestMapping("performance")
@Slf4j
public class KylinPerformancesController {
@Autowired
......@@ -115,8 +121,12 @@ public class KylinPerformancesController {
@ApiImplicitParam(type = "query", dataType = "String", name = "cityName", value = "城市名称", required = true)
})
public ResponseDto<List> performanceCalendar(@RequestParam String yearMonth, @RequestParam String cityName) {
List result = null;
result = kylinPerformancesService.performanceCalendar(yearMonth, cityName);
List result = CollectionUtil.arrayListString();
try {
result = kylinPerformancesService.performanceCalendar(yearMonth, cityName);
} catch (Exception e) {
log.error("kylinCalendarError", e);
}
return ResponseDto.success(result);
}
......@@ -154,10 +164,15 @@ public class KylinPerformancesController {
@RequestParam(defaultValue = "0") double longitudeFrom,
@RequestParam(defaultValue = "0") String agentId
) {
KylinPerformanceVo result = kylinPerformancesService.detail(performancesId, latitudeFrom, longitudeFrom, agentId);
if (result != null) {
return ResponseDto.success(result);
} else {
try {
KylinPerformanceVo result = kylinPerformancesService.detail(performancesId, latitudeFrom, longitudeFrom, agentId);
if (result != null) {
return ResponseDto.success(result);
} else {
return ResponseDto.failure(ErrorMapping.get("20700"));
}
} catch (Exception e) {
log.error("演出详情Error", e);
return ResponseDto.failure(ErrorMapping.get("20700"));
}
}
......
......@@ -245,7 +245,13 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
List<KylinPerformanceVo> performancesList = dataUtils.getPerformancesListOfcityName(cityName);
// 获取此月开始结束时间
String monthStart = DateUtil.getMonthFirst(yearMonth);
String[] split = yearMonth.split("-");
String monthStart = "";
if (split.length > 2) {
monthStart = DateUtil.getMonthFirst(split[0].concat("-").concat(split[1]));
} else {
monthStart = DateUtil.getMonthFirst(yearMonth);
}
String monthEnd = "";
monthEnd = DateUtil.getMonthLast(monthStart);
......
package com.liquidnet.service.platform.config;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct;
@Configuration
public class WechatMpConfigure {
private static String appidZhengzai;
private static String secretZhengzai;
private static String tokenZhengzai;
private static String aeskeyZhengzai;
private static String appidModernsky;
private static String secretModernsky;
@Value("${liquidnet.wechat.service.zhengzai.appid}")
public void setAppidZhengzai(String appidZhengzai) {
WechatMpConfigure.appidZhengzai = appidZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.secret}")
public void setSecretZhengzai(String secretZhengzai) {
WechatMpConfigure.secretZhengzai = secretZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.token}")
public void setTokenZhengzai(String tokenZhengzai) {
WechatMpConfigure.tokenZhengzai = tokenZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.aeskey}")
public void setAeskeyZhengzai(String aeskeyZhengzai) {
WechatMpConfigure.aeskeyZhengzai = aeskeyZhengzai;
}
@Value("${liquidnet.wechat.service.modernsky.appid}")
public void setAppidModernsky(String appidModernsky) {
WechatMpConfigure.appidModernsky = appidModernsky;
}
@Value("${liquidnet.wechat.service.modernsky.secret}")
public void setSecretModernsky(String secretModernsky) {
WechatMpConfigure.secretModernsky = secretModernsky;
}
private WxMpService wxMpZhengzaiService;
private WxMpService wxMpModernskyService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@PostConstruct
public void init() {
wxMpZhengzaiService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:zhengzai");
wxMpDefaultConfig.setAppId(appidZhengzai);
wxMpDefaultConfig.setSecret(secretZhengzai);
wxMpDefaultConfig.setToken(tokenZhengzai);
wxMpDefaultConfig.setAesKey(aeskeyZhengzai);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpModernskyService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:modernsky");
wxMpDefaultConfig.setAppId(appidModernsky);
wxMpDefaultConfig.setSecret(secretModernsky);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
}
public WxMpService getWxMpService(Integer pnum) {
switch (pnum) {
case 1:
return wxMpZhengzaiService;
case 2:
return wxMpModernskyService;
}
return null;
}
}
package com.liquidnet.service.platform.controller.basicServices;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.platform.config.WechatMpConfigure;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.enums.TicketType;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* <p>
* 阿里云上传
......@@ -35,35 +21,34 @@ import java.util.UUID;
* @author jiangxiulong
* @since 2021-07-09
*/
@Slf4j
@Api(tags = "basicServices")
@RestController
@RequestMapping("basicServices/wechatShareSign")
public class WechatShareController {
@Value("${liquidnet.zhengzai-wechat.appid}")
private String zhengzaiAppid;
@Value("${liquidnet.zhengzai-wechat.secret}")
private String zhengzaiSecret;
@Value("${liquidnet.modernsky-wechat.appid}")
private String modernskyAppid;
@Value("${liquidnet.modernsky-wechat.secret}")
private String modernskySecret;
@Autowired
private RedisUtil redisUtil;
WechatMpConfigure wechatMpConfigure;
@GetMapping("/zhengzai")
@ApiOperation("正在微信分享sign")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "url", value = "url地址 注意 URL 一定要动态获取,不能 hardcode", required = true),
})
public ResponseDto<Map<String, String>> zhengzai(@RequestParam String url) {
String accessToken = accessToken(zhengzaiAppid, zhengzaiSecret);
String jsapiTicket = jsapiTicket(zhengzaiAppid, accessToken);
Map<String, String> ret = sign(jsapiTicket, url, zhengzaiAppid);
return ResponseDto.success(ret);
public ResponseDto<WxJsapiSignature> zhengzai(@RequestParam String url) {
try {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
wxMpService.getWxMpConfigStorage().getAccessToken();
log.info("zhengzaiShare-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("zhengzaiShare-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
log.info("zhengzaiShare-isTicketExpired:[{}] ", wxMpService.getWxMpConfigStorage().isTicketExpired(TicketType.JSAPI));
log.info("zhengzaiShare-Ticket:[{}] ", wxMpService.getWxMpConfigStorage().getTicket(TicketType.JSAPI));
WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(url);
return ResponseDto.success(jsapiSignature);
} catch (Exception e) {
log.error("分享signZhengzaiException", e);
return ResponseDto.success();
}
}
@GetMapping("/modernsky")
......@@ -71,123 +56,20 @@ public class WechatShareController {
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "url", value = "url地址 注意 URL 一定要动态获取,不能 hardcode", required = true),
})
public ResponseDto<Map<String, String>> modernsky(@RequestParam String url) {
String accessToken = accessToken(modernskyAppid, modernskySecret);
String jsapiTicket = jsapiTicket(modernskyAppid, accessToken);
Map<String, String> ret = sign(jsapiTicket, url, modernskyAppid);
return ResponseDto.success(ret);
}
public static Map<String, String> sign(String jsapi_ticket, String url, String appid) {
Map<String, String> ret = new HashMap();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"&timestamp=" + timestamp +
"&url=" + url;
// System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("url", url);
// ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
ret.put("appid", appid);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
private String accessToken(String appid, String secret) {
String accessTokenRedisKey = KylinRedisConst.WECHAT_SHARE_ACCESSTOKEN.concat(appid);
String accessToken = "";
if (!redisUtil.hasKey(accessTokenRedisKey)) {
// 请求微信获取 access_token
String accessTokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appid, secret);
JsonObject object = null;
try {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(accessTokenUrl);
HttpResponse httpResponse = client.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
String tokens = EntityUtils.toString(httpEntity, "utf-8");
Gson token_gson = new Gson();
object = token_gson.fromJson(tokens, JsonObject.class);
accessToken = object.get("access_token").toString().replaceAll("\"", "");
redisUtil.set(accessTokenRedisKey, accessToken, 7200);
} catch (Exception e) {
e.printStackTrace();
}
} else {
accessToken = (String) redisUtil.get(accessTokenRedisKey);
}
return accessToken;
}
private String jsapiTicket(String appid, String accessToken) {
String jsapiTicketRedisKey = KylinRedisConst.WECHAT_SHARE_JSAPI_TICKET.concat(appid);
String jsapiTicket = "";
if (!redisUtil.hasKey(jsapiTicketRedisKey)) {
// 获取 jsapi_ticket
String ticketUrl = String.format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi", accessToken);
JsonObject object = null;
try {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(ticketUrl);
HttpResponse httpResponse = client.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
String tokens = EntityUtils.toString(httpEntity, "utf-8");
Gson token_gson = new Gson();
object = token_gson.fromJson(tokens, JsonObject.class);
jsapiTicket = object.get("ticket").toString().replaceAll("\"", "");
redisUtil.set(jsapiTicketRedisKey, jsapiTicket, 7200);
} catch (Exception e) {
e.printStackTrace();
}
} else {
jsapiTicket = (String) redisUtil.get(jsapiTicketRedisKey);
public ResponseDto<WxJsapiSignature> modernsky(@RequestParam String url) {
try {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(2);
wxMpService.getWxMpConfigStorage().getAccessToken();
log.info("modernskyShare-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("modernskyShare-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
log.info("modernskyShare-isTicketExpired:[{}] ", wxMpService.getWxMpConfigStorage().isTicketExpired(TicketType.JSAPI));
log.info("modernskyShare-Ticket:[{}] ", wxMpService.getWxMpConfigStorage().getTicket(TicketType.JSAPI));
WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(url);
return ResponseDto.success(jsapiSignature);
} catch (Exception e) {
log.error("分享signModernskyException", e);
return ResponseDto.success();
}
return jsapiTicket;
}
}
......@@ -240,7 +240,7 @@ public class KylinTicketTimesPartnerServiceImpl extends ServiceImpl<KylinTicketT
ticketMap.put("useEnd",kylinTicketTimesPartnerVo.getUseEnd());
ticketMap.put("useStart",kylinTicketTimesPartnerVo.getUseStart());
BasicDBObject ticketObject = ObjectUtil.cloneBasicDBObject().append("$set", ticketMap);
mongoTemplate.getCollection(KylinTicketPartnerVo.class.getSimpleName()).updateOne(
mongoTemplate.getCollection(KylinTicketPartnerVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("timesId").is(createTicketTimesParam.getTicketTimesId())).getQueryObject(),
ticketObject
);
......@@ -248,6 +248,7 @@ public class KylinTicketTimesPartnerServiceImpl extends ServiceImpl<KylinTicketT
log.info(UserPathDto.setPartnerData("0","changeTimes", createTicketTimesParam,JsonUtils.fromJson(doc.toJson(), KylinTicketTimesPartnerVo.class)));
return ResponseDto.success(JsonUtils.fromJson(doc.toJson(), KylinTicketTimesPartnerVo.class));
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get(20103));
}
}
......
......@@ -387,6 +387,9 @@ public class PerformanceVoTask {
if (!misVo.getTitle().equals(mongoVo.getTitle())) {
log.debug("NEED CHANGE TITLE");
return true;
} if (!misVo.getImgPoster().equals(mongoVo.getImgPoster())) {
log.debug("NEED CHANGE IMGPOSTER");
return true;
} else if (!misVo.getType().equals(mongoVo.getType())) {
log.debug("NEED CHANGE TYPE");
return true;
......
......@@ -397,13 +397,16 @@ drop TABLE if exists `sweet_luck_draw`;
CREATE TABLE `sweet_luck_draw`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`user_id` varchar(200) NOT NULL DEFAULT '' COMMENT '用户id',
`mobile` varchar(200) NOT NULL DEFAULT '' COMMENT '用户手机号',
`union_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'unionId',
`luck_draw_num` varchar(200) NOT NULL DEFAULT '' COMMENT '抽奖编号',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1有资格 0无资格',
`prize` tinyint NOT NULL DEFAULT -1 COMMENT '第几个奖 prize <= prize_all 则中奖 prize!=0',
`prize_all` tinyint NOT NULL DEFAULT 0 COMMENT '总共多少',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_wechat_user_user_id` (`user_id`)
KEY `sweet_luck_draw_mobile` (`mobile`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
......
......@@ -8,11 +8,13 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync;
import java.net.InetAddress;
import java.util.Arrays;
@Slf4j
@EnableAsync
@EnableFeignClients
@MapperScan(basePackages = "com.liquidnet.service.*.mapper")
@SpringBootApplication(scanBasePackages = {"com.liquidnet"})
......
package com.liquidnet.service.sweet.config;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct;
@Configuration
public class WechatMpConfigure {
private static String appidZhengzai;
private static String secretZhengzai;
private static String tokenZhengzai;
private static String aeskeyZhengzai;
private static String appidModernsky;
private static String secretModernsky;
@Value("${liquidnet.wechat.service.zhengzai.appid}")
public void setAppidZhengzai(String appidZhengzai) { WechatMpConfigure.appidZhengzai = appidZhengzai; }
@Value("${liquidnet.wechat.service.zhengzai.secret}")
public void setSecretZhengzai(String secretZhengzai) {
WechatMpConfigure.secretZhengzai = secretZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.token}")
public void setTokenZhengzai(String tokenZhengzai) {
WechatMpConfigure.tokenZhengzai = tokenZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.aeskey}")
public void setAeskeyZhengzai(String aeskeyZhengzai) {
WechatMpConfigure.aeskeyZhengzai = aeskeyZhengzai;
}
@Value("${liquidnet.wechat.service.modernsky.appid}")
public void setAppidModernsky(String appidModernsky) {
WechatMpConfigure.appidModernsky = appidModernsky;
}
@Value("${liquidnet.wechat.service.modernsky.secret}")
public void setSecretModernsky(String secretModernsky) {
WechatMpConfigure.secretModernsky = secretModernsky;
}
private WxMpService wxMpZhengzaiService;
private WxMpService wxMpModernskyService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@PostConstruct
public void init() {
wxMpZhengzaiService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:zhengzai");
wxMpDefaultConfig.setAppId(appidZhengzai);
wxMpDefaultConfig.setSecret(secretZhengzai);
wxMpDefaultConfig.setToken(tokenZhengzai);
wxMpDefaultConfig.setAesKey(aeskeyZhengzai);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpModernskyService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:modernsky");
wxMpDefaultConfig.setAppId(appidModernsky);
wxMpDefaultConfig.setSecret(secretModernsky);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
}
public WxMpService getWxMpService(Integer pnum) {
switch (pnum) {
case 1:
return wxMpZhengzaiService;
case 2:
return wxMpModernskyService;
}
return null;
}
}
......@@ -13,7 +13,12 @@ public class SweetConstant {
public final static String REDIS_KEY_SWEET_ARTISTS_RELATION = "sweet:artists:relation:uid:";
public final static String REDIS_KEY_SWEET_ARTISTS_DETAILS = "sweet:artists:details:";
public final static String REDIS_KEY_SWEET_SHOP = "sweet:artists:shop:manual:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW = "sweet:artists:luckDraw:uid:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW = "sweet:luckDraw:mobile:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW_RESULT = "sweet:luckDraw:num:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW_SURPLUS = "sweet:luckDraw:num:";//中奖库存
public final static String REDIS_KEY_SWEET_LUCK_DRAW_ALL = "sweet:luckDraw:num:";//中奖总量
public final static String REDIS_KEY_SWEET_LUCK_DRAW_PRESENT_MOBILE = "sweet:luckDraw:present:mobile:";//中奖库存
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO="sweet:wechatUser:unionId:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_STR="sweet:wechatUser:unionIdStr:";
......
......@@ -12,6 +12,7 @@ import com.liquidnet.service.sweet.utils.ObjectUtil;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import com.liquidnet.service.sweet.vo.SweetArtistsRelationVo;
import com.liquidnet.service.sweet.vo.SweetManualShopAllVo;
import com.liquidnet.service.sweet.vo.SweetPrizeVo;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -324,29 +325,35 @@ public class SweetAppletController {
@GetMapping("luckDraw/status")
@ApiOperation("抽奖状态")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "uid", value = "用户id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "mobile", value = "用户手机号", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "luckDrawNum", value = "抽奖编号", required = true),
})
public ResponseDto<Boolean> luckDrawStatus(@RequestParam String uid,
@RequestParam String luckDrawNum) {
if (uid.equalsIgnoreCase("0")) {
public ResponseDto<HashMap<String, Integer>> luckDrawStatus(@RequestParam String mobile,
@RequestParam String luckDrawNum) {
if (mobile == null || mobile.isEmpty()) {
return ResponseDto.failure();
}
return ResponseDto.success(redisDataUtils.getLuckDrawStatus(uid, luckDrawNum));
HashMap<String, Integer> hashMap = CollectionUtil.mapStringInteger();
hashMap.put("count", redisDataUtils.getLuckDrawStatus(mobile, luckDrawNum));
hashMap.put("prize", redisDataUtils.getLuckDrawResult(mobile, luckDrawNum));
return ResponseDto.success(hashMap);
}
@PostMapping("luckDraw")
@ApiOperation("抽奖")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "uid", value = "用户id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "mobile", value = "用户手机号", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "unionId", value = "unionId", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "luckDrawNum", value = "抽奖编号", required = true),
})
public ResponseDto<Boolean> luckDraw(@RequestParam String uid,
@RequestParam String luckDrawNum) {
if (uid.equalsIgnoreCase("0")) {
public ResponseDto<SweetPrizeVo> luckDraw(@RequestParam String mobile,
@RequestParam String unionId,
@RequestParam String luckDrawNum) {
if (mobile == null || mobile.isEmpty()) {
return ResponseDto.failure();
}
redisDataUtils.changeLuckDrawStatus(uid, luckDrawNum);
return ResponseDto.success();
SweetPrizeVo vo = redisDataUtils.changeLuckDrawStatus(mobile,unionId, luckDrawNum);
return ResponseDto.success(vo);
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.mapper.SweetAnswerMapper;
import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl;
import com.liquidnet.service.sweet.vo.SweetUserTempVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "数据迁移")
@RestController
@RequestMapping("/sweetData")
@Slf4j
public class SweetDataController {
@Autowired
private SweetAnswerMapper sweetAnswerMapper;
@Autowired
private RedisUtil redisUtil;
// @GetMapping("drawLuck")
// @ApiOperation("中奖概率迁移")
// public ResponseDto<String> drawLuck() {
// try {
//// List<SweetUserTempVo> listHPFD = sweetAnswerMapper.selectHPFD();
//// for (SweetUserTempVo item : listHPFD) {
//// presentRedis(item.getMobile());
//// }
//// List<SweetUserTempVo> listHPWR = sweetAnswerMapper.selectHPWR();
//// for (SweetUserTempVo item : listHPWR) {
//// presentRedis(item.getMobile());
//// }
//// List<SweetUserTempVo> listHXC = sweetAnswerMapper.selectHXC();
//// for (SweetUserTempVo item : listHXC) {
//// presentRedis(item.getMobile());
//// }
//// List<SweetUserTempVo> listMember = sweetAnswerMapper.selectMember();
//// for (SweetUserTempVo item : listMember) {
//// presentRedis(item.getMobile());
//// }
// List<SweetUserTempVo> listOrder1 = sweetAnswerMapper.selectOrder1();
// for (SweetUserTempVo item : listOrder1) {
// presentRedis(item.getMobile());
// }
//// List<SweetUserTempVo> listOrder2 = sweetAnswerMapper.selectOrder2();
//// for (SweetUserTempVo item : listOrder2) {
//// presentRedis(item.getMobile());
//// }
//// List<SweetUserTempVo> listOrder3 = sweetAnswerMapper.selectOrder3();
//// for (SweetUserTempVo item : listOrder3) {
//// presentRedis(item.getMobile());
//// }
// return ResponseDto.success();
// } catch (Exception e) {
// e.printStackTrace();
// return ResponseDto.failure();
// }
// }
@PostMapping("drawLuck/add")
@ApiOperation("增加可中奖数量1最大6(20210820)")
public ResponseDto<Boolean> luckDrawAllAdd() {
try {
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_ALL.concat("20210820").concat(":all");
int count = (int) redisUtil.get(redisKey);
if (count >= 6) {
redisUtil.set(redisKey, 6);
} else {
redisUtil.incr(redisKey, 1);
}
return ResponseDto.success();
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure();
}
}
private void presentRedis(String mobile) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_PRESENT_MOBILE.concat(mobile);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
redisUtil.set(redisKey, 20);
} else {
redisUtil.incr(redisKey, 10);
}
}
}
......@@ -6,15 +6,17 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "小程序登陆")
@Api(tags = "小程序-公众号登陆相关")
@RestController
@RequestMapping("/wechatLogin")
@Slf4j
public class SweetWechatLoginController {
@Autowired
......@@ -37,4 +39,24 @@ public class SweetWechatLoginController {
return sweetLoginService.userInfo(code, encryptedData, iv, type);
}
@ApiOperation(value = "微信小程序登录凭证校验 获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"maOpenId"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "jsCode", value = "微信jsCode", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在", required = true)
})
public ResponseDto<String> wxaCode2Session(@RequestParam String jsCode, @RequestParam Integer type) {
return sweetLoginService.wxaCode2Session(jsCode, type);
}
@ApiOperation(value = "微信公众号登录 获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"mpOpenId"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在", required = true)
})
public ResponseDto<String> wxOauth2AccessToken(@RequestParam String code, @RequestParam Integer type) {
return sweetLoginService.wxOauth2AccessToken(code, type);
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.enums.TicketType;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 正在 摩登公众号分享
* </p>
*
* @author jiangxiulong
* @since 2021-08-20
*/
@Slf4j
@Api(tags = "正在-摩登公众号分享")
@RestController
@RequestMapping("wechatShareSign")
public class SweetWechatShareController {
@Autowired
WechatMpConfigure wechatMpConfigure;
@GetMapping("/zhengzai")
@ApiOperation("正在微信分享sign")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "url", value = "url地址 注意 URL 一定要动态获取,不能 hardcode", required = true),
})
public ResponseDto<WxJsapiSignature> zhengzai(@RequestParam String url) {
try {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
log.info("zhengzaiShare-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("zhengzaiShare-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
log.info("zhengzaiShare-isTicketExpired:[{}] ", wxMpService.getWxMpConfigStorage().isTicketExpired(TicketType.JSAPI));
log.info("zhengzaiShare-Ticket:[{}] ", wxMpService.getWxMpConfigStorage().getTicket(TicketType.JSAPI));
WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(url);
return ResponseDto.success(jsapiSignature);
} catch (Exception e) {
log.error("分享signZhengzaiException", e);
return ResponseDto.success();
}
}
@GetMapping("/modernsky")
@ApiOperation("摩登微信分享sign")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "url", value = "url地址 注意 URL 一定要动态获取,不能 hardcode", required = true),
})
public ResponseDto<WxJsapiSignature> modernsky(@RequestParam String url) {
try {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(2);
log.info("modernskyShare-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("modernskyShare-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
log.info("modernskyShare-isTicketExpired:[{}] ", wxMpService.getWxMpConfigStorage().isTicketExpired(TicketType.JSAPI));
log.info("modernskyShare-Ticket:[{}] ", wxMpService.getWxMpConfigStorage().getTicket(TicketType.JSAPI));
WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(url);
return ResponseDto.success(jsapiSignature);
} catch (Exception e) {
log.error("分享signModernskyException", e);
return ResponseDto.success();
}
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.sweet.service.impl.SweetWechatMpService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;
@Api(tags = "同步微信用户数据")
@RestController
@RequestMapping("/wechatSync")
@Slf4j
public class SweetWechatSyncDataController {
@Autowired
private SweetWechatMpService sweetWechatMpService;
@GetMapping("regMobile")
@ApiOperation("注册")
public void regMobile() throws IOException {
String filePath = "/Users/jiangxiulong/Desktop/keys2.txt";
String encoding = "UTF-8";
File file = new File(filePath);
if (file.isFile() && file.exists()) { //判断文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String mobile = null;
while ((mobile = bufferedReader.readLine()) != null) {
log.info("mobile:[{}]", mobile);
try {
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("mobile", mobile);
// String url = "http://127.0.0.1:9001/adam/rsc/reg/mobile";
// String url = "http://adam.zhengzai.tv/adam/rsc/reg/mobile";
String url = "";
HttpUtil.post(url, params);
} catch (Exception e) {
log.info("regMobileException:mobile:[{}]", mobile);
}
}
read.close();
} else {
System.out.println("找不到指定的文件");
}
}
@GetMapping("users")
@ApiOperation("关注用户")
public void getUsers() {
try {
sweetWechatMpService.userInfo();
} catch (Exception e) {
log.error("getUsers", e);
}
}
@GetMapping("user")
@ApiOperation("openid同步单个关注用户")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "openId", value = "openId", required = true)
})
public void getUser(@RequestParam() String openId) {
try {
sweetWechatMpService.getUser(openId);
} catch (Exception e) {
log.error("getUser", e);
}
}
}
......@@ -46,16 +46,11 @@ public class SweetWechatTemplateController {
public ResponseDto followStatus(
@RequestParam() String unionId
) {
boolean status = sweetTemplateService.followStatusStr(unionId);
boolean status = sweetTemplateService.followStatus(unionId);
if (status) {
return ResponseDto.success(1);
} else {
status = sweetTemplateService.followStatus(unionId);
if (status) {
return ResponseDto.success(1);
} else {
return ResponseDto.success(2);
}
return ResponseDto.success(2);
}
}
......
package com.liquidnet.service.sweet.handler;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetWechatUserMapper;
import com.liquidnet.service.sweet.service.impl.SweetWechatTemplateServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
......@@ -37,8 +35,6 @@ import java.util.Map;
@Component
@Slf4j
public class SubscribeHandler implements WxMpMessageHandler {
@Autowired
private SweetWechatUserMapper sweetWechatUserMapper;
@Autowired
private RedisDataUtils redisDataUtils;
@Autowired
......
......@@ -4,7 +4,6 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetWechatUserMapper;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -34,8 +33,6 @@ import java.util.Map;
@Slf4j
public class UnsubscribeHandler implements WxMpMessageHandler {
@Autowired
private SweetWechatUserMapper sweetWechatUserMapper;
@Autowired
private RedisDataUtils redisDataUtils;
@Autowired
......
......@@ -2,6 +2,11 @@ package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetAnswer;
import com.liquidnet.service.sweet.vo.SweetUserTempVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
......@@ -13,4 +18,64 @@ import com.liquidnet.service.sweet.entity.SweetAnswer;
*/
public interface SweetAnswerMapper extends BaseMapper<SweetAnswer> {
// 鸠占鹊巢 写sql 选中你了
// 海皮威尔门票
@Select({"select user_id as 'uid',user_mobile as 'mobile' from kylin_order_tickets as kot " +
" inner join kylin_order_ticket_status as kots on kot.order_tickets_id = kots.order_id " +
" inner join kylin_order_ticket_relations as kotr on kot.order_tickets_id = kotr.order_id " +
" where (status = 1 or status = 4) and performance_id in (select performances_id from kylin_performances where title like '%海皮威尔%')" +
" group by user_id;"
})
List<SweetUserTempVo> selectHPWR();
// 和平饭店门票
@Select({"select user_id as 'uid',user_mobile as 'mobile' from kylin_order_tickets as kot " +
" inner join kylin_order_ticket_status as kots on kot.order_tickets_id = kots.order_id " +
" inner join kylin_order_ticket_relations as kotr on kot.order_tickets_id = kotr.order_id " +
" where (status = 1 or status = 4) and performance_id in (select performances_id from kylin_performances where title like '%和平饭店%')" +
" group by user_id;"
})
List<SweetUserTempVo> selectHPFD();
// 虎啸春门票
@Select({"select user_id as 'uid',user_mobile as 'mobile' from kylin_order_tickets as kot " +
" inner join kylin_order_ticket_status as kots on kot.order_tickets_id = kots.order_id " +
" inner join kylin_order_ticket_relations as kotr on kot.order_tickets_id = kotr.order_id " +
" where (status = 1 or status = 4) and performance_id in (select performances_id from kylin_performances where title like '%虎啸春%')" +
" group by user_id;"
})
List<SweetUserTempVo> selectHXC();
// 会员
@Select({"select au.uid as 'uid',au.mobile as 'mobile' from adam_user_member as aum " +
" inner join adam_user au on aum.uid = au.uid " +
" where aum.state = 1 and aum.expiry_at >= '2021-08-20';"
})
List<SweetUserTempVo> selectMember();
// 消费不小于1
@Select({"select count(0) as 'buyCount',user_id as 'uid',user_mobile as 'mobile' from kylin_order_tickets as kot inner join kylin_order_ticket_status as kots on kot.order_tickets_id = kots.order_id " +
" where (status = 1 or status = 4) " +
" group by user_id " +
" having buyCount >= 1;"
})
List<SweetUserTempVo> selectOrder1();
// 消费不小于2
@Select({"select count(0) as 'buyCount',user_id as 'uid',user_mobile as 'mobile' from kylin_order_tickets as kot inner join kylin_order_ticket_status as kots on kot.order_tickets_id = kots.order_id " +
" where (status = 1 or status = 4) " +
" group by user_id " +
" having buyCount >= 2;"
})
List<SweetUserTempVo> selectOrder2();
// 消费不小于3
@Select({"select count(0) as 'buyCount',user_id as 'uid',user_mobile as 'mobile' from kylin_order_tickets as kot inner join kylin_order_ticket_status as kots on kot.order_tickets_id = kots.order_id " +
" where (status = 1 or status = 4) " +
" group by user_id " +
" having buyCount >= 3;"
})
List<SweetUserTempVo> selectOrder3();
// 占完了
}
package com.liquidnet.service.sweet.service.impl;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.handler.SubscribeHandler;
import com.liquidnet.service.sweet.handler.UnsubscribeHandler;
import lombok.extern.slf4j.Slf4j;
......@@ -7,13 +8,9 @@ import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.api.WxMessageInMemoryDuplicateChecker;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
......@@ -28,35 +25,13 @@ import org.springframework.stereotype.Service;
@Slf4j
public class SweetWechatCallbackServiceImpl {
@Value("${liquidnet.wechat.service.zhengzai.appid}")
private String appid;
@Value("${liquidnet.wechat.service.zhengzai.secret}")
private String secret;
@Value("${liquidnet.wechat.service.zhengzai.token}")
private String token;
@Value("${liquidnet.wechat.service.zhengzai.aeskey}")
private String aeskey;
@Autowired
private SubscribeHandler subscribeHandler;
@Autowired
private UnsubscribeHandler unsubscribeHandler;
private WxMpConfigStorage wxMpConfig(String appId, String appSecret, String token, String aeskey) {
WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
config.setAppId(appId);
config.setSecret(appSecret);
config.setAesKey(aeskey);
config.setToken(token);
return config;
}
private WxMpService wxMpService(WxMpConfigStorage mpConfig) {
WxMpService service = new WxMpServiceImpl();
service.setWxMpConfigStorage(mpConfig);
return service;
}
@Autowired
WechatMpConfigure wechatMpConfigure;
public WxMpMessageRouter messageRouter(WxMpService wxMpService) {
WxMpMessageRouter router = new WxMpMessageRouter(wxMpService);
......@@ -79,8 +54,7 @@ public class SweetWechatCallbackServiceImpl {
}
public String record(String requestBody, String timestamp, String nonce, String encType, String msgSignature) {
WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret, token, aeskey);
WxMpService wxMpService = wxMpService(wxMpConfig);
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
String out = null;
if (encType == null || encType.isEmpty()) {
// 明文传输的消息
......
package com.liquidnet.service.sweet.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.util.HashMap;
import java.util.Objects;
......@@ -31,29 +31,12 @@ import java.util.Objects;
@Service
public class SweetWechatLoginServiceImpl {
@Value("${liquidnet.wechat.applet.strawberry.appid}")
private String strawberryAppid;
@Value("${liquidnet.wechat.applet.strawberry.secret}")
private String strawberrySecret;
@Value("${liquidnet.wechat.applet.five.appid}")
private String fiveAppid;
@Value("${liquidnet.wechat.applet.five.secret}")
private String fiveSecret;
@Value("${liquidnet.wechat.applet.mdsk.appid}")
private String mdskAppid;
@Value("${liquidnet.wechat.applet.mdsk.secret}")
private String mdskSecret;
@Value("${liquidnet.wechat.applet.zhengzai.appid}")
private String zhengzaiAppid;
@Value("${liquidnet.wechat.applet.zhengzai.secret}")
private String zhengzaiSecret;
@Autowired
private SweetWechatService sweetWechatService;
@Value("${liquidnet.service.adam.url}")
private String adamUrl;
public ResponseDto userInfo(String code, String encryptedData, String iv, Integer type) {
log.info("\n参数code:[{}] ", code);
log.info("\n参数encryptedData:[{}] ", encryptedData);
......@@ -73,10 +56,12 @@ public class SweetWechatLoginServiceImpl {
return ResponseDto.failure("解密手机号码信息错误");
}
registerByMobile(wxMaPhoneNumberInfo.getPurePhoneNumber());
String unionId = sessionInfo.getUnionid();
String openId = sessionInfo.getOpenid();
HashMap<String,Object> userInfo = CollectionUtil.mapStringObject();
HashMap<String, Object> userInfo = CollectionUtil.mapStringObject();
userInfo.put("unionId", unionId);
userInfo.put("openId", openId);
userInfo.put("getPhoneNumber", wxMaPhoneNumberInfo.getPhoneNumber());
......@@ -90,77 +75,34 @@ public class SweetWechatLoginServiceImpl {
}
}
/*public ResponseDto userInfo(String code, String encryptedData, String iv, Integer type) {
log.info("\n参数code:[{}] ", code);
log.info("\n参数encryptedData:[{}] ", encryptedData);
log.info("\n参数iv:[{}] ", iv);
log.info("\n参数type:[{}] ", type);
@Async
public void registerByMobile(String mobile) {
try {
String appId = "";
String appSecret = "";
switch (type) {
case 1:
appId = strawberryAppid;
appSecret = strawberrySecret;
break;
case 2:
appId = fiveAppid;
appSecret = fiveSecret;
break;
case 3:
appId = mdskAppid;
appSecret = mdskSecret;
break;
case 4:
appId = zhengzaiAppid;
appSecret = zhengzaiSecret;
break;
}
WxMaConfig wxMaConfig = wxMaConfig(appId, appSecret);
WxMaService wxMaService = wxMaService(wxMaConfig);
WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code);
log.info("\nWxMaJscode2SessionResult:[{}] ", JsonUtils.toJson(sessionInfo));
if (null == sessionInfo) {
return ResponseDto.failure("login handler error");
}
// 解密手机号码信息
WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxMaService.getUserService().getPhoneNoInfo(sessionInfo.getSessionKey(),
encryptedData, iv);
log.info("\nWxMaPhoneNumberInfo:[{}] ", wxMaPhoneNumberInfo.toString());
if (Objects.isNull(wxMaPhoneNumberInfo) || StringUtils.isBlank(wxMaPhoneNumberInfo.getPhoneNumber())) {
return ResponseDto.failure("解密手机号码信息错误");
}
String unionId = sessionInfo.getUnionid();
String openId = sessionInfo.getOpenid();
HashMap<String,Object> userInfo = CollectionUtil.mapStringObject();
userInfo.put("unionId", unionId);
userInfo.put("openId", openId);
userInfo.put("getPhoneNumber", wxMaPhoneNumberInfo.getPhoneNumber());
userInfo.put("getPurePhoneNumber", wxMaPhoneNumberInfo.getPurePhoneNumber());
userInfo.put("getCountryCode", wxMaPhoneNumberInfo.getCountryCode());
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("mobile", mobile);
HttpUtil.post(adamUrl.concat("/adam/rsc/reg/mobile"), params);
} catch (Exception e) {
log.error("registerByMobile失败", e);
}
}
return ResponseDto.success(userInfo);
public ResponseDto<String> wxaCode2Session(String jsCode, Integer type) {
try {
WxMaJscode2SessionResult wxMaJscode2SessionResult = sweetWechatService.sessionInfo(jsCode, type);
return ResponseDto.success(wxMaJscode2SessionResult.getOpenid());
} catch (Exception e) {
e.printStackTrace();
log.error("wxaCode2SessionError", e);
return ResponseDto.failure();
}
}*/
private WxMaConfig wxMaConfig(String appId, String appSecret) {
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
config.setAppid(appId);
config.setSecret(appSecret);
config.setMsgDataFormat("JSON");
return config;
}
private WxMaService wxMaService(WxMaConfig maConfig) {
WxMaService service = new WxMaServiceImpl();
service.setWxMaConfig(maConfig);
return service;
public ResponseDto<String> wxOauth2AccessToken(String code, Integer type) {
try {
WxOAuth2AccessToken wxOAuth2AccessToken = sweetWechatService.wxOauth2AccessToken(code, type);
return ResponseDto.success(wxOAuth2AccessToken.getOpenId());
} catch (Exception e) {
log.error("wxaCode2SessionError", e);
return ResponseDto.failure();
}
}
}
package com.liquidnet.service.sweet.service.impl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import me.chanjar.weixin.mp.bean.result.WxMpUserList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
import java.util.List;
@Slf4j
@Service
public class SweetWechatMpService {
@Autowired
WechatMpConfigure wechatMpConfigure;
@Autowired
private RedisDataUtils redisDataUtils;
@Autowired
private QueueUtils queueUtils;
public void userInfo() throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
String nextOpenid = "";
do {
WxMpUserList wxMpUserList = wxMpService.getUserService().userList(nextOpenid);
int count = wxMpUserList.getCount();
long total = wxMpUserList.getTotal();
List<String> openids = wxMpUserList.getOpenids();
nextOpenid = wxMpUserList.getNextOpenid();
log.info("count:[{}] ", count);
log.info("total:[{}] ", total);
// log.info("openids:[{}] ", openids);
log.info("nextOpenid:[{}] ", nextOpenid);
for (String openId : openids) {
try {
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(openId);
if (!wxMpUser.getSubscribe()) {
log.info("getSubscribeFalse:openId:[{}]", openId);
continue;
}
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
if (null == userInfo) {
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUser(sweetWechatUser);
}
} catch (Exception e) {
log.info("forException:openId:[{}]", openId);
}
}
log.info("nextOpenidSuccess:[{}] ", nextOpenid);
} while (!nextOpenid.isEmpty());
log.info("同步微信用户完成");
}
public void getUser(String openId) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(openId);
log.info("openId:[{}],wxMpUsers:[{}]", openId, wxMpUser);
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
if (null == userInfo) {
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUser(sweetWechatUser);
}
}
}
......@@ -5,8 +5,11 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -16,6 +19,9 @@ public class SweetWechatService {
@Autowired
WechatMaConfigure wechatMaConfigure;
@Autowired
WechatMpConfigure wechatMpConfigure;
public WxMaJscode2SessionResult sessionInfo(String code, Integer anum) throws WxErrorException {
WxMaService wxMaService = wechatMaConfigure.getWxMaService(anum);
log.info("isAccessTokenExpired:[{}] ", wxMaService.getWxMaConfig().isAccessTokenExpired());
......@@ -33,4 +39,12 @@ public class SweetWechatService {
return wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);
}
public WxOAuth2AccessToken wxOauth2AccessToken(String code, Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
log.info("isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
return wxMpService.getOAuth2Service().getAccessToken(code);
}
}
......@@ -8,6 +8,7 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetRemind;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetRemindMapper;
......@@ -15,11 +16,8 @@ import com.liquidnet.service.sweet.utils.RedisDataUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -42,10 +40,6 @@ import java.util.List;
@Service
public class SweetWechatTemplateServiceImpl {
@Value("${liquidnet.wechat.service.zhengzai.appid}")
private String appid;
@Value("${liquidnet.wechat.service.zhengzai.secret}")
private String secret;
@Value("${liquidnet.client.admin.h5Url}")
private String h5Url;
......@@ -60,7 +54,20 @@ public class SweetWechatTemplateServiceImpl {
@Autowired
private SweetRemindMapper sweetRemindMapper;
@Autowired
WechatMpConfigure wechatMpConfigure;
public ResponseDto sendRemindMsg() {
// test
/*WxMpTemplateMessage templateMessage = getTemplateMessage("CNLDBZYQoDgTWudicx8WU81Jr9b6RyG9hmK4O0tpK-k", "oUpkkuNe4yuVs77aaKFvuvpgNOSw", h5Url.concat("/#/ticket/detail?id=").concat("111"));
templateMessage.addData(new WxMpTemplateData("first", "感谢支持"))
.addData(new WxMpTemplateData("keyword1", "摩登天空"))
.addData(new WxMpTemplateData("keyword2", "正在现场"))
.addData(new WxMpTemplateData("keyword3", "北京"))
.addData(new WxMpTemplateData("remark", "感谢支持正在现场"));
String msgId = sendTmpMsg(templateMessage);*/
// test end
String templateId = "CNLDBZYQoDgTWudicx8WU81Jr9b6RyG9hmK4O0tpK-k";
List<SweetRemind> sweetRemindList = sweetRemindMapper.selectList(
......@@ -97,7 +104,6 @@ public class SweetWechatTemplateServiceImpl {
log.info("超过售卖期:[nowTimeStr=[{}], [stopSellTime=[{}]",
nowTimeStr, stopSellTime);
remindIdList.add(remindId);
// redisDataUtils.delSweetRemind(remindInfo.getUnionId());
continue;
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
......@@ -140,12 +146,12 @@ public class SweetWechatTemplateServiceImpl {
try {
String nowTime = DateUtil.getNowTime();
if (DateUtil.compareStrDay(nowTime, "2021-08-14 10:00:00") == 1) {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), appletAppid, "pages/webview?query=active");
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), appletAppid, "pages/webview?query=lottery");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "点击下方小程序,继续参与「和我最有缘的音乐人」测试"));
.addData(new WxMpTemplateData("remark", "点击下方小程序,再次参与「草莓星球来的人」周边抽奖"));
String msgId = sendTmpMsg(templateMessage);
} else {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), "");
......@@ -172,12 +178,9 @@ public class SweetWechatTemplateServiceImpl {
*/
private WxMpTemplateMessage getTemplateMessage(String templateId, String openId, String url) {
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
// 接收者openid
.toUser(openId)
// 模板id
.templateId(templateId)
// 模板跳转链接
.url(url)
.toUser(openId) // 接收者openid
.templateId(templateId) // 模板id
.url(url) // 模板跳转链接
.build();
return templateMessage;
}
......@@ -186,16 +189,13 @@ public class SweetWechatTemplateServiceImpl {
//配置小程序信息
WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
miniProgram.setAppid(appid);//小程序appid
miniProgram.setUsePath(false);
miniProgram.setUsePath(false);//true的话需要前端配合处理跳转
miniProgram.setPagePath(pagePath);//用户点击时需要跳转的小程序页面
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
// 接收者openid
.toUser(openId)
// 模板id
.templateId(templateId)
// 模板跳转链接
.miniProgram(miniProgram)
.toUser(openId) // 接收者openid
.templateId(templateId) // 模板id
.miniProgram(miniProgram) // 模板跳转链接
.build();
return templateMessage;
}
......@@ -210,30 +210,17 @@ public class SweetWechatTemplateServiceImpl {
String msgId = null;
try {
// 发送模板消息
WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret);
WxMpService wxMpService = wxMpService(wxMpConfig);
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
log.info("sendTmpMsg-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("sendTmpMsg-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
log.info("发送成功:[msgId=[{}]", msgId);
log.info("模版消息发送成功:[msgId=[{}]", msgId);
} catch (WxErrorException e) {
log.error("模版消息发送异常", e);
}
log.info("模版消息发送成功:[msgId=[{}]", msgId);
return msgId;
}
private WxMpConfigStorage wxMpConfig(String appId, String appSecret) {
WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
config.setAppId(appId);
config.setSecret(appSecret);
return config;
}
private WxMpService wxMpService(WxMpConfigStorage mpConfig) {
WxMpService service = new WxMpServiceImpl();
service.setWxMpConfigStorage(mpConfig);
return service;
}
public ResponseDto remind(String openId, String unionId, String performancesId) {
redisDataUtils.setSweetRemind(openId, unionId, performancesId);
return ResponseDto.success();
......
......@@ -2,9 +2,7 @@ package com.liquidnet.service.sweet.utils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
......@@ -17,14 +15,20 @@ import com.liquidnet.service.sweet.entity.*;
import com.liquidnet.service.sweet.mapper.*;
import com.liquidnet.service.sweet.vo.SweetAnswerVo;
import com.liquidnet.service.sweet.vo.SweetArtistsRelationVo;
import com.liquidnet.service.sweet.vo.SweetPrizeVo;
import com.liquidnet.service.sweet.vo.SweetRemindVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.*;
import static com.liquidnet.service.sweet.constant.SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_PRESENT_MOBILE;
import static com.liquidnet.service.sweet.constant.SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_SURPLUS;
@Component
@Slf4j
public class RedisDataUtils {
@Autowired
......@@ -52,8 +56,8 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_MANUAL_PUSH_LIST;
List<SweetManualAppletDto> data = sweetManualMapper.getManualAppletDto();
for (SweetManualAppletDto item : data) {
if(!item.getIsMember().equals(1)){
item.setTimeSell(DateUtil.format(DateUtil.addMin(DateUtil.parse(item.getTimeSell(),"yyyy-MM-dd HH:mm:ss"),item.getPayCountdownMinute()),DateUtil.Formatter.yyyyMMddHHmmss));
if (!item.getIsMember().equals(1)) {
item.setTimeSell(DateUtil.format(DateUtil.addMin(DateUtil.parse(item.getTimeSell(), "yyyy-MM-dd HH:mm:ss"), item.getPayCountdownMinute()), DateUtil.Formatter.yyyyMMddHHmmss));
}
item.setFieldName((String) redisUtil.getDB15RedisHGet(KylinRedisConst.FIELDS + ":" + item.getFieldId(), "name"));
item.setCityName((String) redisUtil.getDB15RedisHGet(KylinRedisConst.FIELDS + ":" + item.getFieldId(), "city_name"));
......@@ -330,6 +334,7 @@ public class RedisDataUtils {
redisUtil.set(redisKey, sweetWechatUser);
redisUtil.set(redisKeyUnid, sweetWechatUser.getUnionId());
}
public String getSweetWechatUserUnionid(String openid) {
if (openid.isEmpty()) {
return null;
......@@ -337,6 +342,7 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID.concat(openid);
return (String) redisUtil.get(redisKey);
}
public SweetWechatUser getSweetWechatUser(String unionid) {
if (unionid.isEmpty()) {
return null;
......@@ -344,6 +350,7 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO.concat(unionid);
return (SweetWechatUser) redisUtil.get(redisKey);
}
public String getSweetWechatUserStr(String unionid) {
if (unionid.isEmpty()) {
return "";
......@@ -352,10 +359,12 @@ public class RedisDataUtils {
String str = (String) redisUtil.get(key);
return str;
}
public void setSweetWechatUserStr(String unionid) {
String key = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_STR.concat(unionid);
redisUtil.set(key, "1");
}
public void delSweetWechatUser(String unionid, String openid) {
if (!unionid.isEmpty()) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO.concat(unionid);
......@@ -384,25 +393,83 @@ public class RedisDataUtils {
}
//获取抽奖状态
public Boolean getLuckDrawStatus(String uid, String luckDrawNum) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW.concat(uid).concat(":luckDrawNum:" + luckDrawNum);
return redisUtil.hasKey(redisKey);
public int getLuckDrawStatus(String mobile, String luckDrawNum) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW.concat(mobile).concat(":luckDrawNum:" + luckDrawNum);
Object obj = redisUtil.get(redisKey);
if(obj==null){
redisUtil.set(redisKey,0);
return 0;
}else{
return (int) redisUtil.get(redisKey);
}
}
//获取抽奖状态
public int getLuckDrawResult(String mobile, String luckDrawNum) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_RESULT.concat(luckDrawNum).concat(":mobile:" + mobile);
Object obj = redisUtil.get(redisKey);
if(obj==null){
return 0;
}else{
return (int) redisUtil.get(redisKey);
}
}
//修改抽奖状态
public void changeLuckDrawStatus(String uid, String luckDrawNum) {
public SweetPrizeVo changeLuckDrawStatus(String mobile, String unionId,String luckDrawNum) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW.concat(uid).concat(":luckDrawNum:" + luckDrawNum);
redisUtil.set(redisKey, 1);
SweetPrizeVo vo = SweetPrizeVo.getNew();
String redisKey = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW.concat(mobile).concat(":luckDrawNum:" + luckDrawNum);
String redisSurplus = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_SURPLUS.concat(luckDrawNum).concat(":surplus");
String redisAll = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_ALL.concat(luckDrawNum).concat(":all");
String redisPresent = SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_PRESENT_MOBILE.concat(mobile);
int surplus = (int) redisUtil.get(redisSurplus);//当前中奖数量
int prize = 0;//总量
int prizeALl = (int) redisUtil.get(redisAll);//不变的总量
int count = (int) redisUtil.incr(redisKey, 1);
if (count > 2) {
vo.setPrize(prize);
vo.setPrizeAll(prizeALl);
return vo;
}
if (surplus < prizeALl) {
//随机算法
Object obj = redisUtil.get(redisPresent);
int present;
if (obj == null) {
present = 10;
} else {
present = (int) obj;
}
int random1 = RandomUtil.getRandomIntTime(present, 101);
int random2 = RandomUtil.getRandomIntTime(present, 101);
if (random1 == random2) {
surplus = (int) redisUtil.get(redisSurplus);
if (surplus < prizeALl) {
prize = (int) redisUtil.incr(redisSurplus, 1);
redisUtil.set(redisKey, 2);
redisUtil.set(SweetConstant.REDIS_KEY_SWEET_LUCK_DRAW_RESULT.concat(luckDrawNum).concat(":mobile:" + mobile),prize);
}
}
}
sqls.add(SqlMapping.get("sweet_luck_draw.insert"));
sqlsDataA.add(new Object[]{
uid, luckDrawNum, now
mobile,unionId, luckDrawNum, prize, prizeALl, now
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.LUCK_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
vo.setPrize(prize);
vo.setPrizeAll(prizeALl);
return vo;
}
// 答案
......@@ -410,6 +477,7 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(sweetAnswerVo.getPhone());
redisUtil.set(redisKey, sweetAnswerVo);
}
public SweetAnswerVo getSweetAnswer(String phone) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_ANSWER_PHONE.concat(phone);
SweetAnswerVo sweetAnswerVo = (SweetAnswerVo) redisUtil.get(redisKey);
......
package com.liquidnet.service.sweet.vo;
import com.liquidnet.service.sweet.entity.SweetAnswer;
import io.swagger.annotations.Api;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class SweetPrizeVo implements Serializable, Cloneable {
/**
* 第几个奖
*/
private int prize;
/**
* 总共多少奖
*/
private int prizeAll;
private static final SweetPrizeVo obj = new SweetPrizeVo();
public static SweetPrizeVo getNew() {
try {
return (SweetPrizeVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetPrizeVo();
}
}
}
package com.liquidnet.service.sweet.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class SweetUserTempVo implements Serializable, Cloneable {
/**
* 第几个奖
*/
private String uid;
/**
* 总共多少奖
*/
private String mobile;
private static final SweetUserTempVo obj = new SweetUserTempVo();
public static SweetUserTempVo getNew() {
try {
return (SweetUserTempVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetUserTempVo();
}
}
}
......@@ -57,8 +57,8 @@ sweet_user_relation.delete=DELETE FROM sweet_user_relation WHERE user_id = ? an
sweet_user_relation_mdsk.insert=INSERT INTO sweet_user_relation_mdsk (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?)
sweet_user_relation_mdsk.delete=DELETE FROM sweet_user_relation_mdsk WHERE user_id = ? and target_id = ? and manual_id = ? and type = ?
# ------------------------用户关系----------------------------
sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (user_id,luck_draw_num,status,created_at) VALUES (?,?,1,?)
# ------------------------抽奖----------------------------
sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (mobile,union_id,luck_draw_num,prize,prize_all,status,created_at) VALUES (?,?,?,?,?,1,?)
# --------------------------答案--------------------------
sweet_answer.insert=INSERT INTO sweet_answer (answer_id,phone,answer_json,img_url) VALUES (?,?,?,?)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment