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

Commit e002d181 authored by 张国柄's avatar 张国柄

Merge remote-tracking branch 'origin/master' into new_member

# Conflicts:
#	liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamUserMemberVo.java
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/IKylinOrderTicketsService.java
#	liquidnet-bus-api/pom.xml
#	liquidnet-bus-do/pom.xml
#	liquidnet-bus-service/liquidnet-service-executor-all/liquidnet-service-executor-main/src/main/java/com/liquidnet/service/executor/main/handler/PlatformTaskHandler.java
#	liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/KylinRefundsStatusServiceImpl.java
parents 3b59bae2 1f5e2acc
package com.liquidnet.service.kylin.dto.vo.returns;
import com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo;
import io.swagger.annotations.ApiModel;
import com.liquidnet.service.kylin.dao.PerformanceOrderStatisticalDao;
import lombok.Data;
......@@ -21,7 +20,7 @@ import java.util.List;
@ApiModel
public class KylinOrderRefundBatchesPerformanceVo implements Serializable {
private KylinPerformanceMisVo kylinPerformanceMisVo;
private String title;
private List<PerformanceOrderStatisticalDao> performanceOrderStatisticalDao;
}
......@@ -66,6 +66,7 @@ public class KylinOrderRefundsVo implements Serializable,Cloneable {
private Integer status;
private String statusName;
private Integer refundCate;
@ApiModelProperty(value = "退款差异: 0申请退款返还库存 1自动退款无法取消退款不返还库存")
private Integer type;
......
......@@ -53,20 +53,18 @@ public interface IKylinOrderTicketsService {
ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(String orderId);
//退款详情
ResponseDto<OrderRefundVo> orderRefundDetails(String orderId, String orderRefundId);
ResponseDto<OrderRefundVo> orderRefundDetails(String orderId,String orderRefundId);
/**
* 发起退款
*
* @param orderId 订单id
* @param orderTicketEntitiesId 票单id
* @param reason 退款原因
* @param picList 证据截图
* @return 是否成功
* @param orderId 订单id
* @param orderTicketEntitiesId 票单id
* @param reason 退款原因
* @param picList 证据截图
* @return 是否成功
*/
String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList);
//退款撤回
ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId);
}
package com.liquidnet.service.kylin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dao.PerformanceOrderStatisticalDao;
import com.liquidnet.service.kylin.entity.KylinPerformances;
......@@ -15,4 +16,12 @@ import java.util.List;
* @since 2021-05-05
*/
public interface IKylinPerformancesService {
/**
* 根据 券适用范围查询演出id
* @param useScope
* @param busiId
* @return
*/
ResponseDto<String> getPerformanceIdByInfo(Integer useScope,String busiId);
}
......@@ -6,10 +6,13 @@ import com.liquidnet.service.kylin.entity.KylinTickets;
public interface DamaiService {
//同步演出
Boolean sycPerformance(String performanceId);
//同步场次
Boolean sycTimes(long performanceId, KylinTicketTimes timesData);
Boolean sycTimes(long performanceId, KylinTicketTimes timesData, Long venueId);
//同步票
Boolean sycTicket(long timeId, KylinTickets ticketsData);
//订单
Boolean sycOrder(long timeId, String ticketsId,long ticketsmId);
Boolean sycOrder(long timeId, String ticketsId, long ticketsmId);
}
package com.liquidnet.service.sweet.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
@ApiModel(value = "SweetAntigenicQuestionParam", description = "防疫答题记录入参")
@Data
public class SweetAntigenicQuestionParam implements Serializable {
private static final long serialVersionUID = 9038992103808199663L;
@ApiModelProperty(position = 10, required = true, value = "type 1MDSK防疫答题 2草莓防疫答题", example = "1")
@NotNull(message = "type不能为空") @Min(value = 1, message = "type无效") @Max(value = 2, message = "type无效")
private Integer type;
@ApiModelProperty(position = 10, required = true, value = "openId", example = "openId")
@NotBlank(message = "openId不能为空")
private String openId;
@ApiModelProperty(position = 10, required = true, value = "unionId", example = "unionId")
@NotBlank(message = "unionId不能为空")
private String unionId;
@ApiModelProperty(position = 10, required = true, value = "姓名", example = "姓名")
@NotBlank(message = "姓名不能为空")
private String nickname;
@ApiModelProperty(position = 10, required = true, value = "居住地址", example = "居住地址")
@NotBlank(message = "居住地址不能为空")
private String address;
@ApiModelProperty(position = 10, required = true, value = "联系电话", example = "15811009011")
@NotBlank(message = "联系电话不能为空")
private String phone;
@ApiModelProperty(position = 10, required = true, value = "紧急联系人电话", example = "15811009011")
// @NotBlank(message = "紧急联系人电话不能为空")
private String urgentPhone;
@ApiModelProperty(position = 10, required = true, value = "keyword1", example = "1")
@NotBlank(message = "keyword1不能为空")
private String keyword1;
@ApiModelProperty(position = 10, required = false, value = "keyword11", example = "补充信息")
private String keyword11;
@ApiModelProperty(position = 10, required = true, value = "keyword2", example = "1")
@NotBlank(message = "keyword2不能为空")
private String keyword2;
@ApiModelProperty(position = 10, required = true, value = "keyword3", example = "1")
@NotBlank(message = "keyword3不能为空")
private String keyword3;
@ApiModelProperty(position = 10, required = true, value = "keyword4", example = "1")
@NotBlank(message = "keyword4不能为空")
private String keyword4;
@ApiModelProperty(position = 10, required = true, value = "keyword5", example = "1")
@NotBlank(message = "keyword5不能为空")
private String keyword5;
@ApiModelProperty(position = 10, required = true, value = "keyword6", example = "1")
@NotBlank(message = "keyword6不能为空")
private String keyword6;
@ApiModelProperty(position = 10, required = true, value = "keyword7", example = "1")
@NotBlank(message = "keyword7不能为空")
private String keyword7;
}
package com.liquidnet.service.sweet.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import java.io.Serializable;
/**
* <p>
* WxOAuth2AccessToken vo
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Data
@ApiModel
public class WechatTokenInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = 3404938811111878417L;
@ApiModelProperty(value = "openId")
private String openId;
@ApiModelProperty(value = "unionId")
private String unionId;
private static final WechatTokenInfoVo obj = new WechatTokenInfoVo();
public static WechatTokenInfoVo getNew() {
try {
return (WechatTokenInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new WechatTokenInfoVo();
}
}
public WechatTokenInfoVo copy(WxOAuth2AccessToken source) {
if (null == source) return this;
this.setOpenId(source.getOpenId());
this.setUnionId(source.getUnionId());
return this;
}
}
package com.liquidnet.service.sweet.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import java.io.Serializable;
/**
* <p>
* WxOAuth2UserInfo vo
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Data
@ApiModel
public class WechatUserInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = 5067978046376025813L;
@ApiModelProperty(value = "普通用户的标识,对当前开发者帐号唯一")
private String openid;
@ApiModelProperty(value = "普通用户昵称")
private String nickname;
@ApiModelProperty(value = "普通用户性别,1为男性,2为女性")
private Integer sex;
@ApiModelProperty(value = "普通用户个人资料填写的城市")
private String city;
@ApiModelProperty(value = "普通用户个人资料填写的省份")
private String province;
@ApiModelProperty(value = "国家,如中国为CN")
private String country;
@ApiModelProperty(value = "用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像) 用户没有头像时该项为空")
private String headImgUrl;
@ApiModelProperty(value = "用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的")
private String unionId;
@ApiModelProperty(value = "用户特权信息,json数组,如微信沃卡用户为(chinaunicom)")
private String[] privileges;
private static final WechatUserInfoVo obj = new WechatUserInfoVo();
public static WechatUserInfoVo getNew() {
try {
return (WechatUserInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new WechatUserInfoVo();
}
}
public WechatUserInfoVo copy(WxOAuth2UserInfo source) {
if (null == source) return this;
this.setOpenid(source.getOpenid());
this.setNickname(source.getNickname());
this.setSex(source.getSex());
this.setCity(source.getCity());
this.setProvince(source.getProvince());
this.setCountry(source.getCountry());
this.setHeadImgUrl(source.getHeadImgUrl());
this.setUnionId(source.getUnionId());
this.setPrivileges(source.getPrivileges());
return this;
}
}
......@@ -17,9 +17,9 @@
<module>liquidnet-service-adam-api</module>
<module>liquidnet-service-kylin-api</module>
<module>liquidnet-service-dragon-api</module>
<module>liquidnet-service-sweet-api</module>
<module>liquidnet-service-chime-api</module>
<module>liquidnet-service-candy-api</module>
<module>liquidnet-service-sweet-api</module>
</modules>
<dependencies>
<dependency>
......
......@@ -158,7 +158,7 @@ public class CandyCouponCodeAdminController extends BaseController {
List<CandyUserCouponBasicDto> vos = (List<CandyUserCouponBasicDto>) redisUtil.get(uckey);
if (!CollectionUtils.isEmpty(vos)) {
CandyUserCouponBasicDto userCouponBasicDto = vos.parallelStream().filter(v -> v.getCouponId().equals(couponId)).findAny().orElse(null);
CandyUserCouponBasicDto userCouponBasicDto = vos.stream().filter(v -> v.getCouponId().equals(couponId)).findAny().orElse(null);
if (null != userCouponBasicDto && userCouponBasicDto.getState() == 1) {
String cckey = CandyRedisConst.BASIC_COUPON_CODE.concat(r.getCcode());
......
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
......@@ -13,9 +14,12 @@ import com.liquidnet.service.kylin.dao.OrderRefundBatchDao;
import com.liquidnet.service.kylin.dao.PerformanceOrderStatisticalDao;
import com.liquidnet.service.kylin.dto.param.RefundBatchApplyParam;
import com.liquidnet.service.kylin.dto.param.RefundBatchSearchParam;
import com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundBatchesPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundBatchesVo;
import com.liquidnet.service.kylin.entity.KylinPerformanceStatus;
import com.liquidnet.service.kylin.entity.KylinPerformances;
import com.liquidnet.service.kylin.mapper.KylinPerformanceStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinPerformancesMapper;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
......@@ -45,6 +49,12 @@ public class KylinOrderRefundBatchAdminController extends BaseController {
@Autowired
private KylinPerformancesAdminServiceImpl kylinPerformancesService;
@Autowired
private KylinPerformanceStatusMapper performanceStatusMapper;
@Autowired
private KylinPerformancesMapper performancesMapper;
@RequiresPermissions("kylin:refundBatch:view")
@GetMapping()
public String operlog()
......@@ -83,16 +93,23 @@ public class KylinOrderRefundBatchAdminController extends BaseController {
public AjaxResult applyPerformance(RefundBatchApplyParam refundBatchApplyParam) {
String performancesId = refundBatchApplyParam.getTargetId();
//获取演出详情
KylinPerformanceMisVo performanceMisVo = kylinPerformancesService.performanceDetails(performancesId);
if (null == performanceMisVo) {
KylinPerformances kylinPerformances = performancesMapper.selectOne(Wrappers.lambdaQuery(KylinPerformances.class)
.eq(KylinPerformances::getPerformancesId, performancesId)
.select(KylinPerformances::getTitle)
);
KylinPerformanceStatus kylinPerformanceStatus = performanceStatusMapper.selectOne(Wrappers.lambdaQuery(KylinPerformanceStatus.class)
.eq(KylinPerformanceStatus::getPerformanceId, performancesId)
.select(KylinPerformanceStatus::getStatus)
);
if (null == kylinPerformances) {
return error("未找到该演出数据");
}
if (performanceMisVo.getStatus() != 7) {
if (kylinPerformanceStatus.getStatus() != 7) {
return error("当前演出未下架,不可退款");
}
List<PerformanceOrderStatisticalDao> result = kylinPerformancesService.getPerformanceOrderStatisticalList(performancesId);
KylinOrderRefundBatchesPerformanceVo kylinOrderRefundBatchesPerformanceVo = new KylinOrderRefundBatchesPerformanceVo();
kylinOrderRefundBatchesPerformanceVo.setKylinPerformanceMisVo(performanceMisVo);
kylinOrderRefundBatchesPerformanceVo.setTitle(kylinPerformances.getTitle());
kylinOrderRefundBatchesPerformanceVo.setPerformanceOrderStatisticalDao(result);
return AjaxResult.success(kylinOrderRefundBatchesPerformanceVo);
}
......
......@@ -343,14 +343,13 @@ public class PerformancesExpressController extends BaseController {
list.forEach(r -> {
excelList.add(OrderExpressExportExcelListDao.getNew().copy(r));
});
return excelUtil.exportExcel(excelList, "券码数据");
return excelUtil.exportExcel(excelList, "快递信息");
}
/**
* 下载导入模版
* @return
*/
@RequiresPermissions("kylin:performancesExpress:view")
@GetMapping("/importTemplate")
@ResponseBody
public AjaxResult importTemplate()
......
......@@ -106,6 +106,28 @@
<!-- <i class="fa fa-download"></i> 导出-->
<!-- </a>-->
<!-- </div>-->
<div class="col-sm-12 search-collapse">
<form id="formId2">
<div class="select-list">
<ul>
<li>
<label>短订单号:</label>
<input type="text" name="findCode"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="findCode()"><i
class="fa fa-search"></i>&nbsp;查询</a>
</li>
<li>
<label>长订单号:</label>
<input type="text" name="allCode" readonly/>
</li>
</ul>
</div>
</form>
</div>
<div class="col-sm-12 select-table table-bordered">
<table id="bootstrap-table"></table>
</div>
......@@ -122,6 +144,16 @@
var getTicketTypeDic = [[${@dict.getType('zhengzai_get_ticket_type')}]];
var payTypeDic = [[${@dict.getType('zhengzai_pay_type')}]];
var prefix2 = ctx + "kylin/refund";
function findCode() {
var shortCode = document.getElementsByName("findCode")[0].value;
var allCode = document.getElementsByName("allCode")[0];
$.operate.get(prefix2 + "/search/code?code=" + shortCode + "&type=2", function (res) {
allCode.value = res.msg;
});
}
$(function() {
var options = {
url: prefix + "/list",
......
......@@ -325,7 +325,7 @@
var rows = result.rows;
var html = '<option value="">全部</option>';
$.each(rows,function(index,value){
html += '<option value="'+value.ticketsId+'">'+value.title+'</option>'
html += '<option value="'+value.ticketsId+'">'+value.title+'-'+value.timeTitle+'</option>'
});
$('#selectTicketDiv').find('#openTicketListTplSelect').html(html);
openTicketList("openTicketListTpl", performanceId);
......
......@@ -28,6 +28,7 @@
<option value="2">取消退款</option>
<option value="1">运营审核通过</option>
<option value="5">运营审核驳回退款</option>
<option value="9">已确认收货</option>
<option value="7">财务审核通过等待退款</option>
<option value="8">财务审核驳回退款</option>
<option value="4">完成退款</option>
......@@ -40,6 +41,7 @@
<option value="2">取消退款</option>
<option value="1">运营审核通过</option>
<option value="5">运营审核驳回退款</option>
<option value="9">已确认收货</option>
<option value="7">财务审核通过等待退款</option>
<option value="8">财务审核驳回退款</option>
<option value="4">完成退款</option>
......@@ -48,9 +50,11 @@
</shiro:hasPermission>
<shiro:hasPermission name="kylin:refund:review">
<shiro:lacksRole name="admin">
<option value="0,8">全部</option>
<option value="0,8,4,6">全部</option>
<option value="0">请求退款</option>
<option value="8">财务审核驳回退款</option>
<option value="4">完成退款</option>
<option value="6">退款失败</option>
</shiro:lacksRole>
</shiro:hasPermission>
<shiro:hasPermission name="kylin:refund:ticketAudit">
......@@ -60,9 +64,11 @@
</shiro:hasPermission>
<shiro:hasPermission name="kylin:refund:execute">
<shiro:lacksRole name="admin">
<option value="1,9">全部</option>
<option value="1,9,4,6">全部</option>
<option value="1">运营审核通过</option>
<option value="9">已确认收货</option>
<option value="4">完成退款</option>
<option value="6">退款失败</option>
</shiro:lacksRole>
</shiro:hasPermission>
</select>
......
......@@ -61,7 +61,7 @@
layer.msg(result.msg);
return false;
}
$("#performanceTitle").text(result.data.kylinPerformanceMisVo.title);
$("#performanceTitle").text(result.data.title);
var options = {
data: result.data.performanceOrderStatisticalDao,
pagination: false,
......
......@@ -60,9 +60,9 @@
</a>
</div>
</div>
<div class="ibox-content">
<div class="ibox-content" style="height:480px">
<div class="echarts" id="provinceDataChart"></div>
<div class="echarts" id="provinceDataChart" style = "height:400px"></div>
</div>
</div>
</div>
......@@ -90,9 +90,9 @@
</a>
</div>
</div>
<div class="ibox-content">
<div class="ibox-content" style="height:480px">
<div class="echarts" id="cityDataChart"></div>
<div class="echarts" id="cityDataChart" style="height:400px"></div>
</div>
</div>
</div>
......@@ -120,9 +120,9 @@
</a>
</div>
</div>
<div class="ibox-content">
<div class="ibox-content" style="height:480px">
<div class="echarts" id="ageDataChart"></div>
<div class="echarts" id="ageDataChart" style="height:400px"></div>
</div>
</div>
</div>
......@@ -281,14 +281,21 @@
grid:{
x:30,
x2:40,
y2:24
y2:100
},
calculable : true,
xAxis : [
{
type : 'category',
// data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
data : name
data : name,
axisLabel:{
formatter:function(value){
return value.split("").join("\n");
}
// interval: 0,
// rotate: 30
}
}
],
yAxis : [
......@@ -390,14 +397,21 @@
grid:{
x:30,
x2:40,
y2:24
y2:100
},
calculable : true,
xAxis : [
{
type : 'category',
// data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
data : name
data : name,
axisLabel:{
formatter:function(value){
return value.split("").join("\n");
}
// interval: 0,
// rotate: 30
}
}
],
yAxis : [
......@@ -615,7 +629,8 @@
},
tooltip : {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
// formatter: "{a} <br/>{b} : {c} ({d}%)"
formatter: "{b} ({d}%)"
},
legend: {
orient : 'vertical',
......@@ -634,7 +649,8 @@
normal:{
label:{
show:true,
formatter: "{b} :\n {c} \n ({d}%)",
// formatter: "{b} :\n {c} \n ({d}%)",
formatter: "{b} :\n {d}%",
position:"inner"
}
}
......
......@@ -33,8 +33,8 @@ public class OrderExpressExportExcelListDao implements Serializable, Cloneable {
private String enterName;
@Excel(name = "入场人手机号")
private String enterMobile;
@Excel(name = "入场人身份证")
private String enterIdCod;
@Excel(name = "入场人证件号")
private String enterIdCode;
private static final OrderExpressExportExcelListDao obj = new OrderExpressExportExcelListDao();
......@@ -59,7 +59,7 @@ public class OrderExpressExportExcelListDao implements Serializable, Cloneable {
this.setExpressAddress(source.getExpressAddress());
this.setEnterName(source.getEnterName());
this.setEnterMobile(source.getEnterMobile());
this.setEnterIdCod(source.getEnterIdCod());
this.setEnterIdCode(source.getEnterIdCode());
return this;
}
}
......@@ -83,6 +83,8 @@ public class MQConst {
SWEET_REMIND_INSERT_DRAW("sweet:stream:rk.remindInsert", "group.remindInsert", "提醒记录"),
SWEET_APPLET_USER_INSERT_DRAW("sweet:stream:rk.sweetAppletUserInsert", "group.sweetAppletUserInsert", "小程序登录记录用户解密后信息"),
SWEET_TEMPLATE_MSG("sweet:stream:rk.sweetTemplateMsg", "group.sweetTemplateMsg", "发送模版消息"),
SWEET_CITY_VOTE_DRAW("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"),
SWEET_ANTIGENIC_QUESTION_DRAW("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"),
;
private final String key;
......
......@@ -112,9 +112,12 @@ liquidnet:
secret: a1307fab0a5f2380086a7c636f7339ea
token: tftipg1427706847
aeskey: LwVpmpuOcl7Mi3mtfQgBol11MsmMCATIqbPgHrEpDzx
modernsky:
zhengzaiActivity:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
modernsky:
appid: wx6bf7999941a06d15
secret: a12012b31307a539719dbe4d137ca45a
applet:
zhengzai:
appid: wx4732efeaa2b08086
......@@ -155,7 +158,7 @@ liquidnet:
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
expressType: 2 # 默认顺丰特快
depositumInfo: 演出纸质票
......
......@@ -114,9 +114,12 @@ liquidnet:
secret: a1307fab0a5f2380086a7c636f7339ea
token: tftipg1427706847
aeskey: LwVpmpuOcl7Mi3mtfQgBol11MsmMCATIqbPgHrEpDzx
modernsky:
zhengzaiActivity:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
modernsky:
appid: wx6bf7999941a06d15
secret: a12012b31307a539719dbe4d137ca45a
applet:
zhengzai:
appid: wx4732efeaa2b08086
......@@ -157,7 +160,7 @@ liquidnet:
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
expressType: 2 # 默认顺丰特快
depositumInfo: 演出纸质票
......
......@@ -20,5 +20,5 @@ public class OrderExpressExportListDao implements Serializable {
private String expressAddress;
private String enterName;
private String enterMobile;
private String enterIdCod;
private String enterIdCode;
}
......@@ -11,6 +11,7 @@ public class PerformancesTicketListDao implements Serializable, Cloneable {
private String ticketsId;
private String title;
private String timeTitle;
private static final PerformancesTicketListDao obj = new PerformancesTicketListDao();
......
......@@ -256,11 +256,11 @@
LEFT JOIN kylin_order_ticket_entities AS ote ON ote.order_id = ot.order_tickets_id
LEFT JOIN kylin_ticket_status AS kys ON kys.ticket_id = otr.ticket_id
WHERE (ots.status = 1 or ots.status = 3 or ots.status = 4 or ots.status = 6)
AND ote.ticket_id = ${ticketsId}
AND ote.ticket_id = ${ticketsId} group by order_ticket_entities_id
</select>
<select id="orderScriptDto" parameterType="java.lang.String" resultMap="orderScriptDtoResult">
SELECT ot.mid,
select s.mid,
order_tickets_id,
order_code,
status,
......@@ -268,12 +268,19 @@
number,
user_id,
oc.coupon_code
from (SELECT ot.mid,
order_tickets_id,
order_code,
status,
ticket_id,
number,
user_id
FROM kylin_order_tickets AS ot
inner JOIN kylin_order_ticket_status AS ots ON ots.order_id = ot.order_tickets_id
inner JOIN kylin_order_ticket_relations AS otr ON otr.order_id = ot.order_tickets_id
inner JOIN kylin_order_coupons AS oc ON oc.order_id = ot.order_tickets_id
WHERE status = 0 AND NOW() > DATE_SUB(ot.created_at,INTERVAL -(pay_countdown_minute+1) MINUTE) AND
oc.coupon_type != 101
WHERE status = 0 AND NOW() > DATE_SUB(ot.created_at,INTERVAL -(pay_countdown_minute+1) MINUTE)) as s
left JOIN kylin_order_coupons AS oc ON oc.order_id = s.order_tickets_id where oc.coupon_type != 101 or
oc.coupon_code is null
<if test="userId!=''">
AND user_id = #{userId}
</if>
......@@ -307,8 +314,8 @@
LEFT JOIN (SELECT * FROM kylin_order_express WHERE express_status NOT IN (1, 3)) AS oe ON oe.order_tickets_id =
kot.order_tickets_id
-- LEFT JOIN (SELECT * FROM kylin_order_express_route ORDER BY mid DESC LIMIT 1) AS oer ON oe.order_express_id =
-- oer.order_express_id
-- LEFT JOIN (SELECT * FROM kylin_order_express_route ORDER BY mid DESC LIMIT 1) AS oer ON oe.order_express_id =
-- oer.order_express_id
<where>
kotr.performance_id = #{performancesId}
AND kot.get_ticket_type = 'express'
......@@ -327,7 +334,9 @@
<if test="expressContacts != null and expressContacts != ''">AND kot.express_contacts LIKE concat('%',
#{expressContacts}, '%')
</if>
<if test="expressStatus != '' and expressStatus != 1 and expressStatus != 70">AND oe.express_status = ${expressStatus}</if>
<if test="expressStatus != '' and expressStatus != 1 and expressStatus != 70">AND oe.express_status =
${expressStatus}
</if>
<if test="expressStatus == 1">AND (oe.express_status IS NULL OR oe.express_status = ${expressStatus})</if>
<if test="expressStatus == 70">AND (oe.express_status > 3 AND oe.express_status != 80)</if>
<if test="mailno != ''">AND oe.mailno LIKE concat('%', #{mailno}, '%')</if>
......
......@@ -505,7 +505,7 @@
group by kotr.performance_id,kot.user_id
) t
) AS ut ON ut.performance_id = kp.performances_id
order by kt.type desc,kt.use_start asc
order by kt.type desc,kt.title,kt.use_start asc
</select>
<select id="getPerformanceSponsorList" resultMap="performanceSponsorDaoResult">
select distinct kp.sponsor_id, kp.sponsor, kp.sponsor_type
......
......@@ -45,12 +45,14 @@
<select id="getPerformancesTicketList" resultType="com.liquidnet.service.kylin.dao.PerformancesTicketListDao">
SELECT
a.tickets_id ,
a.title
a.title,
e.title as time_title
FROM
kylin_tickets AS a
LEFT JOIN kylin_ticket_status AS b ON b.ticket_id = a.tickets_id
LEFT JOIN kylin_ticket_relations AS c ON c.ticket_id = a.tickets_id
LEFT JOIN kylin_ticket_time_relation AS d ON d.times_id = c.times_id
LEFT JOIN kylin_ticket_times AS e ON e.ticket_times_id = d.times_id
where d.performance_id = ${performanceId}
and b.is_express = 1
and b.status IN (2, 3, 6, 7, 8, 9, 10)
......
......@@ -36,6 +36,7 @@
WHERE 1 > 0
and kotr.performance_id = ${performanceId}
and kots.`status` in (1, 3, 6)
and kots.transfer_status in('0','1','3','5')
and kot.coupon_type = 'no'
group by kotr.performance_id,ca.province
) x order by x.total_number desc
......@@ -55,9 +56,10 @@
left join sys_dict_id_card_area ca on substr(kote.enter_id_code,1,6) = ca.code
WHERE 1>0 and kotr.performance_id = #{performanceId}
and kots.`status` in(1,3,6)
and kots.transfer_status in('0','1','3','5')
and kot.coupon_type ='no'
group by kotr.performance_id,ca.pre_city
) x order by x.total_number desc
) x order by x.total_number desc limit 20
</select>
<!-- 演出按年龄统计-->
<select id="getAgeDataList" parameterType="java.lang.String" resultMap="getAgeDataListResult">
......@@ -72,6 +74,7 @@
WHERE 1 > 0
and kotr.performance_id = #{performanceId}
and kots.`status` in (1, 3, 6)
and kots.transfer_status in('0','1','3','5')
and kot.coupon_type = 'no'
and length(kote.enter_id_code)=18
group by kotr.performance_id, substr(curdate(), 1, 4) - substr(kote.enter_id_code, 7, 4)
......@@ -89,6 +92,7 @@
WHERE 1 > 0
and kotr.performance_id = ${performanceId}
and kots.`status` in (1, 3, 6)
and kots.transfer_status in('0','1','3','5')
and kot.coupon_type = 'no'
and length(kote.enter_id_code)=18
)x group by x.sex
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 防疫答题表
* </p>
*
* @author jiangxiulong
* @since 2021-09-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetAntigenicQuestion implements Serializable {
private static final long serialVersionUID = 1268639425174449151L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* question_id
*/
private String questionId;
/**
* 活动类型 1MDSK防疫答题 2草莓防疫答题
*/
private Integer type;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 姓名
*/
private String nickname;
/**
* 居住地址
*/
private String address;
/**
* 联系电话
*/
private String phone;
/**
* 紧急联系人电话
*/
private String urgentPhone;
/**
* 答案
*/
private String keyword1;
/**
* 答案补充
*/
private String keyword11;
/**
* 答案
*/
private String keyword2;
/**
* 答案
*/
private String keyword3;
/**
* 答案
*/
private String keyword4;
/**
* 答案
*/
private String keyword5;
/**
* 答案
*/
private String keyword6;
/**
* 答案
*/
private String keyword7;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetAntigenicQuestion;
/**
* <p>
* 防疫答题表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
public interface SweetAntigenicQuestionMapper extends BaseMapper<SweetAntigenicQuestion> {
}
......@@ -19,8 +19,8 @@
<module>liquidnet-service-kylin-do</module>
<module>liquidnet-service-adam-do</module>
<module>liquidnet-service-dragon-do</module>
<module>liquidnet-service-candy-do</module>
<module>liquidnet-service-sweet-do</module>
<module>liquidnet-service-candy-do</module>
</modules>
<dependencies>
......
......@@ -5,12 +5,12 @@ import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Component
@FeignClient(name = "liquidnet-service-platform",
contextId = "FeignPlatformAlipayBackClient", path = "",
url = "",
url = "${liquidnet.service.platform.url}",
// url = "",
fallback = FallbackFactory.Default.class)
public interface FeignPlatformAlipayBackClient {
......
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.GetMapping;
@Component
@FeignClient(name = "liquidnet-service-sweet",
contextId = "FeignSweetTaskActivityClient", path = "",
url = "${liquidnet.service.sweet.url}",
fallback = FallbackFactory.Default.class)
public interface FeignSweetTaskActivityClient {
@GetMapping("sweet/sweetCityVote/setStatList")
ResponseDto<Boolean> setStatList();
}
......@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
@Component
@FeignClient(name = "liquidnet-service-sweet",
contextId = "FeignSweetWechatClient", path = "",
url = "",
url = "${liquidnet.service.sweet.url}",
fallback = FallbackFactory.Default.class)
public interface FeignSweetWechatClient {
......
......@@ -103,7 +103,7 @@ public class AdamRscController {
}
try {
List<String> uidList = req.getUidList();
uidList.parallelStream().forEach(r -> {
uidList.forEach(r -> {
AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(r);
if (null != userInfoVo) {
list.add(AdamChimeUinfoDto.getNew().copy(userInfoVo));
......
......@@ -612,7 +612,7 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
if (!CollectionUtils.isEmpty(memberRightsCouponVoList)) {
// 该权益下关联券统计
Map<String, Long> rightsCouponCtMap = memberRightsCouponVoList.parallelStream()
Map<String, Long> rightsCouponCtMap = memberRightsCouponVoList.stream()
.collect(Collectors.groupingBy(AdamMemberRightsCouponVo::getCouponId, Collectors.counting()));
rightsCouponCtMap.forEach((couponId, num) -> {
......
......@@ -95,7 +95,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
}
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid, userCreateTime);
if (!CollectionUtil.isEmpty(dtoList)) {
Map<String, Long> mCouponCountMap = dtoList.parallelStream()
Map<String, Long> mCouponCountMap = dtoList.stream()
.filter(r -> (r.getExclusive() == 1 && r.getState() == 1))
.collect(Collectors.groupingBy(CandyUserCouponBasicDto::getMcouponId, Collectors.counting()));
......
......@@ -40,12 +40,14 @@ public class CouponBaseUtil {
vo.setUsedAt(DateUtil.format(dtoItem.getUsedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setUsedFor(dtoItem.getUsedFor());
//适用范围 规则
for (CandyCouponRuleDto ruleItem : dtoItem.getUseRules()) {
CandyCouponRulesVo voRules = CandyCouponRulesVo.getNew();
voRules.setUseScope(ruleItem.getUseScope());
voRules.setBusiId(ruleItem.getBusiId());
voRules.setBusiName(ruleItem.getBusiName());
rulesVoList.add(voRules);
if (dtoItem.getUseRules() != null) {
for (CandyCouponRuleDto ruleItem : dtoItem.getUseRules()) {
CandyCouponRulesVo voRules = CandyCouponRulesVo.getNew();
voRules.setUseScope(ruleItem.getUseScope());
voRules.setBusiId(ruleItem.getBusiId());
voRules.setBusiName(ruleItem.getBusiName());
rulesVoList.add(voRules);
}
}
//券类别
if (dtoItem.getBusiType().equals(3)) {
......
......@@ -82,7 +82,7 @@ public class ChimeUserBiz {
}
List<ChimeUserTagsMappingVo> userTagList = new ArrayList<>();
//设置用户id
userTagVoList.parallelStream().forEach(vo -> {
userTagVoList.forEach(vo -> {
ChimeUserTagsMappingVo userTagsMappingVo = ChimeUserTagsMappingVo.getNew();
userTagsMappingVo.setTagCode(vo.getVal());
userTagsMappingVo.setTagDesc(vo.getDesc());
......@@ -111,7 +111,7 @@ public class ChimeUserBiz {
// }
// }
// //设置用户id
// userTagVoList.parallelStream().forEach(vo -> {
// userTagVoList.forEach(vo -> {
// ChimeUserTagDto userTagDto = ChimeUserTagDto.getNew();
// userTagDto.setTagCode(vo.getVal());
// userTagDto.setTagDesc(vo.getDesc());
......@@ -198,6 +198,7 @@ public class ChimeUserBiz {
KylinPerformanceVo kylinPerformanceVo = responseDto.getData();
if(kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS6.getIndex()
||kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS8.getIndex()
||kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS11.getIndex()
||kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS9.getIndex()){
isOnline = true;
}
......@@ -257,7 +258,7 @@ public class ChimeUserBiz {
return null;
}
}
String rsSexDesc = "其他";
String rsSexDesc = "保密";
switch (adamTagVo.getDesc()){
case "男性":
rsSexDesc = "男";
......
......@@ -242,7 +242,7 @@ public class TestDataUtils {
// reqDto.setTags("tags40,tags80");
NewPageResult<ChimeUserInfoDto> pageInfo = chimePerformanceService.getUserListByCon(reqDto);
log.info("总共获取总数pagecount:{}",pageInfo.getList().size());
pageInfo.getList().parallelStream().forEach(dto -> {
pageInfo.getList().forEach(dto -> {
// System.out.println(dto.getUserId());
// System.out.println(JsonUtils.toJson(dto.getUserTags()));
});
......
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerAntigenicQuestionRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW;
@Configuration
public class ConsumerAntigenicQuestionRedisStreamConfig {
@Autowired
ConsumerAntigenicQuestionRdsReceiver consumerAntigenicQuestionRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveSqlAntigenicQuestion(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_ANTIGENIC_QUESTION_DRAW.getGroup(), SWEET_ANTIGENIC_QUESTION_DRAW.name() + t),
StreamOffset.create(SWEET_ANTIGENIC_QUESTION_DRAW.getKey(), ReadOffset.lastConsumed()), consumerAntigenicQuestionRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlAntigenicQuestion(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlAntigenicQuestion(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlAntigenicQuestion2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlAntigenicQuestion(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlAntigenicQuestion3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlAntigenicQuestion(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerCityVoteRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.SWEET_CITY_VOTE_DRAW;
@Configuration
public class ConsumerCityVoteRedisStreamConfig {
@Autowired
ConsumerCityVoteRdsReceiver consumerCityVoteRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveSqlCityVote(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_CITY_VOTE_DRAW.getGroup(), SWEET_CITY_VOTE_DRAW.name() + t),
StreamOffset.create(SWEET_CITY_VOTE_DRAW.getKey(), ReadOffset.lastConsumed()), consumerCityVoteRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlCityVote(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCityVote(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCityVote2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCityVote(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlCityVote3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlCityVote(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerAntigenicQuestionRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW.getGroup();
}
}
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerCityVoteRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_CITY_VOTE_DRAW.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_CITY_VOTE_DRAW.getGroup();
}
}
......@@ -29,7 +29,7 @@ public class PlatformTaskHandler {
String result = feignPlatformAlipayBackClient.alipayActiveCallback().getData();
log.info("alipayActiveCallback:结果:"+result);
ReturnT<String> success = ReturnT.SUCCESS;
success.setContent(result);
success.setMsg(result);
return success;
} catch (Exception e) {
log.error("exception of handler:{}", e.getMessage(), e);
......
package com.liquidnet.service.executor.main.handler;
import com.liquidnet.service.feign.sweet.task.FeignSweetTaskActivityClient;
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;
/**
* sweet
*/
@Component
public class SweetCityVoteTaskHandler {
private static final Logger log = LoggerFactory.getLogger(SweetCityVoteTaskHandler.class);
@Autowired
private FeignSweetTaskActivityClient feignSweetTaskActivityClient;
@XxlJob(value = "sev-sweet:cityVoteStat")
public ReturnT<String> cityVoteStatHandler() {
try {
Boolean data = feignSweetTaskActivityClient.setStatList().getData();
log.info("cityVoteStatHandler:结果:{}", data);
ReturnT<String> success = ReturnT.SUCCESS;
success.setMsg(String.valueOf(data));
return success;
} catch (Exception e) {
log.error("exception of handler:{}", e.getMessage(), e);
ReturnT<String> fail = ReturnT.FAIL;
fail.setMsg(e.getLocalizedMessage());
return fail;
}
}
}
......@@ -21,11 +21,16 @@ public class SweetWechatTaskHandler {
@XxlJob(value = "sev-sweet:sendMsg")
public ReturnT<String> sendWechatMsgHandler() {
try {
feignSweetWechatClient.send().getData();
log.info("sendWechatMsgHandler:结果:success");
return ReturnT.SUCCESS;
Object data = feignSweetWechatClient.send().getData();
log.info("sendWechatMsgHandler:结果:{}", data);
ReturnT<String> success = ReturnT.SUCCESS;
success.setMsg(String.valueOf(data));
return success;
} catch (Exception e) {
return ReturnT.FAIL;
log.error("exception of handler:{}", e.getMessage(), e);
ReturnT<String> fail = ReturnT.FAIL;
fail.setMsg(e.getLocalizedMessage());
return fail;
}
}
......
......@@ -928,21 +928,6 @@ CREATE TABLE `kylin_order_express_status`
PRIMARY KEY (`mid`)
) ENGINE = InnoDB COMMENT '订单快递状态表';
drop TABLE if exists `kylin_order_express_performances`;
CREATE TABLE `kylin_order_express_performances`
(
`mid` int unsigned NOT NULL AUTO_INCREMENT,
`order_express_performances_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_express_performances_id',
`performances_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'performances_id',
`total1` int NOT NULL DEFAULT 0 COMMENT '已下单',
`total2` int NOT NULL DEFAULT 0 COMMENT '已揽收',
`total3` int NOT NULL DEFAULT 0 COMMENT '已签收',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
KEY `order_express_performances_id_index` (`order_express_performances_id`),
PRIMARY KEY (`mid`)
) ENGINE = InnoDB COMMENT '订单快递演出记录表';
drop TABLE if exists `kylin_order_refund_pic`;
CREATE TABLE `kylin_order_refund_pic`
(
......
......@@ -8,6 +8,7 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayDetailVo;
import com.liquidnet.service.kylin.service.IKylinLackRegistersService;
import com.liquidnet.service.kylin.service.IKylinPerformancesService;
import com.liquidnet.service.kylin.service.impl.KylinPerformancesServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -40,6 +41,8 @@ public class KylinPerformancesController {
private KylinPerformancesServiceImpl kylinPerformancesService;
@Autowired
private IKylinLackRegistersService kylinLackRegistersService;
@Autowired
private IKylinPerformancesService iKylinPerformancesService;
@GetMapping("localList")
@ApiOperation("本地演出列表")
......@@ -233,7 +236,17 @@ public class KylinPerformancesController {
@ApiImplicitParam(type = "query", dataType = "String", name = "performancesId", value = "演出id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "ticketsId", value = "票种id", required = true)
})
public ResponseDto<String> addLackRegister(@RequestParam("performancesId") String performancesId, @RequestParam("ticketsId") String ticketsId){
return kylinLackRegistersService.addLackRegister(performancesId,ticketsId);
public ResponseDto<String> addLackRegister(@RequestParam("performancesId") String performancesId, @RequestParam("ticketsId") String ticketsId) {
return kylinLackRegistersService.addLackRegister(performancesId, ticketsId);
}
@GetMapping("couponPerformanceId")
@ApiOperation("根据券信息获取演出id")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "Integer", name = "useScope", value = "适用范围[91-场次|92-票]", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "busiId", value = "使用Id", required = true)
})
public ResponseDto<String> addLackRegister(@RequestParam("useScope") Integer useScope, @RequestParam("busiId") String busiId) {
return iKylinPerformancesService.getPerformanceIdByInfo(useScope, busiId);
}
}
......@@ -5,11 +5,17 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.DistanceUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.kylin.constant.KylinPerformanceStatusEnum;
import com.liquidnet.service.kylin.dto.param.PerformanceMemberAuditParam;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketTimesPartnerVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayDetailVo;
import com.liquidnet.service.kylin.service.IKylinPerformancesService;
import com.liquidnet.service.kylin.utils.DataUtils;
......@@ -421,6 +427,7 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
}
return newList;
}
public List<KylinPerformanceVo> checkAppStatusRoad(List<KylinPerformanceVo> list) {
List<KylinPerformanceVo> newList = ObjectUtil.getKylinPerformanceVoArrayList();
if (!CollectionUtils.isEmpty(list)) {
......@@ -595,8 +602,10 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
}
return isMemberStatus;
}
/**
* 获取我的已购票演出列表
*
* @return
*/
public List<KylinPerformanceVo> myPerformancesList() {
......@@ -604,4 +613,33 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
List<KylinPerformanceVo> performanceVoList = dataUtils.myPerformancesList(userId);
return performanceVoList;
}
@Override
public ResponseDto<String> getPerformanceIdByInfo(Integer useScope, String busiId) {
if (useScope.equals(91)) {//场次
List<KylinTicketTimesPartnerVo> voTimes = mongoTemplate.find(Query.query(Criteria.where("ticketTimesId").is(busiId)),
KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
if(voTimes.size()<=0){
return ResponseDto.failure();
}else{
return ResponseDto.success(voTimes.get(0).getPerformancesId());
}
} else if (useScope.equals(92)) {//票
List<KylinTicketPartnerVo> voTickets = mongoTemplate.find(Query.query(Criteria.where("ticketsId").is(busiId)),
KylinTicketPartnerVo.class, KylinTicketPartnerVo.class.getSimpleName());
if(voTickets.size()<=0) {
return ResponseDto.failure();
}else{
List<KylinTicketTimesPartnerVo> voTimes = mongoTemplate.find(Query.query(Criteria.where("ticketTimesId").is(voTickets.get(0).getTimesId())),
KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
if(voTimes.size()<=0){
return ResponseDto.failure();
}else{
return ResponseDto.success(voTimes.get(0).getPerformancesId());
}
}
} else {
return ResponseDto.failure();
}
}
}
......@@ -329,7 +329,7 @@ public class KylinRefundsStatusServiceImpl {
});
sqlsDataC.add(new Object[]{
kylinOrderRefunds.getOrderRefundsId(), kylinOrderRefunds.getOrderTicketsId(), kylinOrderRefunds.getOrderRefundCode(),
kylinOrderRefunds.getPrice(), kylinOrderRefunds.getPriceExpress(), kylinOrderRefunds.getPriceCharges(), kylinOrderRefunds.getStatus(),
kylinOrderRefunds.getPrice(), kylinOrderRefunds.getPriceExpress(), 0, kylinOrderRefunds.getStatus(),
kylinOrderRefunds.getType(), kylinOrderRefunds.getApplicantId(), kylinOrderRefunds.getApplicantName(),
kylinOrderRefunds.getApplicantAt(), kylinOrderRefunds.getReason(), kylinOrderRefunds.getCreatedAt()
});
......@@ -350,4 +350,5 @@ public class KylinRefundsStatusServiceImpl {
return "";
}
}
}
......@@ -668,8 +668,14 @@ public class DataUtils {
* 获取我的演出列表
*/
public List<KylinPerformanceVo> myPerformancesList(String userId) {
LocalDateTime nowTime = LocalDateTime.now();
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime);
Query queryNew = new Query();
queryNew.addCriteria(Criteria.where("userId").is(userId));
queryNew.addCriteria(Criteria.where("timeEnd").gte(nowTimeStr));
queryNew.addCriteria(Criteria.where("appStatus").in(6, 8, 9, 10));
queryNew.addCriteria(Criteria.where("isShow").is(1));
List<String> performanceIdList = mongoTemplate.findDistinct(queryNew, "performanceId", "KylinOrderTicketVo", KylinOrderTicketVo.class, String.class);
log.info("myPerformancesList performanceIdList.size:{}", performanceIdList.size());
......@@ -693,7 +699,7 @@ public class DataUtils {
// 获取手续费
public ArrayList<OrderRefundPoundage> getRefundPoundage(Integer isRefundPoundage) {
ArrayList<OrderRefundPoundage> orderRefundPoundageArrayList = ObjectUtil.getOrderRefundPoundageArrayList();
if (isRefundPoundage > 0) { // 开启了演出退票有手续费
if (null != isRefundPoundage && isRefundPoundage > 0) { // 开启了演出退票有手续费
Object obj = redisUtil.get(KylinRedisConst.ORDER_REFUND_POUNDAGE);
if (obj == null) {
OrderRefundPoundage vo1 = OrderRefundPoundage.getNew();
......
......@@ -120,6 +120,10 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
}
}
if (performanceData == null || ticketTimesData == null || ticketData == null) {
return ResponseDto.failure(ErrorMapping.get("20004"));//参数错误
}
if (payOrderParam.getIsExpress().equals(1) && ticketData.getIsExpress().equals(0)) {
return ResponseDto.failure("票种类型错误");//参数错误
} else if (payOrderParam.getIsElectronic().equals(1) && ticketData.getIsElectronic().equals(0)) {
......@@ -128,10 +132,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
return ResponseDto.failure("票种类型错误");//参数错误
}
if (performanceData == null || ticketTimesData == null || ticketData == null) {
return ResponseDto.failure(ErrorMapping.get("20004"));//参数错误
}
if (!ticketData.getTimeId().equals(payOrderParam.getTimeId()) || !ticketTimesData.getPerformanceId().equals(payOrderParam.getPerformanceId())) {
return ResponseDto.failure(ErrorMapping.get("20004"));//参数错误
}
......@@ -307,7 +307,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
return resultData;
}
} catch (Exception e) {
log.error("Kylin Order Pay Error = ", e);
log.error("Kylin Order Pay Error = {}", e);
if (isDownGeneral) {
orderUtils.changeSurplus(isPay, payOrderParam.getTicketId(), payOrderParam.getNumber());
for (AdamEntersVo enters : entersVoList) {
......@@ -319,10 +319,13 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
}
}
}
if (e.getMessage().equals("券不可用")) {
if(e.getMessage()==null){
return ResponseDto.failure(ErrorMapping.get("20018"));//乱七八糟异常
}else if (e.getMessage().equals("券不可用")) {
return ResponseDto.failure(ErrorMapping.get("20030"));//券不可用
}else{
return ResponseDto.failure(ErrorMapping.get("20018"));//乱七八糟异常
}
return ResponseDto.failure(ErrorMapping.get("20018"));//乱七八糟异常
}
}
......@@ -916,29 +919,32 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
);
}
//模板消息
String fieldName = performanceData.getFieldName();
Integer number = orderTicketData.getNumber();
String useTime = orderTicketData.getUseStart();
String performanceName = performanceData.getTitle();
SweetOpenSendMsgParam param = SweetOpenSendMsgParam.getNew();
param.setSendTargetType(1);
param.setTemplateId("glzgM9PLgchlaenpXN5H3N9JDwV69a52R8H6z95hzrA");
TemplateOrderParam templateOrderParam = TemplateOrderParam.getNew();
templateOrderParam.setFirst("您已购票成功");
templateOrderParam.setKeyword1(performanceName);
templateOrderParam.setKeyword2(number.toString());
templateOrderParam.setKeyword3(useTime);
templateOrderParam.setKeyword4(fieldName);
templateOrderParam.setRemark("点击详情 查看更多票务信息");
param.setTemplateData(JSON.toJSONString(templateOrderParam));
param.setJumpType(4);
param.setJumpUrl("http://m.zhengzai.tv/#/order/ticket/orderdetail?id="+orderTicketData.getOrderTicketsId());
param.setJumpAppletPagePath("/pages/webview?query=orderDetail&id="+orderTicketData.getOrderTicketsId());
param.setJumpAppletUsePath(false);
param.setPhone(orderTicketData.getUserMobile());
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_TEMPLATE_MSG.getKey(),
JsonUtils.toJson(param));
// try {
// String fieldName = performanceData.getFieldName();
// Integer number = orderTicketData.getNumber();
// String useTime = orderTicketData.getUseStart();
// String performanceName = performanceData.getTitle();
// SweetOpenSendMsgParam param = SweetOpenSendMsgParam.getNew();
// param.setSendTargetType(1);
// param.setTemplateId("glzgM9PLgchlaenpXN5H3N9JDwV69a52R8H6z95hzrA");
// TemplateOrderParam templateOrderParam = TemplateOrderParam.getNew();
// templateOrderParam.setFirst("您已购票成功");
// templateOrderParam.setKeyword1(performanceName);
// templateOrderParam.setKeyword2(number.toString());
// templateOrderParam.setKeyword3(useTime);
// templateOrderParam.setKeyword4(fieldName);
// templateOrderParam.setRemark("点击详情 查看更多票务信息");
// param.setTemplateData(JSON.toJSONString(templateOrderParam));
// param.setJumpType(4);
// param.setJumpUrl("http://m.zhengzai.tv/#/order/ticket/orderdetail?id=" + orderTicketData.getOrderTicketsId());
// param.setJumpAppletPagePath("/pages/webview?query=orderDetail&id=" + orderTicketData.getOrderTicketsId());
// param.setJumpAppletUsePath(false);
// param.setPhone(orderTicketData.getUserMobile());
// queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_TEMPLATE_MSG.getKey(),
// JsonUtils.toJson(param));
// }catch (Exception e){
// log.info("下单消息模版错误",e);
// }
// 大麦回调
// sycDamaiOrder(orderTickets.getOrderTicketsId(), orderTicketData.getIsMember());
}
......
......@@ -11,4 +11,4 @@ liquidnet:
spring:
profiles:
include: service-order
include: service-order
\ No newline at end of file
......@@ -6,6 +6,6 @@ spring:
server:
tomcat:
max-threads: 2000
min-spare-threads: 200
min-spare-threads: 2000
max-connections: 20000
connection-timeout: 5000
......@@ -28,7 +28,7 @@ kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_pay
kylin_order_ticket_status.overtimeRefund=UPDATE kylin_order_ticket_status SET status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_order_tickets.overtimeRefund=UPDATE kylin_order_tickets SET payment_id = ? , payment_type = ? ,updated_at = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_order_ticket_entities.overtimeRefund=UPDATE kylin_order_ticket_entities SET is_payment = ? ,updated_at = ? WHERE order_ticket_entities_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_order_refund.overtimeRefund=INSERT INTO kylin_order_refunds (order_refunds_id,order_tickets_id,order_refund_code,price,price_express,status,type,applicant_id,applicant_name,applicant_at,reason,created_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_refund.overtimeRefund=INSERT INTO kylin_order_refunds (order_refunds_id,order_tickets_id,order_refund_code,price,price_express,status,type,applicant_id,applicant_name,applicant_at,reason,created_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_refund_entities.overtimeRefund=INSERT INTO kylin_order_refund_entities (order_refunds_entities_id,order_refunds_id,refund_price,order_ticket_entities_id,created_at) VALUES(?,?,?,?,?)
......
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.liquidnet.service.base.ResponseDto;
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 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.*;
/**
* <p>
* 阿里云上传
* </p>
*
* @author jiangxiulong
* @since 2021-07-09
*/
@Slf4j
@Api(tags = "basicServices")
@RestController
@RequestMapping("basicServices/wechatShareSign")
public class WechatShareController {
@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);
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")
@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);
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();
}
}
}
......@@ -29,7 +29,7 @@ import java.util.List;
* 演出 服务实现类
* </p>
*
* @author liquidnet
* @author jiangxiulong
* @since 2021-05-05
*/
@Service
......@@ -119,7 +119,7 @@ public class PerformancesExpressCallbackServiceImpl extends ServiceImpl<KylinOrd
public boolean orderRoute(@RequestBody String params) {
boolean res = shunfengSignUtils.receiveRequestAndCheckSign(params, httpServletRequest);
// {"id":"123","mailno":"SF1020099313222","orderid":"NEW127745085969203221966686005","acceptTime":"2021-06-20 11:37:33","acceptAddress":"深圳市","remark":"顺丰已收件(测试推送)","opCode":"80","companyId":"557104628450889728","routeAddress":"https://devplatform.zhengzai.tv/platform/performancesExpress/orderRoute"}
if (true) {
if (res) {
PerformanceExpressPushRouteParam performanceExpressPushRouteParam = JsonUtils.fromJson(params, PerformanceExpressPushRouteParam.class);
KylinOrderExpressRoute kylinOrderExpressRoute = new KylinOrderExpressRoute();
String orderExpressRouteId = IDGenerator.nextSnowId();
......
......@@ -74,15 +74,15 @@ public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponM
List<CandyUserCouponBasicDto> basicDtoList = candyUserCouponMapper.selectMultiForUserCouponBasicDto(uid);
if (!CollectionUtils.isEmpty(basicDtoList)) {
List<String> couponIdList = basicDtoList.parallelStream().map(CandyUserCouponBasicDto::getCouponId).collect(Collectors.toList());
List<String> couponIdList = basicDtoList.stream().map(CandyUserCouponBasicDto::getCouponId).collect(Collectors.toList());
List<CandyCouponRuleDto> couponRuleDtoList = candyCouponRuleMapper.selectListForCouponRuleDto(couponIdList);
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.parallelStream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.stream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
// Map<String, List<CandyUserCouponBasicDto>> basicDtoListMap = basicDtoList.parallelStream().collect(Collectors.groupingBy(CandyUserCouponBasicDto::getCouponId));
// Map<String, List<CandyUserCouponBasicDto>> basicDtoListMap = basicDtoList.stream().collect(Collectors.groupingBy(CandyUserCouponBasicDto::getCouponId));
basicDtoList.parallelStream().forEach(dto -> {
basicDtoList.forEach(dto -> {
dto.setUseRules(couponRuleDtoListMap.get(dto.getCouponId()));
});
......@@ -94,13 +94,13 @@ public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponM
public List<CandyCommonCouponBasicDto> ccouponBasicDtoByUidProcessing(LocalDateTime ucreatedAt) {
List<CandyCommonCouponBasicDto> basicDtoList = candyCommonCouponMapper.selectMultiForCommonCouponBasicDto(ucreatedAt);
if (!CollectionUtils.isEmpty(basicDtoList)) {
List<String> couponIdList = basicDtoList.parallelStream().map(CandyCommonCouponBasicDto::getCouponId).collect(Collectors.toList());
List<String> couponIdList = basicDtoList.stream().map(CandyCommonCouponBasicDto::getCouponId).collect(Collectors.toList());
List<CandyCouponRuleDto> couponRuleDtoList = candyCouponRuleMapper.selectListForCouponRuleDto(couponIdList);
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.parallelStream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.stream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
basicDtoList.parallelStream().forEach(dto -> {
basicDtoList.forEach(dto -> {
dto.setUseRules(couponRuleDtoListMap.get(dto.getCouponId()));
});
......
......@@ -542,7 +542,7 @@ public class KylinPerformancesPartnerServiceImpl extends ServiceImpl<KylinPerfor
try {
KylinPerformanceStatus performanceStatusData = performanceStatusMapper.selectOne(Wrappers.lambdaQuery(KylinPerformanceStatus.class).eq(KylinPerformanceStatus::getPerformanceId, performancesId));
if (performanceStatusData.getStatus() >= 3 && performanceStatusData.getStatus() != 4 && performanceStatusData.getStatus() != 7 && performanceStatusData.getStatus() != 10) {//未提审||被拒绝
if (performanceStatusData.getStatus() >= 3 && performanceStatusData.getStatus() != 4 && performanceStatusData.getStatus() != 7) {//未提审||被拒绝 && performanceStatusData.getStatus() != 10
LocalDateTime updatedAt = LocalDateTime.now();
KylinPerformanceStatus performanceStatus = KylinPerformanceStatus.getNew();
performanceStatus.setStatus(7);
......
......@@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -259,7 +260,7 @@ public class KylinTicketTimesPartnerServiceImpl extends ServiceImpl<KylinTicketT
@Override
public List<KylinTicketTimesPartnerVo> getTimesMongoList(String performancesId) {
return mongoTemplate.find(Query.query(Criteria.where("performancesId").is(performancesId).and("status").ne(0)), KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
return mongoTemplate.find(Query.query(Criteria.where("performancesId").is(performancesId).and("status").ne(0)).with(Sort.by(Sort.Direction.ASC, "createdAt")), KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
}
@Override
......
......@@ -26,6 +26,7 @@ import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -357,7 +358,10 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
@Override
public List<KylinTicketPartnerVo> getTicketMongoList(String timesId) {
return mongoTemplate.find(Query.query(Criteria.where("timesId").is(timesId).and("status").ne(-1)), KylinTicketPartnerVo.class, KylinTicketPartnerVo.class.getSimpleName());
return mongoTemplate.find(Query.query(Criteria.where("timesId").is(timesId).and("status").ne(-1))
// .with(Sort.by(Sort.Direction.ASC, "status")).with(Sort.by(Sort.Direction.ASC, "price")),
.with(Sort.by(Sort.Direction.ASC, "createdAt")),
KylinTicketPartnerVo.class, KylinTicketPartnerVo.class.getSimpleName());
}
@Override
......
......@@ -439,6 +439,7 @@ CREATE TABLE `sweet_wechat_user`
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '正在现场服务号关注事件储存用户信息表';
alter table sweet_wechat_user add type tinyint NOT NULL DEFAULT 1 COMMENT '服务类型 1正在 2摩登' after user_id;
-- 小程序登录记录用户解密后信息表
drop TABLE if exists `sweet_applet_user`;
......@@ -480,6 +481,45 @@ CREATE TABLE `sweet_answer`
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '答题表';
-- 城市投票表
drop TABLE if exists `sweet_city_vote`;
CREATE TABLE `sweet_city_vote`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`vote_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'vote_id',
`phone` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号',
`openId` varchar(255) NOT NULL DEFAULT '' COMMENT 'openId',
`unionId` varchar(255) NOT NULL DEFAULT '' COMMENT 'unionId',
`city_code` varchar(255) NOT NULL DEFAULT '' COMMENT '城市代码',
`city_name` varchar(255) NOT NULL DEFAULT '' COMMENT '城市名称',
`day_time` varchar(255) NOT NULL DEFAULT '' COMMENT '投票天',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_city_vote_vote_id` (`vote_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '城市投票表';
drop TABLE if exists `sweet_city_vote_stat`;
CREATE TABLE `sweet_city_vote_stat`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`stat_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'stat_id',
`city_code` varchar(255) NOT NULL DEFAULT '' COMMENT '城市代码',
`city_name` varchar(255) NOT NULL DEFAULT '' COMMENT '城市名称',
`vote_num` int NOT NULL DEFAULT 0 COMMENT '真实投票数量',
`manual_vote_num` int 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_city_vote_stat_stat_id` (`stat_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '城市投票统计表';
-- 提醒记录
drop TABLE if exists `sweet_remind`;
CREATE TABLE `sweet_remind`
......@@ -500,3 +540,33 @@ CREATE TABLE `sweet_remind`
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '提醒记录表';
-- 防疫答题
drop TABLE if exists `sweet_antigenic_question`;
CREATE TABLE `sweet_antigenic_question`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`question_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'question_id',
`type` tinyint NOT NULL DEFAULT 0 COMMENT '活动类型 1MDSK防疫答题 2草莓防疫答题',
`openId` varchar(255) NOT NULL DEFAULT '' COMMENT 'openId',
`unionId` varchar(255) NOT NULL DEFAULT '' COMMENT 'unionId',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '居住地址',
`phone` varchar(255) NOT NULL DEFAULT '' COMMENT '联系电话',
`urgent_phone` varchar(255) NOT NULL DEFAULT '' COMMENT '紧急联系人电话',
`keyword1` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword11` varchar(255) NOT NULL DEFAULT '' COMMENT '答案补充',
`keyword2` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword3` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword4` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword5` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword6` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword7` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_question_id` (`question_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '防疫答题表';
......@@ -27,4 +27,12 @@ XGROUP CREATE sweet:stream:rk.sweetAppletUserInsert group.sweetAppletUserInsert
-- 发送模版消息 --
XADD sweet:stream:rk.sweetTemplateMsg * 0 0
XGROUP CREATE sweet:stream:rk.sweetTemplateMsg group.sweetTemplateMsg 0
\ No newline at end of file
XGROUP CREATE sweet:stream:rk.sweetTemplateMsg group.sweetTemplateMsg 0
-- 用户投票记录 --
XADD sweet:stream:rk.cityVote * 0 0
XGROUP CREATE sweet:stream:rk.cityVote group.cityVote 0
-- 防疫答题 --
XADD sweet:stream:rk.antigenicQuestion * 0 0
XGROUP CREATE sweet:stream:rk.antigenicQuestion group.antigenicQuestion 0
\ No newline at end of file
......@@ -69,6 +69,18 @@
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet-do</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
......
......@@ -24,6 +24,14 @@ public class SweetConstant {
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_STR="sweet:wechatUser:unionIdStr:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_UNIONID="sweet:wechatUser:openId:";
public final static String REDIS_KEY_SWEET_ANSWER_PHONE="sweet:answer:phone:";
public final static String REDIS_KEY_SWEET_CITY_VOTE_STAT_LIST="sweet:cityVote:StatList";
public final static String REDIS_KEY_SWEET_CITY_VOTE_CITY_CODE="sweet:cityVote:cityCode:";
public final static String REDIS_KEY_SWEET_CITY_VOTE_USER="sweet:cityVote:user:";
public final static String REDIS_KEY_SWEET_CITY_VOTE_STAT_UPDATE_TIME="sweet:cityVote:updateTime";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY="sweet:wechatUser:modernsky:unionId:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_STR_MODERNSKY="sweet:wechatUser:modernsky:unionIdStr:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY="sweet:wechatUser:modernsky:openId:";
// public enum ManualPosition {
// artist("艺人","artist"),
......
package com.liquidnet.service.sweet.controller;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetArtists;
import com.liquidnet.service.sweet.service.ISweetAnswerService;
import com.liquidnet.service.sweet.vo.SweetAnswerVo;
import io.swagger.annotations.Api;
......@@ -21,7 +19,7 @@ import org.springframework.web.bind.annotation.*;
* @author jiangxiulong
* @since 2021-08-12
*/
@Api(tags = "答案")
@Api(tags = "活动-答案")
@RestController
@RequestMapping("/sweetAnswer")
public class SweetAnswerController {
......
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetAntigenicQuestionParam;
import com.liquidnet.service.sweet.service.ISweetAntigenicQuestionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 防疫答题表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Api(tags = "活动-防疫答题")
@RestController
@RequestMapping("/AntigenicQuestion")
public class SweetAntigenicQuestionController {
@Autowired
private ISweetAntigenicQuestionService sweetAntigenicQuestionService;
@PostMapping("create")
@ApiOperation("添加答题记录")
public ResponseDto<Boolean> add(@Valid @RequestBody SweetAntigenicQuestionParam param) {
return sweetAntigenicQuestionService.create(param);
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.param.SweetCityVoteParam;
import com.liquidnet.service.sweet.service.ISweetCityVoteService;
import com.liquidnet.service.sweet.vo.SweetCItyVoteStatVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
* 城市投票表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2021-09-15
*/
@Api(tags = "活动-城市投票")
@RestController
@RequestMapping("/sweetCityVote")
public class SweetCityVoteController {
@Autowired
private ISweetCityVoteService sweetCityVoteService;
@GetMapping("statList")
@ApiOperation("城市投票排名")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "phone", value = "手机号", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "unionId", value = "unionId", required = true)
})
public ResponseDto<List<SweetCItyVoteStatVo>> getList(
@RequestParam String phone,
@RequestParam String unionId
) {
return sweetCityVoteService.getList(phone, unionId);
}
@PostMapping("createVote")
@ApiOperation("用户投票记录")
public ResponseDto createVote(@Valid @RequestBody SweetCityVoteParam param) {
return sweetCityVoteService.createVote(param);
}
@GetMapping("setStatList")
@ApiOperation("统计投票排名")
public ResponseDto setStatList() {
return sweetCityVoteService.setStatList();
}
}
......@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@Api(tags = "公众号动作回调")
@Api(tags = "服务号-动作回调")
@RestController
@RequestMapping("/actionCallback")
@Slf4j
......@@ -24,7 +24,7 @@ public class SweetWechatActionCallbackController {
private WechatSignUtils wechatSignUtils;
@GetMapping("record")
@ApiOperation("get")
@ApiOperation("配置验签微信调用")
public void record(
HttpServletResponse response,
@RequestParam() String signature,
......@@ -47,10 +47,10 @@ public class SweetWechatActionCallbackController {
}
@PostMapping("record")
@ApiOperation("post")
@ApiOperation("用户动作微信回调")
public String record(
@RequestBody String requestBody,
// @RequestParam String requestBody,
@RequestParam("type") Integer type,
@RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
......@@ -58,13 +58,13 @@ public class SweetWechatActionCallbackController {
@RequestParam(name = "encrypt_type", required = false) String encType,
@RequestParam(name = "msg_signature", required = false) String msgSignature
) {
log.info("\n接收微信请求:[openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"
log.info("\n接收微信请求:[type=[{}], openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
type, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
if (!wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
log.info("验签未通过,非法请求,可能属于伪造的请求!");
return "";
}
return sweetWechatCallbackService.record(requestBody, timestamp, nonce, encType, msgSignature);
return sweetWechatCallbackService.record(requestBody, type, timestamp, nonce, encType, msgSignature);
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -23,7 +25,7 @@ public class SweetWechatLoginController {
private SweetWechatLoginServiceImpl sweetLoginService;
@GetMapping("userInfo")
@ApiOperation("code获取用户信息")
@ApiOperation("小程序解密手机号")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "encryptedData", value = "encryptedData", required = true),
......@@ -39,7 +41,7 @@ public class SweetWechatLoginController {
return sweetLoginService.userInfo(code, encryptedData, iv, type);
}
@ApiOperation(value = "微信小程序登录凭证校验 获取openid", notes = "这里仅用于获取OPENID使用")
@ApiOperation(value = "小程序获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"maOpenId"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "jsCode", value = "微信jsCode", required = true),
......@@ -49,7 +51,7 @@ public class SweetWechatLoginController {
return sweetLoginService.wxaCode2Session(jsCode, type);
}
@ApiOperation(value = "微信公众号登录 获取openid", notes = "这里仅用于获取OPENID使用")
@ApiOperation(value = "服务号获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"mpOpenId"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
......@@ -59,4 +61,24 @@ public class SweetWechatLoginController {
return sweetLoginService.wxOauth2AccessToken(code, type);
}
@ApiOperation(value = "服务号获取openId、unionId", notes = "本接口在scope参数为snsapi_base时不再提供unionID字段,只需将scope参数修改为snsapi_userinfo即可重新获得用户unionID")
@GetMapping(value = {"mpAccessTokenInfo"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1正在 2摩登", required = true)
})
public ResponseDto<WechatTokenInfoVo> mpWxOauth2AccessTokenInfo(@RequestParam String code, @RequestParam Integer type) {
return sweetLoginService.mpWxOauth2AccessTokenInfo(code, type);
}
@ApiOperation(value = "服务号获取用户基本信息", notes = "本接口在用户未关注公众号时,将不返回用户unionID信息,已关注的用户,开发者可使用“获取用户基本信息接口”获取unionID,未关注用户,开发者可使用“微信授权登录接口”并将scope参数设置为snsapi_userinfo,获取用户unionID")
@GetMapping(value = {"mpUserInfo"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1正在 2摩登", required = true)
})
public ResponseDto<WechatUserInfoVo> mpUserInfo(@RequestParam String code, @RequestParam Integer type) {
return sweetLoginService.mpUserInfo(code, type);
}
}
......@@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2021-08-20
*/
@Slf4j
@Api(tags = "正在-摩登公众号分享")
@Api(tags = "服务号-分享")
@RestController
@RequestMapping("wechatShareSign")
public class SweetWechatShareController {
......
......@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@Api(tags = "公众号模版消息")
@Api(tags = "服务号-模版消息")
@RestController
@RequestMapping("/wechatTemplate")
public class SweetWechatTemplateController {
......@@ -33,7 +33,7 @@ public class SweetWechatTemplateController {
}
@PostMapping("remind")
@ApiOperation("提醒记录")
@ApiOperation("小程序演出提醒记录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "openId", value = "微信openId", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "unionId", value = "微信unionId", required = true),
......@@ -51,11 +51,13 @@ public class SweetWechatTemplateController {
@ApiOperation("获取关注状态")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "unionId", value = "微信unionId", required = true),
@ApiImplicitParam(type = "form", dataType = "Integer", name = "type", value = "type 1正在 2摩登", required = false),
})
public ResponseDto followStatus(
@RequestParam() String unionId
@RequestParam() String unionId,
@RequestParam(defaultValue = "1") Integer type
) {
boolean status = sweetTemplateService.followStatus(unionId);
boolean status = sweetTemplateService.followStatus(unionId, type);
if (status) {
return ResponseDto.success(1);
} else {
......
package com.liquidnet.service.sweet.controller.syncRedis;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.service.impl.syncRedis.JxlDataImpl;
import com.liquidnet.service.sweet.service.impl.syncRedis.RedisDataServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -9,14 +9,21 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "redis数据迁移-jxl")
/**
* <p>
* 同步redis数据
* </p>
*
* @author jiangxiulong
* @since 2021-08-12
*/
@Api(tags = "数据迁移")
@RestController
@RequestMapping("sync")
public class JxlDataController {
public class RedisDataController {
@Autowired
private JxlDataImpl jxlData;
private RedisDataServiceImpl redisDataService;
/**
* basicServices
......@@ -25,14 +32,14 @@ public class JxlDataController {
@PostMapping("basicServices/versions")
@ApiOperation("basicServices版本控制数据迁移-可以通过后台编辑")
public ResponseDto<Boolean> basicServicesVersions() {
Boolean result = jxlData.basicServicesVersions();
Boolean result = redisDataService.basicServicesVersions();
return ResponseDto.success(result);
}
@PostMapping("basicServices/upush")
@ApiOperation("basicServices推送数据迁移")
public ResponseDto<Boolean> basicServicesUpush() {
Boolean result = jxlData.basicServicesUpush();
Boolean result = redisDataService.basicServicesUpush();
return ResponseDto.success(result);
}
......@@ -43,7 +50,7 @@ public class JxlDataController {
@PostMapping("kylin/banner")
@ApiOperation("kylin-banner数据迁移-可以通过后台编辑")
public ResponseDto<Boolean> kylinBanner() {
Boolean result = jxlData.kylinBanner();
Boolean result = redisDataService.kylinBanner();
return ResponseDto.success(result);
}
......@@ -54,35 +61,35 @@ public class JxlDataController {
@PostMapping("sweet/accessToken")
@ApiOperation("sweet-AccessToken数据迁移-可不迁可自动生成")
public ResponseDto<Boolean> sweetAccessToken() {
Boolean result = jxlData.sweetAccessToken();
Boolean result = redisDataService.sweetAccessToken();
return ResponseDto.success(result);
}
@PostMapping("sweet/answer")
@ApiOperation("sweet-answer数据迁移")
public ResponseDto<Boolean> sweetAnswer() {
Boolean result = jxlData.sweetAnswer();
Boolean result = redisDataService.sweetAnswer();
return ResponseDto.success(result);
}
@PostMapping("sweet/wechatUser/openId")
@ApiOperation("sweet-wechatUser-openId数据迁移")
public ResponseDto<Boolean> sweetOpenId() {
Boolean result = jxlData.sweetOpenId();
Boolean result = redisDataService.sweetOpenId();
return ResponseDto.success(result);
}
@PostMapping("sweet/wechatUser/unionId")
@ApiOperation("sweet-wechatUser-unionId数据迁移-这里也会同步unionIdStr会抛异常过滤掉")
public ResponseDto<Boolean> sweetUnionId() {
Boolean result = jxlData.sweetUnionId();
Boolean result = redisDataService.sweetUnionId();
return ResponseDto.success(result);
}
@PostMapping("sweet/wechatUser/unionIdStr")
@ApiOperation("sweet-wechatUser-unionIdStr数据迁移")
public ResponseDto<Boolean> sweetUnionIdStr() {
Boolean result = jxlData.sweetUnionIdStr();
Boolean result = redisDataService.sweetUnionIdStr();
return ResponseDto.success(result);
}
......
package com.liquidnet.service.sweet.controller.syncRedis;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.sweet.service.impl.SweetWechatMpService;
import com.liquidnet.service.sweet.service.impl.syncRedis.UserDataServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
......@@ -17,17 +17,25 @@ import org.springframework.web.bind.annotation.RestController;
import java.io.*;
@Api(tags = "同步微信用户数据")
/**
* <p>
* 外部用户注册、微信服务号关注用户数据同步
* </p>
*
* @author jiangxiulong
* @since 2021-08-12
*/
@Api(tags = "数据迁移")
@RestController
@RequestMapping("/wechatSync")
@Slf4j
public class SweetWechatSyncDataController {
public class UserDataController {
@Autowired
private SweetWechatMpService sweetWechatMpService;
private UserDataServiceImpl userDataService;
@GetMapping("regMobile")
@ApiOperation("注册")
@ApiOperation("外部手机号调用adam注册")
public void regMobile() throws IOException {
String filePath = "/Users/jiangxiulong/Desktop/keys2.txt";
String encoding = "UTF-8";
......@@ -58,23 +66,26 @@ public class SweetWechatSyncDataController {
}
@GetMapping("users")
@ApiOperation("关注用户")
public void getUsers() {
@ApiOperation("同步所有关注服务号用户")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "type 1正在 2摩登", required = true)
})
public void getUsers(@RequestParam() Integer type) {
try {
sweetWechatMpService.userInfo();
userDataService.userInfo(type);
} catch (Exception e) {
log.error("getUsers", e);
}
}
@GetMapping("user")
@ApiOperation("openid同步单个关注用户")
@ApiOperation("以openid同步单个关注服务号的用户")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "openId", value = "openId", required = true)
})
public void getUser(@RequestParam() String openId) {
try {
sweetWechatMpService.getUser(openId);
userDataService.getUser(openId);
} catch (Exception e) {
log.error("getUser", e);
}
......
package com.liquidnet.service.sweet.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel
public class SweetCityVoteStatDto implements Serializable ,Cloneable{
private static final long serialVersionUID = -3159959399631688127L;
@ApiModelProperty("城市代码")
private String cityCode;
@ApiModelProperty("城市名称")
private String cityName;
@ApiModelProperty("真实投票数量")
private Integer voteNum;
@ApiModelProperty("手动增加投票数量")
private Integer manualVoteNum;
@ApiModelProperty("总投票数")
private Integer totalNum;
private static final SweetCityVoteStatDto obj = new SweetCityVoteStatDto();
public static SweetCityVoteStatDto getNew() {
try {
return (SweetCityVoteStatDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetCityVoteStatDto();
}
}
}
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 城市投票表
* </p>
*
* @author jiangxiulong
* @since 2021-09-15
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetCityVote implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* vote_id
*/
private String voteId;
/**
* 手机号
*/
private String phone;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 城市代码
*/
private String cityCode;
/**
* 城市名称
*/
private String cityName;
/**
* 投票天
*/
private String dayTime;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final SweetCityVote obj = new SweetCityVote();
public static SweetCityVote getNew() {
try {
return (SweetCityVote) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetCityVote();
}
}
}
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 城市投票统计表
* </p>
*
* @author jiangxiulong
* @since 2021-09-15
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetCityVoteStat implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* stat_id
*/
private String statId;
/**
* 城市代码
*/
private String cityCode;
/**
* 城市名称
*/
private String cityName;
/**
* 真实投票数量
*/
private Integer voteNum;
/**
* 手动增加投票数量
*/
private Integer manualVoteNum;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
......@@ -5,6 +5,7 @@ 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.service.impl.SweetWechatTemplateServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils;
......@@ -20,7 +21,6 @@ import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.Map;
......@@ -39,6 +39,8 @@ public class SubscribeHandler implements WxMpMessageHandler {
private RedisDataUtils redisDataUtils;
@Autowired
private QueueUtils queueUtils;
@Autowired
WechatMpConfigure wechatMpConfigure;
@Autowired
private SweetWechatTemplateServiceImpl sweetWechatTemplateService;
......@@ -46,6 +48,9 @@ public class SubscribeHandler implements WxMpMessageHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) throws WxErrorException {
String zhengzaiAppId = wechatMpConfigure.getWxMpService(1).getWxMpConfigStorage().getAppId();
String otherAppId = wxMpService.getWxMpConfigStorage().getAppId();
log.info("接收到一个订阅事件:[{}]", wxMessage.toString());
// 1、获取微信用户信息
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMessage.getFromUser());
......@@ -54,39 +59,74 @@ public class SubscribeHandler implements WxMpMessageHandler {
return null;
}
log.info("根据 openId:[{}]获取到的微信用户信息:[{}]", wxMessage.getFromUser(), wxMpUser.toString());
// 记录用户信息
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
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());
if (null == userInfo) {
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
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);
//发送模版消息
sweetWechatTemplateService.subscribeSend(sweetWechatUser);
if (zhengzaiAppId.equals(otherAppId)) {
// 记录用户信息
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
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());
if (null == userInfo) {
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(), 1, 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);
//发送模版消息
sweetWechatTemplateService.subscribeSend(wxMpService, sweetWechatUser);
}
} else {
// 记录用户信息
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUserModernsky(wxMpUser.getUnionId());
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());
if (null == userInfo) {
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(), 2, 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.setSweetWechatUserModernsky(sweetWechatUser);
//发送模版消息
sweetWechatTemplateService.subscribeSend(wxMpService, sweetWechatUser);
}
}
return null;
......
......@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.handler;
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.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
......@@ -37,12 +38,16 @@ public class UnsubscribeHandler implements WxMpMessageHandler {
private RedisDataUtils redisDataUtils;
@Autowired
private QueueUtils queueUtils;
@Autowired
WechatMpConfigure wechatMpConfigure;
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) throws WxErrorException {
log.info("接收到一个取消订阅事件:[{}]", wxMessage.toString());
String zhengzaiAppId = wechatMpConfigure.getWxMpService(1).getWxMpConfigStorage().getAppId();
String otherAppId = wxMpService.getWxMpConfigStorage().getAppId();
log.info("接收到一个取消订阅事件:[{}]", wxMessage.toString());
// 1、获取微信用户信息
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMessage.getFromUser());
if (null == wxMpUser) {
......@@ -50,23 +55,44 @@ public class UnsubscribeHandler implements WxMpMessageHandler {
return null;
}
log.info("根据 openId:[{}]获取到的微信用户信息:[{}]", wxMessage.getFromUser(), wxMpUser.toString());
// 删除用户信息
String sweetWechatUserUnionid = redisDataUtils.getSweetWechatUserUnionid(wxMpUser.getOpenId());
if (null != sweetWechatUserUnionid && !sweetWechatUserUnionid.isEmpty()) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(sweetWechatUserUnionid);
if (null != userInfo) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.update"));
sqlsDataA.add(new Object[]{
2, now, sweetWechatUserUnionid
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
redisDataUtils.delSweetWechatUser(sweetWechatUserUnionid, wxMpUser.getOpenId());
if (zhengzaiAppId.equals(otherAppId)) {
// 删除用户信息
String sweetWechatUserUnionid = redisDataUtils.getSweetWechatUserUnionid(wxMpUser.getOpenId());
if (null != sweetWechatUserUnionid && !sweetWechatUserUnionid.isEmpty()) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(sweetWechatUserUnionid);
if (null != userInfo) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.update"));
sqlsDataA.add(new Object[]{
2, now, sweetWechatUserUnionid, 1
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
redisDataUtils.delSweetWechatUser(sweetWechatUserUnionid, wxMpUser.getOpenId());
}
}
} else {
// 删除用户信息
String sweetWechatUserUnionid = redisDataUtils.getSweetWechatUserUnionidModernsky(wxMpUser.getOpenId());
if (null != sweetWechatUserUnionid && !sweetWechatUserUnionid.isEmpty()) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUserModernsky(sweetWechatUserUnionid);
if (null != userInfo) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.update"));
sqlsDataA.add(new Object[]{
2, now, sweetWechatUserUnionid, 2
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
redisDataUtils.delSweetWechatUserModernsky(sweetWechatUserUnionid, wxMpUser.getOpenId());
}
}
}
return null;
}
}
package com.liquidnet.service.sweet.mapper;
import com.liquidnet.service.sweet.entity.SweetCityVote;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 城市投票表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-09-15
*/
public interface SweetCityVoteMapper extends BaseMapper<SweetCityVote> {
}
package com.liquidnet.service.sweet.mapper;
import com.liquidnet.service.sweet.dto.SweetCityVoteStatDto;
import com.liquidnet.service.sweet.entity.SweetCityVoteStat;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 城市投票统计表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-09-15
*/
public interface SweetCityVoteStatMapper extends BaseMapper<SweetCityVoteStat> {
List<SweetCityVoteStatDto> getStatList();
}
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "SweetCityVoteParam", description = "用户投票记录入参")
@Data
public class SweetCityVoteParam implements Serializable {
private static final long serialVersionUID = -2626425843975309892L;
@ApiModelProperty(position = 10, required = true, value = "手机号", example = "15811009011")
@NotBlank(message = "phone不能为空")
private String phone;
@ApiModelProperty(position = 11, required = true, value = "unionId", example = "unionId")
@NotBlank(message = "unionId不能为空")
private String unionId;
@ApiModelProperty(position = 12, required = true, value = "城市代码", example = "10001")
@NotBlank(message = "cityCode不能为空")
private String cityCode;
@ApiModelProperty(position = 13, required = true, value = "城市名称", example = "北京")
@NotBlank(message = "cityName不能为空")
private String cityName;
}
package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetAntigenicQuestionParam;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.sweet.entity.SweetAntigenicQuestion;
/**
* <p>
* 防疫答题表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
public interface ISweetAntigenicQuestionService extends IService<SweetAntigenicQuestion> {
ResponseDto<Boolean> create(SweetAntigenicQuestionParam param);
}
package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetCityVote;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.sweet.param.SweetCityVoteParam;
import com.liquidnet.service.sweet.vo.SweetCItyVoteStatVo;
import java.util.List;
/**
* <p>
* 城市投票表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-09-15
*/
public interface ISweetCityVoteService extends IService<SweetCityVote> {
ResponseDto createVote(SweetCityVoteParam param);
ResponseDto setStatList();
ResponseDto<List<SweetCItyVoteStatVo>> getList(String phone, String unionId);
}
package com.liquidnet.service.sweet.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.param.SweetAntigenicQuestionParam;
import com.liquidnet.service.sweet.entity.SweetAntigenicQuestion;
import com.liquidnet.service.sweet.mapper.SweetAntigenicQuestionMapper;
import com.liquidnet.service.sweet.service.ISweetAntigenicQuestionService;
import com.liquidnet.service.sweet.utils.QueueUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
/**
* <p>
* 防疫答题表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Service
public class SweetAntigenicQuestionServiceImpl extends ServiceImpl<SweetAntigenicQuestionMapper, SweetAntigenicQuestion> implements ISweetAntigenicQuestionService {
@Autowired
QueueUtils queueUtils;
@Override
public ResponseDto<Boolean> create(SweetAntigenicQuestionParam param) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_antigenic_question.insert"));
sqlsDataA.add(new Object[]{
IDGenerator.nextSnowId(), param.getType(), param.getOpenId(), param.getUnionId(), param.getNickname(), param.getAddress(), param.getPhone(),
param.getUrgentPhone(), param.getKeyword1(), param.getKeyword11(), param.getKeyword2(), param.getKeyword3(), param.getKeyword4(), param.getKeyword5(),
param.getKeyword6(), param.getKeyword7()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success();
}
}
package com.liquidnet.service.sweet.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.SweetCityVoteStatDto;
import com.liquidnet.service.sweet.entity.SweetCityVote;
import com.liquidnet.service.sweet.mapper.SweetCityVoteMapper;
import com.liquidnet.service.sweet.mapper.SweetCityVoteStatMapper;
import com.liquidnet.service.sweet.param.SweetCityVoteParam;
import com.liquidnet.service.sweet.service.ISweetCityVoteService;
import com.liquidnet.service.sweet.utils.ObjectUtil;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import com.liquidnet.service.sweet.vo.SweetCItyVoteStatVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
/**
* <p>
* 答题表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-08-12
*/
@Service
public class SweetCityVoteServiceImpl extends ServiceImpl<SweetCityVoteMapper, SweetCityVote> implements ISweetCityVoteService {
@Autowired
private RedisDataUtils redisDataUtils;
@Autowired
QueueUtils queueUtils;
@Autowired
private SweetCityVoteStatMapper sweetCityVoteStatMapper;
@Override
public ResponseDto getList(String phone, String unionId) {
List<SweetCItyVoteStatVo> sweetCityVoteStatList = redisDataUtils.getSweetCityVoteStatList();
SweetCityVoteParam userVote = redisDataUtils.getUserVote(phone, unionId);
if (!CollectionUtils.isEmpty(sweetCityVoteStatList)) {
for (SweetCItyVoteStatVo info : sweetCityVoteStatList) {
if (null == userVote) {
info.setIsVote(1);
} else if (userVote.getCityCode().equals(info.getCityCode())) {
info.setIsVote(2);
} else {
info.setIsVote(3);
}
}
}
HashMap<String, Object> stringObjectHashMap = CollectionUtil.mapStringObject();
stringObjectHashMap.put("list", sweetCityVoteStatList);
stringObjectHashMap.put("userVote", userVote);
stringObjectHashMap.put("statUpdateTime", redisDataUtils.getSweetCityVoteStatUpdateTime());
return ResponseDto.success(stringObjectHashMap);
}
@Override
public ResponseDto createVote(SweetCityVoteParam param) {
SweetCityVoteParam userVote = redisDataUtils.getUserVote(param.getPhone(), param.getUnionId());
if (null != userVote) {
return ResponseDto.failure("已经投过票啦~");
}
SweetCityVote aNew = SweetCityVote.getNew();
aNew.setVoteId(IDGenerator.nextSnowId());
aNew.setPhone(param.getPhone());
String sweetWechatOpenId = redisDataUtils.getSweetWechatOpenId(param.getUnionId());
aNew.setOpenId(sweetWechatOpenId);
aNew.setUnionId(param.getUnionId());
aNew.setCityCode(param.getCityCode());
aNew.setCityName(param.getCityName());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LinkedList<Object[]> sqlsDataB = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_city_vote.insert"));
sqlsDataA.add(new Object[]{
aNew.getVoteId(), aNew.getPhone(), sweetWechatOpenId, aNew.getUnionId(), aNew.getCityCode(), aNew.getCityName(), DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMdd)
});
Integer cityVoteNum = redisDataUtils.getSweetCityVote(aNew.getCityCode());
if (cityVoteNum > 0) { // 已有 incr
sqls.add(SqlMapping.get("sweet_city_vote_stat.update"));
sqlsDataB.add(new Object[]{
LocalDateTime.now(), aNew.getCityCode()
});
} else { // insert
sqls.add(SqlMapping.get("sweet_city_vote_stat.insert"));
sqlsDataB.add(new Object[]{
IDGenerator.nextSnowId(), aNew.getCityCode(), aNew.getCityName(), 1
});
}
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_CITY_VOTE_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA, sqlsDataB));
redisDataUtils.incrSweetCityVote(aNew.getCityCode());
redisDataUtils.setUserVote(param.getPhone(), param.getUnionId(), param);
return ResponseDto.success();
}
public ResponseDto setStatList() {
List<SweetCityVoteStatDto> list = sweetCityVoteStatMapper.getStatList();
if (!CollectionUtils.isEmpty(list)) {
ArrayList<SweetCItyVoteStatVo> newList = ObjectUtil.getSweetCItyVoteStatVoList();
list.forEach(r -> newList.add(SweetCItyVoteStatVo.getNew().copy(r)));
redisDataUtils.setSweetCityVoteStatList(newList);
}
redisDataUtils.setSweetCityVoteStatUpdateTime();
return ResponseDto.success();
}
}
......@@ -53,8 +53,11 @@ public class SweetWechatCallbackServiceImpl {
return router;
}
public String record(String requestBody, String timestamp, String nonce, String encType, String msgSignature) {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
public String record(String requestBody, Integer type, String timestamp, String nonce, String encType, String msgSignature) {
if (null == type || type <= 0) {
type = 1;
}
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
String out = null;
if (encType == null || encType.isEmpty()) {
// 明文传输的消息
......
......@@ -9,8 +9,11 @@ import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.utils.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -20,7 +23,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Objects;
......@@ -89,7 +91,7 @@ public class SweetWechatLoginServiceImpl {
return ResponseDto.success(userInfo);
} catch (Exception e) {
log.error("WechatUserInfoError", e);
log.error("WechatUserInfoError Exception:{}", e);
return ResponseDto.failure();
}
}
......@@ -101,7 +103,7 @@ public class SweetWechatLoginServiceImpl {
params.add("mobile", mobile);
HttpUtil.post(adamUrl.concat("/adam/rsc/reg/mobile"), params);
} catch (Exception e) {
log.error("registerByMobile失败", e);
log.error("registerByMobile失败 Exception:{}", e);
}
}
......@@ -110,7 +112,7 @@ public class SweetWechatLoginServiceImpl {
WxMaJscode2SessionResult wxMaJscode2SessionResult = sweetWechatService.sessionInfo(jsCode, type);
return ResponseDto.success(wxMaJscode2SessionResult.getOpenid());
} catch (Exception e) {
log.error("wxaCode2SessionError", e);
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
......@@ -120,8 +122,31 @@ public class SweetWechatLoginServiceImpl {
WxOAuth2AccessToken wxOAuth2AccessToken = sweetWechatService.wxOauth2AccessToken(code, type);
return ResponseDto.success(wxOAuth2AccessToken.getOpenId());
} catch (Exception e) {
log.error("wxaCode2SessionError", e);
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
public ResponseDto<WechatTokenInfoVo> mpWxOauth2AccessTokenInfo(String code, Integer type) {
try {
WxOAuth2AccessToken wxOAuth2AccessToken = sweetWechatService.wxOauth2AccessToken(code, type);
WechatTokenInfoVo userInfoVo = WechatTokenInfoVo.getNew().copy(wxOAuth2AccessToken);
return ResponseDto.success(userInfoVo);
} catch (Exception e) {
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
public ResponseDto<WechatUserInfoVo> mpUserInfo(String code, Integer type) {
try {
WxOAuth2UserInfo wxOAuth2UserInfo = sweetWechatService.mpUserInfo(code, type);
WechatUserInfoVo tokenInfoVo = WechatUserInfoVo.getNew().copy(wxOAuth2UserInfo);
return ResponseDto.success(tokenInfoVo);
} catch (Exception e) {
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
}
......@@ -7,6 +7,7 @@ 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.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
......@@ -22,6 +23,9 @@ public class SweetWechatService {
@Autowired
WechatMpConfigure wechatMpConfigure;
/**
* 小程序--------------
*/
public WxMaJscode2SessionResult sessionInfo(String code, Integer anum) throws WxErrorException {
WxMaService wxMaService = wechatMaConfigure.getWxMaService(anum);
log.info("isAccessTokenExpired:[{}] ", wxMaService.getWxMaConfig().isAccessTokenExpired());
......@@ -39,12 +43,19 @@ 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);
}
public WxOAuth2UserInfo mpUserInfo(String code, Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
return wxMpService.getOAuth2Service().getUserInfo(wxOAuth2AccessToken, "zh_CN");
}
}
......@@ -157,30 +157,36 @@ public class SweetWechatTemplateServiceImpl {
return ResponseDto.success();
}
public void subscribeSend(SweetWechatUser sweetWechatUser) {
String templateId = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU";
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=lottery");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "点击下方小程序,再次参与「草莓星球来的人」周边抽奖"));
String msgId = sendTmpMsg(templateMessage);
} else {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), "");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "随时查阅订单信息,第一时间获取演出开售提醒,更天天有福利,周周有惊喜!"));
String msgId = sendTmpMsg(templateMessage);
}
public void subscribeSend(WxMpService wxMpService, SweetWechatUser sweetWechatUser) {
String zhengzaiAppId = wechatMpConfigure.getWxMpService(1).getWxMpConfigStorage().getAppId();
String otherAppId = wxMpService.getWxMpConfigStorage().getAppId();
if (zhengzaiAppId.equals(otherAppId)) {
String templateId = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU";
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=lottery");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "点击下方小程序,再次参与「草莓星球来的人」周边抽奖"));
String msgId = sendTmpMsg(templateMessage);
} else {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), "");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "随时查阅订单信息,第一时间获取演出开售提醒,更天天有福利,周周有惊喜!"));
String msgId = sendTmpMsg(templateMessage);
}
} catch (Exception e) {
log.error("关注模版消息处理异常", e);
} catch (Exception e) {
log.error("关注模版消息处理异常", e);
}
} else {
log.info("不是正在, 不发模版消息");
}
}
......@@ -253,8 +259,13 @@ public class SweetWechatTemplateServiceImpl {
}
}
public boolean followStatus(String unionId) {
SweetWechatUser sweetWechatUser = redisDataUtils.getSweetWechatUser(unionId);
public boolean followStatus(String unionId, Integer type) {
SweetWechatUser sweetWechatUser = null;
if (null == type || type <= 1) {
sweetWechatUser = redisDataUtils.getSweetWechatUser(unionId);
} else if (type == 2) {
sweetWechatUser = redisDataUtils.getSweetWechatUserModernsky(unionId);
}
if (null != sweetWechatUser && !sweetWechatUser.getUnionId().isEmpty()) {
return true;
......
package com.liquidnet.service.sweet.service.impl;
package com.liquidnet.service.sweet.service.impl.syncRedis;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
......@@ -22,7 +22,7 @@ import java.util.List;
@Slf4j
@Service
public class SweetWechatMpService {
public class UserDataServiceImpl {
@Autowired
WechatMpConfigure wechatMpConfigure;
......@@ -31,8 +31,8 @@ public class SweetWechatMpService {
@Autowired
private QueueUtils queueUtils;
public void userInfo() throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
public void userInfo(Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
String nextOpenid = "";
do {
......@@ -53,36 +53,70 @@ public class SweetWechatMpService {
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);
if (type == 1) {
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(), 1, 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);
}
} else if (type == 2) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUserModernsky(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(), 2, 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.setSweetWechatUserModernsky(sweetWechatUser);
}
}
} catch (Exception e) {
log.info("forException:openId:[{}]", openId);
}
......
......@@ -7,8 +7,10 @@ import com.liquidnet.service.sweet.dto.SweetManualArtistListDto;
import com.liquidnet.service.sweet.dto.SweetManualArtistListMDSKDto;
import com.liquidnet.service.sweet.entity.SweetManualShop;
import com.liquidnet.service.sweet.entity.SweetManualShopMdsk;
import com.liquidnet.service.sweet.vo.SweetCItyVoteStatVo;
import java.util.ArrayList;
import java.util.List;
public class ObjectUtil {
private static final ArrayList<SweetManualAppletDto> sweetManualAppletDtoList = new ArrayList<>();
......@@ -18,6 +20,7 @@ public class ObjectUtil {
private static final ArrayList<SweetManualAppletMDSKDto> sweetManualAppletMDSKDtoList = new ArrayList<>();
private static final ArrayList<SweetManualArtistListMDSKDto> sweetManualArtistListMDSKDtoList = new ArrayList<>();
private static final ArrayList<SweetManualShopMdsk> sweetManualShopMDSKList = new ArrayList<>();
private static final ArrayList<SweetCItyVoteStatVo> sweetCItyVoteStatVoList = new ArrayList<>();
public static ArrayList<SweetManualAppletDto> getSweetManualAppletDtoList() {
return (ArrayList<SweetManualAppletDto>)sweetManualAppletDtoList.clone();
......@@ -43,4 +46,8 @@ public class ObjectUtil {
public static ArrayList<SweetManualShopMdsk> getSweetManualShopMdskList() {
return (ArrayList<SweetManualShopMdsk>)sweetManualShopMDSKList.clone();
}
public static ArrayList<SweetCItyVoteStatVo> getSweetCItyVoteStatVoList() {
return (ArrayList<SweetCItyVoteStatVo>)sweetCItyVoteStatVoList.clone();
}
}
......@@ -13,10 +13,8 @@ import com.liquidnet.service.sweet.dto.SweetManualArtistListDto;
import com.liquidnet.service.sweet.dto.SweetManualArtistStageListDto;
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 com.liquidnet.service.sweet.param.SweetCityVoteParam;
import com.liquidnet.service.sweet.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -24,9 +22,6 @@ 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 {
......@@ -350,6 +345,19 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO.concat(unionid);
return (SweetWechatUser) redisUtil.get(redisKey);
}
public String getSweetWechatOpenId(String unionid) {
if (unionid.isEmpty()) {
return "";
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO.concat(unionid);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return "";
} else {
SweetWechatUser sweetWechatUser = (SweetWechatUser) redisUtil.get(redisKey);
return sweetWechatUser.getOpenId();
}
}
public String getSweetWechatUserStr(String unionid) {
if (unionid.isEmpty()) {
......@@ -477,10 +485,110 @@ 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);
return sweetAnswerVo;
}
// 投票
public void setSweetCityVoteStatList(List<SweetCItyVoteStatVo> sweetCItyVoteStatVo) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_STAT_LIST;
redisUtil.set(redisKey, sweetCItyVoteStatVo);
}
public List<SweetCItyVoteStatVo> getSweetCityVoteStatList() {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_STAT_LIST;
Object obj = redisUtil.get(redisKey);
List<SweetCItyVoteStatVo> sweetCityVoteStatList = ObjectUtil.getSweetCItyVoteStatVoList();
if (null != obj) {
sweetCityVoteStatList = (List<SweetCItyVoteStatVo>) redisUtil.get(redisKey);
}
return sweetCityVoteStatList;
}
public void incrSweetCityVote(String cityCode) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_CITY_CODE.concat(cityCode);
redisUtil.incr(redisKey, 1);
}
public Integer getSweetCityVote(String cityCode) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_CITY_CODE.concat(cityCode);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return 0;
} else {
return (Integer) obj;
}
}
public void setUserVote(String phone, String openId, SweetCityVoteParam param) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_USER.concat(phone).concat("-").concat(openId);
redisUtil.set(redisKey, param);
}
public SweetCityVoteParam getUserVote(String phone, String openId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_USER.concat(phone).concat("-").concat(openId);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return null;
} else {
return (SweetCityVoteParam) obj;
}
}
public void setSweetCityVoteStatUpdateTime() {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_STAT_UPDATE_TIME;
redisUtil.set(redisKey, DateUtil.getNowTime());
}
public String getSweetCityVoteStatUpdateTime() {
String redisKey = SweetConstant.REDIS_KEY_SWEET_CITY_VOTE_STAT_UPDATE_TIME;
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return "";
} else {
return (String) obj;
}
}
// wechat user 摩登
public void setSweetWechatUserModernsky(SweetWechatUser sweetWechatUser) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(sweetWechatUser.getUnionId());
String redisKeyUnid = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY.concat(sweetWechatUser.getOpenId());
redisUtil.set(redisKey, sweetWechatUser);
redisUtil.set(redisKeyUnid, sweetWechatUser.getUnionId());
}
public String getSweetWechatUserUnionidModernsky(String openid) {
if (openid.isEmpty()) {
return null;
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY.concat(openid);
return (String) redisUtil.get(redisKey);
}
public SweetWechatUser getSweetWechatUserModernsky(String unionid) {
if (unionid.isEmpty()) {
return null;
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(unionid);
return (SweetWechatUser) redisUtil.get(redisKey);
}
public String getSweetWechatOpenIdModernsky(String unionid) {
if (unionid.isEmpty()) {
return "";
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(unionid);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return "";
} else {
SweetWechatUser sweetWechatUser = (SweetWechatUser) redisUtil.get(redisKey);
return sweetWechatUser.getOpenId();
}
}
public void delSweetWechatUserModernsky(String unionid, String openid) {
if (!unionid.isEmpty()) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(unionid);
redisUtil.del(redisKey);
String redisKeyUnid = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY.concat(openid);
redisUtil.del(redisKeyUnid);
}
}
// wechat user 摩登
}
......@@ -24,7 +24,7 @@ public class WechatSignUtils {
/**
* 验证签名
*
* 验签不区分服务号 token url配置成一样
* @param signature
* @param timestamp
* @param nonce
......
package com.liquidnet.service.sweet.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.liquidnet.service.sweet.dto.SweetCityVoteStatDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class SweetCItyVoteStatVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
/*@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
@ApiModelProperty("vote_id")
private String statId;*/
@ApiModelProperty("城市代码")
private String cityCode;
@ApiModelProperty("城市名称")
private String cityName;
/*@ApiModelProperty("真实投票数量")
private Integer voteNum;
@ApiModelProperty("手动增加投票数量")
private Integer manualVoteNum;*/
@ApiModelProperty("总投票数")
private Integer totalNum;
@ApiModelProperty("当前用户是否投了当前城市 1没投 2投了")
private Integer isVote;
/*@ApiModelProperty("创建时间")
private LocalDateTime createdAt;
@ApiModelProperty("更新时间")
private LocalDateTime updatedAt;*/
private static final SweetCItyVoteStatVo obj = new SweetCItyVoteStatVo();
public static SweetCItyVoteStatVo getNew() {
try {
return (SweetCItyVoteStatVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetCItyVoteStatVo();
}
}
public SweetCItyVoteStatVo copy(SweetCityVoteStatDto source) {
if (null == this) return this;
this.setCityCode(source.getCityCode());
this.setCityName(source.getCityName());
// this.setVoteNum(source.getVoteNum());
// this.setManualVoteNum(source.getManualVoteNum());
this.setTotalNum(source.getTotalNum());
return this;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetCityVoteStatMapper">
<resultMap id="getListResult" type="com.liquidnet.service.sweet.dto.SweetCityVoteStatDto">
<result column="city_code" property="cityCode"/>
<result column="city_name" property="cityName"/>
<result column="vote_num" property="voteNum"/>
<result column="manual_vote_num" property="manualVoteNum"/>
<result column="total_num" property="totalNum"/>
</resultMap>
<select id="getStatList" resultMap="getListResult">
select
*, (vote_num + manual_vote_num) as total_num
from sweet_city_vote_stat
ORDER BY total_num DESC
</select>
</mapper>
......@@ -43,9 +43,15 @@ sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (mobile,union_id,luck_draw_nu
# --------------------------答案--------------------------
sweet_answer.insert=INSERT INTO sweet_answer (answer_id,phone,answer_json,img_url) VALUES (?,?,?,?)
# --------------------------关注/取消服务号的用户信息--------------------------
sweet_user.insert=INSERT INTO sweet_wechat_user (user_id,openId,unionId,nickname,sexDesc,sex,headImgUrl,language,country,province,city,subscribeTime,subscribeScene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
sweet_user.update=UPDATE sweet_wechat_user SET is_cancel = ?, updated_at = ? WHERE unionId = ?
sweet_user.insert=INSERT INTO sweet_wechat_user (user_id,type,openId,unionId,nickname,sexDesc,sex,headImgUrl,language,country,province,city,subscribeTime,subscribeScene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)
sweet_user.update=UPDATE sweet_wechat_user SET is_cancel = ?, updated_at = ? WHERE unionId = ? and type = ?
# --------------------------提醒记录--------------------------
sweet_remind.insert=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?)
# --------------------------小程序登录记录用户解密后信息--------------------------
sweet_applet_user.insert=INSERT INTO sweet_applet_user (user_id,openId,unionId,getPhoneNumber,getPurePhoneNumber,getCountryCode,type) VALUES (?,?,?,?,?,?,?)
\ No newline at end of file
sweet_applet_user.insert=INSERT INTO sweet_applet_user (user_id,openId,unionId,getPhoneNumber,getPurePhoneNumber,getCountryCode,type) VALUES (?,?,?,?,?,?,?)
# --------------------------用户投票记录--------------------------
sweet_city_vote.insert=INSERT INTO sweet_city_vote (vote_id,phone,openId,unionId,city_code,city_name,day_time) VALUES (?,?,?,?,?,?,?)
sweet_city_vote_stat.insert=INSERT INTO sweet_city_vote_stat (stat_id,city_code,city_name,vote_num) VALUES (?,?,?,?)
sweet_city_vote_stat.update=UPDATE sweet_city_vote_stat SET vote_num = IFNULL(vote_num, 0) + 1, updated_at = ? WHERE city_code = ?
# --------------------------防疫答题--------------------------
sweet_antigenic_question.insert=INSERT INTO sweet_antigenic_question (question_id,type,openId,unionId,nickname,address,phone,urgent_phone,keyword1,keyword11,keyword2,keyword3,keyword4,keyword5,keyword6,keyword7) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
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