Commit 777d4661 authored by 黎聪聪's avatar 黎聪聪

会员管理

parent 85cba2f2
......@@ -262,15 +262,23 @@
"aTargets": [1],
"mData": "consultId",
"mRender": function (a, b, c, d) {
if(a){
return a;
}else{
return null;
}
return a;
}
},
{
"aTargets": [2],
"mData": "userName",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
{
......@@ -289,7 +297,11 @@
"aTargets": [4],
"mData": "iphone",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
......@@ -297,7 +309,11 @@
"aTargets": [5],
"mData": "pastRecords",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
{
......@@ -313,28 +329,44 @@
"aTargets": [7],
"mData": "illness",
"mRender": function (a, b, c, d) {
if(a){
return a;
}else{
return null;
}
}
},
{
"aTargets": [8],
"mData": "allergy",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
{
"aTargets": [9],
"mData": "doctorName",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
{
"aTargets": [10],
"mData": "customerName",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
{
......@@ -354,7 +386,11 @@
"aTargets": [12],
"mData": "description",
"mRender": function (a, b, c, d) {
return a;
if(a){
return a;
}else{
return null;
}
}
},
{
......
......@@ -12,16 +12,14 @@ import com.cftech.core.sql.Conds;
import com.cftech.core.sql.Sort;
import com.cftech.core.util.Constants;
import com.cftech.sys.security.UserUtils;
import com.sun.deploy.util.StringUtils;
import jdk.nashorn.internal.ir.ReturnNode;
import org.springframework.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.SystemOutLogger;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
......
......@@ -97,26 +97,26 @@
<form id="seachTableForm" action="#springUrl('/a/member/exportExcel')" method="get" onkeydown="if(event.keyCode==13){return false;}">
<div class="col-xs-2">
<input type="text" class="form-control required"
name="name" placeholder="名">
name="phone" placeholder="手机号">
</div>
<div class="col-xs-2">
<input type="text" class="form-control required"
name="compan" placeholder="公司名称">
</div>
<div class="col-xs-2">
<select name="status" class="form-control">
<option value="0">请选择会员状态</option>
<option value="1">会员注册</option>
<option value="2">虚拟会员</option>
</select>
name="name" placeholder="会员名称">
</div>
<!-- <div class="col-xs-2">-->
<!-- <select name="status" class="form-control">-->
<!-- <option value="0">请选择会员状态</option>-->
<!-- <option value="1">会员注册</option>-->
<!-- <option value="2">虚拟会员</option>-->
<!-- </select>-->
<!-- </div>-->
<div class="col-xs-5">
<a href="javascript:void(0)" class="btn btn-primary search">搜索</a>
#if($shiro.hasPermission("qy:member:edit"))
<!-- <a href="#springUrl('/a/member/form')" class="btn btn-primary">新增</a>-->
#end
<button class="btn btn-primary">导出</button>
<a href="javascript:void(0)" onclick="addMemer()" class="btn btn-primary">添加虚拟会员</a>
<!-- <a href="javascript:void(0)" onclick="addMemer()" class="btn btn-primary">添加虚拟会员</a>-->
</div>
</form>
</div><!-- /.box-header -->
......@@ -127,15 +127,16 @@
<td hidden="true">Id</td>
<th>头像</th>
<th>性别</th>
<th></th>
<th></th>
<!-- <th>姓</th>-->
<!-- <th>名</th>-->
<th>微信OPENID</th>
<th>手机号码</th>
<th>公司名称</th>
<th>邀请码</th>
<th>客户分类</th>
<th>名片</th>
<th>状态</th>
<th>联系方式</th>
<th>会员名称</th>
<th>来源</th>
<!-- <th>邀请码</th>-->
<!-- <th>客户分类</th>-->
<!-- <th>名片</th>-->
<th>创建日期</th>
</tr>
</thead>
<tbody id="tablebody">
......@@ -228,26 +229,23 @@
},
{
"mData": "sex"
},{
"mData":"surname"
},{
"mData":"name"
},{
},
{
"mData": "open_id"
},{
},
{
"mData":"phone"
},{
"mData": "compan"
},
{
"mData": "invitcode"
},{
"mData":"peopletype"
},{
"mData":"storeid"
},{
"mData":"status"
}],
"mData":"name"
},
{
"mData":"source"
},
{
"mData":"createTime"
}
],
"aoColumnDefs": [
{ // set default column settings
'visible': false,
......@@ -282,34 +280,52 @@
return formatDates(a, "yyyy-MM-dd HH:mm:ss");
}
},*/
// {
// "aTargets": [3],
// "mData": "surname",
// "mRender": function (a, b, c, d) {
// return a;
// }
// },
{
"aTargets": [3],
"mData": "surname",
"mData": "open_id",
"mRender": function (a, b, c, d) {
return a;
return a;
}
},
{
"aTargets": [4],
"mData": "surname",
"mRender": function (a, b, c, d) {
},{
"aTargets":[4],
"mData":"phone",
"mRender":function(a,b,c,d){
return a;
}
},{
"aTargets":[10],
"mData":"storeid",
"aTargets":[5],
"mData":"name",
"mRender":function(a,b,c,d){
return '<img src="'+a+'" style="width:80px;height:80px;">';
return a;
}
},{
"aTargets":[11],
"mData":"status",
"aTargets":[6],
"mData":"source",
"mRender":function(a,b,c,d){
if(a==1){
return "虚拟会员";
if (a==1){
return "普通关注";
}else if (a==2){
return "医师二维码";
}else if (a==3){
return "客服二维码";
}else{
return "会员注册";
return "";
}
}
}
,{
"aTargets":[7],
"mData":"createTime",
"mRender":function(a,b,c,d){
return formatDates(a, "yyyy-MM-dd HH:mm:ss");
}
}
......
......@@ -45,6 +45,8 @@
<result column="open_id" property="open_id"/>
<result column="storeid" property="storeid"/>
<result column="status" property="status"/>
<result column="create_time" property="createTime"/>
<result column="source" property="source"/>
</resultMap>
<sql id="sqlWhere">
......@@ -327,20 +329,16 @@
<select id="selectmemberDto" parameterType="java.util.Map" resultMap="resultMapDto">
SELECT
m.id,
m.imageurl,
m.sex,
m.surname,
m.`name`,
m.name,
m.phone,
m.compan,
m.invitcode,
m.open_id,
w.peopletype,
m.storeid,
m.status
m.create_time,
m.source
FROM
wx_mp_member m
LEFT JOIN wx_mp_workshop w ON w.invitcode = m.invitcode
<include refid="sqlWhere"/>
<if test="sort!=null">ORDER BY ${sort.param} ${sort.type}</if>
<if test="limit>0">limit #{offset},#{limit}</if>
......@@ -350,7 +348,6 @@
COUNT(1)
FROM
wx_mp_member m
LEFT JOIN wx_mp_workshop w ON w.invitcode = m.invitcode
<include refid="sqlWhere"/>
</select>
</mapper>
\ No newline at end of file
package com.cftech.member.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.cftech.core.poi.ExportConfig;
import lombok.Data;
import java.util.Date;
/**
* Created by Ago on 2018/8/7.
*/
......@@ -13,22 +16,19 @@ public class MemberDto {
private String imageurl;
@ExportConfig(value = "会员性别",width = 100)
private String sex;
@ExportConfig(value = "会员姓",width = 100)
private String surname;
@ExportConfig(value = "微信OPENID",width = 100)
private String open_id;
@ExportConfig(value = "会员名",width = 100)
private String name;
@ExportConfig(value = "会员手机",width = 100)
private String phone;
@ExportConfig(value = "会员公司",width = 100)
private String compan;
@ExportConfig(value = "邀请码",width = 100)
private String invitcode;
@ExportConfig(value = "微信OPENID",width = 100)
private String open_id;
@ExportConfig(value = "客户分类",width = 100)
private String peopletype;
@ExportConfig(value = "名片",width = 100)
private String storeid;
@ExportConfig(value = "状态",width = 100)
private String status;
/* 来源 */
@ExportConfig(value = "会员手机",width = 100)
private String source;
/*创建时间*/
@ExportConfig(value = "创建时间",width = 100)
private String createTime;
}
package com.cftech.member.web;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cftech.base.codingrule.utils.CodingruleUtils;
import com.cftech.core.annotation.CSRFTokenRef;
......@@ -35,6 +36,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
......@@ -161,17 +165,21 @@ public class MemberController {
Conds conds = new Conds();
conds.equal("m.del_flag", Constants.DEL_FLAG_0);
conds.equal("m.accounts_id", accountsId);
if(member.getStatus().equals("1")){ //注册会员
conds.isNull("m.status");
}else if(member.getStatus().equals("2")){ //虚拟会员
conds.equal("m.status",1);
}
if (!StringUtils.isEmpty(member.getCompan())) {
conds.like("m.compan", member.getCompan());
}
// if(member.getStatus().equals("1")){ //注册会员
// conds.isNull("m.status");
// }else if(member.getStatus().equals("2")){ //虚拟会员
// conds.equal("m.status",1);
// }
// if (!StringUtils.isEmpty(member.getCompan())) {
// conds.like("m.compan", member.getCompan());
// }
if (!StringUtils.isEmpty(member.getName())) {
conds.like("m.name", member.getName());
}
if (!StringUtils.isEmpty(member.getPhone())){
conds.like("m.phone",member.getPhone());
}
Sort sort = new Sort("m.create_time", OrderType.DESC);
......@@ -248,45 +256,58 @@ public class MemberController {
@RequestMapping("/exportExcel")
@RequiresPermissions(value = MEMBER_VIEW)
public void exportExcel(HttpServletRequest request, HttpServletResponse response,Member member) {
public void exportExcel(HttpServletRequest request, HttpServletResponse response,Member member) throws ParseException {
Long accountsId = UserUtils.getmpaccounts(request);
Conds conds = new Conds();
conds.equal("m.del_flag", Constants.DEL_FLAG_0);
conds.equal("m.accounts_id", accountsId);
if(member.getStatus().equals("1")){ //注册会员
conds.isNull("m.status");
}else if(member.getStatus().equals("2")){ //虚拟会员
conds.equal("m.status",1);
}
if (!StringUtils.isEmpty(member.getCompan())) {
conds.like("m.compan", member.getCompan());
}
if (!StringUtils.isEmpty(member.getName())) {
conds.like("m.name", member.getName());
}
// if(member.getStatus().equals("1")){ //注册会员
// conds.isNull("m.status");
// }else if(member.getStatus().equals("2")){ //虚拟会员
// conds.equal("m.status",1);
// }
// if (!StringUtils.isEmpty(member.getCompan())) {
// conds.like("m.compan", member.getCompan());
// }
// if (!StringUtils.isEmpty(member.getName())) {
// conds.like("m.name", member.getName());
// }
Sort sort = new Sort("m.create_time", OrderType.DESC);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
List<MemberDto> list = memberService.selectmemberDto(conds, sort, 0, 0);
if(list.size()>0){
for(MemberDto memberDto:list){
if(memberDto.getStatus()==null){
memberDto.setStatus("注册会员");
if(memberDto.getSex().equals("1")){
memberDto.setSex("男");
}else if(memberDto.getSex().equals("0")){
memberDto.setSex("女");
}
}else{
memberDto.setStatus("虚拟会员");
if (list.size() > 0) {
for (MemberDto memberDto : list) {
// if(memberDto.get==null){
// memberDto.setStatus("注册会员");
// if(memberDto.getSex().equals("1")){
// memberDto.setSex("男");
// }else if(memberDto.getSex().equals("0")){
// memberDto.setSex("女");
// }
// }else{
// memberDto.setStatus("虚拟会员");
// }
if ("1".equals(memberDto.getSex())) {
memberDto.setSex("男");
} else if ("0".equals(memberDto.getSex())) {
memberDto.setSex("女");
}
if ("1".equals(memberDto.getSource())) {
memberDto.setSource("普通关注");
} else if ("2".equals(memberDto.getSource())) {
memberDto.setSource("药师二维码");
} else if ("3".equals(memberDto.getSource())) {
memberDto.setSource("客服二维码");
}
Date parse = simpleDateFormat.parse(memberDto.getCreateTime());
memberDto.setCreateTime(simpleDateFormat.format(parse));
}
}
// 生成Excel并使用浏览器下载
ExcelKit.$Export(MemberDto.class, response).toExcel(list, "会员信息");
// 生成Excel并使用浏览器下载
ExcelKit.$Export(MemberDto.class, response).toExcel(list, "会员信息");
}
}
}
......@@ -146,7 +146,7 @@
onkeydown="if(event.keyCode==13){return false;}">
<div class="col-xs-1">
<input type="text" class="form-control required"
placeholder="粉丝昵称" name="nickname"
placeholder="昵称" name="nickname"
value="$!{mpFanssEntity.nickname}">
</div>
<div class="col-xs-1">
......@@ -195,10 +195,10 @@
href="javascript:void(0)" onclick="syn(this)"
class="btn bg-olive">同步粉丝</a>
#end
#if($shiro.hasPermission("mp:fanss:edit")) <a id="batchFanssTag"
href="javascript:void(0)"
class="btn bg-olive">批量打标签</a>
#end
<!-- #if($shiro.hasPermission("mp:fanss:edit")) <a id="batchFanssTag"-->
<!-- href="javascript:void(0)"-->
<!-- class="btn bg-olive">批量打标签</a>-->
<!-- #end-->
<button style="width: 100px;" type="submit"
class="btn btn-primary" id="export">导出
</button>
......@@ -217,10 +217,10 @@
<th>省份</th>
<th>城市</th>
<th>昵称</th>
<th>标签</th>
<!-- <th>标签</th>-->
<th>粉丝来源</th>
<th>关注日期</th>
<th>操作</th>
<!-- <th>操作</th>-->
</tr>
</thead>
<tbody>
......@@ -365,29 +365,31 @@
// $("#downloadtemplate").click(function(){//下载导入模板
// var host = "http://"+window.location.host;
// var url=host+"/cfwechat/static/batchfanss.xlsx";
// window.location.href=url;
// })
url = "#springUrl('/a/fanssgroup/fetchdata')";
$.ajax({
"type": "get",
"contentType": "application/json",
"url": url,
"dataType": "json",
"data": {
iDisplayStart: 0,
iDisplayLength: 0
},
"success": function (data) {
data = data.aaData;
for (var i = 0; i < data.length; i++) {
$("#addlabel").append('<option value="' + data[i].groupid + '" data-attr="">' + data[i].name + '</option>')
}
}
});
// url = "#springUrl('/a/fanssgroup/fetchdata')";
// $.ajax({
// "type": "get",
// "contentType": "application/json",
// "url": url,
// "dataType": "json",
// "data": {
// iDisplayStart: 0,
// iDisplayLength: 0
// },
// "success": function (data) {
// data = data.aaData;
// for (var i = 0; i < data.length; i++) {
// $("#addlabel").append('<option value="' + data[i].groupid + '" data-attr="">' + data[i].name + '</option>')
// }
// }
// });
$("#tagCacel").click(function () {
$("#addlabelModal").modal('hide');
......@@ -404,18 +406,18 @@
var importExcelUrl = "#springUrl('/a/managefanss/batchFanss')?_csrf_header=" + csrfheader.value + "&_csrf=" + csrftoken.value;
Cfapp.importExcel({
title: '批量打标签',
importurl: importExcelUrl,
templateurl: templateExcelUrl,
cancel: function () {
},
success: function () {
//alert(data.retJson.errorNo)
location.href = "#springUrl('/a/managefanss/fansslist')";
}
});
// Cfapp.importExcel({
// title: '批量打标签',
// importurl: importExcelUrl,
// templateurl: templateExcelUrl,
// cancel: function () {
//
// },
// success: function () {
// //alert(data.retJson.errorNo)
// location.href = "#springUrl('/a/managefanss/fansslist')";
// }
// });
}
......@@ -473,52 +475,13 @@
{"mData": "headimgurl"},
{"mData": "sex"},
{"mData": "openid"},
{
"mData": "province",
"mRender": function (a, b, c, d) {//a表示id对应的值,c表示当前记录行对象
if (a) {
return a;
} else {
return "";
}
}
},
{
"mData": "city",
"mRender": function (a, b, c, d) {//a表示id对应的值,c表示当前记录行对象
if (a) {
return a;
} else {
return "";
}
}
},
{"mData": "province"},
{"mData": "city"},
{"mData": "nickname"},
{
"mData": "tags",
"mRender": function (a, b, c, d) {//a表示id对应的值,c表示当前记录行对象
if (a) {
return a;
} else {
return "";
}
}
},
{
"mData": "source",
"mRender": function (a, b, c, d) {//a表示id对应的值,c表示当前记录行对象
if (a == '1') {
return "研讨会二维码";
} else if (a == '2') {
return "展会二维码";
} else if (a == '3') {
return "活动车辆";
} else {
return "普通关注";
}
}
}
],
{"mData": "source"},
{"mData": "subscribetime"}
],
"aoColumnDefs": [
{ // set default column settings
'visible': false,
......@@ -527,7 +490,6 @@
{
"targets": [1],
"mData": "headimgurl",
"className": "piccenter",
"mRender": function (a, b, c, d) {
//a表示id对应的值,c表示当前记录行对象
return '<img width="45px" height="45px" src="' + a + '" />';
......@@ -558,18 +520,50 @@
}
},
{
"aTargets": [9],
"mData": "subscribetime",
"targets": [3],
"mData": "openid",
"mRender": function (a, b, c, d) {//a表示id对应的值,c表示当前记录行对象
return a;
}
},
{
"aTargets": [4],
"mData": "province",
"mRender": function (a, b, c, d) {//a表示createtime对应的值,c表示当前记录行对象
return a;
}
}, {
"aTargets": [5],
"mData": "city",
"mRender": function (a, b, c, d) {//a表示createtime对应的值,c表示当前记录行对象
return a;
}
}
, {
"aTargets": [6],
"mData": "nickname",
"mRender": function (a, b, c, d) {//a表示createtime对应的值,c表示当前记录行对象
return formatDates(a, "yyyy-MM-dd hh:mm:ss");
return a;
}
}
, {
"aTargets": [7],
"mData": "source",
"mRender": function (a, b, c, d) {//a表示createtime对应的值,c表示当前记录行对象
if (a==1){
return "普通关注";
}else if (a==2){
return "医师二维码";
}else if (a==3){
return "客服二维码";
}
}
}, {
"aTargets": [10],
"mData": "id",
"aTargets": [8],
"mData": "subscribetime",
"mRender": function (a, b, c, d) {//a表示createtime对应的值,c表示当前记录行对象
console.log(c);
return '#if($shiro.hasPermission("mp:fanss:edit"))' + '<a href="javascript:void(0)"; data-attr="' + c.id + '" data-tag="' + c.taglist + '" onclick="addlabel(this)" class="btn red">修改标签</a>' +
'#else <a href="javascript:void(0)"; data-attr="' + c.id + '" data-tag="' + c.taglist + '" class="btn red">修改标签</a>#end';
return formatDates(a, "yyyy-MM-dd HH:mm:ss");
}
}]//,
// {
......
package com.cftech.mp.fans.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cftech.accounts.service.MpAccountsService;
import com.cftech.core.poi.ExcelKit;
import com.cftech.core.scope.OrderType;
import com.cftech.core.sql.Conds;
import com.cftech.core.sql.Sort;
import com.cftech.core.util.*;
import com.cftech.mp.fans.model.Fanssgroup;
import com.cftech.mp.fans.model.MpFanssEntity;
import com.cftech.mp.fans.model.MpFanssVO;
import com.cftech.mp.fans.service.FanssgroupService;
import com.cftech.mp.fans.service.MpFanssService;
import com.cftech.sys.security.PermissionSign;
import com.cftech.sys.security.UserUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.velocity.runtime.directive.Foreach;
import org.mp.api.core.exception.WexinReqException;
import org.mp.api.core.req.model.user.BatchUserTag;
import org.mp.api.wxuser.tag.JwTagAPI;
......@@ -31,323 +35,337 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* @author lisw
*
*/
@Controller
@RequestMapping(value = "/a/managefanss")
public class MpFanssController {
private static Logger logger = LoggerFactory
.getLogger(MpFanssController.class);
private static Logger logger = LoggerFactory
.getLogger(MpFanssController.class);
@Autowired
private MpFanssService mpAccountsService;
@Autowired
private MpAccountsService mpAccountService;
@Autowired
private MpFanssService mpAccountsService;
@Autowired
private MpAccountsService mpAccountService;
@Autowired
private FanssgroupService fanssGroupService;
@Autowired
private FanssgroupService fanssGroupService;
@Autowired
private MpTokenUtil tokenUtil;
@Autowired
private MpTokenUtil tokenUtil;
// 管理后台用户列表
@RequestMapping(value = "/fansslist",method = {RequestMethod.POST,RequestMethod.GET})
public String useradd(HttpServletRequest request,
HttpServletResponse response, MpFanssEntity mpFanssEntity,
String areaname, String startTime, String endTime, Model model) {
model.addAttribute("areaname", areaname);
model.addAttribute("startTime", startTime);
model.addAttribute("endTime", endTime);
model.addAttribute("mpFanssEntity", mpFanssEntity);
// 管理后台用户列表
@RequestMapping(value = "/fansslist", method = {RequestMethod.POST, RequestMethod.GET})
public String useradd(HttpServletRequest request,
HttpServletResponse response, MpFanssEntity mpFanssEntity,
String areaname, String startTime, String endTime, Model model) {
model.addAttribute("areaname", areaname);
model.addAttribute("startTime", startTime);
model.addAttribute("endTime", endTime);
model.addAttribute("mpFanssEntity", mpFanssEntity);
return "managefans/fansslist";
}
return "managefans/fansslist";
}
// 管理后台用户列表
@RequestMapping(value = "/accountsaddform",method = {RequestMethod.POST,RequestMethod.GET})
public String accountsaddform(HttpServletRequest request,
HttpServletResponse response) {
return "manageaccounts/accountsadd";
}
// 管理后台用户列表
@RequestMapping(value = "/accountsaddform", method = {RequestMethod.POST, RequestMethod.GET})
public String accountsaddform(HttpServletRequest request,
HttpServletResponse response) {
return "manageaccounts/accountsadd";
}
// 获取数据
@RequestMapping(value = "/fanss/fetchdata",method = {RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public JSONObject getUsers(int iDisplayStart, int iDisplayLength,
HttpServletResponse response, HttpServletRequest request,
String areaname, String startTime, String endTime,
MpFanssEntity mpFanssEntity) {
Long id = UserUtils.getmpaccounts(request);
Sort sort = new Sort("subscribetime", OrderType.DESC);
Conds conds = new Conds();
if (StringUtils.isNotBlank(mpFanssEntity.getSource())) {
conds.equal("source", mpFanssEntity.getSource());
}
if (StringUtils.isNotBlank(mpFanssEntity.getNickname())) {
conds.like("nickname", mpFanssEntity.getNickname());
}
if (StringUtils.isNotBlank(startTime)) {
conds.greatEqual("subscribetime", startTime);
}
if (StringUtils.isNotBlank(endTime)) {
conds.lessEqual("subscribetime", endTime);
}
conds.equal("mpaccountid", id);
conds.equal("delflag", Constants.DEL_FLAG_0);
JSONObject returnObj = new JSONObject();
List<MpFanssEntity> users = null;
int userCounts = 0;
if (StringUtils.isNoneBlank(areaname)) {
users = mpAccountsService.fetchSearchByPage(conds, sort,
iDisplayStart, iDisplayLength, areaname);
userCounts = mpAccountsService.count(conds, areaname);
} else {
users = mpAccountsService.fetchSearchByPage(conds, sort,
iDisplayStart, iDisplayLength);
userCounts = mpAccountsService.count(conds);
}
returnObj.put("iTotalRecords", userCounts);
returnObj.put("iTotalDisplayRecords", userCounts);
returnObj.put("aaData",users);
return returnObj;
// 获取数据
@RequestMapping(value = "/fanss/fetchdata", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public JSONObject getUsers(int iDisplayStart, int iDisplayLength,
HttpServletResponse response, HttpServletRequest request,
String areaname, String startTime, String endTime,
MpFanssEntity mpFanssEntity) {
Long id = UserUtils.getmpaccounts(request);
Sort sort = new Sort("subscribetime", OrderType.DESC);
Conds conds = new Conds();
if (StringUtils.isNotBlank(mpFanssEntity.getSource())) {
conds.equal("source", mpFanssEntity.getSource());
}
if (StringUtils.isNotBlank(mpFanssEntity.getNickname())) {
conds.like("nickname", mpFanssEntity.getNickname());
}
if (StringUtils.isNotBlank(startTime)) {
conds.greatEqual("subscribetime", startTime);
}
if (StringUtils.isNotBlank(endTime)) {
conds.lessEqual("subscribetime", endTime);
}
conds.equal("mpaccountid", id);
conds.equal("delflag", Constants.DEL_FLAG_0);
JSONObject returnObj = new JSONObject();
List<MpFanssEntity> users = null;
int userCounts = 0;
if (StringUtils.isNoneBlank(areaname)) {
users = mpAccountsService.fetchSearchByPage(conds, sort,
iDisplayStart, iDisplayLength, areaname);
userCounts = mpAccountsService.count(conds, areaname);
} else {
users = mpAccountsService.fetchSearchByPage(conds, sort,
iDisplayStart, iDisplayLength);
userCounts = mpAccountsService.count(conds);
}
returnObj.put("iTotalRecords", userCounts);
returnObj.put("iTotalDisplayRecords", userCounts);
returnObj.put("aaData", users);
return returnObj;
// OutputJSONUtil.convertoJSONStream(response, returnObj.toString());
}
}
// 粉丝列表导出
@RequestMapping(value = "/fanss/export",method = {RequestMethod.POST,RequestMethod.GET})
public void export(HttpServletResponse response,
HttpServletRequest request, MpFanssEntity mpFanssEntity,
String areaname, String startTime, String endTime) {
Long id = UserUtils.getmpaccounts(request);
Sort sort = new Sort("t.subscribetime", OrderType.DESC);
Conds conds = new Conds();
if (StringUtils.isNotBlank(mpFanssEntity.getNickname())) {
conds.like("t.nickname", mpFanssEntity.getNickname());
}
if (StringUtils.isNotBlank(startTime)) {
conds.greatEqual("t.subscribetime", startTime);
}
if (StringUtils.isNotBlank(endTime)) {
conds.lessEqual("t.subscribetime", endTime);
}
conds.equal("mpaccountid", id);
conds.equal("delflag", Constants.DEL_FLAG_0);
try {
List<MpFanssEntity> users = null;
if (StringUtils.isNoneBlank(areaname)) {
users = mpAccountsService.fetchSearchByPageStore(conds, sort, 0, 0,
areaname);
} else {
users = mpAccountsService.fetchSearchByPageStore(conds, sort, 0, 0,
null);
}
// 参数
ExcelUtils.export(request, response,
"粉丝列表-" + DateUtils.formatDate(new Date(), "yyyy-MM-dd"),
users, "fans");
} catch (Exception e) {
e.printStackTrace();
}
}
// 粉丝列表导出
@RequestMapping(value = "/fanss/export", method = {RequestMethod.POST, RequestMethod.GET})
public void export(HttpServletResponse response,
HttpServletRequest request, MpFanssEntity mpFanssEntity,
String areaname, String startTime, String endTime) {
Long id = UserUtils.getmpaccounts(request);
Sort sort = new Sort("t.subscribetime", OrderType.DESC);
Conds conds = new Conds();
if (StringUtils.isNotBlank(mpFanssEntity.getNickname())) {
conds.like("t.nickname", mpFanssEntity.getNickname());
}
if (StringUtils.isNotBlank(startTime)) {
conds.greatEqual("t.subscribetime", startTime);
}
if (StringUtils.isNotBlank(endTime)) {
conds.lessEqual("t.subscribetime", endTime);
}
conds.equal("mpaccountid", id);
conds.equal("delflag", Constants.DEL_FLAG_0);
try {
List<MpFanssEntity> users = mpAccountsService.fetchSearchByPageStore(conds, sort, 0, 0,
null);
LinkedList<MpFanssVO> list = new LinkedList<>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
for ( MpFanssEntity fanssEntity : users) {
MpFanssVO mpFanssVO = new MpFanssVO();
mpFanssVO.setHeadimgurl(fanssEntity.getHeadimgurl());
mpFanssVO.setSex(fanssEntity.getSex().equals(1) ? "男" : "女");
mpFanssVO.setOpenid(fanssEntity.getOpenid());
mpFanssVO.setProvince(fanssEntity.getProvince());
mpFanssVO.setCity(fanssEntity.getCity());
mpFanssVO.setNickname(fanssEntity.getNickname());
mpFanssVO.setSource(fanssEntity.getSource().equals("1") ? "普通关注" : fanssEntity.getSource().equals("2") ? "医师二维码" : "客服二维码");
mpFanssVO.setSubscribetime( simpleDateFormat.format(fanssEntity.getSubscribetime()));
list.add(mpFanssVO);
// 修改账户
@RequestMapping(value = "/updateaccounts",method = {RequestMethod.POST})
public JSONObject updateaccounts(MpFanssEntity accounts,
HttpServletResponse response) {
JSONObject returnObj = new JSONObject();
accounts.setUpdatetime(new Date());
returnObj.put("errorCode", 0);
mpAccountsService.updateByPrimaryKey(accounts);
}
ExcelKit.$Export(MpFanssVO.class,response).toExcel(list,"粉丝列表");
// if (StringUtils.isNoneBlank(areaname)) {
// users = mpAccountsService.fetchSearchByPageStore(conds, sort, 0, 0,
// areaname);
// } else {
// users = mpAccountsService.fetchSearchByPageStore(conds, sort, 0, 0,
// null);
// }
// 参数
} catch (Exception e) {
e.printStackTrace();
}
}
// 修改账户
@RequestMapping(value = "/updateaccounts", method = {RequestMethod.POST})
public JSONObject updateaccounts(MpFanssEntity accounts,
HttpServletResponse response) {
JSONObject returnObj = new JSONObject();
accounts.setUpdatetime(new Date());
returnObj.put("errorCode", 0);
mpAccountsService.updateByPrimaryKey(accounts);
// OutputJSONUtil.convertoJSONStream(response, returnObj.toString());
return returnObj;
}
return returnObj;
}
// 修改账户
@RequestMapping(value = "/deleteaccounts",method = {RequestMethod.POST})
public JSONObject deleteaccounts(MpFanssEntity accounts,
HttpServletResponse response) {
JSONObject returnObj = new JSONObject();
returnObj.put("errorCode", 0);
mpAccountsService.deleteByPrimaryKey(accounts.getId());
// 修改账户
@RequestMapping(value = "/deleteaccounts", method = {RequestMethod.POST})
public JSONObject deleteaccounts(MpFanssEntity accounts,
HttpServletResponse response) {
JSONObject returnObj = new JSONObject();
returnObj.put("errorCode", 0);
mpAccountsService.deleteByPrimaryKey(accounts.getId());
// OutputJSONUtil.convertoJSONStream(response, returnObj.toString());
return returnObj;
}
return returnObj;
}
// 获取详细信息
@RequestMapping(value = "/getaccountdetail",method = {RequestMethod.POST,RequestMethod.GET})
public String getaccountdetail(Long id, HttpServletResponse response,
Model model) {
MpFanssEntity accountsEntity = mpAccountsService.getDetail(id);
model.addAttribute("accountsEntity", accountsEntity);
return "manageaccounts/detail";
}
// 获取详细信息
@RequestMapping(value = "/getaccountdetail", method = {RequestMethod.POST, RequestMethod.GET})
public String getaccountdetail(Long id, HttpServletResponse response,
Model model) {
MpFanssEntity accountsEntity = mpAccountsService.getDetail(id);
model.addAttribute("accountsEntity", accountsEntity);
return "manageaccounts/detail";
}
// 根据当前微信公众号, 同步所有用户
@ResponseBody
@RequestMapping(value = "/synAllFans",method = {RequestMethod.POST})
public JSONObject synAllFans(HttpServletRequest request)
throws WexinReqException {
JSONObject rtnJosn = new JSONObject();
try {
Long id = UserUtils.getmpaccounts(request);
// 根据当前微信公众号, 同步所有用户
@ResponseBody
@RequestMapping(value = "/synAllFans", method = {RequestMethod.POST})
public JSONObject synAllFans(HttpServletRequest request)
throws WexinReqException {
JSONObject rtnJosn = new JSONObject();
try {
Long id = UserUtils.getmpaccounts(request);
String accessToken = tokenUtil.getToken(id);
// 根据账号查询所有粉丝
if (id != null) {
List<Wxuser> users = JwUserAPI.getAllWxuser(accessToken, null);// 得到微信官方实际的关注粉丝
MpFanssEntity fannsIsexits = null;
List<String> fanssList = mpAccountsService.getAllWxUser(id
.toString());
for (Wxuser user : users) {
try {
MpFanssEntity fannsEntity = new MpFanssEntity();
fannsEntity.setHeadimgurl(user.getHeadimgurl());
fannsEntity.setCity(user.getCity());
fannsEntity.setProvince(user.getProvince());
fannsEntity.setNickname(user.getNickname());
fannsEntity.setMpaccountid(id);
fannsEntity.setOpenid(user.getOpenid());
fannsEntity.setSex(user.getSex());
fannsEntity.setSubscribetime(new Date(Long
.parseLong(user.getSubscribe_time()) * 1000));
fannsEntity.setUnionid(user.getUnionid());
String tags = "";
if(user.getTagid_list()!=null && user.getTagid_list().size()>0){
tags=StringUtils.join(user.getTagid_list(), ",")+",";
}
fannsEntity.setTaglist(tags);
fannsIsexits = mpAccountsService.getWxUser(user.getOpenid());
if (fannsIsexits != null) {// 修改
mpAccountsService.updateByOpenId(fannsEntity);
fanssList.remove(user.getOpenid());
} else {// 插入
fannsEntity.setSource("0");
mpAccountsService.insert(fannsEntity);
fanssList.remove(user.getOpenid());
}
} catch (Exception e) {
e.printStackTrace();
logger.info(user.getNickname());
}
}
// 如果存在取消关注的粉丝,则删除数据库中的粉丝
if (fanssList != null && !fanssList.isEmpty()) {
for (String s : fanssList) {
mpAccountsService.deleteByOpenId(s);
}
}
}
rtnJosn.put("errorCode", 0);
} catch (Exception e) {
e.printStackTrace();
rtnJosn.put("errorCode", 1);
}
return rtnJosn;
}
String accessToken = tokenUtil.getToken(id);
// 根据账号查询所有粉丝
if (id != null) {
List<Wxuser> users = JwUserAPI.getAllWxuser(accessToken, null);// 得到微信官方实际的关注粉丝
MpFanssEntity fannsIsexits = null;
List<String> fanssList = mpAccountsService.getAllWxUser(id
.toString());
for (Wxuser user : users) {
try {
MpFanssEntity fannsEntity = new MpFanssEntity();
fannsEntity.setHeadimgurl(user.getHeadimgurl());
fannsEntity.setCity(user.getCity());
fannsEntity.setProvince(user.getProvince());
fannsEntity.setNickname(user.getNickname());
fannsEntity.setMpaccountid(id);
fannsEntity.setOpenid(user.getOpenid());
fannsEntity.setSex(user.getSex());
fannsEntity.setSubscribetime(new Date(Long
.parseLong(user.getSubscribe_time()) * 1000));
fannsEntity.setUnionid(user.getUnionid());
String tags = "";
if (user.getTagid_list() != null && user.getTagid_list().size() > 0) {
tags = StringUtils.join(user.getTagid_list(), ",") + ",";
}
fannsEntity.setTaglist(tags);
fannsIsexits = mpAccountsService.getWxUser(user.getOpenid());
if (fannsIsexits != null) {// 修改
mpAccountsService.updateByOpenId(fannsEntity);
fanssList.remove(user.getOpenid());
} else {// 插入
fannsEntity.setSource("0");
mpAccountsService.insert(fannsEntity);
fanssList.remove(user.getOpenid());
}
} catch (Exception e) {
e.printStackTrace();
logger.info(user.getNickname());
}
}
// 如果存在取消关注的粉丝,则删除数据库中的粉丝
if (fanssList != null && !fanssList.isEmpty()) {
for (String s : fanssList) {
mpAccountsService.deleteByOpenId(s);
}
}
}
rtnJosn.put("errorCode", 0);
} catch (Exception e) {
e.printStackTrace();
rtnJosn.put("errorCode", 1);
}
return rtnJosn;
}
@RequestMapping(value="/batchFanss",method=RequestMethod.POST)
@ResponseBody
public JSONObject batchFanss(MultipartFile file,HttpServletRequest request){
JSONObject rtnJson = new JSONObject();
StringBuffer errorBuffer = new StringBuffer();
if(file!=null){
try {
List<List<Object>> list = ImportExcelUtil.getBankListByExcel(file.getInputStream(),file.getOriginalFilename());
for(int i =0;i<list.size();i++){
List<Object> objList = list.get(i);
String openId=null;
String tag=null;
if(objList==null || objList.size()==0)errorBuffer.append("第"+(i+1)+"条数据为空");
if(objList.get(0)==null || StringUtils.isBlank(objList.get(0).toString())){//openid为空
errorBuffer.append("第"+(i+1)+"条数据,粉丝openId为空");
continue;
}else{
openId=objList.get(0).toString();
}
if(objList.get(1)==null || StringUtils.isBlank(objList.get(1).toString())){//标签为空
errorBuffer.append("第"+(i+1)+"条数据,标签为空");
continue;
}else{
tag=objList.get(1).toString();
}
String [] newtags = tag.split(",");//新标签
Conds fanssConds = new Conds();
fanssConds.equal("delflag", 0);
fanssConds.equal("openid", openId);
fanssConds.equal("mpaccountid", UserUtils.getmpaccounts(request));
MpFanssEntity fanss=mpAccountsService.fetchSearchByConds(fanssConds);
if(fanss!=null){
if(fanss.getTaglist()==null){
fanss.setTaglist("");
}
String [] tags = fanss.getTaglist().split(",");//此粉丝旧标签
Conds conds = new Conds();
conds.equal("delflag", 0);
conds.equal("accountsid", UserUtils.getmpaccounts(request));
conds.in("name", newtags);
List<Fanssgroup> groupList = fanssGroupService.fetchSearchByPage(conds, null, 0, 0);
String groups="";
for(Fanssgroup g : groupList){
groups+=g.getGroupid()+",";
}
if((tags.length+newtags.length)>20){
// fanss.setTaglist(groups);
errorBuffer.append("第"+(i+1)+"条数据,粉丝标签超过20,openId为:"+openId);
continue;
}else{//如果此粉丝标签加上本次的新标签未超过20个,追加旧标签
groups=fanss.getTaglist()+groups;
}
List<String> result = Arrays.asList(groups.split(","));
@RequestMapping(value = "/batchFanss", method = RequestMethod.POST)
@ResponseBody
public JSONObject batchFanss(MultipartFile file, HttpServletRequest request) {
JSONObject rtnJson = new JSONObject();
StringBuffer errorBuffer = new StringBuffer();
if (file != null) {
try {
List<List<Object>> list = ImportExcelUtil.getBankListByExcel(file.getInputStream(), file.getOriginalFilename());
for (int i = 0; i < list.size(); i++) {
List<Object> objList = list.get(i);
String openId = null;
String tag = null;
if (objList == null || objList.size() == 0) errorBuffer.append("第" + (i + 1) + "条数据为空");
if (objList.get(0) == null || StringUtils.isBlank(objList.get(0).toString())) {//openid为空
errorBuffer.append("第" + (i + 1) + "条数据,粉丝openId为空");
continue;
} else {
openId = objList.get(0).toString();
}
if (objList.get(1) == null || StringUtils.isBlank(objList.get(1).toString())) {//标签为空
errorBuffer.append("第" + (i + 1) + "条数据,标签为空");
continue;
} else {
tag = objList.get(1).toString();
}
String[] newtags = tag.split(",");//新标签
Conds fanssConds = new Conds();
fanssConds.equal("delflag", 0);
fanssConds.equal("openid", openId);
fanssConds.equal("mpaccountid", UserUtils.getmpaccounts(request));
MpFanssEntity fanss = mpAccountsService.fetchSearchByConds(fanssConds);
if (fanss != null) {
if (fanss.getTaglist() == null) {
fanss.setTaglist("");
}
String[] tags = fanss.getTaglist().split(",");//此粉丝旧标签
Conds conds = new Conds();
conds.equal("delflag", 0);
conds.equal("accountsid", UserUtils.getmpaccounts(request));
conds.in("name", newtags);
List<Fanssgroup> groupList = fanssGroupService.fetchSearchByPage(conds, null, 0, 0);
String groups = "";
for (Fanssgroup g : groupList) {
groups += g.getGroupid() + ",";
}
if ((tags.length + newtags.length) > 20) {
// fanss.setTaglist(groups);
errorBuffer.append("第" + (i + 1) + "条数据,粉丝标签超过20,openId为:" + openId);
continue;
} else {//如果此粉丝标签加上本次的新标签未超过20个,追加旧标签
groups = fanss.getTaglist() + groups;
}
List<String> result = Arrays.asList(groups.split(","));
Set<String> set = new HashSet<String>();
set.addAll(result);
groups = StringUtils.join(set, ",")+",";
Set<String> set = new HashSet<String>();
set.addAll(result);
groups = StringUtils.join(set, ",") + ",";
Map<String,Object> params = new HashMap<String, Object>();
params.put("openid", openId);
params.put("taglist", groups);
params.put("accountsId", UserUtils.getmpaccounts(request));
try {
mpAccountsService.updateLabelByid(params);
errorBuffer.append("第"+(i+1)+"条数据导入成功,openId:"+openId+",标签:"+tag);
} catch (Exception e) {
errorBuffer.append("第"+(i+1)+"条数据发生异常,异常信息:"+e.getMessage());
continue;
}
}else{
errorBuffer.append("第"+(i+1)+"条数据,OpenId为找到粉丝信息");
}
//fanssGroupService
}
System.out.println(list);
} catch (IOException e) {
rtnJson.put("errorNo","2");//未找到文件
// TODO Auto-generated catch block
e.printStackTrace();
return rtnJson;
} catch (Exception e) {
rtnJson.put("errorNo","2");//未找到文件
// TODO Auto-generated catch block
e.printStackTrace();
return rtnJson;
}
}else{
rtnJson.put("errorNo","2");//未找到文件
return rtnJson;
}
rtnJson.put("errorNo","0");
rtnJson.put("errorMsg", "导入成功");
logger.info(errorBuffer.toString());
return rtnJson;
}
Map<String, Object> params = new HashMap<String, Object>();
params.put("openid", openId);
params.put("taglist", groups);
params.put("accountsId", UserUtils.getmpaccounts(request));
try {
mpAccountsService.updateLabelByid(params);
errorBuffer.append("第" + (i + 1) + "条数据导入成功,openId:" + openId + ",标签:" + tag);
} catch (Exception e) {
errorBuffer.append("第" + (i + 1) + "条数据发生异常,异常信息:" + e.getMessage());
continue;
}
} else {
errorBuffer.append("第" + (i + 1) + "条数据,OpenId为找到粉丝信息");
}
//fanssGroupService
}
System.out.println(list);
} catch (IOException e) {
rtnJson.put("errorNo", "2");//未找到文件
// TODO Auto-generated catch block
e.printStackTrace();
return rtnJson;
} catch (Exception e) {
rtnJson.put("errorNo", "2");//未找到文件
// TODO Auto-generated catch block
e.printStackTrace();
return rtnJson;
}
} else {
rtnJson.put("errorNo", "2");//未找到文件
return rtnJson;
}
rtnJson.put("errorNo", "0");
rtnJson.put("errorMsg", "导入成功");
logger.info(errorBuffer.toString());
return rtnJson;
}
//
// @RequestMapping(value = "/batchFanssNew", method = RequestMethod.POST)
......@@ -431,20 +449,20 @@ public class MpFanssController {
// return rtnJson;
// }
//改变粉丝标签
@RequestMapping(value = "/editlabel",method = {RequestMethod.POST})
@RequiresPermissions(value = PermissionSign.FANSS_EDIT)
@ResponseBody
public JSONObject addlabel(HttpServletRequest request,
HttpServletResponse response, Model model,String taglist,Long id){
JSONObject result = new JSONObject();
result.put("errorNo",1);
Map<String,Object> map = new HashMap<String, Object>();
Long accountsId = UserUtils.getmpaccounts(request);
map.put("taglist", taglist+",");
map.put("accountsId", accountsId);
//String openid = mpAccountsService.findopenidById(id);
MpFanssEntity fanssEntity = mpAccountsService.getDetail(id);
//改变粉丝标签
@RequestMapping(value = "/editlabel", method = {RequestMethod.POST})
@RequiresPermissions(value = PermissionSign.FANSS_EDIT)
@ResponseBody
public JSONObject addlabel(HttpServletRequest request,
HttpServletResponse response, Model model, String taglist, Long id) {
JSONObject result = new JSONObject();
result.put("errorNo", 1);
Map<String, Object> map = new HashMap<String, Object>();
Long accountsId = UserUtils.getmpaccounts(request);
map.put("taglist", taglist + ",");
map.put("accountsId", accountsId);
//String openid = mpAccountsService.findopenidById(id);
MpFanssEntity fanssEntity = mpAccountsService.getDetail(id);
// if(fanssEntity.getTaglist()!=null){
// String [] tags = fanssEntity.getTaglist().split(",");
// for(String str : tags){
......@@ -456,18 +474,18 @@ public class MpFanssController {
// }
// }
// }
map.put("openid", fanssEntity.getOpenid());
try {
if(fanssEntity.getOpenid()!=null){
boolean flag = mpAccountsService.updateLabelByid(map);
if(flag){
result.put("errorNo",0);
}
}
} catch (Exception e) {
e.printStackTrace();
result.put("errorNo",1);
}
return result;
}
map.put("openid", fanssEntity.getOpenid());
try {
if (fanssEntity.getOpenid() != null) {
boolean flag = mpAccountsService.updateLabelByid(map);
if (flag) {
result.put("errorNo", 0);
}
}
} catch (Exception e) {
e.printStackTrace();
result.put("errorNo", 1);
}
return result;
}
}
package com.cftech.mp.fans.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.cftech.core.poi.ExportConfig;
import lombok.Data;
import java.util.Date;
/**
* @author :licc
* @date :Created in 2020/9/25 17:07
* @description:
*/
@Data
public class MpFanssVO {
/* 粉丝头像 */
@ExportConfig(value = "粉丝头像", width = 100, showLevel = 1)
private String headimgurl;
/* 性别 */
@ExportConfig(value = "性别", width = 100, showLevel = 1)
private String sex;
/* openid */
@ExportConfig(value = "openid", width = 100, showLevel = 1)
private String openid;
/* 省份 */
@ExportConfig(value = "省份", width = 100, showLevel = 1)
private String province;
/* 城市 */
@ExportConfig(value="城市",width = 100, showLevel = 1)
private String city;
/* 昵称 */
@ExportConfig(value="昵称",width = 100, showLevel = 1)
private String nickname;
/* 粉丝来源 */
@ExportConfig(value="粉丝来源",width = 100, showLevel = 1)
private String source;
/* 关注日期 */
@ExportConfig(value="关注日期",width = 100, showLevel = 1)
private String subscribetime;
}
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